cpu虛擬化:在物理機(宿主機)中通過執行緒或程序這種純軟體方式模擬出假的cpu
物理cpu核數 > 虛擬cpu總核數的原因是:虛擬出來的每顆cpu實際上就是乙個執行緒或者程序。虛擬cpu過多時,需要進行程序/執行緒切換,比較浪費
1、模擬:使用軟體方式實現cpu,需要模擬環0,1,2,3。host架構和guest架構不同,如x86和android,因此guest上執行的所有指令都要進行轉換,不管是使用者空間的指令還是核心空間的指令,因此效能很低。需要安裝模擬器來將其他型別的cpu指令翻譯為本機cpu的指令集。
2、虛擬:guest架構和host架構相同或可以被相容(host為64位,guest可以使用32位),只需要模擬環0即可,因為虛擬機器中的核心需要執行在核心態,即需要將虛擬機器中的核心**轉換為本機的cpu指令集。
3、hypervisor直接管理物理硬體(cpu和memory),hypervisor有時候就是host中的核心。
4、程序中涉及到系統呼叫時的執行過程:
程序執行在cpu的環3(使用者態)上,如果涉及到硬體呼叫時,就通過軟中斷方式發起系統呼叫,由使用者態切換到核心態。核心完成系統呼叫完成後將結果告知呼叫程序,因此恢復中斷現場,程序繼續執行。
5、cpu虛擬化方案:
a、完全虛擬化:guest作業系統核心不需要進行任何修改,guest以為自己直接管理真實的底層物理硬體。
guest相對於宿主機(host)而言只是乙個程序,這時候guest中的核心程式只是執行在host的環3(使用者空間)上的程序,但是,對於核心而言,它必須要執行在環0上,即核心空間要執行在環0上,需要具有所有資源的訪問許可權。
這時候我們就要進行cpu的虛擬化,通過軟體的方式模擬出乙個假的cpu,讓guest的核心執行在模擬出來的cpu環0上。軟體模擬出來的cpu實際上就是host中的乙個程序或執行緒。如果只考慮虛擬化方式而不考慮模擬方式,這時候模擬cpu只需要模擬環0就可,guest中使用者空間的操作可以直接執行在真實cpu的環3上。
執行過程:guest中執行的程式需要涉及到硬體操作時,需要發起系統呼叫,交給guest的核心進行處理,即要經歷cpu的工作流程,取指令,解析指令,執行指令等過程,但是guest中的核心執行在host的使用者態,因此無法轉換成真正的特權指令集,所以還需要向host核心發起系統呼叫,host核心完成系統呼叫後,將結果返回給guest核心,guest核心再將結果返回給guest使用者程序。可以理解為:在guest中執行的程式使用硬體,需要經過兩次核心操作,一是guest中的核心,二是host中的核心。
工作過程如下:
a、bt技術:host核心執行在環0上
bt模式下,假設虛擬機器(guest)中的核心執行在環1上,guest的使用者空間執行在環3上。但是,guest核心是不可能執行在環1上的,因為環1上沒有特權指令,因此必須使用軟體的方式模擬環0。bt技術是將guest的核心**從執行在模擬出來cpu環0移到真實的cpu的環1中。環1和環0之間的互動採用了bt(dynamic binary translation,動態二進位制翻譯,這個技術主要是vmware公司開發的)技術。bt通過監聽環1,隨時將guest的核心呼叫轉換為host核心中真正的特權指令的呼叫,即將上圖中guest使用者程序呼叫guest核心,guest核心呼叫host核心的過程,簡化為guest使用者程序呼叫guest核心。即可以理解為bt實現了執行時翻譯,guest中涉及到核心空間的呼叫時,是邊呼叫邊翻譯邊轉化的,即減少了在模擬cpu中執行完cpu工作流程後再次提交給host核心的過程。bt技術嚴重依賴於底層架構(即虛擬機器中guest的架構必須和底層架構相同或者可以被相容),因為它是直接在guest中執行核心指令時動態轉換為真實的特權指令集,因此無法實現跨平台。guest的核心執行在host的環1上,guest的使用者空間執行在host的環3上。
b、硬體方式:硬體輔助虛擬化,host的核心執行在環-1上。
硬體輔助虛擬化(hvm,hardware virtual machine):由硬體方式實現完全虛擬化,hypevisor執行在環-1上,guest的核心在環0上,即四個環變成了五個環,由硬體進行特權指令的轉換,而不是軟體方式進行轉換。
host中的核心執行在環-1上,特權指令變成放置在環-1上而不再是環0上。guest的核心就可以直接執行在物理cpu中的環0上了。在guest中可以看到物理cpu中的環0-3這個四個環,這是由硬體直接虛擬給guest而不再是通過軟體方式虛擬出cpu的四個環。guest中對核心空間的操作直接由硬體進行轉換,如guest中執行核心空間操作時,在環0上執行核心**時,就會被執行在環-1上的hypevisor捕獲到,由硬體直接轉換為對應的特權指令。
b、半虛擬化:軟體方式實現,host核心在環0上
這是為了提高軟體方式模擬環0虛擬化技術效能而出現的,硬體輔助虛擬化出現後,這種技術就沒有存在的意義了。guest的作業系統**進行了更改,guest是知道自己執行在虛擬機器中的。在guest中涉及到核心空間的操作,不是在模擬的環0上轉換為cpu的指令集,而是要通過向vmm(hypervisor) 進行hypercall呼叫來完成特權指令的呼叫,這是直接呼叫而不是翻譯的過程。這樣guest的核心和host的核心互動的過程大大簡化了,因為不需要中間的翻譯過程了,比如省略了在軟體模擬環0上操作的過程。
總結:效能:硬體輔助虛擬化 > 半虛擬化 > bt技術
完全虛擬化:虛擬機器監視器在關鍵的時候「欺騙」虛擬機器,使得客戶作業系統以為自己在真實的物理環境下執行,可以使用bt技術進行加速,如果支援hvm時,直接使用硬體輔助虛擬化技術
優點:**的轉換工作是動態完成的,無需修改客戶作業系統**
缺點:需要進行兩次轉換,即guest中進行硬體操作時,需要提交到guest的核心,然後再由guest核心提交給host核心進行翻譯為特定的硬體指令。
半虛擬化:guest作業系統通過更改**來解決特權指令呼叫問題,在guest中進行系統呼叫時,直接提交給host核心進行解析。guest是知道自己執行在虛擬機器中的,而不是真實的物理硬體上。
優點:比全虛擬化效能好一些,由兩次翻譯減少為一次翻譯
缺點:不適用於所有的作業系統,因為有些作業系統不能進行**更改,比如windows
參考:計算機的心智作業系統之哲學原理
虛擬化技術
虛擬化技術可以提供硬體,軟體上的虛擬化,從而節省成本。特別是對於需要修改或者隱藏操作細節的場景,虛擬化技術更加重要。容器化技術是可以用於替代容器化技術的,但是兩者確實可以融合,取長補短的。這裡容器化技術一般使用docker。vps基本上都是基於虛擬化技術的,例如vultr就是基於kvm核心虛擬化技術...
虛擬化技術
伺服器虛擬化 虛擬機器遷移 隔離技術 儲存虛擬化 網路虛擬化 桌面虛擬化 如果你開始閱讀這篇文章,就預設你了解什麼是馮諾伊曼結構。下圖就是經典的馮諾伊曼結構,有輸入輸出,有儲存器,有 cpu,而其中又有控制單元也有運算單元 alu。這些就構成基本的計算機硬體系統了。而所謂虛擬化技術指的就是,希望能在...
虛擬化技術
intel tsx ni 最白話的解釋就是乙個 執行緒鎖定判定邏輯的硬體加速,以前是在軟體層執行的,現在是硬體層了,方便程式設計和提公升執行效率 官方資料指出作用是能夠提公升多執行緒運算效能 vpro應該是商用機器上才會有支援,主要是提供mis從遠端管理機器,例如修補程式等,即使機器在關機的狀能,也...