全虛拟化和半虛拟化的差別 cpu的ring0 ring1又是什麼概念? - 轉
ring0是指CPU的運作級别,ring0是最進階别,ring1次之,ring2更次之…… 拿Linux+x86來說, 作業系統(核心)的代碼運作在最高運作級别ring0上,可以使用特權指令,控制中斷、修改頁表、通路裝置等等。 應用程式的代碼運作在最低運作級别上ring3上,不能做受控操作。如果要做,比如要通路磁盤,寫檔案,那就要通過執行系統調用(函數),執行系統調用的時候,CPU的運作級别會發生從ring3到ring0的切換,并跳轉到系統調用對應的核心代碼位置執行,這樣核心就為你完成了裝置通路,完成之後再從ring0傳回ring3。這個過程也稱作使用者态和核心态的切換。
那麼,虛拟化在這裡就遇到了一個難題,因為宿主作業系統是工作在ring0的,客戶作業系統就不能也在ring0了,但是它不知道這一點,以前執行什麼指令,現在還是執行什麼指令,那肯定不行啊,沒權限啊,玩不轉啊。是以這時候虛拟機管理程式(VMM)就要避免這件事情發生。 (VMM在ring0上,一般以驅動程式的形式展現,驅動程式都是工作在ring0上,否則驅動不了裝置) 一般是這樣做,客戶作業系統執行特權指令時,會觸發異常(CPU機制,沒權限的指令,觸發異常),然後VMM捕獲這個異常,在異常裡面做翻譯,模拟,最後傳回到客戶作業系統内,客戶作業系統認為自己的特權指令工作正常,繼續運作。但是這個性能損耗,就非常的大,你想想原來,簡單的一條指令,執行完,了事,現在卻要通過複雜的異常處理過程。
這時候半虛拟化就來了,半虛拟化的思想就是,讓客戶作業系統知道自己是在虛拟機上跑的,工作在非ring0狀态,那麼它原先在實體機上執行的一些特權指令,就會修改成其他方式,這種方式是可以和VMM約定好的,這就相當于,我通過修改代碼把作業系統移植到一種新的架構上來,就是定制化。是以像XEN這種半虛拟化技術,客戶機作業系統都是有一個專門的定制核心版本,和x86、mips、arm這些核心版本等價。這樣以來,就不會有捕獲異常、翻譯、模拟的過程了,性能損耗非常低。這就是XEN這種半虛拟化架構的優勢。這也是為什麼XEN隻支援虛拟化Linux,無法虛拟化windows原因,微軟不改代碼啊。
可以後來,CPU廠商,開始支援虛拟化了,情況有發生變化,拿X86 CPU來說,引入了Intel-VT 技術,支援Intel-VT 的CPU,有VMX root operation 和 VMX non-root operation兩種模式,兩種模式都支援Ring 0 ~ Ring 3 這 4 個運作級别。這下好了,VMM可以運作在VMX root operation模式下,客戶OS運作在VMX non-root operation模式下。也就說,硬體這層做了些區分,這樣全虛拟化下,有些靠“捕獲異常-翻譯-模拟”的實作就不需要了。而且CPU廠商,支援虛拟化的力度越來越大,靠硬體輔助的全虛拟化技術的性能逐漸逼近半虛拟化,再加上全虛拟化不需要修改客戶作業系統這一優勢,全虛拟化技術應該是未來的發展趨勢。
XEN是最典型的半虛拟化,不過現在XEN也支援硬體輔助的全虛拟化,大趨勢,拗不過啊。。。 KVM、VMARE這些一直都是全虛拟化。
=======================================================
半虛拟化和全虛拟化的差別
虛拟化技術:百度百科中的定義是這樣的:虛拟化是一個廣義的術語,在計算機方面通常是指計算元件在虛拟的基礎上而不是真實的基礎上運作。虛拟化技術可以擴大硬體的容量,簡化軟體的重新配置過程。CPU的虛拟化技術可以單CPU模拟多CPU并行,允許一個平台同時運作多個作業系統,并且應用程式都可以在互相獨立的空間内運作而互不影響,進而顯著提高計算機的工作效率。這個定義已經比較完整了。
(完)全虛拟化技術:完全虛拟化技術又叫硬體輔助虛拟化技術,最初所使用的虛拟化技術就是全虛拟化(Full Virtualization)技術,它在虛拟機(VM)和硬體之間加了一個軟體層--Hypervisor,或者叫做虛拟機管理程式(VMM)。hypervisor 可以劃分為兩大類。首先是類型 1,這種 hypervisor 是直接運作在實體硬體之上的。其次是類型 2,這種 hypervisor 運作在另一個作業系統(運作在實體硬體之上)中。類型 1 hypervisor 的一個例子是基于核心的虛拟機(KVM —— 它本身是一個基于作業系統的 hypervisor)。類型 2 hypervisor 包括 QEMU 和 WINE。
因為運作在虛拟機上的作業系統通過Hypervisor來最終分享硬體,是以虛拟機發出的指令需經過Hypervisor捕獲并處理。為此每個客戶作業系統(Guest OS)所發出的指令都要被翻譯成CPU能識别的指令格式,這裡的客戶作業系統即是運作的虛拟機,是以Hypervisor的工作負荷會很大,是以會占用一定的資源,是以在性能方面不如裸機。但是運作速度要快于硬體模拟。全虛拟化最大的優點就是運作在虛拟機上的作業系統沒有經過任何修改,唯一的限制就是作業系統必須能夠支援底層的硬體,不過目前的作業系統一般都能支援底層硬體,是以這個限制就變得微不足道了。全虛拟化技術如圖1所示。

圖1:全虛拟化技術
半/準虛拟化技術:半虛拟化技術是後來才出現的技術,半虛拟化技術英文是paravirtualization,也叫做準虛拟化技術,現在比較熱門,它就是在全虛拟化的基礎上,把客戶作業系統進行了修改,增加了一個專門的API,這個API可以将客戶作業系統發出的指令進行最優化,即不需要Hypervisor耗費一定的資源進行翻譯操作,是以Hypervisor的工作負擔變得非常的小,是以整體的性能也有很大的提高。不過缺點就是,要修改包含該API的作業系統,但是對于某些不含該API的作業系統(主要是windows)來說,就不行能用這種方法。半/準虛拟化技術如圖2所示。
圖2:半/準虛拟化技術
随着硬體虛拟化技術的逐漸演化,運作于Intel平台的全虛拟化的性能已經超過了準虛拟化産品,這一點在64位的作業系統上表現的更為明顯。加之,全虛拟化不需要對客戶機作業系統做任何修改的固有優勢。可以預言,基于硬體的全虛拟化産品将是未來虛拟化技術的核心。