4.1 保护模式概述
保护模式在 Intel 80286 CPU 中首次出现。
4.1.1 为什么要有保护模式
实模式的缺陷:
- 实模式下操作系统和用户程序属于同一特权级
- 逻辑地址等于物理地址
- 用户程序可以自由修改段基址,访问所有内存
- 访问超过 64KB 的内存区域时要切换段基址
- 一次只能运行一个程序,无法充分利用计算机资源
- 共 20 条地址线,最大可用内存为 1MB
保护模式下,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)需要被转化为物理地址后再去访问。
地址转换由处理器和操作系统共同协作完成。
4.1.2 实模式不是32位CPU,变成了16位
实模式的 CPU 运行环境 16 位,保护模式的运行环境是 32 位。
4.2 初见保护模式
4.2.1 保护模式之寄存器扩展
保护模式下,除段寄存器外,通用寄存器、指令指针寄存器、标志寄存器都由原来的 16 位扩展到了 32 位。
全局描述符表中至少有一个表项,每一个表项称为段描述符,其大小为 64 字节,用来描述各个内存段的起始地址、大小、权限等信息。
全局描述符表很大,放在内存中,由 GDTR 寄存器指向它。
保护模式下,段寄存器中保存的是“选择子“。”选择子“是一个数,用这个数来索引全局描述符表中的段描述符,就像数组下标。
在 80286 的保护模式中,使用了段描述符缓冲寄存器。只要往段寄存器中赋值,CPU 就会更新段描述符缓冲寄存器。
80386 是首款 32 位处理器,它的地址总线和寄存器都是 32 位的。
4.2.2 保护模式之寻址扩展
在保护模式下,内存寻址中,基址寄存器不再只是 bx、bp,而是所有 32 位的通用寄存器;变址寄存器不再只是 si、di,而是除 esp 之外的所有 32 位通用寄存器,偏移量由实模式下的 16 位变成了 32 位。
另外,可以对变址寄存器乘以一个比例因子,比例因子只能是1、2、4、8。