为虚拟页面分配非邻接备份物理子页面的方法与流程

文档序号:26193619发布日期:2021-08-06 18:47阅读:70来源:国知局
为虚拟页面分配非邻接备份物理子页面的方法与流程



背景技术:

存储器虚拟化是现代计算系统采用的一种技术,其允许软件过程将非邻接物理存储器区视为单个邻接区。计算机中执行的软件过程或任务使用虚拟存储器地址访问存储器;这些虚拟存储器地址映射到物理存储器地址,且虚拟和物理存储器地址之间的转换由计算机中的硬件和软件处理。计算机中的操作系统将物理存储器分配到虚拟存储器,且存储器管理单元(mmu)自动进行虚拟和物理存储器地址之间的转换。

存储器虚拟化使过程在其各自的专用虚拟地址空间中运行,从而不需要重定位程序代码或使用相对寻址访问存储器,且由于存储器隔离,也增加了安全性。另外,使用虚拟存储器寻址方法的系统将管理存储器分级的负担交给内核,并且通过隐藏物理存储器的碎片化,使应用编程更加容易。

附图说明

在附图的图示中通过举例的方式而非限制的方式示出本公开。

图1示出根据实施例的物理存储器的碎片化区。

图2示出根据实施例的计算系统。

图3示出根据实施例的计算设备中的处理单元和主存储器的部件。

图4示出根据实施例的用于转换虚拟地址的页面表游走。

图5a和图5b示出根据实施例的select和rank操作。

图6a、图6b和图6c各自示出根据实施例的使用转换后备缓冲器(tlb)对虚拟存储器地址的转换。

图7示出根据实施例的邻接空闲列表和碎片化空闲列表。

图8示出根据实施例的使用select函数对存储器的分配。

图9是根据实施例的示出存储器分配和解除分配过程的流程图。

图10是根据实施例的示出用于访问存储器的过程的流程图。

具体实施方式

以下描述阐述了许多具体细节,诸如具体系统、部件、方法等的示例,以便提供对实施例的良好理解。然而,本领域的技术人员将明白,可在没有这些具体细节的情况下实践至少一些实施例。在其他情况下,未详细描述公知的部件或方法,或以简单的框图格式呈现公知的部件或方法,以避免对实施例不必要的混淆。因此,阐述的具体细节仅仅是示例性的。特定实现方式可与这些示例性细节不同,并且仍被认为在实施例的范围内。

实现虚拟存储器寻址的现代计算系统能够同时使用多个不同存储器页面大小(例如,4kb、2mb和1gb)。此设计决策的结果是存储器被订阅最多的系统趋向于进行引起存储器碎片化增加的存储器分配,从而使较大存储器区的分配变得困难,除非进行高成本且频繁的存储器去碎片化。由于一个或多个耗费大量可用物理存储器的共同运行的应用,存储器变得碎片化,因此,因为存储器碎片化,分配超级页面(即所支持的页面大小更大)变得越来越困难。

图1示出根据实施例的物理存储器区101和111。存储器区101和111中的每个包括在支持8个页面的超级页面大小的系统中的16个物理页面。由于区101中没有分配子页面,所述16页面的物理存储器区101最大能够分配成两个8页面的超级页面102和103。在物理存储器区111中,已经分配给其他数据的两个页面115和116使未分配的空间碎片化。物理存储器区111在子页面112-114中具有足够的总容量来分配8页面的超级页面;然而,该组邻接空闲子页面112-114没有一个大小足以分配给所述超级页面。

在一个实施例中,实现虚拟存储器寻址的计算系统包括页面表,其含有用于将虚拟存储器地址转换到其对应的物理存储器地址的条目,以及包括转换后备缓冲器(tlb),其缓存所述页面表条目。所述页面表和tlb中的条目另外为能在虚拟地址中指定的每个虚拟页面号编码映射,所述映射指示备份物理存储器区中的哪些子页面分配给虚拟页面号。在一些实施例中,所述映射可以存储为位向量,所述位向量具有用于物理存储器页面中的每个子页面(分配用于备份所述虚拟页面号)的被断言位,和/或存储为预计算对的虚拟子页面号和其对应的物理子页面号。通过识别物理区号和对应于虚拟页面号的映射,然后使用所述映射来确定物理区中的对应于虚拟子页面号的物理子页面号,开始转换虚拟地址(其包括虚拟页面号和虚拟子页面号)的请求。

通过提供由较小非邻接物理子页面备份大的虚拟超级页面的机制,存储在页面表和tlb条目中的所述映射允许保持或延迟去碎片化。当去碎片化操作不太可能影响用户应用性能时,所述操作系统能够在计算系统具有低系统负载的时期分批进行存储器去碎片化。另外,即使存储器负载重,在近邻接物理页面中也可以更容易地分配虚拟存储器的大片段。另外,由于可以由单个虚拟超级页面而不是多个较小页面寻址给定数量的存储器,因此减少了页面表深度。因为虚拟页面大小对于当量的物理页面大小更大,所以页面表游走经过较少的页面表等级。存储器管理单元(mmu)和输入/输出存储器管理单元(iommu)中的大多数地址转换缓存未命中发生在页面表的叶节点等级;因此,跳过此等级可以对性能产生较大影响,尤其在带有嵌套页面表游走的虚拟化环境中以及在高争用的图形处理单元(gpu)上。

图2示出实现以上映射技术的计算系统200的实施例。通常,计算系统200可以体现为许多不同类型的设备中的任一种,包括但不限于膝上型计算机或台式计算机、移动电话、服务器等。计算系统200包括可以通过总线201彼此通信的许多部件202-208。在计算系统200中,部件202-208中的每一个都能够直接通过总线201或者经由其他部件202-208中的一个或多个与任何其他部件202-208通信。计算系统200中的部件201-208被包含在单个物理外壳内,诸如膝上型或台式计算机机架或移动电话外壳。在替代实施例中,计算系统200的一些部件可以体现为外围设备,使得整个计算系统200不驻留在单个物理外壳内。

计算系统200还包括用于从用户接收信息或向用户提供信息的用户接口设备。具体地,计算系统200包括输入设备202,诸如键盘、鼠标、触摸屏或用于从用户接收信息的其他设备。计算系统200经由诸如监测器、发光二极管(led)显示器、液晶显示器或其他输出设备的显示器205向用户显示信息。

计算系统200另外可以包括用于通过有线或无线网络传输和接收数据的网络适配器207。计算系统200还包括一个或多个外围设备208。外围设备208可以包括大容量存储设备、位置检测设备、传感器、输入设备、或可以由计算系统200使用的其他类型设备。

计算系统200包括处理单元204,该处理单元接收并执行存储在主存储器206中的指令209。如本文所引用,处理单元204表示中央处理单元(cpu)流水线、图形处理单元(gpu)或其他支持使用虚拟地址的存储器操作的计算引擎。主存储器206可以是计算系统200的存储器子系统的一部分,包括计算系统200使用的存储器设备,诸如随机存取存储器(ram)模块、只读存储器(rom)模块、硬盘和其他非暂时性计算机可读介质。

除了主存储器206,所述存储器子系统还可包括高速缓存存储器,诸如l2或l3高速缓存,和/或寄存器。这种高速缓存存储器和寄存器可以存在于处理单元204中或所述计算系统200的其他部件上。

图3示出根据实施例的计算系统200的处理单元204和主存储器206。所述处理单元204包括处理器301(例如cpu、gpu等)、存储器管理单元(mmu)302和转换后备缓冲器(tlb)303。在一个实施例中,所述处理单元204的部件301、302和303包含在同一个设备包中。执行程序指令209期间,处理器301通过一个或多个存储器控制器发布存储器请求来访问存储在主存储器206中的数据。所述处理器301使用虚拟地址引用存储器位置,所述虚拟地址通过mmu302转换到物理存储器地址。所述mmu302使用页面表311中的条目进行转换,所述页面表存储虚拟地址到物理地址的转换。所述转换另外高速缓存在tlb中。在一个实施例中,所述mmu302还包括select304和rank电路305,它们用于解码存储在页面表311和/或tlb303中的映射(例如,位向量、预计算物理地址组等)。

所述页面表311存储在主存储器206中并且将地址转换信息存储在树、哈希表或相关联的映射数据结构中。在访问虚拟地址时,所述处理单元204通过检查用于转换的tlb303进行虚拟到物理地址转换,且如果tlb303中的转换不可用(即发生tlb未命中),所述mmu302进行页面表游走。在页面表游走期间,所述mmu302基于要转换的虚拟地址遍历页面表311中的节点。在页面表311中,内部节点是含有各自指向页面表311中的子节点的条目的节点。页面表311中的叶节点含有指向物理存储器中的应用数据的物理页面的条目。随着更多的虚拟地址相对于较大的页面而页面偏移,叶节点的组成根据页面大小而改变(例如,分别带有1gb、2mb和4kb页面的x86_64长模式中的l3、l2或l1)。

所述存储器206也存储一组空闲列表312。空闲列表312由计算系统200的操作系统维持,并用于保持跟踪可用于分配到新数据的存储器页面。由于存储器是解除分配的(即空闲),解除分配的页面被添加到空闲列表312之一。当分配存储器时,从空闲列表312中识别用于分配新数据的空闲存储器页面。

图4示出根据实施例的使用页面表311对虚拟存储器地址到物理存储器地址的转换。虚拟存储器地址400包括符号扩展401、虚拟页面号407(包括根偏移402、子偏移403和叶偏移404)、虚拟子页面405和子页面偏移406。虚拟存储器地址400中的字段402-406用于遍历页面表311中的节点,包括根节点410、子节点411和叶节点412。

页面表311中的条目允许从大的物理存储器区中分配一组部分或全部不相交的(即非邻接的)物理子页面,以备份较小虚拟超级页面。在一个实施例中,所述物理存储器区的大小是其备份的虚拟超级页面的两倍,而虚拟和物理子页面的大小相同。因此,所述物理存储器区包括其对应的虚拟超级页面两倍的子页面。相应地,如果物理区中至少一半的物理子页面是空闲的,那么所述空闲的物理子页面可以用于备份虚拟超级页面。

每个页面表条目都作为若干地址字段(例如420-422)记录在页面表311中。在一个实施例中,所述地址字段还包括另外的元数据或所述操作系统或mmu302可以操纵的未指定的位。在一个实施例中,每个页面表条目包括映射(例如位向量423),所述映射识别较大物理存储器区中的哪些物理子页面被分配用于存储虚拟页面的内容。在图4所示的示例性地址转换中,2mb的虚拟页面大小被64kb的物理子页面备份。每个页面表条目(例如叶节点412)具有嵌入的64位的位向量(例如位向量423),该位向量包括用于每个物理子页面的一位,指示所述物理子页面是否备份2mb虚拟页面中的32个虚拟子页面之一。每个虚拟子页面代表2mb虚拟页面跨越的虚拟地址空间的1/32,或价值存储器容量的64kb。换句话说,所述位向量423识别所述备份物理存储器区的64个64kb物理子页面中的哪一些用于备份所述2mb虚拟页面。因此,所述位向量跟踪所述备份物理区中的物理存储器的64×64kb或4mb。如果所述备份物理存储器区具有至少2mb的空闲物理存储器(即价值至少32个64kb子页面),那么所述物理存储器区可以被分配用于备份2mb虚拟页面。对于4mb备份物理区的每个物理子页面,如果所述物理子页面被分配用于虚拟页面,则所述位向量423中的对应的位被断言。在一个实施例中,所述位被断言为高(例如设置为‘1’),而且被去断言为低(例如设置为‘0’)。在其他实施例中,其他值或电状态可以用于表示被断言的和被去断言的状态(例如,被断言为低和被去断言为高)。设置叶条目的地址字段422用于指向所述4mb物理存储器区的第零个字节。在一个实施例中,所述地址字段(例如420-422)被存储为物理页面号,所述物理页面号向左移位了其指向的存储器块的以字节计的基数2的对数的大小(例如16用于64kb或22用于4mb)。例如,所述地址字段422存储了物理区标识符,该标识符向左移位了基数2的对数(即22)4×1024×1024,以计算所述4mb物理区的第零个字节。

对于虚拟存储器地址400的转换,页面表基址指针413(例如,存储在x86系统的控制寄存器中)指向页面表311的根节点410,然后根偏移402用于从根节点410选择地址420。地址420指向子节点411,子偏移403用于从所述子节点选择地址421。地址421指向叶节点412,且叶偏移404用于选择地址422。地址422另外与同样存储在叶节点412中的位向量423相关联。叶节点412的地址字段422指向4mb物理存储器区的第零个字节,而位向量423识别指示的物理存储器区中的分配用于备份虚拟页面的物理子页面(可能非邻接)。

在虚拟存储器地址400中,虚拟子页面字段405包括用于识别虚拟页面中的32个虚拟子页面之一的5个位(代表从0到31的值)。为了确定哪个物理子页面备份指定的虚拟子页面405,通过select电路304对位向量423进行select操作。

图5a示出根据实施例的select函数的操作。给定位向量v和索引i,当从零开始数时,select函数返回第i个最低有效位(设置为‘1’)的索引。在图5a所示的示例中,select函数设有16位向量v和输入索引‘7’。所述select函数从所述位向量v的最低有效端数‘1’位,从0数到输入索引‘7’(即,数到所述位向量v的第8个‘1’位)。所述第8个‘1’位处在所述位向量v中的‘11’位置。因此,select(v,7)返回‘11’。作为另外的示例,select(0b10101010,3)返回‘7’,由于第四个‘1’位(因为参数‘3’是零索引的)发生在所述向量中的位位置7。使用相同的输入位向量,由于第一个‘1’位发生在索引1,所以select(0b10101010,0)将返回‘1’。

所述select电路304以位向量423作为输入位向量v且以虚拟子页面号405的5个位作为输入索引进行select函数,并且输出所述4mb物理存储器区430内的物理子页面440的索引。所计算的物理子页面索引向左移位,计算物理子页面的第零个字节的完全物理地址。在给定的64kb子页面的示例中,所计算的物理子页面索引向左移位了16。子页面偏移406的所述16个位用作物理子页面440的字节级索引。在前述的地址转换示例中,虚拟和物理页面的大小、物理存储器区、地址字段等是示例性的,且替代实施例中可能有不同的参数。

图5b示出根据实施例的rank函数的操作,所述rank函数是select的伙伴函数。在一个实施例中,所述rank函数由rank电路305执行,当给定位向量v和输入索引i时,所述rank电路返回在位向量v中的索引i之前的设置为‘1’的位的数量。在图5b所示的示例中,rank函数为输入位向量v和输入索引‘7’返回‘4’,因为所述位向量v中的位位置7之前有4个位设置为‘1’。因此,由位向量v所指示,所述rank函数用于确定多少物理子页面被分配或空闲(例如,当分配存储器或解除分配存储器时)。

图6a示出根据实施例的tlb303的实施例,其中,对于若干虚拟存储器页面中的每个虚拟存储器页面,存储了映射以识别物理存储器区的哪些非邻接物理子页面被分配用于虚拟存储器页面。所述tlb303是用于地址转换的缓冲器,其高速缓存页面表311的条目,并且对于至少一个条目子集,包括来自页面表311的相关联的叶节点(例如节点412)的映射。如图6a所示,tlb303中的条目620将虚拟页面号621与映射(即位向量622)和物理区号623关联。继续前述示例,物理区号623识别4mb物理存储器区(包括一组邻接物理子页面),所述物理存储器区备份由虚拟页面号621识别的2mb虚拟页面。

所述位向量622识别所述备份物理存储器区的物理子页面中的哪一些被分配用于所述虚拟页面。所述位向量包括被分配用于虚拟页面的每个物理子页面的被断言位和没有被分配用于虚拟页面号的备份物理存储器区中的每个空闲子页面的被去断言位。在一个实施例中,所述位向量622中的位以与其对应物理子页面排列在物理存储器区中的顺序相同的顺序布置。

当所述mmu302接收要被转换到物理存储器地址610的虚拟存储器地址600时,所述mmu302使用虚拟存储器地址600中的所述虚拟页面号601在tlb303中进行查找。当在tlb303中找到匹配的虚拟页面号621时,发生tlb命中。在所述tlb条目620中,所述虚拟页面号621与位向量622和物理区号623相关联。当tlb命中发生时,所述物理区号623成为物理存储器地址610的最高有效位611。来自tlb条目620的所述位向量622和虚拟子页面号602作为连接到所述tlb303的select电路630的输入。

通过计算位向量622中的第i个最低有效的被断言位的索引,所述select电路630确定物理子页面号612,其中i表示所请求的虚拟子页面号602。所述select电路630输出物理地址610的中部的所述物理子页面号612。所计算的物理子页面号612和所述物理区号611(其是备份所述虚拟页面的所有子页面共有)形成物理子页面的物理地址。所述物理存储器地址610中剩余的子页面偏移位613与所述虚拟存储器地址600中的子页面偏移位603相同。在替代实施例中,这些字段可以随着非邻接位排列或分开。进一步,虚拟和物理子页面不一定大小相同。

图6b示出tlb303的实施例,其中每个虚拟页面号的映射存储为一组预计算转换624。每个预计算转换624将预计算的虚拟子页面号与预计算的物理子页面号相关联。在一个实施例中,所述预计算的物理子页面号存储在预计算转换624的阵列中,其中每个预计算的物理子页面号存储在所述阵列624中与和其相关联的虚拟子页面号对应的索引上。

在具有与前述示例相同的参数的一个实施例中,虚拟子页面号到物理子页面号的一整组转换(用于2mb超级页面)存储在32个6位计数器中。当虚拟存储器地址600转换到物理存储器地址610时,所述虚拟页面号601用于查找tlb条目640。一旦定位tlb条目640(即tlb命中发生),所述tlb303使用虚拟子页面号602来索引到含有预计算的物理子页面号的预计算转换字段624中。如图6b所示,物理子页面号‘15’存储在由虚拟子页面号602指示的阵列索引上,因此,‘15’成为物理存储器地址610中的物理子页面号612。所述物理存储器地址610中的子页面偏移613与所述虚拟存储器地址600中的子页面偏移603相同。

