内存寻址(二)
一、硬件中的分页
分页单元(paging unit)把线性地址转换成物理地址。其中的一个关键任务是把所请求的访问类型与线性地址的访问权限相比较,若此次内存访问无效,则产生一个缺页异常。
为了高效工作,线性地址被分成以固定长度的页(page)
。页内部连续的线性地址
被映射到连续的物理地址中。“页”指的是一组线性地址,或者指的是这组线性地址中包含的数据。分页单元将所有的物理内存
分成固定长度的页框
或叫物理页
(page frame)。每一个页框包含一个页(page)。页框长度=页长度,页框是主存的一部分,是物理内存,页指的是一个数据块,可以存放在任何页框和磁盘中。
将线性地址映射到物理地址的数据结构称为页表(page table)
。页表存放在内存(DRAM)中,并在启用分页单元之前必须由内核对页表进行适当的初始化。
1.1 常规分页
80386开始,Intel处理器的分页单元处理4KB页。
32位线性地址被划分为三个区域:
- Directory(目录) [22:31]
- Table(页表) [12:21]
- Offset(偏移量) [0:11]
线性地址的转换分为两步,每一步基于一种转换表,第一步的转换表称为页目录表
,第二部的转换表称为页表
。
正在使用的页目录存放在控制寄存器cr3
中。线性地址中的Directory字段决定页目录中的目录项,而目录项指向适当的页表。线性地址中Table字段决定页表中的表项,表项含有页所在页框的物理地址,线性地址中Offset字段决定在页框中的偏移。
由于线性地址中Directory字段与Table字段都是10位,因此页目录与页表都可多达 2 10 2^{10} 210