天天看點

看作業系統虛拟化原理總結篇——硬體虛拟化中的CPU虛拟化

1,回顧

首先回顧下沒有Intel -VT的支援的時候如何用軟體虛拟化CPU. 之前有三種方法支援CPU的模拟的,解釋執行,掃描修補,二進制翻譯。具體内容可以參考之前的文章。

其實,軟體模拟的時候,最重要的就是對敏感指令的模拟,要使敏感指令能陷入進去,就必須要能把所有的敏感指令都能陷入。而在某些架構中呢,有的指令是不能被陷入的,是以硬體虛拟化出現了,我可以了解這是社會需求麼,想起一句話,社會的需要比十所大學産生的生産力更加的巨大。

2,硬體虛拟化中的CPU

先說CPU虛拟化的流程:

1,首先明确每個客戶機中的CPU是以VCPU的形式存在的,是以客戶機CPU的建立就是建立一個VCPU的一個結構體,同時并配置設定記憶體。

2,然後再進一步的将VCPU進行初始化,通常包括如下内容:配置設定CPU辨別符,初始化寄存器組,初始化VCPU的狀态資訊。

3,現在VCPU已經被建立好了,然後我們該設定每個CPU的相應的控制域了。包括之前提到的客戶機狀态域,主控端狀态域等等,其實也就是給VMCS填充資料。

4,建立好了,然後就可以運作了。這裡,運作的時候主要關注的就是上下文切換了。

這裡就是主要的難點,其實也就是硬體虛拟化的精髓。

上下文切換:

先說從VMM切換到客戶機吧,首先VMM儲存自己的上下文,這裡主要儲存的是VMCS不儲存的寄存器資訊,然後将儲存在VCPU中的資料加載到實體的CPU上,然後VMM執行VMRESUME/VMLAUNCH等指令觸發VMEntry,此時CPU自動将VCPU上下文中的VMCS加載到實體CPU,切換到非根模式。這裡切換成功。

然後我們再來說如何切換回來吧,那麼我們什麼時候需要切換回來呢? 我的印象中隻有敏感指令和對IO進行操作,其實還有發生實體中斷等等。

這裡将陷入的指令做個小結:通路特權資源,對CR MSR寄存器的通路屬于這類;客戶機執行指令引發異常,如缺頁中斷;實體中斷或者客戶機的虛拟裝置發生中斷。

繼續切換,這裡發生VMExit後,CPU自動切換一部分上下文,然後在根模式下執行VM_Exit的原因,并分發到對應的實體子產品。

3,硬體虛拟化的優勢

可能你這裡會有疑問,這和軟體虛拟化的意思完全一樣呀,不急,下面介紹硬體虛拟化特有的優化:

主要有兩種:無條件優化:對以往軟體在虛拟化下必須陷入到VMM中的敏感指令,可以通過VT技術在客戶機中直接運作。

      然後VMM還可以通過修改VMCS中的VM_Execution控制域,可以配置某些敏感指令是否發生VM_Exit而陷入到VMM中,相當于人工幹預一樣。

具體我們舉例來說明:

好吧,不舉例了。其實最常用的一點就是通過修改VMCS中的控制域來人工幹預。這個挺好。