有時,虛擬機監控程序需要在虛擬機(VM)中模擬操作。例如,VM內的軟件可能嘗試配置與功耗管理或緩存一致性相關的低級處理器控件。通常,您不希望將VM直接訪問這些控件,因為它們可能被用于突破隔離,或影響系統中的其他VM。
trap在執行給定操作(例如讀取寄存器)時引發異常。虛擬機監控程序需要能夠在VM中捕獲并模擬此類操作,而不影響其他VM。
架構包括用于在VM中捕獲操作并模擬它們的trap控件。設置trap時,執行通常允許的特定操作會導致exception到更高的異常級別。虛擬機監控程序可以使用這些trap來在VM內模擬操作。
例如,執行Wait For Interrupt(WFI)指令通常會將CPU置于低功耗狀態。通過assert TWI 位(如果 HCR_EL2.TWI==1),然后在 EL0 或 EL1 執行 WFI 將導致異常到 EL2。
【注意】:trap不僅用于虛擬化。還有由EL3和EL1控制的trap。 然而,trap對于虛擬化軟件尤其有用。本指南僅討論通常與虛擬化相關的trap。
在我們的WFI示例中,操作系統通常會在空閑循環的一部分執行WFI。對于位于VM內的Guest OS,虛擬機監控程序可以捕獲此操作并調度另一個vCPU,如下圖所示:
顯示寄存器的虛擬值
使用trap的另一個例子是