客戶機物理頁框到宿主機虛擬位址轉換

2021-06-14 12:29:29 字數 1160 閱讀 6400

對於虛擬機器來說, 如果指定1g記憶體,以slot為單位,進行mmap虛擬記憶體對映申請,申請之後memset進行物理記憶體申請,從而占用物理記憶體。對於宿主機來說mmap申請宿主機虛擬記憶體為連續的,進行memset初始化發生缺頁中斷從而申請物理記憶體,這些宿主機物理記憶體未必是連續的。對於虛擬機器來說,虛擬機器物理記憶體當然是連續的,所以可以讓虛擬機器物理記憶體虛擬對應與宿主機虛擬記憶體。

注意:1.slot不是物理上的記憶體槽,而是把物理上記憶體按照相應邏輯進行分隔,例如顯示卡記憶體範圍可以稱為乙個slot,  bios記憶體範圍可以稱之為另乙個slot等等。

2.轉換後,知道宿主機虛擬位址後,當然vmm可以讀寫客戶機的記憶體。宿主機虛擬位址實際是宿主機程序虛擬位址,屬於使用者空間。

如下圖所示:

|      |

~ ~ ~ ~

~ ~ ~ ~

hva?---> |     |<----gfn

|     |                           (slotn)        

base_hva-->|     |<----base_gfn

~ ~ ~ ~

~ ~ ~ ~

|     |

|     |                           (slot0)

|     |

備註:左側為宿主機虛擬記憶體,右側為客戶機物理記憶體

基於上圖,客戶機物理頁框如何轉換為宿主機實體地址(gfn---->hva)

hva=base_hva+(gfn-base_gfn)*page_size

**實現如下:

unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn)

export_symbol_gpl(gfn_to_hva);

上面已經談到1g記憶體,虛擬機器以slot方式分隔,命名為alias一些記憶體slot,這一些slot記憶體一般對應於顯示卡記憶體等。對於這些slot記憶體(稱之為alias)需要重新對映到其他的slot記憶體, 客戶機物理頁框轉換為宿主機虛擬位址只針對其他的slot記憶體(非alias)記憶體slot。

語句(1)判斷如果客戶機物理頁框在命名為alias記憶體slot,需要以對映後的頁框計算,否則gfn不變

語句(2)根據客戶機物理頁框查詢屬於那個slot

語句 (5)進行客戶機物理頁框到宿主機虛擬位址轉換

虛擬MMU 客戶機頁表遍歷

客戶機頁表的遍歷 1.資料結構 struct guest walker c b a 某級頁表 a 頁表項基位址 b index的位址 c index的位址內容 遍歷完成後,資料結構內容為 假設pt max full levels 4 table gfn 0 3 存放 4級頁表項基位址 pte gpa...

配置zabbix客戶機

配置zabbix客戶機 1.1 問題 本例要求新準備一台centos 7虛擬機器,作為zabbix客戶機,完成下列任務 1 配置新虛擬機器svr8 安裝zabbix agent軟體包 允許zabbix server服務端採集資料 啟動zabbix agent服務 1.2 步驟 實現此案例需要按照如下...

瘦客戶機及其應用

近年來,瘦客戶機 機群 得到廣泛應用。在學校 機關和中小企業,都有瘦客戶機 機群 應用的例項。所謂 瘦客戶機 thin clients 是指,它的所有軟體和資料都儲存在網路伺服器上的計算機。資料和應用軟體的集中儲存和分配,具有許多優點,能夠節約大量的系統購置和管理成本。瘦客戶機系統允許人們在不同地點...