操作系统启动过程

第一阶段:启动扇区

1.在计算机加电以后,硬件电路会初始化设置PC寄存器的值,对于IBM PC而言,IBM公司的硬件工程师用电路将这个寄存器初始化为0xFFFF0。按IBM PC的寻址方式的物理实现是设置CS和IP这两个寄存器的值,记CS=0xFFFF,IP=0x0000。在IBM PC刚一启动时,计算机会首先工作在 实模式 下,实模式下取出指令的具体实现是首先将段寄存器CS的值左移4位再和段内偏移寄存器IP中的值相加后形成一个地址,然后将这个地址放到地址总线上去以取出内存中存放的指令。
计算机厂商为了让整个系统系统有一个固定的起点,在只读存储器中开辟了一块空间,IBM PC的0xFFFF0就指向这个区域。这段ROM被称为 BIOS (basic input output)。其中放置的代码是对基本硬件的测试代码,如对主板、内存等硬件的测试,同时还提供一些让用户调用硬件基本输入输出功能的子程序。
如果硬件测试正常,就利用BIOS的输入功能将启动扇区中的内容读到内存0x7C00地址处,并设寄存器CX=0x7c0,IP=0x0000.
在这里插入图片描述

第二阶段:启动扇区

在引导扇区代码bootsect.s的工作——读入setup、显示系统标志、读入system完成以后,接下来的操作式为初始化做准备,执行setup。根据前面的分析,bootsect.s将setup.s读入到0x90200处,所以要完成system模块时,跳转到这个地址处。现在操作系统开始进入启动的第二阶段:setup

初始化之前的准备工作包括:(1)初始化必备的一些基本参数需要setup阶段获得,比如需要直到内存有多大,磁盘有多大等;(2)将来的操作系统要工作在 保护模式 下,相比较于实模式而言,保护模式下计算机的能力要强大得多。现在需要启动保护模式。总的来说,setup主要做两件事:准备初始化参数,进入保护模式。

首先,setup要获取一些硬件参数,使用得方法还是用BIOS中断,因为现在能使用得设备驱动还指示BIOS。要获知内存大小,需要0x88功能号调用0x15号BIOS中断就能获知拓展内存得大小,单位是KB,返回值要放在寄存器AX中、用指令”mov [0],ax“将尺寸存放在地址0x90000处,将来系统初始化时可以读取这个值来初始化内存管理。

第三阶段

进入保护模式以后要执行的第一段代码heads.s。bootsect将操作系统读入内存,setup读取了一些硬件参数并且启动了保护模式,现在可以对操作系统管理资源的关键数据结构初始化了。但初始化之前准备工作还没做完:(1) 设置中断表 ,因为从现在开始操作系统不再使用BIOS中断了,实际上将system从0x10000挪到0x0地址处,BIOS中断就没办法使用了,因为BIOS中断向量表就放置在0地址处;另外,接管中断时操作系统必须做的事,因为不同操作系统遇到同一个中断时所实施的操作不尽相同(2) 设置GDT表 ,虽然在setup中建立了GDT表,但那时为了执行”jumpi 0,8“而临时建立的,现在进入了system模块,需要重新建立。(3) 设置页表 ,时间上保护模式以后,寻址方式更加复杂,即GDT[CS]+EIP算出的地址仍然不能直接输出到地址总线上,通常还要用这个地址再去查一次页表才能得到真正的”物理地址“并输出到地址总线。

第四阶段

一切准备就绪,操作系统终于可以初始化并开始运转了。C语言函数main()主要完成功能就是初始化各种管理软件资源的数据结构,可以调用各种 初始化函数 来完成相应的初始化工作,比如调用mem_init用来初始化内存,调用hd_init()用来初始化硬盘,其他需要初始化的内容都可以再这里加入Init

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值