简介
为什么要有保护模式?
- Intel 80386 只有在保护模式下,才可以提供更好的保护机制和更大的寻址空间;
- 没有保护机制,任何应用软件都可以任意地访问所有计算机资源;
- 许多操作系统功能(比如分页)都是建立在保护模式上设计的;
实模式
bootloader 在 BIOS 之后开始运行时,PC 处于 16 位实模式运行状态。
它主要有以下特点:
实模式下,上层软件可以访问的物理内存空间不超过
1MB
;实模式将整个物理内存看成分段的区域,每一个指针都是指向实际的物理内存。
通过修改 A20 地址线可以完成从实模式到保护模式的切换。
保护模式
概念
GDT 与 LDT:
- 保护模式下,有两个段表:GDT(Global Descriptor Table)和 LDT(Local Descriptor Table)
段描述符:GDT 表的内容;
- 为了兼容各个不同版本的 CPU,它的形式比较复杂;
- 它最重要的字段是
segment base
与segment limit
; - 也称之为段,此处的段与 ELF 源程序中的
.text
、.data
等概念中的段,是相同的。
段选择子:16 bits,GDT 表的索引;
- [0:2] 是表格的优先级 (00 最高,11 最低),[2:3] 是表格的类型 (0 为 GDT),[3:16] 是 GDT 的索引;
介绍
保护模式有以下特点:
- 80386 的 32 根地址线全部有效;
- 上层软件可以寻址高达 4G 字节的地址空间,可访问 64TB 的逻辑地址空间;
- 采用了分段存储管理机制 和 分页存储管理机制。
分段存储管理机,逻辑地址(由段选择子 selector 与段偏移 offset 组成)到物理地址转换会通过以下的两个步骤:
第一步是从逻辑地址得到一个线性地址:
1
线性地址 = 段描述符表[段选择子[15:3] ] + 段偏移
如果未开启分页地址转换,则线性地址即为物理地址;否则需要由操作系统进一步处理。