概述
在處理器資源的管理中,HVM支持如下的機制:
- 細粒度的系統時鐘
- 擱置處理器執行的能力
- 創建新處虛擬處理器的能力
如何訪問HVM的時鐘
HVM支持細粒度的時鐘,我們可通過虛擬指令vmgettime以及vmsettime來進行訪問:
- Vmgettime指令返回一個代表當前時間的64位值
- Vmsettime指令重置64位值的時鐘
標註:HVM的實現可以隨意定義時鐘對應的是CPU時間還是時鐘計時單元。舉例來說,如果虛擬設備監測器定製一個虛擬CPU,如果虛擬CPU不再執行指令,那麼時鐘有可能不會繼續增值。
如何擱置處理器
HVM上的訪客模式程序可通過兩種方式擱置虛擬處理器的執行:
- 虛擬指令vmwait
- 虛擬指令vmyield
Vmwait擱置執行將掛起一箇中斷事件。當下一個事件處理後,終結事件服務的虛擬指令vmrte將在vmwait指令後導致一個指令重新開始。
Vmyield可暫時擱置執行,獨立於任何虛擬處理器事件。它導致VMM在同等或更高的優先級上安排其他虛擬處理器,不需要優先權。
標註:在試圖去取得一個spinlock時,推薦使用訪客操作系統的yield指令。這保證那些擁有spinlock的虛擬處理器能夠有機會執行。
如何創建一個虛擬處理器
訪客模式程序能夠通過虛擬指令vmstart來創建一個新的虛擬處理器實例。新創建的實例可與已有的處理器實例並行運行。
新的虛擬處理器實例在訪客模式下執行,從vmstart的參數中對特定的地址進行取指令。新的實例使用虛擬處理器實例的相同內存映射。
每個虛擬處理器有一個獨特的32位標誌位,它的範圍內根據下列公式進行確定:
0 .. (max_number_of_supported_virtual_processors - 1)
一個虛擬處理器ID值不可能爲-1.初始虛擬處理器實例有一個爲零的虛擬處理器ID。虛擬處理器上的程序可以通過執行虛擬指令vmvpd來訪問處理器ID。
Vmstart的取反是虛擬指令vmstop。當虛擬處理器執行vmstop時,如下的事件將會發生:
- 虛擬處理器將會被終止
- Vmstop後的指令將不會被提交
- 虛擬處理器相關的資源將被釋放,並將其對之後創建的虛擬處理器實例可用
處理器管理的虛擬器指令
下圖總結了用於虛擬器資源管理的虛擬指令