虛擬化

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
QEMU,一種x86虛擬機器套件

計算機技術中,虛擬化(技術)虛擬技術(英語:Virtualization)是一種資源管理技術,是將電腦的各種實體資源CPU記憶體磁碟空間網絡適配器等),予以抽象、轉換後呈現出來並可供分割、組合為一個或多個電腦組態環境。由此,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些電腦硬件資源。這些資源的新虛擬部份是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料儲存。

定義[編輯]

由於目前資訊科技領域的很多企業都曾在宣傳中將該企業的某種技術稱為虛擬化技術,這些技術涵蓋的範圍可以從Java虛擬機器技術到系統管理軟件,這就使得準確的界定虛擬技術變得困難。因此各種相關學術論文在談到虛擬技術時常常提到的便是如前面所提到的那個不嚴格的定義。

虛擬技術:電腦資源的重新分配

歷史[編輯]

虛擬化技術起源於20世紀60年代末,美國IBM公司當時開發了一套被稱作虛擬機器監視器Virtual Machine Monitor)的軟件,該軟件作為電腦硬件層上面的一層軟件抽象層,將電腦硬件虛擬分割成一個或多個虛擬機器,並提供多用戶對大型電腦的同時、互動訪問。

虛擬化技術的類別[編輯]

按虛擬的對象分類[編輯]

  • 硬件虛擬化
  • 虛擬機器(Virtual machine或VM),可以像真實機器一樣執行程式的電腦的軟件實現
    • 平台虛擬化,將作業系統和硬件平台資源分割開
      • 完全虛擬化,敏感指令在作業系統和硬件之間被捕捉處理,客戶作業系統無需修改,所有軟件都能在虛擬機器中執行,例如IBM CP/CMS,VirtualBoxVMwareQEMU
      • 硬件輔助虛擬化,利用硬件(主要是CPU)輔助處理敏感指令以實現完全虛擬化的功能,客戶作業系統無需修改,例如VMwareXenKVMHyper-V
      • 部分虛擬化,針對部分應用程式進行虛擬,而不是整個作業系統
      • 準虛擬化/超虛擬化(paravirtualization),為作業系統提供與底層硬件相似但不相同的軟件介面,客戶作業系統需要進行修改。例如Xen的半虛擬化模式,Hyper-V,KVM的VirtIO。
      • 作業系統級虛擬化,使作業系統內核支援多用戶空間實體,例如Parallels Virtuozzo Containers、OpenVZLXC以及類Unix系統上的chroot,Solaris上的Zone,FreeBSD上的FreeBSD jail
    • 應用程式虛擬化,在作業系統和應用程式間建立虛擬環境
      • 可攜式應用程式,允許程式在可攜式裝置中執行而不用在作業系統中安裝
      • 跨平台虛擬化,允許針對特定CPU或者作業系統的軟件不做修改就能執行在其他平台上,例如Wine
      • 虛擬裝置,執行於虛擬化平台之上,面向應用的虛擬機器映像
      • 模擬器
  • 虛擬記憶體,將不相鄰的記憶體區,甚至硬碟空間虛擬成統一連續的記憶體地址
  • 儲存虛擬化,將實體儲存空間(如硬碟)分隔成不同的邏輯儲存空間
  • 網絡虛擬化,將不同網絡的硬件和軟件資源結合成一個虛擬的整體
    • 虛擬私人網路絡(VPN),在大型網絡(通常是Internet)中的不同電腦(節點)通過加密連接而組成的虛擬網絡,具有類似區域網絡的功能
    • 記憶體虛擬化,將網絡系統中的隨機存取記憶體聚合起來,形成統一的虛擬記憶體池
  • 桌面虛擬化,在本地電腦顯示和操作遠端電腦桌面,在遠端電腦執行程式和儲存資訊
  • 資料庫虛擬化
  • 軟件虛擬化
  • 服務虛擬化
  • 數據虛擬化 (data virtualization), 數據虛擬化是一種統一來自多個來源的數據的方法,這樣應用程式,報告工具和終端使用者就可以訪問數據,而不需要有關原始來源,位置和數據結構的詳細資訊。[1]

按照抽象程度分類[編輯]

虛擬技術按抽象程度來分為五個層次

按照抽象程度的不同,常常把虛擬技術分為五個層次:

指令集架構等級的虛擬化(Instruction Set Architecture Level)[編輯]

