基本思想

  • 将程序的逻辑地址空间划分为等长的(Page)
  • 将物理内存划分为同样大小的页帧(Page Frame)
  • 逻辑上连续的空间在物理内存中可以分散存放在不同页帧
  • 页大小定为 2 的 k 次幂:地址转换中的除法/乘法可转化为移位操作,提高效率

重点 页表(Page Table)

  • 每个进程一张独立页表,PCB 中有指针指向其页表
  • 页表为数组结构:数组下标 = 逻辑页号(自然映射,无需额外存储页号),节省内存
  • 页表项内容:物理页帧号 + 权限位(读/写/执行)+ 状态位等
  • 存储于系统空间

地址转换

  • 逻辑地址 = 页号(高位)+ 页内偏移(低位)
  • 物理地址 = 帧号(高位拼接)+ 页内偏移(低位)—— 位拼接,区别于段式的加法拼接
  • 由 MMU(内存管理单元)硬件完成
  • 转换流程:
    1. 从 PCB 获取该进程页表起始地址
    2. 线性逻辑地址拆分为页号 P 和页内偏移 W
    3. 以 P 为下标查页表,得到物理页帧号 F
    4. 物理地址 = 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 字节

共享与保护

  • 共享:不同进程的页表项指向同一物理页帧(如多进程执行同一程序,共享代码段)
  • 保护
    • 页表长度寄存器:检查逻辑页号是否越界
    • 权限位:页表项中增加访问权限字段(只读/读写/执行)

优缺点

  • 优点:无外部碎片,物理内存不要求连续,内存利用率高
  • 缺点:页表占用额外空间,页内可能有少量内部碎片(平均半页),需一次性装入全部逻辑页,对用户不自然(与程序逻辑结构无关)

相关概念