全虛擬化和半虛擬化(轉)


CPU通過Ring級別進行訪問控制的。Ring0是最高級別,Ring1、Ring2、Ring依次降低。

以Linux X86為例,操作系統(內核)的代碼運行在Ring0上,可以使用特權指令,控制中斷、修改頁表、訪問控制等。

應用程序的代碼運行在最低級別Ring3上,不能做受控操作。如果需要訪問磁盤、寫文件,需要通過執行系統調用(函數),執行系統調用時,CPU的運行級別從Ring3到Ring0依次切換,並跳轉到系統調用對應的內核代碼位置執行,由內核完成設備訪問,之后再從Ring0返回Ring3,實現用戶態和內核態的切換。

基於二進制的全虛擬化:

 

因為宿主操作系統工作在Ring0,客戶操作系統不能運行在Ring0,當客戶操作系統執行特權指令時,就會發生錯誤。

虛擬機管理程序(VMM)就是負責客戶操作系統和內核交互的驅動程序,運行在Ring0上,以驅動程序的形式體現(驅動程序工作在Ring0,否則不能驅動設備)。

當客戶操作系統執行特權指令時,會觸發異常(CPU機制,沒權限的指令,觸發異常),VMM捕獲這個異常,在異常處做翻譯、模擬,返回處理結構到客戶操作系統內。客戶操作系統認為自己的特權指令工作正常,繼續運行。

通過復雜的異常處理過程,性能損耗比較大。

 

半虛擬化(准虛擬化):

通過修改客戶操作系統代碼,將原來在物理機上執行的一些特權指令,修改成可以和VMM直接交互的方式,實現操作系統的定制化。

半虛擬化技術XEN,就是通過為客戶操作系統定制一個專門的內核版本,和X86、MIPS、ARM這些內核版本等價。

這樣,就不會有捕獲異常、翻譯和模擬的過程,性能損耗比較少。

這也是XEN這種半虛擬化架構的優勢,也是為什么XEN只支持Linux的虛擬化,不能虛擬化Windows的原因(微軟不開源)。

 

基於硬件輔助的全虛擬化:

隨着CPU廠商開始支持虛擬化,以X86 CPU為例,推出了支持Intel-VT的CPU,有VMX root operation和VMX non-root operation兩種模式,兩種模式都支持CPU運行的四個級別。

這樣,VMM可以運行在root operation模式下,客戶操作系統運行在non-root operation模式下。

通過硬件層做出區分,這樣,在全虛擬化技術下,有些依靠“捕獲異常-翻譯-模擬”的實現就不需要了。

而且CPU廠商支持虛擬化的力度在不斷加大,靠硬件輔助的虛擬化技術性能逐漸逼近半虛擬化,再加上全虛擬化不需要修改客戶操作系統的優勢,全虛擬化技術應該是未來的發展趨勢。

 

全虛擬化技術:KVM、VMWare等。

半虛擬化技術:XEN等。

XEN是最典型的半虛擬化技術,不過隨着全虛擬化的不斷壯大,現在XEN也支持硬件輔助全虛擬化。

 

From:http://www.cnblogs.com/xusongwei/archive/2012/07/30/2615592.html

From:http://www.cnblogs.com/hsqdboke/p/4103415.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM