本發(fā)明涉及一種計(jì)算機(jī)系統(tǒng)領(lǐng)域,具體涉及一種基于虛擬傳輸后備緩沖器的對客戶頁表寫保護(hù)的方法。
背景技術(shù):
客戶真正的訪存是通過影子頁表進(jìn)行的,如果影子頁表中存在客戶線性地址到物理地址的映射,那么訪問存儲(chǔ)(訪存)操作就正常進(jìn)行了。如果影子頁表中不存在客戶線性地址到物理地址的映射,那么將引發(fā)一次頁故障,從而導(dǎo)致一次虛擬機(jī)退出(VM exit)。
虛擬機(jī)監(jiān)控器(VMM)獲得控制后,將首先根據(jù)引發(fā)異常的客戶線性地址去查找客戶頁表,如果客戶頁表本身限制這次訪問,如到物理地址的映射不存在、違反頁級(jí)保護(hù)規(guī)則等,VMM將把異常事件回注給客戶,由客戶操作系統(tǒng)處理該頁故障。如果客戶頁表允許本次訪問,那么通常本次頁故障是由于影子頁表中不存在客戶線性地址到物理地址的映射引起的,此時(shí)就需要根據(jù)客戶頁表的內(nèi)容來構(gòu)建相應(yīng)的影子頁表,或稱為對客戶頁表進(jìn)行影射(Shadowing)。VMM中用于影子頁表的內(nèi)存是受限的,因此當(dāng)內(nèi)存緊張時(shí),VMM可能回收一部分影子頁表。
如果完全模擬物理傳輸后備緩沖器(TLB)的行為,VMM需要清空整個(gè)虛擬傳輸后備緩沖器(VTLB),使所有影子頁表的內(nèi)容無效。在多進(jìn)程客戶操作系統(tǒng)中,某些影子頁表的內(nèi)容可能很快就會(huì)被再次用到,而重建影子頁表是一項(xiàng)十分耗時(shí)的工作。因此,采用完全模擬物理TLB行為的方法構(gòu)建VTLB在效率上是較差的。為了實(shí)現(xiàn)緩存影子頁表的做法,必須意識(shí)到以下問題的存在:客戶可能在不通知VMM的情況下,修改普通內(nèi)存一樣修改影子頁表,客戶操作系統(tǒng)不會(huì)使用指令刷新TLB,VMM也就無從得知客戶修改了進(jìn)程的頁表。以后,當(dāng)進(jìn)程恢復(fù)運(yùn)行時(shí),由于影子頁表與客戶頁表不一致,將導(dǎo)致錯(cuò)誤。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是在采用緩存影子頁表的做法時(shí),如何保持客戶頁表與影子頁表間的一致性,目的在于提供一種基于虛擬傳輸后備緩沖器的對客戶頁表寫保護(hù)的方法,避免使用緩存影子頁表時(shí)影子頁表與客戶頁表不一致而導(dǎo)致的錯(cuò)誤。
本發(fā)明通過下述技術(shù)方案實(shí)現(xiàn):
一種基于虛擬傳輸后備緩沖器的對客戶頁表寫保護(hù)的方法,包括以下兩個(gè)步驟:
步驟一:區(qū)別普通客戶內(nèi)存和客戶頁表;即當(dāng)客戶操作系統(tǒng)在初始化某張頁表時(shí),虛擬機(jī)監(jiān)控器不能確定該頁是普通客戶內(nèi)存還是客戶頁表,如果當(dāng)所述某張頁表用于訪問存儲(chǔ)時(shí),在虛擬傳輸后備緩沖器中沒有影射,將會(huì)發(fā)生一次虛擬傳輸后備緩沖器填充,同時(shí)觸發(fā)虛擬機(jī)監(jiān)控器搜索客戶頁表結(jié)構(gòu),從而確定引起頁面故障的客戶線性地址相關(guān)的客戶頁面的真實(shí)身份;虛擬傳輸后備緩沖器填充的操作使客戶頁表和影子頁表之間進(jìn)行了一次同步。
步驟二:獲得影子頁表中訪問的客戶頁表;
A:基于內(nèi)核的虛擬機(jī)在影子頁表中建立客戶線性地址到物理地址的影射關(guān)系;
B:維護(hù)物理地址到末級(jí)頁表間的逆向映射;即給定客戶頁面,能夠方便地得到該客戶頁面的末級(jí)頁表;
C:給定一個(gè)客戶頁面,如果其逆向映射存在,正向映射一定存在;即該客戶頁面可以通過影子頁表訪問。
步驟三:設(shè)置寫保護(hù);當(dāng)虛擬機(jī)監(jiān)控器在虛擬傳輸后備緩沖器填充操作過程中識(shí)別一個(gè)客戶頁表,就會(huì)通過逆向映射找到訪問其所需的影子頁表項(xiàng),并將影子頁表的字處理器位標(biāo)記為一。
采用對客戶頁表寫保護(hù)的方式,能夠保持客戶頁表與影子頁表間的一致性;但是考慮到效率問題,不能對所有的客戶頁面都寫保護(hù),因此需要區(qū)別普通客戶內(nèi)存和客戶頁表,只針對客戶頁表寫保護(hù)。在寫保護(hù)后的客戶頁表中,客戶對該客戶頁表進(jìn)行修改,將導(dǎo)致虛擬機(jī)退出(VM exit),這樣能使虛擬機(jī)監(jiān)控器(VMM)有機(jī)會(huì)與客戶頁表保持同步。
進(jìn)一步地,在識(shí)別到一個(gè)客戶頁表時(shí),影子頁表中不一定總存在到客戶頁表的映射,當(dāng)影子頁表中不存在到客戶頁表的映射時(shí),不能對客戶頁表寫保護(hù),這種情況下首先在影子頁表中建立到客戶頁表的映射,同時(shí)虛擬機(jī)監(jiān)控器檢查該客戶頁表的字處理器位是否為一,如果是一,則該客戶頁表已被影射。
進(jìn)一步地,如果影子頁表在存在到客戶頁表的映射,但是客戶頁表并沒有被影射,此時(shí)虛擬機(jī)監(jiān)控器不能對客戶頁表寫保護(hù),客戶可隨意修改客戶頁表,此后,當(dāng)客戶使用客戶頁表進(jìn)行訪問存儲(chǔ)時(shí),會(huì)引發(fā)一次虛擬傳輸后備緩沖器填充,從而使虛擬機(jī)監(jiān)控器影射該客戶頁表,與影子頁表同步,并在影子頁表沒有被回收的情況下對該客戶頁表設(shè)置寫保護(hù)。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下的優(yōu)點(diǎn)和有益效果:在采用緩存影子頁表的做法時(shí),能夠保持客戶頁表與影子頁表的一致性,避免當(dāng)關(guān)閉的進(jìn)程恢復(fù)運(yùn)行時(shí)發(fā)生影子頁表與客戶頁表不一致的錯(cuò)誤發(fā)生。
附圖說明
此處所說明的附圖用來提供對本發(fā)明實(shí)施例的進(jìn)一步理解,構(gòu)成本申請的一部分,并不構(gòu)成對本發(fā)明實(shí)施例的限定。在附圖中:
圖1為本發(fā)明客戶頁表調(diào)用圖;
附圖中標(biāo)記及對應(yīng)的零部件名稱:
PD、PT1、PT2、P1和P2是客戶頁表;CR3是控制寄存器;SPD、SPT1和SPT2是影子頁表。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面結(jié)合實(shí)施例和附圖,對本發(fā)明作進(jìn)一步的詳細(xì)說明,本發(fā)明的示意性實(shí)施方式及其說明僅用于解釋本發(fā)明,并不作為對本發(fā)明的限定。
實(shí)施例
如圖1所示,SPD是PD的影子頁表,SPT1/SPT2是PT1/PT2的影子頁表。由于客戶頁目錄表(PDE)和頁表(PTE)給出的頁表基址和頁基址并不是真正的物理地址,所以我們采用虛線表示PDE到客戶頁表以及PTE到普通客戶頁的映射關(guān)系。VMM中用于影子頁表的內(nèi)存是受限的,因此當(dāng)內(nèi)存緊張時(shí),VMM可能回收一部分影子頁表。例如,可能回收圖1中的影子頁表SPT2,以后客戶訪問P1時(shí)將導(dǎo)致頁故障,VMM將再次分配影子頁表,查詢客戶頁表,并修補(bǔ)客戶線性地址到P1的映射。如果完全模擬物理TLB的行為,客戶機(jī)在切換CR3時(shí),VMM需要清空整個(gè)VTLB,使所有影子頁表的內(nèi)容無效。在多進(jìn)程客戶操作系統(tǒng)中,CR3將被頻繁地切換,某些影子頁表的內(nèi)容可能很快就會(huì)被再次用到,而重建影子頁表是一項(xiàng)十分耗時(shí)的工作。因此,采用完全模擬物理TLB行為的方法構(gòu)建VTLB在效率上是較差的。提高效率的主要做法就是緩存影子頁表,即客戶切換CR3時(shí)不清空影子頁表。例如,假設(shè)客戶機(jī)上有兩個(gè)進(jìn)程A和B,在T1時(shí)刻之前A正在運(yùn)行,此時(shí)CR3指向進(jìn)程A的影子頁表。在T1至T2時(shí)刻進(jìn)程B運(yùn)行,此時(shí)CR3指向進(jìn)程B的影子頁表,但并不丟棄進(jìn)程A的影子頁表。以后在T3時(shí)刻再次切換到進(jìn)程A時(shí),原來A的影子頁表還可以重用,這就避免了全部重新構(gòu)建A的影子頁表,提高了效率。
以上所述的具體實(shí)施方式,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。