雲計算

雲計算知識第七講:內存虛擬化

一、內存虛擬化的產生

  內存虛擬化的產生源於VMM與客戶系統在對物理內存的認識上存在衝突,造成物理內存真正擁有者-VMM必須對系統訪問的內存進行一定程度上的虛擬化。

  先看非虛擬化環境:  

  ·指令對內存的訪問通過處理器來轉發>>>>處理器將解碼後的請求放到總線上>>>>芯片組負責轉發。

  為了唯一標示,處理器將採用統一編址的方式將物理內存映射成為一個地址空間(物理地址空間)。

    1)操作系統會假定內存地址從0開始。

    2)內存是連續的或者說在一些大的粒度(比如 256M)上連續。

    在虛擬環境裡,VMM就要模擬使的虛擬出來的內存仍符號客戶機 OS 對內存的假定和認識,內存虛擬化要解決哪些問題呢?

    a.物理內存要被多個客戶OS同時使用,但物理內存只有1個,地址0也只有一個,無法滿足同時從0開始的要求。

    b.由於使用內存分區方式,物理內存分給多個系統使用,客戶機OS內存連續性可解決但不靈活。

    要解決以上問題引入了一層新的地址空間---客戶機物理地址空間來解決讓虛擬機OS 看到一個虛擬的物理地址,讓VMM 負責轉化成物理地址給物理處理器執行。

  image.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 的頁表則無需變動。

  image.png

  ·內存半虛擬化技術

  通過使用頁表寫入法實現虛擬化

  Guest OS 在創建一個新的頁表時,會向VMM註冊該頁表。之後在 Guest 運行的時候,VMM 將不斷的管理和維護這個表,使Guest 上面的程序能直接訪問到合適的地址。

 ·內存硬件輔助虛擬化技術

  通過擴展頁表EPT(extended page table)實現虛擬化。

  EPT通過使用硬件虛擬化技術,使其能在原有的頁表的基礎上,增加一個EPT頁表,用於記錄GPA到MA的映射關係。VMM預先把EPT頁表設置到CPU中。

  Guest 修改Guest 頁表,無需VMM干預。地址轉換時,CPU 自動查找兩張頁表完成 Guest 虛擬地址到機器地址的轉換,從而降低整個內存虛擬化所需的開銷。

  image.png

Leave a Reply

Your email address will not be published. Required fields are marked *