专利名称:高效高速缓存管理的制作方法
技术领域:
本发明涉及计算设备中的存储器管理,尤其涉及可被动态地被分配为高速缓存存储器以及可被计算设备组件使用的存储器的管理。
背景技术:
通过提供对设备内的或设备可访问的较大、较慢的存储器的改善的访问时间,高速缓存存储器可改善计算设备的总体性能。然而,由于高速缓存存储器通常小于存储器分层结构中较低层的存储器,其无法保持这样的较低层存储器的全部内容的副本。因此,由于改善的存储器访问时间而获得的性能增益被将较低层存储器段换入和换出高速缓存存储器所需的开销抵消。一般而言,由于高速缓存存储器是专用的存储器组件(例如,一个或多个专用的存储器芯片或模块),或者由于存储器空间一固定部分被指定为高速缓存存储器,高速缓存存储器大小是固定的。增加高速缓存存储器大小能减小高速缓存加载和写回操作发生的频率,而且在增大的高速缓存大小情况下高速缓存的未中率一般会下降。然而,一旦用较低层存储器内容填充高速缓存存储器,高速缓存一般就无法提供附加的存储器系统性能改进。 如果固定的高速缓存存储器大小非常大,那么未使用的高速缓存对其他系统组件是不可用的,而且会被浪费。由此,需要更高效地使用高速缓存存储器,例如不限制其他系统组件,但是当需要时允许充足的高速缓存。
发明内容
此处公开了存储器管理方法,提供了计算设备中可动态地改变大小的高速缓存, 可响应于高速缓存未中而自动扩大并响应于设备组件的存储器分配请求而收缩。在一个实施例中,计算设备的第一存储器(例如,计算设备的存储器分层结构内较高等级的存储器)可被分配为第二存储器(例如,在存储器分层结构中低于第一存储器的存储器等级)的高速缓存存储器,或被应用程序或计算设备的其他组件使用。例如,蜂窝电话中的嵌入式RAM可被分配为可移动非易失性闪存卡的高速缓存存储器。当执行在蜂窝电话上的应用程序请求对存储卡的读/写访问时,如果未使用的RAM是可用的,电话可响应于高速缓存未中而动态地扩大分配为高速缓存的那部分RAM。高速缓存可响应于每一高速缓存未中而增大,并可增大以填充任何未使用的RAM。如果应用程序请求RAM的一部分被分配来供该应用程序使用,并且高速缓存已经消耗了 RAM中全部可用的空闲存储器,那么电话可重新分配高速缓存的一部分来供该应用程序使用。因此,高速缓存大小可响应于存储器分配请求而收缩。因而,高速缓存被认为是未使用的存储器,因此并不减少对应用程序和计算设备的其他组件可用的存储器数量,而不管高速缓存的大小。高速缓存的大小随第一存储器的大小而缩放。例如,如果嵌入式RAM的大小因添加更多存储器组件而增大,那么高速缓存的最大可能大小可相应地增大。
参考附图阅读以下详细描述,将更清楚本发明的前述和其他目标、特征和优点。
图1是示例性移动设备的框图。图2是其中可操作图1的示例性移动设备的云计算环境的框图。图3是移动设备的示例性存储系统的框图。图4(a)_4(j)示出了移动设备中的示例性第一存储器的存储器图以及各种存储器操作执行后第一存储器中已使用的和未使用的存储器数量。图5是动态地增大在计算设备的第一存储器内分配的高速缓存存储器大小的第一示例性方法的流程图。图6是动态地增大在计算设备的第一存储器内分配的高速缓存存储器大小的第二示例性方法的流程图。
具体实施例方式如在本申请和权利要求书中使用的,单数形式“一”、“一个”、和“该”包括复数形式,除非上下文清楚地另外指明。类似地,措词“或”旨在包括“和”,除非上下文清楚地指示其它情况。术语“包括”意味着“包含”,因此“包括A或B”意味着包含A或B以及一起包含A和B。另外,术语“包括”意味着“开放性包含”。进一步地,对存储器的“一部分”的引用可指向整个存储器或小于整个存储器。此外,术语“存储器段”意味着存储器的任何大小的一部分,并可指向存储器块或页。此外,由措词“基本上”修饰的术语包括与未被修饰的术语略微不同的量或数量。例如,其中“基本上全部”存储器已被非配为高速缓存存储器的存储器可包括相对少量的未被分配为高速缓存存储器的存储器。例如,这样的存储器可包括太小而不能响应于高速缓存未中被分配为高速缓存存储器的段。未分配为高速缓存存储器的数量可以是比特、千字节或者甚至兆字节的数量级,可以在单独的存储器段中,也可以放在一起。此外,术语“分配”和“重新分配”都指的是指定存储器的一部分来针对不同的用途,而且就这一点而言是互换地使用的。图1是可用于执行本文中所描述的任何方法的示例性移动设备100的框图。移动设备100可以是诸如智能手机、膝上型计算机、平板计算机或上网本计算机之类的任何移动计算设备。移动设备100可包括各种可任选的硬件和软件组件105。该移动设备100中的任何组件105可与任何其他组件通信,尽管出于容易例示的目的,未示出所有组件。所示移动设备100可包括用于执行如信号编码、数据处理、输入/输出处理、电源控制和/或其他功能等任务的控制器或处理器110(例如,信号处理器、微处理器、ASIC、或其他控制和处理逻辑电路或软件)。操作系统112可控制对组件105的分配和使用,并支持一个或多个应用程序114。应用程序可包括公共移动计算应用程序(例如,电子邮件应用程序、日历、联系人管理器、web浏览器、消息接发应用程序)、或任何其他计算应用。所示移动设备100可包括存储器120。存储器120可包括不可移动存储器122和 /或可移动存储器124。不可移动或嵌入式存储器122可包括RAM、ROM、闪存、硬盘驱动器、 或其他众所周知的存储器存储技术。可移动存储器1 可包括闪存卡(例如,SD(安全数字)卡、miniSD卡、microSD卡、SDHC(高容量SD)卡或SD)(C(扩展容量SD)卡)、记忆棒、订户身份模块(SIM)卡——其在GSM(全球移动通信)系统中是众所周知的,或者其他众所周知的存储器存储技术,诸如“智能卡”。存储器120可用于存储数据和/或用于运行操作系统112和应用程序114的代码。示例数据可包括可由移动计算设备100经由一个或多个有线或无线网络发送给一个或多个网络服务器或其他设备或者从其接收的网页、文本、图像、 声音文件、视频数据或其他数据集。存储器120可用于存储诸如国际移动订户身份(IMSI) 等订户标识符,以及诸如国际移动设备标识符(IMEI)等设备标识符。这些标识符可被传送给网络服务器以标识用户和装备。移动设备120也可访问外部存储器1 ——其可包括例如外部硬盘驱动器或移动设备120通过有线或无线网络连接可访问的任何存储器存储。存储器120的任何部分都可被移动设备100利用为高速缓存存储器。移动设备100可支持诸如触摸屏132、话筒134、照相机136、物理键盘138、和/或轨迹球139等一个或多个输入设备130,以及诸如扬声器142和显示器144等一个或多个输出设备140。其他可能的输出设备(未示出)可包括压电或其他触觉输出设备。一些设备可服务超过一个输入/输出功能。例如,触摸屏132和显示器144可被组合在单个输入 /输出设备中。输入设备130或输出设备140中的任一个可内置或外置于移动设备100。无线调制解调器160可被耦合到无线调制解调器天线162,并可支持移动设备100 和外部设备之间的双向通信,如本领域中清楚理解的。调制解调器160和天线162被一般性地示出,并且可以是用于与无线蜂窝通信网络通信的无线蜂窝调制解调器。无线调制解调器160可包括其他基于无线电调制解调器,诸如Wi-Fi调制解调器163或蓝牙调制解调器164,其中的每一个都可被耦合至其自己的天线(例如,Wi-Fi天线168、蓝牙天线169)。 无线调制解调器160通常被配置成与一个或多个蜂窝网络(诸如,用于单个蜂窝网络内、蜂窝网络之间、或移动设备与公共交换电话网络(PSTN)之间的数据和语音通信的GSM网络) 进行通信。移动设备100还可包括包含物理连接器172的至少一个输入/输出端口 170(其可以是例如USB端口、IEEE 1394(火线)端口、和/或RS-232端口)、电源174、诸如GPS接收机175等的卫星导航系统接收机、陀螺仪176、加速计177、和罗盘178。GPS接收机175 可被耦合至GPS天线179。移动设备100可另外包括耦合至AM/FM接收机185的AM/FM天线180,用于接收由AM/FM无线电信号发射机广播的无线电信号。移动设备100还可包括一个或多个附加天线190,这些附加天线190被耦合至一个或多个附加接收机、发射机和/或收发机195以实现各种附加功能。例如,移动设备100可包括耦合至附加接收机195的附加天线190,该接收机195被配置成接收和处理数字音频无线电服务(DARQ信号以在移动设备100或附连的附件处输出。尽管各个天线被示为移动设备100的分开的硬件组件,但是它们可被结合到其他组件中。例如,GPS天线179可被结合到GPS接收机175中。另外,在图1中示为分开的天线可被实现为单个天线。例如,AM/FM天线180和GPS天线179可以是由GPS接收机175和 AM/FM接收机185共享的单个天线。此外,多个天线可被连接至开关,以允许将组件耦合至若干个天线源中的一个,或一个以上的天线源。例如,AM/FM接收机185可被连接至允许将 AM/FM天线180或在移动设备100外部的天线用作AM/FM接收机天线源的开关(未示出)。 开关还可被配置成允许将AM/FM天线180和外部天线、或多个天线同时用作AM/FM接收机 185的天线源。所示组件105不是必需的或所有都包括的,因为可删除任何组件并且可添加其他组件。图2示出了适当的实现环境200的通用示例,所描述的实施例、方法和技术可以在其中实现,并且本文所描述的任何移动设备和计算设备都可在其中操作。在示例环境200中,由云210提供各种类型的服务(例如,计算服务)。例如,云 210可包括可位于中央或是分布式的计算设备集,其向经由诸如因特网等网络连接的各种类型的用户和设备提供基于云的服务。实现环境200可按不同方式用于实现计算任务。例如,一些任务(例如,存储器管理、处理用户输入和呈现用户界面)可在本地计算设备(例如,所连接的设备230、M0、250)上执行,而其他任务(例如,存储将在后继处理中使用的数据、访问位于云内的存储器存储)可在云210中执行。在示例环境200中,云210向具有各种屏幕能力的所连接的设备230、MO、250提供服务。所连接的设备230、M0、250可以是本文所描述的任何移动设备和计算设备。所连接设备230表示具有计算机屏幕(例如,中型屏幕235)的设备。例如,所连接的设备230可以是个人计算机,诸如台式计算机、膝上型计算机、笔记本、上网本等。所连接的设备240表示具有移动设备屏幕例如,小型屏幕)的移动设备。例如,所连接设备240可以是移动电话、智能电话、个人数字助理、平板计算机等。所连接设备250表示具有大屏幕255的设备。例如,所连接设备250可以是具有因特网连通性的电视机,或连接至诸如机顶盒、游戏控制台等能够连接到云的另一设备的电视机。所连接设备230、M0、250中的一个或多个可包括触摸屏能力。不具备屏幕能力的设备也可被用在示例环境200中。例如,云210可向没有显示器的一个或多个计算机(例如,服务器计算机)提供服务。可由云210通过服务提供方220、或通过其他在线服务的提供者(未描述)来提供服务。例如,云服务可被定制成对应于特定所连接设备(例如,所连接设备230、M0、250) 的屏幕大小、显示能力、和/或触摸屏能力。可由服务提供方220提供的服务包括例如电子邮件、短消息服务(SMQ、多媒体消息服务(MMS)、社交联网和网站主存。服务提供方可主存提供诸如软件应用程序和升级等各种商品和服务的在线市场,以及用户可通过购买或未通过购买获取的、用于从云下载或通过邮件传送的媒体内容。服务提供方220也可提供网络可访问的存储器——所连接的设备230、M0、250中的任一个可将其使用为第二存储器。在示例环境200中,云210至少部分地使用服务提供方230来向各种连接的设备 230,240,250提供此处描述的技术和方案。例如,服务提供方220可提供用于各种基于云的服务的集中式解决方案。服务提供方220可为用户和/或设备(例如,连接的设备230、 240、250和/或其各自的用户)管理服务订阅。尽管移动设备100被详细描述,但此处所描述的方法并不一定由移动设备来执行。此处所描述的方法可使用任何采用高速缓存存储器的计算设备来执行,包括一般并不被认为是“移动”设备的那些设备,诸如桌上型计算机、处理器等。这样的“非移动”计算设备可在图2的计算环境中操作。图3是采用本文中所描述的任何方法的移动设备310的示例性存储器系统300的框图。存储器系统300包括存储器管理器320、一个或多个移动设备组件330、第一存储器 340、一个或多个高速缓存用户350和第二存储器360。第一存储器340包括未使用的存储器370和已使用的存储器380。已使用的存储器380包括第一存储器340,第一存储器340已被分配为供诸如操作系统、其他软件应用程序或硬件组件之类的组件330使用。因而,已使用的存储器可用于存储计算机可执行的指令、程序数据或可被移动设备的控制器或处理器容易且快速地访问的任何其他数据。未使用的存储器370包括空闲存储器395和高速缓存存储器390。空闲存储器395是可被分配但还未被分配为高速缓存器390或已使用的存储器380的第一存储器340。高速缓存存储器390是已被分配来用作第二存储器360的高速缓存的第一存储器340。可以使用各种特征来将第一存储器340与第二存储器360区分开来。例如,第一存储器340可以指的是驻留在存储器分层结构内较高等级的存储器,大小较小,物理上位于距任何移动计算设备处理器更近之处,和/或相对于第二存储器360具有更快的存储器访问时间(例如,读/写时间)。也可以使用其他特征来将第一存储器340与第二存储器 360区分开来。移动设备存储器分层结构可包括以上参考图1所描述的可移动、不可移动和外部存储器的任意组合。在一个实施例中,第一存储器340可以是不可移动RAM(例如,SRAM或 DRAM),第二存储器360可以是分层结构中更大的、不可移动的闪存。在另一实施例中,第二存储器360可以是诸如SD卡的可移动闪存,或诸如USB硬盘驱动器或网络可访问的存储器存储的外部存储器设备。第一存储器340和第二存储器360每一个都可包括多个存储器组件或设备。例如,第一存储器340可包括嵌入在移动设备中的多个独立的RAM芯片或模块, 或集成在任何设备处理器或控制器中的RAM电路。此外,第一和第二存储器每一个都可包括存储器分层结构内多个等级的存储器。例如,第一存储器可包括集成在处理器中的RAM 电路和处理器外部的独立RAM,第二存储器360可包括附连至移动设备310的可移动SD卡和USB外部硬盘驱动器。此外,存储器分层结构可包括多于2个等级,分层结构内给定等级的存储器既可担当第一存储器340也可担当第二存储器360。即,给定等级的存储器相对于一个等级的存储器可以是第一存储器,相对于另一等级的存储器可以是第二存储器。例如,在包括256MB 嵌入式RAM、16GB嵌入式闪存和ITB外部硬盘驱动器存储的存储器分层结构中,嵌入式RAM 对于嵌入式闪存可担当第一存储器,而嵌入式闪存对于外部硬盘驱动器可担当第一存储器。因此,可利用此处所描述的方法来实现存储器系统中的多个高速缓存存储器。存储器管理器320可被实现为移动设备310的操作系统的一部分,并部分负责管理第一存储器340以用作高速缓存存储器390以及供移动设备组件330使用。存储器管理器320可直接与高速缓存用户350交互,并可直接或间接地(通过高速缓存用户350)与移动设备组件330交互。存储器管理器320可跟踪每一第一存储器段如何被利用或分配(例如,空闲存储器、已使用的存储器、干净的高速缓存或脏的高速缓存)。另外,存储器管理器320可响应于从组件330接收的命令,将空闲的第一存储器395分配为已使用的存储器 380,并将已使用的存储器380重新分配为空闲的存储器395。此外,存储器管理器320可响应于从高速缓存用户350接收到的高速缓存读和写命令自动地将空闲的第一存储器395分配为高速缓存存储器390,反之亦然,并可指示高速缓存用户350访问第二存储器360。高速缓存用户350包括文件系统、设备驱动或利用高速缓存存储器以改善第二存储器360性能的任何其他移动设备组件。高速缓存用户350可担当存储器管理器320和组件330之间以及存储器管理器320和第二存储器360之间的中介。例如,高速缓存用户350 可响应于从组件330接收命令,向存储器管理器320发出高速缓存读和写命令。高速缓存用户350也可响应于从存储器管理器320接收命令,向第二存储器360发出读和写命令。高速缓存用户350可以是存储器系统300的软件或硬件组件,可以位于移动设备310内部或外部。例如,高速缓存用户350可以是移动设备310内部的管理可移动和/或不可移动闪存的闪存管理器、外部存储器设备的设备驱动、或作为外部存储器设备的一部分的文件系
统管理器。移动设备组件330可包括以上所描述的移动设备硬件或软件组件105中的一个或多个,以及图1未描述的附加的硬件或软件组件。存储器管理器320可跟踪每一第一存储器段的状态,该状态指示该段是否是“空闲的”(可用于分配为高速缓存或由设备组件330使用)、“已使用的”(已分配供组件330 使用)、“干净的高速缓存”(“干净的”)或“脏的高速缓存”(“脏的”)。指定为“干净的” 第一存储器段是已被分配为高速缓存存储器并且其内容匹配于对应的第二存储器段的第一存储器段。当将空闲的存储器395的段分配为高速缓存存储器390时,存储器管理器320 可指定第一存储器段为“干净的”。只要读操作是在该段上执行的,或者直至该段被重新分配为空闲的存储器395或已使用的存储器380,“干净的”存储器段就可保持干净。被指定为“脏的”第一存储器段是已被分配为高速缓存并且其内容与对应的第二存储器段不同的第一存储器段。当执行对“干净的”高速缓存段的写操作时,存储器管理器 320可指定第一存储器高速缓存段为“脏的”。在将高速缓存存储器段分配为空闲的存储器或将该段重新分配以对应于不同的第二存储器段之前,存储器管理器320可执行写回操作,在写回操作中高速缓存存储器段内容被写回至对应的第二存储器段中以将第二存储器 360与高速缓存存储器390同步。在写回操作已执行后,高速缓存存储器端的状态可以从 “脏的”改变为“干净的”。响应于高速缓存未中,存储器管理器320可通过将空闲存储器395转换为高速缓存存储器390自动地分配高速缓存存储器390,由此动态地增加高速缓存存储器390的数量。然而,增加高速缓存存储器390的大小并不减小由移动设备组件330使用的可用的未使用存储器370的数量,因为未使用存储器370包括高速缓存存储器390和空闲存储器395 两者。由此,有可能基本上全部空闲存储器395都响应于高速缓存未中而自动地转换为高速缓存存储器390。换言之,基本上全部未使用存储器370都可被分配为高速缓存存储器 390。然而,在任何时刻,应用程序或组件都可请求未使用存储器,并响应于此放弃或重新分配一部分高速缓存。由此,对于未使用存储器的使用,应用程序和组件的存储器分配请求的优先级高于高速缓存。如果存储器管理器320从组件330接收到存储器分配请求且没有空闲存储器可用,那么存储器管理器320可重新分配如空闲存储器395般充足的一部分高速缓存390以满足该存储器分配请求。由此,此处所描述的方法提供了一种存储器管理方法,其中基本上全部的未使用存储器370可被分配为高速缓存存储器390,而不限制对移动设备组件330可用的第一存储器340的数量。因此,根据存储器管理器320接收到的高速缓存读、高速缓存写、存储器分配和释放存储器命令,可动态地增大或减小高速缓存存储器390的大小。由于基本上全部第一存储器340都可被分配为高速缓存存储器390,高速缓存存储器390的最大大小随第一存储器340的大小缩放。由此,对移动设备310的升级——包括增加第一存储器340的数量,例如通过将更多SDRAM存储器添加至空的存储器模块槽中或通过用更高密度的存储器模块替换已有的存储器模块——也增加了高速缓存存储器390的最大大小。在一个实施例中,高速缓存用户350、组件330以及第一存储器340可包括由多个组件中的每一个所呈现的应用程序接口(API)以实现此处所描述的存储器管理功能。例如,存储器管理器320可向高速缓存用户350呈现包括方法、操作或函数(方法) cacheread()、cachewrite ()和flush ()的API。高速缓存用户350可向存储器管理器320 呈现包括方法uncachedreadO和uncachedwrite ()的API,并可向移动设备组件330呈现包括方法 read()、write ()和 flush ()的 API。由存储器管理器320向组件330呈现的API方法可包括方法mallocO和free ()。 方法mall0C(Size)指导存储器管理器320分配所指示的数量的第一存储器340来由调用组件330使用。方法freekize)指导存储器管理器320释放所指示的数量的第一存储器 340。由高速缓存用户350向组件330呈现的API方法可包括具有所列出的参数的以下方法。方法read (SeCOnd_mem_addr,bytes)返回在所指示的第二存储器地址处开始的已指示数量的第二存储器字节。方法write (seconcLmenuaddr,data)将所指示的数据写入在所指示的第二存储器地址处开始的第二存储器中。方法flushO迫使存储器管理器320将指示为“脏的”的高速缓存存储器段的内容写回至第二存储器360。由存储器管理器320向高速缓存用户350呈现的API方法可包括以下方法。方法cachedread(second_mem_addr,bytes)从对应于所指示的第二存储器地址的部分高速缓存存储器中读取所指示数量的字节。方法cachedWrite(second_mem_addr,data)将所指示的数据写入对应于所指示的第二存储器地址的部分高速缓存存储器中。方法flush () 迫使存储器管理器320将脏的高速缓存存储器段的内容写入至第二存储器360。如以下所讨论的,方法uncachedreadO禾口 uncachedwrite ()可被调用为月艮务cachedreadO或 cachedwriteO请求的存储器管理器320的一部分。由高速缓存用户350向存储器管理器320呈现的API方法可包括以下方法。方法 uncachedread(second_mem_addr,bytes)在所指示的第二存储器地址处开始读取所指示的数量的第二存储器字节;而uncachedwrite (SeCOnd_mem_addr,data)将所指示的数据写入至在所指示的第二存储器地址处开始的第二存储器。在其他实施例中,此处所描述的存储器管理功能可使用包括具有不同的、更多或更少参数的以上所列出的方法的API来实现,可使用包括不同于以上所列出的方法集的 API来实现,或采用使用API以外的其他方式来实现。在一个实施例中,存储器系统300可服务移动设备组件330发出的方法调用如下。 关于readO操作,组件330向高速缓存用户350发出readO命令。作为响应,接收的高速缓存用户350向存储器管理器320发出cachedreadO命令以从高速缓存存储器390读取所请求的存储器内容。响应于接收cachedreadO命令,存储器管理器320可首先确定所请求的第二存储器内容的副本是否存在于高速缓存存储器390中(即,cachedreadO命令导致高速缓存命中还是未中)。存储器管理器320可使用查找表、地址标签等已知的方法跟踪哪一第二存储器段存在于高速缓存存储器390中。如果所请求的第二存储器内容存在于高速缓存存储器390中(即,存在高速缓存命中),那么存储器管理器320从高速缓存存储器 390读取所请求的内容并将所请求的内容返回至发出调用的高速缓存用户350。高速缓存用户350进而向请求组件330返回读取操作的结果。从其中读出高速缓存存储器内容的高速缓存存储器段的状态并不改变。指示为“干净的”高速缓存存储器段保持“干净的”,指示为“脏的”存储器块保持“脏的”。如果在cachedreadO方法中所指示的第二存储器内容的副本并没有驻留在高速缓存存储器390中(即,高速缓存未中),那么存储器管理器320可分配未使用的存储器 370为高速缓存存储器390以支持读取操作。如果有足够的可用空闲存储器395以容纳 cachedreadO请求,那么存储器管理器320可分配一部分空闲存储器395作为高速缓存存储器390,并向高速缓存用户350API发出uncachedread()方法调用。uncachedread()方法可访问第二存储器360并将第二存储器360的适当内容复制到新分配的高速缓存存储器段中。分配为高速缓存存储器390的第一存储器段的状态从“空闲的”改变为“干净的”。如果空闲存储器395不够,那么存储器管理器320可重新分配高速缓存存储器390 以满足cachedreadO请求。如果有足够的干净的高速缓存可用,那么存储器管理器320可重新分配如所需要的足够的干净高速缓存以保持cachedreadO方法调用中所指示的第二存储器内容的副本。存储器管理器320可根据本领域公知的多种高速缓存替换策略(例如, 最近最少使用、随机)选择重新分配哪一高速缓存存储器段。存储器管理器320可向高速缓存用户350发出imcachedreadO方法调用以读取所指示的第二存储器360的内容。适当的第二存储器内容可被写入至新重新分配的高速缓存存储器段中。由此,高速缓存存储器段的旧内容被丢弃并被读取操作所指示的第二存储器360的内容替换。新的重新分配的高速缓存存储器段的状态保持“干净的”。如果没有足够的干净高速缓存可用以满足cachedreadO请求(即,全部高速缓存存储器段都被指定为“脏的”),那么存储器管理器320可重新分配脏的高速缓存段以保持 cachedreadO操作所指示的第二存储器内容的副本。作为重新分配的一部分,存储器管理器320向高速缓存用户350发出imcachedwriteO命令以将脏的高速缓存存储器段的内容写回至第二存储器360。一旦脏的高速缓存内容已被写回至第二存储器360,存储器管理器 320可通过向高速缓存用户350发出uncachedradO命令复制cachedreadO命令所指示的第二存储器的内容。新重新分配的高速缓存的状态被设置为“干净的”。存储器管理器320可将空闲存储器395分配为高速缓存存储器390,并重新分配脏的和干净的高速缓存存储器390两者以满足cachedreadO命令。例如,如果存储器管理器320确定cachedread(512MB,2MB)方法调用导致高速缓存未中,并且有1MB的空闲存储器和512KB的干净高速缓存可用,那么存储器管理器320可将1MB的空闲存储器分配为高速缓存存储器,重新分配1MB的干净高速缓存,并重新分配1MB的脏的高速缓存存储器以服务cachedread ()方法调用。不管存储器管理器320是否重新分配脏的或干净的高速缓存以满足 cachedreadO调用,一旦uncachedread()方法已经由高速缓存用户350执行,那么存储器管理器320就向高速缓存用户350返回所请求的第二存储器内容,进而向调用组件330返回结果。存储器系统300可以类似方式适应移动设备组件330的写入请求。移动设备组件 330向高速缓存用户350发出write ()方法调用。作为响应,高速缓存用户350向存储器管理器320发出cachedwriteO命令。存储器管理器可确定所指示的第二存储器段的副本是否存在于高速缓存存储器390中(即,是否存在高速缓存命中或未中)。如果存在高速缓存命中,那么存储器管理器320将所提供的数据写入至对应于所指示的第二存储器段的高速缓存存储器段中,并将该高速缓存存储器段的状态从“干净的”改变为“脏的”。如果所指示的第二存储器内容并没有位于高速缓存存储器390中(即,存在高速缓存未中),那么存储器管理器320可分配足以满足cachedwriteO操作的未使用存储器 370。如果有足够的空闲存储器395可用,那么存储器管理器320可将空闲存储器395分配为高速缓存存储器390,并将所提供的数据写入至刚分配的高速缓存的存储器段中。如果没有足够的空闲存储器395可用,那么存储器管理器320可重新分配足以满足cachedwrite () 请求的数量的高速缓存存储器390。重新分配可涉及干净的和脏的高速缓存两者的重新分配,其中存储器管理器320在重新分配任何脏的高速缓存之前重新分配干净的高速缓存。如以上参考cachedreadO操作所详细讨论的,分配足够的未使用存储器370以满足 cachedwriteO请求可包括分配空闲存储器395以及重新分配干净的和脏的高速缓存存储
ο如果高速缓存存储器段的大小与cachedwriteO命令中所提供的数据大小匹配,那么cachedwriteO操作并不需要存储器管理器320向高速缓存用户350发出 uncachedwriteO调用以将第二存储器内容复制到高速缓存中。这是因为高速缓存存储器段的全部内容可使用写入数据来重写。然而,如果存在高速缓存未中且新分配的高速缓存段的大小大于写入数据,那么存储器管理器320可执行imcachedread ()以复制新分配的高速缓存的段中所指示的第二存储器内容。这样做可确保当脏的高速缓存段被写回时不会有第二存储器数据被丢失。例如,考虑以下情形,在该情形中存储器管理器320接收指示在第二存储器地址512MB处开始的1KB块的第二存储器360将被写入的cachedwrite ()方法调用,并且存储器管理器320确定该cachedwrite ()操作导致高速缓存未中。如果存储器管理器320正在采用以2KB段分配高速缓存存储器的高速缓存管理方案,那么存储器管理器320 可分配2KB块的高速缓存存储器以适应该cachedwrite ()请求,并经由uncachedread ()操作访问第二存储器360,以使用在第二存储器地址512MB处开始的2KB的第二存储器内容填充所分配的高速缓存存储器段。这允许当整个2KB块被写回至第二存储器360时,不受写入操作影响的第二存储器内容(在第二存储器地址513MB处开始的1KB的第二存储器)被保留。一旦已分配足够的高速缓存存储器以满足cachedwriteO操作,且任何第二存储器内容都被复制至高速缓存器中,存储器管理器320就可通过将所指示的数据写入至高速缓存存储器来执行所请求的写入操作。被写入的高速缓存存储器段的状态被设置为“脏的”。通过接收由组件330发出的flushO方法调用,可强迫存储器管理器320将高速缓存存储器的内容写回至第二存储器360。从组件330接收flushO方法调用的高速缓存用户350可向存储器管理器320发出flushO调用。这些flushO操作可由移动设备组件 330调用,例如,周期性地或异步地将高速缓存存储器390与第二存储器360同步以防止停电或其他事件导致的数据丢失。在接收到flushO方法调用时,存储器管理器320可执行 uncachedwriteO命令以将任何脏的高速缓存存储器段写入至第二存储器360。当接收到malloc ()方法调用时,存储器管理器320可分配未使用的存储器370为已使用的存储器380以满足该分配请求。存储器管理器320可首先确定是否有足够的空闲存储器395可用。如果是,那么存储器管理器320可分配足够的空闲存储器395以服务该分配请求。如果没有足够的空闲存储器395可用,那么存储器管理器320可重新分配充足的高速缓存存储器390以服务该mallocO命令。干净的或脏的高速缓存存储器都可被重新分配为已使用的存储器。在将任何指定为“脏的”高速缓存存储器段重新分配为已使用的存储器380之前,存储器管理器320可向高速缓存用户350发出uncachedwrite ()命令以将任何脏的高速缓存存储器段的内容写入至第二存储器360。不管高速缓存存储器390 或空闲存储器395是否被分配为已使用的存储器380,存储器管理器320将受影响的第一存储器段的状态设置为“已使用的”。响应于接收到释放存储器free ()命令,存储器管理器320可将已使用的存储器 380重新分配为未使用的存储器370,并将重新分配的第一存储器段的状态设置为“空闲的”。图4(a)_4(j)示出了移动设备中的示例性的第一存储器的存储器地图以及各种存储器操作执行后已使用的和未使用的第一存储器数量。在本示例中,第一存储器包括 128MB的存储器,移动设备可访问8GB的第二存储器,第二存储器可以是外部硬盘驱动器、 SD卡等。图4(a)示出了反映一移动设备状态的第一存储器图400,在该状态中U8MB第一存储器都没有被分配为高速缓存存储器或由移动设备组件使用。U8MB第一存储器全部被指定为空闲存储器。图4(b)示出了在移动设备应用程序已通过发出mallOC(32MB)命令请求了 32MB 的存储器之后的第一存储器图410。移动设备管理器已分配最低的32MB第一存储器来由应用程序使用并指定该32MB存储器段为“已使用的”。较高的96MB第一存储器保持未使用的,空闲的存储器。图4(c)示出了由希望读取在第二存储器地址1024MB(1GB)处开始的32MB第二存储器的移动设备应用程序发出的read(1024MB,32MB)命令执行之后的第一存储器图420。应用程序向高速缓存用户发出读取命令,高速缓存用户进而向存储器管理器发出 cachedread (1024MB, 32MB)命令。存储器管理器分配在第一存储器地址32MB处开始的32MB 第一存储器为高速缓存存储器,并向高速缓存用户发出imcachedread (1024MB,32MB)方法调用以读取在第二存储器地址1024MB处开始的32MB第二存储器至高速缓存存储器中。存储器管理器指定所分配的高速缓存存储器段为“干净的”。尽管32MB的未使用存储器被分配为高速缓存,可用于分配给移动设备应用程序和资源的未使用存储器的数量保持不变。 在read()操作执行之后,有96MB的未使用存储器(32MB高速缓存/64MB空闲)和32MB的已使用存储器。图4(d)示出了在两个读取命令和由移动设备应用程序发出的存储器分配命令执行后的第一存储器图430。第一读取命令,向高速缓存用户发出的read(1040MB,lMB)导致高速缓存用户向存储器管理器发出cachedread(1040MB,1MB)命令。由于高速缓存存储器已经包含所请求的第二存储器内容,因此存储器管理器执行读取操作并向高速缓存用户返回该内容。从其中读取的高速缓存存储器段的状态保持“干净的”。向高速缓存用户发出的第二读取命令reacK2048MB,32MB)导致高速缓存用户向存储器管理器发出caChedread(2048MB,32MB)命令。存储器管理器确定在地址 2048MB(2GB)处开始的32MB第二存储器的副本并没有驻留在高速缓存中(即,存在高速缓存未中),并响应于该高速缓存未中分配在地址96MB处开始的32MB的空闲存储器为高速缓存存储器。存储器管理器然后向高速缓存用户发出uncachedread (2048,32MB)命令,高速缓存用户进而读取在地址2048MB处开始的32MB第二存储器。这些第二存储器内容然后被写入至在地址96MB处开始的32MB第一存储器中。存储器管理器指定新分配的高速缓存存储器段为“干净的”。存储器分配命令,malloc (32MB),导致存储器管理器将在地址64MB处开始的32MB 第一存储器转换为供应用程序使用,并将所分配的第一存储器段的状态从“空闲的”改变为 “已使用的”。在read()和mallocO操作执行后,高速缓存的大小从32MB动态地增大至 64MB,有64MB的未使用存储器(64MB高速缓存/OMB空闲)和64MB的已使用存储器。全部未使用存储器已被分配为高速缓存存储器。图4(e)示出了在由应用程序向高速缓存用户发出的write (1040MB,16MB)命令执行后的第一存储器图440。高速缓存用户响应于接收write (1040MB,16MB)方法调用,进而向存储器管理器发出cachedWrite(1040MB,16MB)命令。存储器管理器确定在地址1040MB 处开始的16MB第二存储器的副本存储于高速缓存存储器中,在第一存储器地址32MB处开始,将16MB的写入数据写入至高速缓存存储器中,并将在地址32MB处开始的第一存储器段的状态从“干净的”改变为“脏的”。在写入操作执行之后,有64MB的未使用存储器(64M高速缓存/OMB空闲)和64MB的已使用存储器。图4 (f)示出了由希望读取在第二存储器地址4096MB (4GB)处开始的16MB第二存储器的应用程序发出的读取操作执行之后的第一存储器图450。读取操作由向高速缓存用户发出read(4096MB,16MB)操作的应用程序执行,高速缓存用户进而向存储器管理器发出 cachedread(4096MB,16MB)命令。存储器管理器确定所请求的第二存储器段的副本并不在高速缓存存储器中,并且可用的空闲存储器不足以满足cachedreadO请求。存储器管理器选择在第一存储器地址112MB处开始的16MB高速缓存存储器用于重新分配。由于高速缓存存储器的该段被指定为“干净的”,因此存储器管理器并不将它的内容写回至第二存储器中。存储器管理器然后发出uncachedread(4096MB,16MB)命令以将所请求的第二存储器内容的副本加载至高速缓存存储器中,并将重新分配的高速缓存存储器段的状态设置为“干净的”。在readO操作执行之后,有64MB的未使用存储器(64MB高速缓存/OMB空闲)和 64MB的已使用存储器。图4(g)示出了在导致全部高速缓存存储器被指定为“脏的”的两个写入操作执行之后的第一存储器图460。由应用程序向高速缓存用户发出的第一写入操作 write (2048MB, 16MB)导致高速缓存用户向存储器管理器发出cachedwrite (2048MB,16MB) 命令。存储器管理器确定所请求的第二存储器内容已经在高速缓存存储器中,将写入数据写入至适当的高速缓存段块(在地址96MB处开始的16MB第一存储器段),并将该存储器段的状态改变为“脏的”。由应用程序发出的第二写入操作write (4096MB,16MB)以类似的方式被执行,写入数据被写入至在地址112MB处开始的16MB块的第一存储器,并且该高速缓存存储器段的状态被设置为“脏的”。在两个写入操作执行之后,仍然有64MB的未使用存储器(64M高速缓存/OMB空闲)和64MB的已使用存储器。
图4(h)示出了在由应用程序发出的请求使用16MB的第一存储器的存储器分配操作执行之后的第一存储器图470。应用程序向存储器管理器发出mall0C(16MB)方法调用。存储器管理器确定有64MB的未使用存储器可用于分配,没有足够的空闲存储器和“干净的”高速缓存存储器,并且“脏的”高速缓存存储器段需要被重新分配以服务malloc ()请求。存储器管理器选择在地址32MB处开始的16MB块的第一存储器用于分配,并向高速缓存用户发出uncachedwrite (1024MB,16MB)以将重新分配的高速缓存存储器段的内容写回至第二存储器中。存储器管理器然后指定重新分配的第一存储器段为“已使用的”。在释放存储器操作执行后,高速缓存存储器的大小从64MB减小至48MB,有48MB的未使用存储器 (48MB高速缓存,0空闲)和80MB的已使用存储器。图4(i)示出了在由应用程序向存储器管理器发出的释放存储器命令free(16MB) 执行后的第一存储器图480。存储器管理器释放最低的16MB第一存储器,并将此第一存储器段的状态设置为“空闲的”。在释放存储器操作执行之后,有64MB的未使用存储器(48MB 高速缓存/16MB空闲)和64MB的已使用存储器。图4(j)示出了在由应用程序向存储器管理器发出的存储器分配命令 malloc (32MB)执行之后的第一存储器图490。存储器管理器确定16MB的空闲存储器可用于分配,并且16MB的高速缓存存储器需要被重新分配以适应分配请求。存储器管理器选择在第一存储器地址112MB处开始的16MB的“脏的”高速缓存以重新分配为已使用的存储器。 存储器管理器向高速缓存用户发出uncachedWrite(4096MB,16MB)命令以将将被重新分配的高速缓存存储器段的内容写回至第二存储器中。当写回操作完成时,存储器管理器分配在第一存储器地址0处开始的16MB的空闲存储器,并重新分配在地址112MB处开始的16MB 块的第一存储器以供调用应用程序使用,并将这两个第一存储器块的状态设置为“已使用的”。在存储器分配操作执行之后,有32MB的未使用存储器(32MB高速缓存/OMB空闲)和 96MB的已使用存储器。尽管图4(a)_4(j)所示的存储器图示出了连续的空闲、已使用的和高速缓存存储器段,但应当理解的是,并不要求存储器段驻留在物理存储器的连续块中。例如,图4(j)所示的32MB的第一存储器的分配导致多个非连续的第一存储器段被分配。由此,尽管对应用程序而言所分配的32MB存储器段看上去是单独的连续段的虚拟存储器,但该32MB存储器段并不是连续块的物理存储器。图5是动态地增大在计算设备的第一存储器内所分配的高速缓存存储器大小的第一示例性方法500的流程图。方法500可由包括嵌入式RAM和闪存的移动蜂窝电话来执行,并执行web浏览器应用程序。在510处,提供计算设备中的第一存储器,其可被分配为高速缓存存储器或由该蜂窝电话组件使用。在该示例中,嵌入式RAM被提供为第一存储器,嵌入式闪存为第二存储器。在520处,响应于第一高速缓存未中,第一存储器的第一段被分配为高速缓存存储器的一段,在该示例中,web浏览器发出命令以从闪存读取。蜂窝电话确定读取命令所指示的闪存内容并不在RAM中,导致高速缓存未中。作为响应,蜂窝电话将第一存储器的一段分配为高速缓存并将所指示的闪存内容复制至高速缓存中。在530 处,通过响应于后续的高速缓存未中将第一存储器的另外的段分配为高速缓存存储器的另外的段,动态地增大高速缓存存储器的大小。在该示例中,web浏览器应用程序发出另外的命令以读取闪存内容。蜂窝电话确定这些另外的命令中的一个或多个导致后续的高速缓存未中。响应于后续的未中,蜂窝电话将RAM的另外的段分配为高速缓存存储器,由此增加了高速缓存存储器的大小,并将适当的第二存储器内容复制至嵌入式RAM中。在一些实施例中,方法500可进一步包括通过重新分配一部分高速缓存存储器供计算设备组件使用以动态地减小高速缓存存储器的大小。例如,web浏览器应用程序可请求分配一部分第一存储器由该浏览器使用。作为响应,蜂窝电话可重新分配已被分配为高速缓存存储器的一部分RAM以满足存储器分配请求,由此减小高速缓存存储器的大小。由此, 即使当高速缓存的大小已增加,被分配为高速缓存的存储器对于设备应用程序而言看上去仍然为未使用的存储器,并可用于由该应用程序使用。图6是动态地增大在计算设备的第一存储器内所分配的高速缓存存储器大小的第二示例性方法600的流程图。方法600可由膝上型计算机执行,执行文字处理和电子表格应用程序,包含嵌入式RAM并连接至外部硬盘驱动器。在610处,提供计算设备中的第一存储器,其可被分配为高速缓存存储器或由一个或多个计算设备组件使用。在该示例中,RAM 被提供为第一存储器,其可被分配为高速缓存存储器或由多种膝上型应用使用。外部硬盘驱动器为第二存储器。在620处,从一个或多个计算设备组件接收第一第二存储器读或写请求。在该示例中,从文字处理程序接收请求以从硬盘驱动器读取。在630处,响应于由第一第二存储器读或写请求导致的第一高速缓存未中,第一存储器的第一段被分配为高速缓存存储器的一段。在该示例中,响应于导致高速缓存未中的硬盘驱动器读请求,膝上型计算机分配RAM的一段为高速缓存存储器。即,读命令中所指示的硬盘驱动器内容之前没有被复制至嵌入式RAM中。在640处,从一个或多个计算设备组件接收后续的第二存储器读或写请求。在该示例中,从文字处理程序接收后续的从硬盘驱动器读取或写入硬盘驱动器的请求。在650 处,通过响应于由后续的第二存储器读或写请求导致的后续的高速缓存未中分配第一存储器的另外的段为高速缓存存储器的另外的段,动态地增大高速缓存存储器的大小。在该示例中,响应于由后续的硬盘驱动器读和写请求导致的后续高速缓存未中,膝上型计算机将另外的RAM段分配为高速缓存存储器。在660处,从一个或多个计算设备组件其中之一接收存储器分配请求。在该示例中,从电子表格应用程序接收存储器分配请求。在670处,先前被分配为高速缓存存储器段的一部分第一存储器被重新分配供一个或多个计算设备组件其中之一使用。在该示例中,膝上型计算机将先前被分配为高速缓存存储器段的一部分第一存储器重新分配供电子表格应用程序使用。用于实现所公开的技术的任何计算机可执行指令以及任何在所公开的实施例的实现过程中所创建和使用的数据都可存储在一个或多个计算机可读介质(例如,非瞬态计算机可读介质,诸如一个或多个光学介质盘、易失性存储器组件(诸如DRAM或SRAM)或非易失性存储器组件(诸如闪存或硬盘驱动器)),并可计算机(例如,任何可购买的计算机, 包括包含计算硬件的智能电话或其它移动设备)上执行。计算机可执行指令可以是专用软件应用程序或,例如,经由web浏览器或其他软件应用程序(诸如远程计算应用程序)访问或下载的软件应用程序的一部分。例如,在单个本地计算机(例如,任何合适的可购买计算机)上或在使用一个或多个网络计算机的网络环境(例如,经由因特网、广域网、局域网、客户机-服务器网络(诸如,云计算网络)、或其他此类网络)中执行这些软件。为清楚起见,只描述了基于软件的各实现的某些所选择的方面。省略了本领域公知的其他细节。例如,应当理解,所公开的技术不限于任何特定计算机语言、或程序。例如, 所公开的技术可由用C++、Java、Perl、Javakript、AdobeFlash、或任何其他合适的编程语言编写的软件来实现。同样,所公开的技术不限于任何特定计算机或硬件类型。合适的计算机和硬件的某些细节是公知的,并且无需在本公开中进行详细阐述。此外,基于软件的实施方式中的任一个(包括例如用于使计算机执行所公开的方法中的任一种的计算机可执行指令)可以通过合适的通信手段来上传、下载、或远程访问。 这些合适的通信手段包括,例如,因特网、万维网、内联网、软件应用、电缆(包括光缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信或任何这样的通信手段。所公开的方法、装置和系统决不应被解释成限制性的。相反,本发明针对各公开的实施方式(单独地或彼此的各种组合和子组合)的所有新颖和非显而易见特征和方面。所公开的方法、装置和系统不限于任何具体方面或特征或其组合,所公开的各实施方式也不要求存在任何一个或多个具体优点或解决各个问题。本文中参照本公开的装置或方法给出的操作理论、科学原理、和其它理论性描述已出于更好理解的目的而被提供,其并非旨在对范围进行限制。所附权利要求中的装置和方法并不限于以此类操作理论所描述的方式起作用的那些装置和方法。虽然为方便呈现起见所公开的方法的一些操作是以特定的顺序次序来描述的,但应当理解,这一描述方法涵盖重新安排,除非以下阐明的具体语言需要特定排序。例如,顺序地描述的操作可在某些情况下被重新安排或并发执行。此外,为简明起见,附图未能示出可结合其他系统、方法、和装置使用所公开的系统、方法、和装置的各种方式。另外,本说明书有时使用像“产生”和“提供”等术语来描述所公开的方法。这些术语是所执行的实际计算机操作的高级抽象。与这些术语相对应的实际计算机操作取决于特定实现而不同并且易于由本领域普通技术人员辨别。在示出和描述了所示实施方式的原理之后,可采用多种安排来修改该实施方式并仍然保持忠实于以上所描述的概念。鉴于可应用所公开的本发明的原理的许多可能的实施例,应当认识到,所示实施例仅是本发明的优选示例,并且不应认为是限制本发明的范围。 相反,本发明的范围由所附权利要求书来限定。因此,要求保护落入这些权利要求的范围内的所有内容作为本发明。
权利要求
1.一种管理计算设备(300)的存储器的方法,所述方法包括提供所述计算设备(300)中的第一存储器(340),所述第一存储器(340)可被分配为高速缓存存储器(390)或供一个或多个计算设备组件(330)使用;响应于第一高速缓存未中,将所述第一存储器(340)的第一段分配为所述高速缓存存储器(390)的一段;以及通过响应于后续的高速缓存未中将所述第一存储器(340)的额外的段分配为所述高速缓存存储器(390)的额外的段,动态地增大所述高速缓存存储器(390)的大小;
2.如权利要求1所述的方法,其特征在于,所述高速缓存存储器(390)表现为未使用存储器(370),使得所述动态地增大高速缓存存储器(390)的大小并不减小所述一个或多个计算设备组件(330)可用的第一存储器(340)的数量。
3.如权利要求1所述的方法,其特征在于,将基本上全部的未被分配供所述一个或多个计算设备组件(330)使用的第一存储器(340)分配为所述高速缓存存储器(390)的段。
4.如权利要求1所述的方法,其特征在于,还包括通过重新分配高速缓存存储器(390) 的一部分供所述一个或多个计算设备组件(330)使用来动态地减小所述高速缓存存储器 (390)的大小。
5.如权利要求1所述的方法,其特征在于,所述第一高速缓存未中或任何后续的高速缓存未中由所述一个或多个计算设备组件(330)发出的第二存储器(360)读或写请求导致,其中高速缓存用户接收所述第二存储器(360)读或写请求,所述方法还包括所述高速缓存用户发出高速缓存存储器读或写请求。
6.一种编程为执行一种方法的计算设备(300),所述方法包括提供所述计算设备(300)中的第一存储器(340),所述第一存储器(340)可被分配为高速缓存存储器(390)或供一个或多个计算设备组件(330)使用;响应于第一高速缓存未中,将所述第一存储器的第一段分配为高速缓存存储器(390) 的一段;以及通过响应于后续的高速缓存未中将所述第一存储器(340)的额外的段分配为所述高速缓存存储器的额外的段,动态地增大所述高速缓存存储器(390)的大小。
7.如权利要求6所述的计算设备(300),其特征在于,所述高速缓存存储器(390)是所述计算设备(300)可访问的第二存储器(360)的高速缓存存储器(390)。
8.如权利要求7所述的计算设备(300),其特征在于,所述第一存储器(340)包括非易失性RAM,所述第二存储器(360)包括不可移动闪存。
9.如权利要求7所述的计算设备(300),其特征在于,所述第一存储器(340)包括不可移动存储器,所述第二存储器(360)包括可移动存储器或外部存储器。
10.存储用于使计算机设备(300)执行一种方法的计算机可执行指令的一种或多种计算机可读存储介质,所述方法包括提供所述计算设备(300)中的第一存储器(340),所述第一存储器(340)可被分配为高速缓存存储器(390)或由一个或多个计算设备组件(330)使用;从所述一个或多个计算设备组件(330)接收第一第二存储器读或写请求;响应于由所述第一第二存储器(360)读或写请求导致的第一高速缓存未中,分配所述第一存储器(340)的第一段为所述高速缓存存储器(390)的一段;从所述一个或多个计算设备组件(330)接收后续的第二存储器(360)读或写请求; 通过响应于由后续的第二存储器(360)读或写请求导致的后续的高速缓存未中将所述第一存储器(340)的额外的段分配为所述高速缓存存储器(390)的额外的段,动态地增大所述高速缓存存储器(390)的大小;从所述一个或多个计算设备组件(330)其中之一接收存储器分配请求;以及分配先前被分配为所述高速缓存存储器(390)的段的一部分第一存储器(340)以供所述一个或多个计算设备组件(330)其中之一使用。
全文摘要
一种管理计算设备的存储器的方法,包括提供可被分配为高速缓存存储器或可由计算设备组件使用的第一存储器。响应于高速缓存未中,第一存储器段可被分配为高速缓存存储器。通过响应于后续的高速缓存未中将额外的第一存储器段分配为高速缓存存储器,可动态地增大高速缓存大小。通过重新分配第一存储器高速缓存段以供计算设备组件使用,可动态地减小高速缓存存储器大小。高速缓存存储器可以是计算设备可访问的第二存储器的高速缓存。计算设备可以是移动设备。第一存储器可以是嵌入式存储器,第二存储器可包括嵌入式、可移动或外部存储器,或其任意组合。高速缓存存储器的最大大小随第一存储器的大小缩放。
文档编号G06F12/08GK102567224SQ20111041523
公开日2012年7月11日 申请日期2011年12月2日 优先权日2010年12月2日
发明者A·M·罗杰斯, B-M·赫西 申请人:微软公司