看操作系統虛擬化原理總結篇——VMCS詳解

1.VMCS的組成

有三部分:偏移0處是版本標識,偏移4處是中止指示,偏移8處是VMCS的數據域,其中第三部分纔是我們要考慮的重點。它是被保存在內存中的。


2,爲什麼要引入VMCS

這完全是由於Intel VT_x來引起的,它主要被CPU進行操作,然後保存着VCPU的相關寄存器的信息和內容。可以這麼理解,一個物理CPU通過VMCS能夠獲得每個虛擬CPU的各種信息。另外VT_x也提供了不少指令用於CPU去直接訪問VMCS。


3,VMCS數據域的詳細分析:

包含了6個域,客戶機狀態域,宿主機狀態域,VM_ENTRY控制域,VM_EXECUTION控制域,VM_EXIT控制域,VM_EXIT信息域。

下面逐一分析:

客戶機狀態域用戶保存在非根模式下CPU的狀態,當發生VM_Entry的時候,CPU自動將客戶機的狀態保存和加載到CPU中,即表示從VMM的根模式進入非根模式。

當發生VM_Exit的時候 ,CPU自動將CPU的狀態保存回客戶機狀態域。

通俗的理解,客戶機狀態域就是VCPU的運行的狀態值,退出需要保存,運行需要加載。而這些具體的狀態在代碼中的表示就是 CR0,CS SS,DS等寄存器。


宿主機狀態域,理解前面的客戶機狀態域,這個就好辦了。只是這裏有點不同的是,發生VM_exit的時候是被恢復,但是在VM_ENTRY的時候卻不用保存,這是因爲宿主機的狀態一般是不需要改變的。


VM_Entry控制域是指CPU由根模式到非根模式。也即是CPU從VMM模式切換到客戶機模式,在VMM發起之前,需要設置好VMCS相關域的內容,然後執行VM_entry指令。並且這個時候VMM可以通過修改VMCS中的域的信息,來給客戶機注入一個虛擬中斷。


VM_Exit控制域,是指CPU從非根模式切換到根模式,即從客戶機模式切換到VMM模式。那麼什麼情況會引起這種模式的轉換呢?包括之前的敏感指令,中斷啊,或者對IO操作等可以引起這種轉換。


VM_EXECUTION控制域,這個域控制着VCPU運行時的一些行爲,如執行某些敏感指令是否會發生VM-Exit 。因此這個域的取值主要是取決於VMM對於相應敏感指令的虛擬化策略。


發佈了111 篇原創文章 · 獲贊 8 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章