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