虛擬化技術原理


每一個I/O設備的組成由兩部分組成:
  設備控制器和設備本身

    控制器:集成在主板上的一塊芯片或一組芯片

        真正的硬件操作都是由驅動完成

    驅動程序:通常由設備生產商制作的,一般位於內核中

         每個控制器都有少量的用於通信的寄存器,每個一寄存器表現為一個I/O端口,所有寄存器組合成為設備的IO地址空間

         IO端口是在開機時,向主機的I/O端口空間注冊使用的(0-65535),是cup通過總線跟設備打交道的地址


實現輸入、輸出:
  三種方式:
    1、輪訓:cpu處於忙等待狀態
    2、中斷:網卡收到數據時,立即向中斷控制器發起中斷請求,讓cpu中斷正在執行的任務,並且激活內核,內核從網卡的接收緩沖區中將數據復制到內核接收緩沖區(內存中的一小段地址)中,然后讓內核處理接收到的數據報文。
  內核處理中斷分為兩步:
    1、中斷的上半部:將請求的數據從網卡接收緩沖區中接收就內核接收緩沖區。
    2、中斷的下半部:處理內核接收緩沖區中的數據。
    3、DMA:直接內存訪問。自動將接收緩沖區中的數據直接接收進特定的內存中,當接收完畢之后,通知cpu接收完畢。減少cpu的中斷頻率,提高cpu的利用率

 

OS:
  在OS角度,將計算機組成部件抽象化:
    cpu:時間片
    memory:虛擬地址空間
    I/O:文件


  進程:
    資源集:
      cpu時間
      memory:抽象為虛擬地址空間
  I/O:打開的多個文件。由文件描述符來標示(輸入0,標准輸出1,錯誤輸出2)
     普通文件
     設備文件
     管道文件

 

x86架構提供了四種特權級別:ring0,1,2,3
cpu可分為四個環:用戶空間運行在環3,內核空間運行在環0

內核在設定的時候,都自認為是運行在環0上

 

 

虛擬化:
  cpu虛擬化:
    1、模擬:純軟件方式實現,性能很差。虛擬機運行在模擬出來的cpu上。(模擬出環1,2,3,4)
    2、虛擬
      完全虛擬化:full-virtulization,不知道自己運行在虛擬環境中,需要調用特權命令時直接調用。虛擬出來的架構與地參架構要保持一致
        BT技術:二進制翻譯(軟件),邊翻譯邊執行。上層架構和底層架構要保持一致(即虛擬機系統架構和物理機的系統架構保持一致)。虛擬機用戶空之間可直接運行在物理cpu的環3,只需要虛擬出ring0

        HVM技術:硬件輔助虛擬化,此cpu為特制cpu,比普通cpu多了一個環(環-1,0,1,2,3),物理機的內核運行在環-1上,虛擬機的內核運行在環0上,用戶空間都運行在環3上(性能優秀)

       半虛擬化:para-virtulization,知道自己運行在虛擬環境中,需要調用特權指令時,向物理機的內核發起請求,由物理內核進行調用(性能優秀,切需要對虛擬機的內核進行修改)。虛擬出來的架構與底層架構要保持一致

 

  memory:
    進程:線性地址空間
    內核:物理空間

  

  內存虛擬:
    shadow page table技術(影子頁表):需要經過兩次的內存地址轉換。cpu在不同虛擬機之間切換時,需要清空MMU中的緩存,所以TLB中的緩存很難命中,效率低下。
      虛擬機是進程,進程運行時需要申請內存,虛擬機把自己看作是運行在申請來的內存上(虛擬內存),實際上是運行在物理內存上。當虛擬機中的進程需要調用內存時,先將進程所需的線性地址空間地址發送給MMU,由MMU映射到虛擬機申請來的虛擬內存地址,在由shadow page table技術將虛擬內存地址轉換到物理內存地址中。

  硬件虛擬化
    MMU Virtulization:MMU虛擬化(硬件虛擬化,需要特定cpu支持)
    Intel:EPT,ExtendedPage Table
    AMD:NTP,Nested Page Table

    TLB virtulization
      tagged TLB

 

