四、页表结构
例子
一个具有32位逻辑地址空间的系统,页大小4KB(也就是212),那么一个页表最多可包含1M个表项(232/212=220)。
假设每个页表项4个字节,每个进程需4MB空间放页表,也就是1024个连续页面来存储页表本身。
显然需要这么多个连续页面来存放页表不一定能实现。
解决方法:
- 层次页表
将页表划分为更小的部分,如两级页表就是将页表再分页。 - 哈希页表
- 反向页表
例子:4KB页大小的32位系统
一个逻辑地址被分为:
20位的页号,12位的页偏移
页表所在页被分页,页号被分为:
10位的页号,10位的页偏移
因此,逻辑地址表如下:
对于64位的逻辑地址空间的系统,两级页表的方案就不再适合了。
三级分页机制
设系统页大小为4KB(212),页表可由252个表项组成。
使用两级分页方案。内部页表p2用10位表示,即210个项。可用一页表示,外部页表有242项。
四级分页方案
Intel x86-64
仅用48位,页大小:4KB,2MB,1GB
哈希页表
通常地址空间 > 32位,虚拟页号被散列到一个页表中。这种页表的每一个条目都包括了一个链表元素,这些元素哈希成同一位置。
虚拟页号与链