| 注意 | 如果系统中使用数据和指令统一存储系统,那么TLB也将是统一的。如果系统是数据和指令分开的存储系统,那么TLB也将分为数据TLB和指令TLB。 |
协处理器寄存器 | 作 用 |
c1中某些位 | 配置MMU中的一些操作 |
c2 | 保存内存中页表基地址 |
c3 | 设置域访问权限 |
c4 | 保留 |
c5 | 内存访问失效状态标准 |
c6 | 内存访问失效时失效地址 |
c8 | 控制与清除TLB内容相关的操作 |
c10 | 控制与锁定TLB内容相关的操作 |
| 注意 | 目录页表项和1MB的段页表项可以共存于一级页表中。 |
类 型 | 页表占用的存储空间 (单位:KB) | 支持的页大小 (单位:KB) | 页表项数目 |
一级页表 | 16 | 1024 | 4096 |
粗二级页表 | 1 | 1,4,64 | 1024 |
细二级页表 | 4 | 1,4,64 | 256 |
字 段 | 含 义 |
bits[1:0] | 段页表项标识 |
bits[3:2] | 定义段的Cache和写缓存属性 |
bit[4] | 生产商定义 |
bits[8:5] | 本段所在的域 |
bit[9] | 当前未被使用,设置成0 |
bits[11:10] | 访问权限控制AP位,见表15.23 |
bits[19:12] | 当前未被使用,设置成0 |
bits[31:20] | 该段对应的物理空间基地址的高12位 |
访问权限控制AP | S | R | 特 权 模 式 | 用 户 模 式 |
0b00 | 0 | 0 | 不可访问 | 不可访问 |
0b00 | 1 | 0 | 只读 | 不可访问 |
0b00 | 0 | 1 | 只读 | 只读 |
0b00 | 1 | 1 | 不可预知 | 不可预知 |
0b01 | X | X | 读/写 | 无访问 |
0b10 | X | X | 读/写 | 只读 |
0b11 | X | X | 读/写 | 读/写 |
| 注意 | 地址转换过程中,在物理地址产生之前,将会按表2.22的编码对访问地址的权限进行检测。 |
字 段 | 含 义 |
bits[1:0] | 粗二级页表描述符标识 |
bits[4:2] | 生产商定义 |
bits[8:5] | 域标识符 |
bit [9] | 当前未被使用,设置成0 |
bits[31:10] | 粗二级页表基地址,该地址1KB对齐 |
字 段 | 含 义 |
bits[1:0] | 细二级页表描述符标识 |
bits[4:2] | 生产商定义 |
bits[8:5] | 域标识符 |
bits [11:9] | 当前未被使用,设置成0 |
bits[31:12] | 细二级页表基地址,该地址4KB对齐 |
字 段 | 含 义 |
bits[1:0] | 大页表项类型标识符 |
bits[3:2] | Cache和写缓存属性 |
bits[11:4] | 访问权限控制位,具体编码见表15.27。 一个大页分为4个子页 AP0子页0的访问权限 AP1子页1的访问权限 AP2子页2的访问权限 AP3子页3的访问权限 |
bits [15:12] | 当前未使用,应为0 |
bits[31:16] | 该大页对应的物理页帧的基地址的高16位 |
字 段 | 含 义 |
bits[1:0] | 小页表项类型标识符 |
bits[3:2] | Cache和写缓存属性 |
bits[11:4] | 访问权限控制位,具体编码见表15.22。 一个小页分为4个子页 AP0子页0的访问权限 AP1子页1的访问权限 AP2子页2的访问权限 AP3子页3的访问权限 |
bits [15:12] | 当前未使用,应为0 |
bits[31:16] | 该小页对应的物理页帧的基地址的高20位 |
字 段 | 含 义 |
bits[1:0] | 微页表项类型标识符 |
bits[3:2] | Cache和写缓存属性 |
bits[5:4] | 访问权限控制位,具体编码见表15.29 |
bits [9:6] | 当前未使用,应为0 |
bits[31:10] | 该微页对应的物理页帧的基地址的高22位 |
| 注意 | ARMv6体系结构不包含微页,如果打算创建一个很容易移植到以后体系结构的系统,则建议在该系统中避免使用1KB微页。 |
控制位编码 | 访问类型 | 含 义 |
0b00 | 无访问权限 | 这时访问该域将产生访问失效 |
0b01 | 客户类型(client) | 根据页表中地址变换页表项的域访问权限控制位决定是否允许特定的存储访问 |
0b10 | 保留 | 使用该值会产生不可预知的结果 |
0b11 | 管理者权限(Manager) | 不考虑页表中页表项内的访问控制权限位,所以这种情况下不产生访问失效 |
| 注意 | 即使不使用MMU提供的虚拟存储功能,仍然可以把这些内核用作简单的存储保护单元。首先将虚拟存储空间直接映射到物理存储空间,然后为每个任务分配一个不同的域,最后使用这些域来保护睡眠任务(通过将它们的域访问设置成不可访问)。 |
命 令 | MCR指令 | Rd的值 | 支持的内核 |
使所有TLB无效 | MCR p15,0,Rd,c8,c7,0 | 0 | ARM720T、ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
按行使TLB无效 | MCR p15,0,Rd,c8,c7,1 | 要使之无效的虚拟地址 | ARM720T |
使指令TLB无效 | MCR p15,0,Rd,c8,c5,0 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
按行使指令TLB无效 | MCR p15,0,Rd,c8,c5,1 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
使数据TLB无效 | MCR p15,0,Rd,c8,c6,0 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
按行使数据TLB无效 | MCR p15,0,Rd,c8,c6,1 | 要使之无效的虚拟地址 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
命 令 | MCR指令 | Rd的值 | 支持的内核 |
读数据TLB锁定寄存器 | MRC p15,0,Rd,c10,c0,0 | TLB锁定 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
写数据TLB锁定寄存器 | MCR p15,0,Rd,c10,c7,1 | TLB锁定 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
读指令TLB锁定寄存器 | MRC p15,0,Rd,c8,c5,0 | TLB锁定 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
写指令TLB锁定寄存器 | MCR p15,0,Rd,c8,c5,1 | TLB锁定 | ARM920T、ARM922T、ARM926EJ-S、ARM1022E、ARM1026EJ-S、StrongARM、Xscale |
| 注意 | 在此过程中,TLB的一个地址变换入口可以涵盖所有与锁定TLB相关的指令。这通常是由使整个TLB无效后的第一条指令实现的。 |
| 注意 | 在此过程中避免使用内嵌语法(inline literal)。所有锁定TLB用到的数据可以被TLB中一个地址变换条目所覆盖。 |
| 注意 | 预取指令时发生错误,只有当该指令执行时,CPU才会产生指令预取异常中断。 |
| 注意 | 如果一条指令在预取阶段发生错误,它仍将进入指令流水线,直到该条指令被执行时,预取异常才发生。但当预取错误指令在进入执行阶段前,指令发生跳转,那么该预取异常不会发生,协处理器错误寄存器的状态也不会被更新。 |
优先级 | 引起存储访问失效的原因 | 失效状态字段 | 域字段 | 失效地址寄存器c6 | |
最高 | 极端异常(Terminal Exception) | 0b0010 | 无效 | 生产商定义 | |
| 中断向量访问异常(Vector Exception) | 0b0000 | 无效 | 有效 | |
| 地址对齐(Alignment) | 0b00x1 | 无效 | 有效 | |
| 扩展地址变换失效(页表访问失效) | 一级页表 | 0b1100 | 有效 | 有效 |
二级页表 | 0b1110 | 无效 | 有效 | ||
| 地址变换失效 | 段失效 | 0b0101 | 无效 | 有效 |
页失效 | 0b0111 | 有效 | 有效 | ||
| 域控制失效 | 段失效 | 0b1001 | 有效 | 有效 |
页失效 | 0b1011 | 有效 | 有效 | ||
| 访问权限控制失效 | 段失效 | 0b1101 | 有效 | 有效 |
页失效 | 0b1111 | 有效 | 有效 | ||
| 基于Cache的外部存储访问系统异常 | 段失效 | 0b0100 | 有效 | 有效 |
页失效 | 0b0110 | 有效 | 有效 | ||
最低 | 非Cache预取时外部存储访问异常 | 段失效 | 0b1000 | 有效 | 有效 |
页失效 | 0b1010 | 有效 | 有效 |
欢迎光临 DIY编程器网 (http://diybcq.com./) | Powered by Discuz! X3.2 |