ARMv8-A 可选择支持虚拟化。GICv3也支持虚拟化。GICv3对虚拟化的支持包括:

(1)CPU接口寄存器的硬件虚拟化;

(2)虚拟化中断;

(3)维护中断;

NOTE: GIC架构不提供虚拟化Distributor,Redistributor和ITS。这些接口的虚拟化必须由软件处理。这不在本文档中描述。

1. 术语

Hypervisor创建,控制和调度虚拟机VM。一个虚拟机在功能上等于一个物理系统,包含一个和多个虚拟处理器。这些虚拟处理器包含一个或多个虚拟PE(vPE)。

本章讨论的大多数控制工作在vPE级别。

2. 接口

CPU接口寄存器可分为三组:

(1)物理CPU接口寄存器

(2)虚拟控制寄存器

(3)虚拟CPU接口寄存器

2.1 物理CPU接口(ICC_*_ELn)

执行在EL2的hypervisor软件使用ICC_*_ELn来处理物理中断。

2.2 虚拟控制(ICH_*_EL2)

hypervisor访问寄存器来控制架构提供的虚拟化特性。这些特性包括:

(1)使能和禁用虚拟CPU接口;

(2)访问虚拟寄存器状态来使能上下文切换;

(3)配置维护寄存器;

(4)控制虚拟中断;

这些寄存器控制需要访问的物理PE的虚拟化特性。它不能访问其他PE的状态。PE X上的软件不能访问PE Y。

2.3 虚拟CPU接口(ICV_*_ELn)

执行在虚拟化环境的软件使用ICV_*_ELn寄存器来处理中断。这些寄存器与ICC_*_EL1寄存器有相同的格式和功能。

ICV和ICC寄存器有相同指令编码。在EL2,EL3和安全EL1,ICC通常一直能被访问。在非安全EL1,是否ICC或ICV寄存器能够被访问是由HCR_EL2中routing bit决定。

ICV寄存器可分为三组:

(1)Group 0

寄存器如ICC_IAR0_EL1/ICC_IAR0_EL1用于处理Group 0中断。当HCR_EL2.FMO=1时,在非安全EL1可访问ICV寄存器而不是ICC寄存器。

(2)Group 1

寄存器如ICC_IAR1_EL1/ICC_IAR1_EL1用于处理Group 1中断。当HCR_EL2.FMO=1时,在非安全EL1可访问ICV寄存器而不是ICC寄存器。

(3)通用

寄存器如ICC_DIR_EL1/ICV_DIR_EL1和ICC_PMR_EL1/ICV_PMR_EL1用于处理Group 0和Group 1中断。当HCR_EL2.IMO=1或HCR_EL2.FMO=1时,在非安全EL1可访问ICV寄存器而不是ICC寄存器。

下图显示了在HCR_EL2路由控制的基础上同样的指令是如何访问ICC或ICV寄存器的。

3. 虚拟中断的管理

执行在EL2的hypervisor可以通过LR寄存器ICH_LRn_EL2产生虚拟中断。每个寄存器代表着一个虚拟中断,并记录:

(1)vINTID

在虚拟环境下报告INTID。

(2)状态

虚拟中断状态有pending, active, ative and Pending 以及inactive。由于虚拟环境下的软件与GIC交互,状态机自动更新。比如,hypervisor创建一个新的中断,并初始化设置状态位pending。当在vPE的软件读ICV_IARn_EL1,状态更新到active。

(3)Group

虚拟环境通常表现为GICD_CTLR.DS=1。因此虚拟中断可以为Group 0和Group 1。Group 0中断以vFIQ发送,Group 1中断以vIRQ发送。

(4)pINTID

虚拟中断可选择性的被物理中断INTID标识。当vINTID的虚拟机更新时,因此为pINTID。

3.1 物理中断发送给vPE的例子

下图显示了物理中断被发送到vPE的时序:

(1)物理非安全Group1中断从Redistributor发送到物理CPU接口;

(2) 物理CPU接口检查是否物理中断直接发送到一个PE。过程之前已经描述。在本例子中,检查通过并产生物理异常;

(3)中断被进入EL2。hypervisor读取IAR,并返回pINTID。这时pINTID进入active状态。hypervisor决定中断被直接发送到当前运行的vPE。hypervisor写pINTID到ICC_EIOR1_EL1。当ICC_CTLR_EL1.EOImode=1时,仅降低优先级不需要deactivate物理中断;

(4)hypervisor写LR寄存器来注册一个pending的虚拟寄存器。LR寄存器条目指明了要发送的vINTID和原始的pINTID。hypervisor发出异常返回,将异常返回给vPE;

(5)vCPU接口检查是否将虚拟中断直接发送给vPE。这些检查与物理中断一样,而不是使用ICV寄存器。在本例子中检查通过并发起虚拟异常;

(6)虚拟异常进入非安全EL1。当软件读取IAR时,vINTID返回且虚拟中断进入active状态;

(7)Guest OS处理中断。当它完成处理中断,写EOIR寄存器发出优先级降低和deactivation。因为LR寄存器记录在pINTID,它会未激活vINTID和pINTID。

4. 维护中断

若在虚拟CPU接口中某些条件为true时,CPU接口可以配置来产生物理中断。

这些中断以PPI中断报告,INTID25。这个中断通常被配置为非安全Group 1,且在EL2被hypervisor 软件处理。

维护中断的产生由ICH_HCR_EL2控制,当前发送的中断由ICH_MISR_EL2上报。

若vPE清除在vCPU接口中的Group enable bit的一位时,维护中断产生。hypervisor可以移除任何LR寄存器来pending虚拟中断(属于disabled group)。

5. 传统虚拟机

