虚拟化技术
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、靜默特權失?。篨86的某些特卻指令在執行失敗后不會返回錯誤的。所以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)
總結
- 上一篇: 蓝牙音箱怎么连接电脑电脑如何接蓝牙音箱
- 下一篇: 共用路由器的两个电脑怎样进入对方桌面共路