在0xfffffff0处是存放着一条长跳转指令,直接跳到bios可执行代码区,而这些代码都是固化在主板上的rom区里的。0xF0000~0xFFFFF被映射到Bios ROM。
BIOS 初始化过程
- BIOS首先会进行POST(power on self test) 上电自检, 检查硬件的好坏 内存地址为0fff:0000
- 查找并检查显卡等接口卡的BIOS,并进行设备的初始化
- 执行系统BIOS,进行系统检测,检测和配置系统即插即用设备
- 更新CMOS中的扩展系统配置数据(ESCD)Extended System Configuration Data,这里保存的是设备资源分配表,每次开机更新是为了应对硬件改动造成与原来的资源分配表冲突.
- 然后按照启动顺序从软盘.硬盘.光驱启动
BIOS加载OS过程
1.MBR将自己复制到内存地址 0000:0600处,然后开始执行
MBR(主引导扇区)位于硬盘的 0 磁道 0 柱面第1扇区,该磁道均为隐含扇区,普通的磁盘访问命令无法访问,改扇区一共512个字节
2.在主分区表中搜索标志为活动的分区. 如果发现没有活动分区或有不止一个活动分区, 则转停止.
MBR 主引导记录:
1.启动代码 :446字节
检查分区表正确性
加载并跳转到硬盘上的引导程序
2.硬盘分区表:64字节
描述分区状态和位置
每个描述信息占据16个字节
3.结束标志55AA[0x55 0xAA]双字节
判断是否合法
3.将活动分区的第一个扇区读入内存地址 0000:7c00 处.
硬盘分区表
BYTE State : 分区状态, 0 = 未激活, 0x80 = 激活 (注意此项)
BYTE StartHead : 分区起始磁头号
WORD StartSC : 分区起始扇区和柱面号, 底字节的低6位为扇区号,
高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
BYTE Type : 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等,
00 表示此项未用
BYTE EndHead : 分区结束磁头号
WORD EndSC : 分区结束扇区和柱面号, 定义同前
DWORD Relative : 在线性寻址方式下的分区相对扇区地址
(对于基本分区即为绝对地址)
DWORD Sectors : 分区大小 (总扇区数)
4. 检查 (WORD) 0000:7dfe 是否等于 0xaa55,若不等于则显示 “Missing Operating System” 然后停止, 或尝试软盘启动.
分区引导扇区格式
JMP:跳转指令
文件卷头:文件系统描述信息
启动代码:跳转到加载程序
结束标志:55AA
5. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
6. 系统启动>>>