本节将对 Windows 32 位存储管理进行简要说明,展示它是如何使用 x86 处理器直接内置功能的。重点关注的是存储管理的两个主要方面:
- 将逻辑地址转换为线性地址
- 将线性地址转换为物理地址 ( 分页 )
下面先简单回顾一下第2章《x86处理器架构》介绍过的一些 x86 存储管理术语:
- 多任务处理 (multitasking) 允许多个程序(或任务)同时运行。处理器在所有运行程序中划分其时间。
- 段 (segments) 是可变大小的内存区,用于让程序存放代码或数据。
- 分段 (segmentation) 提供了分隔内存段的方法。它允许多个程序同时运行又不会相互干扰。
- 段描述符 (segment descriptor) 是一个 64 位的值,用于标识和描述一个内存段。它包含的信息有段基址、访问权限、段限长、类型和用法。
现在再增加两个新术语:
- 段选择符 (segment selector) 是保存在段寄存器 (CS、DS、SS、ES、FS 或 GS) 中的一个 16 位数值。
- 逻辑地址 (logical address) 就是段选择符加上一个 32 位的偏移量。
本教程一直都忽略了段寄存器,因为用户程序从来不会直接修改这些寄存器,所以只关注了 32 位数据偏移量。但是,从系统程序员的角度来看,段寄存器是很重要的,因为它们包含了对内存段的直接引用。