欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于頁面分類的內(nèi)存頁面回收方法及系統(tǒng)與流程

文檔序號:12664068閱讀:247來源:國知局
基于頁面分類的內(nèi)存頁面回收方法及系統(tǒng)與流程

本發(fā)明涉及計算機操作系統(tǒng)以及虛擬化技術(shù)領(lǐng)域,尤其涉及一種基于頁面分類的內(nèi)存頁面回收方法及系統(tǒng)。



背景技術(shù):

隨著計算機硬件性能的不斷提高,如何讓軟件更加有效的使用現(xiàn)代硬件的強大計算能力一直都是產(chǎn)業(yè)界和學(xué)術(shù)界關(guān)注的焦點。硬件虛擬化技術(shù)的出現(xiàn)為該問題的解決提供一個全新的解決方案。在硬件虛擬化技術(shù)的支撐下,多臺虛擬的客戶機可以在同一臺物理主機上同時運行,這極大的提高了主機的硬件利用效率。然而,多臺虛擬機競爭物理主機資源的矛盾又日益的凸顯了出來。

內(nèi)存是計算機系統(tǒng)中最重要的硬件資源之一,如何有效的管理和分配內(nèi)存一直都是操作系統(tǒng)領(lǐng)域的一個研究方向。在歷史的發(fā)展中,操作系統(tǒng)對內(nèi)存的管理經(jīng)過了實地址空間管理、分段式管理以及分頁式管理,并最終在分頁機制的支持下實現(xiàn)了虛地址空間管理和頁面交換機制——即將內(nèi)存中的頁面交換至磁盤以提升內(nèi)存可使用的總量。在虛擬化環(huán)境下對內(nèi)存頁面的管理是對上述歷史發(fā)展的沿革,其關(guān)鍵的任務(wù)在于兩點:1)及時將一臺客戶機中不再使用的內(nèi)存進行回收并分配給有內(nèi)存需求的另一臺客戶機;2)提高換頁機制的效率,即不要對無效頁面進行換頁操作,例如,將客戶機中的空閑頁面交換到磁盤上就是一種典型的無效操作,其浪費了大量的系統(tǒng)資源。

KVM是Kernel-based Virtual Machine的簡寫,其意為基于內(nèi)核的虛擬機。KVM是專門為Linux內(nèi)核開發(fā)的虛擬化基礎(chǔ)設(shè)施,通過將KVM模塊插入內(nèi)核就可以使得Linux變成一個虛擬機監(jiān)控器,并在其上運行虛擬的客戶機。當(dāng)前,在以KVM為基礎(chǔ)的虛擬化環(huán)境中主要實現(xiàn)了三種對內(nèi)存的管理機制:

(1)頁面交換:物理機有內(nèi)存壓力時進行,根據(jù)LRU算法將較長時間未使用的頁面交換到磁盤上。物理機的內(nèi)存壓力能及時降低,但有磁盤訪問的開銷。另外,物理機對客戶機內(nèi)存的實際使用情況并不了解,無法做到高效地管理客戶機內(nèi)存。這種內(nèi)存管理機制就是傳統(tǒng)的操作系統(tǒng)內(nèi)存管理機制,其并未針對虛擬化環(huán)境進行優(yōu)化。

(2)氣球技術(shù)(memory ballooning):客戶機內(nèi)安裝有驅(qū)動程序,由物理機指示該驅(qū)動在客戶機上控制內(nèi)存“氣球”的大小,在物理機上管理“氣球”所對應(yīng)的內(nèi)存。內(nèi)存壓力從物理機轉(zhuǎn)移到客戶機中,可根據(jù)客戶機內(nèi)存使用情況較為高效地回收內(nèi)存頁面。這種機制最主要的問題在于:1)如何確定“氣球”的大小,即應(yīng)該從一臺客戶機中拿走多少內(nèi)存;2)由客戶機將內(nèi)存頁面寫入磁盤的開銷要比由主機來執(zhí)行的開銷大。

(3)KSM(Kernel Samepage Merging):即內(nèi)核相同頁面合并,用一個內(nèi)核線程掃描客戶機進程所使用的內(nèi)存區(qū)域,合并相同內(nèi)容頁面,寫時復(fù)制。該機制的問題在于:1)需要消耗較多的處理器資源且時效性較差;2)不一定能夠顯著地減輕內(nèi)存壓力,需要根據(jù)頁面內(nèi)容的重復(fù)程度而定。



