计算机原理与嵌入式系统笔记:第七篇
存储管理单元
存储管理单元(Memory Management Unit, MMU)在CPU和物理主存之间进行地址转换,将地址从逻辑空间映射到物理空间,转换过程也称为内存映射。
DSP用于计算密集型任务,通常不使用MMU。
- 物理地址(physical address):用于内存芯片级的单元寻址,与实际的RAM单元对应。
- 逻辑地址(logical address):程序的抽象地址空间,不与实际的RAM单元对应
地址转换方法
两种基本的地址转换方法:
-
分段:支持较大的、大小可以不等的内存区域。
- 起始地址+大小
-
分页:支持较小的、大小相等的内存区域。
-
段页式寻址模式:将每个段分成页并且其地址转换分成两步的方法来建立。
段地址转换过程
- 分段寄存器:记录当前的活动段,寄存器存储当前活动段的基地址。
- 逻辑地址:来自于指令,作为相对段基址的偏移量。
- 物理地址:将段基址和偏移量相加
- 范围检查:检查物理地址是否超过段的上限
- 需要在分段寄存器中增加一项存储内容,记录段长。
- 用段长和偏移量进行比较,来判断物理地址的合法性
页地址转换过程
- 逻辑地址分为两部分:页号和页内偏移量。
- 页内偏移量表示页的大小,通常在512B到4KB。
- 页号作为页表的索引。
- 页表保存每页在物理地址中的基地址。
- 具有大逻辑地址空间的结构需要一个很大的页表。
- 页表一般保存在主存中,意味着地址转换需要访问内存。
- 物理地址:将页的基地址和偏移量拼接
要记住:物理页地址还要加上Valid项
页地址转换
这个如何计算?
页大小决定了Offset,主存的大小与Offset决定了物理地址的页号,逻辑地址位数与Offset决定了页表项数。
页表的每一相由物理地址页号和Valid位组成。
举个练习例子
页大小为1KB,即Page Offset长度为10。
主存容量为4MB,即物理地址长度为22。因此物理页号长度为22-10+1=13。
对于页表项数,逻辑地址为32位,则虚拟页号长度就是32-10=22,因此页表有222项。
转译后备缓冲器
大的页表一般存储在主存中,程序至少需要访问两次主存才能得到数据:
- 第一次访问主存从页表中获得物理地址;
- 第二次访问主存根据物理地址获得数据。
转译后备缓冲(Translation Lookaside Buffer, TLB) 使用一个小容量的高速缓存结构来存储页表,利用页表的访问局部性,记录最近使用过的地址映射信息,可以避免每次都要访问主存中的页表,从而提高效率。通常也称为快表。
简单认为TLB是页表的Cache就行了。
不用记数值,但要记TLB、MMU、Cache、主存之间的关系。
TLB的一些典型值:
- 缓存容量大小:16~512个项
- 块大小:1~2个页表项
- 命中时间:< 1个时钟周期
- 缺失代价:10~100个时钟周期
- 命中率:> 99%
- 相联度:容量不大时使用全相联映射
- 替换策略:LRU或者随机
答案
页大小为2KB,也就是偏移地址为11位。从后往前数11位,也就是开头两位为Tag,Tag为2;
对于2,物理页号为2,则映射后的物理地址就是偏移地址开头加上物理页号,即B。
虚拟内存
虚拟内存(virtual memory) 是计算机系统内存管理的一种技术。它使得应用程序认为自己拥有连续可用的内存(一个连续完整的地址空间),而实际上,应用程序通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
虚拟内存包括主存和磁盘两级存储层次:
- 增加磁盘作为辅助存储器
- 主存作为辅助存储器的“cache”
存储管理单元MMU用于管理虚拟内存的地址:
- 记录有哪些逻辑地址实际驻留在主存中,对于那些没有驻留在主存中的则将其保存在辅助存储器。当程序执行需要时,再将镜像调入主存。
- 实现地址转换:用表把逻辑地址转换成物理地址。
- 缺页(page fault)异常:CPU请求了一个不在主存的地址。
触发缺页异常的程序可以重新启动的条件:
- 所有内容已读到主存中;
- MMU表已经进行了相应的更新。
虚拟内存只能使用回写机制:
- 对磁盘的写操作需要数百万个时钟周期,通写不可行。
- 增加dirty bit来判断主存中的页是否被修改过,修改过的页称为dirty page。
答案
第一题:虚拟地址共43位,页大小为4KB,则Offset占据了12位,页表共有31项。每个页表项大小为4B,则总大小为233B=8G。
第二题:TLB是页表的Cache,主存是磁盘的Cache,一级Cache是Cache的Cache,二级Cache是主存的Cache。
这张图并不是很直观。我在知乎上看到了一篇不错的解释:
计组复习:cache,虚拟内存,页表与TLB - 知乎 (zhihu.com)
下一篇会讲ARM中极为重要的概念:异常和中断