針對差異的資本,虛擬化重要涵蓋三個方面的內容:算計虛擬化、存儲虛擬化和絡虛擬化,接下來咱們就差別詳細介紹這三類資本的虛擬化手段和專業。今日重要聊虛擬化中的“算計虛擬化”,也便是重要針對 CPU 的虛擬化。CPU 虛擬化可以說是算計虛擬化最關鍵的要點,弄清楚了 VM Exit 和 VM Entry。后續的IO 虛擬化,內存虛擬化都是創建在這個根基上。下面就由新小編和大家講一講什麼是算計虛擬化。
一、算計虛擬化 算計虛擬化通常包含有三方面的內容 1、CPU虛擬化:由于多個 VM 共享 CPU 資本,需要對 VM 中的敏感指令進行截獲并模擬執行。 2、內存虛擬化:由于多個 VM 共享同一物理內存,需要相互隔離 3、IO虛擬化:由于多個 VM 共享一個物理設施,如磁盤、卡,一賭場娛樂城遊戲即時賠率般借用 TDMA 的思想,通過分時多路專業進行復用。 二、CPU虛擬化簡介 對于 X86 處理器來說,CPU 虛擬化的根基是由於其保衛模式下一共有 4 個差異優先級,差別從 Ring 0 直到 Ring3。這些 Ring 的優先級隨其所執行性能的差異也有所差異。此中Ring 0 用于操縱系統內核和驅動,優先級最高,擁有最高的“特權”,Ring 1 和 Ring 2 用于操縱系統服務,優先級次之,Ring 3 用于應用程序,優先級最低。一般應用程序都放在 Ring 3 級別,至于 Ring 1 和 2 則很少被採用。對于應用程序與 OS 發出的號召要求,CPU 一律采取 Direct ExecuTIon,如下圖所示: 假如要進行虛擬化,Ring 0 這一層就必要交給 VMM來支配,進行硬件資本的分配處理。 那麼疑問來了,由于 OS 一定要在 Ring 0 進行拜訪,直接管理硬件,而目前 Ring 0 的部門已經交給 VMM,操縱系統則被調降到 Ring 1,可是由于 X86 CPU 起初定位為單個用戶採用,那時并沒有考慮到將算計資本分配給差異 OS 的疑問;而且 X86 的指令集架構(即ISA,是處理器的一個抽象描述,即設計規范,定義處理器能夠做什麼。其本性便是一系列的指令集綜合。當前主流的 ISA 有 X86、ARM、MIPS、Poer 等,這里我們僅講 X86 ISA)中有 19 條敏感指令不是特權指令,這些指令必要要在 Ring 0 這個層級才能作用,否則操縱系統將會產生警告哪家娛樂城生日禮金最好、終止掉應用程序甚至導致系統垮掉。 于是,途經研究,我們的攻城獅們提出以下三種想法來辦理這個疑問。 (1)全虛擬化(Full VirtualizaTIon) 這一想法起初由 VMare 在 1999 年提出,這是一種叫做二進制翻譯(Binary TranslaTIon)的專業,原理是通過 VMM 來預先攔截這些 OS 當中原先不能被虛擬化的號召(nonvirtualizable instrucTIons),并將其進行二進制轉譯的替換操縱,使操縱系統以為自己可以直接支配硬件,并無知道實際上已經被虛擬化成為虛擬機了。如下圖所示: 而應用程序一般性的號召則還是直接向硬件請求,以保持優良的功能。全虛擬化的好處是 OS 不必做任何改動,直接安裝即可採用。而且所支援的 OS 種類也最多,但若不靠硬件輔導(Hardare Assisted Virtualization),全虛擬化的實現難度是極度大。 (2)半虛擬化( ParaVirtualization) 半虛擬化的原理是改動 Guest OS 要點中部門代碼,植入了 Hypercall(超級調用),從而使 Guest OS 會將和特權指令相關的操縱都轉換為發給 VMM 的 Hypercall(超級調用),由 VMM 繼續進行處理。而 Hypercall 支援的批處理和異步這兩種優化方式,使得通過Hypercall 能得到近似于物理機的速度。 這樣就能讓原先不能被虛擬化的號召(nonvirtualizable i體驗金 娛樂nstructions)可以途經 Hypercall interfaces 直接向硬件提出請求,Guest OS 的部門還是一樣在Ring 0,不用被調降到 Ring 1。如下圖所示: 半虛擬化的優點是 CPU、IO 損耗減到最低,理論上功能勝過全虛擬化專業,缺點則是必要要改動 OS 內核才行,只有 SuSE、Ubuntu 等少數 Linux 版本才支援,OS 兼容性不良,由於微軟不肯改動自家的操縱系統內核,因此假如是 Windos 系統,就無法採用半虛擬化了。 VMare 在 2024 年發布了透徹半虛擬化(Transparent Paravirtualization線上娛樂城比賽實況轉播頻道錄影回放),針對支援半虛擬化的 OS 可以在 VMare 的平臺通過 VMI(Virtual Machine Interface)打開半虛擬化來增加 IO 功能,減低CPU 的採用率。 其原理是在支援半虛擬化的 Guest OS 上面由 VMare tools 開一道后門,與 VM娛樂城送點數M 進行溝通,然后在 OS 上安裝半虛擬優化驅動程序,以提高 IO 功能,減低 CPU 採用率。這是一種在 VMare 平臺上可以支援半虛擬化 OS 的最佳方式,可是必要要注意的是,底層 CPU Virtualization 仍然是採用二進制轉換(Binary Translation)的全虛擬化專業(Full Virtualization),而不是半虛擬化專業。 (3)CPU 硬件輔導虛擬化( Hardare Assisted Virtualization) 2024 年后,虛擬化漸漸成為潮流,勢不可擋。Intel 與 AMD 決意從 CPU 基本架構著手,更換本來的特權級別 Ring 0、1、2、3,將之歸類為 Non-Root mode,又新增了一個 Root Mode 特權級別(有人稱為Ring -1),這樣一來,OS 便可以在本來Ring 0 的級別,而VMM 則調換到更底層的 Root Mode 級別。如下圖所示: 現在重要有 Intel 的 VT-x 和 AMD 的 AMD-V 這兩種專業。其要點思想都是通過引入新的指令和運行模式,使 VMM 和 Guest OS 差別運行在差異模式(ROOT 模式和非 ROOT 模式)下,且 Guest OS 運行在 Ring 0 下。通常場合下,Guest OS 的要點指令可以直接下到達算計機系統硬件執行,而不需要途經 VMM。當 Guest OS 執行到特殊指令的時候,系統會切換到 VMM,讓 VMM 來處理特殊指令。
三、硬件輔導虛擬化擴展話題 在硬件輔導虛擬化中,虛擬機的指令集直接運行在宿主機物理 CPU 上,當虛擬機中的指令設計到 IO 操縱或者一些特殊指令的時候,管理權轉讓給了宿主機(這里實在是轉讓給了 VMM),也便是一個歷程,它在宿主機上的表現格式也便是一個用戶級歷程。 下面我們僅針對 VT-x 的一些重點概念展開談一下。 (1)兩種模式 VT-x 為 IA 32 處理器增加了兩種操縱模式:VMX root operation 和 VMX non-root operation。 VMM 自己運行在 VMX root operation 模式,VMX non-root operation 模式則由 Guest OS 採用。兩種操縱模式都支援 Ring 0 ~ Ring 3 這 4 個特權級,因此 VMM 和 Guest OS 都可以自由選擇它們所期待的運行等級。 (2)模式轉換 VM entry,運行 Guest OS 這兩種操縱模式可以互相轉換。運行在 VMX root operation 模式下的 VMM 通過顯式調用 VMLAUNCH 或 VMRESUME 指令切換到 VMX non-root operation 模式,硬件自動加載 Guest OS 的高下文,于是 Guest OS 獲得運行,這種轉換稱為 VM entry。 (3)模式轉換 VM exit,運行 VMM Guest OS 運行過程中遭遇需要 VMM 處理的事件,例如外部中斷或缺頁反常,或者主動調用 VMCALL 指令調用 VMM 的服務的時候(與系統調用雷同),硬件自動掛起 Guest OS,切換到 VMX root operation 模式,覆原 VMM 的運行,這種轉換稱為 VM exit。 VMX root operation 模式下,軟件的行為與在沒有 VT-x 專業的處理器上的行為根本一致;而 VMX non-root operation 模式則有很大差異,最重要的區別是此時運行某些指令或遭遇某些事件時,發作 VM exit。 (4) VMM 的生命周期 VMM 開始于 VMXON 指令,解散與 VMXOFF 指令。 第一次啟動 Guest,通過 VMLAUNCH 指令加載 Guest,這時候一切都是新的,比如說開端的 rip 存放器等。后續 Guest exit 后再 entry,是通過 VMRESUME 指令,此指令會將VMCS(后面會介紹到)所指向的內容加載到當前 Guest 的高下文,以便 Guest 繼續執行。 (5)虛擬機管理塊 VMCS(Virtual-Machine control structure) VMCS 是一個 64 位的指針,指向一個真實的內存地址,VMCS 是以 vCPU 為單位的,便是說當前有幾多個 vCPU,就有幾多個 VMCS 指針。 VMM 和 Guest OS 共享底層的處理器資本,因此硬件需要一個物理內存區域來自動保留或覆原彼此執行的高下文。這個區域稱為虛擬機管理塊(VMCS),包含有客戶機狀態區(Guest State Area),主機狀態區(Host State Area)和執行管理區。小同伴們要想獲得更多算計虛擬化的內容,請關注新!