ARM存储器之:存储管理单元MMU
注意 | ARMv6体系结构不包含微页,如果打算创建一个很容易移植到以后体系结构的系统,则建议在该系统中避免使用1KB微页。 |
15.5.6域(domain)和存储器访问权限
域指的是一些段、大页或者小页的集合。编程的中,设计者最多可以使用16个域,每个域的访问控制特征由CP15中的c3中的两位控制。
CP15中的寄存器c3的格式如图15.34。
图15.34CP15寄存器c3编码格式
其中,每两个位控制一个域的访问控制特性,其编码及对应的含义如表15.29所示。
表15.29 域访问控制字段编码及含义
控制位编码 | 访问类型 | 含义 |
0b00 | 无访问权限 | 这时访问该域将产生访问失效 |
0b01 | 客户类型(client) | 根据页表中地址变换页表项的域访问权限控制位决定是否允许特定的存储访问 |
0b10 | 保留 | 使用该值会产生不可预知的结果 |
0b11 | 管理者权限(Manager) | 不考虑页表中页表项内的访问控制权限位,所以这种情况下不产生访问失效 |
综上所述,有两种不同的控制来管理一个任务的存储器访问权限。
·管理者(manager)用于主控(primarycontrol),不考虑每个段、大页和小页的访问权限。
·客户(client)使用页表中的访问权限用于次控(secondarycontrol)。
当多个段或者页从属于一个域时,这些段或者页的访问权限可以很容易的由域来统一控制。存储器采用这种管理策略将不同的存储单元“打包”。
注意 | 即使不使用MMU提供的虚拟存储功能,仍然可以把这些内核用作简单的存储保护单元。首先将虚拟存储空间直接映射到物理存储空间,然后为每个任务分配一个不同的域,最后使用这些域来保护睡眠任务(通过将它们的域访问设置成不可访问)。 |
15.5.7与TLB相关的操作
(1)清除TLB
如果操作系统改变了页表中的数据,那么缓存在TLB中的转换数据可能就不再有效了。存储器核有一些CP15命令用于清除TLB,从而使TLB中的数据作废。表15.30是一些可用的命令:清除所有TLB数据,清除指令TLB,清除数据TLB,也可以一次只清除一行TLB数据。
表15.30 清除TLB的CP15命令
命令 | MCR指令 | Rd的值 | 支持的内核 |
使所有TLB无效 | MCRp15,0,Rd,c8,c7,0 | 0 | ARM720T、ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
按行使TLB无效 | MCRp15,0,Rd,c8,c7,1 | 要使之无效的虚拟地址 | ARM720T |
使指令TLB无效 | MCRp15,0,Rd,c8,c5,0 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
按行使指令TLB无效 | MCRp15,0,Rd,c8,c5,1 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
使数据TLB无效 | MCRp15,0,Rd,c8,c6,0 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
按行使数据TLB无效 | MCRp15,0,Rd,c8,c6,1 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
存储器相关文章:存储器原理
评论