MMU理解要点

  MMU是我们必须要掌握的一个要点。
MMU

1.VA转MVA

下面这个转换是使用硬件自动完成的
if(VA < 32M) then
MVA = VA | (PID << 25);
else
MVA = VA;

  • 利用PID将VA转换成不同VA,那么多个进程的MVA就能存在于同一个页表中,那么在进行进程转换时,只需要取不同的页表就可以了(在实际使用中,进程也确实是小于32M的居多)。而如果是大进程,那么可能需要重新构建页表,那么就需要重新构建页表,那么进程切换的开销会很大。

2.页表转换

  • 页表基址(TTB)存在于CP15的C2, TTB[31:14]:(MVA[31:20]>>18):00构成页表基址。
  • 一级描述符:每一个页表项可以可以是段页描述符粗页描述符细页描述符
    • 段页描述符,直接指向1MB的内存空间
    • 粗页描述符,有256个二级页表项,每个二级页表项指向4KB的内存空间
    • 细叶描述符,有1024个二级页表项,每个二级页表项指向1KB的内存空间
  • 二级描述符:粗页描述符细页描述符可以指向二级描述符,其中包括大页描述符小页描述符极小页描述符

    • 大页描述符:0b01为大页描述符,[31:16]为大页基址。[15:0]可以表示。但是粗页表中的页表项每项只能表示4KB,所以连续16个条目表示的都是同一个大页描述符。同理,对于细页表中,连续64个条目表示的都是同一个大页描述符。
    • 小页描述符:0x10为小页描述符。[31:12]表示的为小页基址。[11:0]可以表示4KB大小。所以如果放在粗页表中,那么正好一一对应。如果放在细页表中,那么细页表中,连续四个条目表示同一个小页描述符
    • 极小页描述符:0x11表示为极小页描述符,[31:10]为极小页基址。[9:0]可以表示1KB空间。极小页描述符只能放在细页表中,一个条目对应一个极小页描述符。

      3.转换实例

    • 一级转换 段转换:
      • 页表基址寄存器[31:14]:MVA[31:20]组成低两位为零的32位地址,MMU利用这个地址找到段描述符。
      • 段描述法的[31:20]:MVA[19:20]即为PA
    • 二级转换 小页描述符保存在粗页表中:
      • 页表基址寄存器[31:14]:MVA[31:20]组成低两位为零的32位地址,MMU利用这个地址找到段描述符。
      • 粗页表描述符的[31:10]:MVA[19:12],组成低两位为零的32位地址,可以找到小页描述符。
      • ‘小页描述符[31;12]:MVA[11:0]’组成PA。

        4.转换总结

    • 一级转换负责转换到1M大小,之后要么使用段转换转换到物理地址。要么使用粗页表或细页表进行二级转换
    • 大页[31:16] 小页[31:12] 极小页[31:10]

    5.权限控制

    • 内存的访问权限检查可以概括为以下两点:
    • “域”决定是否对某块内存进行权限检查。
    • “AP”决定如何对某块内存进行权限检查。

      6. TLB的作用

        从虚拟地址到物理地址的转换过程可知:使用一级页表进行地址转换时,每次读/写数据需要访问两次内存,第一次访问一级页表获得物理地址,第二次才是真正的读写数据;使用两级页表时需要3次访存。利用程序执行时的局部性特性,通过使用一个高速、容量相对较小的存储器来存储近期用到的页表条目,这样可以大幅提高系统性能,这个存储器用来帮助快速地进行地址转换,称为”转译查找缓存”(TLB-Translation Lookaside Table)。

版权声明:本文为博主原创文章,转载需声明为转载内容并添加原文地址。

原文地址:http://coderdock.com

Dock wechat
欢迎您扫一扫上面的微信公众号,订阅我的公众号