1. 程式人生 > >CPU 虛擬化的常見方式

CPU 虛擬化的常見方式

CPU虛擬化是將一個物理的CPU虛擬成多個虛擬CPU供虛擬機器使用。

在傳統的X86指令集中,CPU有4個特權級(0-3),第0級用來執行作業系統,擁有最高的特權,第3級用來執行應用程式,擁有最低的特權級。

虛擬機器執行的過程中,通常VMM作為管理元件,執行在宿主機的作業系統中,擁有最高特權級別,而虛擬機器上的作業系統就職能執行在第3級別了。

但是,作業系統中的某些指令,只能執行在最高特權級別,因此執行在第3級別的guest作業系統如何去執行那些只能在第0級才能執行的特權指令,就成為一個急需解決的問題。

根據實現機制的不同,這一過程分為三類:

(1)基於模擬執行的CPU虛擬化,也就是所謂的全虛擬化。

當VMM捕獲到guest作業系統需要執行的特權指令時,用本地物理CPU的指令對該特權指令進行模擬執行,並將結果返回給guest作業系統。

這中方式的一個優點就在於,它可以虛擬出與本地物理CPU指令集不同的虛擬CPU

如kvm, vmware

(2)作業系統輔助虛擬化,也就是所謂的半虛擬化

將guest作業系統中的特權指令通過hypercall的方式進行改寫,類似於系統呼叫

這種方式需要修改guest作業系統,

如xen

(3)硬體支援的虛擬化

現如今常見的處理器都支援,intel為 Intel VT-x, AMD 為 SVM

在通常的CPU基礎之上,增加了一個新的模式,通過CPU模式的切換來執行那些特權指令。