操作系统学习(一)OS启动基于uCore

操作系统学习(一)OS启动基于uCore

BIOS

对于x86-32操作系统,可以访问的内存空间范围为4GB。在计算机启动时,首先进入16位的实模式,可以访问的内存空间为1MB,其中BOIS存储在1MB的空间中,如图所示。
在这里插入图片描述
BIOS位于EEPROM中,完成以下工作:

  1. 基本输入输出的程序
  2. 系统设置信息
  3. 开机后自检程序
  4. 系统自启动程序等

BIOS将加载程序从磁盘的引导扇区(512字节)加载到0x7C00,加载程序(BootLoader)将操作系统加载到内存中,完成操作系统的启动。
QEMU默认使用的BIOS是SeaBIOS,具体内容需要看QEMU源码。1

CPU

CPU上电后从0xFFFF0读取第一条指令,根据CS:IP得到。
第一条指令是一个长跳转指令,有的BIOS IBV这条指令是 Jmp F000:E05Bh,有的则是Jmp F000:FFAAh。不同产商做法不同,都是一条长跳转指令。
CS将被更新成0xF000,表面上看CS其实没变化,但CS的基址域将被更新为0x000F0000h(0xF000左移4位),此时形成的物理地址为Base+EIP=0x000FE50B,而此地址是在1M中的了。0xFFFE0000-0xFFFFFFFF和0xE0000-0xFFFFF这两段物理地址均是会被decode到BIOS 芯片中。2

系统启动流程

由于目前的硬盘可能有多个扇区,BIOS读取加载程序的位置不确定,系统的启动流程如图所示。
在这里插入图片描述
系统上电后,由BIOS初始化硬件,读取主引导扇区上的主引导记录(MBR),主引导记录读取活动分区的引导扇区代码,加载并跳转到磁盘上的引导程序。

加载程序

加载程序(BootLoader)从文件系统中读取启动配置信息,依据配置加载指定内核并跳转到内核执行。
对于X86系统,加载程序完成的工作包括:

  1. 使能保护模式和段机制
  2. 从硬盘上读取kernel并加载到内存中固定位置
  3. 跳转到kernel进行执行,控制权交给OS

后续以uCore的BootLoader和kernel为例进行分析。


  1. https://blog.csdn.net/lindahui2008/article/details/80948396 ↩︎

  2. https://blog.csdn.net/weixin_43858632/article/details/120113231 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值