基本思想
- 将程序的逻辑地址空间划分为等长的页(Page)
- 将物理内存划分为同样大小的页帧(Page Frame)
- 逻辑上连续的空间在物理内存中可以分散存放在不同页帧
- 页大小定为 2 的 k 次幂:地址转换中的除法/乘法可转化为移位操作,提高效率
重点 页表(Page Table)
- 每个进程一张独立页表,PCB 中有指针指向其页表
- 页表为数组结构:数组下标 = 逻辑页号(自然映射,无需额外存储页号),节省内存
- 页表项内容:物理页帧号 + 权限位(读/写/执行)+ 状态位等
- 存储于系统空间
地址转换
- 逻辑地址 = 页号(高位)+ 页内偏移(低位)
- 物理地址 = 帧号(高位拼接)+ 页内偏移(低位)—— 位拼接,区别于段式的加法拼接
- 由 MMU(内存管理单元)硬件完成
- 转换流程:
- 从 PCB 获取该进程页表起始地址
- 线性逻辑地址拆分为页号 P 和页内偏移 W
- 以 P 为下标查页表,得到物理页帧号 F
- 物理地址 = F(高位拼接)+ W(低位)
TLB(快表,Translation Lookaside Buffer)
- 两次访存问题:查页表(1 次)+ 取数据(1 次),共 2 次内存访问
- TLB:一组高速联想寄存器,存放近期访问的页表项,容量有限(通常 8~12 项)
- 利用程序局部性提高命中率
- 命中率计算实例(一次访存 750ns,查 TLB 50ns):
- 命中率 80%:平均访问时间 = 80% × (50+750) + 20% × (50+750+750) = 950ns
- 无 TLB:2 × 750 = 1500ns
- 进程切换时,TLB 需刷新并装入新进程的页表项
空闲页帧管理:Bitmap(位图)
- 每个物理页帧对应位图中的一位(0 = 空闲,1 = 占用)
- 相比链表极大节约存储空间
- 计算实例:256MB 内存 / 4KB 页大小 = 65536 页帧 → 65536 bit = 8192 字节
共享与保护
- 共享:不同进程的页表项指向同一物理页帧(如多进程执行同一程序,共享代码段)
- 保护:
- 页表长度寄存器:检查逻辑页号是否越界
- 权限位:页表项中增加访问权限字段(只读/读写/执行)
优缺点
- 优点:无外部碎片,物理内存不要求连续,内存利用率高
- 缺点:页表占用额外空间,页内可能有少量内部碎片(平均半页),需一次性装入全部逻辑页,对用户不自然(与程序逻辑结构无关)
相关概念