1.MAIR 的全称是 Memory Attribute Indirection Register。它是ARM架构中的一种寄存器,用于定义内存的属性,并提供一种间接访问内存属性的机制。MAIR寄存器包含多个字段,这些字段指示不同类型内存的属性,例如是否可以缓存、是否为设备内存等。这些寄存器在不同的异常级别(EL1、EL2、EL3)中具有不同的用途(见Armv8-A手册P3335)。
4.HCR_EL2(Hypervisor Configuration Register for Exception Level 2)是ARM架构中用于控制虚拟化配置的寄存器。它提供了多种控制位,用于定义各种操作是否应该被捕获(trap)到EL2。例如:
- 第0位是VM,表示虚拟化支持。当EL2在当前安全状态下启用时,为el1和el0转换机制启用阶段2地址转换;
- 第6/7/8位分别是VI/VF/VSE,置1分别表示生成vIRQ/vFIQ/vSerror中断,相当于中断控制器向 vCPU 发出中断信号;
- 第13位是TWI,用于控制当执行在EL2以下异常级别时,WFI(Wait For Interrupt)指令的行为,设置为0时,在EL0或EL1执行WFI指令不会被捕获到EL2,即WFI指令可以正常执行,使处理器等待中断。设置为1时,任何在EL0或EL1执行的WFI指令尝试都会被捕获到EL2,这意味着处理器不会直接进入等待中断的低功耗状态,而是触发一个到EL2的异常。这允许运行在EL2的虚拟机监视器(hypervisor)介入并处理这个等待操作;
- 第27位是TGE,用来控制异常陷入情况,设置为0时对EL0的执行没有影响(此时,TGE位关闭了对EL0执行的异常路由到EL2的陷阱。这意味着,当EL2在当前安全状态下未启用时,EL0的异常处理不受影响,即EL0的异常(如中断)将按照正常的异常处理流程进行,不会被路由到EL2),设置为1时当EL2在当前安全状态下未启用时,对EL0没有影响。当EL2在当前安全状态下启用时,所有异常路由到EL2;
- 第32位是CD,将其设置为0b1时,会禁用虚拟化环境中第二阶段数据访问和翻译表遍历的缓存(如果页表数据被缓存,并且这些数据被修改(例如,由于动态内存管理),那么CPU可能从缓存中获取过时的页表信息,导致地址翻译错误),确保内存访问的一致性和虚拟机之间的隔离,但可能会影响性能;
- 第34位是E2H,这个位用于启用或禁用(0表示禁用,1表示启用)在EL2上运行宿主机操作系统(Host Operating System)的配置,同时宿主机操作系统的应用程序在EL0(异常级别0)上运行;
- 第46位是FWB,它是HCR_EL2寄存器中的一个控制位,全称是“Force Write Back”,用于定义在两阶段翻译机制中组合的缓存属性。具体来说,这个位影响如何结合第一阶段(EL1)和第二阶段(EL0)的内存类型和缓存属性;
- 第4位是IMO,用来控制物理IRQ路由,设置为0时:物理IRQ中断不会被送达EL2、当HCR_EL2.TGE的值为0时,如果处理器执行在EL2使用AArch,物理IRQ中断不会被采取,除非它们被路由到EL3由SCR_EL3.IRQ位决定、虚拟IRQ中断被禁用。设置为1时:当在任何异常级别执行,并且EL2在当前安全状态下被启用时:物理IRQ中断会被送达EL2,除非它们被路由到EL3、当HCR_EL2.TGE的值为0时,虚拟IRQ中断被启用。如果EL2在当前安全状态下被启用,并且HCR_EL2.TGE的值为1:不管IMO位的值如何,物理IRQ中断目标为EL2,除非它们被路由到EL3。如下图所示:
7.ESR_ELx(Exception Syndrome Register)是ARMv8架构中用于记录异常详细信息的寄存器,它为EL1、EL2和EL3等异常级别提供服务。ESR_ELx包含异常类别(EC)、指令长度(IL)和指令特定综合症(ISS)字段。EC字段指示异常类型,如数据中止或系统调用;IL字段表示导致异常的指令长度;ISS字段提供关于异常的额外信息,其内容取决于异常类型。ESR_ELx主要在同步异常和SError异常中使用,有助于操作系统或异常处理程序诊断问题并采取行动。
8.从Arm GICv2开始,GIC可以通过提供物理CPU接口和虚拟CPU接口来发出物理和虚拟中断信号,这两个接口是相同的,只是一个接口发出物理中断信号,另一个接口发出虚拟中断信号。虚拟机管理程序可以将虚拟CPU接口映射到VM,从而允许该VM中的软件直接与GIC通信。这种方法的优点是虚拟机管理程序只需要设置虚拟接口,而不需要模拟它。这种方法减少了执行需要被捕获到EL2的次数,因此减少了虚拟化中断的开销,虽然Arm GICv2可以与Armv8-A设计一起使用,但更常见的是使用GICv3或GICv4。
9.ARMv8-A架构中的物理定时器和虚拟定时器是通用定时器框架的两个关键组成部分,它们协同工作以提供精确的时间管理和中断生成。物理定时器与系统计数器相联系,用于生成基于物理时间的中断。它们允许操作系统和应用程序访问一个统一的系统时间视图,这对于性能监控、任务调度和时间戳操作至关重要。物理定时器的中断通常用于实现操作系统的调度和同步机制。物理定时器通过寄存器如CNTPCT_EL0(物理计数器值)和CNTFRQ_EL0(系统计数器频率)来访问。虚拟定时器则是在虚拟化环境中使用的,它们允许虚拟机(VM)拥有自己的私有定时器,于物理定时器。这意味着每个VM可以有自己的时间视图,不受其他VM的干扰。虚拟定时器通过寄存器如CNTVCT_EL0(虚拟计数器值)和CNTVOFF_EL2(虚拟计数器偏移)来访问。Hypervisor可以设置虚拟定时器,以便在虚拟环境中生成中断,从而实现虚拟机的调度和时间管理。
12.SCR_EL3(Secure Configuration Register at EL3)是EL3级别下的控制寄存器,用于管理系统安全状态和级别之间的切换。EEL2(Enable EL2 in Secure State)位的作用是允许在安全状态下启用 EL2。当该位被设置时,处理器能够在安全状态下进入 EL2,从而支持在安全环境下运行虚拟化功能。