虚存与MIPS32内存管理

官方信息技术老师·14 页·深入(追求细节与边界)·0 次浏览·2 天前
MMU页表TLBMIPS32

虚拟内存与MIPS32内存管理

搞懂MMU如何把虚拟地址一步步翻译成物理地址,包括TLB、页表与异常处理

按 空格/→ 演示下一步

1 / 14 页

全部页面点击任意一页,跳回舞台从这页播放

MMU页表TLBMIPS32

虚拟内存与MIPS32内存管理

搞懂MMU如何把虚拟地址一步步翻译成物理地址,包括TLB、页表与异常处理

1第 1 页 · 虚拟内存与MIPS32内存管理

物理内存的局限性

上一节我们提到虚拟内存是为了解决物理内存的问题。具体是什么问题?设想一台只有 4GB 内存的机器要同时跑多个程序……

容量天花板
总容量固定,4GB/8GB 物理内存有上限
必须整体装入
进程要运行就得全部加载到内存
进程互相踩踏
多程序共用同一块物理内存,无隔离保护
碎片化浪费
反复分配释放后空闲块零散,无法被大程序使用
多道程序受限
所有进程总大小超过物理内存就无法并发
办公室工位对应 →物理内存

工位固定有限,员工多了坐不下,还常出现私人物品侵占工位的情况

2第 2 页 · 物理内存的局限性

早期解决方案:覆盖与分区

从物理内存不足出发,分两条路线看覆盖与分区的思路,最终汇聚到共同缺陷。

图解渲染中…
b1程序员在源码层手动管理模块调入b2操作系统自动把内存切成块分配
3第 3 页 · 早期解决方案:覆盖与分区

分页的基本思想

前面用覆盖或分区缓解空间不足时,程序仍要占据连续物理区域;进程一大,碎片就可能让它无处落脚。分页先改变“切分与放置”的规则。

等大切分
虚拟空间按页、物理内存按同尺寸页框切分;二者同大是地址换算的前提。MIPS32常用4 KiB页
离散装入
各虚拟页可分散装入空闲页框,不要求整段连续;页仍是分配、回收与置换的基本单位
地址拼接
虚拟地址拆为“页号+页内偏移”;页表把页号换成页框号,偏移保持不变,再组成物理地址
固定尺寸仓库格口对应 →页与页框

格口是页框、货箱是页;同尺寸让任一货箱进入不连续格口,偏移相当于格口内位置

V=(v,o),P=(p,o),v=A/2o,o=Amod2oV=(v,o),\quad P=(p,o),\quad v=\left\lfloor A/2^o\right\rfloor,\quad o=A\bmod 2^o
4第 4 页 · 分页的基本思想

虚拟内存的完整定义

分页把内存切成等大小的页块,但要回答「虚拟内存究竟是什么」,还得把两个「地址世界」的关系讲清楚。

虚拟地址空间
程序视角:连续、一维、从0开始的地址集合
物理地址空间
硬件视角:大小有限、可能碎片,由实际RAM提供
页表映射
虚拟页号→物理页框号,OS建立维护,MMU查表
地址透明性
程序只接触虚拟地址,物理位置由硬件+OS隐藏
酒店房号与实际房间对应 →虚地址到物理地址

房卡写802,可能改造后实际在副楼3层——号码是逻辑的,房间才是物理的

PA=PTE[VPN]12offsetPA = PTE[VPN] \ll 12 \mid \text{offset}
5第 5 页 · 虚拟内存的完整定义

分页与交换的协同

按需调页(demand paging)与页面换出(swap out)的交互

分页与交换的协同
按需调页(demand paging)与页面换出(swap out)的交互
6第 6 页 · 分页与交换的协同

页表的结构与作用

页表怎么从'装不下'演化到'多级可扩展',分五步说清。

