ARM存储管理系统MMU

本文介绍了ARM处理器中MMU(内存管理单元)的工作原理,包括虚拟地址和物理地址的区别,以及虚拟地址如何通过页表映射到物理地址。详细阐述了页表和TLB(快表)在地址转换过程中的作用,以及存储访问过程,特别是MMU启用和禁用时的情况。此外,还提到了二级映射的概念。
摘要由CSDN通过智能技术生成

 一、虚拟地址和物理地址的区别

        CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分。如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU在访问内存时发出的地址将直接传送到地址总线上,使具有相同地址的物理存储器被读写。这称为物理地址(Physical Address,以下简称PA),如下图所示:

          图 1. 物理地址示意图

         如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成真正的物理地址发送到地址总线上,也就是将虚拟地址映射成物理地址,如下图所示:

       

       图 2. 虚拟地址示意图

 

二、虚拟地址映射物理地址原理

         页表是实现虚拟地址到物理地址转换的一个重要手段。我们在使用MMU以前,需要在内存中新建一个页表。表中的每一行(即一个字的大小)存放的是一个物理内存页的基地址,该页的访问权限和缓冲特性等,这里将页表中这样的一行称为一个地址变换条目。页表存放在内存中,CP15的C2寄存器用来存放页表的基地址。

       多数使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称为(page)的单位。而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框的大小必须相同。

       虚拟地址被MMU分为两部分,,第一部分是页号索引(page Index),第二部分则是相对该页首地址的偏移量(offset)

       当CPU访问一个地址时,该地址是虚拟地址,于是该地址被送到MMU,MMU再根据虚拟地址的高几位作为页号索引,在页表中寻找对应的地址变换条目。从地址变换条目中找到物理地址的页基地址,再加上虚拟地址中的偏移量,便得到了真正的物理地址,然后由MMU将物理地址发送到地址总线上,访问物理内存。

        那么MMU是如何使用页号索引在页表中找到对应的地址变换条目呢?MMU会用CP15协处理其中的C2寄存器存放的页表基地址加上虚拟地址的页号索引值,然后便得到了页表中对应的地址变换条目的地址。其实页号索引就是相对于页表基地址的一个偏移量,然后使用基地址加偏移量的方式得到一个页表中的地址。

例:如图所示,如果分页大小为1M,虚拟地址为0x30000012,

虚拟地址的二进制码为  00110000  00000000  00000000  00010010    前12位为页号索引,后20位为偏移量,因为2^20 = 1M

前12位页号索引为00110000 0000 = 768,所以在页表中找到相对于页表基地址的偏移量为768的地址,然后得到地址变换条目。于是0x0300 << 20位,便得到了物理页基地址,再加上虚拟地址中的偏移位 0000  00000000  00010010 = 0x12,便得到了真正的物理地址 0x30000012 。 

       

1、TLB的概念       

        从虚拟地址到物理地址的变换过程其实就是查询页表的过程,由于页表存放在内存中,这个查询过程通常代价很大。而程序在执行过程中具有局部性,也就是说,一段时间内,对页表的访问只是局限在少数几个单元中。根据这个特点,采用一个容量更小、访问速度更快的存储器来存放当前访问需要的地址变换条目。这个小容量的页表称为快表,也称TLB.

       当CPU访问内存时,现在TLB中查找需要的地址变换条目。如果该条目不存在,CPU从位于内存的页表中查询,并把相应的结果添加到TLB中。这样,当CPU下一次又需要该地址变换条目时,可以从TLB中直接得到,从而使地址变换的速度大大加快。

       当内存中的页表内容改变,或者通过修改CP15中的寄存器C2使用新的页表时,TLB的内容需要全部清除。MMU提供了相关的硬件支持这种操作。CP15中的寄存器C8用来    控制清除TLB内容的相关操作。

      MMU可以将某些地址变换条目锁定在TLB中,从而使得进行与该地址变换条目相关的地址变换速度保持很快。在MMU中C10用于控制TLB内容的锁定。

注:TLB中存放的是地址变换条目,相当于一个小页表。

  • 使无效TLB内容
  • <
  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值