專利名稱:高效高速緩存管理的制作方法
技術(shù)領域:
本發(fā)明涉及計算設備中的存儲器管理,尤其涉及可被動態(tài)地被分配為高速緩存存儲器以及可被計算設備組件使用的存儲器的管理。
背景技術(shù):
通過提供對設備內(nèi)的或設備可訪問的較大、較慢的存儲器的改善的訪問時間,高速緩存存儲器可改善計算設備的總體性能。然而,由于高速緩存存儲器通常小于存儲器分層結(jié)構(gòu)中較低層的存儲器,其無法保持這樣的較低層存儲器的全部內(nèi)容的副本。因此,由于改善的存儲器訪問時間而獲得的性能增益被將較低層存儲器段換入和換出高速緩存存儲器所需的開銷抵消。一般而言,由于高速緩存存儲器是專用的存儲器組件(例如,一個或多個專用的存儲器芯片或模塊),或者由于存儲器空間一固定部分被指定為高速緩存存儲器,高速緩存存儲器大小是固定的。增加高速緩存存儲器大小能減小高速緩存加載和寫回操作發(fā)生的頻率,而且在增大的高速緩存大小情況下高速緩存的未中率一般會下降。然而,一旦用較低層存儲器內(nèi)容填充高速緩存存儲器,高速緩存一般就無法提供附加的存儲器系統(tǒng)性能改進。 如果固定的高速緩存存儲器大小非常大,那么未使用的高速緩存對其他系統(tǒng)組件是不可用的,而且會被浪費。由此,需要更高效地使用高速緩存存儲器,例如不限制其他系統(tǒng)組件,但是當需要時允許充足的高速緩存。
發(fā)明內(nèi)容
此處公開了存儲器管理方法,提供了計算設備中可動態(tài)地改變大小的高速緩存, 可響應于高速緩存未中而自動擴大并響應于設備組件的存儲器分配請求而收縮。在一個實施例中,計算設備的第一存儲器(例如,計算設備的存儲器分層結(jié)構(gòu)內(nèi)較高等級的存儲器)可被分配為第二存儲器(例如,在存儲器分層結(jié)構(gòu)中低于第一存儲器的存儲器等級)的高速緩存存儲器,或被應用程序或計算設備的其他組件使用。例如,蜂窩電話中的嵌入式RAM可被分配為可移動非易失性閃存卡的高速緩存存儲器。當執(zhí)行在蜂窩電話上的應用程序請求對存儲卡的讀/寫訪問時,如果未使用的RAM是可用的,電話可響應于高速緩存未中而動態(tài)地擴大分配為高速緩存的那部分RAM。高速緩存可響應于每一高速緩存未中而增大,并可增大以填充任何未使用的RAM。如果應用程序請求RAM的一部分被分配來供該應用程序使用,并且高速緩存已經(jīng)消耗了 RAM中全部可用的空閑存儲器,那么電話可重新分配高速緩存的一部分來供該應用程序使用。因此,高速緩存大小可響應于存儲器分配請求而收縮。因而,高速緩存被認為是未使用的存儲器,因此并不減少對應用程序和計算設備的其他組件可用的存儲器數(shù)量,而不管高速緩存的大小。高速緩存的大小隨第一存儲器的大小而縮放。例如,如果嵌入式RAM的大小因添加更多存儲器組件而增大,那么高速緩存的最大可能大小可相應地增大。
參考附圖閱讀以下詳細描述,將更清楚本發(fā)明的前述和其他目標、特征和優(yōu)點。
圖1是示例性移動設備的框圖。圖2是其中可操作圖1的示例性移動設備的云計算環(huán)境的框圖。圖3是移動設備的示例性存儲系統(tǒng)的框圖。圖4(a)_4(j)示出了移動設備中的示例性第一存儲器的存儲器圖以及各種存儲器操作執(zhí)行后第一存儲器中已使用的和未使用的存儲器數(shù)量。圖5是動態(tài)地增大在計算設備的第一存儲器內(nèi)分配的高速緩存存儲器大小的第一示例性方法的流程圖。圖6是動態(tài)地增大在計算設備的第一存儲器內(nèi)分配的高速緩存存儲器大小的第二示例性方法的流程圖。
具體實施例方式如在本申請和權(quán)利要求書中使用的,單數(shù)形式“一”、“一個”、和“該”包括復數(shù)形式,除非上下文清楚地另外指明。類似地,措詞“或”旨在包括“和”,除非上下文清楚地指示其它情況。術(shù)語“包括”意味著“包含”,因此“包括A或B”意味著包含A或B以及一起包含A和B。另外,術(shù)語“包括”意味著“開放性包含”。進一步地,對存儲器的“一部分”的引用可指向整個存儲器或小于整個存儲器。此外,術(shù)語“存儲器段”意味著存儲器的任何大小的一部分,并可指向存儲器塊或頁。此外,由措詞“基本上”修飾的術(shù)語包括與未被修飾的術(shù)語略微不同的量或數(shù)量。例如,其中“基本上全部”存儲器已被非配為高速緩存存儲器的存儲器可包括相對少量的未被分配為高速緩存存儲器的存儲器。例如,這樣的存儲器可包括太小而不能響應于高速緩存未中被分配為高速緩存存儲器的段。未分配為高速緩存存儲器的數(shù)量可以是比特、千字節(jié)或者甚至兆字節(jié)的數(shù)量級,可以在單獨的存儲器段中,也可以放在一起。此外,術(shù)語“分配”和“重新分配”都指的是指定存儲器的一部分來針對不同的用途,而且就這一點而言是互換地使用的。圖1是可用于執(zhí)行本文中所描述的任何方法的示例性移動設備100的框圖。移動設備100可以是諸如智能手機、膝上型計算機、平板計算機或上網(wǎng)本計算機之類的任何移動計算設備。移動設備100可包括各種可任選的硬件和軟件組件105。該移動設備100中的任何組件105可與任何其他組件通信,盡管出于容易例示的目的,未示出所有組件。所示移動設備100可包括用于執(zhí)行如信號編碼、數(shù)據(jù)處理、輸入/輸出處理、電源控制和/或其他功能等任務的控制器或處理器110(例如,信號處理器、微處理器、ASIC、或其他控制和處理邏輯電路或軟件)。操作系統(tǒng)112可控制對組件105的分配和使用,并支持一個或多個應用程序114。應用程序可包括公共移動計算應用程序(例如,電子郵件應用程序、日歷、聯(lián)系人管理器、web瀏覽器、消息接發(fā)應用程序)、或任何其他計算應用。所示移動設備100可包括存儲器120。存儲器120可包括不可移動存儲器122和 /或可移動存儲器124。不可移動或嵌入式存儲器122可包括RAM、ROM、閃存、硬盤驅(qū)動器、 或其他眾所周知的存儲器存儲技術(shù)??梢苿哟鎯ζ? 可包括閃存卡(例如,SD(安全數(shù)字)卡、miniSD卡、microSD卡、SDHC(高容量SD)卡或SD)(C(擴展容量SD)卡)、記憶棒、訂戶身份模塊(SIM)卡——其在GSM(全球移動通信)系統(tǒng)中是眾所周知的,或者其他眾所周知的存儲器存儲技術(shù),諸如“智能卡”。存儲器120可用于存儲數(shù)據(jù)和/或用于運行操作系統(tǒng)112和應用程序114的代碼。示例數(shù)據(jù)可包括可由移動計算設備100經(jīng)由一個或多個有線或無線網(wǎng)絡發(fā)送給一個或多個網(wǎng)絡服務器或其他設備或者從其接收的網(wǎng)頁、文本、圖像、 聲音文件、視頻數(shù)據(jù)或其他數(shù)據(jù)集。存儲器120可用于存儲諸如國際移動訂戶身份(IMSI) 等訂戶標識符,以及諸如國際移動設備標識符(IMEI)等設備標識符。這些標識符可被傳送給網(wǎng)絡服務器以標識用戶和裝備。移動設備120也可訪問外部存儲器1 ——其可包括例如外部硬盤驅(qū)動器或移動設備120通過有線或無線網(wǎng)絡連接可訪問的任何存儲器存儲。存儲器120的任何部分都可被移動設備100利用為高速緩存存儲器。移動設備100可支持諸如觸摸屏132、話筒134、照相機136、物理鍵盤138、和/或軌跡球139等一個或多個輸入設備130,以及諸如揚聲器142和顯示器144等一個或多個輸出設備140。其他可能的輸出設備(未示出)可包括壓電或其他觸覺輸出設備。一些設備可服務超過一個輸入/輸出功能。例如,觸摸屏132和顯示器144可被組合在單個輸入 /輸出設備中。輸入設備130或輸出設備140中的任一個可內(nèi)置或外置于移動設備100。無線調(diào)制解調(diào)器160可被耦合到無線調(diào)制解調(diào)器天線162,并可支持移動設備100 和外部設備之間的雙向通信,如本領域中清楚理解的。調(diào)制解調(diào)器160和天線162被一般性地示出,并且可以是用于與無線蜂窩通信網(wǎng)絡通信的無線蜂窩調(diào)制解調(diào)器。無線調(diào)制解調(diào)器160可包括其他基于無線電調(diào)制解調(diào)器,諸如Wi-Fi調(diào)制解調(diào)器163或藍牙調(diào)制解調(diào)器164,其中的每一個都可被耦合至其自己的天線(例如,Wi-Fi天線168、藍牙天線169)。 無線調(diào)制解調(diào)器160通常被配置成與一個或多個蜂窩網(wǎng)絡(諸如,用于單個蜂窩網(wǎng)絡內(nèi)、蜂窩網(wǎng)絡之間、或移動設備與公共交換電話網(wǎng)絡(PSTN)之間的數(shù)據(jù)和語音通信的GSM網(wǎng)絡) 進行通信。移動設備100還可包括包含物理連接器172的至少一個輸入/輸出端口 170(其可以是例如USB端口、IEEE 1394(火線)端口、和/或RS-232端口)、電源174、諸如GPS接收機175等的衛(wèi)星導航系統(tǒng)接收機、陀螺儀176、加速計177、和羅盤178。GPS接收機175 可被耦合至GPS天線179。移動設備100可另外包括耦合至AM/FM接收機185的AM/FM天線180,用于接收由AM/FM無線電信號發(fā)射機廣播的無線電信號。移動設備100還可包括一個或多個附加天線190,這些附加天線190被耦合至一個或多個附加接收機、發(fā)射機和/或收發(fā)機195以實現(xiàn)各種附加功能。例如,移動設備100可包括耦合至附加接收機195的附加天線190,該接收機195被配置成接收和處理數(shù)字音頻無線電服務(DARQ信號以在移動設備100或附連的附件處輸出。盡管各個天線被示為移動設備100的分開的硬件組件,但是它們可被結(jié)合到其他組件中。例如,GPS天線179可被結(jié)合到GPS接收機175中。另外,在圖1中示為分開的天線可被實現(xiàn)為單個天線。例如,AM/FM天線180和GPS天線179可以是由GPS接收機175和 AM/FM接收機185共享的單個天線。此外,多個天線可被連接至開關(guān),以允許將組件耦合至若干個天線源中的一個,或一個以上的天線源。例如,AM/FM接收機185可被連接至允許將 AM/FM天線180或在移動設備100外部的天線用作AM/FM接收機天線源的開關(guān)(未示出)。 開關(guān)還可被配置成允許將AM/FM天線180和外部天線、或多個天線同時用作AM/FM接收機 185的天線源。所示組件105不是必需的或所有都包括的,因為可刪除任何組件并且可添加其他組件。圖2示出了適當?shù)膶崿F(xiàn)環(huán)境200的通用示例,所描述的實施例、方法和技術(shù)可以在其中實現(xiàn),并且本文所描述的任何移動設備和計算設備都可在其中操作。在示例環(huán)境200中,由云210提供各種類型的服務(例如,計算服務)。例如,云 210可包括可位于中央或是分布式的計算設備集,其向經(jīng)由諸如因特網(wǎng)等網(wǎng)絡連接的各種類型的用戶和設備提供基于云的服務。實現(xiàn)環(huán)境200可按不同方式用于實現(xiàn)計算任務。例如,一些任務(例如,存儲器管理、處理用戶輸入和呈現(xiàn)用戶界面)可在本地計算設備(例如,所連接的設備230、M0、250)上執(zhí)行,而其他任務(例如,存儲將在后繼處理中使用的數(shù)據(jù)、訪問位于云內(nèi)的存儲器存儲)可在云210中執(zhí)行。在示例環(huán)境200中,云210向具有各種屏幕能力的所連接的設備230、MO、250提供服務。所連接的設備230、M0、250可以是本文所描述的任何移動設備和計算設備。所連接設備230表示具有計算機屏幕(例如,中型屏幕235)的設備。例如,所連接的設備230可以是個人計算機,諸如臺式計算機、膝上型計算機、筆記本、上網(wǎng)本等。所連接的設備240表示具有移動設備屏幕例如,小型屏幕)的移動設備。例如,所連接設備240可以是移動電話、智能電話、個人數(shù)字助理、平板計算機等。所連接設備250表示具有大屏幕255的設備。例如,所連接設備250可以是具有因特網(wǎng)連通性的電視機,或連接至諸如機頂盒、游戲控制臺等能夠連接到云的另一設備的電視機。所連接設備230、M0、250中的一個或多個可包括觸摸屏能力。不具備屏幕能力的設備也可被用在示例環(huán)境200中。例如,云210可向沒有顯示器的一個或多個計算機(例如,服務器計算機)提供服務??捎稍?10通過服務提供方220、或通過其他在線服務的提供者(未描述)來提供服務。例如,云服務可被定制成對應于特定所連接設備(例如,所連接設備230、M0、250) 的屏幕大小、顯示能力、和/或觸摸屏能力??捎煞仗峁┓?20提供的服務包括例如電子郵件、短消息服務(SMQ、多媒體消息服務(MMS)、社交聯(lián)網(wǎng)和網(wǎng)站主存。服務提供方可主存提供諸如軟件應用程序和升級等各種商品和服務的在線市場,以及用戶可通過購買或未通過購買獲取的、用于從云下載或通過郵件傳送的媒體內(nèi)容。服務提供方220也可提供網(wǎng)絡可訪問的存儲器——所連接的設備230、M0、250中的任一個可將其使用為第二存儲器。在示例環(huán)境200中,云210至少部分地使用服務提供方230來向各種連接的設備 230,240,250提供此處描述的技術(shù)和方案。例如,服務提供方220可提供用于各種基于云的服務的集中式解決方案。服務提供方220可為用戶和/或設備(例如,連接的設備230、 240、250和/或其各自的用戶)管理服務訂閱。盡管移動設備100被詳細描述,但此處所描述的方法并不一定由移動設備來執(zhí)行。此處所描述的方法可使用任何采用高速緩存存儲器的計算設備來執(zhí)行,包括一般并不被認為是“移動”設備的那些設備,諸如桌上型計算機、處理器等。這樣的“非移動”計算設備可在圖2的計算環(huán)境中操作。圖3是采用本文中所描述的任何方法的移動設備310的示例性存儲器系統(tǒng)300的框圖。存儲器系統(tǒng)300包括存儲器管理器320、一個或多個移動設備組件330、第一存儲器 340、一個或多個高速緩存用戶350和第二存儲器360。第一存儲器340包括未使用的存儲器370和已使用的存儲器380。已使用的存儲器380包括第一存儲器340,第一存儲器340已被分配為供諸如操作系統(tǒng)、其他軟件應用程序或硬件組件之類的組件330使用。因而,已使用的存儲器可用于存儲計算機可執(zhí)行的指令、程序數(shù)據(jù)或可被移動設備的控制器或處理器容易且快速地訪問的任何其他數(shù)據(jù)。未使用的存儲器370包括空閑存儲器395和高速緩存存儲器390。空閑存儲器395是可被分配但還未被分配為高速緩存器390或已使用的存儲器380的第一存儲器340。高速緩存存儲器390是已被分配來用作第二存儲器360的高速緩存的第一存儲器340??梢允褂酶鞣N特征來將第一存儲器340與第二存儲器360區(qū)分開來。例如,第一存儲器340可以指的是駐留在存儲器分層結(jié)構(gòu)內(nèi)較高等級的存儲器,大小較小,物理上位于距任何移動計算設備處理器更近之處,和/或相對于第二存儲器360具有更快的存儲器訪問時間(例如,讀/寫時間)。也可以使用其他特征來將第一存儲器340與第二存儲器 360區(qū)分開來。移動設備存儲器分層結(jié)構(gòu)可包括以上參考圖1所描述的可移動、不可移動和外部存儲器的任意組合。在一個實施例中,第一存儲器340可以是不可移動RAM(例如,SRAM或 DRAM),第二存儲器360可以是分層結(jié)構(gòu)中更大的、不可移動的閃存。在另一實施例中,第二存儲器360可以是諸如SD卡的可移動閃存,或諸如USB硬盤驅(qū)動器或網(wǎng)絡可訪問的存儲器存儲的外部存儲器設備。第一存儲器340和第二存儲器360每一個都可包括多個存儲器組件或設備。例如,第一存儲器340可包括嵌入在移動設備中的多個獨立的RAM芯片或模塊, 或集成在任何設備處理器或控制器中的RAM電路。此外,第一和第二存儲器每一個都可包括存儲器分層結(jié)構(gòu)內(nèi)多個等級的存儲器。例如,第一存儲器可包括集成在處理器中的RAM 電路和處理器外部的獨立RAM,第二存儲器360可包括附連至移動設備310的可移動SD卡和USB外部硬盤驅(qū)動器。此外,存儲器分層結(jié)構(gòu)可包括多于2個等級,分層結(jié)構(gòu)內(nèi)給定等級的存儲器既可擔當?shù)谝淮鎯ζ?40也可擔當?shù)诙鎯ζ?60。即,給定等級的存儲器相對于一個等級的存儲器可以是第一存儲器,相對于另一等級的存儲器可以是第二存儲器。例如,在包括256MB 嵌入式RAM、16GB嵌入式閃存和ITB外部硬盤驅(qū)動器存儲的存儲器分層結(jié)構(gòu)中,嵌入式RAM 對于嵌入式閃存可擔當?shù)谝淮鎯ζ?,而嵌入式閃存對于外部硬盤驅(qū)動器可擔當?shù)谝淮鎯ζ鳌R虼?,可利用此處所描述的方法來實現(xiàn)存儲器系統(tǒng)中的多個高速緩存存儲器。存儲器管理器320可被實現(xiàn)為移動設備310的操作系統(tǒng)的一部分,并部分負責管理第一存儲器340以用作高速緩存存儲器390以及供移動設備組件330使用。存儲器管理器320可直接與高速緩存用戶350交互,并可直接或間接地(通過高速緩存用戶350)與移動設備組件330交互。存儲器管理器320可跟蹤每一第一存儲器段如何被利用或分配(例如,空閑存儲器、已使用的存儲器、干凈的高速緩存或臟的高速緩存)。另外,存儲器管理器320可響應于從組件330接收的命令,將空閑的第一存儲器395分配為已使用的存儲器 380,并將已使用的存儲器380重新分配為空閑的存儲器395。此外,存儲器管理器320可響應于從高速緩存用戶350接收到的高速緩存讀和寫命令自動地將空閑的第一存儲器395分配為高速緩存存儲器390,反之亦然,并可指示高速緩存用戶350訪問第二存儲器360。高速緩存用戶350包括文件系統(tǒng)、設備驅(qū)動或利用高速緩存存儲器以改善第二存儲器360性能的任何其他移動設備組件。高速緩存用戶350可擔當存儲器管理器320和組件330之間以及存儲器管理器320和第二存儲器360之間的中介。例如,高速緩存用戶350 可響應于從組件330接收命令,向存儲器管理器320發(fā)出高速緩存讀和寫命令。高速緩存用戶350也可響應于從存儲器管理器320接收命令,向第二存儲器360發(fā)出讀和寫命令。高速緩存用戶350可以是存儲器系統(tǒng)300的軟件或硬件組件,可以位于移動設備310內(nèi)部或外部。例如,高速緩存用戶350可以是移動設備310內(nèi)部的管理可移動和/或不可移動閃存的閃存管理器、外部存儲器設備的設備驅(qū)動、或作為外部存儲器設備的一部分的文件系
統(tǒng)管理器。移動設備組件330可包括以上所描述的移動設備硬件或軟件組件105中的一個或多個,以及圖1未描述的附加的硬件或軟件組件。存儲器管理器320可跟蹤每一第一存儲器段的狀態(tài),該狀態(tài)指示該段是否是“空閑的”(可用于分配為高速緩存或由設備組件330使用)、“已使用的”(已分配供組件330 使用)、“干凈的高速緩存”(“干凈的”)或“臟的高速緩存”(“臟的”)。指定為“干凈的” 第一存儲器段是已被分配為高速緩存存儲器并且其內(nèi)容匹配于對應的第二存儲器段的第一存儲器段。當將空閑的存儲器395的段分配為高速緩存存儲器390時,存儲器管理器320 可指定第一存儲器段為“干凈的”。只要讀操作是在該段上執(zhí)行的,或者直至該段被重新分配為空閑的存儲器395或已使用的存儲器380,“干凈的”存儲器段就可保持干凈。被指定為“臟的”第一存儲器段是已被分配為高速緩存并且其內(nèi)容與對應的第二存儲器段不同的第一存儲器段。當執(zhí)行對“干凈的”高速緩存段的寫操作時,存儲器管理器 320可指定第一存儲器高速緩存段為“臟的”。在將高速緩存存儲器段分配為空閑的存儲器或?qū)⒃摱沃匦路峙湟詫诓煌牡诙鎯ζ鞫沃?,存儲器管理?20可執(zhí)行寫回操作,在寫回操作中高速緩存存儲器段內(nèi)容被寫回至對應的第二存儲器段中以將第二存儲器 360與高速緩存存儲器390同步。在寫回操作已執(zhí)行后,高速緩存存儲器端的狀態(tài)可以從 “臟的”改變?yōu)椤案蓛舻摹?。響應于高速緩存未中,存儲器管理?20可通過將空閑存儲器395轉(zhuǎn)換為高速緩存存儲器390自動地分配高速緩存存儲器390,由此動態(tài)地增加高速緩存存儲器390的數(shù)量。然而,增加高速緩存存儲器390的大小并不減小由移動設備組件330使用的可用的未使用存儲器370的數(shù)量,因為未使用存儲器370包括高速緩存存儲器390和空閑存儲器395 兩者。由此,有可能基本上全部空閑存儲器395都響應于高速緩存未中而自動地轉(zhuǎn)換為高速緩存存儲器390。換言之,基本上全部未使用存儲器370都可被分配為高速緩存存儲器 390。然而,在任何時刻,應用程序或組件都可請求未使用存儲器,并響應于此放棄或重新分配一部分高速緩存。由此,對于未使用存儲器的使用,應用程序和組件的存儲器分配請求的優(yōu)先級高于高速緩存。如果存儲器管理器320從組件330接收到存儲器分配請求且沒有空閑存儲器可用,那么存儲器管理器320可重新分配如空閑存儲器395般充足的一部分高速緩存390以滿足該存儲器分配請求。由此,此處所描述的方法提供了一種存儲器管理方法,其中基本上全部的未使用存儲器370可被分配為高速緩存存儲器390,而不限制對移動設備組件330可用的第一存儲器340的數(shù)量。因此,根據(jù)存儲器管理器320接收到的高速緩存讀、高速緩存寫、存儲器分配和釋放存儲器命令,可動態(tài)地增大或減小高速緩存存儲器390的大小。由于基本上全部第一存儲器340都可被分配為高速緩存存儲器390,高速緩存存儲器390的最大大小隨第一存儲器340的大小縮放。由此,對移動設備310的升級——包括增加第一存儲器340的數(shù)量,例如通過將更多SDRAM存儲器添加至空的存儲器模塊槽中或通過用更高密度的存儲器模塊替換已有的存儲器模塊——也增加了高速緩存存儲器390的最大大小。在一個實施例中,高速緩存用戶350、組件330以及第一存儲器340可包括由多個組件中的每一個所呈現(xiàn)的應用程序接口(API)以實現(xiàn)此處所描述的存儲器管理功能。例如,存儲器管理器320可向高速緩存用戶350呈現(xiàn)包括方法、操作或函數(shù)(方法) cacheread()、cachewrite ()和flush ()的API。高速緩存用戶350可向存儲器管理器320 呈現(xiàn)包括方法uncachedreadO和uncachedwrite ()的API,并可向移動設備組件330呈現(xiàn)包括方法 read()、write ()和 flush ()的 API。由存儲器管理器320向組件330呈現(xiàn)的API方法可包括方法mallocO和free ()。 方法mall0C(Size)指導存儲器管理器320分配所指示的數(shù)量的第一存儲器340來由調(diào)用組件330使用。方法freekize)指導存儲器管理器320釋放所指示的數(shù)量的第一存儲器 340。由高速緩存用戶350向組件330呈現(xiàn)的API方法可包括具有所列出的參數(shù)的以下方法。方法read (SeCOnd_mem_addr,bytes)返回在所指示的第二存儲器地址處開始的已指示數(shù)量的第二存儲器字節(jié)。方法write (seconcLmenuaddr,data)將所指示的數(shù)據(jù)寫入在所指示的第二存儲器地址處開始的第二存儲器中。方法flushO迫使存儲器管理器320將指示為“臟的”的高速緩存存儲器段的內(nèi)容寫回至第二存儲器360。由存儲器管理器320向高速緩存用戶350呈現(xiàn)的API方法可包括以下方法。方法cachedread(second_mem_addr,bytes)從對應于所指示的第二存儲器地址的部分高速緩存存儲器中讀取所指示數(shù)量的字節(jié)。方法cachedWrite(second_mem_addr,data)將所指示的數(shù)據(jù)寫入對應于所指示的第二存儲器地址的部分高速緩存存儲器中。方法flush () 迫使存儲器管理器320將臟的高速緩存存儲器段的內(nèi)容寫入至第二存儲器360。如以下所討論的,方法uncachedreadO禾口 uncachedwrite ()可被調(diào)用為月艮務cachedreadO或 cachedwriteO請求的存儲器管理器320的一部分。由高速緩存用戶350向存儲器管理器320呈現(xiàn)的API方法可包括以下方法。方法 uncachedread(second_mem_addr,bytes)在所指示的第二存儲器地址處開始讀取所指示的數(shù)量的第二存儲器字節(jié);而uncachedwrite (SeCOnd_mem_addr,data)將所指示的數(shù)據(jù)寫入至在所指示的第二存儲器地址處開始的第二存儲器。在其他實施例中,此處所描述的存儲器管理功能可使用包括具有不同的、更多或更少參數(shù)的以上所列出的方法的API來實現(xiàn),可使用包括不同于以上所列出的方法集的 API來實現(xiàn),或采用使用API以外的其他方式來實現(xiàn)。在一個實施例中,存儲器系統(tǒng)300可服務移動設備組件330發(fā)出的方法調(diào)用如下。 關(guān)于readO操作,組件330向高速緩存用戶350發(fā)出readO命令。作為響應,接收的高速緩存用戶350向存儲器管理器320發(fā)出cachedreadO命令以從高速緩存存儲器390讀取所請求的存儲器內(nèi)容。響應于接收cachedreadO命令,存儲器管理器320可首先確定所請求的第二存儲器內(nèi)容的副本是否存在于高速緩存存儲器390中(即,cachedreadO命令導致高速緩存命中還是未中)。存儲器管理器320可使用查找表、地址標簽等已知的方法跟蹤哪一第二存儲器段存在于高速緩存存儲器390中。如果所請求的第二存儲器內(nèi)容存在于高速緩存存儲器390中(即,存在高速緩存命中),那么存儲器管理器320從高速緩存存儲器 390讀取所請求的內(nèi)容并將所請求的內(nèi)容返回至發(fā)出調(diào)用的高速緩存用戶350。高速緩存用戶350進而向請求組件330返回讀取操作的結(jié)果。從其中讀出高速緩存存儲器內(nèi)容的高速緩存存儲器段的狀態(tài)并不改變。指示為“干凈的”高速緩存存儲器段保持“干凈的”,指示為“臟的”存儲器塊保持“臟的”。如果在cachedreadO方法中所指示的第二存儲器內(nèi)容的副本并沒有駐留在高速緩存存儲器390中(即,高速緩存未中),那么存儲器管理器320可分配未使用的存儲器 370為高速緩存存儲器390以支持讀取操作。如果有足夠的可用空閑存儲器395以容納 cachedreadO請求,那么存儲器管理器320可分配一部分空閑存儲器395作為高速緩存存儲器390,并向高速緩存用戶350API發(fā)出uncachedread()方法調(diào)用。uncachedread()方法可訪問第二存儲器360并將第二存儲器360的適當內(nèi)容復制到新分配的高速緩存存儲器段中。分配為高速緩存存儲器390的第一存儲器段的狀態(tài)從“空閑的”改變?yōu)椤案蓛舻摹薄H绻臻e存儲器395不夠,那么存儲器管理器320可重新分配高速緩存存儲器390 以滿足cachedreadO請求。如果有足夠的干凈的高速緩存可用,那么存儲器管理器320可重新分配如所需要的足夠的干凈高速緩存以保持cachedreadO方法調(diào)用中所指示的第二存儲器內(nèi)容的副本。存儲器管理器320可根據(jù)本領域公知的多種高速緩存替換策略(例如, 最近最少使用、隨機)選擇重新分配哪一高速緩存存儲器段。存儲器管理器320可向高速緩存用戶350發(fā)出imcachedreadO方法調(diào)用以讀取所指示的第二存儲器360的內(nèi)容。適當?shù)牡诙鎯ζ鲀?nèi)容可被寫入至新重新分配的高速緩存存儲器段中。由此,高速緩存存儲器段的舊內(nèi)容被丟棄并被讀取操作所指示的第二存儲器360的內(nèi)容替換。新的重新分配的高速緩存存儲器段的狀態(tài)保持“干凈的”。如果沒有足夠的干凈高速緩存可用以滿足cachedreadO請求(即,全部高速緩存存儲器段都被指定為“臟的”),那么存儲器管理器320可重新分配臟的高速緩存段以保持 cachedreadO操作所指示的第二存儲器內(nèi)容的副本。作為重新分配的一部分,存儲器管理器320向高速緩存用戶350發(fā)出imcachedwriteO命令以將臟的高速緩存存儲器段的內(nèi)容寫回至第二存儲器360。一旦臟的高速緩存內(nèi)容已被寫回至第二存儲器360,存儲器管理器 320可通過向高速緩存用戶350發(fā)出uncachedradO命令復制cachedreadO命令所指示的第二存儲器的內(nèi)容。新重新分配的高速緩存的狀態(tài)被設置為“干凈的”。存儲器管理器320可將空閑存儲器395分配為高速緩存存儲器390,并重新分配臟的和干凈的高速緩存存儲器390兩者以滿足cachedreadO命令。例如,如果存儲器管理器320確定cachedread(512MB,2MB)方法調(diào)用導致高速緩存未中,并且有1MB的空閑存儲器和512KB的干凈高速緩存可用,那么存儲器管理器320可將1MB的空閑存儲器分配為高速緩存存儲器,重新分配1MB的干凈高速緩存,并重新分配1MB的臟的高速緩存存儲器以服務cachedread ()方法調(diào)用。不管存儲器管理器320是否重新分配臟的或干凈的高速緩存以滿足 cachedreadO調(diào)用,一旦uncachedread()方法已經(jīng)由高速緩存用戶350執(zhí)行,那么存儲器管理器320就向高速緩存用戶350返回所請求的第二存儲器內(nèi)容,進而向調(diào)用組件330返回結(jié)果。存儲器系統(tǒng)300可以類似方式適應移動設備組件330的寫入請求。移動設備組件 330向高速緩存用戶350發(fā)出write ()方法調(diào)用。作為響應,高速緩存用戶350向存儲器管理器320發(fā)出cachedwriteO命令。存儲器管理器可確定所指示的第二存儲器段的副本是否存在于高速緩存存儲器390中(即,是否存在高速緩存命中或未中)。如果存在高速緩存命中,那么存儲器管理器320將所提供的數(shù)據(jù)寫入至對應于所指示的第二存儲器段的高速緩存存儲器段中,并將該高速緩存存儲器段的狀態(tài)從“干凈的”改變?yōu)椤芭K的”。如果所指示的第二存儲器內(nèi)容并沒有位于高速緩存存儲器390中(即,存在高速緩存未中),那么存儲器管理器320可分配足以滿足cachedwriteO操作的未使用存儲器 370。如果有足夠的空閑存儲器395可用,那么存儲器管理器320可將空閑存儲器395分配為高速緩存存儲器390,并將所提供的數(shù)據(jù)寫入至剛分配的高速緩存的存儲器段中。如果沒有足夠的空閑存儲器395可用,那么存儲器管理器320可重新分配足以滿足cachedwrite () 請求的數(shù)量的高速緩存存儲器390。重新分配可涉及干凈的和臟的高速緩存兩者的重新分配,其中存儲器管理器320在重新分配任何臟的高速緩存之前重新分配干凈的高速緩存。如以上參考cachedreadO操作所詳細討論的,分配足夠的未使用存儲器370以滿足 cachedwriteO請求可包括分配空閑存儲器395以及重新分配干凈的和臟的高速緩存存儲
ο如果高速緩存存儲器段的大小與cachedwriteO命令中所提供的數(shù)據(jù)大小匹配,那么cachedwriteO操作并不需要存儲器管理器320向高速緩存用戶350發(fā)出 uncachedwriteO調(diào)用以將第二存儲器內(nèi)容復制到高速緩存中。這是因為高速緩存存儲器段的全部內(nèi)容可使用寫入數(shù)據(jù)來重寫。然而,如果存在高速緩存未中且新分配的高速緩存段的大小大于寫入數(shù)據(jù),那么存儲器管理器320可執(zhí)行imcachedread ()以復制新分配的高速緩存的段中所指示的第二存儲器內(nèi)容。這樣做可確保當臟的高速緩存段被寫回時不會有第二存儲器數(shù)據(jù)被丟失。例如,考慮以下情形,在該情形中存儲器管理器320接收指示在第二存儲器地址512MB處開始的1KB塊的第二存儲器360將被寫入的cachedwrite ()方法調(diào)用,并且存儲器管理器320確定該cachedwrite ()操作導致高速緩存未中。如果存儲器管理器320正在采用以2KB段分配高速緩存存儲器的高速緩存管理方案,那么存儲器管理器320 可分配2KB塊的高速緩存存儲器以適應該cachedwrite ()請求,并經(jīng)由uncachedread ()操作訪問第二存儲器360,以使用在第二存儲器地址512MB處開始的2KB的第二存儲器內(nèi)容填充所分配的高速緩存存儲器段。這允許當整個2KB塊被寫回至第二存儲器360時,不受寫入操作影響的第二存儲器內(nèi)容(在第二存儲器地址513MB處開始的1KB的第二存儲器)被保留。一旦已分配足夠的高速緩存存儲器以滿足cachedwriteO操作,且任何第二存儲器內(nèi)容都被復制至高速緩存器中,存儲器管理器320就可通過將所指示的數(shù)據(jù)寫入至高速緩存存儲器來執(zhí)行所請求的寫入操作。被寫入的高速緩存存儲器段的狀態(tài)被設置為“臟的”。通過接收由組件330發(fā)出的flushO方法調(diào)用,可強迫存儲器管理器320將高速緩存存儲器的內(nèi)容寫回至第二存儲器360。從組件330接收flushO方法調(diào)用的高速緩存用戶350可向存儲器管理器320發(fā)出flushO調(diào)用。這些flushO操作可由移動設備組件 330調(diào)用,例如,周期性地或異步地將高速緩存存儲器390與第二存儲器360同步以防止停電或其他事件導致的數(shù)據(jù)丟失。在接收到flushO方法調(diào)用時,存儲器管理器320可執(zhí)行 uncachedwriteO命令以將任何臟的高速緩存存儲器段寫入至第二存儲器360。當接收到malloc ()方法調(diào)用時,存儲器管理器320可分配未使用的存儲器370為已使用的存儲器380以滿足該分配請求。存儲器管理器320可首先確定是否有足夠的空閑存儲器395可用。如果是,那么存儲器管理器320可分配足夠的空閑存儲器395以服務該分配請求。如果沒有足夠的空閑存儲器395可用,那么存儲器管理器320可重新分配充足的高速緩存存儲器390以服務該mallocO命令。干凈的或臟的高速緩存存儲器都可被重新分配為已使用的存儲器。在將任何指定為“臟的”高速緩存存儲器段重新分配為已使用的存儲器380之前,存儲器管理器320可向高速緩存用戶350發(fā)出uncachedwrite ()命令以將任何臟的高速緩存存儲器段的內(nèi)容寫入至第二存儲器360。不管高速緩存存儲器390 或空閑存儲器395是否被分配為已使用的存儲器380,存儲器管理器320將受影響的第一存儲器段的狀態(tài)設置為“已使用的”。響應于接收到釋放存儲器free ()命令,存儲器管理器320可將已使用的存儲器 380重新分配為未使用的存儲器370,并將重新分配的第一存儲器段的狀態(tài)設置為“空閑的”。圖4(a)_4(j)示出了移動設備中的示例性的第一存儲器的存儲器地圖以及各種存儲器操作執(zhí)行后已使用的和未使用的第一存儲器數(shù)量。在本示例中,第一存儲器包括 128MB的存儲器,移動設備可訪問8GB的第二存儲器,第二存儲器可以是外部硬盤驅(qū)動器、 SD卡等。圖4(a)示出了反映一移動設備狀態(tài)的第一存儲器圖400,在該狀態(tài)中U8MB第一存儲器都沒有被分配為高速緩存存儲器或由移動設備組件使用。U8MB第一存儲器全部被指定為空閑存儲器。圖4(b)示出了在移動設備應用程序已通過發(fā)出mallOC(32MB)命令請求了 32MB 的存儲器之后的第一存儲器圖410。移動設備管理器已分配最低的32MB第一存儲器來由應用程序使用并指定該32MB存儲器段為“已使用的”。較高的96MB第一存儲器保持未使用的,空閑的存儲器。圖4(c)示出了由希望讀取在第二存儲器地址1024MB(1GB)處開始的32MB第二存儲器的移動設備應用程序發(fā)出的read(1024MB,32MB)命令執(zhí)行之后的第一存儲器圖420。應用程序向高速緩存用戶發(fā)出讀取命令,高速緩存用戶進而向存儲器管理器發(fā)出 cachedread (1024MB, 32MB)命令。存儲器管理器分配在第一存儲器地址32MB處開始的32MB 第一存儲器為高速緩存存儲器,并向高速緩存用戶發(fā)出imcachedread (1024MB,32MB)方法調(diào)用以讀取在第二存儲器地址1024MB處開始的32MB第二存儲器至高速緩存存儲器中。存儲器管理器指定所分配的高速緩存存儲器段為“干凈的”。盡管32MB的未使用存儲器被分配為高速緩存,可用于分配給移動設備應用程序和資源的未使用存儲器的數(shù)量保持不變。 在read()操作執(zhí)行之后,有96MB的未使用存儲器(32MB高速緩存/64MB空閑)和32MB的已使用存儲器。圖4(d)示出了在兩個讀取命令和由移動設備應用程序發(fā)出的存儲器分配命令執(zhí)行后的第一存儲器圖430。第一讀取命令,向高速緩存用戶發(fā)出的read(1040MB,lMB)導致高速緩存用戶向存儲器管理器發(fā)出cachedread(1040MB,1MB)命令。由于高速緩存存儲器已經(jīng)包含所請求的第二存儲器內(nèi)容,因此存儲器管理器執(zhí)行讀取操作并向高速緩存用戶返回該內(nèi)容。從其中讀取的高速緩存存儲器段的狀態(tài)保持“干凈的”。向高速緩存用戶發(fā)出的第二讀取命令reacK2048MB,32MB)導致高速緩存用戶向存儲器管理器發(fā)出caChedread(2048MB,32MB)命令。存儲器管理器確定在地址 2048MB(2GB)處開始的32MB第二存儲器的副本并沒有駐留在高速緩存中(即,存在高速緩存未中),并響應于該高速緩存未中分配在地址96MB處開始的32MB的空閑存儲器為高速緩存存儲器。存儲器管理器然后向高速緩存用戶發(fā)出uncachedread (2048,32MB)命令,高速緩存用戶進而讀取在地址2048MB處開始的32MB第二存儲器。這些第二存儲器內(nèi)容然后被寫入至在地址96MB處開始的32MB第一存儲器中。存儲器管理器指定新分配的高速緩存存儲器段為“干凈的”。存儲器分配命令,malloc (32MB),導致存儲器管理器將在地址64MB處開始的32MB 第一存儲器轉(zhuǎn)換為供應用程序使用,并將所分配的第一存儲器段的狀態(tài)從“空閑的”改變?yōu)?“已使用的”。在read()和mallocO操作執(zhí)行后,高速緩存的大小從32MB動態(tài)地增大至 64MB,有64MB的未使用存儲器(64MB高速緩存/OMB空閑)和64MB的已使用存儲器。全部未使用存儲器已被分配為高速緩存存儲器。圖4(e)示出了在由應用程序向高速緩存用戶發(fā)出的write (1040MB,16MB)命令執(zhí)行后的第一存儲器圖440。高速緩存用戶響應于接收write (1040MB,16MB)方法調(diào)用,進而向存儲器管理器發(fā)出cachedWrite(1040MB,16MB)命令。存儲器管理器確定在地址1040MB 處開始的16MB第二存儲器的副本存儲于高速緩存存儲器中,在第一存儲器地址32MB處開始,將16MB的寫入數(shù)據(jù)寫入至高速緩存存儲器中,并將在地址32MB處開始的第一存儲器段的狀態(tài)從“干凈的”改變?yōu)椤芭K的”。在寫入操作執(zhí)行之后,有64MB的未使用存儲器(64M高速緩存/OMB空閑)和64MB的已使用存儲器。圖4 (f)示出了由希望讀取在第二存儲器地址4096MB (4GB)處開始的16MB第二存儲器的應用程序發(fā)出的讀取操作執(zhí)行之后的第一存儲器圖450。讀取操作由向高速緩存用戶發(fā)出read(4096MB,16MB)操作的應用程序執(zhí)行,高速緩存用戶進而向存儲器管理器發(fā)出 cachedread(4096MB,16MB)命令。存儲器管理器確定所請求的第二存儲器段的副本并不在高速緩存存儲器中,并且可用的空閑存儲器不足以滿足cachedreadO請求。存儲器管理器選擇在第一存儲器地址112MB處開始的16MB高速緩存存儲器用于重新分配。由于高速緩存存儲器的該段被指定為“干凈的”,因此存儲器管理器并不將它的內(nèi)容寫回至第二存儲器中。存儲器管理器然后發(fā)出uncachedread(4096MB,16MB)命令以將所請求的第二存儲器內(nèi)容的副本加載至高速緩存存儲器中,并將重新分配的高速緩存存儲器段的狀態(tài)設置為“干凈的”。在readO操作執(zhí)行之后,有64MB的未使用存儲器(64MB高速緩存/OMB空閑)和 64MB的已使用存儲器。圖4(g)示出了在導致全部高速緩存存儲器被指定為“臟的”的兩個寫入操作執(zhí)行之后的第一存儲器圖460。由應用程序向高速緩存用戶發(fā)出的第一寫入操作 write (2048MB, 16MB)導致高速緩存用戶向存儲器管理器發(fā)出cachedwrite (2048MB,16MB) 命令。存儲器管理器確定所請求的第二存儲器內(nèi)容已經(jīng)在高速緩存存儲器中,將寫入數(shù)據(jù)寫入至適當?shù)母咚倬彺娑螇K(在地址96MB處開始的16MB第一存儲器段),并將該存儲器段的狀態(tài)改變?yōu)椤芭K的”。由應用程序發(fā)出的第二寫入操作write (4096MB,16MB)以類似的方式被執(zhí)行,寫入數(shù)據(jù)被寫入至在地址112MB處開始的16MB塊的第一存儲器,并且該高速緩存存儲器段的狀態(tài)被設置為“臟的”。在兩個寫入操作執(zhí)行之后,仍然有64MB的未使用存儲器(64M高速緩存/OMB空閑)和64MB的已使用存儲器。
圖4(h)示出了在由應用程序發(fā)出的請求使用16MB的第一存儲器的存儲器分配操作執(zhí)行之后的第一存儲器圖470。應用程序向存儲器管理器發(fā)出mall0C(16MB)方法調(diào)用。存儲器管理器確定有64MB的未使用存儲器可用于分配,沒有足夠的空閑存儲器和“干凈的”高速緩存存儲器,并且“臟的”高速緩存存儲器段需要被重新分配以服務malloc ()請求。存儲器管理器選擇在地址32MB處開始的16MB塊的第一存儲器用于分配,并向高速緩存用戶發(fā)出uncachedwrite (1024MB,16MB)以將重新分配的高速緩存存儲器段的內(nèi)容寫回至第二存儲器中。存儲器管理器然后指定重新分配的第一存儲器段為“已使用的”。在釋放存儲器操作執(zhí)行后,高速緩存存儲器的大小從64MB減小至48MB,有48MB的未使用存儲器 (48MB高速緩存,0空閑)和80MB的已使用存儲器。圖4(i)示出了在由應用程序向存儲器管理器發(fā)出的釋放存儲器命令free(16MB) 執(zhí)行后的第一存儲器圖480。存儲器管理器釋放最低的16MB第一存儲器,并將此第一存儲器段的狀態(tài)設置為“空閑的”。在釋放存儲器操作執(zhí)行之后,有64MB的未使用存儲器(48MB 高速緩存/16MB空閑)和64MB的已使用存儲器。圖4(j)示出了在由應用程序向存儲器管理器發(fā)出的存儲器分配命令 malloc (32MB)執(zhí)行之后的第一存儲器圖490。存儲器管理器確定16MB的空閑存儲器可用于分配,并且16MB的高速緩存存儲器需要被重新分配以適應分配請求。存儲器管理器選擇在第一存儲器地址112MB處開始的16MB的“臟的”高速緩存以重新分配為已使用的存儲器。 存儲器管理器向高速緩存用戶發(fā)出uncachedWrite(4096MB,16MB)命令以將將被重新分配的高速緩存存儲器段的內(nèi)容寫回至第二存儲器中。當寫回操作完成時,存儲器管理器分配在第一存儲器地址0處開始的16MB的空閑存儲器,并重新分配在地址112MB處開始的16MB 塊的第一存儲器以供調(diào)用應用程序使用,并將這兩個第一存儲器塊的狀態(tài)設置為“已使用的”。在存儲器分配操作執(zhí)行之后,有32MB的未使用存儲器(32MB高速緩存/OMB空閑)和 96MB的已使用存儲器。盡管圖4(a)_4(j)所示的存儲器圖示出了連續(xù)的空閑、已使用的和高速緩存存儲器段,但應當理解的是,并不要求存儲器段駐留在物理存儲器的連續(xù)塊中。例如,圖4(j)所示的32MB的第一存儲器的分配導致多個非連續(xù)的第一存儲器段被分配。由此,盡管對應用程序而言所分配的32MB存儲器段看上去是單獨的連續(xù)段的虛擬存儲器,但該32MB存儲器段并不是連續(xù)塊的物理存儲器。圖5是動態(tài)地增大在計算設備的第一存儲器內(nèi)所分配的高速緩存存儲器大小的第一示例性方法500的流程圖。方法500可由包括嵌入式RAM和閃存的移動蜂窩電話來執(zhí)行,并執(zhí)行web瀏覽器應用程序。在510處,提供計算設備中的第一存儲器,其可被分配為高速緩存存儲器或由該蜂窩電話組件使用。在該示例中,嵌入式RAM被提供為第一存儲器,嵌入式閃存為第二存儲器。在520處,響應于第一高速緩存未中,第一存儲器的第一段被分配為高速緩存存儲器的一段,在該示例中,web瀏覽器發(fā)出命令以從閃存讀取。蜂窩電話確定讀取命令所指示的閃存內(nèi)容并不在RAM中,導致高速緩存未中。作為響應,蜂窩電話將第一存儲器的一段分配為高速緩存并將所指示的閃存內(nèi)容復制至高速緩存中。在530 處,通過響應于后續(xù)的高速緩存未中將第一存儲器的另外的段分配為高速緩存存儲器的另外的段,動態(tài)地增大高速緩存存儲器的大小。在該示例中,web瀏覽器應用程序發(fā)出另外的命令以讀取閃存內(nèi)容。蜂窩電話確定這些另外的命令中的一個或多個導致后續(xù)的高速緩存未中。響應于后續(xù)的未中,蜂窩電話將RAM的另外的段分配為高速緩存存儲器,由此增加了高速緩存存儲器的大小,并將適當?shù)牡诙鎯ζ鲀?nèi)容復制至嵌入式RAM中。在一些實施例中,方法500可進一步包括通過重新分配一部分高速緩存存儲器供計算設備組件使用以動態(tài)地減小高速緩存存儲器的大小。例如,web瀏覽器應用程序可請求分配一部分第一存儲器由該瀏覽器使用。作為響應,蜂窩電話可重新分配已被分配為高速緩存存儲器的一部分RAM以滿足存儲器分配請求,由此減小高速緩存存儲器的大小。由此, 即使當高速緩存的大小已增加,被分配為高速緩存的存儲器對于設備應用程序而言看上去仍然為未使用的存儲器,并可用于由該應用程序使用。圖6是動態(tài)地增大在計算設備的第一存儲器內(nèi)所分配的高速緩存存儲器大小的第二示例性方法600的流程圖。方法600可由膝上型計算機執(zhí)行,執(zhí)行文字處理和電子表格應用程序,包含嵌入式RAM并連接至外部硬盤驅(qū)動器。在610處,提供計算設備中的第一存儲器,其可被分配為高速緩存存儲器或由一個或多個計算設備組件使用。在該示例中,RAM 被提供為第一存儲器,其可被分配為高速緩存存儲器或由多種膝上型應用使用。外部硬盤驅(qū)動器為第二存儲器。在620處,從一個或多個計算設備組件接收第一第二存儲器讀或?qū)懻埱?。在該示例中,從文字處理程序接收請求以從硬盤驅(qū)動器讀取。在630處,響應于由第一第二存儲器讀或?qū)懻埱髮е碌牡谝桓咚倬彺嫖粗?,第一存儲器的第一段被分配為高速緩存存儲器的一段。在該示例中,響應于導致高速緩存未中的硬盤驅(qū)動器讀請求,膝上型計算機分配RAM的一段為高速緩存存儲器。即,讀命令中所指示的硬盤驅(qū)動器內(nèi)容之前沒有被復制至嵌入式RAM中。在640處,從一個或多個計算設備組件接收后續(xù)的第二存儲器讀或?qū)懻埱蟆T谠撌纠?,從文字處理程序接收后續(xù)的從硬盤驅(qū)動器讀取或?qū)懭胗脖P驅(qū)動器的請求。在650 處,通過響應于由后續(xù)的第二存儲器讀或?qū)懻埱髮е碌暮罄m(xù)的高速緩存未中分配第一存儲器的另外的段為高速緩存存儲器的另外的段,動態(tài)地增大高速緩存存儲器的大小。在該示例中,響應于由后續(xù)的硬盤驅(qū)動器讀和寫請求導致的后續(xù)高速緩存未中,膝上型計算機將另外的RAM段分配為高速緩存存儲器。在660處,從一個或多個計算設備組件其中之一接收存儲器分配請求。在該示例中,從電子表格應用程序接收存儲器分配請求。在670處,先前被分配為高速緩存存儲器段的一部分第一存儲器被重新分配供一個或多個計算設備組件其中之一使用。在該示例中,膝上型計算機將先前被分配為高速緩存存儲器段的一部分第一存儲器重新分配供電子表格應用程序使用。用于實現(xiàn)所公開的技術(shù)的任何計算機可執(zhí)行指令以及任何在所公開的實施例的實現(xiàn)過程中所創(chuàng)建和使用的數(shù)據(jù)都可存儲在一個或多個計算機可讀介質(zhì)(例如,非瞬態(tài)計算機可讀介質(zhì),諸如一個或多個光學介質(zhì)盤、易失性存儲器組件(諸如DRAM或SRAM)或非易失性存儲器組件(諸如閃存或硬盤驅(qū)動器)),并可計算機(例如,任何可購買的計算機, 包括包含計算硬件的智能電話或其它移動設備)上執(zhí)行。計算機可執(zhí)行指令可以是專用軟件應用程序或,例如,經(jīng)由web瀏覽器或其他軟件應用程序(諸如遠程計算應用程序)訪問或下載的軟件應用程序的一部分。例如,在單個本地計算機(例如,任何合適的可購買計算機)上或在使用一個或多個網(wǎng)絡計算機的網(wǎng)絡環(huán)境(例如,經(jīng)由因特網(wǎng)、廣域網(wǎng)、局域網(wǎng)、客戶機-服務器網(wǎng)絡(諸如,云計算網(wǎng)絡)、或其他此類網(wǎng)絡)中執(zhí)行這些軟件。為清楚起見,只描述了基于軟件的各實現(xiàn)的某些所選擇的方面。省略了本領域公知的其他細節(jié)。例如,應當理解,所公開的技術(shù)不限于任何特定計算機語言、或程序。例如, 所公開的技術(shù)可由用C++、Java、Perl、Javakript、AdobeFlash、或任何其他合適的編程語言編寫的軟件來實現(xiàn)。同樣,所公開的技術(shù)不限于任何特定計算機或硬件類型。合適的計算機和硬件的某些細節(jié)是公知的,并且無需在本公開中進行詳細闡述。此外,基于軟件的實施方式中的任一個(包括例如用于使計算機執(zhí)行所公開的方法中的任一種的計算機可執(zhí)行指令)可以通過合適的通信手段來上傳、下載、或遠程訪問。 這些合適的通信手段包括,例如,因特網(wǎng)、萬維網(wǎng)、內(nèi)聯(lián)網(wǎng)、軟件應用、電纜(包括光纜)、磁通信、電磁通信(包括RF、微波和紅外通信)、電子通信或任何這樣的通信手段。所公開的方法、裝置和系統(tǒng)決不應被解釋成限制性的。相反,本發(fā)明針對各公開的實施方式(單獨地或彼此的各種組合和子組合)的所有新穎和非顯而易見特征和方面。所公開的方法、裝置和系統(tǒng)不限于任何具體方面或特征或其組合,所公開的各實施方式也不要求存在任何一個或多個具體優(yōu)點或解決各個問題。本文中參照本公開的裝置或方法給出的操作理論、科學原理、和其它理論性描述已出于更好理解的目的而被提供,其并非旨在對范圍進行限制。所附權(quán)利要求中的裝置和方法并不限于以此類操作理論所描述的方式起作用的那些裝置和方法。雖然為方便呈現(xiàn)起見所公開的方法的一些操作是以特定的順序次序來描述的,但應當理解,這一描述方法涵蓋重新安排,除非以下闡明的具體語言需要特定排序。例如,順序地描述的操作可在某些情況下被重新安排或并發(fā)執(zhí)行。此外,為簡明起見,附圖未能示出可結(jié)合其他系統(tǒng)、方法、和裝置使用所公開的系統(tǒng)、方法、和裝置的各種方式。另外,本說明書有時使用像“產(chǎn)生”和“提供”等術(shù)語來描述所公開的方法。這些術(shù)語是所執(zhí)行的實際計算機操作的高級抽象。與這些術(shù)語相對應的實際計算機操作取決于特定實現(xiàn)而不同并且易于由本領域普通技術(shù)人員辨別。在示出和描述了所示實施方式的原理之后,可采用多種安排來修改該實施方式并仍然保持忠實于以上所描述的概念。鑒于可應用所公開的本發(fā)明的原理的許多可能的實施例,應當認識到,所示實施例僅是本發(fā)明的優(yōu)選示例,并且不應認為是限制本發(fā)明的范圍。 相反,本發(fā)明的范圍由所附權(quán)利要求書來限定。因此,要求保護落入這些權(quán)利要求的范圍內(nèi)的所有內(nèi)容作為本發(fā)明。
權(quán)利要求
1.一種管理計算設備(300)的存儲器的方法,所述方法包括提供所述計算設備(300)中的第一存儲器(340),所述第一存儲器(340)可被分配為高速緩存存儲器(390)或供一個或多個計算設備組件(330)使用;響應于第一高速緩存未中,將所述第一存儲器(340)的第一段分配為所述高速緩存存儲器(390)的一段;以及通過響應于后續(xù)的高速緩存未中將所述第一存儲器(340)的額外的段分配為所述高速緩存存儲器(390)的額外的段,動態(tài)地增大所述高速緩存存儲器(390)的大小;
2.如權(quán)利要求1所述的方法,其特征在于,所述高速緩存存儲器(390)表現(xiàn)為未使用存儲器(370),使得所述動態(tài)地增大高速緩存存儲器(390)的大小并不減小所述一個或多個計算設備組件(330)可用的第一存儲器(340)的數(shù)量。
3.如權(quán)利要求1所述的方法,其特征在于,將基本上全部的未被分配供所述一個或多個計算設備組件(330)使用的第一存儲器(340)分配為所述高速緩存存儲器(390)的段。
4.如權(quán)利要求1所述的方法,其特征在于,還包括通過重新分配高速緩存存儲器(390) 的一部分供所述一個或多個計算設備組件(330)使用來動態(tài)地減小所述高速緩存存儲器 (390)的大小。
5.如權(quán)利要求1所述的方法,其特征在于,所述第一高速緩存未中或任何后續(xù)的高速緩存未中由所述一個或多個計算設備組件(330)發(fā)出的第二存儲器(360)讀或?qū)懻埱髮е?,其中高速緩存用戶接收所述第二存儲?360)讀或?qū)懻埱?,所述方法還包括所述高速緩存用戶發(fā)出高速緩存存儲器讀或?qū)懻埱蟆?br>
6.一種編程為執(zhí)行一種方法的計算設備(300),所述方法包括提供所述計算設備(300)中的第一存儲器(340),所述第一存儲器(340)可被分配為高速緩存存儲器(390)或供一個或多個計算設備組件(330)使用;響應于第一高速緩存未中,將所述第一存儲器的第一段分配為高速緩存存儲器(390) 的一段;以及通過響應于后續(xù)的高速緩存未中將所述第一存儲器(340)的額外的段分配為所述高速緩存存儲器的額外的段,動態(tài)地增大所述高速緩存存儲器(390)的大小。
7.如權(quán)利要求6所述的計算設備(300),其特征在于,所述高速緩存存儲器(390)是所述計算設備(300)可訪問的第二存儲器(360)的高速緩存存儲器(390)。
8.如權(quán)利要求7所述的計算設備(300),其特征在于,所述第一存儲器(340)包括非易失性RAM,所述第二存儲器(360)包括不可移動閃存。
9.如權(quán)利要求7所述的計算設備(300),其特征在于,所述第一存儲器(340)包括不可移動存儲器,所述第二存儲器(360)包括可移動存儲器或外部存儲器。
10.存儲用于使計算機設備(300)執(zhí)行一種方法的計算機可執(zhí)行指令的一種或多種計算機可讀存儲介質(zhì),所述方法包括提供所述計算設備(300)中的第一存儲器(340),所述第一存儲器(340)可被分配為高速緩存存儲器(390)或由一個或多個計算設備組件(330)使用;從所述一個或多個計算設備組件(330)接收第一第二存儲器讀或?qū)懻埱螅豁憫谟伤龅谝坏诙鎯ζ?360)讀或?qū)懻埱髮е碌牡谝桓咚倬彺嫖粗?,分配所述第一存儲?340)的第一段為所述高速緩存存儲器(390)的一段;從所述一個或多個計算設備組件(330)接收后續(xù)的第二存儲器(360)讀或?qū)懻埱螅?通過響應于由后續(xù)的第二存儲器(360)讀或?qū)懻埱髮е碌暮罄m(xù)的高速緩存未中將所述第一存儲器(340)的額外的段分配為所述高速緩存存儲器(390)的額外的段,動態(tài)地增大所述高速緩存存儲器(390)的大?。粡乃鲆粋€或多個計算設備組件(330)其中之一接收存儲器分配請求;以及分配先前被分配為所述高速緩存存儲器(390)的段的一部分第一存儲器(340)以供所述一個或多個計算設備組件(330)其中之一使用。
全文摘要
一種管理計算設備的存儲器的方法,包括提供可被分配為高速緩存存儲器或可由計算設備組件使用的第一存儲器。響應于高速緩存未中,第一存儲器段可被分配為高速緩存存儲器。通過響應于后續(xù)的高速緩存未中將額外的第一存儲器段分配為高速緩存存儲器,可動態(tài)地增大高速緩存大小。通過重新分配第一存儲器高速緩存段以供計算設備組件使用,可動態(tài)地減小高速緩存存儲器大小。高速緩存存儲器可以是計算設備可訪問的第二存儲器的高速緩存。計算設備可以是移動設備。第一存儲器可以是嵌入式存儲器,第二存儲器可包括嵌入式、可移動或外部存儲器,或其任意組合。高速緩存存儲器的最大大小隨第一存儲器的大小縮放。
文檔編號G06F12/08GK102567224SQ20111041523
公開日2012年7月11日 申請日期2011年12月2日 優(yōu)先權(quán)日2010年12月2日
發(fā)明者A·M·羅杰斯, B-M·赫西 申請人:微軟公司