日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

虚拟化技术

發布時間:2024/6/21 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 虚拟化技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、虛擬化基本知識

計算機的基本部件

控制集:CPU

存儲:mem,

I/O:

  keyboard,moitor

虛擬化就是將一組物理平臺,虛擬化為多組不同的,彼此之間隔離的平臺。

CPU在OS安裝以后就已經被虛擬化了,每個進程認為自己是獨占CPU,內存的。CPU的虛擬化就是將其分為時間片

用戶空間的進程需要使用硬件,

cpu執行方式:

最外層運行普通指令環3,用戶空間的執行運行在這里

最內存環0:也叫特權環,所有特權指令,cpu中敏感寄存器,尤其是硬件管控寄存機需要由環0中指令才能執行,也就是內和空間在環0

環1與環2(但是在x86平臺上有些敏感指令也運行在這些環上運行)

運行在環3上的guest內核如何調用硬件?

guest的cpu實現方式:

3、軟件模擬,創建一個進程或者一個線程模擬的cpu,讓guest使用

X86虛擬化面臨的常出的問題:

   1、特卻集壓縮:某些敏感指令,放在環1,環2上, 內核運行在環0上,但是兼顧環1,環2,如果運用虛擬化,guestOS需要運行在環1,環2上。從而可以直接運行敏感指令,所以這些指令需要自行捕獲,
    才會避免guestOS避免執行這些指令。 2、特卻集別名:guestOS操作系統實際運行在環1,環2上,但guestOS認為自己運行在環0,所以我們需要將環1,環2將其虛擬為環0.因此我們需要將其起名為環0 3、非特權敏感指令:x86平臺上有些敏感指令運行在環1,環2上。
4、地址空間壓縮:每一個虛擬機所得到的內存地址空間中必須保留一部分給vmm(虛擬機監控器,比如關閉虛擬機之類的命令)使用。說明有些vmm直接運行在GuestOS當中的。HOST主機中。vmm會進入虛
    擬化和退出虛擬化。所以guestOS使用的內存需要給vmm保留一部分,實際使用要比看上去少,使用的地址被壓縮了。  5、靜默特權失敗:X86的某些特卻指令在執行失敗后不會返回錯誤的。所以vmm不能捕獲這些錯誤。我們就不知道各個虛擬機實例運行的狀態。  6、屏蔽虛擬化:在虛擬化場景中,屏蔽中斷,和非屏蔽中斷,guestOS對于特權資源的每次訪問都會觸發處理器異常,(中斷發生,處理器必須要要處理)都需要在中斷時異常需要由vmm處理,
然后再把結果送個guest中。來回切換導致性能降低。

  

4、CPU實現虛擬化方式:

  1、完全虛擬化

  BT技術提升虛擬化性能               二進制翻譯

    硬件層 ---> 環0(vmm) ----> 環1 (guestos 內核)----> 環2 空閑 ---->環3(應用程序)

    guestOS與vmm之間使用的二進制翻譯

這個平臺為完全虛擬化,guestOS不知道自己是虛擬化。這種虛擬化需要給每個guestOS虛擬機模擬一個環0,所以性能確實很厲害

  2、 半虛擬化:

硬件層 ---> 環0(vmm 與 guestos 內核)) ----> 環1 、 環2 空閑 ---->環3(應用程序)

   guestOS不會直接調用環0,特權指令需要使用VMM,這時guestOS知道自己是虛擬化。(hypercall調用請求)

guestOS的內核被修改了。知道自己是虛擬化。windows不能運行在半虛擬化環境,因為不能修改close的操作系統

  

3、硬件虛擬化 hvm

cpu虛擬化

  硬件層 --->環 -1 (vmm)-----> 環0( guestos 內核) ----> 環1 、 環2 空閑 ---->環3(應用程序)

  guestos內核直接安裝在環0上,不用做修改,cpu設計時直接支持虛擬化,但是環0上沒有特權指令上,只能捕獲操作特權指令,然后交給環-1上的vmm來執行。

  但是由于還是需要環-1 環0 來回切換,還是性能比半虛擬化要差一些

