記憶體虛擬化技術,具體的實現方法有哪兩種?

shenmanli發表於2017-10-23
引入記憶體虛擬化技術後,記憶體系統中存在3種地址。
機器地址(Machine Address,MA):真實硬體的機器地址,在地址匯流排上可以見到的地址訊號。
虛擬機器實體地址(Guest Physical Address,GPA):經過VMM抽象後虛擬機器看到的偽實體地址。
虛擬地址(Virtual Address,VA):Guest OS提供給其應用程式使用的線性地址空間。



虛擬地址到虛擬機器實體地址的對映關係,記作g
虛擬機器實體地址到機器地址的對映關係,記作f


作業系統的記憶體管理單元(Memory Management Unit,MMU)只能完成一次虛擬地址到實體地址的對映,但獲得的實體地址只是虛擬機器實體地址而不是機器實體地址,所以需要VMM參與,以獲得匯流排上可以使用的機器地址為實現虛擬地址到機器地址的高效轉換,目前普遍採用的方法是由VMM根據對映f和g生成複合對映f·g並直接寫入MMU,具體的實現方法有兩種:


MMU半虛擬化(MMU Paravirtualization)


這種方式主要為Xen所用


主要原理是:當Guest OS建立新頁表時,VMM從維護的空閒記憶體中為其分配頁面並進行註冊,以後,Guest OS對該頁表的寫操作都會陷入VMM進行驗證和轉換;VMM檢查頁表中的每一項,確保它們只對映到屬於該虛擬機器的機器頁面,而且不包含對頁表頁面的可寫對映;然後,VMM會根據其維護的對映關係f,將頁表項中的虛擬機器實體地址替換為相應的機器地址;最後把修改過的頁表載入MMU,MMU就可以根據修改過的頁表直接完成虛擬地址到機器地址的轉換。這種方式的本質是將對映關係f·g直接寫入Guest OS的頁表中,以替換原來的對映g。


影子頁表


全虛擬化使用影子頁表技術實現記憶體虛擬化。其與MMU半虛擬化不同的是,VMM為Guest OS的每個頁表維護一個影子頁表,並將f·g的對映關係寫入影子頁表,Guest OS的頁表內容保持不變,然後,VMM將影子頁表寫入MMU。





影子頁表的維護將帶來時間和空間上的較大開銷。時間開銷主要體現在Guest OS構造頁表時不會主動通知 VMM,VMM 必須等到Guest OS發生缺頁時才會分析缺頁原因再為其補全影子頁表。而空間的開銷主要體現在VMM需要支援多臺虛擬機器同時執行,每臺虛擬機器的 Guest OS 通常會為其上執行的每個程式建立一套頁表系統,因此影子頁表的空間開銷會隨著程式數量的增多而迅速增大。


影子頁表快取


為權衡時間開銷和空間開銷,現在一般採用影子頁表快取(Shadow Page Table Cache)技術,即VMM在記憶體中維護部分最近使用過的影子頁表,只有當影子頁表在快取中找不到時,才構建一個新的影子頁表。當前主要的虛擬化技術都採用了影子頁表快取技術。


虛擬機器檔案系統的虛擬化技術

相關文章