存储管理单元

存储管理单元(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或者随机
TLB练习题
答案

页大小为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、磁盘的层次图

这张图并不是很直观。我在知乎上看到了一篇不错的解释:

计组复习:cache,虚拟内存,页表与TLB - 知乎 (zhihu.com)

更详细的解释

下一篇会讲ARM中极为重要的概念:异常和中断