內(nèi)存虛擬化技術(shù),具體的實現(xiàn)方法有哪兩種?
引入內(nèi)存虛擬化技術(shù)后,內(nèi)存系統(tǒng)中存在3種地址。
機(jī)器地址(Machine Address,MA):真實硬件的機(jī)器地址,在地址總線上可以見到的地址信號。
虛擬機(jī)物理地址(Guest Physical Address,GPA):經(jīng)過VMM抽象后虛擬機(jī)看到的偽物理地址。
虛擬地址(Virtual Address,VA):Guest OS提供給其應(yīng)用程序使用的線性地址空間。
虛擬地址到虛擬機(jī)物理地址的映射關(guān)系,記作g
虛擬機(jī)物理地址到機(jī)器地址的映射關(guān)系,記作f
操作系統(tǒng)的內(nèi)存管理單元(Memory Management Unit,MMU)只能完成一次虛擬地址到物理地址的映射,但獲得的物理地址只是虛擬機(jī)物理地址而不是機(jī)器物理地址,所以需要VMM參與,以獲得總線上可以使用的機(jī)器地址為實現(xiàn)虛擬地址到機(jī)器地址的高效轉(zhuǎn)換,目前普遍采用的方法是由VMM根據(jù)映射f和g生成復(fù)合映射f·g并直接寫入MMU,具體的實現(xiàn)方法有兩種:
MMU半虛擬化(MMU Paravirtualization)
這種方式主要為Xen所用
主要原理是:當(dāng)Guest OS創(chuàng)建新頁表時,VMM從維護(hù)的空閑內(nèi)存中為其分配頁面并進(jìn)行注冊,以后,Guest OS對該頁表的寫操作都會陷入VMM進(jìn)行驗證和轉(zhuǎn)換;VMM檢查頁表中的每一項,確保它們只映射到屬于該虛擬機(jī)的機(jī)器頁面,而且不包含對頁表頁面的可寫映射;然后,VMM會根據(jù)其維護(hù)的映射關(guān)系f,將頁表項中的虛擬機(jī)物理地址替換為相應(yīng)的機(jī)器地址;***把修改過的頁表載入MMU,MMU就可以根據(jù)修改過的頁表直接完成虛擬地址到機(jī)器地址的轉(zhuǎn)換。這種方式的本質(zhì)是將映射關(guān)系f·g直接寫入Guest OS的頁表中,以替換原來的映射g。
影子頁表
全虛擬化使用影子頁表技術(shù)實現(xiàn)內(nèi)存虛擬化。其與MMU半虛擬化不同的是,VMM為Guest OS的每個頁表維護(hù)一個影子頁表,并將f·g的映射關(guān)系寫入影子頁表,Guest OS的頁表內(nèi)容保持不變,然后,VMM將影子頁表寫入MMU。
影子頁表的維護(hù)將帶來時間和空間上的較大開銷。時間開銷主要體現(xiàn)在Guest OS構(gòu)造頁表時不會主動通知 VMM,VMM 必須等到Guest OS發(fā)生缺頁時才會分析缺頁原因再為其補(bǔ)全影子頁表。而空間的開銷主要體現(xiàn)在VMM需要支持多臺虛擬機(jī)同時運(yùn)行,每臺虛擬機(jī)的 Guest OS 通常會為其上運(yùn)行的每個進(jìn)程創(chuàng)建一套頁表系統(tǒng),因此影子頁表的空間開銷會隨著進(jìn)程數(shù)量的增多而迅速增大。
影子頁表緩存
為權(quán)衡時間開銷和空間開銷,現(xiàn)在一般采用影子頁表緩存(Shadow Page Table Cache)技術(shù),即VMM在內(nèi)存中維護(hù)部分最近使用過的影子頁表,只有當(dāng)影子頁表在緩存中找不到時,才構(gòu)建一個新的影子頁表。當(dāng)前主要的虛擬化技術(shù)都采用了影子頁表緩存技術(shù)。
虛擬機(jī)文件系統(tǒng)的虛擬化技術(shù)