1
PTE的最小构成
有效位、页框号、保护位三件套
2
单级页表的爆炸
32位地址空间需4MB连续内存存页表
3
按需分级的思想
只给真正用到的区间建子表,空的就不分配
4
两级页表寻址
高位选一级,中间选二级,低位作页内偏移
5
MIPS32两级拆位
20位VPN拆成10+10两级,低12位页内偏移
7第 7 页 · 页表的结构与作用

TLB:地址转换缓存

上一节页表解决了虚拟页到物理页的映射,但每次访存都要先走一遍页表——MIPS32 两级页表意味着两次额外内存访问。能不能把常用映射"记住"?

TLB本质
MMU内部的小型全相联缓存,专门存放最近用过的页表项(PTE)
命中与未命中
命中时地址转换与访存并行,几乎零开销;未命中触发页表walking,付出额外访存代价
ASID与上下文切换
用地址空间ID区分进程,避免切换时整体flush;MIPS32 由软件填充TLB,OS深度参与
翻字典记单词对应 →TLB缓存页表项

第一次查字典=页表walking;记住后直接用=TLB命中;忘了再查=TLB miss

$EAT = p \cdot (1+1) + (1-p) \cdot (1+N+1)$
8第 8 页 · TLB:地址转换缓存

完整的地址转换流程

从CPU发出虚拟地址,到最终拿到物理地址,MMU内部依次闯三关:TLB、页表、缺页。

图解渲染中…
b1TLB是硬件缓存,全相联或组相联比对VPNe1页面不在内存,CPU控制权交给OS内核e2从磁盘swap分区把缺失页读入物理内存
9第 9 页 · 完整的地址转换流程

MIPS32 MMU架构

MIPS32内存管理单元的硬件结构与页表格式

MIPS32 MMU架构
MIPS32内存管理单元的硬件结构与页表格式
10第 10 页 · MIPS32 MMU架构

MIPS32相关寄存器

mipsasm

一段 TLB 重填异常处理, 看 EntryHi/EntryLo/Index/Random 怎么协作

代码高亮加载中…

EntryHi 描述虚页号+ASID, EntryLo 描述实页号+标志位; Index/Random 决定 TLB 写入槽位, mtc0/mfc0 是软硬件接口。

11第 11 页 · MIPS32相关寄存器

MIPS32 TLB操作

MIPS32 通过一组专用指令完成 TLB 的查、探、写、刷四类操作。

1
硬件自动查找
每次访存时硬件比对 Tag,命中则直接完成翻译,无需软件介入
2
未命中触发异常
所有表项均不匹配时产生 TLB Refill 或 TLB Invalid 异常
3
探测定位表项
TLBP 在 TLB 中搜索匹配 EntryHi 的项,结果写入 Index 寄存器
4
写入新表项
TLBWI 按 Index 写入指定槽位;TLBWR 按 Random 写入随机槽位
5
维护与刷新
页表修改后必须同步 TLB:经 Index+TLBWI 写无效项,或整体清空
12第 12 页 · MIPS32 TLB操作

核心概念自测

点击作答

在 MIPS32 中完成虚拟地址到物理地址转换时,TLB 与页表的协作顺序是?

13第 13 页 · 核心概念自测

课后思考

先独立想 30 秒,再看参考答案。这里没有标准答案。

1TLB 缺失的恢复机制与缓存缺失有何本质区别?

参考答案TLB 缺失需走页表,可能触发缺页异常进入内核;缓存缺失只访存、硬件完成。TLB 失败甚至会切换进程上下文。

2若进程虚拟地址空间是物理内存的 100 倍,OS 靠什么机制仍保证它正确运行?

参考答案靠分页+交换:闲置页换出磁盘,缺页时按需换入。关键看页表项的有效位与磁盘地址字段,缺页异常是触发点。

3MIPS32 选择软件管理 TLB,相比硬件自动管理有哪些得与失?

参考答案代价:缺页异常与 TLB 刷新开销更大;收益:替换策略灵活,可在异常里统一处理权限、ASID 与进程上下文。

14第 14 页 · 课后思考