引入內(nèi)存虛擬化技術(shù)后,內(nèi)存系統(tǒng)中存在3種地址。
機(jī)器地址(Machine Address,MA):真實(shí)硬件的機(jī)器地址,在地址總線上可以見(jiàn)到的地址信號(hào)。
虛擬機(jī)物理地址(Guest Physical Address,GPA):經(jīng)過(guò)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ī)器地址為實(shí)現(xiàn)虛擬地址到機(jī)器地址的高效轉(zhuǎn)換,目前普遍采用的方法是由VMM根據(jù)映射f和g生成復(fù)合映射f·g并直接寫(xiě)入MMU,具體的實(shí)現(xiàn)方法有兩種:
MMU半虛擬化(MMU Paravirtualization)
這種方式主要為Xen所用
主要原理是:當(dāng)Guest OS創(chuàng)建新頁(yè)表時(shí),VMM從維護(hù)的空閑內(nèi)存中為其分配頁(yè)面并進(jìn)行注冊(cè),以后,Guest OS對(duì)該頁(yè)表的寫(xiě)操作都會(huì)陷入VMM進(jìn)行驗(yàn)證和轉(zhuǎn)換;VMM檢查頁(yè)表中的每一項(xiàng),確保它們只映射到屬于該虛擬機(jī)的機(jī)器頁(yè)面,而且不包含對(duì)頁(yè)表頁(yè)面的可寫(xiě)映射;然后,VMM會(huì)根據(jù)其維護(hù)的映射關(guān)系f,將頁(yè)表項(xiàng)中的虛擬機(jī)物理地址替換為相應(yīng)的機(jī)器地址;最后把修改過(guò)的頁(yè)表載入MMU,MMU就可以根據(jù)修改過(guò)的頁(yè)表直接完成虛擬地址到機(jī)器地址的轉(zhuǎn)換。這種方式的本質(zhì)是將映射關(guān)系f·g直接寫(xiě)入Guest OS的頁(yè)表中,以替換原來(lái)的映射g。
影子頁(yè)表
全虛擬化使用影子頁(yè)表技術(shù)實(shí)現(xiàn)內(nèi)存虛擬化。其與MMU半虛擬化不同的是,VMM為Guest OS的每個(gè)頁(yè)表維護(hù)一個(gè)影子頁(yè)表,并將f·g的映射關(guān)系寫(xiě)入影子頁(yè)表,Guest OS的頁(yè)表內(nèi)容保持不變,然后,VMM將影子頁(yè)表寫(xiě)入MMU。
影子頁(yè)表的維護(hù)將帶來(lái)時(shí)間和空間上的較大開(kāi)銷。時(shí)間開(kāi)銷主要體現(xiàn)在Guest OS構(gòu)造頁(yè)表時(shí)不會(huì)主動(dòng)通知 VMM,VMM 必須等到Guest OS發(fā)生缺頁(yè)時(shí)才會(huì)分析缺頁(yè)原因再為其補(bǔ)全影子頁(yè)表。而空間的開(kāi)銷主要體現(xiàn)在VMM需要支持多臺(tái)虛擬機(jī)同時(shí)運(yùn)行,每臺(tái)虛擬機(jī)的 Guest OS 通常會(huì)為其上運(yùn)行的每個(gè)進(jìn)程創(chuàng)建一套頁(yè)表系統(tǒng),因此影子頁(yè)表的空間開(kāi)銷會(huì)隨著進(jìn)程數(shù)量的增多而迅速增大。
影子頁(yè)表緩存
為權(quán)衡時(shí)間開(kāi)銷和空間開(kāi)銷,現(xiàn)在一般采用影子頁(yè)表緩存(Shadow Page Table Cache)技術(shù),即VMM在內(nèi)存中維護(hù)部分最近使用過(guò)的影子頁(yè)表,只有當(dāng)影子頁(yè)表在緩存中找不到時(shí),才構(gòu)建一個(gè)新的影子頁(yè)表。當(dāng)前主要的虛擬化技術(shù)都采用了影子頁(yè)表緩存技術(shù)。
虛擬機(jī)文件系統(tǒng)的虛擬化技術(shù)
如果您非常迫切的想了解IT領(lǐng)域更新產(chǎn)品與技術(shù)信息,那么訂閱強(qiáng)川技術(shù)郵件將是您的更佳途徑之一。