您的位置:首页 > 其它

自己学驱动14——内存管理单元MMU(内存访问权限检查和TLB)

2015-02-11 16:28 369 查看
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之前、在页表中的内容发生变化后,尤其要注意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: