MMU与cache

这一快理解的非常浅:

MMU

  虚拟存储器对内存进行了逻辑上的扩充。比如一个32位的CPU系统,逻辑上的寻址可以达到4GB,但是如果直接对物理地址进行寻址,就要受到主存大小的限制。

 

在这种条件下,虚拟地址应运而生,每个应用程序的访存空间都可以达到4GB,当然这里用的是虚拟地址。Cpu发出虚拟地址之后会被转化为MVA(变化后的虚拟地址),MMU接收到MVA,将MVA转化为物理地址。

 

现在,先来看看第一个阶段,VA(虚拟地址)转化为MVA:

 

   上图就是VA转化为MVA的算法,va转化为MVA需使用进程标示号PID,这个过程是由硬件自动完成的。这样做有一个好处,当两个程序的va都是0-(32M-1)的时候,他们的MVA并不会重叠,免去了处理VA冲突的过程(处理VA冲突需要重建页表,使无效CACHE,和TLBS等,代价昂贵)。

   

   第二个阶段,将MVA转化为物理地址:

   主要过程如下:

1. 根据给定的MVA中的一级页表索引和TTB找到一级列表中的条目。

2. 如果此条目是段描述符(最后两位标示),则根据段描述符和段内地址直接读取到物理地址。

3. 如果此条目是二级页描述符,则利用此描述符和二级页表索引找到二级页表中的下一个条目。

4. 如果此条目是页描述符,则根据此描述符和页内地址直接找到物理地址。

5. 其他情况出错。

可以看出,一级页表需要两次访存能够找到真正的物理地址。二级页表需要三次访存才能找到物理地址。

 

下面介绍一个二级页表找到物理地址的例子::

首先MVA如下:

 

然后根据TTB得出粗页表中条目的位置:

MMU与cache_第1张图片  

取出一级页表中此地址的数值,并得出二级页表中的条目的地址:

 

取出二级条目中此地址的数值,和页内索引得出真实的物理地址:

MMU与cache_第2张图片  

至此,完事。

注:上图中红色区域就是对是段还是页表还是哪种描述符的标示。

 

对于几个寄存器的说明

TTB:也就是协处理器C15的2号寄存器,存的是当前页表的基地址。

TLB:其实就是页表条目的cache,储存近期用过的页表条目,避免每次都要去主存进行查询。

 

   

MMU与cache_第3张图片  

 

CACHE

两种写数据方式:

1. 写穿式:cpu写入cache时,同时写入主存。

2. 回写式:只有当cache中的数据被换出或清空时,才将更新的数据写入主存。

 

Cache的两种操作:

1. 清空:把cache或写缓冲中已经脏的数据(修改过,但未写入主存)写入主存。

2. 使无效:使之不能再使用,不将脏的数据写回主存。

 

Cache分为指令cache和数据cache



来自为知笔记(Wiz)


你可能感兴趣的:(MMU与cache)