ARMv8/v9 地址翻译过程 Translation process

        本文是DDI0487K的D8.2章节Translation process的学习笔记

        VA到PA的转换首先是读取页表基地址寄存器,然后是查找页表以读取与映射关联的描述符

一、 Translation table walk(D8.2.1)

        查找表是执行以下所有操作所需的查找集:

  • 对于stage 1的单级翻译,将VA翻译为PA。
  • 对于stage 1& stage 2转换,如果stage 1禁用,则将IPA转换为PA。
  • 对于stage 1& stage 2转换都使用:
    • 对于stage 1翻译,将VA翻译为IPA。
    • 对于stage 2翻译,将stage  1查找的每个转换表的IPA转换为PA。
    • 对于stage 2翻译,将stage 1 OA的IPA转换为PA。

        当Translation table walk开始时,起始查找使用存储在TTBR_ELx寄存器中的转换表基地址来定位转换表。    

        当发生转换表查找时,转换表条目中保存的描述符为以下项之一:   

  • 对于VMSAv8-64翻译,一个8字节的单副本原子访问,即一个entry 8字节
  • 对于VMSAv9-128翻译系统,一个16字节的单副本原子访问,一个entry 16字节

        描述符类型:

  • 转换表走完,转换表条目是最终条目
  • 转换表需要在下一个更高的查找级别上进行额外的查找。
  • 描述符无效。

以下描述符类型会结束转换过程:

  • page 描述符
  • block 描述符
  • invalid 描述符

如果在转换过程中返回无效描述符,则在当前查找级别生成转换错误。

当需要额外的查找级别时,描述符包含以下所有信息:    

  • 下一个查找级别的转换表基地址。
  • 对于stage1描述符,如果TCR_ELx.HPDn的有效值为0,则描述符具有分层应用于最终翻译的访问权限。
  • 如果转换是在安全转换机制中进行的,则stage 1描述符指示基地址是在安全地址空间中还是在非安全地址空间中,除非先前查找级别的分层控制已指示它需要在非安全地址空间中。

        对于转换查找级别,转换表基地址为以下之一

  • 对于初始查找级别,是相应TTBR_ELx.BADDR字段的对齐值。
  • 对于后续的查找级别,上一个查找级别返回下一个级别转换表基地址。

        对于VMSAv9-128转换系统,描述符和转换表基地址寄存器中的跳过级别(SKL)字段允许转换表跳过后续的查找级别。

        当转换阶段的最后一个查找级别返回一个有效的描述符时,它包含以下所有内容:

  • 当前stage的OA
  • 内存访问权限
  • 内存属性

        对于使用两个stage 的转换机制,阶段1描述符地址需要从IPA到PA的stage 2转换。

        查表成功后,将返回以下内容:

  • OA
  • 如果在安全转换系统中进行查表,则返回的信息指示OA是在安全IPA或PA空间中,还是在非安全IPA或PA空间中。
  • 如果转换表是在Realm中进行的,则返回的信息指示OA是在Realm PA空间中,还是在非安全PA空间中。
  • 如果转换表是在Root状态下进行的,那么OA可以在Root、Realm、Secure或Non-secure PA空间中。
  • 输出内存属性。
  • 输出内存访问权限。

下图是具有三个查找级别的单步地址转换的示意图

        如果以下所有条件均为真,则允许转换表条目在TLB(Translation Lookaside Buffer,TLB)中缓存: 

  • entry 有效
  • 使用该entry不会产生转换错误、地址大小错误或者访问标记错误

        如果使用了两个stage地址转换,并且在这两个stage都需要完整的转换表,则以下所有情况均适用

  • S1是阶段1转换所需的查找级别数。
  • S2是阶段2转换所需的查找级别数。
  • 所需的最大转换表查找数为(S1+1)*(S2+1)-1。

二、 串联转换表 Concatenated translation tables(D8.2.2)

        本节仅适用于VMSAv8-64转换系统。 

        对于stage 2地址转换的初始查找,最多可以串联16个转换表。

        对于stage 2转换,如果初始查找级别中的转换表需要16个或更少条目,则可以将阶段2转换配置为具有以下所有属性:

  • 阶段2转换的初始查找从下一个查找级别开始。
  • 对应于先前初始查找级别上的原始数量的转换表条目的多个转换表将在该下一个查找级别上串联起来。

        对于16KB转换粒度,如果VTCR_EL2.DS的有效值为0,并且通过stage 2转换48位地址大小,则需要从第1级开始初始查找,并使用两个串联的转换表。

        对于stage 2中的初始查找,如果使用了串联转换表,则以下所有条件均适用:

  • 最多4个附加IA位通过初始查找解析。(最多16个串联表)
  • 对于初始查找解析的每额外n个IA位,TTBR_ELx中保存的最低有效转换表基地址位数将减少n位。
  • 对于初始查找所解析的每额外n个IA位,在初始查找级别需要2^n个级联转换表。

        使用串联转换表可以消除额外的查找级别的开销。

        如果使用串联转换表,则需要软件执行以下所有操作(要对照一下代码):

  • 将第一个转换表的基地址对齐到串联转换表所占内存大小之和。
  • 串联转换表中第一个转换表的地址放入VTTBR_EL2或VSTTBR_EL2。
  • VTCR_EL2 or VSTCR_EL2 写入初始查找级别

