real mode(实模式)有几个显著特征,但是最主要的特征是:实地址模式(real address),processor 的 linear address 就是 physical address,它的第 1 物理特征就是:CR0.PE = 0 ,因此,识别 processor 是否处于 real mode 的唯一途径就是判断 CR0.PE 标志位。 real mode 实际上被称为 8086 模式。它的其它特征,如:16 位的寻址空间,0 级的 processor 权限等等,这些都是次要,造成这些 real mode 特征是原因是:real mode 下 processor 一直处于初始态。 1. processor 的初始态初始化 processor 的两个途径是:接收到 RESET# 信号和 INIT# 信号,RESET# 信号由外部的电源逻辑产生。在 system logic 上电后,RESET# 只产生一次。而 INIT# 可以在上电后,执行多次 下面是 processor 一些关键的初始状态值:
上面就是决定 processor 处于 real mode 的关键初始化状态值。由于 CR0.PE = 0,表明 processor 处于 real mode 其中 CS segment registers 和 DS/ES/FS/GS/SS segment registers 以及 RIP 寄存器决定了 processor 的执行环境 CS.base = 0000_0000_FFFF_0000 以及 RIP = 0000_0000_0000_FFF0 从物理上决定了 processor 的 first fetch Instruction 位于内存:FFFF_FFF0h(CS.base + RIP)中 在 FFFFFFF0 内存里的第 1 条指令典型地是 far jmp 远跳转指令,如下所示: FFFFFFF0: EA 5B E0 00 F0 jmp far ptr F000:E05B FFFFFFF0 地址会被映射到 F000:FFF0 这个地址上,执行完这条 far jmp 后,CS.base 会被刷新为 0xF0000 (CS.selector << 4,也就是 0xF000 << 4),eip 是 0000E058,processor 将转到 000FE058 继续执行。此时,processor 处于真正的 real mode 状态。实际上 processor 的第 1 条指令最大的目的是刷新 cs 寄存器,开辟混沌。 可以看到: 由于所有的 segment registers 的 Limit 都是 64K,因此决定了 real mode 下寻址能力为 64K 这是为什么 real mode 只能访问 16 位地址空间的根本原因,当然是有办法在 real mode 下更改每个 segment 的 limit 值,使用 real mode 下访问超越 64K 空间。 另一方面由于 IDTR.base = 0,它决定 real mode 下 IVT(interrupt vector table)中断向量表位置在内存地址 0 上 由于这些 processor 执行环境(Limit 和 attribute)在整个 real mode 执行过程中都没改变,导致 real mode 下一直都处于 processor 初始执行环境下。 2. real mode 下的 processor 资源real mode 下的物理资源和 protected mode 以及 long mode 下的物理资源是一样的,real mode 下可访问的 16 位资源,如:16 位的 PC(PC 计数器),16 位的 GPRs,16 位的 segment registers 以及 16 位的寻址空间等等,追根究底是由于:real mode 下的能力受到限制。 在 real mode 下,processor 提供的 protected 机制被 disable,processor 所使用的 logic address 转换为 linear address 后无须转换就变成了 physical address。这与在 proected mode 下关闭 paging 功能 是一样的效果。由于 protected 被 disalbe,real mode 所能使用的 processor 资源为:
这些限制可以通过切换到 protected 模式进行更改。 3. real mode 的 processor 权限real mode 下 CS.DPL 或者说 CS.CPL 为 0,并且这个 CPL 无法改变,因此 processor 始终处于最高的 0 级权限。这代表 real mode 下用户的代码可以做任何操作。 4. 操作系统的引导从 processor 第 1 条 far jmp 指令开始,直到读取磁盘的 0 扇区(MBR 记录)止,所执行的都是属于 BIOS 的代码,BIOS 所支持的硬盘可以有 4 个主分区,因此 pc 中最多可以安装 4 个操作系统。MBR 可由操作系统引导管理软件配置安装或者由操作系统的安装程序配置安装。如下示意图:
first fetch instruction ---> BIOS --> MBR ---> OS 1 boot ---> OS 1(例如:windows/linux)
|
|
+-----> OS 2 boot ---> OS 2(例如:windows/linux)
|
|
+-----> OS 3 boot ---> OS 3(例如:windows/linux)
|
|
+-----> OS 4 boot ---> OS 4(例如:windows/linux)
硬盘的主分区表包含在 MBR(Master Boot Record)内,MBR 负责查找活动可引导的主分区进行加载,将控制权交给加载进内存的主分区 boot 代码。每个操作系统可以实现自己的 boot 程序, |
|