I/O:
外存:
硬盤、光盤、U盤
網絡設備:
網卡
顯示設備:
VGA:frame buffer機制
鍵盤鼠標:
ps/2,usb

  I/O虛擬化的方式
    模擬(性能較差):完全使用軟件來模擬真實硬件

    半虛擬化(性能優秀):只能運用在網卡和硬盤設備上。如果虛擬機向外發一個包,直接由虛擬機中的IO前端驅動(IO frontend)直接轉發到物理機中的IO站(IO stack),然后又由物理機的內核直接將IO站中的包通過IO后端驅動(IO backend)來驅動網卡將包發送出去。此方法與模擬的方法比較,減少了在虛擬機中通過軟件模擬網卡,然后由虛擬機中的驅動來驅動網卡,再由模擬的網卡將包轉發進物理機中的步驟,性能大大提升。

    IO-through:IO透傳
多個硬件設備,每台虛擬機通過物理機上內核中的IO管理器(IO Manager)調度到自己專屬的硬件設備上。如:有五塊硬盤,物理機使用了兩塊硬盤,剩下的三塊硬盤分配到3台虛擬機上,每個虛擬機有自己的專屬硬盤。

      需要主板支持透傳技術
      Intel:VT-d 在虛擬技術中,實現IO的可靠性,靈活性,和性能的提升。基於北橋的硬件輔助的虛擬化技術。

 

虛擬化類型:
  Type-I型:xen,vmware ESX/ESXi
    在硬件上不安裝操作系統,直接安裝一個虛擬化軟件,此軟件直接接管cpu和內存,所有運行在當前硬件上的主機都是虛擬機

  Type-II型:kvm,vmware workstation,virtul box
    在操作系統上,裝上一個虛擬化軟件,然后通過虛擬化軟件創建並管理多個虛擬機

 

虛擬化技術的分類:
  模擬:IO,CPU,Memory全都是用軟件模擬出來。著名的模擬器有PearPC,Bochs,QEMU。
    在硬件上運行着一台主機,主機上運行一個虛擬化模擬軟件,此軟件可以模擬出一個或多個硬件環境。模擬出的硬件環境就是虛擬機。

  完全虛擬化:也稱為native virtulization
    cpu不做模擬,只對其做相應的分配和管理,IO需要做模擬,Memory也不需要做模擬。虛擬的cpu架構和底層的cpu架構要保持一致。

      兩種加速方式:
        BT
        HVM
        著名產品:VMware Workstation,VMware Server,Parallels Desktop,KVM,Xen(HVM)

    半虛擬化:xen,uml(user-mode linux)。虛擬出來的架構與物理架構也必須完全一致
      通常需要修改虛擬機的內核,然后實現就請求轉發給物理機內核(hypervisor),讓物理機內核執行之后再返回(hyper call)給虛擬機

    OS級別的虛擬化:Openvz,lxc,Solaris Containers
      多個用戶空間共用一個內核空間,每個用戶空間就是一個虛擬機,由一個虛擬機管理器分別多所有虛擬機進行管理。

    庫虛擬化:
      wine

    應用程序虛擬化:
      jvm

 

網絡的虛擬化:
  橋接(bridge mode):
    物理機上有虛擬機,把物理機上的物理網卡當做交換機,然后再在物理機上虛擬出一個網卡當做物理機的網卡,所有到達此主機的數據都由虛擬出來的交換機根據MAC地址轉發

  僅主機模式(host-only mode,開啟路由轉發功能之后為路由模式(route mode)):需要在宿主機上用軟件模擬一個交換機和一個網卡,然后使虛擬機和模擬出來的網卡在同一個網絡中。
    虛擬機只能和宿主機通信,不能和宿主機以為的其他主機通信。如果要和外部主機通信,需要將網關直接指向宿主機中模擬出來的網卡上的地址,然后再宿主機上開啟路由轉發功能,然后再所需與其建立通信關系的外部主機上配置靜態路由,網關指向宿主機地址

  nat模式(nat mode)

  自定義虛擬網絡(isolation mode)

 

TUN與TAP

  在計算機網絡中,TUN與TAP是操作系統內核中的虛擬網絡設備。不同於普通靠硬件網路板卡實現的設備,這些虛擬的網絡設備全部用軟件實現,並向運行於操作系統上的軟件提供與硬件的網絡設備完全相同的功能。

TAP等同於一個以太網設備,它操作第二層數據包如以太網數據幀。TUN模擬了網絡層設備,操作第三層數據包比如IP數據封包。

操作系統通過TUN/TAP設備向綁定該設備的用戶空間的程序發送數據,反之,用戶空間的程序也可以像操作硬件網絡設備那樣,通過TUN/TAP設備發送數據。在后種情況下,TUN/TAP設備向操作系統的網絡棧投遞(或“注入”)數據包,從而模擬從外部接受數據的過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM