CPU加电或reset后进入实模式,寻址范围为0x00000-0xFFFFF,总共1M,CS变为0xffff,ip变为0,既固定的从0xffff0开始执行初始引导程序.这段程序放在EPROM中,MS的DOS把基本的设备驱动都放到了EPROM中,称BIOS(基本输入输出).Linux和window都没使用BIOS的驱动,而是在硬件接口和中断响应实现了自己的驱动.
BIOS在初始引导过程读入MBR(硬盘的第一个扇区),跳转到MBR继续执行,MBR中记录了硬盘的分区信息,MBR程序根据活跃的逻辑分区读入该逻辑分区的引导程序(通常由具体操作系统写入),再由该引导程序采取下一步行动.
系统内存分布:
| |
HIGH Memory Area(HMA)
从1M开始的64K减16字节为HMA,把段寄存器设为0xFFFF后可以寻址超过1M,
FFFF:0010 is equivalent to 100000
FFFF:FFFF is equivalent to 10FFEF
Linux引导过程中的内存:
引导扇区被加载到0x7C00处,这段代码将自己搬到0x90000处,0x90000-0xA0000共64K,预留开始64K供BIOS和内核引导使用,还剩下640K基本内存的512K,在这512K顶端预留4K用于引导命令行和传递给内核的数据(BIOS收集),剩下508K基本内存用于内核映像.