技術(shù)實現(xiàn)要素:

本發(fā)明是針對KVM虛擬化環(huán)境提出的。如上所述,當(dāng)前KVM虛擬化環(huán)境中的三種內(nèi)存管理機制存在著各自的缺點,但歸結(jié)起來這三種方法所存在的最根本的問題在于:主機系統(tǒng)并不真正了解客戶機系統(tǒng)對內(nèi)存的具體使用情況。

針對上述問題,本發(fā)明提供一種基于頁面分類的內(nèi)存頁面回收方法及系統(tǒng),該方法及系統(tǒng)提高了KVM虛擬化系統(tǒng)內(nèi)存頁面回收的效率,從而使得當(dāng)主機系統(tǒng)處于較大內(nèi)存壓力時的性能得到提升。

針對上述目的,本發(fā)明所采用的技術(shù)方案為:

一種基于頁面分類的內(nèi)存頁面回收方法,其步驟包括:

1)定時循環(huán)掃描主機中所有內(nèi)存頁面所對應(yīng)的“struct page”結(jié)構(gòu),并根據(jù)該“struct page”結(jié)構(gòu)分析內(nèi)存頁面在主機中的頁面類型;

2)當(dāng)內(nèi)存頁面在主機中的頁面類型為匿名頁面時根據(jù)主機內(nèi)核提供的逆向映射關(guān)系判斷內(nèi)存頁面是否屬于客戶機進程,求出屬于客戶機進程的內(nèi)存頁面在客戶機中的“struct page”結(jié)構(gòu),并根據(jù)該“struct page”結(jié)構(gòu)分析內(nèi)存頁面在客戶機中的頁面類型;

3)根據(jù)上述頁面分類信息將所有頁面鏈接到相應(yīng)類型的鏈表上;

4)讀取每種類型頁面的數(shù)量,按照客戶機頁面分類的回收順序模型確定當(dāng)前時刻的回收策略,并根據(jù)該回收策略回收內(nèi)存頁面。

進一步地,在步驟1)之后還包括:根據(jù)步驟1)中的“struct page”結(jié)構(gòu)中的mapping成員的值的最低比特位是否置位來判斷當(dāng)前內(nèi)存頁面在主機中是否屬于匿名頁面,若置位則屬于匿名頁面。

進一步地,步驟2)中采用自省方法求出屬于客戶機進程的內(nèi)存頁面在客戶機中的“struct page”結(jié)構(gòu);所述自省方法是指將客戶機地址快速轉(zhuǎn)換為主機地址;所述求出屬于客戶機進程的內(nèi)存頁面在客戶機中的“struct page”結(jié)構(gòu)是指將客戶機中“struct page”結(jié)構(gòu)的GVA(客戶機虛擬地址)轉(zhuǎn)換為HPA(主機物理地址),其轉(zhuǎn)換步驟為:

a)利用公式GPAstruct page=GFN*sizeof(struct page)+gva_to_gpa(VMEMMAP),將GVA轉(zhuǎn)換為GPA(客戶機物理地址);

b)利用KVM以及主機的頁表所提供的信息將GPA轉(zhuǎn)化為HPA。

進一步地,步驟4)中所述客戶機頁面分類的回收順序模型是指以不活躍頁面優(yōu)先于活躍頁面、文件緩存頁面優(yōu)先于匿名頁面為原則所確立的頁面回收順序,即按照如下的順序來對內(nèi)存頁面進行回收:客戶機空閑頁面>=主機不活躍文件緩存頁面>=客戶機不活躍文件緩存頁面>=主機不活躍匿名頁面>=客戶機不活躍匿名頁面>=主機活躍文件緩存頁面>=客戶機活躍文件緩存頁面>=主機活躍匿名頁面>=客戶機活躍匿名頁面。

進一步地,當(dāng)一個正在執(zhí)行的進程向主機系統(tǒng)申請內(nèi)存而該主機系統(tǒng)中的空閑內(nèi)存小于閾值時,主機系統(tǒng)回收內(nèi)存頁面,其中閾值的大小由確定。

