專利名稱:一種基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法。
背景技術(shù):
現(xiàn)在很多應(yīng)用程序采用虛擬文件系統(tǒng)機(jī)制,來達(dá)到數(shù)據(jù)加密和減少磁盤空間占用
坐寸ο很多網(wǎng)絡(luò)游戲中采用了虛擬文件系統(tǒng),如網(wǎng)絡(luò)游戲“尋仙”、“魔獸世界”等,在程序發(fā)布時,將所有資源文件分目錄合并到幾個壓縮數(shù)據(jù)包文件里,程序啟動后,使用虛擬文件系統(tǒng)提供的通用接ロ來訪問壓縮數(shù)據(jù)包里的數(shù)據(jù),虛擬文件系統(tǒng)根據(jù)程序傳入的文件路 徑,找到該文件在壓縮數(shù)據(jù)包里對應(yīng)的數(shù)據(jù)塊,完成數(shù)據(jù)的讀取操作。上述讀取數(shù)據(jù)的方法,采用直接從磁盤上讀取數(shù)據(jù),由于磁盤操作較慢,該種讀取數(shù)據(jù)方式效率較低,尤其是文件碎片比較多的時候,會產(chǎn)生較大的性能瓶頸,會使程序運(yùn)行的流暢度受到很大影響。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法,能夠提高讀取數(shù)據(jù)的效率。為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法,所述方法包括獲取壓縮數(shù)據(jù)包文件和可執(zhí)行文件,其中,所述可執(zhí)行文件包括用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件和客戶端程序的可執(zhí)行文件;運(yùn)行所述用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件創(chuàng)建虛擬文件系統(tǒng),通過文件映射的方式將所述壓縮數(shù)據(jù)包文件映射到共享內(nèi)存中,并記錄文件映射信息;所述虛擬文件系統(tǒng)創(chuàng)建完成后,運(yùn)行所述客戶端程序的可執(zhí)行文件,根據(jù)所述記錄的文件映射信息,在所述共享內(nèi)存中讀取數(shù)據(jù)。綜上所述,本發(fā)明以壓縮數(shù)據(jù)包文件為基礎(chǔ),在創(chuàng)建虛擬文件系統(tǒng)時將壓縮數(shù)據(jù)包文件映射到進(jìn)程的共享內(nèi)存中,在需要讀取壓縮數(shù)據(jù)包文件時,直接在共享內(nèi)存中讀取數(shù)據(jù),能夠提高讀取數(shù)據(jù)的效率。
圖I為本發(fā)明具體實(shí)施例中基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法的流程示意圖;圖2為本發(fā)明具體實(shí)施例中基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對本發(fā)明所述方案作進(jìn)ー步地詳細(xì)說明。
本發(fā)明實(shí)施例中提出ー種數(shù)據(jù)讀取方法,從文件映射的共享內(nèi)存中讀取數(shù)據(jù),能夠提高讀取數(shù)據(jù)的效率。參見圖1,圖I為本發(fā)明具體實(shí)施例中基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法的流程示意圖。具體步驟為步驟101,獲取壓縮數(shù)據(jù)包文件和可執(zhí)行文件,其中,所述可執(zhí)行文件包括用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件和客戶端程序的可執(zhí)行文件。本步驟獲取的文件的途徑可以為光盤、磁盤、網(wǎng)絡(luò)等。其中,虛擬文件系統(tǒng)將不同 來源的數(shù)據(jù),集合成ー個整體,通過提供類似文件操作的訪問接ロ讀寫這些數(shù)據(jù)。步驟102,運(yùn)行所述用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件創(chuàng)建虛擬文件系統(tǒng),通過文件映射的方式將所述壓縮數(shù)據(jù)包文件映射到共享內(nèi)存中,并記錄文件映射信息。用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件包括載入進(jìn)程可執(zhí)行文件、管理進(jìn)程可執(zhí)行文件和數(shù)據(jù)進(jìn)程可執(zhí)行文件。本步驟中運(yùn)行用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件創(chuàng)建虛擬文件系統(tǒng),通過文件映射的方式將所述壓縮數(shù)據(jù)包文件映射到共享內(nèi)存中,并記錄文件映射信息包括運(yùn)行所述載入進(jìn)程可執(zhí)行文件進(jìn)入載入進(jìn)程,通過所述載入進(jìn)程啟動所述管理進(jìn)程可執(zhí)行文件進(jìn)入管理進(jìn)程,通過所述管理進(jìn)程啟動數(shù)據(jù)進(jìn)程可執(zhí)行文件進(jìn)入數(shù)據(jù)進(jìn)程,通過所述數(shù)據(jù)進(jìn)程根據(jù)所述壓縮數(shù)據(jù)包文件的大小和共享內(nèi)存的大小將所述壓縮數(shù)據(jù)包文件映射到數(shù)據(jù)進(jìn)程的共享內(nèi)存中,通過所述管理進(jìn)程記錄所述數(shù)據(jù)進(jìn)程的文件映射信息。其中,共享內(nèi)存為多個進(jìn)程可以共同讀寫的內(nèi)存區(qū)域;文件映射為ー種共享內(nèi)存技術(shù),將磁盤文件映射到連續(xù)的內(nèi)存區(qū)域,可以直接訪問內(nèi)存來讀寫。當(dāng)通過管理進(jìn)程啟動數(shù)據(jù)進(jìn)程可執(zhí)行文件吋,該方法進(jìn)ー步包括若確定獲取的所述壓縮數(shù)據(jù)包文件的大小大于啟動ー個進(jìn)程的共享內(nèi)存的大小,則啟動多個數(shù)據(jù)進(jìn)程將所述壓縮數(shù)據(jù)包文件映射到不同的數(shù)據(jù)進(jìn)程中,即啟動不小于能夠映射所有壓縮數(shù)據(jù)包文件的數(shù)據(jù)進(jìn)程。本步驟中記錄的文件映射信息包括數(shù)據(jù)進(jìn)程標(biāo)識、壓縮數(shù)據(jù)包文件標(biāo)識、首地址和長度;其中,所述壓縮數(shù)據(jù)包標(biāo)識為到所述數(shù)據(jù)進(jìn)程標(biāo)識所對應(yīng)的數(shù)據(jù)進(jìn)程中的壓縮數(shù)據(jù)包文件的標(biāo)識,所述首地址為所述壓縮數(shù)據(jù)包文件標(biāo)識所對應(yīng)的壓縮數(shù)據(jù)包文件在共享內(nèi)存中第一個字節(jié)的地址,所述長度為所述壓縮數(shù)據(jù)包文件標(biāo)識所對應(yīng)的壓縮數(shù)據(jù)包文件在所述共享內(nèi)存中所占的長度。步驟103,虛擬文件系統(tǒng)創(chuàng)建完成后,運(yùn)行所述客戶端程序的可執(zhí)行文件,根據(jù)所述記錄的文件映射信息,在所述共享內(nèi)存中讀取數(shù)據(jù)。本步驟中根據(jù)所述記錄的文件映射信息,在所述共享內(nèi)存中讀取數(shù)據(jù)包括在運(yùn)行所述客戶端程序的可執(zhí)行文件時,根據(jù)需要讀取的壓縮數(shù)據(jù)包文件標(biāo)識在所述管理進(jìn)程記錄的映射信息中查找對應(yīng)的數(shù)據(jù)進(jìn)程標(biāo)識、首地址和長度,在查找到的數(shù)據(jù)進(jìn)程標(biāo)識所對應(yīng)的數(shù)據(jù)進(jìn)程的共享內(nèi)存中根據(jù)查找到的首地址和長度讀取對應(yīng)的數(shù)據(jù)。在具體應(yīng)用中,存在很多需要從磁盤上讀取數(shù)據(jù)的情況,為了提高讀取數(shù)據(jù)的效率,可以通過如上方式實(shí)現(xiàn)。下面結(jié)合附圖,以在某個客戶端運(yùn)行某個游戲時讀取游戲所需數(shù)據(jù)的過程,來詳細(xì)說明本發(fā)明具體實(shí)施例中如何實(shí)現(xiàn)數(shù)據(jù)讀取的??蛻舳双@取用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件,包括載入進(jìn)程可執(zhí)行文件、管理進(jìn)程可執(zhí)行文件和數(shù)據(jù)進(jìn)程可執(zhí)行文件,并獲取壓縮數(shù)據(jù)包文件。參見圖2,圖2為本發(fā)明具體實(shí)施例中基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取結(jié)構(gòu)示意圖??蛻舳诉\(yùn)行載入進(jìn)程可執(zhí)行文件,進(jìn)入載入進(jìn)程,載入進(jìn)程啟動管理進(jìn)程可執(zhí)行文件進(jìn)入管理進(jìn)程,管理進(jìn)程根據(jù)壓縮數(shù)據(jù)包文件的大小確定啟動幾個數(shù)據(jù)進(jìn)程。如圖2所示,設(shè)該次獲取4個壓縮數(shù)據(jù)包文件,根據(jù)4個壓縮包數(shù)據(jù)文件的大小確定需兩個數(shù)據(jù)進(jìn)程的共享內(nèi)存進(jìn)行映射,則管理進(jìn)程啟動兩個數(shù)據(jù)進(jìn)程,如圖2中的數(shù)據(jù)進(jìn)程I和數(shù)據(jù)進(jìn)程2??蛻舳送ㄟ^啟動的數(shù)據(jù)進(jìn)程I將壓縮數(shù)據(jù)包文件I和壓縮數(shù)據(jù)包2映射到數(shù)據(jù)進(jìn)程I的共享內(nèi)存中,數(shù)據(jù)進(jìn)程2將壓縮數(shù)據(jù)包文件3和壓縮數(shù)據(jù)包4映射到數(shù)據(jù)進(jìn)程I的共享內(nèi)存中,客戶端通過管理進(jìn)程記錄文件映射信息,對于數(shù)據(jù)進(jìn)程I記錄的文件映射信息包括數(shù)據(jù)進(jìn)程標(biāo)識1,壓縮數(shù)據(jù)包文件標(biāo)識1,首地址A,長度B ;壓縮數(shù)據(jù)包文件標(biāo)識2,首地址C,長度D。對于數(shù)據(jù)進(jìn)程2記錄的文件映射信息同數(shù)據(jù)進(jìn)程I這里不再詳細(xì)贅述。到此,完成虛擬文件系統(tǒng)的創(chuàng)建??蛻舳双@取用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件時,還獲取客戶端程序可執(zhí)行文件,在完成虛擬文件系統(tǒng)的創(chuàng)建后,運(yùn)行客戶端程序可執(zhí)行文件,當(dāng)需要訪問游戲所需的虛 擬文件數(shù)據(jù)所對應(yīng)的壓縮數(shù)據(jù)包文件標(biāo)識時,通過管理進(jìn)程記錄的文件映射信息查找到對應(yīng)的數(shù)據(jù)進(jìn)程標(biāo)識、首地址和長度,如此時需要讀取的虛擬數(shù)據(jù)文件所對應(yīng)的壓縮數(shù)據(jù)包標(biāo)識為2,則在記錄的文件映射信息中查找到壓縮數(shù)據(jù)包標(biāo)識為2所對應(yīng)的數(shù)據(jù)進(jìn)程標(biāo)識為1,首地址為A,長度為B,則在數(shù)據(jù)進(jìn)程I的共享內(nèi)存中地址為A,長度為B的數(shù)據(jù)。通過上述讀取數(shù)據(jù)的方式,客戶端程序能夠更加流暢地運(yùn)行,在游戲場景中,卡頓現(xiàn)象將會明顯減少,場景切換的速度也將加快。上述舉例為運(yùn)行ー個客戶端程序,當(dāng)運(yùn)行多客戶端程序時,由于使用共享內(nèi)存,僅ー份緩沖數(shù)據(jù),在保障多個客戶端程序運(yùn)行流暢的情況下,也能減少資源的占用。通過在共享內(nèi)存中讀取數(shù)據(jù),通常比直接訪問磁盤讀取數(shù)據(jù),可以提升數(shù)據(jù)讀取率的50倍以上。綜上所述,本發(fā)明具體實(shí)施例中以壓縮數(shù)據(jù)包文件為基礎(chǔ),在創(chuàng)建虛擬文件系統(tǒng)時將壓縮數(shù)據(jù)包文件映射到數(shù)據(jù)進(jìn)程的共享內(nèi)存中,在需要讀取壓縮數(shù)據(jù)包文件時,直接在共享內(nèi)存中讀取數(shù)據(jù),能夠提高讀取數(shù)據(jù)的效率。使用數(shù)據(jù)進(jìn)程和共享內(nèi)存緩存文件數(shù)據(jù),并提供跨進(jìn)程訪問接ロ實(shí)現(xiàn)虛擬文件系統(tǒng)。以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法,其特征在于,所述方法包括 獲取壓縮數(shù)據(jù)包文件和可執(zhí)行文件,其中,所述可執(zhí)行文件包括用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件和客戶端程序的可執(zhí)行文件; 運(yùn)行所述用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件創(chuàng)建虛擬文件系統(tǒng),通過文件映射的方式將所述壓縮數(shù)據(jù)包文件映射到共享內(nèi)存中,并記錄文件映射信息; 所述虛擬文件系統(tǒng)創(chuàng)建完成后,運(yùn)行所述客戶端程序的可執(zhí)行文件,根據(jù)所述記錄的文件映射信息,在所述共享內(nèi)存中讀取數(shù)據(jù)。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件包括載入進(jìn)程可執(zhí)行文件、管理進(jìn)程可執(zhí)行文件和數(shù)據(jù)進(jìn)程可執(zhí)行文件; 所述運(yùn)行用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件創(chuàng)建虛擬文件系統(tǒng),通過文件映射的方式將所述壓縮數(shù)據(jù)包文件映射到共享內(nèi)存中,并記錄文件映射信息包括 運(yùn)行所述載入進(jìn)程可執(zhí)行文件進(jìn)入載入進(jìn)程,通過所述載入進(jìn)程啟動所述管理進(jìn)程可執(zhí)行文件進(jìn)入管理進(jìn)程,通過所述管理進(jìn)程啟動數(shù)據(jù)進(jìn)程可執(zhí)行文件進(jìn)入數(shù)據(jù)進(jìn)程,通過所述數(shù)據(jù)進(jìn)程根據(jù)所述壓縮數(shù)據(jù)包文件的大小和共享內(nèi)存的大小將所述壓縮數(shù)據(jù)包文件映射到數(shù)據(jù)進(jìn)程的共享內(nèi)存中,通過所述管理進(jìn)程記錄所述數(shù)據(jù)進(jìn)程的文件映射信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述通過管理進(jìn)程啟動數(shù)據(jù)進(jìn)程可執(zhí)行文件時,所述方法進(jìn)ー步包括若確定獲取的所述壓縮數(shù)據(jù)包文件的大小大于啟動ー個進(jìn)程的共享內(nèi)存的大小,則啟動多個數(shù)據(jù)進(jìn)程將所述壓縮數(shù)據(jù)包文件映射到不同的數(shù)據(jù)進(jìn)程中。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述記錄的文件映射信息包括數(shù)據(jù)進(jìn)程標(biāo)識標(biāo)識、壓縮數(shù)據(jù)包文件標(biāo)識、首地址和長度;其中,所述壓縮數(shù)據(jù)包標(biāo)識為到所述數(shù)據(jù)進(jìn)程標(biāo)識所對應(yīng)的數(shù)據(jù)進(jìn)程中的壓縮數(shù)據(jù)包文件的標(biāo)識,所述首地址為所述壓縮數(shù)據(jù)包文件標(biāo)識所對應(yīng)的壓縮數(shù)據(jù)包文件在共享內(nèi)存中第一個字節(jié)的地址,所述長度為所述壓縮數(shù)據(jù)包文件標(biāo)識所對應(yīng)的壓縮數(shù)據(jù)包文件在所述共享內(nèi)存中所占的長度; 所述根據(jù)所述記錄的文件映射信息,在所述共享內(nèi)存中讀取數(shù)據(jù)包括在運(yùn)行所述客戶端程序的可執(zhí)行文件時,根據(jù)需要讀取的壓縮數(shù)據(jù)包文件標(biāo)識在所述管理進(jìn)程記錄的映射信息中查找對應(yīng)的數(shù)據(jù)進(jìn)程標(biāo)識、首地址和長度,在查找到的數(shù)據(jù)進(jìn)程標(biāo)識所對應(yīng)的數(shù)據(jù)進(jìn)程的共享內(nèi)存中根據(jù)查找到的首地址和長度讀取對應(yīng)的數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種基于虛擬文件系統(tǒng)的數(shù)據(jù)讀取方法,該方法包括獲取壓縮數(shù)據(jù)包文件和可執(zhí)行文件,其中,所述可執(zhí)行文件包括用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件和客戶端程序的可執(zhí)行文件;運(yùn)行所述用于創(chuàng)建虛擬文件系統(tǒng)的可執(zhí)行文件創(chuàng)建虛擬文件系統(tǒng),通過文件映射的方式將所述壓縮數(shù)據(jù)包文件映射到共享內(nèi)存中,并記錄文件映射信息;虛擬文件系統(tǒng)創(chuàng)建完成后,運(yùn)行所述客戶端程序的可執(zhí)行文件,根據(jù)所述記錄的文件映射信息,在所述共享內(nèi)存中讀取數(shù)據(jù)。該方法能夠提高數(shù)據(jù)讀取的效率。
文檔編號G06F17/30GK102682129SQ20121015365
公開日2012年9月19日 申請日期2012年5月17日 優(yōu)先權(quán)日2012年5月17日
發(fā)明者蔣黎 申請人:北京像素軟件科技股份有限公司