资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第四章,PC,机启动原理,引导程序,规则,引导程序具有如下三个特点:,(1),它的大小是,512B,,不能多一个字节也不能少一个字节,因为,BIOS,只读,512B,到内存中去。,(2),它的结尾两字节必须是“,55 AA”,,这是引导扇区的标志。,(3),它总是放在磁盘的第一个扇区上(,0,磁头,,0,磁道,,1,扇区),因为,BIOS,只读这一个扇区。,因为,BIOS,只读一个磁盘扇区,512,个字节的数据到内存中,而现在操作系统核心程序都比较庞大,,512,个字节的空间显然是不够存放。引导扇区里的程序的主要功能是将存储在磁盘上的操作系统的核心程序读进内存,然后再跳转到操作系统的核心程序,去执行操作系统功能。,实模式下的内存使用区间布局,BIOS,的中断处理,中断处理过程图,实模式与保护模式,寻址结构,实模式的寻址,段描述符的格式,图,4.9,保护模式下的地址转换原理图,进入保护模式,80386,有,4,个,32,位控制寄存器,名字分别为,CR0,、,CR1,、,CR2,和,CR3,。这些寄存器仅能够由系统程序通过,MOV,指令访问。格式如图,4.10,所示。,系统要切换到保护模式过程简述如下:,(1),创建,GDT,表;,(2),用,lgdt,命令加载,gdtr,;,(3),启用,A20,地址线;,(4),通过置,CR0,的,PE,位为,1,;,(5),执行跳转,进入保护模式;,进入保护模式,控制寄存器,CR0,包含系统整体的控制标志,它控制或指示出整个系统的运行状态或条件。其中:,PE,保护模式开启位(,Protection Enable,,比特位,0,)。如果设置了该比特位,就会使处理器开始在保护模式下运行。,MP,协处理器存在标志(,Math Present,,比特位,1,)。用于控制,WAIT,指令的功能,以配合协处理器的运行。,EM,仿真控制(,Emulation,,比特位,2,)。指示是否需要仿真协处理器的功能。,TS,任务切换(,Task Switch,,比特位,3,)。每当任务切换时处理器就会设置该比特位,并且在解释协处理器指令之前测试该位。,ET,扩展类型(,Extention Type,,比特位,4,)。该位指出了系统中所含有的协处理器类型(是,80287,还是,80387,)。,PG,分页操作(,Paging,,比特位,31,)。该位指示出是否使用页表将线性地址变换成物理地址。参见第,6,章对分页内存管理的描述。,fd_boot.asm,引导程序功能,fd_boot.bin,代码是磁盘引导块程序,驻留在磁盘的第一个扇区中(引导扇区,,0,磁道(柱面),,0,磁头,第,1,个扇区)。在,PC,机加电,ROM BIOS,自检后,引导扇区由,BIOS,执行,int19H,中断,加载到内存,0 x7C00,处,然后引导扇区程序将自己移动到内存,0 x90000,处。该程序的主要作用是首先将,setup,模块(由,setup.asm,编译得到)从磁盘加载到内存,紧接着,bootsect,的后面位置(,0 x90200,),然后利用,BIOS,中断,0 x13,取磁盘参数表中当前启动引导盘的参数,接着在屏幕上显示“,Loading system.”,字符串。再者将,system,模块从磁盘上加载到内存,0 x10000,开始的地方。随后确定根文件系统的设备号,若没有指定,则根据所保存的引导盘的每磁道扇区数判别出盘的类型和种类(是,1.44M A,盘?)并保存其设备号于,root_dev(,引导块的,0 x508,地址处,),,最后长跳转到,setup,程序的开始处(,0 x90200,)执行,setup,程序。,setup.asm,设置程序功能,setup.asm,程序的作用主要是利用,ROM BIOS,中断读取机器系统数据,并将这些数据保存到相应变量中。这些参数将被内核中相关程序使用。然后,setup.asm,程序为系统进入保护模式做准备:加载中断描述符表寄存器,(idtr),和全局描述符表寄存器,(gdtr),;开启,A20,地址线;重新设置两个中断控制芯片,8259A,;最后设置,CPU,的控制寄存器,CR0,(也称机器状态字),从而进入,32,位保护模式运行;跳转到位于内核程序入口,Main,函数继续运行。为了能让内核程序在,32,位保护模式下运行,在本程序中临时设置了中断描述符表(,idt,)和全局描述符表(,gdt,),并在,gdt,中设置了当前内核代码段的描述符和数据段的描述符。,lowlevel.asm,程序功能,Lowlevel.asm,文件主要是提供底层中断和线程处理的代码。它是一个,32,位代码程序,编译时被链接到内核中。在文件中定义了在,IDT,中要使用的底层中断处理程序入口指针。同时也包含了中断处理代码和线程上下文切换代码。,
展开阅读全文