HVM的中断与异常处理

来源:互联网 发布:淘宝特步鞋 编辑:程序博客网 时间:2024/06/05 17:31

HVM的中断

概述
在HVM中,中断以特殊事件进行处理。当中断事件被调遣时,事件记录中GSR.Cause的值被设置为中断数。

中断可以对每个虚拟处理器进行使能或完全失能,通过设置虚拟状态Interrupt Enabled来定义。当事件被激发时,Interrupt Enabled值被清空并将上一次的状态保存至GSR中。

虚拟中断控制器
这里写图片描述
HVM中定义了一个virtual interrupt controller,用于管理中断事件流并将其分配至多个虚拟处理器中。

每一个中断都有一个全局使能,同时每个虚拟处理器也拥有一个本地使能:
 如果中断通过全局失能,则所有的虚拟处理器不能处理中断
 如果中断被局部失能,那么该虚拟处理器不会处理该中断

当中断到达时,它的位将被设置为挂起。如果中断同时被全局以及局部使能那么虚拟处理器将处理中断:程序计数器将跳转至中断事件,而且中断数被保存至GSR.Cause。 除此以外,中断从挂起寄存器中置位并自动的全局失能。

中断屏蔽
HVM既有各个中断的全局使能位,同时还有各个虚拟处理器的使能位。这些位可以通过虚拟指令vmintop来进行修改,并且可以用于屏蔽特殊的处理器或者全部处理器。

中断的使能
每个虚拟处理器拥有一个中断使能位。该状态位可以通过使用虚拟指令vmgetie来进行查看,并通过虚拟指令vmsetie进行修改(以及虚拟指令vmrte)。当虚拟处理器将Interrupt Enable状态失能时,处理器将不会处理任何中断。

Interrupt Enable状态在每次处理事件时都会被设置为失能,此时虚拟处理器开始进行处理。

中断管理的虚拟指令
下图总结了用于管理中断的所有虚拟指令
这里写图片描述
Vmintop操作“Set Interrupt affinity”可在本地为特殊的虚拟处理器使能中断,并在本地为所有的虚拟处理器失能。

异常处理

概述
异常是非中断的时间,并且通常是不可屏蔽的

异常可以是准确或者不准确的。当准确异常被处理时,GELR包含了如下的值:
 通用异常—指令包的地址可以导致此类异常
 Trap异常—带有trap指令的异常

异常级别

HVM支持三种异常,这三种异常将会被分别处理:

  1. 通用异常
  2. Trap异常
  3. 虚拟仪器检查

通用异常
HVM中的通用异常与如下Hexagon处理器的准确异常配合的非常相近。通用异常被保存在GSR.Cause域中
这里写图片描述

Trap异常
Trap异常将在trap0指令被HVM客户端执行时触发。

Trap0指令的八位编码将被保存在GSR.Cause中

虚拟仪器检查
虚拟仪器检测异常表明,在虚拟仪器或硬件中,有潜在不可恢复的错误。

HVM软件可以注册并处理检查异常从而实现紧急关机操作或尝试恢复。一起检测事件处理器的普通终结通过虚拟指令vmstop来实现。

如果访客模式软件完全处理好了错误,那么他将通过vmrte指令来进行终结。然而,它与取决于虚拟仪器监控器能否实现提前事件的处理。
这里写图片描述

0 0
原创粉丝点击