一、記憶體虛拟化的産生
記憶體虛拟化的産生源于VMM與客戶系統在對實體記憶體的認識上存在沖突,造成實體記憶體真正擁有者-VMM必須對系統通路的記憶體進行一定程度上的虛拟化。
先看非虛拟化環境:
·指令對記憶體的通路通過處理器來轉發>>>>處理器将解碼後的請求放到總線上>>>>晶片組負責轉發。
為了唯一标示,處理器将采用統一編址的方式将實體記憶體映射成為一個位址空間(實體位址空間)。
1)作業系統會假定記憶體位址從0開始。
2)記憶體是連續的或者說在一些大的粒度(比如 256M)上連續。
在虛拟環境裡,VMM就要模拟使的虛拟出來的記憶體仍符号客戶機 OS 對記憶體的假定和認識,記憶體虛拟化要解決哪些問題呢?
a.實體記憶體要被多個客戶OS同時使用,但實體記憶體隻有1個,位址0也隻有一個,無法滿足同時從0開始的要求。
b.由于使用記憶體分區方式,實體記憶體分給多個系統使用,客戶機OS記憶體連續性可解決但不靈活。
要解決以上問題引入了一層新的位址空間---客戶機實體位址空間來解決讓虛拟機OS 看到一個虛拟的實體位址,讓VMM 負責轉化成實體位址給實體處理器執行。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CO3QzN5cDNkNmNwMTYiNWYhljY0UzYyEDNzMGO0Q2Ny8CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
VMM需要做哪些事情呢?
1)給定一個虛拟機,維護客戶機實體位址到主控端實體位址之間的映射關系。
2)截獲虛拟機對客戶機實體位址的通路,将其轉化為實體位址。
二、記憶體虛拟化
·記憶體全虛拟化技術
通過使用影子頁表(Shadow Page Table)實作虛拟化。
VMM 為每個Guest 都維護一個影子頁表,影子頁表維護虛拟位址(VA)到機器位址(MA)的映射關系。而Guest頁表維護VA到客戶機實體位址(GPA)的映射關系。
當VMM捕獲到Guest 頁表的修改後,VMM 會查找負責GPA 到MA 映射的P2M 頁表或者哈希函數,找到與該GPA對應的MA,再将MA填充到真正在硬體上起作用的影子頁表,進而形成 VA 到 MA 的映射關系。而 Guest 的頁表則無需變動。
·記憶體半虛拟化技術
通過使用頁表寫入法實作虛拟化
Guest OS 在建立一個新的頁表時,會向VMM注冊該頁表。之後在 Guest 運作的時候,VMM 将不斷的管理和維護這個表,使Guest 上面的程式能直接通路到合适的位址。
·記憶體硬體輔助虛拟化技術
通過擴充頁表EPT(extended page table)實作虛拟化。
EPT通過使用硬體虛拟化技術,使其能在原有的頁表的基礎上,增加一個EPT頁表,用于記錄GPA到MA的映射關系。VMM預先把EPT頁表設定到CPU中。
Guest 修改Guest 頁表,無需VMM幹預。位址轉換時,CPU 自動查找兩張頁表完成 Guest 虛拟位址到機器位址的轉換,進而降低整個記憶體虛拟化所需的開銷。