【雲計算虛擬化】虛擬化學習認識總結

虛擬化的目的:是爲了提高資源的利用率,提高管理的便攜性,是雲計算的底層基礎。

虛擬化的實現:是將底層的物理硬件都抽象成各種邏輯資源,也就是資源池化(虛擬化),然後再在這些邏輯資源之上,建立虛擬機操作系統。

虛擬化需要解決的一個大問題就是,如何感知內核模式,即:現有的系統是這樣的,操作系統運行在內核態中,用戶程序運行在用戶態中,當用戶程序需要執行內核態功能(比如IO操作)的時候,會被系統捕捉,並由內核執行並返回。然而,在虛擬化中,如果不更改操作系統代碼,則虛擬機操作系統系統也運行在內核態中,這樣就會產生衝突,因爲這時候宿主系統和虛擬系統內核同時運行在內核態中,這就會出問題。所以,虛擬化的重要的一步就在於,如何截獲虛擬機命令對物理硬件的訪問(內核態),並且將其重定向到邏輯資源池中。基於此又有兩種不同的方式

  1. 基於軟件的方法
    比如VMware workstation,它監控虛擬機操作系統的指令,並將虛擬機中的內核態命令截取,並轉化爲軟件調用來實現該功能。
    另外一種就是著名的Qemu,它通過軟件來仿真每條指令的取指令,解碼指令,和執行指令,虛擬機操作系統的所有指令都是用軟件模擬的,這種方式的性能較低。

  2. 基於硬件的方法
    就是依靠物理平臺的本身提供對特殊指令的截獲或者重定向的硬件支持,從而提升性能,

爲了能在一臺物理設備上能夠安裝多個虛擬機操作系統,目前已經出現了多種技術,比如Qemu,xen,kvm,vmware 等多種技術。

Qemu:用軟件的形式,模擬一個虛擬機操作系統的所有設備。
Xen: 剛開始支持半虛擬化,後來支持全虛擬化,Xen是一個直接在硬件上運行的管理程序,也就是說Xen相當於宿主操作系統,負責虛擬機管理和資源的調度。
Kvm: 即內核虛擬機,它基於Linux 內核和支持虛擬化擴展的X86硬件,是一種全虛擬化方法。在KVM中,一個虛擬機實例表現爲一個Linux 進程,所以,可以很好的利用Linux 成熟的進程調度方法,同時KVM還利用了QEMU的虛擬化來實現IO.
等等。。。

有如此衆多的解決方法,而各個方案的管理方式,命令,工具又各不相同,學習和掌握這些不能的工具又費時又低效,所以一種能夠用一個統一的方法來管理這些虛擬機的工具就應運而生,那就是我們要學習的Libvirt。

Libvirt的位置:提供一種Hpyervisor不可知的 API 來安全管理運行於主機上的客戶操作系統。它爲受支持的虛擬機監控程序實現的常用功能提供通用的 API。libvirt 起初是專門爲 Xen 設計的一種管理 API,後來被擴展爲可支持多個虛擬機監控程序,它基於驅動程序的架構,該架構允許一種通用的 API 以通用方式爲大量潛在的虛擬機監控程序提供服務。

個人總結的虛擬化系統圖如圖1所示:

虛擬化結構圖

在KVM和XEN中,KVM+Linux Kernel 的功能與Xen Hpyervisor +Domian 0 的功能相當,KVM利用了Linux 內核的一些成熟的特性,並且可以受益於Linux 內核的發展。而Domain 0 運行的是修改過的linux 系統,其它虛擬機的IO部分,主要和Domain 0 進行通信。Xen的半虛擬化方式,需要修改操作系統的代碼,所以它也和KVM一樣,只能運行受限的操作系統。

糾正的一些錯誤理解:
1. 虛擬機包括虛擬的硬件和虛擬的操作系統,而不僅僅是虛擬操作系統而已,以前一直錯誤的認爲虛擬機只是一個虛擬操作系統(VMware workstation)。
2. Libvirt 作爲一個函數庫API存在,它沒有專門的物理硬件來運行它,而是宿主在Domain 0 或者Linux 系統中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章