5、內存虛擬化:

  正常的內存使用就是被虛擬化的。

  指令和數據都是由內存中獲取的。內存本身就是由物理地址轉換成線性地址,(MMU來處理的)

MMU 工作原理:

  線性空間轉換成物理空間的關系存在頁表當中的。 (page table)

  每個進程給cpu發送指令時,cpu要將 page table 及時的加載到mmu,然后通過mmu va ---> pa的轉換

  虛擬化后的內存虛擬化:

    GVA ---> GPA ---> HPA

    guestOS線性地址空間 -----> guestOS的物理地址空間 -----> HostOS的物理地址空間

   當guestOS中用戶空間訪問內存中數據,直接發送給HostOS cpu,此時由VMM捕獲到,HCPU通過MMU找到對應的物理內存地址后會把地址結果給到VMM,VMM在通知guestOS

    GPA的位置,然后guestOS到gpa中查找。

  后來inter X86 硬件支持(影子mmu),有2個MMU,每次訪問內存地址會同時發給這兩個mmu,如果是虛擬機訪問的就直接返回給虛擬機HPA的地址,跳過了中間的GPA的轉換過程。

  tlb技術:保存了va--->pa的對應關系 ,加快MMU的轉換速度,但是如果多個guestOS時,為了不混淆多個虛擬機的地址對應關系,所以需要都清除tlb

  后來又有了tagtlb ,這樣在tlb中增加了標記,標記著是那臺虛擬機的映射。

  

6、io虛擬化

本身就很慢,在虛擬化后更慢

IO虛擬化實現的方式借鑒于VMM模型

  type-1、type-2

  type1:

    虛擬機直接跑在硬件上,有一個實例是特權實例(dome0),管理其他的虛擬機

       =======> ,

io完全虛擬化 : guestOS調用dome0的虛擬硬盤接口,dome0然后再真正調用物理IO設備的接口,進行二次驅動,這種模擬IO性能比較差

io半虛擬化,前段分為兩半,一般在domeU中,后端在dome0上,前段簡單封裝送給后端,后端做訪問真正IO設備,進行IO設備的調用。

io由dome0自己調用。hv自己不會有過多的硬件驅動。所以要借助dome0 io 等各種驅動。

hypervisor自我實現驅動硬件,各個硬件廠商需要單獨開發給hv提供驅動,但是廠商不會專門給某個hv提供驅動的,所以hv需要自己開發驅動程序。但是硬件設備太多,自己開發硬件驅代價太大,

所以這種的虛擬化技術對于硬件的兼容性太差。 買服務器需要找好型號。

io虛擬化,是使用文件來模擬io設備。 dome0軟件模擬硬件真實的借口。

  type-2: 虛擬機跑在操作系統上

  

vmm不用自己提供任何驅動,只需要模擬各硬件,真正設備的驅動又host來提供

梳理:

各vmm對io的驅動有三種模式:

  類型1:半虛擬化,自主vmm:vmm自行提供驅動

      混合vmm:借助于外在OS提供驅動。XEN、VM

          1、依賴于外部OS提供特權域

           2、自我提供特權提供特權域

  類型2: 寄宿方式,有宿主機的VMM

IO虛擬化模型:

  純模擬,完全虛擬化

  半虛擬化

  透傳:無論是半虛擬化還是模擬都需要借助dome0來實現IO虛擬化的,透傳則是由guest直接使用硬件。dome0管理各硬件

  

另一種技術:

SR-IOV:將一個硬件輪流給多個guestOS使用。

完全虛擬化:vm(類型2) vb kvm, vm-exsi(類型1)

半虛擬化:xen (類型1)

  

總結

以上是生活随笔為你收集整理的虚拟化技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。