自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 head.s程序详解

更新数据段寄存器与堆栈段寄存器首先,保护模式下把0x10加载到ds es fs gs段寄存器中,就是将setup.s中设置的第2项数据段描述符加载到各段寄存器的隐藏区域。然后,看下kernel/sched.c第69行的内容:说明:lss指令指定的是32位通用寄存器,所以该指令的作用是将存储操作数中低位双字...

2019-03-09 23:17:22 1344

原创 setup.s程序详解

前面已经介绍过了,bootsect.s从软盘中把第2到5扇区的setup.s程序读入到内存0x90200地址处。不清楚的朋友可以参见bootsect详解。那么setup.s到底做了什么呢?第一件事情就是利用BIOS中断程序填下面这张表格的内容:第二件事就是将0x10000(64K)地址到0x8ffff这段system内核代码移动到0地址处。因为我们已经使用完所有的BIOS中断程序,所以...

2019-03-09 10:14:07 3448

原创 bootsect代码解析之system模块搬移

下面继续来看bootsect部分如何搬移system模块到0x10000即64K内存处的:首先将system段的地址0x1000存放到es段寄存器中,然后调用read_it子调用汇编函数。下面来看read_it都做了什么:开始之前,我们先来回顾一下开头的一段话:注意这里,linus说当前系统(这里指system模块)最大8*65536.这个值是64K*8=512K,那么这个51...

2019-03-04 23:09:08 385

原创 bootsect里的设备号问题

设备号的问题,之前已经作为遗留问题了,刚开始的时候是下面:可以看出,作者展示了老式硬盘的命名方式:设备号=主设备号<<8+次设备号(major<<8+minor)对于主设备的定义:1-内存;2-磁盘;3-硬盘;4-ttyx;5-tty;6-并行口;7-非命名管道。所以0x300=3<<8+次设备号;一般来讲一块硬盘有4个分区,所以0x306就是第...

2019-03-02 23:36:19 230

原创 Bootsect代码详解续

下面这段汇编代码是从磁盘第2扇区读取4个扇区2K字节到内存0x90200开始处。使用的是INT 0x13 BIOS中断程序,主要就是学习一下到底该如何调用这个中断程序。JNC:如果CF标志位没有被置位。J就是段内跳转指令。常数用#号打头。读完磁盘4个扇区后,仍然是用INT 0x13中断程序,ah=0x08,dl=0,可以获取到磁盘信息:需要说明的是第86行,因为是使用的软盘...

2019-03-02 22:46:16 282

原创 Bootsect代码详解

首先来看第一条关键汇编指令:rep movw关于这个movw指令,查了网上很多说法,这里我调查的情况是:在INTEL 80386的数据手册中没有movw指令,只有movsw指令。按照之前学习的内容,bootsect使用的是intel的as86汇编器编译,as86的mov语法是mov Destination Source;从第47行的mov语法看确实是as86汇编器语法。而movw是GN...

2019-03-02 16:22:58 1386

原创 Linux引导初始化--代码搬移过程

Bootsect过程应用程序通过int 0x80中断将CPU从用户态USER切换到核心态KERNEL。Linux内核由内存管理模块、进程调度模块、文件系统模块、进程间通信模块和网络接口模块构成。boot目录下三个汇编程序,其中bootsect.s和setup.s使用的是Intel格式的汇编语言编写,编译器需...

2019-02-28 23:16:24 272

原创 中断和异常

中断常用于处理CPU外部的异步事件,异常则是处理CPU在执行过程中检测到的问题。外部中断源有两类,一类是由CPU中断引脚INTR输入的可屏蔽中断另一类是NMI引脚输入的不可屏蔽中断。异常也有两类,一类是由CPU检测到的出错、陷阱或放弃事件,另一类是编程设置的软中断比如int 3.中断和异常编号 NMI引脚输入的不可屏蔽中断 0-31   INTR输入的可屏蔽中断 32-...

2019-02-26 23:33:29 204

原创 Linux多任务相关的TR寄存器和TSS任务状态段数据结构

TR寄存器和TSS任务状态段数据结构可以帮助Linux操作系统快速的完成任务切换并保存原有任务的内容,具体的过程分析如下:                                               任务状态段TSS先来看下任务状态段TSS的结构:如上图所示:整个TSS可分成两类:> 只读静态字段集(图中灰色部分)>每次任务切换时处理器将...

2019-02-24 21:51:00 1222

原创 80386 内存寻址机制

本文主要介绍80386在保护模式下,将分段形式的逻辑地址段选择符:偏移地址(ES:BX)转换成实际的物理内存地址的过程。整个转换分成两个阶段:段转换(逻辑地址转换成线性地址)和页转换(线性地址转换成实际物理地址)。                                                       段转换如上图所示,描述符表是操作系统初始化时,在内存区域创建...

2019-02-24 14:43:55 1213

原创 80386 CPU资源

一、通用寄存器EAX、EBX、ECX、EDX、EBP、ESP、ESI和EDI 8个32位的通用寄存器。通用寄存器结构   AH AL   BH BL   CH CL   DH DL                                       SI                        ...

2019-02-23 22:09:08 527

原创 记一次解BUG的心得感受