指令集架構的虛擬化是透過軟件來模擬不同架構的處理器、記憶體、匯流排、磁碟控制卡、計時器等多個I/O裝置,軟件會將虛擬機所發出的指令轉換為本機可以操作的指令在現有的硬件上執行。這種等級的虛擬化對於模擬相同處理器架構的平台可以提供很好的相容性,例如︰x86架構Sparc架構Alpha架構

若主機處理器可以執行由虛擬機轉換出來的指令,或是使用相同的指令集來完成任務,那就表示除了處理器以外的作業系統、I/O裝置皆可不受特定平台所綁定,但由於虛擬機的每條指令都必須透過軟件來模擬,所以在效能會有較大程度的耗損。

這個分類底下代表性的有Bochs以及QEMU

硬件抽象層等級的虛擬化(Hardware Abstraction Level)[編輯]

硬件抽象層等級的虛擬化是由虛擬機器監視器來隱藏不同廠商的處理器、記憶體、晶片組…等特徵,為這些虛擬機器提供抽象與統一的虛擬平台。運行此平台的電腦稱之為主體機器(Host Machine),而在此平台中運作的虛擬機稱為客體機器(Guest Machine),

目前大多數x86平台的商業電腦都在使用這種虛擬化,最主要是由於現今處理器廠商提供了硬件輔助虛擬化技術,例如︰第三世代的Intel VT-dAMD-Vi皆提供虛擬機直接記憶體存取(Direct Memory Access)以及對各種PCI介面的直接存取功能(PCI passthrough)。

這個分類底下代表性的有VMware ESXiHyper-V、以及Citrix

作業系統等級的虛擬化(Operating System Level)[編輯]

硬件抽象層等級的虛擬化中的全虛擬化與作業系統底層間有非常高的隔離能力,支援不同的作業系統,安裝後不須要重新啟動主機、或修改開機程式(Boot Loader)以達到雙系統的目的,風險低、維護簡單。由於此等級的虛擬機可以訪問底層作業系統,因此用戶必須花費大量的時間來安裝與設置虛擬機器,接着才能開始評估或測試所需運作的軟件,這些設置包含了作業系統的安裝、安全性或相容性軟件的更新、網絡、系統調校…等,如果所需的作業系統與底層作業系統相同,那麼其實它們所作的跟實際上安裝一台實體機器沒有什麼區別。

作業系統內核虛擬化可以最大限度的減少新增虛擬機的所需,在這個等級的虛擬機器共用實體主機上的硬件以及作業系統,呈現彼此獨立且隔離的虛擬機環境。

應用軟件的環境是由作業系統、函式庫、相依性軟件、特定於系統的資料結構或檔案系統,例如︰NTFSExt4,以及其他環境設置所組成。如果這些都保持不變,應用軟件很難發現與真實環境的區別。這是所有作業系統等級虛擬化的關鍵想法。

這個分類底下代表性的有DockerLXCOpenVZ

程式語言等級的虛擬化(Programming Language Level)[編輯]

傳統電腦是由指令集架構所驅動的一種機械語言,硬件的操作由特殊的I/O指令處理,也可以透過區塊對映(Mapping)來操作記憶體,此等級的虛擬化會將高階語言轉譯成一種名為位元組碼的語言,透過虛擬機器轉譯成為可以直接執行的命令。跨作業系統平台、跨語言皆為其優點。

這個分類底下代表性的有Oracle JavaMicrosoft . NETParrot

函式庫等級的虛擬化(Library Level)[編輯]

大部分的應用程式都是使用由許多函式庫組成的API(Application Programming Interface)來設計,使用動態連結的方式用於隱藏作業系統的細節,目的是提供程式設計師更簡單的工作。這也產生了一種新的虛擬化方式,使用不同的API與不同作業系統底層的ABI(Application Binary Interface)來進行模擬的工作。

這個分類底下代表性的有Wine以及WSL(Windows Subsystem for Linux)。

虛擬化技術的應用[編輯]

  • 伺服器整合
  • 沙盒(Sandboxing)
  • 多執行環境
  • 多作業系統
  • 測試和效能監視
  • 應用整合
  • 虛擬硬件
  • 軟件移植
  • 系統可管理性
  • 測試/質素保證

參考文獻[編輯]

相關條目[編輯]

外部連結[編輯]

  1. ^ Data Virtualization – dataWerks. www.datawerks.com. [2018-04-12]. (原始內容存檔於2018-04-10) (美國英語).