操作系统的启动过程

第一阶段

计算加电以后,硬件电路会初始化设置PC(program counting)寄存器的值。对于IBM PC而言,初始值为0xFFFF0。PC 的寻址方式PC=0XFFFF0的物理实现是设置 CS(Code segment)IP(instruction Pointer) 两个寄存器的值,即CS=0XFFFF,PC=0X0000。IBM PC刚一启动时,计算机会首先工作在实模式下,实模式下取出指令的具体物理实现实首先将段寄存器CS想做移4为再和段寄存器内偏移寄存器IP中的值相加后形成一个地址,然后将这个地址放到地址总线上去,以取出内存中存放的指令,此处要从0XFFFF0处取出第一条指令开始执行。0XFFFF0指向的这一段区域为BIOS指令,其中放置的代码对基本硬件的测试代码,如对主板、内存等硬件的测试,同时还提供一些让用户调用硬件基本输入输出子程序,如int 0x10。
如果硬件侧式正常,就利用BIOS的输入功能将磁盘上启动扇区的内容读入到内存0x7C00的地址处,并设置寄存器CS=0x07c0,IP=0x0000

第二阶段:setup

在引导扇区代码boostsect.s的工作——读入setup、显示系统标志、读入system完成以后,接下来操作系统要做什么呢?应该式为系统初始化做准备,即执行setup做准备,即执行setup,因此现在要转向去执行setup.s。根据前面的分析,boostsect.s将setup.s读入到0x90200处,所以要在读完system模块时跳转到这个地址,具体来说,要在end_read标号处执行,“jmpi 0,SETUPSEG”。
初始化之前的准备工作主要包括:
(1)初始化必备的一些基本参数需要在setup阶段获得,比如需要知道内存有多大,磁盘有多大等;
(2)将来的操作系统将工作在32位模式(保护模式)下,到现在位置计算机一直工作在16位模式下,相比较于实模式而言,保护模式下计算机的能力强大得多,所以现在需要启动保护模式
IBM PC 32位保护模式下得寻址是这样的设计的:用段寄存器作为索引在一个地址表里找到32位的基址,再和偏移寄存器中存放的32位数值相加,形成最终的地址放到地址总线上去选定内存。地址表通常被称为全局描述符。对于GDT表,这个表的其实地址被存放在GDTR的寄存器中。一旦有了GDT和GDTR,设计一个硬件电路根据CS获取基址;然后再和EIP相加和就很容易了

第三阶段:heads

初始化之前的准备工作:
(1)设置中断表3
(2)设置GDT表
(3)设置页表

第四阶段

调用mem_init()来初始化内存,调用hd_init()来初始化硬盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值