虛擬機
虛擬機(英文全稱:Virtual Machine,縮寫:VM)是一種基于計算機體系結構的技術,它通過軟件將計算機系統虛擬化,從而提供與物理計算機相同的功能。一般來說,虛擬機本質上是一個計算機系統,它可以在完全隔離的環境中通過軟件模擬硬件系統的所有功能。在確保虛擬機可以隔離運行的同時,它還可以同步虛擬機和物理主機之間的資源。
1961年,麻省理工學院在IBM 7094機器上實現了第一個分時系統CTSS,隨后system/360機器也支持分時系統。1972年,IBM正式將system/370的分時系統命名為虛擬機。1996年,Java虛擬機隨著JDK1.0的發布而推出,隨后出現了HotSpot VM和OpenJ9等不同的JVM實現。
虛擬機的實現可能依賴于特殊的軟件和硬件。從廣義上講,虛擬機可以根據其提供的功能分為兩類:系統虛擬機和進程虛擬機。虛擬機具有分區和封裝的優點,但同時也存在性能不穩定等缺陷。
概念定義
系統虛擬機:虛擬機的定義首先由Popek和Goldberg提出,它被稱為物理計算機的高效和獨立副本。這種虛擬機被稱為系統虛擬機,它是一個緊密隔離的軟件容器,包含操作系統和應用程序。每個獨立的虛擬機都是完全獨立的。通過在一臺計算機上放置多個虛擬機,您可以僅在一臺物理服務器或“主機”上運行多個操作系統和應用程序。
進程虛擬機:流程虛擬機可以支持單個流程。在過程虛擬機中,虛擬化軟件被放置在ABI接口、操作系統和硬件組合上。虛擬軟件模擬用戶級指令和操作系統調用。通常,底層平臺稱為主機,運行在虛擬軟件中的應用程序稱為客戶端。虛擬機對應的虛擬機模擬的真實平臺稱為本地機。在進程虛擬機中,虛擬軟件通常被稱為運行時。創建運行時是為了支持客戶端進程并在操作系統上運行。虛擬機支持客戶端進程。只要客戶端進程執行,虛擬機就會終止,直到客戶端進程終止。
虛擬化技術的概念:虛擬化是通過“軟件定義”對物理硬件進行抽象和邏輯化,將邏輯資源與底層硬件隔離開來,通過對邏輯資源的有效管理和利用,實現物理硬件資源效率的最大化。虛擬化技術是一種將事物從一種形式轉變為另一種形式的方法,虛擬機技術是虛擬化技術之一。計算機世界中最常用的虛擬化技術是操作系統中的虛擬內存。如果用戶需要的內存空間大于物理機的內存,我們可以使用內存虛擬化技術將硬盤的一部分虛擬成內存,在對用戶透明的情況下與物理內存一起完成用戶的操作。再比如,虛擬專用網技術(VPN)可以用于在公共網絡中創建安全穩定的“隧道”,這使用戶感覺像在使用專用網絡。
虛擬機監視器:虛擬機監視器,也稱為虛擬機管理程序或虛擬機監視器。虛擬機通常包含整個操作系統及其應用程序,并且還需要運行虛擬機管理程序來控制虛擬機。虛擬機管理程序是運行在物理服務器和操作系統之間的中間軟件層,它允許多個操作系統和應用程序共享一組基本物理硬件,因此也可以將其視為虛擬環境中的“元”操作系統,它可以協調對服務器上所有物理設備和虛擬機的訪問。虛擬機管理程序是所有虛擬化技術的核心。無中斷支持多工作負載遷移的能力是虛擬機管理程序的基本功能。當服務器啟動并執行虛擬機管理程序時,它將為每個虛擬機分配適當數量的內存、CPU、網絡和磁盤,并加載所有虛擬機的客戶機操作系統。
虛擬機管理器:虛擬機管理器也稱為虛擬機監視器(VMM),用于管理彼此獨立運行的虛擬機。它在邏輯上將虛擬機彼此分開,并為每個虛擬機分配自己的底層計算能力、內存和存儲片。這可以防止虛擬機相互干擾。因此,當一個操作系統崩潰或受到安全攻擊時,其他操作系統可能不會受到影響。虛擬機管理器是一個小軟件層,它支持多個操作系統并行獨立運行并共享相同的物理計算資源。這些操作系統采用虛擬機(VMs)的形式,即在軟件中模擬整個計算硬件環境的文件。
虛擬機和物理機的區別:虛擬機是指由軟件模擬的、具有完整硬件系統功能并在完全隔離的環境中運行的完整計算機系統。物理計算機是相對于虛擬機的物理計算機的名稱。物理機為虛擬機提供硬件環境,有時稱為“主機”或“主機”。通過物理機和虛擬機的協作,可以在一臺計算機上安裝多個操作系統(一個外部操作系統和虛擬機中的多個操作系統),并實現多個操作系統之間的通信,就像擁有多臺計算機一樣。
標準協議
晶體阻抗計(Crystal Impedance Meter):CIM是一種開放標準,旨在提供一個無需代理即可對ESXi主機硬件資源進行標準監控的框架。該框架包括一個CIM對象管理器(通常稱為“CIM代理”)和一組CIM提供程序。CIM提供程序用于管理和訪問設備驅動程序和底層硬件。這些提供程序可以由硬件供應商編寫,例如服務器制造商和硬件設備供應商,以便監控和管理他們的設備。CIM代理從所有CIM提供程序獲取信息,并使用標準API將其提供給外部。
OVF:OVF(開放式虛擬化格式)是一種以包的形式組織多個文件的開放式標準。例如。ovf。vmdk。nvram和其他文件。其目的是支持不同產品和平臺之間的虛擬設備交換。OVA(開放式虛擬化格式應用程序)是OVF的單一文件發行版。將虛擬機導出為OVF文件時,會創建一個包含OVF文件和虛擬磁盤文件的目錄。
虛擬開關:在物理網絡拓撲中,常見的連接方法是路由器和交換機之間的連接以及交換機和PC之間的連接。這樣,不同的服務器和PC可以通過交換機的連接相互通信。VSwitch是ESXi內核提供的虛擬交換機,用于連接不同的虛擬機和管理界面。它可以由一個或多個虛擬機網絡適配器組成,但不同的vSwitch不能使用同一個虛擬機網絡適配器。在安裝過程中,默認情況下將創建第一個虛擬交換機vSwitch0,用于控制臺和虛擬機在線等功能。vSwitch的功能類似于物理網絡中的交換機,它使虛擬機能夠進行內部通信并與外部網絡連接。
vRouter:VRouter(虛擬路由器)模擬傳統基于硬件的第三層IP路由器的功能。虛擬路由器通過網絡功能虛擬化(NFV)的方式,將原本依賴專用硬件設備的路由功能轉變為運行在軟件上,而不是依賴商用硬件設備。這樣做的好處包括降低硬件成本和幫助實現硬件互操作性,而無需依賴特定的硬件平臺。
vmware gsx:Oracle VM VirtualBox是一款開源、低成本和跨平臺的桌面虛擬化軟件,可以支持多達32個虛擬CPU的大量工作負載。支持的主機操作系統包括Windows、Linux和macOS。通過該軟件,開發人員可以在一臺設備上運行多個操作系統。同時,使用VirtualBox可以減少桌面和服務器配置,從而降低運營成本并縮短在本地和云中安全部署應用程序所需的時間。
VMware Workstation Pro:VMware Workstation Pro是標準桌面虛擬機管理程序,可用于在Windows或Linux桌面上運行Windows、Linux和BSD虛擬機。借助VMware Workstation Pro,您可以運行復雜的本地虛擬環境,從而在同一臺臺式機上模擬操作系統、平臺和云環境。在開發和測試中使用VMware Workstation Pro可以修復更多錯誤并按時交付高質量的代碼。VMware Workstation Pro具有虛擬網絡連接功能,為虛擬機創建和配置復雜的IPv4和IPv6虛擬網絡,并添加了網絡延遲和帶寬模擬功能。
優勢特點
優勢
劃分:虛擬機的分區特性是可以在一臺物理機上同時運行多個操作系統,并且可以根據需要將系統資源分配給不同的虛擬機。這種分區功能使虛擬機成為一種靈活高效的解決方案,可以滿足不同用戶的需求。通過虛擬化技術,可以將一臺物理服務器劃分為多個虛擬機,每個虛擬機都有自己的操作系統和應用程序,并且相互隔離。這種分區功能使虛擬機能夠更好地利用物理資源,提高系統的利用率,并靈活調整和配置不同虛擬機的資源分配,以滿足不同工作負載的需求。
包裝:虛擬機的這一特性允許它將整個虛擬機的狀態保存到一個文件中,這就像移動和復制文件一樣簡單。這種封裝使虛擬機的部署和管理更加方便。
獨立于硬件:通過將軟件與物理主機分離,用戶可以在單個硬件上運行多個操作系統,從而節省企業時間、管理成本和物理空間。此外,虛擬機還可以支持舊應用程序,從而減少或消除將舊應用程序遷移到更新或不同操作系統的需求和成本。
劣勢
虛擬機會面臨業績不穩定的問題。當在同一物理主機上運行多個虛擬機時,可能會導致性能不穩定,尤其是在無法滿足特定應用程序的基礎架構要求時。因為虛擬機需要運行額外的操作系統和應用程序,所以它將占用一定的內存和處理器資源。這意味著當用戶同時使用多個虛擬機時,他們可能會感到計算機速度緩慢或資源緊張。虛擬機中的數據也可能因軟件故障、計算機崩潰或其他問題而丟失。此外,如果物理服務器崩潰,其上運行的所有虛擬機和應用程序都將受到影響。因此,在使用虛擬機時,需要確保計算機的硬件和軟件配置足夠強大以滿足需求。虛擬機的不正確配置或使用也可能導致對計算機的一些潛在威脅。例如,虛擬機可能會暴露計算機系統中的漏洞,從而給惡意軟件入侵計算機提供機會。
相關技術
許多虛擬機使用模擬方法來實現其功能。仿真是將具有不同接口和功能的系統或子系統轉換為具有特定接口和功能的系統或子系統的過程。指令集模擬在虛擬機中起著重要的作用,因為虛擬機需要在具有特定指令集的主機處理器上運行用不同指令集編譯的二進制程序。
CPU虛擬化:CPU虛擬化是為了確??蛻籼摂M機可以使用與物理CPU相同的指令集架構。這里的指令集架構是指軟件可以看到的狀態(如寄存器和內存)以及作用于這些狀態的指令。借助CPU虛擬化,客戶虛擬機可以在虛擬環境中運行,并與物理CPU進行交互,就像在物理環境中一樣。通過這種方式,虛擬化技術可以為用戶提供更靈活和可擴展的計算資源,同時保持與物理CPU兼容的指令集架構。
內存虛擬化:在傳統系統中,內存地址分為虛擬地址空間和物理地址空間。應用程序使用虛擬地址訪問內存,CPU根據虛擬地址到物理地址的映射將虛擬地址轉換為可以直接訪問的物理地址。這種映射關系維護了從虛擬地址空間到物理地址空間的映射關系。內存虛擬化的核心任務之一就是維護和處理這種雙內存地址空間的映射關系。虛擬化技術允許多個應用程序同時在同一臺物理機上運行,每個應用程序都有自己的虛擬地址空間,該空間映射到實際的物理地址空間,從而實現更高效的資源利用和隔離保護。
設備虛擬化:設備虛擬化涵蓋多種方法,如軟件模擬、半虛擬化、直接I/O訪問和SR-IOV。其中,軟件模擬是最簡單的設備虛擬化方式。它攔截客戶操作系統發出的設備I/O操作,并完全模擬設備I/O操作的響應,以確保設備虛擬化對客戶操作系統是透明的。
解碼調度解釋:解釋程序是模擬和操作機器的程序,它模擬實現源指令集完整結構狀態的機器。這臺機器包括所有的結構寄存器和主存儲器。解釋器維護客戶端主內存的鏡像,包括程序代碼和數據。此外,解釋器還維護一個名為context block的表,其中包含源結構狀態的各種組件,如通用寄存器、程序計數器、條件代碼和控制寄存器。這樣,解釋器可以模擬和操作客戶端的整個狀態,從而可以在解釋器上執行源指令集。解釋程序在運行源程序時,會逐個執行指令,并根據指令讀取和修改程序的狀態。這種類型的解釋器通常被稱為解碼調度解釋器。它的工作原理是通過一個中央循環解碼每條指令,并將指令分派給相應的解釋例程執行。解釋器的主要任務是解析指令,執行相應的操作,并根據需要更新程序的狀態。這種設計方法可以使解釋器更加靈活,可以處理許多不同的指令并根據指令的類型執行相應的操作。
線索解讀:decode-dispatch解釋器的主循環包含一些直接和間接的分支指令,但這些分支指令可能會對性能產生一定的影響,尤其是在無法準確預測的情況下。解釋器主循環的結構通常在循環的頂部停止或中斷,然后使用寄存器間接分支跳轉switch語句,接著調用解釋器例程,該例程通過第二個寄存器間接分支返回主循環,最后通過分支終止循環。線索解釋的一個關鍵特征是使用表格實現賦值的間接跳轉。這種間接跳轉方法的一個優點是可以獨立地修改和重新定位解釋例程。因為調度表用于跳轉,所以這種方法被稱為間接線索解釋。
Xen:Xen是一個開源虛擬機監視器,可以在單個物理主機上運行多個客戶操作系統。Xen與IA-32、x86-64、安騰和ARM計算機架構兼容。Xen Hypervisor直接在硬件上運行,負責調度CPU、內存和中斷。在Xen上運行多個虛擬機,每個運行的虛擬機實例稱為域或來賓。其中,有一個特殊的域Domain 0,它包含系統中的所有驅動程序,還包含用于管理虛擬機的創建、固定和配置的控制堆棧。
KVM:KVM是一種基于Linux內核的開源虛擬化技術,是一種集成到Linux內核中的虛擬機管理程序,是一種面向Linux的完全虛擬化解決方案,具有X86架構和支持虛擬化技術的硬件(Intel VT或AMD-V)。它是Linux的一個非常小的模塊,使用Linux來做很多事情,例如任務調度、內存管理和與硬件設備的交互,從而實現對虛擬機的管理。
實現模式
半虛擬化:半虛擬化是一種通過修改客戶操作系統的代碼以部分訪問特權狀態來直接與VMM交互的技術。在半虛擬化虛擬機中,一些硬件接口以軟件的形式提供給客戶操作系統,這些接口可以通過Hypercall提供(VMM提供對客戶操作系統的直接調用,類似于系統調用)。與完全虛擬化相比,半虛擬化VMM只需模擬部分底層硬件,因此客戶操作系統無法在不進行修改的情況下在虛擬機中運行,甚至在虛擬機中運行的其他程序也需要修改。
完全虛擬化:完全虛擬化是一種硬件虛擬化,它允許未經修改的客戶操作系統獨立運行。實現優先級高于主機操作系統的VMM或超級操作系統是完全虛擬化的基礎。監視器或虛擬機管理程序需要兩個關鍵功能來提供和保護虛擬化環境。首先,獨立于操作系統的存儲管理可以為不同的虛擬環境(如Linux、Windows和嵌入式環境)提供資源,并保護這些環境免受未經授權的訪問;其次,切換虛擬化環境,將物理計算資源分配給虛擬機。
操作系統虛擬化:在傳統的操作系統中,所有用戶的進程本質上都運行在操作系統的同一個實例中,因此內核或應用程序的缺陷可能會影響其他進程。操作系統級虛擬化是一種輕量級虛擬化技術,用于沒有VMM層的服務器操作系統。內核通過創建多個虛擬操作系統實例來隔離不同的進程,不同實例中的進程完全不知道彼此的存在。一般來說,操作系統虛擬化是操作系統的虛擬化,需要隔離操作系統資源。
安全隔離
虛擬機提供了更好的隔離,每個虛擬機都在獨立的環境中運行,互不影響。這使得虛擬機能夠運行不同版本的操作系統和應用程序,從而提供更好的兼容性。由于虛擬機具有一定的隔離特性,每個虛擬機都可以獲得獨立的CPU指令、內存和存儲等物理資源。這意味著虛擬機可以在硬件級別實現故障隔離和安全隔離,同時可以使用高級資源控制功能來保持良好的性能。
隔離技術
虛擬CPU指令隔離:通過將每個虛擬CPU綁定到物理主機的物理處理器核心,實現了虛擬CPU之間的隔離。每個物理CPU核心只能由一個虛擬CPU核心綁定。這種綁定方式保證了每個虛擬CPU的計算負載和指令運行在對應綁定的物理核上,從而實現了虛擬CPU之間的相互隔離。
內存隔離:采用KVM+QEMU虛擬化技術,以Linux操作系統為基礎平臺是一種常見的技術方案。在這個方案中,每個虛擬機對應一個QEMU進程。QEMU進程負責為虛擬機提供所需的內存和其他資源。虛擬機使用的內存資源實際上是分配給QEMU進程的。在Linux操作系統下,不同的進程相互隔離,它們的虛擬地址空間相互獨立。每個進程不能訪問其他進程的地址空間,因此虛擬化系統中每個虛擬機的內存空間也是相互隔離的。這可以確保虛擬機之間的安全性和隔離。
資源分配
CPU分配原則:虛擬機的CPU分配原則是盡可能避免虛擬CPU的過度使用。對于單線程應用程序,不需要多線程。虛擬機的虛擬CPU數量應小于或等于物理CPU核心的數量。例如,在雙插槽雙核服務器配置中,虛擬機應該最多使用兩個虛擬CPU。
內存分配原則:資源評估后,虛擬機內存分配必須確保虛擬機所需的實際內存盡可能不超過物理內存總量。這意味著當應用程序需要更多內存時,它將使用磁盤內存來解決它,但這可能會降低系統性能。對于關鍵應用,可以考慮固定內存的方法,以確保性能的穩定性。
磁盤使用原則:虛擬機的磁盤性能受到許多因素的限制,包括陣列磁盤的數量和類型以及在其上運行的虛擬機數量。磁盤訪問性能對虛擬機數量有一定影響。內部磁盤的可用性和IO吞吐量相對較弱,因此不建議將虛擬機存儲在內部磁盤上,而是使用外部高性能磁盤陣列。
快照和備份:虛擬機的快照類似于數據庫的照片,即在特定時間點(創建快照的時間點)拍攝的數據庫照片。但是這張照片是一個新的數據庫,可以應用于SQL語句。創建快照后,將識別原始數據庫的所有數據頁。如果在創建快照后修改了數據頁,將復制數據頁,并復制未修改的數據頁;虛擬機的備份本質上是一份拷貝。這相當于將數據庫中所有內容的副本復制到一個特定文件(通常是備份文件)中。bak)在某個時間點。備份的結果是一個文件,該文件可以復制或寫入磁帶。
性能監控和優化:虛擬機常見的性能問題包括CPU負載不足、系統吞吐量不足、重復查詢過多、連接池占用、使用不合理等。虛擬機性能優化的原則是盡量減少創建的對象數量,減少全局變量和大型對象的使用。如果出現性能問題,可以從線程池、連接池、虛擬機啟動參數、程序算法等方面進行調優。
主要應用
服務器虛擬化:現代計算機系統性能的快速發展,特別是近年來多核CPU的發展,為虛擬機應用提供了更大的舞臺。通過虛擬機,可以實現服務器的集成,將原本分布在不同計算機和操作系統上的任務集成到一臺計算機上,從而顯著降低信息系統的購買、運行和維護成本。
云計算平臺中的虛擬機:虛擬機也是云計算的基礎,它支持云計算的靈活擴展和資源共享,使計算資源更加高效。云計算以虛擬機技術為基礎,為用戶提供可定制且能保證服務質量的計算能力,使計算成為可按需定制的公共服務。虛擬機的出現降低了客戶操作系統與底層硬件之間的耦合性,因此虛擬機的狀態可以完全遷移到其他計算機系統并恢復。這種在線遷移能力為實現集群均衡、移動計算和高可靠性系統提供了一種創新的技術手段。
桌面虛擬化:桌面虛擬化是一種允許用戶從設備的獨立桌面工作區遠程訪問和運行應用程序的方法。一種常見的情況是用戶使用遠程訪問軟件從家用電腦登錄到辦公電腦。桌面虛擬化也可以指在一臺設備上運行多個虛擬機以保持工作負載的獨立性和隔離性。VMware Workstation Player是一款桌面虛擬化應用程序,無需重啟即可在同一臺計算機上運行一個或多個操作系統。
數據中心虛擬化:在數據中心虛擬化中,虛擬服務器是從傳統的物理服務器創建的。該過程通過在虛擬機管理程序的幫助下模擬處理器、操作系統和其他資源來抽象物理硬件。虛擬機管理程序是一種創建和管理虛擬機的軟件。它將CPU、內存和存儲等資源視為一個池,可以在現有虛擬機或新虛擬機之間重新分配。