- 嵌入式虛擬化技術與應用:ACRN開源項目實踐
- 王洪波主編
- 932字
- 2024-03-04 17:18:39
1.3 虛擬化技術的分類
VMM抽象的虛擬機的ISA可以等同于它運行的物理機,也可以做一些修改。當虛擬的ISA與物理的ISA相同時,該虛擬機可以運行沒有任何修改的操作系統;而當兩者不同時,就必須修改客戶機的操作系統。根據VMM抽象的虛擬機的架構的不同或根據是否需要修改客戶OS,虛擬化技術又可以分為半虛擬化(Paravirtualization)技術和完全虛擬化(Full Virtualization)技術。早期基于x86體系結構的虛擬化實現方法因為體系結構的虛擬化漏洞問題,更多采用半虛擬化技術,但是早期的半虛擬化技術只能運行Linux等開源操作系統(作為客戶機操作系統),而無法運行Windows等閉源操作系統。
隨著硬件技術的提高,以Intel虛擬化技術(Intel Virtualization Technology,Intel VT)為代表的完全虛擬化方案的提出和進步極大地簡化了Hypervisor的實現。另外,完全虛擬化由于不需要修改客戶操作系統,因此可以更好地適用于各種場景。同時,硬件技術的進步使得完全虛擬化的額外性能開銷更少,客戶機操作系統上的主要應用的性能也優于半虛擬化技術。今天完全虛擬化已經成為主流。
必須要指出的是,是否修改客戶操作系統不是一個嚴謹的學術問題,而是對現有操作系統生態的一種現狀描述。早期的虛擬化技術社區工作者比較少,對操作系統社區的影響也小,因此只能采用全盤接受現有操作系統(未經修改的二進制代碼)或者私下修改并發布的方法(即半虛擬化)。這種情況已經大大改善,經典的云操作系統和Linux操作系統內核都大量集成了來自虛擬化技術社區的改動代碼,使得Linux為虛擬化而做的修改成為Linux內在的實現,而不需要特意強調新的“對操作系統的修改”。這種情況即使在私有的Windows上也是如此:Windows操作系統定義的一整套的API,讓Hypervisor提供Windows Hypercall的實現,以便在完全虛擬化的情況下采用部分的半虛擬化技術,從而實現性能優化和代碼功能優化等。
另外需要注意的是I/O的完全虛擬化和半虛擬化的爭論。同樣,一個Hypervisor可以模擬一個完全未經修改的I/O設備,讓使用此設備的客戶機操作系統直接使用現有設備的驅動程序而不需要做任何的修改。可以把這種情況理解為一種I/O設備的完全模擬或者完全虛擬化。相反,定義一個全新的設備,利用Hypervisor的特點開發一個新的設備驅動程序以及對應的設備模擬功能,讓I/O子系統更加高效、更加方便。可以把這種情況理解為I/O的半虛擬化實現,比如由KVM社區最初基于PCI Bus定義的virtio[4]設備模型已經成為現在常用的I/O虛擬化方法之一。