本文参考 《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》(新设计团队著)
BIOS程序被固化在计算机主机板上的ROM芯片里。设计成加电即进入16位实模式状态运行。同时,还有一点非常关键的是,将CPU硬件逻辑设计为加电瞬间强行将CS的值置0xF000、IP的值置为0xFFF0,这样CS:IP就指向0xFFFF0这个地址位置。
这是一个纯硬件完成的动作!BIOS程序的入口地址恰恰就是0xFFFF0,即BIOS程序第一条指令就设计在这个位置。
BIOS程序在内存最开始的位置(0x00000)用1KB的内在空间(0x0000 - 0x003FF)构建中断向量表,在紧挨着它的位置用256字节的内存空间构建BIOS数据区(0x00400-0x004FF),并在大约57KB以后的位置(0x0E05B)加载了8KB左右的与中断向量表相应的若干中断服务程序。
从现在开始,就要执行真正的boot操作了,即把软盘中的操作系统程序加载至内存。对于Linux0.11操作系统而言,计算机分三批逐次加载操作系统的内核代码。第一批由BIOS中断int 0x19把第一扇区bootsect的内容加载到内存;第二批、第三批在bootsect的指挥下, 分别把其后的4个扇区和随后的240个扇区的内容加载到内存中。