專利名稱::基于數(shù)據(jù)源的虛擬內(nèi)存處理方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種基于數(shù)據(jù)源的虛擬內(nèi)存處理方法,尤其是一種將來自各方的數(shù)據(jù)源進(jìn)行接口封裝從而形成數(shù)據(jù)源對象并依此對數(shù)據(jù)進(jìn)行靈活、清晰的虛擬內(nèi)存處理的方法。
背景技術(shù):
:虛存處理即虛擬內(nèi)存的處置管理過程,它是計(jì)算機(jī)操作系統(tǒng)中重要的組成部分,通常是由操作系統(tǒng)提供的管理虛擬內(nèi)存到物理內(nèi)存的映射等操作,其擔(dān)負(fù)著對來自各種輸入/輸出設(shè)備的程序、文件等(通稱為數(shù)據(jù))的存儲、調(diào)用管理工作,以便使CPU能夠高效處理運(yùn)行。傳統(tǒng)的虛存處理方法主要是先分配虛擬地址空間,通過專門的系統(tǒng)調(diào)用從磁盤文件里讀取內(nèi)容到物理內(nèi)存中,建立虛擬地址到物理內(nèi)存的映射,或者說把物理內(nèi)存附接到所分配的虛地址上。由上述可知,傳統(tǒng)的虛存管理沒有考慮到數(shù)據(jù)與存貯器的關(guān)系。由于數(shù)據(jù)可能來自不同的地方,如內(nèi)存、磁盤、網(wǎng)絡(luò)等等,因此,傳統(tǒng)虛存管理必須依據(jù)每種數(shù)據(jù)的來源,對其添加相應(yīng)的讀寫等操作數(shù)據(jù)的代碼,而且,傳統(tǒng)的虛存管理只能從磁盤文件中讀寫數(shù)據(jù),從而導(dǎo)致了虛存管理非常不靈活,并且不便于擴(kuò)充,缺乏通用性。
發(fā)明內(nèi)容本發(fā)明的目的在于針對上述傳統(tǒng)的虛存管理所存在的管理不靈活、不便于擴(kuò)充、缺乏通用性的缺陷,而提供一種基于數(shù)據(jù)源的虛存處理方法,通過對數(shù)據(jù)源進(jìn)行接口封裝形成數(shù)據(jù)源對象,可以通過數(shù)據(jù)源對象自身完成數(shù)據(jù)的加載和物理內(nèi)存到虛擬內(nèi)存的映射,克服了傳統(tǒng)的虛存管理所存在的管理不靈活、不便于擴(kuò)充、缺乏通用性的缺陷。為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供了一種基于數(shù)據(jù)源的虛存處理方法,包括如下步驟步驟1、對數(shù)據(jù)源進(jìn)行接口封裝,生成具有統(tǒng)一接口方法的數(shù)據(jù)源對象,該數(shù)據(jù)源對象對應(yīng)一頁面緩存,所述頁面緩存為一組物理內(nèi)存頁面,用于緩存所述數(shù)據(jù)源的數(shù)據(jù);所述接口方法用于獲取物理內(nèi)存頁面和將數(shù)據(jù)源中的數(shù)據(jù)讀取到指定的物理內(nèi)存頁面中;步驟2、為所述數(shù)據(jù)源對象對應(yīng)的數(shù)據(jù)源在虛擬內(nèi)存中分配虛擬內(nèi)存空間,并把所述虛擬內(nèi)存空間與所述數(shù)據(jù)源對象進(jìn)行對應(yīng);步驟3、在進(jìn)程讀取所述虛擬內(nèi)存空間的虛擬內(nèi)存頁面時發(fā)生缺頁時,調(diào)用所述數(shù)據(jù)源對象的接口方法,讀取所述數(shù)據(jù)源與該虛擬內(nèi)存頁面相對應(yīng)的部分到頁面緩存的物理內(nèi)存頁面中,并返回所述物理內(nèi)存頁面;步驟4、將所述物理內(nèi)存頁面映射到所述虛擬內(nèi)存頁面;步驟5、結(jié)束。在所述步驟3與步驟4之間還可以設(shè)有判斷所述數(shù)據(jù)源對應(yīng)的映射方式是否為共享映射,如果是,則執(zhí)行步驟4,如果不是,則復(fù)制一份所述物理內(nèi)存頁面的副本,將該副本映射到所述虛擬內(nèi)存的頁面,然后執(zhí)行步驟5。由上述技術(shù)方案可知,本發(fā)明通過對數(shù)據(jù)源進(jìn)行接口封裝形成數(shù)據(jù)源對象,通過數(shù)據(jù)源對象自身完成數(shù)據(jù)的加載和物理內(nèi)存到虛擬內(nèi)存的映射,而且由于數(shù)據(jù)源對象所封裝的數(shù)據(jù)源沒有特定的要求,可以實(shí)現(xiàn)從磁盤以外的地方向內(nèi)存中加載數(shù)據(jù),從而克服了傳統(tǒng)的虛存管理所存在的管理不靈活、不便于擴(kuò)充、缺乏通用性的缺陷。下面通過附圖和實(shí)施例,對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。圖1為本發(fā)明的共享映射的虛存管理結(jié)構(gòu)示意圖;圖2為本發(fā)明的私有映射的虛存管理結(jié)構(gòu)示意圖。具體實(shí)施例方式本發(fā)明的基本原理是對于來自任何地方的數(shù)據(jù)首先進(jìn)行接口封裝,從而形成數(shù)據(jù)源對象,當(dāng)任何進(jìn)程在加載或調(diào)用數(shù)據(jù)源對象的數(shù)據(jù)時,虛存管理程序可以不用關(guān)心如何操作數(shù)據(jù)的讀寫等問題,而通過數(shù)據(jù)源對象提供的接口方法將數(shù)據(jù)裝載到頁面緩存中,該頁面緩存實(shí)際上是一組物理內(nèi)存頁面,然后將頁面緩存中的物理內(nèi)存頁面與虛擬內(nèi)存頁面進(jìn)行映射。本發(fā)明中將來自任何地方的數(shù)據(jù)統(tǒng)稱為數(shù)據(jù)源,數(shù)據(jù)源可以是來自磁盤和/或網(wǎng)絡(luò)或外部輸入設(shè)備的文件或程序或數(shù)據(jù)流或一段共享內(nèi)存中的數(shù)據(jù)。參見圖1,其為本發(fā)明的共享映射情況下的虛存管理結(jié)構(gòu)示意圖,虛存管理的過程如下首先,讀取數(shù)據(jù)源1中的報頭信息,得知數(shù)據(jù)源1所具有的段的數(shù)量;然后,為每個段(Section)創(chuàng)建一個Section對象,該Section對象是對每個段中的數(shù)據(jù)進(jìn)行接口封裝后產(chǎn)生的,而Section對象即為數(shù)據(jù)源對象2。數(shù)據(jù)源1可以是來自磁盤或網(wǎng)絡(luò)或其他外部輸入設(shè)備的文件或程序或數(shù)碼流或任意數(shù)據(jù)來源。數(shù)據(jù)源1中的段包括了代碼段或數(shù)據(jù)段等,由此而形成的數(shù)據(jù)源2就代表了代碼段或數(shù)據(jù)段。數(shù)據(jù)源對象2對應(yīng)頁面緩存3(PageContainer),對數(shù)據(jù)源對象2中封裝的數(shù)據(jù)源1起到緩存的作用。頁面緩存3其實(shí)為一組物理頁面,最終由AS(AddressSpace地址空間)把頁面緩存3與進(jìn)程的虛擬地址建立映射關(guān)系。當(dāng)被映射到多個進(jìn)程的地址空間中時,就實(shí)現(xiàn)了數(shù)據(jù)源1的共享。每個數(shù)據(jù)源對象2可實(shí)現(xiàn)兩個接口封裝。一個用于獲取指定偏移的物理頁,另一個用于更新數(shù)據(jù)源。第一個接口方法為GetPage是通過給定的偏移獲取物理頁。如果還沒緩存該頁,則從數(shù)據(jù)源中讀取并緩存到物理內(nèi)存4中。第二個接口方法為Flush用于更新數(shù)據(jù)源。由于用物理內(nèi)存4緩存數(shù)據(jù)源對象封裝的數(shù)據(jù)源1,因此,當(dāng)用戶對緩存進(jìn)行修改后,需要將數(shù)據(jù)源1的內(nèi)容也做同樣的修改時,可以調(diào)用該接口方法。對于某些數(shù)據(jù),如進(jìn)程需要讀寫的數(shù)據(jù),這些數(shù)據(jù)對于進(jìn)程來說應(yīng)該是私有的,所以對于此類數(shù)據(jù)采取私有映射的方式,參見圖2,其為本發(fā)明的私有映射情況下的虛存管理結(jié)構(gòu)示意圖,與上述共享映射不同之處在于,將數(shù)據(jù)加載到頁面緩存后,將該頁面緩存進(jìn)行復(fù)制,生成該頁面緩存的副本,將該副本與進(jìn)程的虛擬地址建立映射關(guān)系,當(dāng)有多個進(jìn)程需要讀寫同一數(shù)據(jù)時,內(nèi)存中便存在多個頁面緩存的副本,每個副本對應(yīng)一個進(jìn)程。以下,通過一個模塊裝載器(Loader)裝載動態(tài)鏈接庫(DLL)文件到內(nèi)存中的具體實(shí)施例描述基于數(shù)據(jù)源的虛存管理的操作步驟。首先通過讀取DLL文件中的PE(PortableExecutable,即可移植的可執(zhí)行體,它是Win32環(huán)境自身所帶的執(zhí)行體文件格式。)頭信息,得知該DLL文件有多少個段(如代碼段、數(shù)據(jù)段等),然后為每個段創(chuàng)建一個Section對象,Section對象實(shí)現(xiàn)了數(shù)據(jù)源對象的接口。也就是說,Section對象就是數(shù)據(jù)源對象,分別代表了代碼段、數(shù)據(jù)段等。當(dāng)數(shù)據(jù)源對象創(chuàng)建好后,由虛存管理程序?yàn)樵揇LL文件分配一段虛存空間,并把相應(yīng)的虛擬內(nèi)存段與所述數(shù)據(jù)源對象對應(yīng)。當(dāng)程序跳到DLL的入口函數(shù)準(zhǔn)備執(zhí)行時,訪問虛擬內(nèi)存頁面,嘗試讀取代碼段的代碼,由于未把文件裝載到內(nèi)存而導(dǎo)致缺頁,缺頁是指要訪問的虛存頁面沒有對應(yīng)物理內(nèi)存頁面。虛存管理程序調(diào)用缺頁內(nèi)存段對應(yīng)的數(shù)據(jù)源對象的接口GetPage,GetPage根據(jù)傳入的偏移參數(shù)從磁盤讀取DLL文件的相應(yīng)部分到頁面緩存(實(shí)際上是物理內(nèi)存頁面)中,虛存管理程序把發(fā)生缺頁的虛擬內(nèi)存頁面映射到GetPage返回的頁面緩存上,這樣程序就可以讀取所需的代碼段,從而使程序正常執(zhí)行下去了。當(dāng)程序下次要讀取同樣的頁面時,通過GetPage就可以直接返回頁面緩存的頁面,而不需要從磁盤中讀取了。對于代碼段來說一般采用共享映射的方式,即調(diào)入內(nèi)存中的代碼不需要被程序更改,所以在內(nèi)存中包含同樣的代碼的頁面緩存,只需要存在一個就可以,其他進(jìn)程可以共享給頁面緩存,共享的方式為將頁面緩存與程序的虛擬內(nèi)存頁面映射到頁面緩存。如果程序需要讀寫數(shù)據(jù)段時,發(fā)生缺頁,同樣通過調(diào)用數(shù)據(jù)段Section對象的接口GetPage將數(shù)據(jù)段的數(shù)據(jù)讀取到頁面緩存中,但由于數(shù)據(jù)段采用的私有映射的方式,即每個進(jìn)程都要有自己的數(shù)據(jù)段副本,所以虛存管理程序會在GetPage方法得到頁面緩存后,復(fù)制一個頁面緩存的副本,將這個副本映射到發(fā)生缺頁的虛擬內(nèi)存頁面上?;跀?shù)據(jù)源的虛存管理通過把數(shù)據(jù)源封裝成統(tǒng)一接口的數(shù)據(jù)源對象,虛存管理可以不用關(guān)心如何操作數(shù)據(jù)的讀寫等,又可以把各種數(shù)據(jù)通過接口裝載到虛存并映射到物理內(nèi)存中。對于任意數(shù)據(jù)源,虛存管理都可通過數(shù)據(jù)源對象接口訪問,而無須修改任何關(guān)于虛存管理的代碼。最后所應(yīng)說明的是,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。權(quán)利要求1.一種基于數(shù)據(jù)源的虛擬內(nèi)存處理方法,其中,執(zhí)行以下步驟步驟1、對數(shù)據(jù)源進(jìn)行接口封裝,生成具有統(tǒng)一接口方法的數(shù)據(jù)源對象,該數(shù)據(jù)源對象對應(yīng)一頁面緩存,所述頁面緩存為一組物理內(nèi)存頁面,用于緩存所述數(shù)據(jù)源的數(shù)據(jù);所述接口方法用于獲取物理內(nèi)存頁面和將數(shù)據(jù)源中的數(shù)據(jù)讀取到指定的物理內(nèi)存頁面中;步驟2、為所述數(shù)據(jù)源對象中封裝的數(shù)據(jù)源在虛擬內(nèi)存中分配虛擬內(nèi)存空間,并把所述虛擬內(nèi)存空間與所述數(shù)據(jù)源對象進(jìn)行對應(yīng);步驟3、在進(jìn)程讀取所述虛擬內(nèi)存空間的虛擬內(nèi)存頁面時發(fā)生缺頁時,調(diào)用所述數(shù)據(jù)源對象的接口方法,讀取所述數(shù)據(jù)源與該虛擬內(nèi)存頁面相對應(yīng)的部分到頁面緩存的物理內(nèi)存頁面中,并返回所述物理內(nèi)存頁面;步驟4、將所述物理內(nèi)存頁面映射到所述虛擬內(nèi)存頁面;步驟5、結(jié)束。2.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)源的虛擬內(nèi)存處理方法,其特征在于在所述步驟3與步驟4之間還設(shè)有判斷所述數(shù)據(jù)源對應(yīng)的映射方式是否為共享映射,如果是,則執(zhí)行步驟4,如果不是,則復(fù)制一份所述物理內(nèi)存頁面的副本,將該副本映射到所述虛擬內(nèi)存的頁面,然后執(zhí)行步驟5。3.根據(jù)權(quán)利要求1或2所述的基于數(shù)據(jù)源的虛擬內(nèi)存處理方法,其特征在于所述數(shù)據(jù)源為來自磁盤和/或網(wǎng)絡(luò)或外部輸入設(shè)備的文件或程序或數(shù)據(jù)流或一段共享內(nèi)存中的數(shù)據(jù)。4.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)源的虛擬內(nèi)存處理方法,其特征在于對數(shù)據(jù)源進(jìn)行接口封裝的具體操作為讀取數(shù)據(jù)源的報頭信息,獲取數(shù)據(jù)源所包含的段的數(shù)量;為每個段創(chuàng)建一個數(shù)據(jù)源對象,該數(shù)據(jù)源對象是對每個段中的數(shù)據(jù)進(jìn)行接口封裝后產(chǎn)生的。全文摘要一種基于數(shù)據(jù)源的虛擬內(nèi)存處理方法,包括如下步驟1.對數(shù)據(jù)源進(jìn)行接口封裝,生成具有統(tǒng)一接口方法的數(shù)據(jù)源對象;2.為數(shù)據(jù)源對象封裝的數(shù)據(jù)源在虛擬內(nèi)存中分配虛擬內(nèi)存空間,并把虛擬內(nèi)存空間與數(shù)據(jù)源對象進(jìn)行對應(yīng);3.在進(jìn)程讀取所述虛擬內(nèi)存空間的虛擬內(nèi)存頁面時發(fā)生缺頁時,調(diào)用數(shù)據(jù)源的接口方法,讀取數(shù)據(jù)源與該虛擬內(nèi)存頁面相對應(yīng)的部分到頁面緩存的物理內(nèi)存頁面中,并返回物理內(nèi)存頁面;4.將物理內(nèi)存頁面映射到所述虛擬內(nèi)存頁面。本發(fā)明通過數(shù)據(jù)源對象自身完成數(shù)據(jù)的加載和物理內(nèi)存到虛擬內(nèi)存的映射,可以實(shí)現(xiàn)從磁盤以外的地方向內(nèi)存中加載數(shù)據(jù),克服了傳統(tǒng)的虛存管理所存在的管理不靈活、不便于擴(kuò)充、缺乏通用性的缺陷。文檔編號G06F12/08GK1908917SQ20061003037公開日2007年2月7日申請日期2006年8月24日優(yōu)先權(quán)日2006年8月24日發(fā)明者蘇翼鵬,梁宇洲,王晨輝,陳榕申請人:上海科泰世紀(jì)科技有限公司