微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM内存管理MMU详解

ARM内存管理MMU详解

时间:11-20 来源:互联网 点击:

访问可以是大、小和微页的访问。

MMU 的映射分为两种,一级页表的变换和二级页表变换。两者的不同之处就是所实现的变换地址空间大小不同。一级页表变换支持 1M 大小的存储空间的映射,而二级可以支持 64KB 、 4KB 和 1KB 大小地址空间的映射。

要实现从虚拟地址到物理地址的映射,必然会遇到一个问题,如何找到这个页表。对于表的查找,要知道这个表的基地址和偏移地址,在具有 MMU 功能的处理器中,集成了一个被称为 CP15 的协处理器,该协处理器的 C2 寄存器中用于保存页表的基地址,

下面以一级页表变换为例说明 MMU 实现地址变换的过程。

4 、节访问的转换过程
节和大页是支持允许只用一个 TLB 入口去映射大的存储器区间。小页和大页有附加的访问控制:小页分成 1KB 的子页,和大页分成 16KB 的子页。微页没有子页,对微页的访问控制是对整个页。

然而,转换过程总是由下面所描述的那样由第一级表的获取开始。节映射的访问只需要读取第一级表,页映射的访问还需要读取第二级表。

1 转换表基址

当片上( on-chip )的 TLB 中不包含被要求的虚拟地址的入口时,转换过程被启动。转换表基址寄存器( CP15 的寄存器 2 )保存着第一级转换表基址的物理地址。只有 bits[31:14] 有效, bits[13:0] 应该是零( SBZ )。所以第一级表必须在 16KB 的边界。
2 取第一级表

转换表基址寄存器的 bits[31:14] 与虚拟地址的 bits[31:20] 和两个 0 位连接形成 32 为物理地址,如图 3-2 。这个地址选择了一个四字节的转换表入口,它是第一级描述符或是指向第二级页表的指针。

当处理器访问一个虚拟地址时,该虚拟地址的 [31 : 20] 作为偏移地址与页基地址结合(基地址必须是 64KB 对齐的,因此基地址的 [13 : 0] 位都为 0 ),得到一个 32 位的页表项地址(因为页表项为 4 字节对齐, [1 : 0] 两位为 0 )。通过这个页表项地址可以检索到该页表项。页表项的格式见前面第一级转换表。

查找到页表项后,根据页表项的访问特性(缓冲以及是否允许访问等)协处理器决定是否允许访问。如不允许访问,则协处理器向 CPU 报告出错信息;反之,由页表项的 [31 : 20] 位与虚拟地址的 [19 : 0] 一起组成实际的物理地址,实现从虚拟地址到物理地址的映射。如下图所示:

5 、粗糙二级表中的小页转换 如果从第一级读取到的是二级粗糙页表描述符,那么会象下图3-7 所示执行第二级描述符读取。

6 、精细二级表中的微页转换
如果从第一级读取到的是二级精细页表描述符,那么会象图3-5 所示执行第

二级描述符读取。

7 、存储器访问的顺序
查找整个转换表的过程叫转换表遍历。它由硬件制动进行,并需要大量的执行时间(至少一个存储器访问,通常是两个)。为了减少存储器访问的平均消耗,转换表遍历结果被高速缓存在一个或多个叫作Translation Lookaside Buffers(TLBs) 的结构中。通常在ARM 的实现中每个内存接口有一个TLB 。

因此,当 ARM 要访问存储器时, MMU 先查找 TLB 中的虚拟地址表,如果 ARM 的结构支持分开的地址 TLB 和指令 TLB ,那么它用:

· 取指令使用指令 TLB

· 其它的所有访问类别用数据 TLB

如果 TLB 中没有虚拟地址的入口,则转换表遍历硬件从存在主存储器中的转换表中获取转换和访问权限,一旦取到,这些信息将被放在 TLB 中,它会放在一个没有使用的入口处或覆盖一个已有的入口。

一旦为存储器访问的 TLB 的入口被拿到 , 这些信息将被用于:

1. C (高速缓存)和 B (缓冲)位被用来控制高速缓存和写缓冲,并决定是否高速缓存。(如果系统中没有高速缓存和写缓冲,则对应的位将被忽略)

2. 访问权限和域位用来控制访问是否被允许。如果不允许,则 MMU 将向 ARM 处理器发送一个存储器异常;否则访问将被允许进行。

3. 对没有高速缓存的系统(包括在没有高速缓存系统中的所有存储器访问),物理地址将被用作主存储器访问的地址。对有高速缓存的系统,在高速缓存没有选中的情况下,物理地址将被用行取 (line fetch) 的地址。如果选中了高速缓存,则物理地址将被忽略。图 3-1 说明了这种高速缓存系统

三、协处理器 CP15
MMU 由系统控制寄存器的2 、3 、4 、5 、6 、8 、10 号寄存器和1 号寄存器的一些位控制。

5.1 对协处理器寄存器的操作
ARM 寄存器到协处理器的数据传诵指令和反向传送指令分别为MCR  MRC

l MCR

MCR 指令将ARM 处理器的寄存器中的数据传送到协处理器的寄存器中。若协处理器不能成功执行该操作,将产生未定义指令异常中断。指令格式如下:

MCR{cond} coproc ,opcode1 ,Rd ,CRn ,CRm

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top