上篇提到, VM 可以被粗略的分為全虛擬化和半虛擬化,其中,全虛擬化一般來說透過 Hyperviosr (VMM) 來實現,常見又分為兩種「Type 1 虛擬化」以及「Type 2 硬體輔助的虛擬化」。半虛擬化則不需要 Hypervisor 耗費資源來建置虛擬機,而是讓虛擬機知道自己是虛擬機,藉此達到模擬的目的
純軟體模擬
追根究底如果我們想寫一台虛擬機,那是完成一支程式——用來模擬其他電腦系統的程式。
虛擬機最一開始的想法便是利用分層的方式,逐層模擬該層的硬體與軟體,藉此達到模擬的效果。
其實際作法便是,當虛擬機的程式需要用到 Kernel Mode 時,很自然的就會去呼喚 system call ,但因為虛擬機沒有權限使用 system call ,便會發生 Trap,所以藉由 VMM 接收這 Trap 的訊息,如下圖所示,進一步對其想做的事情模擬。
軟體全虛擬化方案
純軟體模擬的兼容性高,但這樣的方法效率相當低,故由 VMWare 公司提出軟體全虛擬化方案,
藉由運用 x86 CPU 的指令級別,劃分一個新的規則給予 VMM:
使其能夠在在 Trap 前,利用 Binary Translation 的技術,對要執行的組合語言事先翻譯,提早避免了沒有權限的問題。
但可想而知的,想要直接翻譯 Binary Code,便會遇到記憶體的問題。
透過更換 TLB 頁表的方式,可以達到將虛擬機內的虛擬記憶體位置,轉換為實體機的實體記憶體位置
到目前為止,我們主要介紹了傳統的全虛擬化方案,明天,會介紹藉由硬體輔助的方式,來加速虛擬化!