[發明專利]X86體系結構內存管理單元虛擬化方法無效
| 申請號: | 200910043830.1 | 申請日: | 2009-07-03 |
| 公開(公告)號: | CN101620573A | 公開(公告)日: | 2010-01-06 |
| 發明(設計)人: | 易曉東;譚郁松;劉曉建;張衛華;戴華東;吳慶波;孔金珠 | 申請(專利權)人: | 中國人民解放軍國防科學技術大學 |
| 主分類號: | G06F12/08 | 分類號: | G06F12/08;G06F12/10;G06F9/455 |
| 代理公司: | 國防科技大學專利服務中心 | 代理人: | 郭 敏 |
| 地址: | 410073湖*** | 國省代碼: | 湖南;43 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | x86 體系結構 內存 管理 單元 虛擬 方法 | ||
1.一種X86體系結構內存管理單元虛擬化方法,其特征在于包括以下步驟:
第一步,為虛擬機分配物理內存:即在X86計算機引導時為同時運行于該計算機上的n個虛擬機預留出所需的物理內存,并保證所分配的物理內存的物理地址是連續的,為n個虛擬機預留的內存分別為[0,M1),[M1,M2),…,[Mi-1,Mi),…,[Mn-1,Mn),其中Mn=M,1≤i≤n,M為X86計算機物理內存的大小,物理內存物理地址區間為[0,M);
第二步,為每個虛擬機創建并修正E820表:
2.1為每個虛擬機創建E820表:每個虛擬機的E820表中的物理地址區間都是[0,M),第i個虛擬機的E820表中只有物理地址區間為[Mi-1,Mi)的物理內存被標記為可用內存,其它兩塊物理地址區間[0,Mi-1)和[Mi,M)都被標記為不可用內存;
2.2為每個虛擬機修正E820表,方法是:
2.2.1將物理地址區間[0,P)標記為可用內存,P從實驗得出;
2.2.2將物理地址區間[P,Mi-1+P)標記為不可用內存;
2.2.3將物理地址區間[Mi-1+P,Mi)標記為可用內存;
2.2.4物理地址區間[Mi,M)仍標記為不可用內存;
第三步,判斷虛擬機是否加載了新頁表,若加載了,則按如下方法構建影子頁表和反向映射,若未加載,轉第四步:
3.1對第i個虛擬機的每個頁表頁,如果滿足如下任意一個條件,則為該頁表頁創建影子頁表頁,否則不創建影子頁表頁:
條件一,i≠1,且該頁表頁中存在一個頁表項,該頁表項中填入的物理地址x滿足x∈[0,P);
條件二,該頁表頁中存在一個頁表項pte,pte中填入的物理地址X是下一級頁表頁的地址,即pte不是最末級頁表的頁表項,并且物理地址為X的下一級頁表頁需要創建影子頁表頁;
條件三,該頁表頁是整套頁表中最末級的頁表頁,且存在某個頁表項pte,使得pte中填入的物理地址X是某個頁表頁的地址;
3.2為第i個虛擬機構建影子頁表后,檢查所創建的每個影子頁表頁的每個影子頁表項spte,按如下方法對影子頁表項進行修正:
3.2.1檢查影子頁表項spte是否為最末級頁表項,如果spte不是最末級頁表項,轉3.2.2;如果spte是最末級頁表項,則若i≠1且spte中填入的物理地址x滿足x∈[0,P)時,將spte中填入的物理地址x修正為Mi-1+x,轉3.3;若spte中填入的物理地址x是某個頁表頁的起始物理地址,則將這些spte的R/W位改為0,轉3.3;R/W位為讀/寫位,由R/W位控制頁表中該項所映射的內存頁是否可寫;
3.2.2檢查spte所指向的物理地址為x的頁表頁是否被創建了影子頁表頁x′,如果是,則將spte中填入的物理地址x修正為x′,轉3.3;
3.3創建反向映射backmap,反向映射采用鏈表的數據結構,鏈表的每個節點記錄如下信息:指向該物理頁的頁表項的物理地址、該頁表項的P位與R/W位的值;設修正過的影子頁表共有m個影子頁表頁,分別為X1,…,Xk,…,Xm,其中1≤k≤m,第k個影子頁表頁Xk共有nk個影子頁表項,則對第j個影子頁表項sptej,其中1≤j≤nk,設sptej中填入的物理地址為Y,則將sptej的物理地址以及P位與R/W位的值加入到Y的反向映射中,用backmap(Y)表示物理頁Y的所有反向映射鏈表項的集合;P位即“Present位”或“存在位”,由操作系統設置,當P位為1時,該頁表項有效;如果P位為0,CPU利用該頁表項進行地址轉換時會失敗,并通過頁故障通知操作系統進行處理;
3.4為第i個虛擬機的每個頁表頁都設置一個“頁表連續更新計數器”,初始值為0,并將創建的所有影子頁表頁的所有影子頁表項的A位置0;A位即“Accessed位”或“訪問位”,由CPU設置,當CPU第一次訪問某個頁表項并通過該頁表項完成虛擬地址到物理地址的轉換后,就將該頁表項的A位置1;
3.5將影子頁表裝入CPU的CR3寄存器中,通知CPU使用影子頁表進行虛擬地址到物理地址的轉換,轉第四步;
第四步,如果沒有接收到CPU產生的頁故障,或接收到的頁故障既不是P位導致的,也不是R/W位導致的,則轉第三步;如果接收到CPU產生的頁故障,則如果接收的頁故障是由P位導致的,轉第六步;如果接收的頁故障是由R/W位導致的,則更新頁表項和“頁表連續更新計數器”:
4.1按如下方法更新頁表項:
4.1.1接收頁故障;
4.1.2如果pte所在的頁表頁X沒有影子頁表頁,則根據3.1所示的條件判斷是否需要為X創建影子頁表頁,如果需要為X創建影子頁表頁,則根據3.1所示的條件考查是否需要為X的上一級頁表頁創建影子頁表頁;
4.1.3如果pte所在的頁表頁X在此前或在4.1.2中被創建了影子頁表頁X’,設pte在X’中對應的影子頁表項為spte,則根據3.2所示的方法修正影子頁表項spte中的物理地址和R/W位;
4.1.4設該頁表項pte被更新前所指向的物理頁是Y,被更新后所指向的物理頁是Y’,則從backmap(Y)中刪除pte對應的鏈表項,并按3.3所示的方法在Y’的反向映射鏈表backmap(Y’)中創建一個新的鏈表項;當X沒有影子頁表頁時,將pte的物理地址及R/W位和P位填入該反向映射鏈表項中;當X存在影子頁表頁,且pte對應的影子頁表項為spte時,將spte的物理地址及R/W位和P位填入該反向映射鏈表項中;
4.2按如下方法更新“頁表連續更新計數器”:
4.2.1更新頁表頁X的“連續更新計數器”:檢查頁表頁X的上一級影子頁表項中的A位,如果A位為0,將X的連續更新計數器加1;如果A位為1,將X的連續更新計數器清0;
4.2.2判斷頁表頁X的“連續更新計數器”的值是否達到常量值Alpha,如果是則轉第五步;否則,轉第三步;
第五步,按如下方法對上述被更新的頁表頁X進行設置,采用懶惰式頁表更新方法完成對X的后續更新:
5.1消除反向映射:如果X沒有影子頁表頁,則對X的每一個頁表項ptel所指向的物理頁Yl,其中1≤l≤C,C為X的頁表項個數,在backmap(Yl)中去掉ptel所對應的鏈表項,如果X被創建了影子頁表X’,則對X’的每一個頁表項sptel所指向的物理頁Y′l,在backmap(Y′l)中去掉sptel所對應的反向映射鏈表項;
5.2設置反向映射中的頁表項:設頁表頁X的反向映射鏈表backmap(X)中共有W個頁表項pte1,…,ptex,…,pteW,其中1≤x≤W,則對每個頁表項ptex,根據ptex是否為最末級頁表的頁表項,分兩種情況處理:
●如果ptex是最末級頁表的頁表項,根據反向映射項中記錄的ptex的R/W位的值,將ptex的R/W位恢復為其原來的值,即為1,轉第三步;
●如果ptex不是最末級頁表的頁表項,則首先判斷ptex是否是影子頁表項,如果ptex是影子頁表項,則將其P位置為0;如果ptex是虛擬機中頁表的頁表項,則為ptex所在的頁表頁及其所有上級頁表頁創建影子頁表頁,如果ptex所在的頁表頁或其某個上級頁表頁已經被創建了影子頁表頁,則不需要創建多份;創建頁表頁后,按3.2的方法進行影子頁表項的內容修正,并構建相應的反向映射,且將ptex對應的影子頁表項sptex的P位置為0,轉第三步;
第六步,當P位導致的頁故障產生時,CPU給出被更新的頁表項pte的物理地址,按如下方法對pte所在的頁表頁X進行設置:
6.1按如下方法,對X的后續更新不再采用懶惰式頁表更新方法:
6.1.1根據4.1.2所示的方法判斷是否需要為頁表頁X創建影子頁表頁,如果X存在影子頁表頁X’,則對影子頁表頁X’的每個影子頁表項,執行4.1.3與4.1.4所示的頁表項更新方法,包括物理地址修正、R/W位修正和反向映射創建;
6.1.2考查backmap(X)中的每個頁表項ptex,根據ptex是否是最末級的頁表項,分兩種情況進行處理:
●如果ptex是最末級頁表的頁表項,則將ptex的R/W位重新置0;
●如果ptex不是最末級頁表的頁表項,則先在X的反向映射鏈表中找出ptex所對應鏈表項,取出其中保存的ptex的原始的P位的值,將其恢復到ptex中;
6.2將X的“頁表連續更新計數器”清0,轉第三步。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國人民解放軍國防科學技術大學,未經中國人民解放軍國防科學技術大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/200910043830.1/1.html,轉載請聲明來源鉆瓜專利網。





