5 转换表配置
除了在TLB中存储单个指令外,你可以配置MMU来在可缓存的内存中存储转换表。这通常提供对页表更快的访问而不是从外部内存读取。TCR_EL1有其他域来控制这些。
这些域指定转换表的TTBR0和TTBR1的cacheability和shareability。相关域称为SH0/1 shareability,IRGN0/1 Inner Cacheability,ORGN0/1 Outer Cacheability。下表呈现了允许的cacheability的设置。
IRGN/ORGN位 | cacheable属性 |
00 | 正常内存,inner non-cacheable |
01 | 正常内存,inner write-back, write-allocate cacheable |
10 | 正常内存,inner write-through cacheable |
11 | 正常内存,inner write-back no write-allocate cacheable |
相关表中内存的shareability与转换表walk相关。
对于设备或强时序内存区域,该值被忽略。
SH0 bit[13:12] | shareability |
00 | Non-shareable |
01 | 不可预测 |
10 | Outer shareble |
11 | Inner shareable |
TCR_EL1中指定的属性必须与虚拟内存区域(转换表存储)指定的属性一样。缓存转换表为正常的默认行为。
5.1 虚拟地址tagging
转换控制寄存器TCR_ELn有增加的域称为TBI,它提供tagged addressing支持。通用寄存器为64位宽,但最高16位必须为0xffff或0x0。任何其他的值将触发fault。
当tagged addressing使能时,高8位,即虚拟地址的[63:56],会被处理器忽略。虚拟地址的高8位可以用来传递数据。这些位被地址或转换fault忽略。TCR_EL1对EL0和EL1有分开的使能位。ARM没有指定或强制tagged addressing的特别使用情况。
一个使用的例子用于支持面向对象编程语言。因为有一个指针指向object,它有必要保持引用计数来跟踪引用的数目或指针,比如,因此自动垃圾收集代码可以释放object。引用计数可以被保存作为tagged address,而不用单独的表,加速了创建或销毁object的过程。