我目前的理解:
1)KVM
KVM(基於核心的虛擬機器)是一個虛擬機器管理程式(VMM – 虛擬機器管理器),作為 Linux 作業系統上的模組運作。需要虛擬機器管理程式才能在不存在的(虛擬)環境中運行某些軟體,同時向該軟體隱藏該軟體運行的真實實體硬體。虛擬機器管理程式可作為實體硬體(主機)和虛擬作業系統(來賓)之間的「間隔物」。
由於 KVM 是 Linux 核心的標準模組,因此它會從核心接收所有必需的功能(記憶體管理、調度程序等)。因此,最終,所有這些好處都會惠及來賓(因為來賓在 Linux 作業系統核心上/中運行的虛擬機器管理程式上工作)。
KVM 非常快,但它本身不足以運行虛擬作業系統,因為...這需要 I/O 仿真。對於 I/O(CPU、磁碟、網路、視訊、PCI、USB、序列埠等),KVM 使用 QEMU。
2)QEMU
QEMU(快速模擬器)是一種適用於各種裝置的模擬器,可讓您在另一種體系結構上運行為一種體系結構設計的作業系統(例如,ARM -> x86)。除了處理器之外,QEMU 還模擬各種週邊設備:網路卡、HDD、顯示卡、PCI、USB 等。
它的工作原理如下:
使用TCG(Tiny Code Generator)轉換器將指令/二進位程式碼(例如ARM)轉換為中間平台無關的程式碼,然後將該平台無關的二進位程式碼轉換為目標指令/程式碼(例如x86)。
ARM –> 中間代碼 –> x86
本質上,您可以在任何主機上的 QEMU 上運行虛擬機,即使使用不支援 Intel VT-x(Intel 虛擬化技術)/AMD SVM(AMD 安全虛擬機)的舊處理器型號也是如此。然而,在這種情況下,它的運行速度會非常慢,因為執行的二進位程式碼需要使用 TCG(TCG 是即時編譯器)動態重新編譯兩次。
那些。 QEMU 本身非常酷,但運行速度非常慢。
3) 保護環
處理器上的二進位程式碼工作是有原因的,但位於不同級別(環/保護環),具有不同級別的資料存取權限,從最高特權(環0)到最受限制、受監管和「擰緊螺母」 」(環 3)。
作業系統(OS核心)運行在Ring 0(核心模式)上,可以對任何資料和裝置做任何它想做的事。用戶應用程式運行在Ring 3級別(用戶模式),不允許為所欲為,而是每次都必須請求訪問才能執行特定操作(因此,用戶應用程式只能訪問自己的數據,而無法「獲取」數據)進入「別人的沙箱」)。環 1 和環 2 供駕駛員使用。
在Intel VT-x / AMD SVM 發明之前,虛擬機器管理程式在Ring 0 上運行,而guest 虛擬機在Ring 1 上運行。由於Ring 1 沒有足夠的權限來正常運行作業系統,因此每次來自guest 系統的特權呼叫時,虛擬機器管理程式必須動態修改此呼叫並在 Ring 0 上執行它(就像 QEMU 所做的那樣)。那些。來賓二進位文件 不 直接在處理器上執行,每次都會動態地進行幾次中間修改。
開銷很大,這是一個大問題,然後處理器製造商彼此獨立地發布了一組擴展指令(Intel VT-x / AMD SVM),允許執行客戶作業系統程式碼 直接地 在主機處理器上(繞過任何昂貴的中間步驟,就像之前的情況一樣)。
隨著 Intel VT-x / AMD SVM 的出現,創建了一個特殊的新環等級 -1(負 0)。現在虛擬機器管理程式在其上運行,而來賓在 Ring XNUMX 上運行並獲得對 CPU 的特權存取。
那些。最終:
- 主機運作在Ring 0上
- 客人在 Ring 0 工作
- 虛擬機器管理程式在環 -1 上執行
4)QEMU-KVM
KVM 為來賓提供對 Ring 0 的訪問,並使用 QEMU 來模擬來賓「看到」並使用的 I/O(處理器、磁碟、網路、視訊、PCI、USB、串行埠等)。
因此QEMU-KVM(或KVM-QEMU):)
附:本文原文原刊於 Telegram 頻道
如果我對主題理解不正確或有什麼需要補充的地方請在評論中寫下來。
謝謝!
來源: www.habr.com