在一个实施例中,在安装tlb中的tlb条目640时或之前,批量进行一次select操作以预计算虚拟页面621中的所有的虚拟子页面的转换。因此,不需要为每个转换进行select操作,并且tlb303本身不包括select电路。

图6c示出tlb303的实施例,在每个条目中,其将虚拟页面的映射存储为位向量(例如622),且另外将虚拟页面中的虚拟子页面号的子集的预计算转换(例如625和626)存储在预计算转换字段624中。在一个实施例中,所述tlb303推断识别未来可能要被转换的一个或多个虚拟子页面,并且预计算这些虚拟子页面到其各自的物理子页面的转换。

在一个实施例中,选择最近被访问的虚拟子页面号作为推断的虚拟子页面号625并将其和预计算的推断的物理子页面号626一起存储。在一个实施例中,存储最近被观察的虚拟子页面号和其对应的物理子页面的一小段历史。例如,通过从历史推导访问步幅信息,虚拟子页面转换的历史用于预测哪些虚拟子页面下次有可能被转换。然后预计算下一个或多个预期的虚拟子页面号和其伴随的物理子页面号,并将它们存储在tlb303中。

如果要转换的虚拟存储器地址600指定不与任何虚拟子页面(为其预计算过转换)(例如,推断的虚拟子页面号625)匹配的虚拟子页面号602,如前所述,select电路631进行所述select操作以基于位向量622和所请求的虚拟子页面号602为所请求的虚拟子页面号602计算正确的物理子页面号612。所述select电路631包括旁通电路,从而如果所述虚拟子页面号602确实匹配推断的虚拟子页面号625,所述select电路631绕过所述select操作,转而使用相关联的推断的物理子页面号626作为所述物理子页面号612。图6c示出tlb303,其将单个推断的虚拟子页面号625和其对应的预计算物理子页面号626存储在单个tlb条目650中;然而,替代实施例中每个tlb条目可包括多个这样的推断的转换对。在替代实施例中,所推断的虚拟子页面号625和所推断的物理子页面号626存储在与tlb303分离的数据结构中。

图7示出根据实施例的一组空闲列表312,用于跟踪存储器206中哪些物理存储器页面可用于分配给新数据。所述空闲列表312包括两组空闲列表:用于去碎片化(即邻接)存储器片段的第一组空闲列表701和用于碎片化存储器片段的第二组空闲列表702。在一个实施例中,空闲列表312由在处理单元204中执行的操作系统例程维持。所述操作系统维持组701和702中每一者的多个空闲列表。每个列表与不同的存储器大小(例如,p、2p、4p等)相关联,其中p表示存储器页面的大小。组701中的所述p、2p和4p空闲列表与相差二的幂的大小相关联,也就是说,组701中的每个后续空闲列表都与先前空闲列表两倍大的存储器大小相关联。当提供存储器分配请求时,所请求的存储器量一直算到最近大小的物理页面乘以二的幂。识别与所确定的大小对应的空闲列表,且从所述空闲列表选择空闲存储器区来完成分配。

所述操作系统将可用于分配的邻接空闲存储器(即还未分配给任何数据)的区放在空闲列表701中的一个中。每个空闲列表701包括用于所述空闲列表中的一个或多个邻接存储器区中的每一个的节点,且所述空闲列表中的每个邻接存储器区的大小与所述空闲列表相关联。例如,p空闲列表中的节点包括p大小的邻接空闲存储器区,2p空闲列表中的节点包括2p大小的邻接空闲存储器区,以此类推。当进行分配时,从空闲列表中移除要被分配的与用于存储数据的足够大小相关联的节点,且将移除的节点中的空闲存储器区分配给新数据。在一个实施例中,伙伴分配系统用于组合一个空闲列表中的相邻组的空闲页面并将它们移动到下一个更高容量空闲列表(例如,组合两个相邻的p大小的片段并将其从p空闲列表移动到2p空闲列表)。

在一个实施例中,所述操作系统还维持用于备份已经部分分配(即碎片化)的存储器区的第二组空闲列表702。例如,大部分是空闲的物理存储器的64mb区(除了所述64mb区中的每个2mb物理存储器页面具有至少一个已分配的64kb子页面)不包括用于分配给新数据的任何邻接的2mb页面。然而,如果每个4mb备份物理区至少是一半空闲的,此64mb物理区可以用于使用非邻接物理存储器来分配32mb的邻接虚拟存储器(或几个较小的分配请求)。第二组空闲列表702跟踪碎片化的存储器区中的可用存储器,诸如示例性的碎片化64mb区。每个空闲列表702与存储器大小(例如p、2p)相关联,并且包括一个或多个节点,每个节点指定部分空闲的物理存储器区,其具有两倍于相关联的存储器大小和至少所关联的空闲空间量。例如,p空闲列表中的每个节点指定部分空闲的存储器区,具有2p总大小和至少p大小的总空闲空间,且2p空闲列表中的每个节点指定部分空闲的存储器区,具有4p总大小和至少2p大小的总空闲空间。与每个部分空闲的物理存储器区一起存储的位向量(例如位向量710)识别所述部分空闲的物理存储器区中的空闲物理子页面。

作为示例,位向量710识别所述部分空闲的物理存储器区711中的空闲物理子页面(对应于被断言位)的子集和已经分配的物理子页面(对应于被去断言位)的子集。在所述位向量710中,所述位以与其对应的物理子页面在物理存储器区711中的顺序相同的顺序布置。如图7所示,所述位向量710随与其相关联的物理存储器区711存储。在替代实施例中,维持单独的全局位向量,其跟踪用于多个部分空闲的物理存储器区的空闲子页面。

