一種Windows系統(tǒng)中虛擬內(nèi)存壓縮方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種Windows系統(tǒng)中虛擬內(nèi)存壓縮方法和裝置,該方法包括:攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,將數(shù)據(jù)進行壓縮,存儲在虛擬內(nèi)存中;攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀數(shù)據(jù)的行為,將存儲在虛擬內(nèi)存中的數(shù)據(jù)進行解壓縮,返回給系統(tǒng)進程。根據(jù)本發(fā)明的Windows系統(tǒng)中虛擬內(nèi)存壓縮方法和裝置,可以在當前進程都在工作的情況下,所占用的虛擬內(nèi)存過大時,避免對磁盤的頻繁讀寫造成的時間浪費,進而避免了系統(tǒng)運行緩慢的問題。
【專利說明】—種Windows系統(tǒng)中虛擬內(nèi)存壓縮方法和裝置
【技術(shù)領域】
[0001]本發(fā)明涉及計算機系統(tǒng)優(yōu)化【技術(shù)領域】,具體涉及一種Windows系統(tǒng)中虛擬內(nèi)存壓縮方法和裝置。
【背景技術(shù)】
[0002]計算機開機時,需要從磁盤上讀取文件來啟動計算機系統(tǒng)。很多場景下,文件不是保存在磁盤連續(xù)的簇中,而是被分散保存到整個磁盤的不同位置,即在磁盤上產(chǎn)生了文件碎片。例如,當存儲文件的磁盤空間不充足時,在磁盤上刪除文件或添加文件時會產(chǎn)生大量的文件碎片,對文件的刪改越頻繁,文件碎片的現(xiàn)象越嚴重。由于在讀取磁盤上不同位置的文件時,磁盤觸頭需要移動至不同的位置,文件碎片會使磁盤觸頭來回頻繁移動,導致文件讀取時間過長,因此,現(xiàn)有方案通過將一個文件的文件碎片填寫至磁盤中連續(xù)的空間中,來縮短開機過程中讀取該文件的時間,以加快計算機系統(tǒng)的開機速度。
[0003]而在計算機開機的過程中,計算機中所運行的程序均需經(jīng)由內(nèi)存執(zhí)行,若執(zhí)行的程序占用內(nèi)存很大或很多,則會導致內(nèi)存消耗殆盡。為解決該問題,Windows系統(tǒng)中運用了虛擬內(nèi)存技術(shù),即勻出一部分磁盤空間來充當內(nèi)存使用。當內(nèi)存耗盡時,計算機就會自動調(diào)用磁盤來充當內(nèi)存,以應對系統(tǒng)對虛擬內(nèi)存的占用量大于實際物理內(nèi)存的情況。虛擬內(nèi)存技術(shù)使得應用程序認為它擁有連續(xù)的可用的內(nèi)存(一個連續(xù)完整的地址空間)。
[0004]Windows系統(tǒng)中的虛擬內(nèi)存技術(shù)的實現(xiàn)機制具體為:在系統(tǒng)盤下配置一個虛擬內(nèi)存文件pagefile.sys,即為虛擬內(nèi)存保留的磁盤空間;當進程占用的虛擬內(nèi)存過大時,將當前進程暫時不需要的數(shù)據(jù)從虛擬內(nèi)存中換入至虛擬內(nèi)存文件中;當進程讀取已換入虛擬內(nèi)存文件中的數(shù)據(jù)時,再將該數(shù)據(jù)從虛擬內(nèi)存文件中換入虛擬內(nèi)存中。這種機制擴展了虛擬內(nèi)存的空間,使虛擬內(nèi)存不但可以利用實際的物理內(nèi)存存儲數(shù)據(jù),還可以利用磁盤中的一部分空間擴展虛擬內(nèi)存以存儲數(shù)據(jù)。然而頻繁的向磁盤讀寫數(shù)據(jù)會耗費大量時間,從而造成了計算機系統(tǒng)運行緩慢的問題。
[0005]現(xiàn)有技術(shù)采用系統(tǒng)優(yōu)化加速技術(shù)解決進程占用大量內(nèi)存時,計算機系統(tǒng)運行緩慢的問題。例如計算機提供的一些優(yōu)化加速的功能,當用戶選用優(yōu)化功能時,將當前無用的進程關(guān)閉并釋放被關(guān)閉進程所占用的虛擬內(nèi)存。但是,現(xiàn)有技術(shù)無法解決在不關(guān)閉進程的情況下,所占用的虛擬內(nèi)存過大所導致的系統(tǒng)運行緩慢的問題。
【發(fā)明內(nèi)容】
[0006]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的Windows系統(tǒng)中虛擬內(nèi)存壓縮方法和裝置。
[0007]根據(jù)本發(fā)明的一個方面,提供了一種Windows系統(tǒng)中虛擬內(nèi)存壓縮方法,包括:攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,將數(shù)據(jù)進行壓縮,存儲在虛擬內(nèi)存中;攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀數(shù)據(jù)的行為,將存儲在虛擬內(nèi)存中的數(shù)據(jù)進行解壓縮,返回給系統(tǒng)進程。[0008]根據(jù)本發(fā)明的另一方面,提供了一種Windows系統(tǒng)中虛擬內(nèi)存壓縮裝置,包括:1/O攔截模塊,適于攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,以及攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀數(shù)據(jù)的行為;內(nèi)存壓縮模塊,適于在I/O攔截模塊攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為之后,將數(shù)據(jù)進行壓縮,存儲在虛擬內(nèi)存中;內(nèi)存解壓縮模塊,適于在I/o攔截模塊攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀數(shù)據(jù)的行為之后,將存儲在虛擬內(nèi)存中的數(shù)據(jù)進行解壓縮,返回給系統(tǒng)進程。
[0009]根據(jù)本發(fā)明的Windows系統(tǒng)中虛擬內(nèi)存壓縮方法和裝置,攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,并對該數(shù)據(jù)壓縮后重新存回虛擬內(nèi)存而不是磁盤中;之后,攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀取該數(shù)據(jù)的行為,對壓縮存儲至虛擬內(nèi)存的數(shù)據(jù)解壓后發(fā)送給進程,可以在當前進程都在工作的情況下,所占用的虛擬內(nèi)存過大時,避免對磁盤的頻繁讀寫造成的時間浪費,進而解決了系統(tǒng)運行緩慢的問題。
[0010]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【專利附圖】
【附圖說明】
[0011]通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0012]圖1示出了根據(jù)本發(fā)明一個實施例的Windows系統(tǒng)中虛擬內(nèi)存壓縮方法的流程圖;
[0013]圖2示出了根據(jù)本發(fā)明另一個實施例的Windows系統(tǒng)中虛擬內(nèi)存壓縮方法的流程圖;
[0014]圖3示出了本發(fā)明一個實施例提供的Windows系統(tǒng)中虛擬內(nèi)存壓縮裝置與虛擬內(nèi)存、虛擬內(nèi)存文件連接的結(jié)構(gòu)框圖。
【具體實施方式】
[0015]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領域的技術(shù)人員。
[0016]計算機開機過程是從計算機通電自檢完成之后開始進行的,這一過程可以細分為預引導、引導、載入內(nèi)核、初始化內(nèi)核和系統(tǒng)登錄操作這五個階段,將計算機開機過程中執(zhí)行預引導、引導、載入內(nèi)核、初始化內(nèi)核至系統(tǒng)登錄操作時從系統(tǒng)磁盤上讀取的文件作為系統(tǒng)開機文件,記錄讀取該系統(tǒng)開機文件的順序作為獲取到的讀取順序。在開機過程中需要讀取的文件主要包括 Ntldr、Boot, in1、Ntdetect.com、Ntoskrnl.exe、Ntbootdd.sys 以及Bootsect.dos等文件,各個階段的主要處理過程如下:[0017]預引導階段
[0018]計算機啟動后,BIOS自檢通過后,開始尋找引導設備,正常情況下需要的引導的設備就是計算機硬盤。BIOS讀取硬盤的第一個扇區(qū)的引導代碼,即主引導記錄(Master BootRecord, MBR)到內(nèi)存,然后將控制權(quán)轉(zhuǎn)移到MBR代碼。MBR代碼功能是尋找磁盤的引導分區(qū)(boot partition),其第一個扇區(qū)為引導扇區(qū)(boot sector),該卷稱為系統(tǒng)卷(systemvolume)。
[0019]引導階段
[0020]引導扇區(qū)的代碼能夠解析系統(tǒng)卷的文件格式,并找到Ntldr,該程序會將處理器由實模式(Real Mode)切換為32位平坦內(nèi)存模式(32-bit Flat Memory Mode)。Ntldr程序在完成了初始化工作之后會從硬盤上讀取boot, ini文件,根據(jù)該文件中的內(nèi)容選擇操作系統(tǒng)。在選擇了需要載入的Windows操作系統(tǒng)之后,Ntdetect.com將計算機中安裝的所有硬件信息收集起來,并將該信息交給Ntldr。
[0021]載入內(nèi)核階段
[0022]載入系統(tǒng)的內(nèi)核文件Ntoskrnl.exe,但這里僅僅是載入,內(nèi)核此時還不會被初始化。隨后載入硬件抽象層HAL.dll。加載SYSTEM注冊表儲巢文件(%SyStemR00t%\SyStem32\Config\System)為注冊表鍵值(HKEY_LOCAL_MACHINE\SYSTEM),根據(jù)注冊表中引導設備驅(qū)動列表添加相應的文件系統(tǒng)驅(qū)動,以實現(xiàn)對各個分區(qū)、目錄、文件的訪問管理。
[0023]初始化內(nèi)核階段
[0024]內(nèi)核初始化進程會加載(HKEY_LOCAL_MACHINE\SYSTEM\
[0025]CurrentControlSet\services)中記錄的驅(qū)動,如磁盤管理過濾驅(qū)動、網(wǎng)絡驅(qū)動等。先加載注冊為“ Start ”鍵值O (SERVICE_B00T_START)的驅(qū)動然后加載鍵值為 I(SERVICE_SYSTEM_START)的驅(qū)動。首先掃描(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGro upOrder)中定義的組別加載順序,按照組別依次加載已注冊的驅(qū)動,已注冊驅(qū)動的組別會記錄在注冊表鍵值“Group”中。對相同組別的驅(qū)動,會根據(jù)注冊表鍵值“ Tag”來決定加載順序。GroupOrderLi st (HKEY_L0CAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrder List)中每個組的第一項都是Tag值的數(shù)值。接下來是要加載的Tag值的數(shù)字順序。組中的設備驅(qū)動程序首先按照其由GroupOrderList所定義的Tag值進行加載。如果設備驅(qū)動程序沒有Tag值,或者Tag值不在GroupOrderList中,則這些設備驅(qū)動程序?qū)⒃诩虞d具有有效Tag值的設備驅(qū)動程序之后進行加載。
[0026]系統(tǒng)登錄階段
[0027]在本階段會話管理器啟動本地安全性授權(quán)子系統(tǒng)。執(zhí)行到這一步后,計算機顯示屏上會顯示W(wǎng)indows系統(tǒng)的登錄界面,與此同時,后臺會加載一些非關(guān)鍵的設備驅(qū)動。
[0028]通過上述五個階段的操作,計算機開機過程執(zhí)行完畢,從而獲知了系統(tǒng)開機時所有需要讀取的系統(tǒng)開機文件以及這些系統(tǒng)開機文件的讀取順序。
[0029]圖1示出了根據(jù)本發(fā)明一個實施例的Windows系統(tǒng)中虛擬內(nèi)存壓縮方法的流程圖,如圖1所示,該方法包括如下步驟:
[0030]步驟S110,攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,將數(shù)據(jù)進行壓縮,存儲在虛擬內(nèi)存中。[0031]本發(fā)明實施例中,進程是指具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位;線程是指進程的一個實體,是(PU調(diào)度和分派的基本單位;線程是比進程更小的能獨立運行的基本單位;線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源,但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。在系統(tǒng)進程里面會有一個常駐線程,當系統(tǒng)對虛擬內(nèi)存的占用量大于實際物理內(nèi)存的時候,會將不常用的數(shù)據(jù)寫入虛擬內(nèi)存文件中。
[0032]虛擬內(nèi)存文件即是指操作系統(tǒng)為虛擬內(nèi)存保留的磁盤空間,例如Windows系統(tǒng)中的pagefile.sys文件,pagefile.sys文件包含了 Windows操作系統(tǒng)中的系統(tǒng)設置和變量,用于運行操作系統(tǒng)的功能、常用的存儲設備驅(qū)動程序和其他核心的Windows功能。當系統(tǒng)占用的虛擬內(nèi)存空間大于實際物理內(nèi)存時,Windows系統(tǒng)會喚醒用于換頁的常駐線程,常駐線程會執(zhí)行使虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,即發(fā)送將當前進程的相關(guān)數(shù)據(jù)從虛擬內(nèi)存中寫入至虛擬內(nèi)存文件中的請求,通過pagefile.sys文件提供更大的虛擬內(nèi)存空間,從而滿足進程對更大內(nèi)存的需求;本步驟對該請求進行攔截,將請求寫入虛擬內(nèi)存文件中的數(shù)據(jù)進行壓縮,然后將該數(shù)據(jù)存儲回虛擬內(nèi)存中,而并非如現(xiàn)有技術(shù)那樣將數(shù)據(jù)寫入磁盤。
[0033]步驟S120,攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀數(shù)據(jù)的行為,將存儲在虛擬內(nèi)存中的數(shù)據(jù)進行解壓縮,返回給系統(tǒng)進程。
[0034]當進程需要讀取存儲在虛擬內(nèi)存中的已壓縮的數(shù)據(jù)時,由于進程并不知曉該數(shù)據(jù)沒有被寫入磁盤中,仍會讓常駐線程執(zhí)行通過虛擬內(nèi)存向虛擬內(nèi)存文件讀該數(shù)據(jù)的行為,即發(fā)送從虛擬內(nèi)存文件中讀取該進程需要使用的數(shù)據(jù)的請求;本步驟對該請求進行攔截,將該進程請求讀取的且已經(jīng)壓縮至虛擬內(nèi)存的數(shù)據(jù)進行解壓,并返回給進程。
[0035]根據(jù)本發(fā)明上述實施例提供的方法,攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,并對該數(shù)據(jù)壓縮后重新存回虛擬內(nèi)存而不是磁盤中;之后,攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀取該數(shù)據(jù)的行為,對壓縮存儲至虛擬內(nèi)存的數(shù)據(jù)解壓后發(fā)送給進程,可以在當前進程都在工作的情況下,所占用的虛擬內(nèi)存過大時,避免對磁盤的頻繁讀寫造成的時間浪費,進而解決了系統(tǒng)運行緩慢的問題。進一步解決了磁盤觸頭在磁道中頻繁切換來回往復移動造成的文件讀取時間過長的問題,能夠顯著提高計算機的開機速度,更加有效地實現(xiàn)計算機開機加速的目的。
[0036]本發(fā)明實施例中能夠應用于NTFS文件系統(tǒng)中,則系統(tǒng)開機文件為NTFS系統(tǒng)下計算機開機時需要讀取的文件。NTFS文件系統(tǒng)為Microsoft的Windows系列操作系統(tǒng)提供文件系統(tǒng)。NTFS對傳統(tǒng)的文件分配表(FAT,F(xiàn)ile Allocation Table)系統(tǒng)和高性能文件系統(tǒng)(HPFS, High-Performance File System)作了若干改進,例如,支持元數(shù)據(jù),并且使用了高級數(shù)據(jù)結(jié)構(gòu),以便于改善性能、可靠性和磁盤空間利用率,并提供了若干附加擴展功能,如訪問控制列表和文件系統(tǒng)日志。NTFS的特點包括支持2TB大小的分區(qū)、可恢復的文件系統(tǒng)、支持文件夾壓縮以及有效管理磁盤空間等等。
[0037]圖2示出了根據(jù)本發(fā)明另一個實施例的Windows系統(tǒng)中虛擬內(nèi)存壓縮方法的流程圖,如圖2所示,該方法包括如下步驟:
[0038]步驟S210,利用Windows系統(tǒng)提供的文件過濾功能,攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為。[0039]當虛擬內(nèi)存向虛擬內(nèi)存文件(pagefile.sys)寫數(shù)據(jù)時,即向磁盤寫數(shù)據(jù)時,利用Windows系統(tǒng)提供的文件過濾功能,對向pagefile.sys文件寫數(shù)據(jù)的行為進行攔截。具體地,本發(fā)明通過開發(fā)文件過濾驅(qū)動實現(xiàn)該攔截功能。文件過濾驅(qū)動是一種Windows系統(tǒng)內(nèi)核模式的驅(qū)動,它依靠攔截發(fā)往已存在的內(nèi)核模式目標驅(qū)動的I/O請求來提供新的附加功能,而不會使底層驅(qū)動或用戶程序做任何改變。文件過濾驅(qū)動攔截向pagefile.sys文件寫數(shù)據(jù)的請求并獲取請求向pagefile.sys文件寫入的數(shù)據(jù)。文件過濾驅(qū)動不同于內(nèi)存換頁。內(nèi)存換頁屬于內(nèi)存管理,需要知道源程序才能進行。而文件過濾驅(qū)動提供是Windows系統(tǒng)的輔助功能,文件過濾驅(qū)動能夠在不知道源程序的情況下攔截虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為。
[0040]步驟S220,計算數(shù)據(jù)的壓縮比,該步驟為本實施例的可選步驟。
[0041]壓縮比指壓縮前與壓縮后的文件所占的磁盤空間比值。數(shù)據(jù)的壓縮比高,說明數(shù)據(jù)的冗余度高,即數(shù)據(jù)的重復率高,適合壓縮。本實施例對請求向pagefile.sys文件寫入的數(shù)據(jù)進行壓縮比計算,獲取計算結(jié)果。根據(jù)計算結(jié)果,優(yōu)先選擇壓縮比高的數(shù)據(jù)進行后續(xù)壓縮處理。一種可選的實施方式是,預先設定一閾值,選擇壓縮比高于或等于該設定閾值的數(shù)據(jù)進行后續(xù)壓縮處理;對于壓縮比低于該設定閾值的數(shù)據(jù),可以依據(jù)現(xiàn)有的方法將其寫Apagefile.sys文件中,數(shù)據(jù)的壓縮比低,說明數(shù)據(jù)的冗余度低,即數(shù)據(jù)的重復率低,不適合壓縮,將不適合壓縮的數(shù)據(jù)直接寫入虛擬內(nèi)存文件,避免了壓縮效率低下的問題。這里的設定閾值可以設置為96%,但不以此為限。
[0042]本發(fā)明實施例也不僅限于上述方式,也可以采用其他方式選擇數(shù)據(jù)進行后續(xù)的壓縮處理,其選擇依據(jù)除了根據(jù)壓縮比之外,也可以考慮其它因素。
[0043]步驟S230,利用LZO系列壓縮算法將壓縮比高于或等于設定閾值的數(shù)據(jù)進行壓縮,存儲在虛擬內(nèi)存中。
[0044]LZO (Lempel-Ziv-Oberhumer)系列壓縮算法是一種數(shù)據(jù)壓縮無損算法,通過軟件工具Izop實現(xiàn)。LZO系列壓縮算法能夠?qū)?shù)據(jù)塊壓縮成匹配數(shù)據(jù)(滑動字典)和非匹配文字的序列。而且LZO對于較長的匹配數(shù)據(jù)以及較長的非匹配文字序列有專門的處理,這樣對于高度冗余的數(shù)據(jù)能夠取得很好的效果,并且對于不可壓縮的數(shù)據(jù)也能得到可以接受的效果。LZO系列壓縮算法解壓簡單、壓縮/解壓速度非常快、僅需占用64k虛擬內(nèi)存。因此使用LZO系列壓縮算法對數(shù)據(jù)進行壓縮,對于Windows系統(tǒng)占用虛擬內(nèi)存的空間大于實際物理內(nèi)存的情況,能夠進一步減少虛擬內(nèi)存的占用,提升系統(tǒng)整體的運行速度。本發(fā)明實施例也不僅限于使用LZO系列壓縮算法,也可以使用其它數(shù)據(jù)壓縮無損算法。
[0045]步驟S240,利用Windows系統(tǒng)提供的文件過濾功能,攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀數(shù)據(jù)的行為。
[0046]當進程需要讀取已經(jīng)通過步驟S230進行壓縮并存回虛擬內(nèi)存的數(shù)據(jù)時,系統(tǒng)根據(jù)原有的虛擬內(nèi)存擴展機制,仍然認為該數(shù)據(jù)存儲于pagefile.sys文件中,系統(tǒng)會向pagefile.sys文件請求讀取該進程所需數(shù)據(jù)。此時,通過Windows系統(tǒng)提供的文件過濾功能對向pagefile.sys文件讀取數(shù)據(jù)的請求進行攔截。具體地如步驟S210所述的,是由文件過濾驅(qū)動在不知道源程序的情況下攔截常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀數(shù)據(jù)的行為。
[0047]步驟S250,將存儲在虛擬內(nèi)存中的數(shù)據(jù)進行解壓縮,返回給進程。[0048]在攔截向pagefile.sys文件請求讀取該進程所需數(shù)據(jù)的行為后,從虛擬內(nèi)存中讀取該數(shù)據(jù),對數(shù)據(jù)進行解壓縮處理,這里的解壓縮方法與步驟230所使用的壓縮方法是相對應的。解壓縮后將數(shù)據(jù)返回給請求的進程。
[0049]通過本實施例上述處理步驟,可以在不知道源代碼的情況下,對向虛擬內(nèi)存文件讀寫數(shù)據(jù)的行為進行攔截。此外,一方面提前對數(shù)據(jù)是否適合壓縮進行判斷,對不適合壓縮的數(shù)據(jù)直接存入虛擬內(nèi)存文件,另一方面采用對虛擬內(nèi)存要求小、壓縮效率高的LZO系列壓縮算法進行壓縮,能夠在不關(guān)閉進程的前提下,進一步節(jié)約虛擬內(nèi)存可用空間、提升系統(tǒng)運行速度。
[0050]進一步的,在上述實施例中,如果在步驟S230之后一直到進程關(guān)閉,進程都沒有發(fā)送讀取已壓縮存儲在虛擬內(nèi)存中的數(shù)據(jù)的請求,在這種情況下數(shù)據(jù)存儲在虛擬內(nèi)存中占用虛擬內(nèi)存的空間,使其它數(shù)據(jù)得不到及時處理。為了解決該問題,本發(fā)明實施例所采用的一種可選的方法是:利用鉤子函數(shù)鉤取Windows系統(tǒng)的內(nèi)存釋放函數(shù);在鉤取到內(nèi)存釋放函數(shù)之后,清理存儲在虛擬內(nèi)存中的數(shù)據(jù)。
[0051]內(nèi)存釋放函數(shù)具體指Windows系統(tǒng)在進程關(guān)閉時所調(diào)用的函數(shù),如MiReleasePageFileSpace函數(shù)。在Windows系統(tǒng)原有的虛擬內(nèi)存擴展機制下應用本發(fā)明的情況下,當進程關(guān)閉時,Windows系統(tǒng)會調(diào)用內(nèi)存釋放函數(shù)。本發(fā)明實施例通過鉤子函數(shù)(hook函數(shù))鉤取該內(nèi)存釋放函數(shù),作為系統(tǒng)關(guān)閉進程的通知消息,利用Windows系統(tǒng)自帶的功能檢測出占用虛擬內(nèi)存空間的進程是否工作。在鉤取到內(nèi)存釋放函數(shù)之后,清理存儲在虛擬內(nèi)存中的數(shù)據(jù),以完成數(shù)據(jù)清理。
[0052]可選地,本發(fā)明實施例提供的方法也可以定時清理存儲在虛擬內(nèi)存中的超過一定時間沒有被讀取的數(shù)據(jù),而不是等到進程關(guān)閉后再清理。
[0053]根據(jù)本發(fā)明上述實施例提供的方法,利用Windows系統(tǒng)本身的功能完成對虛擬內(nèi)存文件讀寫數(shù)據(jù)行為的攔截、以及對虛擬內(nèi)存中數(shù)據(jù)的釋放,對現(xiàn)有系統(tǒng)改動小,實現(xiàn)方便。利用文件過濾功能能夠在不知道源代碼的情況下完成對虛擬內(nèi)存文件讀寫數(shù)據(jù)行為的攔截。利用LZO系列壓縮算法進行壓縮能夠進一步提高壓縮效率,提高系統(tǒng)的運行速度。利用內(nèi)存釋放函數(shù)能夠?qū)崟r將沒用的虛擬內(nèi)存釋放,進一步提高系統(tǒng)運行速度。
[0054]圖3示出了本發(fā)明一個實施例提供的Windows系統(tǒng)中虛擬內(nèi)存壓縮裝置300與虛擬內(nèi)存370、虛擬內(nèi)存文件380連接的結(jié)構(gòu)框圖,如圖3所示,該裝置300包括:1/0攔截模塊310、內(nèi)存壓縮模塊320以及內(nèi)存解壓縮模塊330。
[0055]1/0攔截模塊310適于攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存370向虛擬內(nèi)存文件380寫數(shù)據(jù)的行為,以及攔截常駐線程通過虛擬內(nèi)存370向虛擬內(nèi)存文件380讀數(shù)據(jù)的行為。
[0056]具體地,1/0攔截模塊310利用Windows系統(tǒng)提供的文件過濾功能,攔截常駐線程通過虛擬內(nèi)存370向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,并且利用Windows系統(tǒng)提供的文件過濾功能,攔截常駐線程通過虛擬內(nèi)存370向虛擬內(nèi)存文件讀數(shù)據(jù)的行為。以pagefile.sys文件為例,當1/0攔截模塊310攔截到向pagefile.sys文件寫數(shù)據(jù)的請求時,1/0攔截模塊310向內(nèi)存壓縮模塊320發(fā)送將數(shù)據(jù)壓縮的請求。當1/0攔截模塊310攔截到向pagefile.sys文件讀數(shù)據(jù)的請求時,1/0攔截模塊310向內(nèi)存解壓縮模塊330發(fā)送將數(shù)據(jù)解壓的請求。[0057]具體地,I/O攔截模塊310可以為開發(fā)的文件過濾驅(qū)動。文件過濾驅(qū)動是一種Windows系統(tǒng)內(nèi)核模式的驅(qū)動,它依靠攔截發(fā)往已存在的內(nèi)核模式目標驅(qū)動的I/O請求來提供新的附加功能,而不會使底層驅(qū)動或用戶程序做任何改變。文件過濾驅(qū)動攔截向pagefile.sys文件讀寫數(shù)據(jù)的請求。文件過濾驅(qū)動不同于內(nèi)存換頁。內(nèi)存換頁屬于內(nèi)存管理,需要知道源程序才能進行。而文件過濾驅(qū)動提供是Windows系統(tǒng)的輔助功能,文件過濾驅(qū)動能夠在不知道源程序的情況下攔截向pagefile.sys文件讀寫數(shù)據(jù)的請求。
[0058]內(nèi)存壓縮模塊320適于在I/O攔截模塊310攔截常駐線程通過虛擬內(nèi)存370向虛擬內(nèi)存文件380寫數(shù)據(jù)的行為之后,將數(shù)據(jù)進行壓縮,存儲在虛擬內(nèi)存370中。
[0059]具體地,內(nèi)存壓縮模塊320利用LZO系列壓縮算法將數(shù)據(jù)進行壓縮。內(nèi)存壓縮模塊320根據(jù)I/O攔截模塊310發(fā)送的將數(shù)據(jù)壓縮的請求,將數(shù)據(jù)進行壓縮,存儲在虛擬內(nèi)存370 中。
[0060]內(nèi)存解壓縮模塊330適于在I/O攔截模塊310攔截常駐線程通過虛擬內(nèi)存370向虛擬內(nèi)存文件380讀數(shù)據(jù)的行為之后,將存儲在虛擬內(nèi)存370中的數(shù)據(jù)進行解壓縮,返回給進程。
[0061]具體地,內(nèi)存解壓縮模塊330根據(jù)I/O攔截模塊310發(fā)送的將數(shù)據(jù)解壓的請求,將存儲在虛擬內(nèi)存中的數(shù)據(jù)進行解壓縮,返回給進程。
[0062]可選地,本發(fā)明的裝置還包括計算模塊350和寫入模塊360。
[0063]計算模塊350適于計算數(shù)據(jù)的壓縮比。壓縮比指壓縮前與壓縮后的文件所占的磁盤空間比值。數(shù)據(jù)的壓縮比高,說明數(shù)據(jù)的冗余度高,即數(shù)據(jù)的重復率高,適合壓縮。計算模塊350對請求向pagefile.sys文件寫入的數(shù)據(jù)進行壓縮比計算,獲取計算結(jié)果。內(nèi)存壓縮模塊320根據(jù)計算結(jié)果,優(yōu)先選擇壓縮比高的數(shù)據(jù)進行后續(xù)壓縮處理。一種可選的實施方式是,預先設定一閾值,內(nèi)存壓縮模塊320適于將壓縮比高于或等于設定閾值的數(shù)據(jù)進行壓縮。寫入模塊360適于將壓縮比低于設定閾值的數(shù)據(jù)寫入虛擬內(nèi)存文件380中;數(shù)據(jù)的壓縮比低,說明數(shù)據(jù)的冗余度低,即數(shù)據(jù)的重復率低,不適合壓縮,將不適合壓縮的數(shù)據(jù)直接寫入虛擬內(nèi)存文件,避免了壓縮效率低下的問題。
[0064]可選地,本發(fā)明的裝置還包括內(nèi)存管理模塊340,適于利用鉤子函數(shù)鉤取Windows系統(tǒng)的內(nèi)存釋放函數(shù);在鉤取到內(nèi)存釋放函數(shù)之后,清理存儲在虛擬內(nèi)存370中的數(shù)據(jù)。內(nèi)存釋放函數(shù)具體指Windows系統(tǒng)在進程關(guān)閉時所調(diào)用的函數(shù),如MiReleasePageFileSpace函數(shù)。在Windows系統(tǒng)原有的虛擬內(nèi)存擴展機制下應用本發(fā)明的情況下,當進程關(guān)閉時,Windows系統(tǒng)會調(diào)用內(nèi)存釋放函數(shù)。內(nèi)存管理模塊340通過鉤子函數(shù)(hook函數(shù))鉤取該內(nèi)存釋放函數(shù),作為系統(tǒng)關(guān)閉進程的通知消息,利用Windows系統(tǒng)自帶的功能檢測出占用虛擬內(nèi)存空間的進程是否工作。內(nèi)存管理模塊340在鉤取到內(nèi)存釋放函數(shù)之后,清理存儲在虛擬內(nèi)存中的數(shù)據(jù),以完成數(shù)據(jù)清理。
[0065]可選地,內(nèi)存管理模塊340也可以定時清理存儲在虛擬內(nèi)存中的超過一定時間沒有被讀取的數(shù)據(jù),而不是等到進程關(guān)閉后再清理。
[0066]根據(jù)本發(fā)明實施例提供的裝置,可以在當前進程都在工作的情況下,所占用的虛擬內(nèi)存過大時,避免對磁盤的頻繁讀寫造成的時間浪費,進而解決了系統(tǒng)運行緩慢的問題。此外,利用Windows系統(tǒng)本身的功能完成對虛擬內(nèi)存文件讀寫數(shù)據(jù)行為的攔截、以及對虛擬內(nèi)存中數(shù)據(jù)的釋放,對現(xiàn)有系統(tǒng)改動小,實現(xiàn)方便。利用文件過濾功能能夠在不知道源代碼的情況下完成對虛擬內(nèi)存文件讀寫數(shù)據(jù)行為的攔截。利用LZO系列壓縮算法進行壓縮能夠進一步提高壓縮效率,提高系統(tǒng)的運行速度。利用內(nèi)存釋放函數(shù)能夠?qū)崟r將沒用的虛擬內(nèi)存釋放,進一步提高系統(tǒng)運行速度。提前對數(shù)據(jù)是否適合壓縮進行判斷,對不適合壓縮的數(shù)據(jù)直接存入虛擬內(nèi)存文件,也能夠進一步提高系統(tǒng)運行速度。
[0067]在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
[0068]在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
[0069]類似地,應當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循【具體實施方式】的權(quán)利要求書由此明確地并入該【具體實施方式】,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
[0070]本領域那些技術(shù)人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
[0071]此外,本領域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
[0072]本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領域的技術(shù)人員應當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的Windows系統(tǒng)中虛擬內(nèi)存壓縮裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。[0073]應該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設計出替換實施例。在權(quán)利要求中,不應將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
【權(quán)利要求】
1.一種Windows系統(tǒng)中虛擬內(nèi)存壓縮方法,包括: 攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,將所述數(shù)據(jù)進行壓縮,存儲在所述虛擬內(nèi)存中; 攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀所述數(shù)據(jù)的行為,將存儲在所述虛擬內(nèi)存中的所述數(shù)據(jù)進行解壓縮,返回給所述系統(tǒng)進程。
2.根據(jù)權(quán)利要求1所述的方法,其中: 所述攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為具體為:利用Windows系統(tǒng)提供的文件過濾功能,攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為; 所述攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀所述數(shù)據(jù)的行為具體為:利用Windows系統(tǒng)提供的文件過濾功能,攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀所述數(shù)據(jù)的行為。
3.根據(jù)權(quán)利要求1或2所述的方法,還包括: 利用鉤子函數(shù)鉤取Windows系統(tǒng)的內(nèi)存釋放函數(shù); 在鉤取到所述內(nèi)存釋放函數(shù)之后,清理存儲在所述虛擬內(nèi)存中的所述數(shù)據(jù)。
4.根據(jù)權(quán)利 要求1-3任一項所述的方法,在所述將數(shù)據(jù)進行壓縮之前還包括:計算所述數(shù)據(jù)的壓縮比; 所述將數(shù)據(jù)進行壓縮具體為:將壓縮比高于或等于設定閾值的數(shù)據(jù)進行壓縮; 所述方法還包括:將壓縮比低于所述設定閾值的數(shù)據(jù)寫入所述虛擬內(nèi)存文件中。
5.根據(jù)權(quán)利要求1-4任一項所述的方法,所述將數(shù)據(jù)進行壓縮具體為:利用LZO系列壓縮算法將數(shù)據(jù)進行壓縮。
6.一種Windows系統(tǒng)中虛擬內(nèi)存壓縮裝置,包括: I/O攔截模塊,適于攔截系統(tǒng)進程中的常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,以及攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀所述數(shù)據(jù)的行為; 內(nèi)存壓縮模塊,適于在所述I/o攔截模塊攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為之后,將所述數(shù)據(jù)進行壓縮,存儲在所述虛擬內(nèi)存中; 內(nèi)存解壓縮模塊,適于在所述I/o攔截模塊攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀所述數(shù)據(jù)的行為之后,將存儲在所述虛擬內(nèi)存中的所述數(shù)據(jù)進行解壓縮,返回給所述系統(tǒng)進程。
7.根據(jù)權(quán)利要求6所述的裝置,所述I/O攔截模塊具體適于:利用Windows系統(tǒng)提供的文件過濾功能,攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件寫數(shù)據(jù)的行為,以及攔截所述常駐線程通過虛擬內(nèi)存向虛擬內(nèi)存文件讀所述數(shù)據(jù)的行為。
8.根據(jù)權(quán)利要求6或7所述的裝置,還包括:內(nèi)存管理模塊,適于利用鉤子函數(shù)鉤取Windows系統(tǒng)的內(nèi)存釋放函數(shù);在鉤取到所述內(nèi)存釋放函數(shù)之后,清理存儲在所述虛擬內(nèi)存中的所述數(shù)據(jù)。
9.根據(jù)權(quán)利要求6-8任一項所述的裝置,還包括: 計算模塊,適于計算所述數(shù)據(jù)的壓縮比; 寫入模塊,適于將壓縮比低于所述設定閾值的數(shù)據(jù)寫入所述虛擬內(nèi)存文件中; 所述內(nèi)存壓縮模塊進一步適于將壓縮比高于或等于設定閾值的數(shù)據(jù)進行壓縮。
10.根據(jù)權(quán)利要求6-9任一項所述的裝置,所述內(nèi)存壓縮模塊具體適于:利用LZO系列壓縮算法將數(shù)據(jù)進行壓縮。
【文檔編號】G06F12/08GK103617133SQ201310656949
【公開日】2014年3月5日 申請日期:2013年12月6日 優(yōu)先權(quán)日:2013年12月6日
【發(fā)明者】李常坤 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司