标签:
一级页表:
TTB base代表一级页表的地址,将它写入协处理器CP15的寄存器C2(称为页表基址寄存器)即可,一级页表的地址是16K对齐,使用[31:14]存储页表基址,[13:0]为0。一级页表使用4096个描述符来表示4GB空间,每个描述符对应1MB的虚拟地址,要么存储它对应的1MB物理空间的起始地址,要么存储下一级页表的地址。使用MVA[31:20]来索引一级页表(2^12=4096个描述符),得到一个描述符,每个描述符占4个字节。
11:细页表(Fine page table)
[31:12]为细页表基址(Fine page table base address),此描述符的低12位填充0后,就是一个二级页表的物理地址。
此二级页表含1024个条目([11:2]),其中每个条目表示大小1kb的物理地址空间,一个细页表表示1MB物理地址空间。
二级页表:
以大页(64KB),小页(4KB)或极小页(1KB)进行地址映射时,需要用到二级页表,二级页表有粗页表、细页表两种,二级页表描述符格式如下:
由于本次程序只使用一级页表,以段的方式进行地址映射。所以二级页表的4种情况就不总结了,看书。
内存的访问权限检查:
它决定一块内存是否允许读、是否允许写。这由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位共同决定。
“域”决定是否对某块内存进行权限检查,“AP”决定如何对某块内容进行权限检查。
S3C2440有16个域,CP15寄存器C3中每两位对应一个域(一共32位)。
00:无访问权限(任何访问都将导致“Domain fault”异常)
01:客户模式(使用段描述符、页描述符进行权限检查)
10:保留(保留,目前相当于“无访问权限”)
11:管理模式(不进行权限检查,允许任何访问)
Domain占用4位,用来表示内存属于0-15,哪一个域,例如:
粗页表中的“Domain”为0b1010,表示1MB内存属于域10,如果域访问控制寄存器的[21:20]等于0b01,则使用描述符中的"AP"位进行权限检查,如果等于0b11,则不进行权限检查,允许任何访问。
AP、ap3、ap2、ap1、ap0结合CP15寄存器C1的R/S位,决定如何进行访问检查。
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 | 保留 | - | - |
转译查找缓存(Translation Lookaside Buffers, TLB)
Cache:
S2C2440内置了指令Cache(ICaches)、数据Cache(DCaches)、写缓存(Write buffer),需要用到描述符中的C位(Ctt)和B位(Btt)。
S3C2440 MMU、TLB、Cache的控制指令:
S3C2440除了ARM920T的CPU核心外,还有若干个协处理器,用来帮助主CPU完成一些特殊功能。对MMU、TLB、Cache等的操作涉及到协处理器。
<MCR|MRC> {cond} p#,<expression1>,Rd,cn,cm{,<expression2>}
MRC //从协处理器获得数据,传给ARM920T CPU核心寄存器
MCR //数据从ARM920T CPU核心寄存器传给协处理器
{cond} //执行条件,省略时表示无条件执行
p# //协处理器序号
<expression1> //一个常数
Rd //ARM920T CPU核心的寄存器
cn和cm //协处理器中的寄存器
<expression2> //一个常数
其中,<expression1>、cn、cm、<expression2>仅供协处理器使用,它们的作用如何取决于具体的协处理器。
标签:
原文地址:http://www.cnblogs.com/ht-beyond/p/4947220.html