更進一步地,根據(jù)內(nèi)存頁面被訪問的頻率將主機系統(tǒng)中所有被使用的內(nèi)存頁面分為活躍頁面集合和不活躍頁面集合,當(dāng)主機系統(tǒng)執(zhí)行內(nèi)存頁面回收時,其步驟包括:

a)將內(nèi)存頁面從活躍頁面集合轉(zhuǎn)移到不活躍頁面集合中;

b)從不活躍頁面集合中選擇最不活躍頁面進行回收。

更進一步地,步驟a)中所述將內(nèi)存頁面從活躍頁面集合轉(zhuǎn)移到不活躍頁面集合中的方法步驟包括:

1)選定所有屬于活躍頁面集合中的頁面,并重新檢查活躍頁面集合中每個頁面在客戶機中的頁面類型;

2)按照客戶機空閑頁面>=客戶機不活躍文件緩存頁面>=客戶機活躍文件緩存頁面>=客戶機不活躍匿名頁面>=客戶機活躍匿名頁面>=主機活躍文件緩存頁面>=主機活躍匿名頁面的優(yōu)先級順序從活躍頁面集合中對應(yīng)的虛擬LRU鏈表中選擇一定數(shù)量的頁面并將其放入相應(yīng)類型的不活躍頁面集合中。

更進一步地,步驟b)中所述從不活躍頁面集合中選擇最不活躍頁面進行回收的方法步驟包括:

1)按照客戶機空閑頁面>=客戶機不活躍文件緩存頁面>=客戶機活躍文件緩存頁面>=客戶機不活躍匿名頁面>=客戶機活躍匿名頁面>=主機不活躍文件緩存頁面>=主機不活躍匿名頁面的優(yōu)先級順序從不活躍頁面集合中對應(yīng)的虛擬LRU鏈表中選擇一定數(shù)量的頁面;

2)如果選取的頁面屬于客戶機空閑頁面,則直接將該頁面轉(zhuǎn)化為主機空閑頁面;

3)如果選取的頁面屬于客戶機不活躍文件緩存頁面,則首先將該頁面在客戶機中所對應(yīng)的“struct page”結(jié)構(gòu)中flags成員的PG_update標志位清零,然后再將該頁面轉(zhuǎn)換為主機空閑頁面;

4)如果是其它類型的頁面,則首先將其內(nèi)存寫入磁盤上的SWAP空間(即交換分區(qū))中,然后再將該頁面轉(zhuǎn)換為主機空閑頁面。

一種基于頁面分類的內(nèi)存頁面回收系統(tǒng),包括主機頁面掃描模塊、客戶機頁面類型分析模塊、虛擬LRU鏈表模塊和頁面分類的回收模塊;

所述主機頁面掃描模塊用于定時循環(huán)掃描主機中所有內(nèi)存頁面所對應(yīng)的“struct page”結(jié)構(gòu),并根據(jù)該“struct page”結(jié)構(gòu)中的相關(guān)信息判斷該內(nèi)存頁面是否屬于客戶機進程,如果是則發(fā)給客戶機頁面類型分析模塊對該內(nèi)存頁面進行分析并將分析結(jié)果發(fā)給虛擬LRU鏈表模塊;

所述客戶機頁面類型分析模塊用于對從所述主機頁面掃描模塊發(fā)來的分析請求進行頁面分析,之后將分析結(jié)果返回給所述主機頁面掃描模塊;并且該模塊利用自省方法求出客戶機中的“struct page”結(jié)構(gòu),并根據(jù)該“struct page”結(jié)構(gòu)分析內(nèi)存頁面在客戶機中的頁面類型;

所述虛擬LRU鏈表模塊用于接收所述主機頁面掃描模塊發(fā)送的頁面分類信息,將頁面鏈接到相應(yīng)的類型鏈表上;并且當(dāng)頁面分類的回收模塊發(fā)出請求時,從相應(yīng)虛擬LRU鏈表上取出相應(yīng)的內(nèi)存頁面以供回收;

所述頁面分類的回收模塊用于從所述虛擬LRU鏈表模塊中讀取每種類型頁面的數(shù)量,按照客戶機頁面分類的回收順序模型確定當(dāng)前時刻的回收策略,并根據(jù)該回收策略向虛擬LRU鏈表模塊請求需要回收的類型頁面,之后將需要回收的頁面?zhèn)鬟f給Linux內(nèi)存頁面回收子系統(tǒng)。