今天遇到 了 一个 STP的问题,从测试 现象 来看与之前一个FR的验证过程中表现出来的特征很相似。这种相似性将我引入了一种歧途:怀疑原来的修改有问题。假设你知道第N次修改有潜在的case无法验证。那么这种潜在的风险,会让你下次遇到问题 时,不断的怀疑。可能出问题的地方,一定会出问题,这是软件开发中的铁律。因此,在发现问题N的 时候,解决方案一定要是闭环的。无懈可击的。对于不理解的点,一定要搞清楚...

2018-03-15 22:44:55 285

原创 VMware虚拟机ping不通宿主机的配置过程

 宿主机配置>配置VMnet8共享宿主机网络连接>宿主机IP配置这里的IP地址原来配置 的 是 192.168.1.110,居然不可以。虚拟机配置>这里的虚拟机IP位置为192.168.0.6,网关配置为192.168.0.1.原来配置为 192.168.1.116,网关配置为vmnet8的ip:192.168.1.110,会出现 主机 能ping通虚拟机,反之不通的现象。&gt...

2018-03-12 23:02:59 19219 3

原创 P V操作

信号量的PV操作

2016-06-12 22:26:20 681

原创 嵌入式实时操作系统任务调度算法

任务调度

2016-06-12 22:14:49 2134

原创 C++定义中short int long类型的变量分别占用了几个字节的存储空间

C++定义中short int long类型的变量分别占用了几个字节的存储空间参考:http://www.miss77.net/638.html

2016-06-12 07:10:35 5930

原创 数组名a与数组名取地址&a的差异

数组名a与数组名取地址&a的差异

2016-06-11 21:28:45 598

原创 内存对齐

内存对齐的两个基本原则:一、结构体成员变量的地址偏移量(offset)是对齐参数的整数倍;二、结构体各成员变量所占空间大小之和,是对齐参数的整数倍。这里需要说明的是对齐参数有两种:变量对齐参数和编译器对齐参数变量对齐参数如下表所示:编译器类型 charshortint/float/指针doubleWindows(32位)VC++ 6.

2016-03-08 21:12:16 265

原创 关于艾宾浩斯曲线的一点思考

最近在参加雅思的一个培训班。背单词的时候,想起以前《心理学导论》选修课里曾经提到过艾宾浩斯记忆遗忘曲线。图片来自网络,该曲线x轴是时间,y轴是记忆剩余量,可以用下面的表格来作进一步的描述: 记忆遗忘表格时间间隔记忆量刚记完100%20分钟后58.2%1小时后44.2%8-9小时后35.8%

2015-11-22 22:44:07 1179

原创 归并排序的C语言实现【严蔚敏+算法导论】

算法导论中的实现:#include<stdio.h>void Merge(int *array_ptr,int start,int mid,int end);void Merge_Sort(int *pointer,int start,int end );#define N 2#define M 88888void main(){ int array[N]; int i=

2015-06-05 07:15:23 906

原创 大顶堆排序C实现--【严蔚敏数据结构实现】

#define Heap_Sort#ifdef Heap_Sort#define LT(a,b) (a<b)void HeapAdjust(int *pArr,int s,int m){ int rc = 0; int j = 0; rc = pArr[s]; for(j = 2*s+1;j<m;j=2*j+1) { if(j<m-1&

2015-05-29 07:33:15 710

原创 快速排序的C语言实现【严蔚敏--数据结构】

#define Quick_Sort#ifdef Quick_Sortint partition(int pArr[],int low,int high){ int pivot = pArr[low]; while(low < high) { while(low<high&&pArr[high]>=pivot) high--; pArr[low] =

2015-05-19 22:55:34 1530 1

原创 【shell排序】

shell排序:void ShellInsert(int arr[],int len,int dk){ int j = 0; for(int i = dk + 1;i {  if(arr[i]  {   arr[0] = arr[i];   for(j=i-dk

2015-04-08 20:11:29 319

原创 程序员面试宝典第4版复习备忘

面试准备

2015-03-12 22:57:18 564

原创 基于邻接矩阵的Prim算法(C语言实现)

#include //#include#define INFINITY 1000#define MAX_VERTEX_NUM 20#define ERROR 0#define OK 1typedef enum{DG,DN,UDG,UDN} GraphKind;typedef int VRType;typedef int InfoType;typedef char

2010-04-20 13:35:00 1732

原创 图的邻接矩阵存储(C语言实现)

#include #define INFINITY 1000#define MAX_VERTEX_NUM 20#define ERROR 0#define OK 1typedef enum{DG,DN,UDG,UDN} GraphKind;typedef int VRType;typedef int InfoType;typedef char VertexTpye;

2010-04-18 21:50:00 1295

原创 图的邻接表存储(C语言实现)

#include#include #define Max_VERTEX_NUM 10#define OK 1#define ERROR 0typedef struct ArcNode{ int adjvertex;//该弧指向的顶点在一维数组的位置 struct ArcNode *nextarc;//同样的下一条弧 int weight;//权重} ArcN

2010-04-18 21:36:00 1830 1

转载 getchar()与getch()的区别

  getch         从键盘无回显地读一字符     调用格式   #include                       int   getch(void);     原型在       conio.h     说明           getch从键盘直接读一个字符,不回显到屏幕上。     返回值       getch返回从键盘所读的字符的AscII码。      注: g

2010-04-17 20:22:00 431 1

linux0.11带注解源代码

linux0.11带注解源代码.rar,学习内核的入门必备

2015-07-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除