專利名稱:頁面文件預(yù)留的制作方法
頁面文件預(yù)留
背景技術(shù):
現(xiàn)代計(jì)算機(jī)系統(tǒng)需要大量隨機(jī)存取存儲(chǔ)器(RAM)來運(yùn)行軟件程序。諸如操作系統(tǒng)和各種應(yīng)用程序的軟件不斷地與存儲(chǔ)在RAM中的數(shù)據(jù)進(jìn)行交互。每個(gè)應(yīng)用/進(jìn)程被分配RAM頁面以供其使用。隨著計(jì)算機(jī)變得更加精密和復(fù)雜,進(jìn)程需要比RAM中物理上可用的更多的存儲(chǔ)器訪問。存儲(chǔ)器的虛擬地址通過允許進(jìn)程共享物理RAM存儲(chǔ)器克服了該問題。通過將數(shù)據(jù)寫入到諸如磁盤驅(qū)動(dòng)器的非易失性存儲(chǔ)器而不是將所有進(jìn)程數(shù)據(jù)維護(hù)在RAM中在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)了虛擬存儲(chǔ)器。計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器管理器確保當(dāng)需要的時(shí)候,與虛地地址關(guān)聯(lián)的數(shù)據(jù)在物理RAM中。當(dāng)數(shù)據(jù)沒有被進(jìn)程活躍地使用時(shí),可以將該數(shù)據(jù)寫入到存儲(chǔ)在非易失性存儲(chǔ)器中的 頁面文件中,以為其他活動(dòng)的進(jìn)程空出RAM空間。如果進(jìn)程需要非活動(dòng)的數(shù)據(jù),必須將數(shù)據(jù)從非易失性存儲(chǔ)器復(fù)制到RAM,以使其對(duì)于進(jìn)程是可訪問的。如果計(jì)算機(jī)系統(tǒng)上的所有進(jìn)程所需的存儲(chǔ)器的數(shù)量與可用的物理RAM相比過大,由于RAM和非易失性存儲(chǔ)器之間過多的數(shù)據(jù)來回交換使系統(tǒng)變慢,系統(tǒng)性能可能變差。
發(fā)明內(nèi)容
發(fā)明人已經(jīng)認(rèn)識(shí)并明了,當(dāng)頁面文件中的數(shù)據(jù)被碎片化時(shí),具有虛擬存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)的性能被變慢。如果數(shù)據(jù)碎片化,則當(dāng)在物理RAM中需要時(shí)從硬盤驅(qū)動(dòng)器讀取數(shù)據(jù)可能是時(shí)間上極其低效的。在此描述了用于改進(jìn)系統(tǒng)性能的技術(shù)。通過減少計(jì)算機(jī)系統(tǒng)的頁面文件的碎片,可以減少在虛擬存儲(chǔ)器的非活動(dòng)頁面變得活動(dòng)時(shí)加載該非活動(dòng)頁面所需的時(shí)間??梢酝ㄟ^為彼此相近的虛擬存儲(chǔ)器頁面預(yù)留頁面文件部分來避免碎片化的頁面文件。虛擬存儲(chǔ)器往往以許多頁塊被分配給進(jìn)程。因此,彼此相近的頁面可能屬于相同的進(jìn)程并且彼此相關(guān)。因而,它們可能在同一時(shí)間被相關(guān)的進(jìn)程所需要,以致它們一起從頁面文件被讀取。確保頁面文件中相鄰的頁面相關(guān)增加了從硬盤上的連續(xù)位置讀取數(shù)據(jù)的數(shù)量,并因此減少了硬盤驅(qū)動(dòng)器必須執(zhí)行的尋道數(shù)量。這使得在從頁面文件讀取數(shù)據(jù)時(shí)顯著降低了延遲。在一些實(shí)施例中,為在待寫入頁面附近的頁面預(yù)留在將寫入一個(gè)頁面的附近的頁面文件的區(qū)域。如果那些附近的頁面將要寫到頁面文件,則它們將被寫到頁面文件中為它們預(yù)留的位置。如果不存在針對(duì)正在被寫到頁面文件的頁面的預(yù)留,則該頁面將被寫到既未分配也未預(yù)留的頁面文件的部分。在一些實(shí)施例中,預(yù)留系統(tǒng)并非“嚴(yán)格的”,意思是為特定頁面預(yù)留的頁面文件的部分不要求沒有其他頁面寫到頁面文件的該部分。這是因?yàn)榉且资源鎯?chǔ)器中的頁面文件的尺寸有限并且受限??梢源嬖谝韵虑樾危渲?,計(jì)算機(jī)需要如此多的存儲(chǔ)器以至于保存未使用的頁面文件的部分的預(yù)留系統(tǒng)將開始將其他頁面寫入到頁面文件的預(yù)留部分。在一些實(shí)施例中,有關(guān)是否預(yù)留了虛擬存儲(chǔ)器空間的特定頁面的信息存儲(chǔ)在頁表?xiàng)l目的部分中。通過將該小數(shù)量的信息添加到頁表?xiàng)l目,實(shí)現(xiàn)預(yù)留技術(shù)所需的開銷是可以忽略的。在一些實(shí)施例中,有關(guān)頁面文件的特定部分是否已被不同頁面所占用的信息存儲(chǔ)在分配位圖中。一些實(shí)施例還利用了預(yù)留位圖,其指示頁面文件的哪些部分已被預(yù)留。在這些實(shí)施例中,使用諸如位圖的簡單數(shù)據(jù)結(jié)構(gòu)減少了實(shí)現(xiàn)存儲(chǔ)器管理技術(shù)的開銷。前述是對(duì)本發(fā)明的非限制性總結(jié),本發(fā)明由所附權(quán)利要求所限定。
附圖不旨在按比例繪制。在附圖中,在各圖中示出的每個(gè)相同的或幾乎相同的組件通過相同的標(biāo)記來表示。為了清楚起見,每個(gè)圖中并非每個(gè)組件都被標(biāo)記。在圖中
圖I是本發(fā)明的實(shí)施例可以運(yùn)行在其中的示例性環(huán)境的框 圖2是示出本發(fā)明一些實(shí)施例的計(jì)算系統(tǒng)的若干軟件和硬件組件的框圖;
圖3A是頁表、頁面文件及其關(guān)系的簡化示 圖3B是示例分配位 圖3C是例預(yù)留位 圖4是將頁面寫入頁面文件的示例過程的流程 圖5是與裁剪來自工作集的頁面相關(guān)的示例過程的流程圖。
具體實(shí)施例方式發(fā)明人已經(jīng)認(rèn)識(shí)到并明了,減少頁面文件的碎片通過降低從頁面文件讀取數(shù)據(jù)時(shí)的延遲能夠顯著地提高計(jì)算機(jī)性能以及用戶滿意度。在此呈現(xiàn)的系統(tǒng)和方法首先是防止碎片發(fā)生,而不是嘗試整理已經(jīng)碎片化的存儲(chǔ)器的碎片。因?yàn)橥ǔ?shù)據(jù)寫入頁面文件的順序僅由RAM中睡眠時(shí)間最長的數(shù)據(jù)來確定,所以頁面文件可能變得碎片化。碎片化的數(shù)據(jù)意指屬于相同進(jìn)程和/或在虛擬存儲(chǔ)器空間中彼此接近的數(shù)據(jù)片在頁面文件中是彼此不相近的。從碎片化的頁面文件讀取數(shù)據(jù)是很慢的,因?yàn)橹T如硬盤驅(qū)動(dòng)器的大多數(shù)非易失性存儲(chǔ)器是連續(xù)訪問存儲(chǔ)器,而在缺少諸如維護(hù)反向映射信息的技術(shù)情況下從存儲(chǔ)器讀取非連續(xù)數(shù)據(jù)可能是很慢的,其中該維護(hù)反向映射信息的技術(shù)由于其他原因代價(jià)很高。例如,由于硬盤的“尋道時(shí)間”,旋轉(zhuǎn)硬盤導(dǎo)致顯著的延遲。尋道時(shí)間與存儲(chǔ)器的讀取頭與待讀取的數(shù)據(jù)存儲(chǔ)在磁盤中的部分相對(duì)齊所花費(fèi)的時(shí)間有關(guān)。每次讀取數(shù)據(jù)的小碎片,與從磁盤上的連續(xù)位置執(zhí)行相同數(shù)據(jù)量的單個(gè)讀取相比是浪費(fèi)時(shí)間的。作為示出問題的示例任意讀取操作的尋道延遲近似10ms。如果從碎片化的頁面文件讀取1-2MB的數(shù)據(jù),則總共2-5秒的延遲是常見的。這些延遲使運(yùn)行在計(jì)算機(jī)系統(tǒng)上的應(yīng)用變慢,并往往計(jì)算機(jī)系統(tǒng)的響應(yīng)性整體變差。這些問題很容易被計(jì)算機(jī)系統(tǒng)的用戶注意到,并使用戶體驗(yàn)變糟。在一些實(shí)施例中,計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器管理器實(shí)現(xiàn)了預(yù)留頁面文件部分的預(yù)留技術(shù)。通過在需要將信息寫入頁面文件之前在頁面文件中預(yù)留空間,彼此相關(guān)的頁面文件可以被寫在一起。將相關(guān)的頁面寫在一起減少了取回存儲(chǔ)在頁面文件中的頁面所花費(fèi)的時(shí)間量,因?yàn)轫撁婵梢赃B續(xù)地讀取。在一些實(shí)施例中,當(dāng)頁面被寫出到頁面文件,存儲(chǔ)器管理器將首先檢查正在被寫的頁面是否已有預(yù)留。如果預(yù)留存在,則頁面將被寫到頁面文件的預(yù)留部分。在一些實(shí)施例中,如果頁面沒有預(yù)留,該預(yù)留阻止頁面寫到頁面文件的預(yù)留部分。然而,在計(jì)算機(jī)系統(tǒng)需要大量存儲(chǔ)器來運(yùn)行的情況下,頁面文件的預(yù)留部分也可由沒有預(yù)留的頁面所使用。例如,如果在頁面文件中的空間都已被其他頁面占用或預(yù)留,則存儲(chǔ)器管理器可以使特定的預(yù)留“無效”,并將頁面寫到為不同的頁面集合預(yù)留的存儲(chǔ)器部分。任何合適的技術(shù)可以用于跟蹤頁面文件中可用的存儲(chǔ)器的狀態(tài)。例如,各種類型的數(shù)據(jù)結(jié)構(gòu)可以用來指示是否為虛擬存儲(chǔ)器的特定頁面預(yù)留了頁面文件中的頁面。相同或不同類型的數(shù)據(jù)結(jié)構(gòu)可以用來指示頁面文件的頁面目前是否被分配,并從而存儲(chǔ)數(shù)據(jù)。在一些實(shí)施例中,數(shù)據(jù)結(jié)構(gòu)可以是位圖。存儲(chǔ)器管理器可以使用該信息來確定將正在被寫到頁面文件的新頁面寫到何處。如上所述,在一些實(shí)施例中,當(dāng)頁面文件的所有部分都被分配或預(yù)留時(shí),存儲(chǔ)器管理器可以決定使預(yù)留無效,并將沒有預(yù)留的頁面寫在預(yù)留部分上。執(zhí)行這些操作的存儲(chǔ)器管理器通常是計(jì)算機(jī)系統(tǒng)的操作系統(tǒng)的一部分。計(jì)算機(jī)系統(tǒng)優(yōu)選地至少具有易失性存儲(chǔ)器和非易失性存儲(chǔ)器,但是本發(fā)明不限于此,并且其他實(shí)施 例也是可以的。下面論述可以實(shí)現(xiàn)在此描述的存儲(chǔ)器管理技術(shù)的計(jì)算機(jī)系統(tǒng)的示例實(shí)施例。圖I示出在其上可以實(shí)現(xiàn)本發(fā)明的合適的計(jì)算系統(tǒng)環(huán)境100的示例。計(jì)算系統(tǒng)環(huán)境100僅是合適的計(jì)算環(huán)境的示例,并非旨在表明對(duì)本發(fā)明的使用或功能的范圍的任何限制。計(jì)算環(huán)境100應(yīng)被解釋為既不依賴也不需要示例運(yùn)行環(huán)境100中示出的任意一個(gè)組件或組合。本發(fā)明可用眾多其他通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置來運(yùn)行。適于與本發(fā)明一起使用的眾所周知的計(jì)算系統(tǒng)、環(huán)境和/或配置的示例包括但不限于個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持或膝上設(shè)備、蜂窩電話、平板計(jì)算機(jī)、上網(wǎng)本、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、迷你計(jì)算機(jī)、主機(jī)計(jì)算機(jī)、包括任意以上系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等。計(jì)算環(huán)境可以執(zhí)行諸如程序模塊的計(jì)算機(jī)可執(zhí)行指令。通常,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例行程序、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等。本發(fā)明還可以在分布式計(jì)算環(huán)境中實(shí)現(xiàn),其中任務(wù)通過經(jīng)由通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備來執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)器存儲(chǔ)設(shè)備的本地計(jì)算機(jī)存儲(chǔ)介質(zhì)和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)兩者中。參照圖1,用于實(shí)現(xiàn)頁面文件的預(yù)留系統(tǒng)的示例系統(tǒng)包括計(jì)算機(jī)110形式的通用計(jì)算設(shè)備。計(jì)算機(jī)Iio的組件可以包括但不限于處理單元120、系統(tǒng)存儲(chǔ)器130、和系統(tǒng)總線121,該系統(tǒng)總線耦合包括系統(tǒng)存儲(chǔ)器的各種系統(tǒng)組件到處理單元120。系統(tǒng)總線121可以是包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線、和使用各種總線架構(gòu)中任一種的局部總線的若干類型的總線結(jié)構(gòu)的任意一個(gè)。通過示例而非限制性的方式,這樣的架構(gòu)包括工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)總線、微信道架構(gòu)(MCA)總線、增強(qiáng)ISA (EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線、和外圍組件互連(PCI)總線,也稱為夾層總線。計(jì)算機(jī)110可以包括多種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是可通過計(jì)算機(jī)110訪問的任意可用的介質(zhì),并包括易失性和非易失性存儲(chǔ)器、可移動(dòng)和不可移動(dòng)介質(zhì)。以示例而非限制性的方式,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以任意方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì),用于存儲(chǔ)例如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)的信息。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于RAM、ROM、EEPROM、閃存存儲(chǔ)器或其他存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能磁盤(DVD)或其他光盤存儲(chǔ)設(shè)備、磁盒、磁帶、磁盤存儲(chǔ)設(shè)備或其他磁性存儲(chǔ)設(shè)備、或可用于存儲(chǔ)所需的信息并能夠通過計(jì)算機(jī)110訪問的任意其他介質(zhì)。通信介質(zhì)通常以諸如載波的調(diào)制數(shù)據(jù)信號(hào)或其他傳輸機(jī)制包含計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),并且包括任意信息傳遞介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號(hào)”意指其 一個(gè)或多個(gè)特征被設(shè)置或變化以使得對(duì)信號(hào)中的信息進(jìn)行編碼的信號(hào)。以示例而非限制性的方式,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接布線連接的有線介質(zhì)、以及諸如聲學(xué)、RF、紅外和其他無線介質(zhì)的無線介質(zhì)。以上任意組合也都應(yīng)當(dāng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。系統(tǒng)存儲(chǔ)器130包括易失性和/或非易失性存儲(chǔ)器的計(jì)算機(jī)存儲(chǔ)器介質(zhì),例如只讀存儲(chǔ)器(ROM) 131和隨機(jī)存取存儲(chǔ)器(RAM) 132?;据斎?輸出系統(tǒng)(BIOS) 133通常存儲(chǔ)在ROM 131中,其包含基本的例程來例如在啟動(dòng)期間幫助在計(jì)算機(jī)110中的元件之間傳送信息。RAM 132通常包含通過處理單元120可立即訪問的和/或當(dāng)前正在其上操作的數(shù)據(jù)和/或程序模塊。以示例而非限制性的方式,圖I示出操作系統(tǒng)(0S)134、應(yīng)用程序135、其他程序模塊136、和程序數(shù)據(jù)137。計(jì)算機(jī)110還可以包括其他可移動(dòng)/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。僅以示例的方式,圖I示出從不可移動(dòng)、非易失性磁介質(zhì)讀取,或?qū)懙皆摬豢梢苿?dòng)、非易失性磁介質(zhì)的硬盤驅(qū)動(dòng)器141??捎糜谑纠赃\(yùn)行環(huán)境中的其他可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于磁盤、光盤、磁帶盒、閃存存儲(chǔ)卡、數(shù)字多功能磁盤、數(shù)字視頻帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動(dòng)器141通常通過諸如接口 140的不可移動(dòng)存儲(chǔ)器接口連接到系統(tǒng)總線121。以上論述并在圖I中示出的驅(qū)動(dòng)器及其關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī)110提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的存儲(chǔ)。在圖I中,例如,硬盤驅(qū)動(dòng)器141圖解為存儲(chǔ)操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146、和程序數(shù)據(jù)147。注意,這些組件與操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136、和程序數(shù)據(jù)137可以相同也可以不同。在此給予操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146、和程序數(shù)據(jù)147不同的數(shù)字以示出它們至少是不同的副本。圖I還示出存儲(chǔ)頁面文件148的硬盤驅(qū)動(dòng)器141,其將在下面更詳細(xì)地論述。用戶可以通過諸如鍵盤和通常稱為鼠標(biāo)、軌跡球或觸摸板的定位設(shè)備(未示出)的輸入設(shè)備將命令和信息輸入到計(jì)算機(jī)110中。其他輸入設(shè)備(未示出)可以包括麥克風(fēng)、操縱桿、游戲板、衛(wèi)星天線、掃描儀等。圖2示出計(jì)算機(jī)系統(tǒng)110的示例組件,其可以用在實(shí)現(xiàn)具有預(yù)留的頁面文件的計(jì)算機(jī)系統(tǒng)的一些實(shí)施例中。軟件和硬件組件都已示出,并且如果可能,圖I中示出的硬件組件通過相同的標(biāo)記表示。此外,為清楚起見,圖2將存儲(chǔ)在諸如RAM132的硬件資源上的軟件示出為與硬件分離的項(xiàng),即使圖I例如將OS 134示出為存儲(chǔ)在RAM 132上。本領(lǐng)域普通技術(shù)人員將會(huì)理解,軟件存儲(chǔ)在存儲(chǔ)器組件中,并且繪制圖2以清晰闡述一些實(shí)施例的細(xì)節(jié)。圖2示出包含OS 134、硬盤驅(qū)動(dòng)器141和RAM132的計(jì)算機(jī)系統(tǒng)110。如上所述,本發(fā)明不限于這些特定的組件,而是它們僅被選擇用來示出本發(fā)明的一個(gè)實(shí)施例。
如參照圖I所述,RAM 132是通常保存用于目前正在處理器120上執(zhí)行的進(jìn)程的數(shù)據(jù)的存儲(chǔ)器。存儲(chǔ)在存儲(chǔ)器部分中的活動(dòng)使用的數(shù)據(jù)定義了“工作集”260。通常將RAM132分成稱為“頁面”的存儲(chǔ)塊。頁面是具有特定字節(jié)數(shù)的存儲(chǔ)塊。典型的頁面為4KB,但頁面不限于此,并且可以是任意尺寸。包含在工作集260中的頁面可以稱為活動(dòng)頁面。硬盤驅(qū)動(dòng)器141存儲(chǔ)頁面文件148,其可以用于存儲(chǔ)數(shù)據(jù)頁面,并擴(kuò)展計(jì)算機(jī)系統(tǒng)110的存儲(chǔ)能力。本領(lǐng)域普通技術(shù)人員將會(huì)理解,硬盤驅(qū)動(dòng)器141不限于單個(gè)頁文件148。實(shí)際上期望的是,可以通過存儲(chǔ)器管理器210來使用多個(gè)頁面文件。為清楚起見,僅示出單個(gè)頁面文件148。此外,計(jì)算機(jī)系統(tǒng)110不限于單個(gè)硬盤驅(qū)動(dòng)器141。計(jì)算機(jī)系統(tǒng)110可以包括每個(gè)都有一個(gè)或多個(gè)頁面文件存儲(chǔ)在其上的多個(gè)硬盤驅(qū)動(dòng)器、或其他存儲(chǔ)器存儲(chǔ)設(shè)備。不是計(jì)算機(jī)系統(tǒng)110 —部分的外部存儲(chǔ)器設(shè)備也可以存儲(chǔ)頁面文件。OS 134包括存儲(chǔ)器管理器210。通常存在上百個(gè)OS 134的其他組件,但是為清楚起見未示出它們。存儲(chǔ)器管理器210通常處理OS 134和存儲(chǔ)器設(shè)備之間的交互。存儲(chǔ)器管理器210的操作包括將存儲(chǔ)器分配給運(yùn)行在處理器120上的進(jìn)程。存儲(chǔ)器管理器210通過 實(shí)現(xiàn)虛擬存儲(chǔ)器系統(tǒng)向使用RAM 132的進(jìn)程隱藏了 RAM 132和其中的物理頁面的細(xì)節(jié)。虛擬存儲(chǔ)器允許運(yùn)行在計(jì)算機(jī)系統(tǒng)110上的軟件引用虛擬化的存儲(chǔ)器地址而無需關(guān)注如何管理物理RAM 132的細(xì)節(jié)。存儲(chǔ)器管理器210從軟件應(yīng)用或其他軟件組件接收通過虛擬存儲(chǔ)器地址標(biāo)識(shí)的有關(guān)存儲(chǔ)器的請求,并將該請求轉(zhuǎn)化為實(shí)現(xiàn)控制物理硬件的動(dòng)作。例如,存儲(chǔ)器管理器210控制RAM 132的讀寫命令,并控制軟件進(jìn)程和RAM 132之間的數(shù)據(jù)流。存儲(chǔ)器管理器210還處理來自多個(gè)進(jìn)程的請求,并確定如何在運(yùn)行在計(jì)算機(jī)系統(tǒng)110上的所有進(jìn)程間分配存儲(chǔ)器資源。通過存儲(chǔ)器管理器210將虛擬存儲(chǔ)器分配給進(jìn)程。在一些實(shí)施例中,一次分配大的頁面塊。例如,可以以IMB塊來分配存儲(chǔ)器,其相當(dāng)于虛擬存儲(chǔ)器的256個(gè)頁面。因?yàn)樘摂M存儲(chǔ)器空間的相鄰頁面與相同的進(jìn)程關(guān)聯(lián),所以這些頁面包含相關(guān)的信息,并因此可以同時(shí)通過處理器120來訪問。即使在直接相鄰的頁面沒有保存相關(guān)的信息時(shí),也可以一起訪問彼此距離閾值數(shù)目頁面之內(nèi)的相鄰頁面,因而通過減少磁盤執(zhí)行的讀取操作的總數(shù)來節(jié)約時(shí)間。為了在虛擬存儲(chǔ)器和物理存儲(chǔ)器之間進(jìn)行轉(zhuǎn)化,存儲(chǔ)器管理器210可以維護(hù)虛擬存儲(chǔ)器地址和物理存儲(chǔ)器地址之間的映射。為了將虛擬存儲(chǔ)器空間中的頁面映射到RAM132中的頁面,存儲(chǔ)器管理器210維護(hù)頁表212。頁表212的一些實(shí)施例的細(xì)節(jié)將結(jié)合圖3A進(jìn)行論述。存儲(chǔ)器管理器210將比RAM 132中物理存在的頁面數(shù)目更多數(shù)目的虛擬存儲(chǔ)器頁面分配給進(jìn)程。為了保留沒有對(duì)應(yīng)物理RAM的虛擬存儲(chǔ)器的數(shù)據(jù),存儲(chǔ)器管理器210維護(hù)頁面文件148,其可以是存儲(chǔ)在任意合適類型存儲(chǔ)器上的任意有組織的信息集合。頁面文件148可以是由計(jì)算機(jī)系統(tǒng)的OS的文件管理系統(tǒng)來維護(hù)的文件,但不一定是這樣。以合適的方式組織的存儲(chǔ)器的任意合適部分可以用作頁面文件。任意合適的存儲(chǔ)介質(zhì)可以用于存儲(chǔ)頁面文件。用來存儲(chǔ)頁面文件的存儲(chǔ)器的類型可以不同于用來存儲(chǔ)活動(dòng)頁面的存儲(chǔ)器類型。在一些實(shí)施例中,頁面文件可以存儲(chǔ)在非易失性存儲(chǔ)器設(shè)備上。存儲(chǔ)器可以是連續(xù)訪問設(shè)備。在一些實(shí)施例中,存儲(chǔ)介質(zhì)可以是磁盤或固態(tài)驅(qū)動(dòng)器。在圖2示出的一個(gè)實(shí)施例中,存儲(chǔ)介質(zhì)為硬盤。
頁面文件148可以存儲(chǔ)像RAM 132中的數(shù)據(jù)的頁面。但是,因?yàn)橛脖P驅(qū)動(dòng)器141在訪問數(shù)據(jù)時(shí)可能慢得多,所以存儲(chǔ)在頁面文件148中的頁面通常保存處理器120當(dāng)前不需要的數(shù)據(jù)。因?yàn)榇鎯?chǔ)器管理器210使用頁面文件148,頁表212不只是將虛擬存儲(chǔ)器地址映射到物理RAM地址,而且還將虛擬存儲(chǔ)器地址映射到頁面文件的各部分。將結(jié)合圖3A論述頁面文件148的一些實(shí)施例的細(xì)節(jié)。存儲(chǔ)器管理器210可以維護(hù)數(shù)據(jù)結(jié)構(gòu)以跟蹤頁面文件的哪些部分當(dāng)前正在使用中并存儲(chǔ)數(shù)據(jù)。在一些實(shí)施例中,該數(shù)據(jù)結(jié)構(gòu)為分配位圖218。分配位圖218的每個(gè)比特對(duì)應(yīng)于頁面文件148中的頁面。在一些實(shí)施例中,“I”表示頁面文件的相應(yīng)頁面在使用中。“O”表示相應(yīng)的頁面沒有使用,并且可以通過存儲(chǔ)器管理器210分配給頁面。虛擬存儲(chǔ)器的頁面可以處于多種狀態(tài)。一種此類狀態(tài)為“活動(dòng)的”,如上論述的,其意指頁面存儲(chǔ)在RAM 132中,并且是工作集260的一部分。處理器120可以立即訪問活動(dòng)頁面而幾乎沒有延遲。另一狀態(tài)為“非活動(dòng)的”,其意指頁面可能存儲(chǔ)在頁面文件中而沒有存儲(chǔ)在RAM 132中。存在多種其他狀態(tài),包括介于活動(dòng)和非活動(dòng)之間的一些狀態(tài)。例如, 處于“備用”狀態(tài)的頁面既存儲(chǔ)在RAM 132中也存儲(chǔ)在頁面文件148中。在一些實(shí)施例中,當(dāng)工作集260中的頁面不使用時(shí),存儲(chǔ)器管理器210可以確定該頁面可以寫到頁面文件148。任意合適的策略可以用于確定哪些頁面將寫到頁面文件以及何時(shí)寫入,包括本領(lǐng)域已知的存儲(chǔ)器管理策略。作為這樣策略的示例,可以在狀態(tài)之間的任何轉(zhuǎn)變處將不使用的頁面寫到頁面文件。在一些實(shí)施例中,將頁面寫到頁面文件148的過程中的第一步驟可以為“裁剪”頁面。裁剪指代將頁面添加到修改列表214的行為。在一些實(shí)施例中,在裁剪時(shí)還可以使用頁面寫入器222將頁面寫到頁面文件148。一旦頁面被寫到頁面文件,頁面從修改列表214移動(dòng)到備用列表216。備用列表216跟蹤不但仍然在RAM132中而且在頁面文件148中存儲(chǔ)在硬盤141上的頁面。如果存儲(chǔ)器管理器210需要訪問備用列表216上的數(shù)據(jù),則可以立即從RAM 132讀取該數(shù)據(jù),因?yàn)樵摂?shù)據(jù)仍舊保留在那里。另一方面,如果存儲(chǔ)器管理器210為一些其他進(jìn)程需要更多的RAM 132頁面,它可以分配在備用列表上的RAM頁面而不會(huì)丟失那些頁面中的數(shù)據(jù),因?yàn)樵摂?shù)據(jù)也緩存在頁面文件148中。在一些實(shí)施例中,已經(jīng)寫到頁面文件148的頁面在RAM 132中可能會(huì)被改變。這些頁面稱為“臟的”,并且被重新添加到修改列表214。在為不同的目的分配RAM 132中的相應(yīng)頁面之前,頁面寫入器222再次將臟頁面寫到頁面文件。因此,修改列表上的頁面比備用列表上的頁面需要花費(fèi)更長的時(shí)間來重新分配。在一些實(shí)施例中,修改列表214上的頁面沒有被立刻寫到頁面文件,因?yàn)橐砸粋€(gè)長的連續(xù)寫入的方式將更大的頁面組寫到頁面文件會(huì)節(jié)省時(shí)間。例如,在發(fā)起寫入命令之前,存儲(chǔ)器管理器210可以等待直到存在IMB要寫入的修改數(shù)據(jù)。類似地,在一些實(shí)施例中,優(yōu)選地,裁剪的頁面不被立即寫到頁面文件148。可能有利的是等待直到存在需要寫到頁面文件的若干頁面,以使頁面寫入器222可以執(zhí)行更少的寫入命令,并因而節(jié)省寶貴的時(shí)間。還可能有利的是等待寫入頁面直到一些其他存儲(chǔ)器管理器操作不再使用硬盤141。一旦存儲(chǔ)器管理器210已經(jīng)確定可能被寫到頁面文件148的頁面,存儲(chǔ)器管理器210會(huì)檢查是否有其他頁面可能也要寫到頁面文件148。在一些實(shí)施例中,當(dāng)從工作集260裁剪頁面時(shí),存儲(chǔ)器管理器210將檢查虛擬存儲(chǔ)器中的任意相鄰頁面是否適合進(jìn)行裁剪。若此,存儲(chǔ)器管理器210可以一次裁剪附近的多個(gè)相關(guān)頁面。再次,因?yàn)閿?shù)據(jù)可以寫到硬盤141的相鄰頁面,所以減少了頁面寫入器222將數(shù)據(jù)寫到頁面文件148所花費(fèi)的時(shí)間。稍后還可以減少從頁面文件148讀取出頁面所需的時(shí)間量。在一些實(shí)施例中,如果存儲(chǔ)器管理器210發(fā)現(xiàn)可以裁剪的附近的一些其他頁面,但是它們之間存在不被裁剪的頁面,則頁面寫入器222仍舊對(duì)這些分離的頁面執(zhí)行連續(xù)寫入。頁面寫入器222通過在寫入與不能被裁剪的頁面相對(duì)應(yīng)的頁面文件250的部分時(shí)使用“虛擬”數(shù)據(jù)來這樣做。使用虛擬數(shù)據(jù)允許頁面寫入器222進(jìn)行連續(xù)寫入,而不是寫到磁盤上的多個(gè)位置。這使數(shù)據(jù)寫入加速,因?yàn)榕c在硬盤驅(qū)動(dòng)器141上讀寫非連續(xù)位置相關(guān)聯(lián)的尋道時(shí)間會(huì)使存儲(chǔ)器操作變慢,如上所述。當(dāng)存儲(chǔ)器管理器決定將頁面寫到頁面文件148時(shí),可以為與將被寫到頁面文件148的頁面有關(guān)的存儲(chǔ)器頁面預(yù)留頁面文件中的空間。相關(guān)的頁面可以是在將頁面寫入的同時(shí)可能被訪問的其他頁面。該預(yù)留的空間使得可以有效地訪問待寫入的頁面,和寫到預(yù)留空間中的相關(guān)頁面。例如,在一些實(shí)施例中,當(dāng)存儲(chǔ)器管理器210檢查要裁剪的相鄰頁面時(shí),相關(guān)頁面 可能尚未準(zhǔn)備好被裁剪并寫到頁面文件148??梢苑峙湔诒徊眉繇撁娴南噜忢撁妫窃撓噜忢撁嫔踔吝€沒有使數(shù)據(jù)存儲(chǔ)在其中?;蛘呦噜忢撁婵梢员4孀罱惶幚砥髟L問并因此尚未準(zhǔn)備好被裁剪的數(shù)據(jù)。為了確保更少碎片的頁面文件148,存儲(chǔ)器管理器210可以為這些相鄰頁面預(yù)留頁面文件148的一部分來幫助將彼此相關(guān)的頁聚集,以使在相關(guān)頁面被寫到頁面文件時(shí),這些相關(guān)頁面在頁面文件中靠近在一起??梢詾樯形礈?zhǔn)備好被裁剪的頁面預(yù)留頁面文件的部分。詞語“靠近”不要求頁面為連續(xù)的或按照特定的順序,而是頁面可能被一起讀取。在一些實(shí)施例中,“靠近”或“相鄰”意指彼此在某數(shù)目閾值的頁面之內(nèi)。在頁面存儲(chǔ)在連續(xù)存儲(chǔ)器的實(shí)施例中,預(yù)留的空間與其中寫入數(shù)據(jù)的位置相鄰,在其之前或之后,以使得如果同時(shí)訪問頁面和寫入到預(yù)留空間的相關(guān)數(shù)據(jù),則可以以連續(xù)的操作來訪問它們。當(dāng)需要從頁面文件148讀回這些頁面時(shí),相關(guān)頁面的聚集將減少硬盤驅(qū)動(dòng)器141從頁面文件讀取數(shù)據(jù)所花費(fèi)的時(shí)間,因此減少了將頁面重新加載到RAM 132中的工作集260所需的時(shí)間。本領(lǐng)域普通技術(shù)人員將理解,所有的頁面都不需要具有預(yù)留。應(yīng)當(dāng)理解,由于有限的存儲(chǔ)器大小,作出的預(yù)留越多,該預(yù)留幫助維護(hù)去碎片化的頁面文件的作用就越少。對(duì)于一些類型的頁面,預(yù)留證明是極其有用的。對(duì)于其他頁面,它對(duì)于達(dá)到去碎片化頁面文件的目標(biāo)可能沒有幫助。例如,分配較小數(shù)目的頁面的進(jìn)程,或隨機(jī)且不連續(xù)地利用頁面的進(jìn)程可能都不會(huì)從預(yù)留中受益。同時(shí),被認(rèn)為是不重要的后臺(tái)進(jìn)程或應(yīng)用也不會(huì)被給予預(yù)留。期望的是存儲(chǔ)器管理器210可以應(yīng)用任意數(shù)目的準(zhǔn)則來確定頁面是否應(yīng)當(dāng)獲得預(yù)留。例如,存儲(chǔ)器管理器210可以使用進(jìn)程的優(yōu)先級(jí)排名來確定哪些頁面將被給予預(yù)留。還期望的是,存儲(chǔ)器管理器210可以知曉哪些進(jìn)程不會(huì)從預(yù)留中受益,并停止為那些進(jìn)程作出預(yù)留。例如,可以通過存儲(chǔ)器管理器210降低已發(fā)現(xiàn)不能受益于預(yù)留的進(jìn)程的優(yōu)先級(jí),使得將來不會(huì)為這些進(jìn)程作出預(yù)留。預(yù)留不限于在特定的時(shí)間作出。在一些實(shí)施例中,可以在裁剪頁面時(shí)和在頁面寫到頁面文件148之前為頁面及其相鄰頁面作出預(yù)留。在其他實(shí)施例中,可以在其他時(shí)間作出預(yù)留,例如在頁面寫到頁面文件148時(shí),或者在分配相關(guān)頁面時(shí)。
還期待的是,在一些實(shí)施例中,相關(guān)頁面在虛擬存儲(chǔ)器中可以是不相鄰甚至彼此不相近。存在由存儲(chǔ)器管理器210使用的其他準(zhǔn)則以確定頁面是否彼此相關(guān),并因此應(yīng)當(dāng)彼此相近地寫在頁面文件148中。例如,在一些實(shí)施例中,當(dāng)存儲(chǔ)器管理器210正在將頁面寫到頁面文件148,并且該頁面屬于特定進(jìn)程時(shí),存儲(chǔ)器管理器210可以為屬于該同一進(jìn)程的其他頁面作出預(yù)留,即使它們在虛擬存儲(chǔ)器空間中并未靠近正在被寫入的頁面。可以使用數(shù)據(jù)結(jié)構(gòu)來跟蹤預(yù)留。該數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)可以變化,并且本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,存在多種方式來實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)以保存預(yù)留信息。在一個(gè)實(shí)施例中,預(yù)留數(shù)據(jù)結(jié)構(gòu)被合并到頁表212中,減少了實(shí)現(xiàn)系統(tǒng)的開銷量?,F(xiàn)將參照圖3A論述頁表的細(xì)節(jié)。圖3A示出頁表212的簡化版本。本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,存在多種方式實(shí)現(xiàn)頁表。在一個(gè)實(shí)施例中,頁表可以使用鏈表來實(shí)現(xiàn)。但是,頁表的具體實(shí)現(xiàn)對(duì)于本發(fā)明來說不是至關(guān)重要的。為了清楚起見,圖3A中僅示出與5個(gè)虛擬存儲(chǔ)器頁面相對(duì)應(yīng)的條目,但是本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,數(shù)據(jù)結(jié)構(gòu)可以擴(kuò)展到數(shù)千或數(shù)百萬的頁面。圖3A中示出的部分頁表212關(guān)注于頁表212如何將虛擬存儲(chǔ)器地址1_5映射到頁面文件250中的位置。在此,所述位置表示為頁面文件250中的偏移330。頁面212的每行是頁表?xiàng)l目。存在相似的頁表?xiàng)l目以將虛擬存儲(chǔ)器地址映射到RAM 132中的物理存儲(chǔ)器地址。在一些實(shí)施例中,標(biāo)記為偏移330的列將虛擬地址映射到RAM 132中的頁面還是頁面文件由標(biāo)志(未示出)來確定。存在頁面文件可以使用的多個(gè)其他標(biāo)志。頁表212的列320存儲(chǔ)表示相應(yīng)的虛擬地址在頁面文件中是否有預(yù)留的值。在一些實(shí)施例中,列320中為“I”的條目被存儲(chǔ)器管理器210解釋為意指為該頁面預(yù)留了頁面文件的一部分?!癘”的條目指示沒有預(yù)留。本領(lǐng)域普通技術(shù)人員將會(huì)理解,存在其他的方式實(shí)現(xiàn)這樣的預(yù)留信息,并且頁表中的列僅是一個(gè)示例實(shí)施例。頁表212的列310確定在相應(yīng)的虛擬地址處的頁面數(shù)據(jù)是否存儲(chǔ)在頁面文件中。在一些實(shí)施例中,列320中為“I”的條目被存儲(chǔ)器管理器210解釋為意指頁面文件的一部分包含該頁面的數(shù)據(jù)。“O”的條目指示還沒有為該頁面分配頁面文件的一部分。本領(lǐng)域普通技術(shù)人員將會(huì)理解,存在其他的方式實(shí)現(xiàn)這樣的預(yù)留信息,并且頁表中的列僅是一個(gè)示例實(shí)施例。在一些實(shí)施例中,在列310和320中分別指示分配信息和預(yù)留信息的值可以被視為頁表?xiàng)l目中的標(biāo)志。頁表212的列330給出頁面文件250中的偏移,該偏移對(duì)應(yīng)于該頁表?xiàng)l目的虛擬地址。例如,頁表212的虛擬地址I指示該頁面的數(shù)據(jù)被存儲(chǔ)5頁到頁面文件250。列310指示虛擬地址I在頁面文件中被分配,意味著數(shù)據(jù)存儲(chǔ)在頁面文件250的該部分中。雖然虛擬地址2的頁表?xiàng)l目指示沒有數(shù)據(jù),但是存在為來自虛擬存儲(chǔ)器的頁面2的數(shù)據(jù)所保留的部分頁表。列330確定頁面文件250的保留部分在3頁中。圖3A還示出簡化版本的頁面文件。本領(lǐng)域技術(shù)人員將會(huì)理解,這是為清楚起見而進(jìn)行的簡化,并且存在本發(fā)明所期待的頁面文件的其他實(shí)施例。在描述的實(shí)施例中,因?yàn)橐皂撁嬖隽康姆绞竭M(jìn)行存儲(chǔ)器分配,所以以頁面為單位測量頁面文件250中的偏移。第一列指示偏移值,但是本領(lǐng)域技術(shù)人員將會(huì)理解,在一些實(shí)施例中該列實(shí)際上不存在,并且在圖3A中示出僅為清楚起見。
如上所述,虛擬存儲(chǔ)器的第一頁的數(shù)據(jù)位于頁面文件250的5頁中。見頁面文件250的列340,頁面文件250中的第五頁保存“數(shù)據(jù)1”,其表示第一虛擬地址頁的數(shù)據(jù)。頁面文件250的第三頁在列340示出“RESV”,其表示頁面文件的該頁被預(yù)留。圖3B示出分配位圖350,其對(duì)應(yīng)于頁面文件250。分配位圖350是保存與頁面文件250相對(duì)應(yīng)的分配信息的數(shù)據(jù)結(jié)構(gòu)的示例實(shí)施例。本領(lǐng)域技術(shù)人員將會(huì)理解,存在很多可以保存類似信息的其他數(shù)據(jù)結(jié)構(gòu)。圖3B中分配位圖350和圖3A中頁面文件250的相應(yīng)行示出當(dāng)頁面文件250存儲(chǔ)數(shù)據(jù)時(shí),分配位圖350中的條目為“I”。存儲(chǔ)器管理器210可以將分配位圖350用作檢查頁面文件250的哪些部分空閑以及哪些部分有數(shù)據(jù)的快速高效的方式。圖3C示出預(yù)留位圖360,其對(duì)應(yīng)于頁面文件250。預(yù)留位圖360是保存與頁面文件250相對(duì)應(yīng)的預(yù)留信息的數(shù)據(jù)結(jié)構(gòu)的示例實(shí)施例。本領(lǐng)域技術(shù)人員將會(huì)理解,存在很多可以保存類似信息的其他數(shù)據(jù)結(jié)構(gòu)。圖3C中預(yù)留位圖360和圖3A中頁面文件250的相應(yīng)行示出當(dāng)頁面文件250中的·頁被預(yù)留時(shí),預(yù)留位圖360中的相應(yīng)條目為“I”。存儲(chǔ)器管理器210可以將預(yù)留位圖360用作檢查頁面文件250的哪些部分空閑以及哪些部分被預(yù)留的快速高效的方式。本發(fā)明的又一實(shí)施例可以是使用預(yù)留將頁面寫到頁面文件的方法??梢酝ㄟ^圖I和圖2中示出的計(jì)算機(jī)系統(tǒng)110的一些組件來實(shí)現(xiàn)該方法的一些實(shí)施例。實(shí)施例還可以使用諸如結(jié)合圖3A-C描述的數(shù)據(jù)結(jié)構(gòu)。將結(jié)合圖4論述該方法的示例實(shí)施例。用于將頁面寫到頁面文件250的方法400在步驟402處存儲(chǔ)器管理器210決定使用頁面寫入器222來寫頁面時(shí)開始。存儲(chǔ)器管理器210在步驟404處檢查針對(duì)正在被寫入的頁面的預(yù)留是否存在。在一些實(shí)施例中,該步驟通過定位正在被寫入頁面的頁表?xiàng)l目并檢查頁表212的列320中的條目來實(shí)現(xiàn)。如果該條目指示存在預(yù)留,則存儲(chǔ)器管理器210將來自該條目的列330中的偏移值用作將要寫入的頁面文件中的位置。預(yù)留系統(tǒng)可以不嚴(yán)格遵守以上所述的預(yù)留指示符。如上所論述,可能有時(shí)候存在很高的存儲(chǔ)器使用率,這時(shí)存儲(chǔ)器管理器210將決定忽略預(yù)留并將頁面寫到頁面文件的已經(jīng)預(yù)留的位置處。在一些實(shí)施例中,存儲(chǔ)器管理器210檢查分配位圖350以確定一些其他頁面是否已經(jīng)將數(shù)據(jù)寫到頁面文件250中的預(yù)留頁面(步驟406)。如果分配位圖350指示頁面文件250中的頁面在使用中,則存儲(chǔ)器管理器210將決定將數(shù)據(jù)從該頁面寫到頁面文件250的不同部分。在一些實(shí)施例中,存儲(chǔ)器管理器將選擇將數(shù)據(jù)寫到頁面文件250中既未分配又未預(yù)留的頁面(步驟410)。在一些實(shí)施例中,使用分配位圖350和預(yù)留位圖360確定頁面文件250的部分是否未分配也未預(yù)留。如果存儲(chǔ)器管理器210不能定位既未分配又未預(yù)留的頁面文件250的部分,則該數(shù)據(jù)將被寫到未分配但具有預(yù)留的頁面。通過寫覆蓋預(yù)留,存儲(chǔ)器管理器210使該預(yù)留無效以用于不同的頁面。當(dāng)預(yù)留被無效時(shí),存儲(chǔ)器管理器210改變預(yù)留位圖360中相應(yīng)的條目,使得其不再指示頁面文件的該部分被預(yù)留。此外,無論何時(shí)頁面寫入器222將任何數(shù)據(jù)寫到頁面文件250中的頁面,存儲(chǔ)器管理器210都將改變分配位圖中的相應(yīng)條目以指示頁面文件的該部分在使用中(步驟412)。存儲(chǔ)器管理器210還將頁表212的偏移列330中的該條目設(shè)置為適當(dāng)?shù)钠浦担约霸O(shè)置列310中的分配標(biāo)志來指示頁面數(shù)據(jù)緩存在頁面文件250中。返回至步驟406,如果頁面文件250的預(yù)留頁面沒有被不同頁面所使用,則頁面寫入器222將數(shù)據(jù)從該頁面寫到通過偏移列330中的條目指示的頁面文件250的部分(步驟408)。再次,無論何時(shí)頁面寫入器222將任意數(shù)據(jù)寫到頁面文件250中的頁面,存儲(chǔ)器管理器210都將改變分配位圖中的相應(yīng)條目以指示頁面文件的該部分在使用中(步驟412)。存儲(chǔ)器管理器210還將頁表212的偏移列330中的條目設(shè)置為適當(dāng)?shù)钠浦?,并設(shè)置列310中的分配標(biāo)志。返回至步驟404,如果不存在針對(duì)正在被寫入的頁面的預(yù)留,則方法400繼續(xù)至步驟410,其中數(shù)據(jù)被寫到未分配也未預(yù)留的頁面文件部分。如之前一樣,在一些實(shí)施例中,可以使用分配位圖350和預(yù)留位圖360來確定頁面文件250部分的分配和預(yù)留狀況。本發(fā)明的再一實(shí)施例是用于裁剪來自工作集260的頁面的方法,其例如通過圖5中的方法500來示出。存儲(chǔ)器管理器210在作出有關(guān)如何以及何時(shí)將頁面寫到頁面文件,以及何時(shí)為相關(guān)頁面作出預(yù)留時(shí),可以根據(jù)各種策略來操作。在一些實(shí)施例中,方法500開始在步驟502,其中存儲(chǔ)器管理器210決定裁剪頁面。該決定可以根據(jù)很多原因作出,包括自從頁面被使用或被修改以來過去多長時(shí)間。本領(lǐng)域技術(shù)人員將會(huì)認(rèn)識(shí)到,這不是裁剪頁面的唯一原因,并且本發(fā)明不限于此。 在步驟503處,確定將經(jīng)裁剪的頁面寫入頁面文件中的位置。在步驟504處,為在虛擬存儲(chǔ)器中與正在被裁剪的頁面相鄰的頁面作出預(yù)留。這些預(yù)留將在后續(xù)寫操作400中用以使得虛擬存儲(chǔ)器的相關(guān)頁面在頁面文件250中彼此靠近。在步驟506處,被裁剪的頁面被添加到修改列表214。一旦該頁面被添加到修改列表214,正式的頁面裁剪結(jié)束508。在步驟510處,其可以在裁剪完成后的任意時(shí)刻發(fā)生,來自頁面的數(shù)據(jù)被寫到頁面文件250。在步驟512處,頁面可以從修改列表412移除并添加到備用列表512。位于備用列表反映了與該頁面相關(guān)聯(lián)的數(shù)據(jù)既在RAM 132中也在頁面文件250中。在某一后續(xù)時(shí)刻(未示出),頁面可能由于處理器改變了與該頁面相關(guān)聯(lián)的數(shù)據(jù)而變成“臟頁面”。當(dāng)這樣的情況發(fā)生時(shí),該頁面可以從備用列表216移走并添加回到修改列表214。裁剪方法500的步驟不限于圖5中示出的特定順序。例如,在一個(gè)實(shí)施例中,可以推遲將頁面寫到頁面文件(步驟510),直到發(fā)現(xiàn)其他頁面同時(shí)寫到頁面文件250,以使得通過連續(xù)地寫入數(shù)據(jù)來節(jié)省時(shí)間。在另一實(shí)施例中,可以在頁面添加到修改列表或?qū)懙巾撁嫖募?50之后,發(fā)生針對(duì)附近頁面的頁面文件部分的預(yù)留(步驟504)。因此已經(jīng)描述了本發(fā)明的至少一個(gè)實(shí)施例的若干方面,將會(huì)明了,本領(lǐng)域技術(shù)人員將能輕易地進(jìn)行各種替換、變形和改進(jìn)。這些替換、變形和改進(jìn)旨在作為本公開的一部分,并且在本發(fā)明的精神和范圍內(nèi)。相應(yīng)地,前面的描述和附圖僅為示例方式。本領(lǐng)域普通技術(shù)人員將認(rèn)識(shí)到,為清楚起見,已經(jīng)簡化了在此公開的許多概念,并且本發(fā)明不限于這些簡化的實(shí)施例??梢砸员姸喾绞街械娜我环N實(shí)現(xiàn)本發(fā)明的上述實(shí)施例。例如,可以使用硬件、軟件或其組合來實(shí)現(xiàn)這些實(shí)施例。當(dāng)用軟件實(shí)現(xiàn)時(shí),軟件代碼可以在無論是在單個(gè)計(jì)算機(jī)中提供的還是在多個(gè)計(jì)算機(jī)間分布的任意合適的處理器或處理器集合上執(zhí)行。這樣的處理器可以實(shí)現(xiàn)為集成電路,在集成電路組件中具有一個(gè)或多個(gè)處理器。但是可以使用任意合適格式的電路來實(shí)現(xiàn)處理器。此外,計(jì)算機(jī)可以具有一個(gè)或多個(gè)輸入和輸出設(shè)備。這些設(shè)備可用來呈現(xiàn)用戶接口等。能夠用來提供用戶接口的輸出設(shè)備的示例包括視覺呈現(xiàn)輸出的打印機(jī)或顯示屏幕,以及聽覺呈現(xiàn)輸出的揚(yáng)聲器或其他聲音生成設(shè)備。能夠用于用戶接口的輸入設(shè)備的示例包括鍵盤和諸如鼠標(biāo)、觸摸板和數(shù)字化輸入板的定位設(shè)備。作為另一示例,計(jì)算機(jī)可以通過語音識(shí)別或其他聽得見的格式來接收輸入信息。這樣的計(jì)算機(jī)可以以任意合適的形式通過一個(gè)或多個(gè)網(wǎng)絡(luò)互連,包括作為局域網(wǎng)或諸如企業(yè)網(wǎng)或因特網(wǎng)的廣域網(wǎng)。這樣的網(wǎng)絡(luò)可以基于任意合適的技術(shù),并且可以根據(jù)任意合適的協(xié)議來操作,并且可以包括無線網(wǎng)絡(luò)、有線網(wǎng)絡(luò)或光纖網(wǎng)絡(luò)。此外,在此概括的各種方法或進(jìn)程可以編碼為可執(zhí)行在采用多個(gè)操作系統(tǒng)或平臺(tái)中的任一個(gè)的一個(gè)或多個(gè)處理器上的軟件。另外,這樣的軟件可以用很多合適的編程語言和/或編程或腳本工具來編寫,并且還可以編譯成可執(zhí)行的機(jī)器語言代碼,或在框架或虛擬機(jī)上執(zhí)行的中間代碼。在這方面,本發(fā)明可以體現(xiàn)為用一個(gè)或多個(gè)程序編碼的計(jì)算機(jī)可讀介質(zhì)(或多個(gè)計(jì)算機(jī)可讀介質(zhì))(例如,計(jì)算機(jī)存儲(chǔ)器、一個(gè)或多個(gè)軟盤)、緊致盤(CD)、光盤、數(shù)字化視頻盤(DVD)、磁帶、閃存存儲(chǔ)器、現(xiàn)場可編程門陣列或其他半導(dǎo)體設(shè)備中的電路構(gòu)造、或其他非 臨時(shí)的有形的計(jì)算機(jī)存儲(chǔ)介質(zhì)),當(dāng)在一個(gè)或多個(gè)計(jì)算機(jī)或其他處理器上運(yùn)行該一個(gè)或多個(gè)程序時(shí),其執(zhí)行實(shí)現(xiàn)上述本發(fā)明各種實(shí)施例的方法。該一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)可以是可傳輸?shù)模允勾鎯?chǔ)在其上的一個(gè)或多個(gè)程序可以加載到一個(gè)或多個(gè)不同的計(jì)算機(jī)或其他處理器上,以實(shí)現(xiàn)上述本發(fā)明的各方面。在此用到的術(shù)語“非臨時(shí)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)”僅包含可以被視為產(chǎn)品(即產(chǎn)品物件)或機(jī)器的計(jì)算機(jī)可讀介質(zhì)。術(shù)語“程序”或“軟件”在此以一般的意義用于指代可被用以對(duì)計(jì)算機(jī)或其他處理器進(jìn)行編程來實(shí)現(xiàn)上述本發(fā)明的各方面的任意類型的計(jì)算機(jī)代碼或計(jì)算機(jī)可執(zhí)行指令集合。另外,應(yīng)當(dāng)明了,根據(jù)此實(shí)施例的一個(gè)方面,當(dāng)運(yùn)行時(shí)執(zhí)行本發(fā)明的方法的一個(gè)或多個(gè)計(jì)算機(jī)程序無需駐留在單個(gè)計(jì)算機(jī)或處理器上,而是可以以模塊化的方式分布在多個(gè)不同的計(jì)算機(jī)或處理器中以實(shí)現(xiàn)本發(fā)明的各方面。計(jì)算機(jī)可執(zhí)行指令可以有很多形式,例如由一個(gè)或多個(gè)計(jì)算機(jī)或其他設(shè)備執(zhí)行的程序模塊。通常,程序模塊包括例行程序、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,其執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。通??梢愿鶕?jù)需要在各實(shí)施例中組合或分布程序模塊的功倉泛。此外,可以以任意合適的形式在計(jì)算機(jī)可讀介質(zhì)中存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)。為了便于說明,數(shù)據(jù)結(jié)構(gòu)可以示出為具有通過該數(shù)據(jù)結(jié)構(gòu)中的位置相關(guān)的字段。這樣的關(guān)系同樣可以通過利用傳遞字段之間關(guān)系的計(jì)算機(jī)可讀介質(zhì)中的位置指定字段的存儲(chǔ)來獲得。但是,任意合適的機(jī)制都可以用來建立數(shù)據(jù)結(jié)構(gòu)的字段中信息之間的關(guān)系,包括通過使用指針、標(biāo)簽或建立數(shù)據(jù)元素之間關(guān)系的其他機(jī)制??梢詥为?dú)、組合或以在前面描述的實(shí)施例中沒有具體論述的各種排布使用本發(fā)明的各方面,并且因此沒有將其應(yīng)用限制于在前面描述中闡述的或在附圖中圖解的組件的排布和細(xì)節(jié)。例如,在一個(gè)實(shí)施例中描述的方面可以以任意方式與其他實(shí)施例中描述的方面進(jìn)行組合。此外,本發(fā)明可以體現(xiàn)為一種方法,該方法的示例已經(jīng)提供。作為該方法的一部分執(zhí)行的動(dòng)作可以以任意合適的方式進(jìn)行排序。相應(yīng)地,可以將實(shí)施例構(gòu)造為以不同于示出的順序來執(zhí)行動(dòng)作,其可以包括同時(shí)執(zhí)行一些動(dòng)作,即使說明性的實(shí)施例中示出為連續(xù)的動(dòng)作。
在權(quán)利要求中使用諸如“第一”、“第二”、“第三”等序數(shù)術(shù)語來修飾權(quán)利要求元素本身并未暗示一個(gè)權(quán)利要求元素對(duì)另一權(quán)利要求元素的任何優(yōu)先級(jí)、優(yōu)先地位或順序,或者執(zhí)行方法的動(dòng)作的時(shí)間順序,而僅僅是用做區(qū)別具有特定名稱的權(quán)利要求元素與(除使用序數(shù)術(shù)語以外)具有相同名稱的另一元素的標(biāo)記以區(qū)分這些權(quán)利要求元素。此外,在此用到的措辭和專有名詞是出于描述的目的,并且不應(yīng)視為限制性的。在此使用“包括”、“包含”或“具有”、“含有”、“涉及”及其變形 都意在包含其后所列出的項(xiàng)及其等價(jià)物,以及另外的項(xiàng)。
權(quán)利要求
1.ー種操作具有第一類型存儲(chǔ)器和第二類型存儲(chǔ)器的計(jì)算設(shè)備的方法(500),所述第一類型存儲(chǔ)器存儲(chǔ)活動(dòng)存儲(chǔ)器頁面的工作集,所述方法包括 確定(503)其中所述工作集的第一頁面的第一數(shù)據(jù)將被寫入的所述第二類型存儲(chǔ)器中頁面文件(250)的第一部分; 至少預(yù)留(504)與所述頁面文件的第一部分相鄰的所述頁面文件(250)的第二部分,以用于虛擬存儲(chǔ)器空間中離所述第一頁面(302)最多不超過閾值數(shù)目頁面的ー個(gè)或多個(gè)相鄰頁面。
2.如權(quán)利要求I所述的方法,還包括 將所述第一頁面的第一數(shù)據(jù)寫到(510)頁面文件(250)的所述第一部分; 確定(402)將第二頁面(302)的第二數(shù)據(jù)寫到所述頁面文件(250); 檢查(404)是否存在針對(duì)所述第二頁面(302)的預(yù)留,所述預(yù)留為所述第二頁面(302)的第二數(shù)據(jù)預(yù)留所述頁面文件(250)的第二部分;以及 如果存在針對(duì)所述第二頁面的預(yù)留,則將所述第二頁面(302)的第二數(shù)據(jù)寫到(406)所述頁面文件(250)的第二部分。
3.如權(quán)利要求2所述的方法,還包括 在寫入(408)所述第二頁面的第二數(shù)據(jù)之前,檢查所述頁面文件的第二部分是否已經(jīng)在使用中。
4.如權(quán)利要求3所述的方法,還包括 如果所述頁面文件的第二部分已經(jīng)在使用中,識(shí)別既未分配也未預(yù)留的所述頁面文件的部分;以及 將所述第二頁面的第二數(shù)據(jù)寫到所識(shí)別的既未分配也未預(yù)留的頁面文件的部分。
5.如權(quán)利要求3所述的方法,其中檢查所述頁面文件的第二部分是否已在使用中包括在分配數(shù)據(jù)結(jié)構(gòu)中訪問分配信息。
6.一種適于預(yù)留頁面文件(250)的部分的計(jì)算機(jī)系統(tǒng)(110),所述計(jì)算機(jī)系統(tǒng)包括 易失性存儲(chǔ)器(132),其存儲(chǔ)多個(gè)頁面; 非易失性存儲(chǔ)器(141 ),其存儲(chǔ)所述頁面文件(250); 存儲(chǔ)器管理器(210),其決定將所述多個(gè)頁面的第一頁面寫到所述頁面文件(250),所述存儲(chǔ)器管理器包括 頁表?xiàng)l目,包括確定是否為所述第一頁面預(yù)留了所述頁面文件的第一部分的預(yù)留信息; 頁面寫入器,其在為所述第一頁面預(yù)留了所述頁面文件的第一部分吋,將所述第一頁面寫到所述頁面文件的第一部分。
7.如權(quán)利要求6所述的計(jì)算機(jī)系統(tǒng)(110),其中所述存儲(chǔ)器管理器還包括確定所述頁面文件的第一部分是否分配給不同頁面的分配數(shù)據(jù)結(jié)構(gòu)。
8.如權(quán)利要求7所述的計(jì)算機(jī)系統(tǒng)(110),其中 當(dāng)沒有為所述第一頁面預(yù)留所述頁面文件的第一部分時(shí),所述頁面寫入器將所述第一頁面寫到既未分配也未預(yù)留的所述頁面文件的部分,所述部分是通過查詢預(yù)留數(shù)據(jù)結(jié)構(gòu)和所述分配數(shù)據(jù)結(jié)構(gòu)確定的。
9.如權(quán)利要求7所述的計(jì)算機(jī)系統(tǒng)(110),其中當(dāng)所述頁面文件的第一部分被分配給不同頁面時(shí),所述頁面寫入器將所述第一頁面寫到既未分配也未預(yù)留的所述頁面文件的部分,所述部分是通過查詢預(yù)留數(shù)據(jù)結(jié)構(gòu)和所述分配數(shù)據(jù)結(jié)構(gòu)所確定的。
10.如權(quán)利要求6所述的計(jì)算機(jī)系統(tǒng)(110),其中當(dāng)所述存儲(chǔ)器管理器決定將第二頁面(502)寫到所述頁面文件的第二部分時(shí),預(yù)留系統(tǒng)至少預(yù)留(504)與所述頁面文件的第二部分相鄰的所述頁面文件(250)的第三部分,以用于虛擬存儲(chǔ)器空間中離所述第二頁面(302)最多不超過預(yù)定數(shù)目頁面的ー個(gè)或多個(gè)相鄰頁面。
全文摘要
一種用于使用為相關(guān)存儲(chǔ)器頁面預(yù)留頁面文件部分的技術(shù)來維護(hù)計(jì)算機(jī)系統(tǒng)的頁面文件的系統(tǒng)和方法。虛擬存儲(chǔ)器空間中彼此相近的頁面往往存儲(chǔ)相關(guān)的信息,并且因此確保它們在頁面文件中彼此相近地存儲(chǔ)是有益的。這樣增加了從頁面文件讀取數(shù)據(jù)的速度,因?yàn)楫?dāng)從存儲(chǔ)頁面文件的磁盤驅(qū)動(dòng)器讀回虛擬存儲(chǔ)器地址空間中的相鄰頁面時(shí),該磁盤驅(qū)動(dòng)器的總尋道時(shí)間會(huì)減少。通過實(shí)現(xiàn)使得相關(guān)頁面彼此相鄰存儲(chǔ)的預(yù)留系統(tǒng),提高了計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器管理的效率。
文檔編號(hào)G06F12/08GK102708065SQ201210057988
公開日2012年10月3日 申請日期2012年3月7日 優(yōu)先權(quán)日2011年3月7日
發(fā)明者L.王, M.伊根, Y.M.貝克 申請人:微軟公司