操作系统中的内存管理:反向页表(Inverted Page Table)
字数 1403 2025-11-09 01:29:34
操作系统中的内存管理:反向页表(Inverted Page Table)
1. 背景与问题描述
在传统页表(如多级页表)中,每个进程都有一个独立的页表,存储虚拟页号到物理页帧的映射。当系统并发进程增多或虚拟地址空间很大时,页表本身可能占用大量内存(例如64位系统下每个页表可达TB级别)。反向页表是一种节省内存的页表设计思路,其核心思想是:系统全局仅维护一张页表,记录每个物理页帧被哪个进程的哪个虚拟页映射,从而将页表大小从依赖虚拟地址空间转变为依赖物理内存大小。
2. 反向页表的基本结构
反向页表的每条记录包含以下信息:
- 进程标识符(PID):占用该物理页的进程ID。
- 虚拟页号(VPN):进程的虚拟页号。
- 物理页帧号(PFN):本条记录对应的物理页帧号(通常隐式通过记录索引表示)。
- 其他标志位(如有效位、修改位等)。
例如,系统有M个物理页帧,反向页表就包含M个条目,每个条目对应一个物理页帧。
3. 地址转换过程
假设需要将虚拟地址(PID, VPN)转换为物理地址:
- 遍历反向页表:搜索表中是否存在满足
PID和VPN匹配的条目。 - 匹配成功:若找到对应条目,其索引(即条目位置)就是物理页帧号
PFN,结合页内偏移得到物理地址。 - 匹配失败:触发缺页异常,由操作系统处理。
举例:
- 物理内存共4个页帧(页帧号0~3),反向页表如下:
索引(PFN) PID VPN 0 101 2 1 101 5 2 103 1 3 102 3 - 进程101访问虚拟页5:
- 遍历表,发现索引1的条目满足
PID=101且VPN=5,因此物理页帧号为1。
- 遍历表,发现索引1的条目满足
4. 性能问题与优化
线性遍历全表(时间复杂度O(M))在物理内存较大时效率极低。解决方案包括:
(1)散列锚表(Hash Anchor Table)
- 原理:对
(PID, VPN)计算散列值,映射到散列表的某个桶(Bucket),桶内链接所有散列值相同的反向页表条目。 - 步骤:
- 计算
H = hash(PID, VPN)。 - 在散列表中找到桶
H,遍历桶内链表匹配具体条目。 - 若找到,直接获取物理页帧号;否则触发缺页异常。
- 计算
- 优点:将搜索时间降至接近O(1)。
(2)TLB协同工作
- 反向页表需配合TLB(快表)使用:频繁的地址转换通过TLB缓存结果,避免频繁查表。
5. 优缺点总结
优点:
- 内存占用小:页表大小仅与物理内存成正比,与进程数或虚拟地址空间无关。
- 适合大地址空间系统(如64位架构)。
缺点:
- 转换效率低:需硬件(散列表)或TLB辅助优化。
- 共享内存复杂:多个进程共享同一物理页时,需在反向页表中存储多条映射(或额外结构)。
- 缺页处理开销大:需遍历数据结构才能确定被置换的页所属的进程和虚拟页。
6. 实际应用
- IBM PowerPC、HP PA-RISC等架构曾使用反向页表变种(如带散列的倒排页表)。
- 现代系统更多采用多级页表+TLB+大页(Huge Page)组合方案,但反向页表思想在内存受限场景(如嵌入式系统)仍有参考价值。