記憶體虛擬化技術,具體的實現方法有哪兩種?
引入記憶體虛擬化技術後,記憶體系統中存在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在記憶體中維護部分最近使用過的影子頁表,只有當影子頁表在快取中找不到時,才構建一個新的影子頁表。當前主要的虛擬化技術都採用了影子頁表快取技術。
虛擬機器檔案系統的虛擬化技術
機器地址(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在記憶體中維護部分最近使用過的影子頁表,只有當影子頁表在快取中找不到時,才構建一個新的影子頁表。當前主要的虛擬化技術都採用了影子頁表快取技術。
虛擬機器檔案系統的虛擬化技術
相關文章
- 有管理共享記憶體設計方法的具體實現記憶體
- 實體記憶體和虛擬記憶體記憶體
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- 虛擬記憶體到實體記憶體(32位)記憶體
- 【Java基礎】實體記憶體&虛擬記憶體Java記憶體
- 虛擬記憶體有什麼用 虛擬記憶體不足怎麼解決記憶體
- 虛擬記憶體,實體記憶體,頁面檔案,還有工作管理員記憶體
- Java虛擬機器的記憶體空間有幾種Java虛擬機記憶體
- Java虛擬機器的記憶體空間有幾種!Java虛擬機記憶體
- 致敬 hacker :盤點記憶體虛擬化探索之路|龍蜥技術記憶體
- Linux增加虛擬記憶體方法Linux記憶體
- Java虛擬機器記憶體優化實踐Java虛擬機記憶體優化
- win10虛擬記憶體如何優化_win10怎麼優化虛擬記憶體Win10記憶體優化
- Sql Server實體記憶體及虛擬記憶體設定的總結SQLServer記憶體
- SQL Server出現虛擬記憶體不足的解決方法SQLServer記憶體
- 聊聊虛擬記憶體記憶體
- 虛擬記憶體筆記記憶體筆記
- win10怎麼刪除虛擬記憶體 刪除win10虛擬記憶體的方法Win10記憶體
- win10虛擬記憶體如何最佳化_win10怎麼最佳化虛擬記憶體Win10記憶體
- win10虛擬記憶體怎麼設定 win10虛擬記憶體設定方法Win10記憶體
- win10 虛擬記憶體怎麼設定好 win10 虛擬記憶體設定方法Win10記憶體
- Win10設定虛擬記憶體方法 Win10怎麼設定虛擬記憶體Win10記憶體
- 計算機作業系統——虛擬記憶體與實體記憶體計算機作業系統記憶體
- 教你如何擴大電腦的虛擬記憶體? 什麼是虛擬記憶體?記憶體
- Linux 虛擬記憶體Linux記憶體
- 5.虛擬記憶體記憶體
- 資源供給:記憶體和虛擬記憶體記憶體
- “軟體定義汽車”下的軟體虛擬化技術
- windows10怎麼關閉虛擬記憶體_win10關閉c盤虛擬記憶體的方法Windows記憶體Win10
- win10電腦虛擬記憶體怎麼設定 win10虛擬記憶體設定的方法Win10記憶體
- 虛擬記憶體系統——瞭解記憶體的工作原理記憶體
- 虛擬現實技術
- C++ vector 釋放記憶體的兩種方法C++記憶體
- [轉貼]windows的虛擬記憶體Windows記憶體
- 走出虛擬記憶體禁(轉)記憶體
- ORACLE DISCOVERER虛擬記憶體低Oracle記憶體
- 虛擬記憶體(待補充)記憶體
- 17 種檢視 Linux 實體記憶體的方法Linux記憶體