图8示出根据实施例的物理存储器区中非邻接物理子页面的分配,用于备份虚拟超级页面。所述物理存储器区801包括16个物理子页面0-15。其中,已经分配了子页面3、5和13。相应地,与所述物理存储器区801相关联的空闲页面位向量802(或全局空闲页面位向量的片段)包括位于与已经分配的子页面对应的位置3、5和13的被去断言位。所述位向量802中的剩余位位置被断言,指示其对应的子页面是空闲的。

为了分配具有8个子页面的虚拟超级页面,进行select操作以识别要从所述物理存储器区801分配的8个空闲子页面的子集。所述select操作取所述位向量802和索引7(用于数8个被断言位)作为输入,并输出索引9。在所述物理存储器区801中,直到并包括索引9的物理子页面(即,片段854、855和856)被分配用于备份所请求的虚拟超级页面。将剩余的未分配的子页面851、852和853移动到空闲列表。将空闲片段851和853移动到2p空闲列表(用于两页面邻接空闲片段),且将空闲片段852移动到p空闲列表(用于一页面空闲片段)。

所述空闲页面位向量803(或全局空闲页面位向量的片段)更新到与新分配的子页面对应的被去断言位0-2、4和6-9。通过断言与新分配的物理子页面对应的位,计算位向量804。所述位向量804包括在用于新分配的虚拟超级页面的页面表条目中,且将所述页面表条目添加到页面表311。在一个实施例中,用于所述虚拟超级页面的条目(包括位向量804)也添加到tlb311。

图9示出根据实施例的用于分配和解除分配计算系统200中的存储器的过程900。所述过程900由计算系统200中的部件(例如,处理器301和mmu302)进行,以将主存储器206中的物理存储器分配到一个或多个虚拟页面。

在框901,如果没有请求存储器分配,则不进行分配,且系统继续使用并访问已经分配的存储器,如框1000所提供。在框901,如果请求存储器分配,操作系统(由处理器301执行)根据框903-911从主存储器206分配物理存储器。在框903,操作系统基于要被分配的存储器的大小选择空闲列表312之一。具体地,选择包括大于或等于所请求的分配的大小的物理存储器区的空闲列表。在一个实施例中,要被分配的存储器的大小一直算到页面的最近大小乘以二的幂,且选择与得出的大小相关联的空闲列表。在一个实施例中,对于所请求的分配大小p,由于2p是与下一个更大的空闲列表相关联的大小,选择的空闲列表具有节点,每个节点含有至少p空闲存储器容量和少于2p的空闲存储器容量。

在框905,操作系统从所选择的空闲列表中的该组节点中选择节点之一。如果所选择的空闲列表是邻接空闲列表701之一,则所选择的节点中的任何物理存储器子页面都可以用于分配。所述区中的任何未分配的页面任选地移动到与其各自的大小对应的空闲列表。

在一个实施例中,使用从碎片化的空闲列表702之一中选择的碎片化存储器来填充分配。基于所述节点的一个或多个位向量(例如位向量710),识别并选择所述节点的部分空闲的物理区中的每一个(例如区711)中的空闲子页面用于分配给虚拟存储器页面,如框907所提供。特别地,所述操作系统检查与所述节点中的部分空闲的物理存储器区相关联的一个或多个位向量来识别这些区中的空闲物理子页面。从可用空闲物理子页面中,所述操作系统选择足够数量的空闲子页面用于分配,从而备份所请求的虚拟页面。

在一个实施例中,所述处理器301使用指令促进此选择,所述指令在位向量上运行并返回与虚拟页面中的虚拟子页面的数量相等的若干组位。此指令具有两个寄存器操作数:含有所述位向量的第一寄存器和用于接收计算结果的第二寄存器。在一个实施例中,所述select函数用于选择可用空闲子页面用于分配,从而备份所请求的虚拟页面。例如,假设每个虚拟页面的32个虚拟子页面、每个物理区(例如711)的64个物理子页面、和用于每个空闲物理子页面的所述位向量(例如710)中的一位,所述位向量的长度是每个物理区(例如711)64位。对于每个物理存储器区(例如711),每一个都带有长度是64位的相关联的位向量v(例如710),使用位向量v和索引31作为输入来调用所述select函数。所述select函数返回第31个位(设置为‘1’)的位位置索引;如果有效,此索引在0到63之间,或如果无效,就是64。所返回的索引表示将从部分空闲的物理存储器区分配的该组空闲物理子页面的最大物理子页面号,以备份所请求的虚拟页面中的虚拟子页面。

在框909,所述操作系统将页面表条目添加到页面表311的叶节点412。若不存在,则创建叶节点412、子节点411和根节点410,且将条目安装在指向下一级中的适当节点的这些节点级中的每一个中。所述叶节点412中的新页面表条目包括地址422和位向量423,以及其他元数据和可用位(未示出)。所述位向量423中的被断言位指示对应于所述位的物理子页面备份所述页面表条目的虚拟页面中的虚拟子页面之一。在一个实施例中,通过从空闲列表复制位向量710和掩蔽最大物理子页面号(即,如前所述,由所述select函数计算的索引)之上的位来生成所述位向量423。所述得出的位向量含有被分配用于虚拟页面号的每个物理子页面的被断言位和没有被分配用于虚拟页面号的每个物理子页面的被去断言位。在一些实施例中,由于所述虚拟页面号是新分配的,它可能被紧急访问;因此,包括所述位向量622的新页面表条目也高速缓存在tlb303中。在替代实施例中,不使用(或除了)所述位向量,存储在tlb条目中的映射包括与虚拟页面中的所有(或一些)虚拟子页面号相关联的预计算物理子页面号,如参考图6b和图6c先前所述。

在框911,物理存储器区中仍未分配的子页面使用存储器分配系统(例如,伙伴或slab分配器)放置在空闲列表中。如果支持碎片化空闲列表702,则碎片化存储器放置在碎片化空闲列表702之一中。例如,有3mb存储器被分配的4mb备份区不能备份2mb虚拟页面;然而,剩余的1mb存储器有可能备份几个256kb虚拟页面(假设256kb是所支持的页面大小)。在剩余的空闲页面添加到空闲列表后,过程900在框1000继续。在框1000,所请求的分配是完整的,且所分配的存储器用于存储应用数据。在框921,如果没有请求存储器分配解除,过程900返回到框901。因此,当没有存储器被分配或解除分配时,重复框901、1000和921。