三、 页表基地址寄存器(D8.2.3)

        转换表基地址寄存器TTBR_ELx保存初始查找的转换表基地址。对于支持两个VA范围的转换阶段,需要两个转换表基地址寄存器。

        软件可以使用TCR_ELx.TnSZ将转换阶段IA大小配置为小于支持的大小。

        如果不支持EL2,对于stage 1 EL1和0转换机制,以下所有适用:

  • TTBR_ELx寄存器中保存的转换表基地址为PA。
  • Table描述符返回的转换表基地址是一个PA。

        如果使用EL2,则对于stage 1 EL1和0以外的所有地址转换阶段,以下所有适用

  • TTBR_ELx寄存器中保存的转换表基地址为PA。
  • Table描述符返回的转换表基地址是PA。

        如果EL2已启用,则对于stage 1 EL1和0中地址转换,以下所有情况均适用:

  • TTBR_ELx寄存器中保存的stage 1转换表基地址是IPA。
  • Table描述符返回的stage 1转换表基地址是IPA。
  • 对stage 1转换表的访问受stage 2转换的约束。

        对于VMSAv8-64转换系统,TTBR_ELx中保留的{I}PA位数由页表粒度和OA地址大小决定。使用最大OA地址大小48位或52位时,每个颗粒大小使用的位如下表所示。可能需要软件将一个或多个低阶基地址位设置为零,以将表格与表格大小对齐。

        如果地址转换阶段使用小于最大值的OA大小,则要求软件将OA大小高位对应的TTBR_ELx中的转换表基地址的高位设置为0。 

        如果TCR_ELx.TnSZ指定的IA大小小于在初始查找级别解析的最大大小,则使用更多的低阶TTBR_ELx位来保存转换表基地址。

        如果地址转换阶段使用的OA大小小于最大值,并且TTBR_ELx中转换表基地址的OA大小高于配置的位未设置为零,则会生成地址大小错误并报告以下信息

  • 无论转换阶段是否从0级查找开始,都会将转换级别0查找视为生成错误。
  • 生成故障的stage

        对TTBR0_ELx和TTBR1_ELx的直接写操作按程序顺序进行,而不需要显式同步。对于任何一个转换,作为转换的一部分进行的TTBR0_ELx和TTBR1_ELx的所有间接读取仅观察直接写入顺序中的一个点。

        与直接写入系统寄存器的一般要求一致,在上下文同步事件完成之前,间接读取不需要观察对TTBR_ELx的直接写入。

        

        

四、 两个VA地址范围时的TTBR0_ELx和TTBR1_ELx选择(D8.2.4) 

         如果stage 1的转换支持2个VA范围,那么TTBR_ELx寄存器指向以下所有地址范围

  • 对于从地址0x0000000000000000开始的Lower VA范围,TTBR0_ELx指向初始查找级别的转换表
  • 对于在地址0xFFFFFFFFFFFFFF结束的上VA范围,TTBR1_ELx指向初始查找级别的转换表。

        如果stage 1的转换机制支持两个VA范围,则TCR_ELx。{T0SZ、T1SZ}字段配置以下所有地址范围大小:

  • lLwer VA范围为0x000000000000到(2^(64-T0SZ) - 1)。
  • upper VA
  • 范围为(2^64-2^(64-T1SZ))到0xFFFFFFFFFFFFFFFF。

        如果stage 1支持两个VA范围,当访问的地址不在Lower VA范围或Upper VA范围内时,将产生stage 1 level 0转换故障。        

      如果stage 1支持两个VA范围,则使用以下所有选项来选择TTBR_ELx:

  •  如果VA位[55]为零,则选择TTBR0_ELx
  • 如果VA位[55]为1,则选择TTBR1_ELx

        如果stage 1支持两个VA范围,并且TCR_ELx.EPDn为一个,则当基于TTBRn_ELx发生TLB未命中时,将生成level 0转换故障,并且不执行查表。

        对于VMSAv9-128翻译系统,如果stage 1统支持两个VA范围,则支持的最大VA宽度为55位,TnSZ字段的最小允许值为9。

1. 防止EL0访问地址映射的另一半

        本节中基于实现FEAT_E0PD。

        TCR_ELx.{E0PD0, E0PD1}字段可以用来阻止EL0访问由相应的TTBR0_ELx或TTBR1_ELx转换的地址,

        当TCR_ELx.{E0PD0,E0PD1}字段阻止EL0访问TTBR0_ELx或TTBR1_ELx转换的地址,则生成0级转换故障。

        当TCR_ELx。{E0PD0,E0PD1}字段生成0级转换故障:

  • 无论访问的地址是否存在于TLB中,处理错误所需的时间都应该相同,以减轻使用故障计时的攻击。
  • 所产生的故障不会以不同的方式影响PE的任何微体系结构状态,无论所访问的地址是否存在于TLB中,以防止这些信息被用于确定TLB中地址的存在。

        当TCR_ELx。{E0PD0,E0PD1}字段生成level 0转换故障,该故障不会被计为性能监视功能的TLB未命中。

