1. 程式人生 > >純軟件半虛擬化

純軟件半虛擬化

執行 就會 ado 但是 mark 翻譯 原因 不能 方案

虛擬化是一塊“肥肉”,思傑公司也想分一杯羹,於2003年推出了XEN虛擬化解決方案,它采用的解決方案與vmware公司的虛擬化有些不同,但是vmware公司已經占據了市場的制高點,成了虛擬化市場的霸主。
我們下面來看一下,思傑公司是如何解決X86架構CPU的缺陷的,這裏的缺陷就是指的是敏感指令並不全是特權指令。
hypercall超級調用
技術分享圖片
思傑公司采用hypercall的技術解決部門敏感指令不能被捕捉的問題。他們的思路有點像《×××帝國》的“莫費斯”,他告訴了男主他並不是真實的。OS認為他就是一臺真實物理機,xen修改了OS的部分代碼,告訴OS它就是一個虛擬機,這樣的話當OS要運行一些敏感指令的時候就轉換為發給VMM的hypercall,由VMM繼續進行處理。
OS明確知道自己是運行在環1上,而不是環0上,所以有效的避免了執行沖突的問題。
我們可以看出來,xen的虛擬化比較有哲學意義,它讓OS更加現實,接受了自己就是虛擬機的現實;它讓OS更像一個軟件,使用敏感指令的時候會主動通過VMM,讓VMM發起對硬件的調用。
我認為用被抓和自首來比喻全虛擬化和半虛擬化比較恰當,區分在於被動和主動。
而在全虛擬時,OS對自己是虛擬機的事實一概不知,所以老是做出一些“出格”的事情,它明明運行在環1上卻想運行環0的指令,而全虛擬化的VMM就像警察,每當OS犯罪的時候就會發現,發現會進行降級和模擬處理,但並不是每次OS做出犯罪行為時VMM都能識別,之後有了二進程翻譯技術之後,警察就會發現OS每次的犯罪行為,然後被“抓起來”進行處理
而半虛擬化就像人自首,並不用VMM進行捕獲,當OS想要做一些出格的事情時,就會直接進行一些庫調用,這些庫調用是通過對VMM進行抽象得來的,所以一調用就是直接告訴VMM了,它不用被監控了,實現這一些的前提就是修改OS的代碼,所以xen只支持linux,而不是支持windows上原因。
怎樣理解半虛擬化?
所謂的全虛擬化就是我自己並不是知道自己是虛擬機,對於客戶端而言都是沒有感覺的,這就是全虛擬化。
當OS知道了自己就是虛擬機之後,全虛擬化就不再全了,客戶有感覺了,這種就叫做半虛擬化。
在效率性能上,半虛擬化比vmware要高很多。

純軟件半虛擬化