在框921,如果请求存储器分配解除,所述操作系统通过进行框923-927的操作来解放先前分配的物理子页面中的一个或多个。在框923,所述操作系统计算新的位向量,以记录在用于含有解放的物理子页面的物理存储器区的碎片化空闲列表702之一中。所述新位向量中的每个位被断言(例如‘1’),若物理存储器区中对应的子页面是空闲的或正在被解放,或每个位被去断言(例如‘0’),若所述对应的子页面将保持分配。在一个实施例中,为含有要被解放的物理子页面的每个物理存储器区计算位向量。

在框925,含有所述解放的物理存储器子页面的物理存储器区(例如区711)和其各自的位向量(例如位向量710)一起添加到适当碎片化空闲列表702中的节点。对于每个物理存储器区,对相关联的位向量的群体计数操作(其对设置为1的位的数量进行计数)用于确定所述物理存储器区中的空闲物理子页面的数量。如果几个连贯的物理存储器区共同具有足够的空闲容量来分配与空闲列表相关联的请求粒度,则所述操作系统将所述物理存储器区放置在该空闲列表中。例如,各自都具有p大小的两个连贯的物理存储器区(即,2p的总大小)一起放置在与p大小相关联的碎片化空闲列表中,如果它们共同具有至少p空闲存储器容量。

在一些实施例中,用于每个部分分配的物理存储器区的位向量分开地与其各自的物理存储器区存储在空闲列表702中。在替代实施例中,所述位向量合并成与更大的物理存储器区(例如,由与初始位向量相关联的多个连贯的物理存储器区组成)相关联的一个或多个更大的位向量。

如果使用伙伴分配,所述操作系统检查所述解放的存储器(例如,16x4mb区的32mb,由于只有一半被分配)是否可以与其“伙伴”(相同大小的一组相邻物理存储器区(例如,16x4mb))合并。如果两组中的物理子页面都至少一半是空闲的,则它们合并成单个元素,并放置在与二的下一个更高幂(例如,32x4mb,其中每个条目分配64mb的物理存储器)相关联的空闲列表上。此过程递归地重复,直到最大的分配粒度大小。可替代地,解放的物理子页面可以放置在邻接空闲列表701中的一个或多个中。在这种情况下,一组邻接空闲页面被分成一个或多个片段,每个片段的大小是二的幂乘以页面大小。每个得到的片段添加到与其大小相关联的空闲列表(例如,2p大小的片段放置在2p空闲列表中)。

在框927,更新用于解放的子页面所备份的虚拟页面的页面表条目,或将其移除以反映分配解除。如果一个或多个物理子页面仍将分配到虚拟页面,则将页面表条目中的位向量更新,以使对应于解放的子页面的位去断言,而对应于仍然分配的子页面的位保持被断言。用于不再被任何物理存储器备份的虚拟页面的页面表条目从页面表中移除,且任何对应的tlb条目是无效的。

图10示出根据实施例的用于访问分配的存储器的过程1000。过程1000对应于过程900的框1000。从框901,如果未收到存储器访问请求(例如,从负载或存储指令),过程1000继续到过程900的框921。否则,如果接收到存储器访问请求,过程1000根据框1003-1017服务存储器请求。

所接收的存储器请求指定要被转换到物理存储器地址610的虚拟存储器地址600,在物理存储器地址中将写入或读取数据。如果用于虚拟存储器地址的条目已经高速缓存在tlb303中,所述处理单元204使用tlb303进行存储器转换。相应地,基于所请求的虚拟地址600中所请求的虚拟页面号601,处理单元204中的存储器访问逻辑在tlb303中进行查找,如框1003所提供。在框1005,如果虚拟页面号601具有tlb303中的条目,则框1003中的tlb查找引起命中,且过程1000继续到框1007。在框1007,处理器204在匹配的tlb条目650的预计算转换字段624中查找虚拟子页面号602。在一个实施例中,处理器204将虚拟子页面号602与预计算转换字段624中的一个或多个推断的虚拟子页面号中的每一个(例如625)比较。

在框1009,如果在预计算转换字段624中找到虚拟子页面号602,则从预计算转换字段624中读取预计算物理子页面号(例如626),并将其用作输出的物理存储器地址610中的物理子页面号612。如果存在select电路631,则绕过所述select电路631,且不进行select操作。如果所述tlb条目不包括任何预计算转换字段(如图6a所示)或没有为虚拟子页面号602预计算转换,则过程1000继续从框1009进行到框1013。

在框1013,所述select电路631进行select操作,以基于tlb条目650中的位向量622计算物理子页面号612。所述select电路631取位向量622和虚拟子页面号602作为输入,并通过计算位向量622中的第i个最低有效的被断言位的索引,确定物理子页面号612,其中i表示所请求的虚拟子页面号602。所述select电路631输出的得到的索引是物理子页面号612,其识别分配给所请求的虚拟子页面号602的物理子页面。

一旦根据框1011或1013已经计算出物理子页面号612,过程1000继续到框1015。在框1015,所述tlb303输出物理存储器地址610,包括来自tlb条目650的物理区号611、预计算或计算的物理子页面号612和从所请求的虚拟存储器地址600的子页面偏移603复制的子页面偏移613。

在框1005,如果请求虚拟存储器地址400从而tlb303不含有用于所请求的虚拟页面号407的条目,则发生tlb未命中,且过程1000继续到框1021。在框1021,使用虚拟存储器地址400中的虚拟页面号407遍历页面表311的内部节点(例如411、412)直到到达叶节点412,进行页面表游走。叶节点412中的映射(例如位向量423)用于计算物理子页面号,如框1023所提供。在一个实施例中,使用页面表条目中的位向量423进行select函数,与tlb303中的框1013相似。

在框1025,创建tlb条目,其将所请求的虚拟页面号与从页面表游走中确定的物理页面号(组合地址420、421和422)相关联。将位向量423从页面表条目复制到新tlb条目。在框1017,一旦虚拟存储器地址600已经被转换到物理存储器地址610(通过tlb303或页面表311),所述存储器请求在返回的物理存储器地址610上根据初始存储器请求来访问存储器206。通过上述过程900和1000的操作,所述计算系统200因此支持碎片化的非邻接存储器的分配,以备份大虚拟超级页面。

