2025-05-04
Status: #idea
Tags: rCore ch4

1. 基础概念

1.1 页式存储基本原理

页式存储将内存分成一小段一小段的固定大小单元:

1.2 地址组成

虚拟地址由两部分组成:

物理地址由两部分组成:

其中,页内偏移的位数决定了页面大小,例如:

2. 地址转换原理

2.1 基本转换过程

虚拟地址转换为物理地址的核心是:保持偏移量不变,将VPN映射为PPN

2.2 页表的作用

页表是维护VPN到PPN映射关系的数据结构:

3. 页表实现面临的挑战

3.1 页表大小问题

如果为整个虚拟地址空间创建完整页表:

3.2 可能的解决方案

方案一:缩小虚拟地址空间

方案二:按需分配页表项

4. 页表优化策略

4.1 页表存储优化

当需要进行地址转换时:

4.2 查找效率优化

应用隔离

4.3 索引优化

利用虚拟页号的位结构进行优化:

5. 多级页表实现

5.1 多级页表原理

将36位VPN分为4部分,每部分9位:

5.2 多级页表查找过程

  1. 操作系统为应用创建四级页表,并分配页帧
  2. 根据四级页表项查找三级页表
  3. 根据三级页表项查找二级页表
  4. 根据二级页表项查找一级页表
  5. 一级页表项直接指向物理页帧号(PPN)
  6. 完成地址转换

5.3 多级页表的空间效率

6. 总结

  1. 分离地址组成部分

    • 将虚拟地址分为虚拟页号(VPN)和页内偏移(Offset)
    • 在我们的例子中,48位虚拟地址分为36位VPN和12位偏移量
  2. 多级页表查找

    • 取VPN的最高9位,作为四级页表的索引,找到三级页表的物理地址
    • 取VPN的次高9位,作为三级页表的索引,找到二级页表的物理地址
    • 取VPN的次低9位,作为二级页表的索引,找到一级页表的物理地址
    • 取VPN的最低9位,作为一级页表的索引,找到最终的物理页帧号(PPN)
  3. 合成物理地址

    • 将找到的物理页帧号(PPN)和原始的页内偏移(Offset)组合
    • 物理地址 = (PPN << 12) | Offset
  4. 访问物理内存

    • 使用组合得到的物理地址直接访问物理内存
    • 完成数据读写操作

References