使用GICv3系统寄存器(ICC_SRE_EL2.SSRE=1)的hypbervisor可以控制使用传统行为(ICC_SRE_EL1(NS)=0)的VM。在这种情况下在虚拟环境下执行的软件可以使用映射到GICV寄存器的内存,如GICv2。

6. 上下文切换

当在vPE之间进行上下文切换,hypervisor软件清除一个vPE的状态并加载了另一个的上下文。虚拟CPU接口的状态形成了一个vPE的部分上下文。虚拟CPU接口状态包含:

(1)ICV寄存器的状态

(2)有效虚拟化优先级

(3)任意pending, active或active and pending虚拟中断

使用ICH寄存器可以从EL2访问ICV寄存器的状态。如例子中显示了ICH_VMCR_EL2中的域映射到ICV寄存器状态。

当在切换vPE时,有效的虚拟属性必须要保存和重导出。可通过ICV_APnR_EL2寄存器访问当前vPE的有效属性。

在章节3中描述,通过LR寄存器管理虚拟中断。这些寄存器的状态只针对当前vPE。因此这些寄存器必须在上下文切换时要保存和重导出 。

GICv3软件overview手册之虚拟化相关推荐

  1. GICv3软件overview手册之介绍

    本文档提供了GICv3特性的软件overview,并且描述GICV3中断控制器的操作.它也只是如何在裸机环境下配置GICV3中断控制器的简介. 本文档是ARM通用中断控制器架构手册V3.0和V4.0的 ...

  2. GICv3软件overview手册之中断处理(2)

    1. 执行优先级&抢占 PMR设置中断发给某个PE的最小优先级.GICv3架构存在执行优先级的概念.当PE应答一个中断时,它的执行优先级变成中断的.当PE写EOI寄存器时执行优先级返回之前的值 ...

  3. GICv3软件overview手册之GICv4对虚拟LPI的直接注入(2)

    1. vPE和vINTID的映射 EventID-DeviceID的合并被映射到vPE和vINTID.当EventID和DeviceID相同时使用VMAPI命令: VMAPI <DeviceID ...

  4. GICv3软件overview手册之GICv3基本功能(4)

    GICv3架构支持ARM trustZone技术.每个INTID都赋予给一个group和安全设置.GICv3支持三种合并,如表中所示: 中断类型 使用例子 Secure Group 0 EL3的中断( ...

  5. GICv3软件overview手册之GICv3基本功能(1)

    本章描述与GICV3架构兼容的中断控制的基本操作.它也会描述不同的编程接口. 1. 中断类型 GICV3定义了如下中断类型: (1)SPI共享外设中断 这是一种全局外设中断,可路由到某个PE,或一组P ...

  6. GICv3软件overview手册之发送和接受SGI

    SGI中断为软件产生中断,软件可以通过写中断控制器的寄存器触发该中断. 1. 产生SGI 在CPU接口中可以通过写SGI寄存器来产生一个SGI中断. 下图为SGI寄存器的基本格式: (1)控制SGI ...

  7. GICv3软件overview手册之GICv3基本功能(5)

    GICv3中断控制器的寄存器接口分为三组: (1)Distributor接口: (2)edistributor接口: (3)CPU接口: Distributor(GICD_*) Distributor ...

  8. GICv3软件overview手册之GICv4对虚拟LPI的直接注入(1)

    GICv4增加对虚拟LPI(vLPI)中断的直接注入.该特性允许软件对ITS如何将物理event(EventID和DeviceID的合并)映射到虚拟中断.若中断的目标vPE正在运行,虚拟中断可以直接发 ...

  9. GICv3软件overview手册之GICv3基本功能(2)

    中断控制器对每个SPI/PPI/SGI中断源维护了一个状态机.状态机包含以下四种状态: (1)Inactive:中断源当前没有触发: (2)Pending:中断源被触发,但还未被PE应答: (3)Ac ...

最新文章

  1. 读取xml忽略dtd验证
  2. 进程wait()与waitpid()
  3. RabbitMQ快速入门--简单队列模型
  4. Python程序开发——第九章 异常处理
  5. mysql环境安装与配置
  6. 使用jQuery清空file文件域的解决方案
  7. 源码分享,送你一份Google Python class源码
  8. html怎么修改锚点的属性,在HTML中设置自定义锚点
  9. windows php7 apache,windows系统下php7+apache2.4环境搭建
  10. python中的cls到底指的是什么,与self有什么区别?
  11. 二十二、Oracle学习笔记:Oracle异常
  12. RN Adatper_Util工具类
  13. Atitit . 编程模型的变革总结
  14. java二次开发考勤机_浩顺AC671指纹考勤机二次开发(demo)
  15. 用纯前端表格控件SpreadJS,搭建上海泛微协同OA管理平台
  16. Java面试官在面试时喜欢问哪些问题?
  17. MPP文件怎么打开 五种方法最合适
  18. JavaScript模式:字面量和构造函数
  19. [java] 汇率换算器实现(3)
  20. 英语3500词(十三)society主题(2022.1.25)

热门文章

  1. 小红书怎么推广引流?怎么样在小红书上引流?
  2. java中文件加锁机制
  3. ES 查询一,基于URL 的查询
  4. 《高质量程序设计指南——C/C++语言》之开篇记
  5. HTML绘制七巧板,如何使用HTML5 CSS3制作简单七巧板
  6. Java在编译到执行过程的编码问题
  7. c语言中出现void错误,关于C语言问题
  8. 对抗训练-smart 论文阅读笔记
  9. Linux 知:coredump
  10. 解决Word文章表格中无法自动换页的问题,表格结尾处像是被下一页覆盖掉了