進一步地,所述頁面分類的回收模塊還對客戶機空閑頁面和客戶機文件緩存頁面進行了專門的優(yōu)化處理,使得在回收這兩種頁面時不需要進行磁盤寫入。

本發(fā)明提供一種基于頁面分類的內(nèi)存頁面回收方法及系統(tǒng),首先使用自省方法(即不需要對客戶機進行任何修改)分析出客戶機的頁面類型,然后提出了一種客戶機頁面分類的回收順序模型,最后根據(jù)該模型來對系統(tǒng)中的頁面進行回收。

本發(fā)明的積極效果體現(xiàn)在如下方面:1)由于識別出了客戶機中的空閑頁面從而避免了將客戶機空閑頁面寫入磁盤中交換空間的無效操作;2)盡可能的避免了將客戶機中的文件緩存頁面寫入磁盤中交換空間,減小了對磁盤交換區(qū)的讀寫所帶來的I/O壓力;3)提出了一種更加精確的回收順序模型,從而使得最不活躍的頁面被最優(yōu)先換出,減小了將活躍頁面交換到磁盤上所帶來的多次換頁的問題。也就是說,本發(fā)明是對當(dāng)前KVM虛擬化環(huán)境中三種已有的內(nèi)存管理技術(shù)的改進,本發(fā)明提高了KVM虛擬化系統(tǒng)內(nèi)存頁面回收的效率,從而使得當(dāng)系統(tǒng)處于較大內(nèi)存壓力時的性能得到提升。

附圖說明

圖1為本發(fā)明客戶機頁面分類的回收順序模型示意圖。

圖2為本發(fā)明基于頁面分類的內(nèi)存頁面回收系統(tǒng)總體結(jié)構(gòu)示意圖。

圖3為本發(fā)明基于頁面分類的內(nèi)存頁面回收方法流程示意圖。

圖4為本發(fā)明頁面類型分析流程示意圖。

具體實施方式

為使本發(fā)明的上述特征和優(yōu)點能更明顯易懂,下文特舉實施例,并配合所附圖作詳細說明如下。

在Linux系統(tǒng)中,內(nèi)存頁面分為三類:匿名頁面(Anonymous Page)、文件緩存頁面(File Cache Page)以及空閑頁面(Free Page)。其中,根據(jù)頁面活躍程度的不同又可以把匿名頁面分為活躍匿名頁面(Active Anonymous Page)與不活躍匿名頁面(Inactive Anonymous Page),把文件緩存頁面分為活躍文件緩存頁面(Active File Cache Page)與不活躍文件緩存頁面(Inactive File Cache Page)。在KVM虛擬化環(huán)境(插入了KVM模塊的Linux系統(tǒng))中,KVM客戶機被主機當(dāng)中一個進程來進行管理,所以KVM客戶機所使用的內(nèi)存頁面全部都被主機認定為匿名頁面。然而,客戶機中的Linux操作系統(tǒng)將其自身所使用的內(nèi)存頁面同樣劃分成上述的三類。正是這種主機與客戶機對同一頁面的不同認識導(dǎo)致了主機對內(nèi)存頁面進行了不當(dāng)?shù)幕厥铡?/p>

本發(fā)明提出的正是一種根據(jù)客戶機頁面類型來確定頁面回收順序的方法和系統(tǒng)。本發(fā)明首先使用自省的方法(即不需要對客戶機進行任何修改)分析出客戶機的頁面類型;然后提出了一種客戶機頁面分類的回收順序模型,如圖1所示,原有的頁面回收順序為主機不活躍文件緩存頁面>=主機不活躍匿名頁面>=主機活躍文件緩存頁面>=主機活躍匿名頁面,在考慮了客戶機的頁面類型后,回收的順序調(diào)整為客戶機空閑頁面>=主機不活躍文件緩存頁面>=客戶機不活躍文件緩存頁面>=主機不活躍匿名頁面>=客戶機不活躍匿名頁面>=主機活躍文件緩存頁面>=客戶機活躍文件緩存頁面>=主機活躍匿名頁面>=客戶機活躍匿名頁面;最后根據(jù)該模型來對系統(tǒng)中的頁面進行回收。