五、 转换表和转换表查找属性(D8.2.5) 

        转换表和转换表查找属性包括表大小、表对齐、表端排列和内存属性。

1. 转换表大小(D8.2.5.1

        对于VMSAv8-64转换系统,是一个8字节或64位的对象;对于VMSAv9-128转换系统,是一个16字节或128位对象。

        如果n是由查找级别解析的位数,则该查找级别所需的转换表条目数为2^n。

        转换表的大小(以字节为单位)由条目数乘以描述符大小确定。

        转换表条目的最大数量由转换粒度大小决定,转换粒度大小由以下其中一项定义:

  • 对于支持一个VA范围的stage 1转换,为TCR_ELx.TG0
  • 对于可支持两个VA范围的stage 1转换:
    • Lower VA,为TCR_ELx.TG0。
    • Upper VA,为TCR_ELx.TG1。
  • 对于非安全EL1&0转换中的stage 2转换,VTCR_EL2.TG0。
  • 对于安全 EL1&0转换中的stage 2转换,遵循以下规则:
    • 如果stage 2 IA为非安全IPA,则使用VTCR_EL2.TG0。
    • 如果stage 2 IA是安全IPA,则VSTCR_EL2.TG0。
  • 对于Realm EL1&0转换机制中的阶段2转换,VTCR_EL2.TG0。

2. 转换表对齐(D8.2.5.2

        转换表对齐规则:

  • 对于VMSAv8-64,如果转换表的条目少于8个,并且使用大于48位的OA大小,则该表将对齐为64字节。
  • 否则,转换表将与该转换表的大小对齐。(即4K与4K对齐,16K与16K对齐)

        只有当以下所有条件都为真时,转换表条目才可能少于8个:

  • 转换表处于初始查找级别。
  • 不使用级联转换表。

        如果使用了级联的转换表,则需要将级联的转换表与级联的转换表占用的内存的整体大小对齐

3. 转换表大小端(D8.2.5.3

  • 如果使用VMSAv8-64,则读取是8字节的单副本原子访问。
  • 如果使用VMSAv9-128,则读取是16字节的单副本原子访问。

        转换表查找的字节序是由相应的SCTLR_ELx.EE位决定的。

        更改SCTLR_ELx.EE位需要同步,然后才能保证更改对后续操作可见

4. 转换表内存属性(D8.2.5.4

        TCR_ELx和VTCR_EL2寄存器决定转换表的内存属性。

        转换表所需的内存类型为普通内存(normal memory)

        对于两阶段翻译制度,当从stage 1查找翻译表时:

  • arm 建议第二阶段的翻译表查找阶段1的翻译表,不映射到device memory,Arm recommends that the stage 2 translation of the stage 1 translation table lookup does not map to Device memory.(很难读懂)
  • 软件可以配置HCR_EL2.PTW来保护stage 2 table walks from mapping stage 1 translation
    tables to Device memory

        建议TCR_ELx应用于转换表的内存属性与其他访问存储转换表的内存所应用的属性相同。

六. 转换表查找特性(D8.2.6

1. 查表的访存顺序D8.2.6.1

        查表被认为是单独的观察者,对于以下情况,单独的观察者可能会观察到对转换表的显式写入

  • 由同一指令产生的不同的显式写操作引起的查表。
  • 在指令对转换表执行显式写操作后,由程序顺序出现的任何指令产生的显式访问引起的查表

        仅在执行DSB指令之后,对Shareability转换表的显式写入是可观察的。此DSB指令和执行对转换表的显式写入的指令必须是由同一PE执行的。

        何对转换表的写入都不会被任何与由load/store生成的显式内存访问相关联的查表所观察,该显式内存访问是在执行对转换表的写入之前按程序顺序发生的。

        如果支持FEAT_ETS2,则E1是显性内存效应,E2是TTD的隐式读取,在以下情况E1在E2之前有序:

  • E1 is program-order-before a Fault Effect E3.
  • E2 is Translation-intrinsically-before E3.

2. 查表的安全状态D8.2.6.2

        对于非安全转换中的转换表,所有的转换表查找都是在非安全IPA或PA空间中完成的。 

       EL2启用时,Secure EL1&0 stage 1转换的OA空间为IPA空间。其他情况下,安全stage 1转换机制的OA空间是PA空间。

        对于在安全转换中的stage 1转换表(包括未实施FEAT_RME时的EL3转换),stage 1的OA空间由以下所有因素决定:

  • 初始查表是在安全OA空间中完成的。
  • 查表在安全OA空间时,描述符NSTable位状态是其中之一
    • 如果NSTable为0,则下一级查表将执行到安全OA空间。
    • 如果NSTable为1,则下一级查表将执行到非安全OA空间。
  •  当表描述符查找到非安全OA空间时,下一级查表在非安全OA空间完成

        对于安全空间中的stage 2转换,转换表的PA空间(table所在的PA space)由以下决定:

  • 翻译安全IPA时,PA空间由VSTCR_EL2.SW位的有效值决定。
  • 翻译非安全IPA时,PA空间由VTCR_EL2.NSW位的有效值决定。

        当通过stage 2转换PA时,转换的输出PA空间(OA)由以下条件之一确定:

  • 转换安全IPA空间中的地址时,VSTCR_EL2.SA位的有效值
  • 转换非安全IPA空间中的地址时,VTCR_EL2.NSA位的有效值。

以上说明很绕,注意一个是指table所在的PA空间,一个是OA所在的PA空间即可。

        对于在Realm EL2或Realm EL2&0中的stage 1 table,所有查表都会在Realm PA空间中完成。        

        无论在Realm EL1&0转换中,stage 1转换是启用还是禁用,Realm EL2总是启用,Realm EL1&0 stage 1转换的OA是Realm IPA。

        对于EL3转换机制中的第1阶段转换表,如果实现了FEAT_RME,则所有查表都会在root PA空间中完成。

七. 翻译加固扩展Translation Hardening ExtensionD8.2.7

         本节要求实现可选特性FEAT_THE

        为了保护内核转换的完整性,转换加固扩展FEAT_THE可以防止拥有转换表的异常级别修改这些转换表条目的任意子集。

1. stage 1的保护属性

        如果满足以下条件之一,则启用保护:

  •  如果stage 1使用VMSAv8-64且PnCH为1
  • 如果stage 1使用VMSAv9-128。

        否则将禁用保护,即使未启用stage 1,也适用

        如果启用保护,则stage 1描述符中的保护位的值有如下情况

  • 如果保护位为0,则描述符为非保护
  • 如果保护位为1,则描述符为受保护

        即使未启用stage 1转换,也适用。

        对于stage 1描述符,如果启用了保护并且以下任何检查失败,则RCW和RCWS指令不会更新该描述符:

  • 以下所有情况下的RCW状态检查
    • 对于受保护的描述符,会尝试更改该描述符的保护或有效性
    • 对于非保护描述符,会尝试更改该描述符的保护。
  • 在以下所有情况下,RCW Mask检查:
    • 对于受保护且有效的描述符,当尝试更新该描述符中的某个位且相应的RCWMASK_EL1位的有效值为0时。

        对于stage 1描述符,如果以下任何检查失败,则RCWS指令不会更新该描述符:

  • 当试图更改该描述符的有效性时,RCWS状态检查。
  • 对于有效描述符,当尝试更新该描述符中的某个位且相应RCWSMASK_EL1位的有效值为0时,将进行RCWS Mask检查。

        即使描述符未受保护,RCWSMASK_EL1中的位掩码也控制RCWS指令允许更新描述符中的哪些字段,如下所示:

  • 值为0表示描述符的相应位不能更改。
  • 值为1表示描述符的相应位可以更改。

        RCWMASK_EL1和RCWSMASK_EL1寄存器的内容应该由虚拟机监控程序为每个实例设置一次。

        如果未启用保护,则RCW指令可以更改阶段1描述符中的所有位。

        RCWS指令受RCWS状态和掩码检查的约束,即使禁用了保护。

        在ELx禁用阶段1转换时,以下所有情况均适用:

  • RCW指令要经过RCW检查。
  • RCWS指令要经过RCW检查和RCWS检查。

        预期ELx的RCW指令用于更新ELx拥有的阶段1描述符。ELx的RCW指令不希望更新ELx不拥有的阶段1描述符,也不希望更新阶段2描述符。

        预期RCWS指令用于更新为软件使用保留的描述符中的位,相应地,在RCWSMASK_EL1中只有为软件使用保留的位被设置为1。如果描述符更改仅影响由软件解释的位,则不必进行TLB维护以同步TLB上的影响。

        本节没有细看,直接照搬机翻,属于安全扩展的内容,对安全一直没什么兴趣。

2. stage1 降低 一致性写入

         当且仅当它是由RCWS指令写入的,并且在执行该RCWS指令的PE上允许查表不相干(PTTWI)为1时,写操作才具有降相干性。 

        对于stage 1翻译,PTTWI的值如下表所示:

         本节略过,晦涩难懂,暂时没有研究的兴趣。

3. 保证翻译Assured translation

       很明显这一节又只能先机翻了。

        如果以下所有条件都满足,那么VA 的stage 1查表具有Assured Translation特性

  • EL1&0转换启用2个stage 。
  • 对于初始查找级别,适用以下其中一项
    • 从TTBR0_EL1开始,TTCR_EL2.TL0为1。
    • 从TTBR1_EL1开始,VTCR_EL2.TL1为1。
  • 对于后续级别,以下所有条件均适用:
    • stage 1的所有前面的级别都具有Assured Translation property。
    • stage 1转换表描述符是受保护的描述符,并且从具有stage 2 MRO权限的IPA中获取。

        如果IPA由stage 2的block或page描述符转换,并且AssuredOnly属性设置为1,并且满足以下情况,则由该描述符转换的任何访问都会生成stage 2权限错误:

  • 生成IPA的stage 1转换表的级别没有Assured Translation property.
  • stage 1被禁用

        如果以下所有情况均适用,则从EL1到内存的特权保护控制堆栈数据访问会由于AssuredOnly检查而生成stage 2权限错误,这与stage 1转换是否具有Assured Translation property.无关

  • VTCR_EL2.GCSH的值为1。
  • stage 2转换启用
  • 使用stage 2 block或page描述符进行转换,并将AssuredOnly属性设置为0。

4. stage 2 toplevel检查

        如果启用了stage 2,则stage 2 TopLevel0和TopLevel1权限表明IPA可以分别用作TTBR0_EL1和TTBR1_EL1的顶级表。

        对于由TTBR0_EL1转换的VA,由于根据下表中的条件进行的TopLevel检查,stage 1的初始查找级别的阶段2转换将生成stage 2权限错误:

        对于由TTBR1_EL1翻译的VA,根据下表中的条件进行TopLevel检查,stage 1翻译表的初始查找级别的stage 2翻译会生成阶段2权限错误:

 八. VMSAv8-64 4K页表转换 VMSAv8-64 translation using the 4KB granuleD8.2.8

        本节内容基于 VMSAv8-64

        使用4KB粒度的地址转换具有4KB的页面大小。根据设置和支持的功能,使用最多5个查找级别解析最多40个地址位。

        在本节中,如果未指定地址转换阶段,则对TCR_ELx.DS的有效值的引用也适用于VTCR_EL2.DS。

        对于4KB翻译颗粒,翻译机制支持的最大VA和PA为以下之一

  • 如果TCR_ELx.DS的有效值为0,则支持的最大VA和PA为48位。
  • 如果TCR_ELx.DS的有效值为1,则支持的最大VA和PA为52位。

        对于4KB转换颗粒,如果TCR_ELx.DS的有效值为0,则OA[51:48]被视为0b0000。对于4KB转换粒度支持的每个查找级别,下表描述了该级别上的转换表属性。

         对于4KB转换粒度,由level 3的page描述符解析的转换具有以下所有属性

  • 页大小为4KB
  • 转换可以使用以下最大地址范围之一解析页面:
    • 如果TCR_ELx.DS的有效值为0,则IA[47:12]。
    • 如果TCR_ELx.DS的有效值为1,则IA[51:12]
  • 该页面由以下其中一个地址寻址:
    • 如果TCR_ELx.DS的有效值为0,则OA[47:12]
    • 如果TCR_ELx.DS的有效值为1,则OA[51:12]
  • IA[11:0]直接映射到OA[11:0]

        对于4KB转换粒度,由指定查找级别的block描述符解析的转换具有下表中显示的所有属性: 

        对于4KB的转换颗粒,下图显示了如何解析最大52位的IA大小。大于48位的IA要求TCR_ELx.DS的有效值为1。

        

1.  VMSAv8-64下4KB粒度的stage 1转换

        对于4KB转换颗粒,当开始stage 1查表,初始查找级别由TCR_ELx.TnSZ字段的值决定,如下表所示。

        对于4KB转换粒度中的stage 1转换,根据IA大小,初始查找级别最多可索引9位,而所有剩余查找级别的索引正好为9位。 

        对于4KB转换颗粒和52位IA,下图是stage 1地址转换的一般视图。IA和OA大于48 bit时,要求TCR_ELx.DS的有效值为1。512GB的block 描述符要求TCR_ELx.DS的有效值为1

2. VMSAv8-64下4KB粒度的stage 2转换 

        对于4KB转换粒度,当开始stage 2 查表时,初始查找级别由以下之一确定:

  • 如果VTCR_EL2.DS的有效值为0,则初始查找级别由VTCR_EL2.SL0或VSTCR_EL2.SL0之一确定,并且VTCR_EL2.SL2和VSTCR_EL2.SL2为RES0。
  • 如果VTCR_EL2.DS的有效值为1,则初始查找级别由VTCR_EL2.SL0和VTCR_EL2.SL2或VSTCR_EL2.SL0和VSTCR_EL2.SL2的组合确定。

        对于4KB转换粒度,当开始stage 2查表时,下表显示了由VTCR_EL2.SL0或VSTCR_EL2.SL0确定的初始查找级别,并且当VTCR_EL2.DS的有效值为1时,对应的VTCR_EL2.SL2或VSTCR_EL2.SL2

SL2SL0Initial lookup level
0b00b00Level 2
0b00b01Level 1
0b00b10Level 0
00b00b11Level 3
0b10b00Level -1
0b10b01Reserved
0b10b10Reserved
0b10b11Reserved

        对于4KB转换粒度,当开始stage 2查表且初始查找级别为-1时,下表显示了所有允许的串联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值:

        对于4KB转换粒度,当开始stage 2查表且初始查找级别为0时,下表显示了所有允许的级联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值

        对于4KB转换粒度,当开始stage2查表并且初始查找级别为1时,下表显示了所有允许的级联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值:

        对于4KB转换粒度,当开始stage2查表且初始查找级别为2时,下表显示了所有允许的串联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值: 

        对于4KB转换粒度,当开始stage2查表并且初始查找级别为3时,下表显示了所有允许的级联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值 

        对于4KB转换粒度和52位IA,下图是stage2转换的一般视图。大于48位的IA要求VTCR_EL2.DS的有效值为1。512GB的块大小要求VTCR_EL2.DS的有效值为1 

        对于 4KB转换粒度,当启动stage2查表并且出现以下情况之一时,将生成阶段2 0级转换故障

  • 如果VTCR_EL2.DS的有效值为0,则以下一项或多项为真
    • VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ的值与对应的VTCR_EL2.SL0或VSTCR_EL2.SL0的值不一致。
    • VTCR_EL2.SL0或VSTCR_EL2.SL0为保留值
  • 如果VTCR_EL2.DS的有效值为1,则以下一项或多项为真
    • VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ的值与对应的VTCR_EL2不一致。{SL2,SL0}或VSTCR_EL2。{SL2,SL0}值。
    • VTCR_EL2.{SL2, SL0}或VSTCR_EL2。{SL2,SL0}为保留值

3. VMSAv8-64 4KB查找页表描述符

        对于4KB转换粒度,查找描述符地址,(即entry的地址)的算法所需信息:

  • 页表基地址BaseAddr。
  • 支持的PA大小,PAsize的位数
  • IA并作为查表的索引使用
  • 每个初始查找级别,TCR_ELx.TnSZ允许的值范围。
  • 对于stage  2,
    • VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ的值
    • VTCR_EL2.SL0或VSTCR_EL2.SL0的值

 九. VMSAv8-64 16K页表转换 VMSAv8-64 translation using the 16KB granuleD8.2.9 

        本节基于VMSAv8-64

        使用16KB粒度的地址转换具有16KB的页面大小。根据设置和支持的功能,使用最多4个查找级别解析最多38个地址位

        在本节中,如果未指定地址转换阶段,则对TCR_ELx.DS的有效值的引用也适用于VTCR_EL2.DS。

        对于16KB的翻译颗粒,一个翻译体制支持的最大VA和PA为以下值之一:

  • 如果TCR_ELx.DS的有效值为0,则支持的最大VA和PA为48位。
  • 如果TCR_ELx.DS的有效值为1,则支持的最大VA和PA为52位。

        对于16KB的转换粒度,如果TCR_ELx.DS的有效值为0,则OA[51:48]被视为0b0000

        对于16KB转换粒度支持的每个查找级别,下表描述了该级别上的转换表属性

        对于16KB转换粒度,level 3的page描述符解析的转换具有以下所有属性: 

  • page大小为16KB。
  • 转换可以使用以下最大地址范围之一解析页面:
    • 如果TCR_ELx.DS的有效值为0,则IA[47:14]
    • 如果TCR_ELx.DS的有效值为1,则IA[51:14]
  • 该页面由以下地址之一寻址:
    • 如果TCR_ELx.DS的有效值为0,则OA[47:14]
    • 如果TCR_ELx.DS的有效值为1,则OA[51:14]。
  • IA[13:0]直接映射到OA[13:0]。

            对于16KB转换粒度,由指定查找级别的block描述符解析的转换具有下表中显示的所有属性

    

         对于16KB的转换粒度,下图显示了如何解析最大52位的IA大小。大于48位的IA要求TCR_ELx.DS的有效值为1

1.  VMSAv8-64 16KB页表 Stage 1地址转换

        对于16KB转换粒度,当开始stage 1查表时,初始查找级别由TCR_ELx.TnSZ字段的值决定,如下表所示:

        对于16KB转换粒度中的stage 1转换,根据IA大小,初始查找级别最多可索引11位,所有剩余查找级别精确索引11位。 

        对于16KB的转换粒度和52位的IA,下图是stage 1地址转换的一般视图。IA和OA大于48 bit时,要求TCR_ELx.DS的有效值为1。64GB的块大小要求TCR_ELx.DS的有效值为1。

2. VMSAv8-64 16KB页表 Stage 2 转换

        对于16KB转换粒度,当开始stage 2查表时,初始查找级别由相应的VTCR_EL2.SL0或VSTCR_EL2.SL0值决定。

        对于16KB转换粒度,当开始stage 2查表时,下表显示了由SL0确定的初始查找级别:

        对于16KB转换粒度,当开始stage 2查表且初始查找级别为0时,下表显示了所有允许的串联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值:

         对于16KB转换粒度,当开始stage2查表且初始查找级别为1时,下表显示了所有允许的串联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值:

        对于16KB转换粒度,当开始stage2查表且初始查找级别为2时,下表显示了所有允许的串联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值: 

        

        对于16KB转换颗粒,当开始stage2查表且初始查找级别为3时,下表显示了所有允许的级联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值: 

         对于16KB转换粒度和52位IA,下图是stage 2转换的一般视图。大于48位的IA要求VTCR_EL2.DS的有效值为1。64GB的块大小要求VTCR_EL2.DS的有效值为1

        对于16KB转换粒度,当stage2查表并且出现以下情况之一时,将生成stage2转换错误:

  • VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ的值与对应的VTCR_EL2.SL0或VSTCR_EL2.SL0的值不一致
  • VTCR_EL2.SL0或VSTCR_EL2.SL0编程为保留值

3. VMSAv8-64 16KB查找entry

        对于16KB转换粒度,查找entry地址的算法所需信息如下:

  • 支持的PA的位数,PAsize
  • IA作为entry的索引使用
  • TCR_ELx.TnSZ允许的值范围。
  • stage2:
    • VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ的值
    • VTCR_EL2.SL0或VSTCR_EL2.SL0的值。

十、 VMSAv8-64 64KB页表转换

        本节基于VMSAv8-64

        使用64KB粒度的地址转换具有64KB的页面大小。根据设置和支持的功能,最多使用3个查找级别解析36个地址位

        对于64KB转换颗粒,转换机制支持的最大VA大小为以下值之一

  • 如果未实现FEAT_LVA,则支持的最大VA为48位。
  • 如果实现了FEAT_LVA,则支持的最大VA为52位。

        对于64KB的翻译粒度,翻译机制支持的最大PA大小为以下值之一:    

  • 如果未实现FEAT_LPA,则支持的最大PA为48位。
  • 如果实现了FEAT_LPA,则支持的最大PA为52位。

        对于64KB的转换颗粒,如果没有实现FEAT_LPA,则OA[51:48]被视为0b0000

        对于64KB转换粒度支持的每个查找级别,下表描述了该级别上的转换表类型。

        对于64KB转换粒度,由level 3的page描述符解析的转换具有以下所有属性        

  • 页面大小为64KB。
  •  对于stage 1,转换可以使用以下最大地址范围之一解析页面】
    • 如果没有实现FEAT_LVA,则IA[47:16]。
    • 如果实现了FEAT_LVA,则IA[51:16]
  • 对于stage 2,转换可以使用以下最大地址范围之一解析页面:
    • 如果没有实现FEAT_LPA,则IA[47:16]。
    • 如果实现了FEAT_LPA,则IA[51:16]。
  • 对于stage 1和2,该页将通过以下其中一项进行寻址
    • 如果没有实现FEAT_LPA,则OA[47:16]。
    • 如果实现了FEAT_LPA,则OA[51:16]。
  • IA[15:0]直接映射到OA[15:0]。

        对于64KB转换粒度,由指定查找级别的block描述符解析的转换具有下表中显示的所有属性:

        对于64KB的转换粒度,下图显示了如何解析最大52位的IA大小。对于stage 1,大于48位的IA需要实现FEAT_LVA。对于stage 2,大于48位的IA需要实现FEAT_LPA

        

1. VMSAv8-64 64KB粒度 Stage 1转换

        对于64KB转换粒度,当开始stage 1查表时,初始查找级别由TCR_ELx.TnSZ字段的值决定,如下表所示:

        对于64KB转换粒度中的stage 1转换,根据IA大小,初始查找级别最多可索引13位,所有剩余查找级别的索引正好为13位。

        对于64KB转换粒度和52位IA,下图是阶段1地址转换的一般视图。大于48 bit的IA需要实现FEAT_LVA,大于48 bit的OA需要实现FEAT_LPA。4TB的数据块大小需要实现FEAT_LPA

2.  VMSAv8-64 64KB页表 Stage 2转换

        对于64KB转换粒度,当开始stage 2查表时,初始查找级别由相应的VTCR_EL2.SL0或VSTCR_EL2.SL0值决定。

        对于64KB转换粒度,当开始stage 2查表时,下表显示了由SL0确定的初始查找级别:

        对于64KB转换粒度,当开始stage2查表且初始查找级别为1时,下表显示了所有允许的串联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值:

         对于64KB转换粒度,当开始stage2查表且初始查找级别为2时,下表显示了所有允许的级联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值:

         对于64KB转换粒度,当开始stage 2查表且初始查找级别为3时,下表显示了所有允许的级联转换表配置以及相应的VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ值:

         对于64KB的转换粒度和52位的IA,下图是stage2转换的一般视图。大于48位的IA需要实现FEAT_LPA。4TB的块大小需要实现FEAT_LPA。

        对于64KB转换粒度,当启动stage2查表并且以下情况之一为真时,将生成stage2 0级转换错误

  • VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ的值与对应的VTCR_EL2.SL0或VSTCR_EL2.SL0的值不一致
  • VTCR_EL2.SL0或VSTCR_EL2.SL0编程为保留值

3. VMSAv8-64 64KB查找entry

         对于64KB转换粒度,查找entry地址的算法所需信息:

  • 转换表基地址BaseAddr
  • PA大小的位数,PAsize
  • IA作为翻译表的索引
  • 对于每个初始查找级别,TCR_ELx.TnSZ允许的值范围
  • 对于stage2 
    • VTCR_EL2.T0SZ或VSTCR_EL2.T0SZ的值。
    • VTCR_EL2.SL0或VSTCR_EL2.SL0的值。

十一、 VMSAv9-128 

        本节使用VMSAv9-128

        对于VMSAv9-128使用的转换粒度:

  • Stride是用于索引除初始查找级别之外的查找级别的最小位数。
  • 除初始查找级别外,查找级别上的转换表条目的最小数量为2^Stride。
  • 在查找level 3的页描述符所解析的地址位数PageIndex,为Stride+4。

1. 开始 VMSAv9-128转换

        起始级别由翻译粒度大小和相应TCR_ELx中的TnSZ字段决定,如下表所示:

        当查表开始时,通过将TTBR_ELx.SKL字段的值添加到常规开始级别来确定开始级别 

        如果起始级别大于3,则生成0级转换错误。

        阶段2使用VMSAv9-128转换系统时,VTCR_EL2。{SL2、SL0}和VSTCR_EL2。{SL2,SL0}字段为RES0

        对于某个转换粒度,计算起始地址和属性使用以下信息:

  • TBR_ELx.BADDR中的转换表基地址BaseAddr。
  • IA作为索引
  • TCR_ELx.TnSZ允许的值范围。
  • Stride
  • 转换表基地址寄存器SKL值

2. 继续VMSAv9-128转换

        当在当前查找级别返回表描述符并且没有生成MMU错误时,转换表继续到下一个查找级别。

        其余所有查找级别所解析的地址位数K为(当前查找级别)*Stride

        下一个查找级别是当前查找级别+1+表描述符SKL字段。

        下一级转换表的大小为2N*16字节,根据下表确定

3. 完成 VMSAv9-128转换

        当在当前查找级别返回块或页描述符时,转换表走完,当前查找级别为最终查找级别

        对于VMSAv9-128转换系统,由块或页描述符解析的转换具有下表中显示的所有属性。在此表中,以下所有项均适用

  • OAB是在最终查找级别的描述符提供的OA。
  • IA是提供给翻译阶段的IA。
  • 最终地址是翻译阶段提供的OA  

        对于转换阶段提供的最终地址,如果OA大小以上的地址位没有设置为零,则在当前查找级别生成地址大小错误。      

十二、禁用stage(8.2.12)

       stage 1和2转换可以单独禁用,这样做会影响MMU的行为

1. 禁用stage 1

        如果stage 1被禁用,则以下所有情况都适用于在stage1的内存访问:

  • IA平行映射到OA
  • 无法生成转换错误、访问标志错误或权限错误
  • 可以产生地址大小错误和对齐错误
  • 没有内存保护
  • 访问以下IPA或PA空间之一
    • 对于非安全状态的访问,访问的是非安全的IPA或PA空间
    • 对于Secure状态的访问,访问的是Secure IPA或PA空间
    • 对于从Realm状态访问,访问的是Realm IPA或PA空间
    • 对于从Root状态访问,访问的是Root PA空间。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
armv8/armv9架构是英国ARM公司推出的一种指令集架构,用于开发低功耗、高性能的处理器。它广泛应用于各种移动设备、嵌入式系统和物联网设备中。 入门armv8/armv9架构时,首先需要了解它的基本特点。相较于之前的armv7架构,armv8/armv9架构引入了64位指令集,支持更大的物理内存寻址和更高的数据通路,提供更高的性能和更多的扩展性。 其次,了解基本的指令集是很重要的。armv8/armv9架构支持基本的寄存器操作、算术和逻辑指令,以及访问内存和外设的指令。掌握这些指令的使用方法,可以进行基本的程序开发和调试。 此外,理解处理器的特殊功能模块也是入门的一部分。比如,了解浮点单元(FPU)的使用可以提升浮点运算的性能,了解向量处理单元(NEON)可以加速数据密集型计算。 此外,还需要学习汇编语言的基本知识。armv8/armv9架构使用汇编语言来编写底层的程序,可以更好地优化代码,提高性能和功耗效率。学习汇编语言可以帮助开发者更好地理解底层原理,编写高效的代码。 最后,掌握相关的开发工具和调试工具也是入门的一部分。armv8/armv9架构有很多开发工具和调试工具可供选择,如GCC编译器、GDB调试器等。熟悉这些工具的使用方法,可以方便开发和调试程序。 总之,入门armv8/armv9架构需要了解其基本特点、指令集、特殊功能模块、汇编语言和开发工具。通过不断实践和学习,逐渐掌握这些知识和技能,可以进行更深入的armv8/armv9架构开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值