一种设备包括地址转换缓冲器,其为多个虚拟页面号中的每个虚拟页面号存储与所述虚拟页面号相关联的映射。所述映射识别分配给所述虚拟页面号的一组物理子页面,且所述组物理子页面包括物理存储器区中的多个邻接子页面的至少第一物理子页面,且不包括所述物理存储器区中的所述多个邻接子页面的至少第二物理子页面。存储器管理单元与地址转换缓冲器耦合,从而响应于接收到请求的虚拟子页面号和所述多个虚拟页面号的请求的虚拟页面号,基于与所述请求的虚拟页面号相关联的所述映射,确定物理子页面号,其识别分配给所述请求的虚拟子页面号的所述多个邻接子页面的物理子页面。

在所述设备中,对于所述多个虚拟页面号的每个虚拟页面号,与所述虚拟页面号相关联的映射包括位向量,其含有分配给虚拟页面号的所述多个邻接物理子页面的每个物理子页面的被断言位以及未分配给虚拟页面号的所述物理存储器区中的每个物理子页面的被去断言位。

所述设备还包括与所述地址转换缓冲器耦合的select电路,从而通过计算所述位向量中的第i个最低有效的被断言位的索引,为所述多个虚拟页面号的每个虚拟页面号确定物理子页面号,其中i表示所述请求的虚拟子页面号。

在所述设备中,所述地址转换缓冲器是转换后备缓冲器(tlb),其还包括对于所述多个虚拟页面号的每个虚拟页面号的预计算转换字段,其将推断的虚拟子页面号与预计算的物理子页面号相关联,所述预计算的物理子页面号识别分配给所述推断的虚拟子页面号的物理子页面。

所述设备还包括select电路,以响应于接收到所述请求的虚拟子页面号,将所述请求的虚拟子页面号与所述推断的虚拟子页面号比较。如果所述请求的虚拟子页面号与所述推断的虚拟子页面号匹配,所述select电路通过从所述预计算转换字段读取所述预计算的物理子页面号来确定所述物理子页面号。如果所述请求的虚拟子页面号与所述推断的虚拟子页面号不匹配,所述select电路通过基于所述映射和所述请求的虚拟子页面号计算所述物理子页面号来确定所述物理子页面号。

在所述设备中,所述映射包括一组预计算转换,每个预计算转换将预计算的虚拟子页面号与预计算的物理子页面号相关联。

所述设备还包括与所述存储器管理单元耦合的空闲列表。所述空闲列表含有一组一个或多个节点。所述组一个或多个节点中的每个节点包括位向量,并识别部分空闲的物理存储器区。所述位向量识别所述部分空闲的物理存储器区中的第一空闲子页面子集和所述部分空闲的物理存储器区中的第二分配子页面子集。

一种方法包括为多个虚拟页面号中的每个虚拟页面号存储与所述虚拟页面号相关联的映射。所述映射识别分配给所述虚拟页面号的一组物理子页面。所述组物理子页面包括物理存储器区中的多个邻接子页面的至少第一物理子页面,且不包括所述物理存储器区中的所述多个邻接子页面的至少第二物理子页面。所述方法还包括响应于接收到请求的虚拟子页面号和所述多个虚拟页面号的请求的虚拟页面号,基于与所述请求的虚拟页面号相关联的所述映射,确定物理子页面号,其识别分配给所述请求的虚拟子页面号的所述多个邻接子页面的物理子页面。

所述方法还包括,对于所述多个虚拟页面号的每个虚拟页面号,将与所述虚拟页面号相关联的所述映射记录为位向量,其含有分配给虚拟页面号的所述多个邻接物理子页面的每个物理子页面的被断言位以及未分配给虚拟页面号的所述物理存储器区中的每个物理子页面的被去断言位。

所述方法还包括通过计算所述位向量中的第i个最低有效的被断言位的索引,为所述多个虚拟页面号的每个虚拟页面号确定物理子页面号,其中i表示所述请求的虚拟子页面号。

所述方法还包括,对于所述多个虚拟页面号的每个虚拟页面号,将推断的虚拟子页面号和预计算的物理子页面号存储在所述地址转换缓冲器的预计算转换字段中,所述预计算的物理子页面号识别分配给所述推断的虚拟子页面号的物理子页面。

所述方法还包括响应于接收到所述请求的虚拟子页面号,将所述请求的虚拟子页面号与所述推断的虚拟子页面号比较,且如果所述请求的虚拟子页面号与所述推断的虚拟子页面号匹配,通过从所述预计算转换字段读取所述预计算的物理子页面号来确定所述物理子页面号。

所述方法还包括将一组一个或多个节点存储在空闲列表中。所述组一个或多个节点中的每个节点包括位向量,并识别部分空闲的物理存储器区。所述位向量识别所述部分空闲的物理存储器区中的第一空闲子页面子集和所述部分空闲的物理存储器区中的第二分配子页面子集。所述方法还包括响应于分配物理存储器的请求,从所述空闲列表中的所述组一个或多个节点中选择第一节点。所述空闲列表与大于所述请求的存储器大小的p大小相关联。所选择的第一节点中识别的部分空闲的物理存储器区含有至少p空闲存储器容量。

所述方法还包括,通过计算所述物理存储器区的位向量,解放所述组物理子页面的一个或多个子页面。所述位向量中的每个位指示所述物理存储器区中的对应子页面是否空闲。所述方法还包括将新节点添加到第一空闲列表。所述新节点含有计算的位向量,并识别所述物理存储器区。

所述方法还包括,对于所述多个虚拟页面号的每个虚拟页面号,在存储与所述虚拟页面号相关联的映射之前,且响应于转换后备缓冲器(tlb)未命中,基于所述虚拟页面号遍历页面表,从而识别所述页面表中的映射。所述映射作为位向量存储在页面表中。所述方法还包括,通过将所述映射从页面表复制到tlb,存储所述映射。

