aarch64 VMSA - VA PA translation regime

 

参考:Arm Architecture Reference Manual for A-profile architecture 

Chapter D5  The AArch64 Virtual Memory System Architecture

 

本文只从里面摘取,使用 AArch64 模式时的相关信息。

 

address type

VA  Virtual address

PA physical address

IPA Intermediate physical address [ 用虚拟机跑操作系统,使用两层地址转换,第一层转换输出地址叫 IPA ]

 

VA 地址的长度

VA 最大长度(芯片设计后不可配置修改)

三下面3选1

(注:按个人理解,这儿是 architecture reference 里面的,是指 芯片实现时,可以 3 选 1 。而当芯片设计实现后,比如A53芯片,它的   最大VA 长度   是 确定 的 )

48

52 实现了 FEAT_LVA 并且以 64K 作为页大小,

52 实现了FEAT_LPA2, 并且   TCR_ELx.DS == 1 ,并且 使用 4K 或 16K 作为 页大小。

 

MMU translation输入VA 的长度(芯片使用中软件可配置)

translation regime 可以通过寄存器配置,支持 比 最大VA 长度 小的 VA 地址范围。

TCR_ELx.TxSZ

VA 地址长度为 64-TxSZ.

TxSZ 为 6 bits ,可以取值为 0 ~ 64.  取 16时, 地址转换单元的  输入 VA 为 64 - 16 = 48 bits. 

 

PA 地址长度

PA 地址最大长度(芯片确定后不可配置修改)

ID_AA64MMFR0_EL1.PARange  反映了 芯片 实现的 PA 地址长度。芯片 设计后不可配置修改。

0000 - 32 bits

0001 - 36 bits

0010 - 40 bits

0011 - 42 bits

0100 - 44 bits

0101 - 48 bits

0110 - 52 bits

MMU translation output PA 地址长度(可配置)

TCR_ELx.{I}PS 配置决定

000 - 32 bits

001 - 36 bits

010 - 40 bits

011 - 42 bits

100 - 44 bits

101 - 48 bits

110 - 52 bits

 

address bits above the output address size set to zero

MMU 把高于 配置地址 size 的 bit 设为0;

 

translation stage -  translation regime 地址转机制

有两类:

single stage translation  - 单步 地址转换机制

two stage translation - 两步地址转换机制(只在 虚拟机+客户操作系统 这样的场景中使用到 )。

 

translation stage 对VA 的支持(以 48bits 长度的VA 为例,52 bits 长度的 VA 同理)

可以只支持 一段 VA 地址范围。 VA 范围必须为 0x0000 0000 0000 0000 到 0x0000 ffff ffff ffff ffff

可以支持 两段 VA 地址范围。一段VA 地址范围必须是在 64bits 地址范围的 最低端,另外一段VA 范围 必须在 64bits 地址范围的 最高端。

Bottom VA range: 0x0000 0000 0000 0000  到 0x0000 ffff ffff ffff

top VA range: 0xffff 0000 0000 0000 到 0xffff ffff ffff ffff ;

 

(芯片)如果没有 实现 FEAT_VHE ,只有  EL1 & 0 Translation regime 的 stage 支持 两段 VA 地址范围。

(芯片)如果 有 实现 FEAT_VHE ,HCR_EL2.E2H == 1, 时,EL2 translation regime 的 stage1 , EL2&0 translation regime 也  支持 两段 VA 地址范围。

 

address tag

TCR_ELx.TBI 控制 是否启用 address tag.

启用了 address tag, VA  地址的高 8 bits 会被 忽略。 bit[63 62 61 60 59 58 57 56]被忽略。

bit[55] 决定  使用  TCR_ELX.TBI{0 or 1} 来控制,是否启用 address tag.

 

VA 的 bit[55] 来决定了使用  TTBR{0 or 1}_ELx 来加载 translation table 的基地址

 

armv8 架构 定义的 地址转换机制

 

芯片实现时,可以 只实现 其中的一部分。

转换机制介绍

 

 

从下向上看,

EL3 stage 1 转换机制。 是一个 single stage 的转换机制。

EL2 or EL2 & 0 转换机制,是一个 single stage 的转换机制。  EL2 & 0  转换机制,只有当 芯片实现了 FEAT_VHE 特性,并且 HCR_EL2.E2H == 1 是才启用。

EL1 & 0 【EL2 启用状态下的】转换机制。如下图, EL2 启用,则说明有 Hypervisor在运行,EL1 的 OS kernel 相当于运行在一个虚拟机里面, 虚拟地址到 物理地址,则需要进行 两次转换。

EL1 & 0 【EL2 关闭状态下的】转换机制。EL2 没有启用,则说明 EL1 的 OS kernel 运行在 物理板子上面,虚拟地址到 物理地址,需要进行一次转换即可。

 

 

 

转换机制控制(寄存器)

 

linux kernel 如果运行在 物理板子上面,使用  TCR_EL1 & TTBR0_EL1 & TTBR1_EL1 & SCTRL_EL1 寄存器 即可控制地址转换。

hypervisor (虚拟机)想要 管理 客户机 linux kernel 的地址转换,则设置  VTCR_EL2 & VTTBR_EL2 & HCR_EL2 & SCTLR_EL2 寄存器。

 

posted @ 2022-03-06 16:03  张志伟122  阅读(451)  评论(0编辑  收藏  举报