ARMv8-A编程指导之MMU(6)

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的过程。

你可能感兴趣的:(ARMv8-A编程指导手册,tagged,address)