純軟件全虛擬化

虛擬化面臨的挑戰

虛擬化面臨的問題更多的是X86架構的CPU遇到的問題,X86系統的CPU有一個保護機制,它所所有的指定分爲四個級別,只有0級別和3級別使用了,0是最高的權限,通常是對硬件的調用權,級別3通常是對應用程序打交道。

我感覺有必要說一下CPU的保護機制。假如所有的應用程序運行在環0,都可以直接操作硬件的內存空間,這樣豈不是這個程序的數據可以很輕易被另一個程序調用或者覆蓋,安全性就沒有,所以必須要有一箇中間人進行調度,無論哪個程序想使用硬件資源,都得由內核進行統一的資源調度分配,這樣才安全合理。

從虛擬化的架構來看,宿主機的系統就是真正的系統,而OS僅看做是一個軟件 ,那麼宿主機的系統應該運行在環0裏面,準備的說應該是宿主機的內核運行在環0裏面,而整個OS都運行在環3裏面。

在宿主機的角度來看,OS僅僅是一個程序,但是對OS來說,它是不知道自己是一個程序,OS認爲自己是一個完整的系統、自己有自己的硬件。這有點像《×××帝國》裏面的虛擬世界裏的人,他們都認爲自己就是一個完整的人,有自己的身體,但是實際上他們僅僅是意識,這種機制在IT領域被大範圍的採用,比如每個程序都會認爲自己對CPU是獨佔的,對內存也是獨佔的,但實際上他們僅使用了很少的一部分。

那麼問題就來了,OS認爲自己有完整的“實體”,有用戶空間,也有內核空間,但它實際上就只是一個程序,它實際在真正CPU的環3裏面,OS執行一個敏感指令時,比如shutdown,OS會判斷這個指令是對硬件操作性的指令,OS應該把這個指定交給環0,但是OS整個就處在環3裏面,就算OS把shutdown交給了環0,這個環0還是處在真正CPU的環3裏面,OS把一個原本應該在環0執行的指令,交給了真正CPU的環3,環3也不能執行呀!環3會報錯的,所以原本出於安全性考慮設置的保護機制,對一套硬件上運行多個程序提供了保護機制,但是對於一套硬件同時運行多個操作系統成爲了難題。

早期使用模擬仿真技術

值得注意的,這裏說的是僅僅是X86架構的CPU,而IMB的CPU就沒有這種難題,因爲IBM第一個提出虛擬化的概念,他們的CPU在很早就已經支持虛擬化了。

是通過純軟件來解決面臨的挑戰,正面來講一下是如何解決的?

image.png

當OS的環0執行一個敏感指令shutdown的時候,會被VMM給捕獲到,VMM會認爲出現一個異常,因爲一個環0上的指令怎麼能在環3上執行呢?VMM會進行一個降級的處理,會把shutdown的級別由環0級別降到環3,然後進行模擬執行,可能你問了,環3怎麼可能執行環0的指令的呢?它不是真正執行的,而是模擬執行的。

但是由於X86架構的CPU,敏感指令並不完全是特權指令,所以有些敏感指令對於VMM業說是捕捉不到的,所以無法進行特權降級然後陷入模擬,所以由於X86架構的CPU的這種情況,無法實現完整的虛擬化功能。但是早期的虛擬化就是這麼實現的。

二進制編譯技術

image.png

INTEL的X86架構的CPU通過模擬仿真技術使用虛擬化很勉強,不完整,直到1999年纔得到改善,因爲那時VMware公司崛起了,vmware公司找到關於x86cpu實現完整虛擬化的解決方案:二進制翻譯技術和優先的級壓縮技術。
vmware公司將OS的用戶應用程序放置成環3,而OS的系統放置在環1,VMM當然還是在環0上。當OS的應用運行指令時因爲應用運行的指令不能對硬件進行什麼調用,所以OS的應用運行的指令都是調用的是VMM層的用戶指令,反正對硬件沒有什麼威脅。當使用一些敏感指令時會被VMM捕獲進行特權降級和陷入模擬,我們上節課說了,這個地方是有缺陷的,因爲VMM不能把所有的敏感指令都給捕獲,這時候就要用到二進制翻譯技術。

二進制翻譯技術比較複雜,我們沒有必要從理解的那麼深刻,但是我們要大概知道它在做什麼,下面是自己的理解,二進制翻譯技術就是把二進制從原平臺映射到目的平臺,有點編譯的意思,與傳統的編譯不同的操作的對象不同,傳統的編譯是把代碼編譯成二進制,而這裏的二進制翻譯技術是把這個平臺的二進制翻譯另一個平臺,那麼這麼做有什麼意義呢?我們在之前說過,X86架構之所以不能實現完整虛擬化的原因是VMM不能捕捉所有的敏感指令,而有了二進制翻譯技術之後,通過二進制翻譯技術可以把原本不能捕獲的X86架構敏感指令翻譯成別的架構的敏感指令,比如POWER-PC架構的敏感指令,而POWER-PC這個平臺的敏感指令就是特權指令,這樣一下,VMM就能間接的捕獲OS的所有敏感指令,進而進行特權降級,然後陷入模擬,最後實現OS操作系統需要做的操作。到此,完整的虛擬化得以實現。

以上所說的這些,都是通過軟件來實現的,通過軟件實現的話,效率就不怎麼高,所以這種虛擬化就是很慢。


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