地址翻译
地址空间、物理寻址和虚拟寻址分别是什么?
- 地址空间: 非负整数地址的有序集合, 大小由机器字长决定;
- 物理寻址: 内存是连续字节组成的数组, 每个字节有唯一的物理地址, CPU 直接用物理地址访问内存;
- 虚拟寻址: CPU 生成虚拟地址, 由 CPU 上的内存管理单元 (MMU) 翻译成物理地址后再访问;
- MMU: 用查询表完成虚拟地址与物理地址的映射;
页命中时地址翻译经历哪些步骤?
- CPU 生成虚拟地址并交给 MMU;
- MMU 生成 PTE 地址并交给内存;
- 内存返回该 PTE 的内容;
- MMU 据此构造物理地址并交给内存;
- 内存把数据返回给 CPU;
缺页时地址翻译经历哪些步骤?
- CPU 生成虚拟地址并交给 MMU;
- MMU 生成 PTE 地址并交给内存;
- 内存返回该 PTE 的内容;
- MMU 发现页不在内存, 触发缺页异常处理程序, 把缺页调入内存;
- CPU 重新发送刚才的虚拟地址, 转入页命中流程;
多级页表解决什么问题?
- 问题: 单级页表要为整个虚拟地址空间维护映射, 占用空间过大;
- 方案: 用多级页表压缩, 上级页表的表项负责映射下级页表;
- 收益: 未使用的地址区间不必分配下级页表;