本發(fā)明提供一種基于頁面分類的頁面回收系統(tǒng),該系統(tǒng)對于所有的用戶均是透明的,系統(tǒng)不需要任何配置,并且隨著主機系統(tǒng)的啟動而自動啟動。該系統(tǒng)總體結(jié)構(gòu)示意圖如圖2所示,該系統(tǒng)由四大模塊組成,分別闡述如下:

(1)主機頁面掃描模塊:該模塊將定時的循環(huán)掃描主機中所有內(nèi)存頁面所對應(yīng)的“struct page”結(jié)構(gòu),然后根據(jù)該結(jié)構(gòu)中的相關(guān)信息判斷該頁面是否屬于客戶機進程,如果頁面被判定屬于客戶機進程,則通知客戶機頁面類型分析模塊對該頁面進行深度分析以得出其在客戶機中的具體類型。

(2)客戶機頁面類型分析模塊:該模塊接收從主機頁面掃描模塊發(fā)來的分析請求,在對頁面分析后將分析結(jié)果返回主機頁面掃描模塊。該模塊首先利用KVM內(nèi)核模塊中所提供的信息實現(xiàn)一種在64位環(huán)境下將客戶機地址快速轉(zhuǎn)換為主機地址的自省方法;然后利用這種方法求出客戶機中的“struct page”結(jié)構(gòu);最后根據(jù)客戶機中的“struct page”結(jié)構(gòu)分析出頁面所屬的客戶機類型。

(3)虛擬LRU鏈表模塊:該模塊實現(xiàn)16條分類虛擬的LRU鏈表(每條鏈表鏈接著同一類型的頁面),在接收主機頁面掃描模塊發(fā)送的頁面分類信息后,該模塊將頁面鏈接到相應(yīng)的類型鏈表上。該模塊的另一個功能是當(dāng)頁面分類的回收模塊發(fā)出請求時,從相應(yīng)虛擬LRU鏈表上取出相應(yīng)的頁面以供回收。

(4)頁面分類的回收模塊:該模塊首先從虛擬LRU鏈表模塊中讀取每種類型頁面的數(shù)量;然后按照客戶機頁面分類的回收順序模型確定當(dāng)前時刻的回收策略;接著根據(jù)策略向虛擬LRU鏈表模塊請求需要回收的類型頁面;最后將需要回收的頁面?zhèn)鬟f給Linux內(nèi)存頁面回收子系統(tǒng)以完成最終的回收。另外,該模塊針對客戶機空閑頁面(Guest Free Page)和客戶機文件緩存頁面(Guest File Cache Page)進行了專門的優(yōu)化處理,使得在回收這兩種頁面時不需要進行磁盤寫入,從而減小了整個系統(tǒng)的I/O次數(shù),最終大大的提高了系統(tǒng)的效率。

本發(fā)明還提供一種在KVM虛擬化環(huán)境下基于頁面分類的內(nèi)存頁面回收方法,該方法流程示意圖如圖3所示,其步驟包括:

1)掃描頁面。當(dāng)虛擬化主機環(huán)境啟動之后,主機系統(tǒng)內(nèi)核將啟動內(nèi)核掃描線程vmm_scan。該內(nèi)核掃描線程將周期性的掃描系統(tǒng)中的每一個頁面,每掃描完一遍之后掃描線程將休息1秒鐘。

2)分析頁面類型。當(dāng)一個內(nèi)存頁面被掃描到之后,系統(tǒng)將對該頁面的類型進行分析。在Linux內(nèi)核中使用“struct page”結(jié)構(gòu)來記錄系統(tǒng)中內(nèi)存頁面的使用狀態(tài),每一個內(nèi)存頁面都對應(yīng)這一個“struct page”結(jié)構(gòu)的實例。當(dāng)系統(tǒng)分析一個頁面的類型時,實質(zhì)上是在分析該內(nèi)存頁面所對應(yīng)的“struct page”結(jié)構(gòu)中各個成員的狀態(tài)。

