ARM存储管理系统MMU
关操作。它是一个只写的寄存器。
MCR p15,0,Rd,c8,CRm,opcode_2
Rd中为要写入C8寄存器的内容,CRm和opcode_2的不同组合决定指令执行的不同操作。
指令 | Rd | 含义 |
MCR p15, 0, Rd, c8, c5, 0 | 0 | 使无效整个指令TLB |
MCR p15, 0, Rd, c8, c5, 1 | 虚拟地址 | 使无效指令TLB中的单个地址变换条目 |
MCR p15, 0, Rd, c8, c6, 0 | 0 | 使无效整个数据TLB |
MCR p15, 0, Rd, c8, c6, 1 | 虚拟地址 | 使无效数据TLB中的单个地址变换条目 |
MCR p15, 0, | 0 | 使无效整个数据和指令TLB |
MCR p15, 0, | 虚拟地址 | 使无效数据和指令TLB中的单个地址变换条目 |
- 锁定TLB的内容
2、存储访问过程
a、使能MMU时的存储访问过程。
当ARM处理器请求存储访问时,首先在TLB中查找虚拟地址。如果系统中数据TLB和指令TLB是分开的,在取指令时,从指令TLB查找相应的虚拟地址,对于其他内存访问操作,从数据TLB中查找相应的虚拟地址。
如果虚拟地址对应的地址变换条目不在TLB中,CPU从位于内存的页表中查询,并把相应的结果添加到TLB中。如果TLB已经满了,还需要根据一定的淘汰算法进行替换。这样,当CPU下一次又需要该地址变换条目时,可以从TLB中直接得到,从而使地址变换的速度大大加快。
当得到了需要的地址变化条目以后,将进行以下操作
(1)得到该虚拟地址对应的物理地址
(2)根据条目中的C(cache)控制位和B(Bufferable)控制位决定是否缓存该内存访问的结果
(3)根据存取权限控制位和域访问控制位确定该内存访问是否被允许。如果该内存访问不被允许,CP15向ARM处理器报告存储访问中止。
(4)对于不允许缓存的存储访问,使用步骤(1)中得到的物理地址访问内存。对于允许缓存的存储访问,如果在cache命中,则忽略物理地址;如果cache没有命中,使用步骤(1)中得到的物理地址访问内存,并把该块数据读取到cache中。
b、禁止MMU时存储访问过程
- 禁止MMU时,是否支持cache和write buffer由各个具体芯片的设计确定。如果芯片规定禁止MMU时禁止cache和write buffer,则存储访问将不考虑C、B控制位。如果芯片规定当禁止MMU时可以使能cache和write buffer,则数据访问时,C=0,B=0;指令读取时,如果使用分开的TLB则C=1,如果使用统一的TLB则C=0;
- 存储访问不进行权限控制,MMU也不会产生存储访问中止信号
- 所有的物理地址和虚拟地址相等,即使用平板模式
c、禁止/使能MMU时应注意的问题
- 在使能MMU之前,要在内存中建立页号表,同时CP15中的各相关寄存器必须完成初始化。
- 如果使用的不是平板存储模式(物理地址和虚拟地址相等),在禁止/使能MMU时,虚拟地址和物理地址的对应关系会发生改变,这时应该清除cache中的当前地址变换条目
- 如果完成禁止/使能MMU的代码的物理地址和虚拟地址不相同,则禁止/使能MMU时会造成很大麻烦,因此强烈建议完成禁止/使能 MMU的代码的物理地址和虚拟地址最好相同
3、MMU中的地址变换过程
在ARM中,虚拟地址到物理地址的映射有两种方式,一级映射和二级映射。
a、一级映射
当使用一级映射时,只会用到一张页表,我们将它称为一级页表,用L1表示。一级映射时,虚拟空间被划分成段的单位,每段的大小为1M。而相应的物理空间也被进行这样的划分,单位是段框,段和段框的大小必须相同。
于是,首先在内存中建立一张页表(这个页表由我们自己建立),页表中的每一项存放的是一个物理段基地址,该页的访问权限和缓冲特性等。页表中每一项的大小为4字节,所以每一项的地址是字对齐。我们将页表中的每一格称为一个项。
因为ARM的可寻址范围为4G,且虚拟空间的每段大小为1M,所以如图所示,页表有4096个项。每一项对应一个段,每一项中存放的是一个物理段基地址,该页的访问权限和缓冲特性等。
虚拟地址被MMU分为两部分,第一部分为页索引号(bits[31:20]),第二部分是相对物理地址的偏移量(bits[0:19])。
所以当访问一个地址时,此地址是虚拟地址。MMU会用协处理器CP15的C2寄存器中的页表基地址+页索引号便查到了页表中对应的一项,从页表中相应的项中找到物理段基地址,然后:物理段基地址 + 偏移量(这个是虚拟地址的第二部分) = 物理地址。
注:虚拟空间并不真实存在,只是为方便理解才这么说。
例:
CPU要访问0x300008的地址,此地址为虚拟地址。MMU会根据页索引号(也就是0x3)找到相对页表基地址偏移量为0x3的项。这个项中的物理段基地址为0x006。
物理地址 = (0x006<20)+0x8=0x600008
一级页表中一项的详细内容如下表所示:
段基地址:也就是物理
ARM存储管理系统MM 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)