![](https://csdnimg.cn/release/download_crawler_static/4354804/bg5.jpg)
作者:尹纪平 2011-3-14 Page.5
虚拟地址地址 0x30000000 ---------- 段表项 300 ---------- 物理地址 0x30000000
上面的这段段代码把虚拟空间 0x3000 0000~0x33FF FFFF 映射到物理空间 0x3000 0000~0x33FF FFFF,由 于 虚 拟空间与物理空间空间相吻合,所以虚拟地址与他
们各自对应的物理地址在值上是一致的。当初始完 Translation Table 之后,记得要把 Translation Table 的首地址(第 0 号描述符的地址)加载进协处理器 CP
15 的 Control Register2(2 号控制寄存器)中,该控制寄存器的名称叫做 Translation table base (TTB) register。
以上讨论的是 deor 中的 Section Base Address 以及虚拟地址和物理地址的映射关系,然而 MMU 还有一个重要的功能,那就是访问控制机制(Access Permission
)。
访问控制机制
简单说访问控制机制就是 CPU 通过某种方法判断当前程序对内存的访问是否合法(是否有权限对该内存进行访问),如果当前的程序并没有权限对即将访问的
内存区域进行操作,则 CPU 将引发一个异常,s3c2410 称该异常为 Permission fault,x86 架构则把这种异常称之为通用保护异常(General Protection),什
么情况会引起 Permission fault 呢?比如处于 User 级别的程序要对一个 System 级别的内存区域进行写操作,这种操作是越权的,应该引起一个 Permission
fault,搞过 x86 架构的朋友应该听过保护模式(Protection Mode),保护模式就是基于这种思想进行工作的,于是我们也可以这么说:s3c2410 的访问控制机
制其实就是一种保护机制。那 s3c2410 的访问控制机制到底是由什么元素去参与完成的呢?它们间是怎么协调工作的呢?这些元素总共有:
1.协处理器 CP15 中 Control Register3:DOMAIN ACCESS CONTROL REGISTER
2.段描述符中的 AP 位和 Domain 位
3.协处理器 CP15 中 Control Register1(控制寄存器 1)中的 S bit 和 R bit
4.协处理器 CP15 中 Control Register5(控制寄存器 5)
5.协处理器 CP15 中 Control Register6(控制寄存器 6)
协处理器 CP15 中 Control Register3: DOMAIN ACCESS CONTROL REGISTER 是访问控制寄存器,该寄存器有效位为 32,被分成 16 个区域,每个区域由两个位
组成,他们说明了当前内存的访问权限检查的级别,如下图所示:
每区域可以填写的值有 4 个,分别为 00,01,10,11(二进制),他们的意义如下所示:
00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个 domain fault
01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中 AP 位进行权检查
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。
该区域总共有 4 个 bit,里面的值是对 DOMAIN ACCESS CONTROL REGISTER 中 16 个区域的索引.而 AP 位配合 S bit 和 A bit 对当前描述符描述的内存区域被访问
权限的说明,他们的配合关系如下图所示: