虚拟内存与MIPS32内存管理
搞懂MMU如何把虚拟地址一步步翻译成物理地址,包括TLB、页表与异常处理
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
虚拟内存与MIPS32内存管理
搞懂MMU如何把虚拟地址一步步翻译成物理地址,包括TLB、页表与异常处理
物理内存的局限性
上一节我们提到虚拟内存是为了解决物理内存的问题。具体是什么问题?设想一台只有 4GB 内存的机器要同时跑多个程序……
工位固定有限,员工多了坐不下,还常出现私人物品侵占工位的情况
早期解决方案:覆盖与分区
从物理内存不足出发,分两条路线看覆盖与分区的思路,最终汇聚到共同缺陷。
分页的基本思想
前面用覆盖或分区缓解空间不足时,程序仍要占据连续物理区域;进程一大,碎片就可能让它无处落脚。分页先改变“切分与放置”的规则。
格口是页框、货箱是页;同尺寸让任一货箱进入不连续格口,偏移相当于格口内位置
虚拟内存的完整定义
分页把内存切成等大小的页块,但要回答「虚拟内存究竟是什么」,还得把两个「地址世界」的关系讲清楚。
房卡写802,可能改造后实际在副楼3层——号码是逻辑的,房间才是物理的
分页与交换的协同
按需调页(demand paging)与页面换出(swap out)的交互
页表的结构与作用
页表怎么从'装不下'演化到'多级可扩展',分五步说清。
TLB:地址转换缓存
上一节页表解决了虚拟页到物理页的映射,但每次访存都要先走一遍页表——MIPS32 两级页表意味着两次额外内存访问。能不能把常用映射"记住"?
第一次查字典=页表walking;记住后直接用=TLB命中;忘了再查=TLB miss
完整的地址转换流程
从CPU发出虚拟地址,到最终拿到物理地址,MMU内部依次闯三关:TLB、页表、缺页。
MIPS32 MMU架构
MIPS32内存管理单元的硬件结构与页表格式
MIPS32相关寄存器
一段 TLB 重填异常处理, 看 EntryHi/EntryLo/Index/Random 怎么协作
EntryHi 描述虚页号+ASID, EntryLo 描述实页号+标志位; Index/Random 决定 TLB 写入槽位, mtc0/mfc0 是软硬件接口。
MIPS32 TLB操作
MIPS32 通过一组专用指令完成 TLB 的查、探、写、刷四类操作。
核心概念自测
在 MIPS32 中完成虚拟地址到物理地址转换时,TLB 与页表的协作顺序是?
课后思考
先独立想 30 秒,再看参考答案。这里没有标准答案。
参考答案TLB 缺失需走页表,可能触发缺页异常进入内核;缓存缺失只访存、硬件完成。TLB 失败甚至会切换进程上下文。
参考答案靠分页+交换:闲置页换出磁盘,缺页时按需换入。关键看页表项的有效位与磁盘地址字段,缺页异常是触发点。
参考答案代价:缺页异常与 TLB 刷新开销更大;收益:替换策略灵活,可在异常里统一处理权限、ASID 与进程上下文。