請參考圖4,該圖為本發(fā)明頁面類型分析流程示意圖。對于本發(fā)明方法及系統(tǒng)而言,只需要分析成員“flags”、“mapping”、“_count”和“_mapcount”的狀態(tài)就可以得到頁面的類型。其中“_count”成員記錄了引用該頁面的對象的個數(shù),所以當(dāng)“_count”成員的值為零的時候就表明該頁面為空閑頁面?!癬mapcount”成員記錄了引用該頁面的頁表的個數(shù),如果“_count”的值不為零而“_mapcount”的值為零就表明該頁面被系統(tǒng)內(nèi)核所使用,即內(nèi)核頁面。當(dāng)頁面被用戶進程所使用時,“mapping”成員記錄了頁面是被用于匿名頁面還是用于文件緩存頁面,當(dāng)“mapping”成員的值的最低比特位置位時,表明該頁面為匿名頁面?!癴lags”成員的“PG_active”標志位記錄了頁面是否是活躍頁面(Active Page)。當(dāng)“mapping”代表匿名頁面時,“PG_active=1”表明該頁面為活躍匿名頁面,“PG_active”不為1表明該頁面為不活躍匿名頁面;當(dāng)“mapping”不代表匿名頁面(即用于文件緩存頁面)時,“PG_active=1”表明該頁面為活躍文件緩存頁面,“PG_active”不為1表明該頁面為不活躍文件緩存頁面。

如果要得到對一個頁面的完整分類,系統(tǒng)需要分別分析頁面在主機中的類型以及在客戶機中的類型,最后將這兩個結(jié)果進行綜合從而得出完整的分類結(jié)果。在實際的執(zhí)行過程中,系統(tǒng)將首先讀取頁面在主機中的“struct page”結(jié)構(gòu)然后分析其類型,當(dāng)且僅當(dāng)頁面在主機中屬于匿名頁面時(客戶機被主機當(dāng)成一個進程來管理,而進程所使用的內(nèi)存都被主機定義為匿名頁面),系統(tǒng)才嘗試讀取頁面在客戶機中的“struct page”結(jié)構(gòu)并分析其在客戶機中的類型。

當(dāng)系統(tǒng)要讀取頁面在客戶機中的“struct page”結(jié)構(gòu)就必須首先將該結(jié)構(gòu)在客戶機中的地址轉(zhuǎn)換為主機中的地址。在一個虛擬化的系統(tǒng)中,一共存在四類地址:主機物理地址(Host Physical Address,簡稱HPA)、主機虛擬地址(Host Virtual Address,簡稱HVA)、客戶機物理地址(Guest Physical Address,簡稱GPA)和客戶機虛擬地址(Guest Virtual Address,簡稱GVA)。與這四類地址相關(guān)的還有HFN(Host Frame Number主機頁幀號)和GFN(Guest Frame Number客戶機頁幀號)。系統(tǒng)讀取頁面在客戶機中的“struct page”結(jié)構(gòu)其本質(zhì)就是要將客戶機中“struct page”結(jié)構(gòu)的GVA轉(zhuǎn)換為HPA。具體的轉(zhuǎn)換分兩個步驟來進行:1)使用公式GPAstruct page=GFN*sizeof(struct page)+gva_to_gpa(VMEMMAP)來將GVA轉(zhuǎn)換為GPA;2)利用KVM以及主機的頁表所提供的信息將GPA轉(zhuǎn)化為HPA,從而最終可以讀取和分析客戶機中的“struct page”結(jié)構(gòu)。

3)建立分類隊列。在回收內(nèi)存頁面時,根據(jù)回收策略,系統(tǒng)會確定當(dāng)前時刻需要進行回收的頁面類型以及數(shù)量。為了在回收時盡可能快的找到需要回收的相應(yīng)類型的頁面,系統(tǒng)在對頁面進行類型分析之后將把頁面鏈接到相應(yīng)頁面類型的鏈表上,即建立分類隊列。分類隊列模塊主要提供如下功能:1)將頁面加入到一個對應(yīng)特定頁面類型的隊列;2)從一個特定類型的隊列中取出一個頁面;3)獲取某一個隊列當(dāng)前所含有的頁面的個數(shù);4)根據(jù)一個給定的頁面,查詢其所屬的隊列。為了快速判斷頁面是否在某一個隊列中,為分類隊列模塊設(shè)計了位圖機制:每一條隊列都關(guān)聯(lián)了一個對應(yīng)主機系統(tǒng)中所有頁面的位圖。當(dāng)頁面入隊列時,隊列所關(guān)聯(lián)的位圖中的相應(yīng)比特位將被置位;而當(dāng)頁面出隊列時,其相應(yīng)的比特位將被清零。這樣,當(dāng)需要確定某一個頁面是否屬于某個隊列時,只需要檢測其相應(yīng)的比特位而不需要對整個隊列進行遍歷,從而大大的加速了查詢的過程。此外,由于對頁面的回收是一個并發(fā)執(zhí)行的過程,分類隊列模塊中設(shè)計了鎖機制,每一個隊列都對應(yīng)了一個互斥鎖,當(dāng)頁面被添加到隊列或者被從隊列中刪除的時候都必須進行加鎖和解鎖的操作,這樣就可以保證隊列的完整性和有效性。

