内存管理单元MMU(内存访问权限检查和TLB)

1.内存的访问权限检查 内存的访问权限检查是MMU的主要功能之一,简单地说,它就是决定一块内存是否允许读、是否允许写。这由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位等联合作用。 CP15寄存器C1中的A位表示是否对地址进行对齐检查,所谓对齐检查就是访问字时地址是否为4字节对齐,访问半字时地址是否2字节对齐,如果地址不对齐则产生"Alignment fault"异常。无论MMU是否被开启,都可以进行对齐检查。CPU读取指令时不进行对齐检查,以字节为单位访问时也不进行对齐检查。对齐检查在MMU的权限检查和地址映射前进行。 内存的访问权限检查可以概括为以下两点: (1)"域"决定是否对某块内存进行权限检查。 (2)"AP"决定如何对某块内存进行权限检查。 2440中有16个域,CP15寄存器C3中每两位对应一个域,用来表示这个域是否进行权限检查,具体如表1所示。

表1 域访问控制寄存器中每两位数据的含义

含义

说明

00

无访问权限

任何访问都将导致“Domain Fault”错误

01

客户模式

使用段描述符、页描述符进行权限检查

10

保留

保留,相当于“无访问权限”

11

管理模式

不进行权限检查,允许任何访问

段描述符中的"Domain"占据4个bit,用来表示这块内存属于上面定义的16个域中的哪个。举例: 段描述符中的"Domain"为0b0000时,表示这1M内存属于域0,如果域访问控制寄存器(C3)的位[1:0](C3一共对应16个域,位[1:0]对应第0个域)等于0b00,则访问这1MB空间时都会产生"Domain fault"的异常,如果域访问控制寄存器的位[1:0]等于0b11,则使用描述符中的"AP"位进行权限检查。 二级页表描述符中的"ap0~ap3"与段描述符中的"AP"结合CP15寄存器C1的R/S位,决定如何进行访问权限检查。首先说明,段描述符中的"AP"控制整个段(1MB)的访问权限:大页描述符中的每个"apx"控制一个大页(64KB)中1/4内存的访问权限,,即"ap3"对应大页高端的16KB,"ap0"对应大页低端的16KB;小页描述符与大页描述符相似,每个"apx"控制一个小页(4KB)的1/4内存的访问权限;极小页中的"ap"就控制着整个极小页的访问权限。AP位、S位和R位的组合,可以产生多种访问权限,具体如表2所示。

表2 AP位、S和R位的访问权限对照表

AP

S

R

特权模式

用户模式

说明

00

0

0

无访问权限

无访问权限

任何访问都产生“Permission fault”

00

1

0

只读

无访问权限

在超级权限下可以进行读操作

00

0

1

只读

只读

写操作产生“Permission fault”

00

1

1

保留

01

X

X

读/写

无访问权限

只允许在超级模式下访问

10

X

X

读/写

只读

在用户模式下进行写操作将产生“Permission fault”异常

11

X

X

读/写

读/写

在所有模式下允许任何访问

XX

1

1

保留

2.TLB的作用 从虚拟地址到物理地址的转换过程可知:使用一级页表进行地址转换时,每次读/写数据需要访问两次内存,第一次访问一级页表获得物理地址,第二次才是真正的读写数据;使用两级页表时需要3次访存。 利用程序执行时的局部性特性,通过使用一个高速、容量相对较小的存储器来存储近期用到的页表条目,这样可以大幅提高系统性能,这个存储器用来帮助快速地进行地址转换,称为"转译查找缓存"(TLB)。 使用TLB需要保证TLB中的内容与页表一致,在启动MMU之前、在页表中的内容发生变化后,尤其要注意。

第一个青春是上帝给的;第二个的青春是*自己努力的

内存管理单元MMU(内存访问权限检查和TLB)

相关文章:

你感兴趣的文章:

标签云: