分析 bootloader 进入保护模式的过程
bootasm.S从16-56行:实现了:开启A20,初始化GDT表,使能并进入保护模式
(1) 实模式
在 bootloader 接手 BIOS 的工作后,当前的 PC 系统处于实模式(16 位模式)运行状态,在这种状态下软件可访问的物理内存空间不能超过 1MB,且无法发挥 Intel 80386 以上级别的 32 位 CPU 的 4GB 内存管理能力。
实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,操作系统和用户程序并没有区别对待,而且每一个指针都是指向实际的物理地址。这样,用户程序的一个指针如果指向了操作系统区域或其他用户程序区域,并修改了内容,那么其后果就很可能是灾难性的。通过修改 A20 地址线可以完成从实模式到保护模式的转换。
(2) 保护模式
只有在保护模式下,80386 的全部 32 根地址线有效,可寻址高达 4G 字节的线性地址空间和物理地址空间,可访问 64TB(有 214个段,每个段最大空间为 2^32 字节)的逻辑地址空间,可采用分段存储管理机制和分页存储管理机制。这不仅为存储共享和保护提供了硬件支持,而且为实现虚拟存储提供了硬件支持。通过提供 4 个特权级和完善的特权检查机制,既能实现资源共享又能保证代码数据的安全及任务的隔离。
(3) 分段存储管理机制
只有在保护模式下才能使用分段存储管理机制。分段机制将内存划分成以起始地址和长度限制这两个二维参数表示的内存块,这些内存块就称之为段(Segment)。编译器把源程序编译成执行程序时用到的代码段、数据段、堆和栈等概念在这里可以与段联系起来,二者在含义上是一致的。
A20 Gate:
在实模式下,BIOS通过16位寻址:CS:IP,CS左移四位与IP相加,结果最大为1088KB,然而寻址空间范围是1M,所以当寻址超过1M时会发生"回卷"。于是出现了A20 Gate:在程序中bootasm.S打开了A20 Gate。因为在实模式下A20 Gate必须打开,而且在保护模式下这个开关也必须打开。