4)執(zhí)行回收。對系統(tǒng)中內(nèi)存頁面的回收并不是在任何時候都進行的,系統(tǒng)中設(shè)有一個閾值,當(dāng)且僅當(dāng)一個執(zhí)行中進程向系統(tǒng)申請內(nèi)存而此時系統(tǒng)中的空閑內(nèi)存小于閾值時回收程序才被執(zhí)行,其中閾值的大小由確定。在主機系統(tǒng)中(站在主機的角度),對于每一個被進程使用的內(nèi)存頁面,根據(jù)其被訪問的頻率被分為活躍頁面集合與不活躍頁面集合。當(dāng)主機系統(tǒng)執(zhí)行頁面回收時,其過程實際分為了兩個步驟:1)將頁面從活躍頁面集合轉(zhuǎn)移到不活躍頁面集合中;2)從不活躍頁面集合中選擇最不活躍頁面進行回收。

本系統(tǒng)在執(zhí)行活躍度轉(zhuǎn)換時將按照如下順序執(zhí)行:1)選定所有屬于活躍頁面集合中的頁面,并重新檢查活躍頁面集合中每個頁面在客戶機中的頁面類型;2)按照客戶機空閑頁面>=客戶機不活躍文件緩存頁面>=客戶機活躍文件緩存頁面>=客戶機不活躍匿名頁面>=客戶機活躍匿名頁面>=主機活躍文件緩存頁面>=主機活躍匿名頁面的優(yōu)先級順序從活躍頁面集合中對應(yīng)的虛擬LRU鏈表中選擇一定數(shù)量的頁面并將其放入相應(yīng)類型的不活躍頁面集合中。

本系統(tǒng)在執(zhí)行最終頁面回收時將按照如下順序執(zhí)行:1)按照客戶機空閑頁面>=客戶機不活躍文件緩存頁面>=客戶機活躍文件緩存頁面>=客戶機不活躍匿名頁面>=客戶機活躍匿名頁面>=主機不活躍文件緩存頁面>=主機不活躍匿名頁面的優(yōu)先級順序從不活躍頁面集合中對應(yīng)的虛擬LRU鏈表中選擇一定數(shù)量的頁面;2)如果選取的頁面屬于客戶機空閑頁面,則直接將該頁面轉(zhuǎn)化為主機空閑頁面;3)如果選取的頁面屬于客戶機不活躍文件緩存頁面(Guest Inacitve File Page),則首先將該頁面在客戶機中所對應(yīng)的“struct page”結(jié)構(gòu)中flags成員的PG_update標志位清零,然后再將該頁面轉(zhuǎn)換為主機空閑頁面;4)如果是其它類型的頁面,則首先將其內(nèi)存寫入磁盤上的SWAP空間(交換分區(qū))中,然后再將該頁面轉(zhuǎn)換為主機空閑頁面。

以上實施僅用以說明本發(fā)明的技術(shù)方案而非對其進行限制,本領(lǐng)域的普通技術(shù)人員可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護范圍應(yīng)以權(quán)利要求書所述為準。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
托克托县| 焦作市| 海丰县| 中阳县| 中江县| 平顶山市| 武威市| 康平县| 四子王旗| 安仁县| 郴州市| 乌恰县| 安顺市| 巧家县| 虎林市| 汤阴县| 金昌市| 高阳县| 正镶白旗| 乐安县| 曲阳县| 玛纳斯县| 闻喜县| 文安县| 盘锦市| 大荔县| 甘谷县| 东平县| 湘阴县| 青阳县| 铜山县| 莎车县| 连云港市| 平陆县| 方正县| 阳信县| 宣城市| 榆林市| 新巴尔虎左旗| 福贡县| 汝阳县|