HVM的中斷與異常處理

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指令來進行終結。然而,它與取決於虛擬儀器監控器能否實現提前事件的處理。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章