一种计算系统包括含有物理存储器区的主存储器、与所述主存储器耦合的处理器以及地址转换缓冲器,从而为多个虚拟页面号中的每个虚拟页面号存储与所述虚拟页面号相关联的映射。所述映射识别分配给所述虚拟页面号的一组物理子页面。所述组物理子页面包括物理存储器区中的多个邻接子页面的至少第一物理子页面,且不包括所述物理存储器区中的所述多个邻接子页面的至少第二物理子页面。所述计算系统还包括存储器管理单元,其与所述处理器和所述地址转换缓冲器耦合,从而响应于接收到请求的虚拟子页面号和所述多个虚拟页面号的请求的虚拟页面号,基于与所述请求的虚拟页面号相关联的所述映射,确定物理子页面号,其识别分配给所述请求的虚拟子页面号的所述多个邻接子页面的物理子页面。

在所述计算系统中,对于所述多个虚拟页面号的每个虚拟页面号,与所述虚拟页面号相关联的所述映射包括位向量,其含有分配给虚拟页面号的所述多个邻接物理子页面的每个物理子页面的被断言位以及未分配给虚拟页面号的所述物理存储器区中的每个空闲子页面的被去断言位。所述计算系统还包括与所述地址转换缓冲器耦合的select电路。通过计算位向量中的第i个最低有效的被断言位的索引,所述select电路确定物理子页面号,其中i表示所请求的虚拟子页面号。

在所述计算系统中,所述地址转换缓冲器还包括对于所述多个虚拟页面号的每个虚拟页面号的预计算转换字段,以将推断的虚拟子页面号和预计算的物理子页面号相关联,所述预计算的物理子页面号识别分配给所述推断的虚拟子页面号的物理子页面。所述计算系统还包括select电路,以将所请求的虚拟子页面号与推断的虚拟子页面号比较。如果所述请求的虚拟子页面号与所述推断的虚拟子页面号匹配,所述select电路通过从所述预计算转换字段读取所述预计算的物理子页面号来确定所述物理子页面号。如果所述请求的虚拟子页面号与所述推断的虚拟子页面号不匹配,所述select电路通过基于所述映射和所述请求的虚拟子页面号计算所述物理子页面号来确定所述物理子页面号。

所述计算系统还包括与所述处理器耦合的空闲列表,以存储一组一个或多个节点。所述组一个或多个节点中的每个节点包括位向量,并识别部分空闲的物理存储器区。所述位向量识别所述部分空闲的物理存储器区中的第一空闲子页面子集和所述部分空闲的物理存储器区中的第二分配子页面子集。通过基于所述虚拟存储器页面的大小并基于与所述空闲列表相关联的p大小选择所述空闲列表、从所述空闲列表中的该组一个或多个节点选择第一节点、并基于所选择的第一节点中的位向量选择该组物理子页面来分配给所述虚拟存储器页面,所述处理器还从所述主存储器为虚拟存储器页面分配物理存储器。所选择的第一节点中识别的部分空闲的物理存储器区含有至少p空闲存储器容量。

在所述计算系统中,通过计算物理存储器区的位向量并将新节点添加到空闲列表,所述处理器还解放该组物理子页面的一个或多个子页面。所述位向量中的每个位指示所述物理存储器区中的对应子页面是否空闲,且所述新节点含有计算的位向量并识别所述物理存储器区。

如本文所用,术语“耦合到”可意味着直接或通过一个或多个中间部件间接地耦合。通过本文所述的各种总线提供的任何信号可与其他信号进行时分复用,并且可通过一根或多根公共总线提供。另外,电路部件或框之间的互连可显示为总线或单根信号线。总线中的每一个替代地可是一根或多根单信号线,并且单信号线中的每一个替代地可是总线。

某些实施例可实现为计算机程序产品,其可包括存储在非暂时性计算机可读介质上的指令。这些指令可用于对通用或专用处理器进行编程以执行所描述的操作。计算机可读介质包括用于以机器(例如,计算机)可读的形式(例如,软件、处理应用)存储或传输信息的任何机制。非暂时性计算机可读存储介质可包括但不限于磁存储介质(例如,软盘);光存储介质(例如,cd-rom);磁光存储介质;只读存储器(rom);随机存取存储器(ram);可擦可编程存储器(例如,eprom和eeprom);闪存或另一种类型的适合存储电子指令的介质。

另外,一些实施例可在分布式计算环境中实践,其中计算机可读介质存储在多于一个计算机系统上和/或由多于一个计算机系统执行。另外,可在连接计算机系统的传输介质间拉动或推动计算机系统之间传递的信息。

通常,表示计算系统200的数据结构和/或其承载在计算机可读存储介质上的部分可以是数据库或其他数据结构,其可以由程序读取并直接或间接地用于制造包括计算系统200的硬件。举例来说,数据结构可以是采用高级设计语言(hdl)(诸如verilog或vhdl)的硬件功能的行为级描述或寄存器传送级(rtl)描述。所述描述可以由合成工具读取,该合成工具可对描述进行合成以从合成库产生包括一系列门的网表。所述网表包括一组门,其还表示包括计算系统200的硬件的功能性。然后,可以放置并且路由该网表以产生描述要应用于掩模的几何形状的数据集。所述掩模然后可以用于各种半导体制造步骤中,以产生对应于计算系统200的一个或多个半导体电路。替代地,计算机可读存储介质上的数据库可以是网表(带有或没有合成库)或数据集(根据需要),或图形数据系统(gds)ii数据。

尽管以特定顺序显示和描述了本文方法的操作,但是可更改每种方法的操作顺序,以便可以相反的顺序执行某些操作或者以使得可至少部分地与其他操作同时执行某些操作。在另一个实施例中,不同操作的指令或子操作可以是间歇和/或交替的方式。

在以上说明书中,已参考其具体示例性实施例描述了实施例。然而,将明显的是:在不脱离如在所附权利要求中阐述的实施例的更广范围的情况下,可对其做出各种修改和改变。因此,说明书和附图被认为是说明性的意义而不是限制性的意义。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1