存储器合并的计算机实现方法、系统以及装置制造方法

文档序号:6484867阅读:258来源:国知局
存储器合并的计算机实现方法、系统以及装置制造方法
【专利摘要】本文讨论了与存储器管理关联的计算机实现方法、装置以及计算机可读介质的实施例。一种合并空闲的存储器区间的计算机实现方法可以包括查明存储器的第一区间是空闲的(302、304)。可以例如根据与存储器的第一区间关联的首部来做出紧接在存储器的第一区间之前或之后的存储器的第二区间是否空闲的确定(306)。在做出存储器的第二区间是空闲的确定之后,可以合并存储器的第一区间与存储器的第二区间(310)。可以描述和/或要求其他实施例。
【专利说明】存储器合并的计算机实现方法、系统以及装置
【技术领域】
[0001]本发明的实施例大体上涉及计算的领域,并且更特别地,涉及计算设备的存储器的重组。
【背景技术】
[0002]本文所提供的背景描述是为了大体呈现本公开的上下文的目的。就在本背景章节中的描述而言,当前被指名的
【发明者】的工作以及该描述的原本在提交申请时不构成现有技术的各方面,既不明确又不隐含地承认其为针对本公开的现有技术。除非本文另有指示,本章节中所描述的方法不是对于本公开中的权利要求的现有技术,并且不因包含在本章节中而承认其是现有技术。
[0003]计算机程序、或应用通常包括用于动态管理由操作系统(“OS”)分配给计算机程序或应用的存储器的逻辑,也被称为“运行时间存储器管理”。通常,计算机程序或应用从由OS所管理的系统存储器池来获取大块的存储器,然后将那些块分成更小的部分,并且分配/解除分配它们以供内部使用。然而可以保留不再被需要的存储器以供应用的可能的重新使用。尽管在程序运行期间可以将一些存储器返回到系统存储器池和OS,但是通常仅在退出应用时将被分配给应用的存储器全部返回。
[0004]各种技术可以被用来改善应用的动态存储器管理。例如,为了减少存储器消耗,可以实现存储器分割/合并、对用户-要求的大小进行凑整、以及碎片避免。为了更快的性能,低算法复杂度和引用局部性可能是重要的。为了多线程应用中的更快性能和可扩展性,应用的动态存储器管理可以包括最小化数据共享以及最大化用于同时操作的并行性。通常,可以通过使用单独的每线程或每中央处理单元(“CPU”)存储器堆来实现多线程存储器分配中的高性能。然而,这些独立的存储器堆可以从相同的地址空间中取存储器,所述相同的地址空间可能在应用中的所有线程之间被共享并且还可能变成碎片,从而导致增加的存储器消耗。
[0005]用于避免存储器碎片的各种方法可能显著降低其中多个线程对动态存储器进行有效地分配以及解除分配的应用的性能。例如,这些方法中的一些可能要求不可以同时运行其他存储器管理操作。
【专利附图】

【附图说明】
[0006]通过以下结合附图的详细描述将容易理解实施例。为了促进该描述,相似的附图标记指代相似的结构元素。在附图的图中通过示例的方式并且不通过限制的方式来图示实施例。
[0007]图1示意性地图示根据本公开的实施例的合并的存储器区间的示例。
[0008]图2示意性地描绘根据本公开的实施例的存储器区间的示例性状态和转移。
[0009]图3和4示意性地描绘根据本公开的实施例的示例性方法。
[0010]图5示意性地描绘根据本公开的实施例的被配置成实现动态存储器管理的示例性系统。
【具体实施方式】
[0011]在各种实施例中,可以提供其中包含计算机可读且可执行代码的非临时计算机可读介质。该代码可以包括指令,所述指令被配置成响应于所述指令的运行而启用由装置所操作的应用以查明存储器的第一区间是否空闲。另外地,所述指令可以启用应用来修改存储器的第一区间的状态以指示该存储器的第一区间处于合并中(coalescing)状态。所述指令可以确定紧接在存储器的第一区间之前或紧接在存储器的第一区间之后的存储器的第二区间是否空闲。在确定存储器的第二区间是空闲的之后,所述指令可以启用应用来修改该存储器的第二区间的状态以指示该存储器的第二区间处于合并中状态。然后所述指令可以启用应用来合并存储器的第一区间与存储器的第二区间。
[0012]在一些实施例中,非临时计算机可读介质可以进一步包括指令,所述指令被配置成响应于所述指令的运行而启用所述应用以根据与存储器的第一区间关联的首部来确定存储器的第二区间是空闲、使用中、还是处于合并中状态。在一些实施例中,可以启用应用以根据与存储器的第一区间关联的首部来确定存储器的第二区间的大小。在一些实施例中,可以启用应用以锁定存储器的第一区间和存储器的第二区间来防止由除调用存储器管理器的应用线程之外的应用线程所进行的修改。在一些实施例中,可以启用应用来在原子操作中确定存储器的第二区间是否空闲,确定存储器的第二区间的大小,修改存储器的第二区间的状态以指示其处于合并中、以及锁定存储器的第二区间。在一些实施例中,原子操作可以是比较并交换操作。
[0013]在一些实施例中,可以启用应用以在确定存储器的第二区间处于合并中状态之后将存储器的第一区间的标识插入到合并队列中来暂时地延迟存储器的第一和第二区间的合并。在一些实施例中,可以进一步启用应用以基于存储器的第二区间已从处于合并中状态转移到空闲的确定来从合并队列中移除存储器的第一区间,以启用合并操作来合并存储器的第一和第二区间以继续进行。在一些实施例中,在确定存储器的第二区间处于使用中之后,可以启用应用以修改存储器的第一区间的状态来指示存储器的第一区间是空闲的。
[0014]在各种实施例中,可以提供其中包含计算机可读且可执行代码的非临时计算机可读介质。该代码可以包括指令,所述指令被配置成响应于所述指令的运行而启用由装置所操作的应用来查明存储器的第一区间是空闲的。在查明存储器的第一区间是空闲的之后,还可以启用所述应用以根据与存储器的第一区间关联的首部来确定紧接在存储器的第一区间之前的存储器的第二区间是空闲的还是当前正与存储器的第三区间合并。在存储器的第二区间是空闲的情况下,可以进一步启用所述应用以合并存储器的第一区间与存储器的第二区间。在存储器的第二区间当前正与存储器的第三区间合并的情况下,可以进一步启用所述应用以将存储器的第一区间的标识插入到合并队列中来暂时地延迟存储器的第一和第二区间的合并。
[0015]在各种实施例中,可以提供其中包含计算机可读且可执行代码的非临时计算机可读介质。该代码可以包括指令,所述指令被配置成响应于所述指令的运行而启用由装置所操作的应用以查明存储器的第一区间是空闲的。还可以启用所述应用来确定紧接在存储器的第一区间之前或之后的存储器的第二区间是空闲的还是当前正与存储器的第三区间合并。在存储器的第二区间被确定为空闲的情况下,还可以启用所述应用来合并存储器的第一区间与存储器的第二区间,或者在存储器的第二区间被确定为当前正与存储器的第三区间合并的情况下,将存储器的第一区间的标识插入到合并队列中以暂时地延迟存储器的第一和第二区间的合并。
[0016]在各种实施例中,可以实施具有多个以上所描述的操作的方法。在各种实施例中,一种装置可以被配置成实施此类方法。在以下详细描述中,引用了形成本文的一部分的附图,其中自始至终相似的附图标记指代相似的部分,并且在所述附图中通过图示的方式示出了可以被实施的实施例。要理解的是,可以利用其他实施例并且可以做出结构或逻辑上的改变而不背离本公开的范围。因而,不采用限制意义来进行以下详细描述,并且由所附权利要求以及其等价物来定义实施例的范围。
[0017]可以采用最有助于理解所要求保护的主题事项的方式来将各种操作依次描述为多个离散的动作或操作。然而,不应该将描述的次序解释为暗示这些操作是必须次序依赖的。特别地,这些操作可以不采用呈现的次序来执行。所描述的操作可以采用与所描述的实施例不同的次序来执行。在附加的实施例中可以执行各种附加的操作和/或可以省略所描述的操作。
[0018]为了本公开的目的,短语“A和/或B”意为(A)、(B)、或(A和B)。为了本公开的目的,短语“A、B、和 / 或 C” 意为(A)、(B)、(C)、(A 和 B)、(A 和 C)、(B 和 C)、或(A、B 和 C)。
[0019]描述可以使用短语“在一个实施例中”或“在实施例中”,其可以均指代相同或不同的实施例中的一个或多个。进而,如关于本公开的实施例所使用的,术语“包含”、“包括”、“具有”等是同义的。
[0020]如本文所使用的,术语“模块”可以指代、属于、或包括运行一个或多个软件或固件程序、组合逻辑电路、计算机程序、和/或提供所描述功能的其他合适组件的专用集成电路(“ASIC”)、电子电路、处理器(共享、专用、或群组)、和/或存储器(共享、专用、或群组)。现在参考图1,其中示出根据本公开的实施例的合并的存储器区间的示例。如所图示的,存储器10可以包括具有关联首部14的存储器的第一区间12。紧接在存储器的第一区间12之前的可以是也具有关联首部18的存储器的第二区间16。紧接在存储器的第一区间12之后的可以是同样具有关联首部22的存储器的第三区间20。
[0021]首部可以包括关于存储器的关联区间的诸如其状态和/或大小之类的各种信息。例如,与第一存储器区间12关联的首部14可以包括关于存储器的第一区间12的状态和/或大小的信息24。如以下将讨论的,在一些实施例中,状态还可以指示存储器的区间是否锁定。在其他实施例中,单独的锁定字段(未示出)可以被用来指示存储器的区间是否锁定。像与存储器的第一区间12关联的首部14 一样,与存储器的第二区间16关联的首部18可以包括关于区间的状态和/或大小的信息26,并且与存储器的第三区间20关联的首部22可以包括关于区间的状态和/或大小的信息28。在各种实施例中,存储器的区间的状态可以包括空闲状态、使用中/锁定状态、和/或合并中/锁定状态。
[0022]可以采用各种方式来将存储器的区间与紧接在后面的存储器的区间(另外称为“右邻居”)合并。例如,在图1中,可以将存储器的第一区间12的大小添加到其位置(例如,使用指针运算)以确定存储器的第三区间20的位置。然后可以检查存储器的第三区间20的首部22以确定其状态(例如,空闲、合并中或使用中)以及大小。如果存储器的第三区间20是空闲的,那么两个区间可以被合并(组合)成单个存储器区间和单个关联首部。
[0023]还可以将存储器的区间与紧接在前面的存储器区间(另外称为其“左邻居”)合并。然而,这可能稍微更复杂,原因在于左邻居的位置在不具有其大小的情况下可能不是明显或可计算的。进而,由于针对相同的存储器区间的冲突合并请求的可能性,与左邻居的合并可能使与右邻居的合并复杂化。
[0024]因此,除了关于其自身的信息之外,在一些实施例中,每个存储器区间可以在关联首部中包括关于紧接在前面的存储器区间的信息。例如,在图1中,存储器的第一区间12可以在其关联首部14中包括关于存储器的第二区间16的诸如存储器的第二区间16的大小和/或状态之类的信息30。在已知存储器的第二区间16的大小的情况下,可以通过例如从存储器的第一区间12的开始地址中减去该大小来计算存储器的第二区间的开始位置。类似地,存储器的第二区间16可以在关联首部18中包括关于其左邻居(未示出)的大小和/或状态的信息32,并且存储器的第三区间20可以在关联首部22中包括关于存储器的第一区间12的大小和/或状态的信息34。
[0025]为了避免对与存储器区间关联的信息的冲突修改,特别是对于多线程应用而言,互斥访问(也公知为“锁定”)可以由单独的应用线程来使用。在各种实施例中,存储器的区间可以采用不防止或阻止对其他存储器区间的操作的运行的方式来锁定。例如,可以独立地锁定存储器的第一区间和存储器的第二区间而不防止或阻止由多线程应用的其他线程所执行的对其他存储器区间的操作。
[0026]如果存储器的区间正被应用所使用或者正与另一个存储器区间合并,则可以锁定它。在一些实施例中,可以锁定要被合并的存储器的第一区间和存储器的第二区间这二者以防止由除调用应用线程之外的应用线程所进行的修改。如以下将讨论的,在一些实施例中关于存储器区间(例如,24-34)的信息还可以指示存储器的区间是否锁定,然而在其他实施例中可以使用单独的锁定字段(未示出)。在一些实施例中,锁定存储器区间可以要求修改与该存储器区间和相邻存储器区间这二者关联的信息。例如,锁定存储器区间12可以要求修改其关联首部14中的信息24 (或单独的锁定字段)以及其右邻居的首部22中的信息34 (或单独的锁定字段)这二者。如果在对一个存储器区间的首部做出修改之后确定其邻居的首部中的信息指示了冲突并行修改,那么可以取消对存储器区间的锁定。如果在第一首部中做出了修改,那么该修改可以被恢复。
[0027]在各种实施例中,当相邻存储器区间被确定为是空闲的,它们可以被合并成单个存储器区间。例如,在图1中,诸如当存储器的区间被应用释放时,存储器的第一区间12可以根据检查其首部14中的信息24或隐含地被确定为是空闲的。在一些实施例中,然后可以例如通过更新其状态信息24和/或通过更新单独的锁定字段(未示出)来锁定存储器的第一区间12,以供与相邻存储器区间的潜在合并。
[0028]一旦存储器的区间被确定为是空闲的,就可以检查其邻居以确定合并是否可能。例如,一旦存储器的第一区间12被确定为是空闲的,就可以检查关于存储器的第二区间16的信息30以确定存储器的第二区间16是否空闲,以及其大小。在一些实施例中,此时可以通过更新其状态信息26或单独的锁定字段(未示出)来锁定存储器的第二区间16。假设存储器的第二区间16是空闲的,那么如图1的右侧所示出的,存储器的第一和第二区间可以被合并成单个存储器区间。在合并了存储器的第一区间12和存储器的第二区间之后,可以更新关于存储器的第二区间16的信息26以反映存储器的第二区间16的新的更大的大小。另外地,在一些实施例中,可以更新存储器的第三区间20的首部22中的信息34来反映其新的左邻居。
[0029]可替代地,可以采用类似的方式将存储器的区间12与其右邻居合并。例如,假设应用释放了存储器的第二区间16而不是存储器的第一区间12。然后可以确定存储器的第一区间12是否空闲。在一些实施例中,这可以通过检查存储器的第一区间12的首部14中的信息24 (如以上所描述的,其可以使用指针运算来定位)而完成。如果存储器的第一区间20是空闲的,那么可以合并存储器的第二区间16与存储器的第一区间12。
[0030]在一些实施例中,可以在多用途或组合的大小-和-状态字段中存储被包含在首部中的关于存储器区间的状态和/或大小的信息(例如,24-34)。这可以允许在单个存储器读出操作中确定存储器区间的状态和大小这二者。例如,读出操作可以使用24-34中的任何一个作为输入来执行,并且可以产生存储器区间的大小和状态这二者。在一些实施例中,如果多用途字段包含低于第一阈值的值,那么存储器区间可以被确定为处于第一状态。第一阈值和第二阈值之间的值可以指示存储器区间处于第二状态,并且高于第二阈值的值可以指示存储器区间处于第三状态。存储器区间的大小可以使用对多用途字段中的值的运算和/或按位操作来确定。另外地,如果一个或两个阈值与所允许的最小和/或最大存储器区间大小相对应,那么可能没有必要进行附加的计算来确定存储器区间的大小。可替代地,存储器的区间可以被配置成是2的预定次幂的倍数的大小。在此类情况下,多用途字段的较低位可以不由任何有效的大小值来使用,并且可以被用来存储状态值。
[0031]在一些实施例中,多用途大小-和-状态字段还可以被用于锁定存储器的区间。这可以促进在单个原子操作中读出存储器区间的状态和大小并且锁定该区间。例如,在一些实施例中,比较并交换操作可以使用24-34中的任何一个作为输入来执行,并且可以修改该字段以指示存储器的区间是锁定的,同时还在该操作之前产生区间的大小和状态。在一些实施例中,存储器的区间可以被视为当处于一些状态时是锁定的并且当处于其他状态时是未锁定的。例如,在一些实施例中,如果存储器的区间处于空闲状态,那么其可以被确定为是未锁定的,而对于所有其他状态(例如,使用中或合并中)而言存储器的区间可以被确定为是锁定的。
[0032]图2描绘根据各种实施例的存储器区间的状态和状态转移200。如果存储器区间当前未被其所有者应用所使用或者正与另一个存储器区间合并,那么存储器的区间可以处于空闲状态202。从状态202,如果存储器的区间被分配以供该应用使用,那么其状态可以转移到使用中/锁定状态206。如果存储器的区间被选择成被合并,那么其可以从空闲状态202转移到合并中/锁定状态204以确保在合并期间不分配或不以其他方式修改该存储器的区间。
[0033]当将存储器的区间从空闲状态202转移到使用中/锁定状态206时,可以确定的是另一个线程或CPU正将存储器的区间并行地转移到使用中/锁定状态206或到合并中/锁定状态204。在此类情况下,可以将可能已经被修改以反映该转移的关联首部信息恢复到空闲状态202 (也被称为“锁定回退”),以避免与并行执行的转移的冲突。
[0034]从合并中/锁定状态204,如果存储器的区间与其左邻居合并,那么可以将该区间说成已被“消耗”,在这之后其可以不再作为具有其自身首部的独立存储器区间而存在。关于这的示例见图1中,其中存储器的第二区间16消耗了存储器的第一区间12,以使得存储器的第一区间12不再作为具有首部的独立存储器区间而存在。如果存储器的区间消耗其右邻居而不是被其左邻居所消耗,那么在合并之后该存储器的区间可以转移回到空闲状态202。例如,在图1中,在存储器的第二区间16消耗了存储器的第一区间12之后,存储器的第二区间可以从合并中/锁定状态204转移到空闲状态202。
[0035]从状态204,还可以确定的是存储器区间的左或右邻居处于使用中/锁定状态206中。在此类情况下,可以将存储器的区间返回到空闲状态202。然而,从状态204,如果确定相邻区间也处于合并中/锁定状态204或者另一个存储器管理线程正将相邻区间转移到状态204或到状态206,那么存储器的区间可以转移到使用中/锁定状态206,并且将存储器的区间的标识插入到合并队列(未示出)中直到其邻居可自由合并。例如,即使存储器区间的自身的关于其左邻居的信息指示左邻居处于空闲状态202,该左邻居也可能处于正被另一个存储器管理线程所获取的过程中。这可以根据正处于合并中/锁定状态204的左邻居的自身的首部来确定。当处于使用中/锁定状态206时,存取器的区间可以被所有者应用来利用并且对于其他使用而言不可访问,或者其可以处于合并队列中。从使用中/锁定状态206,当存储器的区间被所有者应用解除分配或者当它被从合并队列中释放时,由于其邻居不再处于合并中/锁定状态204,所以其可以转移到合并中/锁定状态204 (例如,被“释放”以供合并)。
[0036]图3中描绘根据各种实施例的合并存储器区间的示例性方法300。在块302处,应用可以查明存储器的第一区间是空闲的。例如,应用可以解除分配存储器的第一区间,在该情况下可以查明存储器的第一区间是空闲的。在一些实施例中,可以由应用的动态存储器管理逻辑来周期性地检查存储器的区间以确定它们是否空闲。
[0037]在块304处,可以修改与存储器的第一区间关联的首部以指示存储器的第一区间处于合并中。例如,可以修改存储器的第一区间12的首部14以及更特别地关于其状态的信息24以指不存储器的第一区间12处于合并中/锁定状态204中。在一些实施例中,也可以修改右邻居的首部以指示存储器的第一区间处于合并中/锁定状态204中。
[0038]在块305处,可以确定相邻的第二存储器区间是否空闲。例如,在块306处,可以根据与存储器的第一区间关联的首部来确定紧接在存储器的第一区间之前的存储器的第二区间(左邻居)是否空闲。例如,可以检查与存储器的第一区间12关联的首部14中的信息30以确定存储器的第二区间16是否处于空闲状态202。尽管未示出,可替代地,可以确定紧接在存储器的第一区间之后的另一个存储器区间(右邻居)是否空闲。如果在块305处确定了存储器的第二区间是空闲的,那么在一些实施例中在块308处存储器的第二区间的大小可以根据与存储器的第一区间关联的首部来确定。在一些实施例中,可以在单个存储器读出操作中执行块305-308。在块309处,可以修改与存储器的第二区间关联的信息以指示存储器的第二区间处于合并中。例如,可以修改存储器的第一区间12的首部14中的关于左邻居区间16的状态的信息30以及首部18中的信息26来指示区间16处于合并中/锁定状态204中。在一些实施例中,原子操作(例如,比较并交换)可以被用来执行块305-309,例如通过读出并且更新其组合的大小-和-状态字段。
[0039]在块310处,存储器的第一区间和存储器的第二区间可以被合并成单个更大的存储器区间。例如,图1中的存储器的第一区间12与存储器的第二区间16合并(并且被存储器的第二区间16所消耗)。
[0040]然而,在块305处可以确定存储器的第二区间不是空闲的。在那种情况下,如果存储器的第二区间正与另一个存储器区间合并(例如,处于状态204),那么在块312处可以将存储器的第一区间的标识插入到合并队列中。这可以暂时地延迟存储器的第一和第二区间的合并直到存储器的第二区间可用。
[0041]当处于合并队列中时,存储器的第一区间可以被设成使用中/锁定状态206。在一些实施例中,合并队列可以是链接列表,但也可以使用其他数据结构。在一些实施例中,该队列可以是先进先出(“FIFO”)队列,但也可以使用其他排序技术。在一些实施例中,该队列可以是非阻塞的。例如,以该方式来使用该队列可以确保并行运行的操作即使在这些操作中的一个或多个被暂时停止的情况下也可以朝着将存储器区间的标识插入到队列或者从队列中移除存储器区间的标识而前进。
[0042]如果存储器的第二区间不是处于合并中(例如,状态204)而是处于使用中(例如,状态206),那么在块314处可以修改与存储器的第一区间关联的首部以指示其是空闲的(例如,状态202)。
[0043]如以上所描述的方法300不意在限制。可以采用未示出的各种次序来执行各种动作。此外,可以省略和/或添加一个或多个动作。例如,可以在将存储器区间与其左邻居合并之前或之后将该存储器区间与其右邻居合并。
[0044]图4描绘根据各种实施例的用于处理合并队列的示例性方法400。如所图示的,在块402处,可以例如由应用根据与存储器的第一区间关联的首部来确定存储器的第二区间是否仍然正与存储器的第三区间合并。例如,在将其标识插入到合并队列中之后经过预定量的时间时,可以重新检查存储器的第一区间的首部以确定存储器的第二区间是否仍然处于合并中。如果如此,那么该方法可以在经过另一个预定时间间隔时继续进行而回到块402。如果不是,那么在块404处可以从合并队列中移除存储器的第一区间。如果存储器的第二区间被转移到处于空闲,那么在块406处该方法可以继续进行而回到图3的块308,以使得可以合并存储器的第一和第二区间。然而如果存储器的第二区间被转移到处于使用中(例如,其被分配给多线程应用的另一个线程),那么在块408处可以将存储器的第一区间简单地返回到空闲状态,原因在于存储器的第二区间可能在一些时间内不可用。
[0045]在一些实施例中,每当需要新的存储器区间时,动态存储器管理逻辑可以首先尝试通过重新检查被包含在合并队列中的存储器区间并且在可能的情况下进行合并来从所述合并队列中获得存储器。在一些实施例中,如果合并队列中的所有存储器区间都被确定为仍然处于合并中,那么动态存储器管理逻辑仅找出其他空闲的存储器。
[0046]本文所描述的技术和装置可以使用合适的硬件和/或软件来如期望地配置而实现成系统或装置。进一步地,虽然目前为止已将本公开的实施例描述为应用的动态存储器管理,但是本公开的实施例或其各方面可以由操作系统、虚拟机管理器、或其他存储器管理实体来实施。
[0047]图5图不用于各种实施例的不例性系统500,其包括一个或多个处理器或处理器核504、被耦合到一个或多个处理器或处理器核504中的至少一个的系统控制逻辑508、被耦合到系统控制逻辑508的系统存储器512、被耦合到系统控制逻辑508的非易失性存储器(NVM) /存储516、以及被耦合到系统控制逻辑508的一个或多个通信接口 520。[0048]用于一个实施例的系统控制逻辑508可以包括任何合适的接口控制器,以提供到一个或多个处理器504中的至少一个和/或到与系统控制逻辑508进行通信的任何合适的设备或组件的任何合适的接口。
[0049]用于一个实施例的系统控制逻辑508可以包括一个或多个存储器控制器以提供到系统存储器512的接口。系统存储器512可以被用来例如为系统500加载以及存储数据和/或指令。例如用于一个实施例的系统存储器512可以包括诸如合适的动态随机访问存储器(DRAM)之类的任何合适的易失性存储器。用于一个实施例的系统控制逻辑508可以包括一个或多个输入/输出(I/O)控制器以提供到NVM/存储516以及一个或多个通信接口 520的接口。
[0050]例如,NVM/存储516可以被用来存储数据和/或指令。NVM/存储516例如可以包括诸如闪存之类的任何合适的非易失性存储器和/或例如可以包括诸如一个或多个硬盘驱动器(HDD)、一个或多个固态驱动器、一个或多个光盘(CD)驱动器、和/或一个或多个数字通用盘(DVD)驱动器之类的任何合适的一个或多个非易失性存储设备。
[0051]NVM/存储516可以包括物理地是设备的一部分但未必是该设备的一部分的存储资源,系统500被安装在所述设备上或者可以由所述设备来访问。例如,可以通过网络经由一个或多个通信接口 520来访问NVM/存储516。
[0052]一个或多个通信接口 520可以为系统500提供通过通信信道526与一个或多个网络528和/或与任何其他合适的设备进行通信的接口。一个或多个通信接口 520可以包括任何合适的硬件和/或固件。用于一个实施例的一个或多个通信接口 520可以包括例如无线网络适配器。一个或多个通信接口 520可以使用一个或多个天线。
[0053]系统存储器512以及NVM/存储516可以分别包括虚拟机管理器、操作系统、或具有存储器管理器模块524的应用的暂时和永久的副本。存储器管理器模块524可以包括指令,所述指令当被一个或多个处理器或处理器核504中的至少一个运行时引起操作系统或应用执行之前所描述的存储器管理方法/操作。在一些实施例中,存储器管理器模块524可以附加地/可替代地位于系统控制逻辑508中。
[0054]对于一些实施例而言,可以将一个或多个处理器或处理器核504中的至少一个与用于系统控制逻辑508的一个或多个控制器的逻辑一起封装。对于一些实施例而言,可以将一个或多个处理器或处理器核504中的至少一个与用于系统控制逻辑508的一个或多个控制器的逻辑一起封装以形成系统级封装(SiP)。对于一些实施例而言,可以将一个或多个处理器或处理器核504中的至少一个与用于系统控制逻辑508的一个或多个控制器的逻辑集成在相同的裸片上。对于一些实施例而言,可以将一个或多个处理器或处理器核504中的至少一个与用于系统控制逻辑508的一个或多个控制器的逻辑集成在相同的裸片上以形成片上系统(SoC)。
[0055]系统500可以是台式机、膝上型或平板计算机、移动电话、智能电话、机顶盒、游戏机、或具有存储器的任何其他设备。在各种实施例中,系统500可以具有更多或更少的组件和/或不同的架构。例如,在各种实施例中,系统500可以包括一个或多个摄像机528。
[0056]尽管本文为了描述的目的已图示和描述了某些实施例,但是旨在达到相同目的的多种可替代和/或等价的实施例或实现可以代替所示出和描述的实施例而不背离本公开的范围。本申请意在涵盖本文中所讨论的实施例的任何适配或变形。因而,明显意图的是本文中所描述的实施例仅由权利要求以及其等价物来限制。
【权利要求】
1.一种装置,包括: 处理器; 被耦合到所述处理器的存储器;以及 被配置成由所述处理器操作以执行以下动作的存储器管理器: 查明存储器的第一区间是空闲的; 修改所述存储器的第一区间的状态以指示所述存储器的第一区间处于合并中状态;确定紧接在所述存储器的第一区间之前或紧接在所述存储器的第一区间之后的存储器的第二区间是否空闲; 在确定所述存储器的第二区间是空闲的之后,修改所述存储器的第二区间的状态以指示所述存储器的第二区间处于合并中状态;以及 合并所述存储器的第一区间和所述存储器的第二区间。
2.权利要求1的装置,其中所述存储器管理器被进一步配置成根据与所述存储器的第一区间关联的首部来确定所述存储器的第二区间是空闲、使用中、还是处于合并中状态。
3.权利要求2的装置,其中所述存储器管理器被进一步配置成根据与所述存储器的第一区间关联的首部来确定所述存储器的第二区间的大小。
4.权利要求3的装置,其中所述存储器管理器被进一步配置成锁定所述存储器的第一区间和所述存储器的第二区间,以防止由除调用所述存储器管理器的应用线程之外的应用线程所进行的修改。
5.权利要求4的装置,其中所述存储器管理器被进一步配置成独立地锁定所述存储器的第一区间和所述存储器的第二区间,而不防止或阻止通过由多线程应用的其他线程并行地调用所述存储器管理器而执行的对所述存储器的其他区间的操作的运行。
6.权利要求4的装置,其中所述存储器管理器被进一步配置成在原子操作中确定所述存储器的第二区间是否空闲,确定所述存储器的第二区间的大小,修改所述存储器的第二区间的状态以指示其处于合并中,以及锁定所述存储器的第二区间。
7.权利要求6的装置,其中所述原子操作是比较并交换操作。
8.权利要求2的装置,其中所述存储器管理器被进一步配置成: 在确定所述存储器的第二区间处于合并中状态之后,将所述存储器的第一区间的标识插入到合并队列中以暂时地延迟所述存储器的第一和第二区间的合并;以及 在确定所述存储器的第二区间不再处于合并中状态之后,从所述合并队列中移除所述存储器的第一区间,并且在所述存储器的第二区间已从处于合并中状态转移到空闲的情况下,启用合并操作来合并所述存储器的第一和第二区间以继续进行。
9.权利要求1的装置,其中所述存储器管理器被进一步配置成在确定所述存储器的第二区间处于使用中之后修改所述存储器的第一区间的状态以指示所述存储器的第一区间是空闲的。
10.一种计算机实现方法包括: 通过由处理器所操作的存储器管理器来查明存储器的第一区间是空闲的; 在查明所述存储器的第一区间是空闲的之后,由所述存储器管理器根据与所述存储器的第一区间关联的首部来确定紧接在所述存储器的第一区间之前的存储器的第二区间是空闲的还是当前正与存储器的第三区间合并;在所述存储器的第二区间是空闲的情况下,由所述存储器管理器来合并所述存储器的第一区间与所述存储器的第二区间;以及 在所述存储器的第二区间当前正与所述存储器的第三区间合并的情况下,由所述存储器管理器将所述存储器的第一区间的标识插入到合并队列中以暂时地延迟所述存储器的第一和第二区间的合并。
11.权利要求10的计算机实现方法,进一步包括由所述存储器管理器根据与所述存储器的第一区间关联的首部来确定所述存储器的第二区间的大小。
12.权利要求11的计算机实现方法,进一步包括由所述存储器管理器在原子操作中确定所述存储器的第二区间是否空闲和所述存储器的第二区间的大小,以及锁定所述存储器的第二区间。
13.权利要求12的计算机实现方法,其中所述原子操作是比较并交换操作。
14.权利要求10的计算机实现方法,进一步包括由所述存储器管理器来修改与所述存储器的第一区间关联的首部以指示所述存储器的第一区间被锁定。
15.权利要求14的计算机实现方法,进一步包括由所述存储器管理器根据与所述存储器的第一区间关联的首部来确定所述存储器的第二区间是否处于应用的使用中。
16.权利要求15的计算机实现方法,进一步包括在确定所述存储器的第二区间处于所述应用的使用中之后由所述存储器管理器来修改与所述存储器的第一区间关联的首部以指示所述存储器的第一区间是空闲的。
17.权利要求10的计算机实现方法,进一步包括: 在将所述存储器的第一区间的标识插入到合并队列中之后,由所述存储器管理器根据与所述存储器的第一区间关联的首部来确定所述存储器的第二区间是否仍然正与所述存储器的第三区间合并;以及 基于所述存储器的第二和第三区间已经合并的确定,由所述存储器管理器从所述合并队列中移除所述存储器的第一区间以启用合并操作来合并所述存储器的第一和第二区间而继续进行。
18.—种系统,包括: 处理器; 被耦合到所述处理器的存储器; 被耦合到所述处理器的摄像机; 被配置成由所述处理器操作以进行以下动作的存储器管理器: 查明存储器的第一区间是空闲的; 根据与所述存储器的第一区间关联的首部来确定紧接在所述存储器的第一区间之前的存储器的第二区间是否空闲;以及 在确定所述存储器的第二区间是空闲的之后,合并所述存储器的第一区间与所述存储器的第二区 间。
19.权利要求18的系统,进一步包括至少一个天线,其中所述系统是移动电话。
20.权利要求18的系统,进一步包括被耦合到所述处理器的第二摄像机,其中所述系统是平板计算机。
21.一种其中包含计算机可读且可执行代码的非临时计算机可读介质,所述代码包括指令,所述指令被配置成响应于所述指令的运行而启用由装置所操作的应用以进行以下动作: 查明存储器的第一区间是空闲的; 确定紧接在所述存储器的第一区间之前或之后的存储器的第二区间是空闲的还是当前正与存储器的第三区间合并;以及 如果所述存储器的第二区间被确定为是空闲的,则合并所述存储器的第一区间与所述存储器的第二区间,或者如果所述存储器的第二区间被确定为当前正与所述存储器的第三区间合并,则将所述存储器的第一区间的标识插入到合并队列中以暂时地延迟所述存储器的第一和第二区间的合并。
22.权利要求21的非临时计算机可读介质,进一步包括指令,所述指令被配置成响应于所述指令的运行而启用所述应用以根据与所述存储器的第一区间关联的首部来确定所述存储器的第二区间的大小。
23.权利要求21的非临时计算机可读介质,进一步包括指令,所述指令被配置成响应于所述指令的运行而启用所述应用以全都在原子操作中确定所述存储器的第二区间是否空闲和确定所述存储器的第二区间的大小,以及锁定所述存储器的第二区间。
24.权利要求23的非临时计算机可读介质,其中所述原子操作是比较并交换操作。
25.权利要求21的非临时计算机可读介质,进一步包括指令,所述指令被配置成响应于所述指令的运行而启用所述应用以修改与所述存储器的第一区间关联的首部以指示所述存储器的第一区间处于使用中。
26.权利要求25的非 临时计算机可读介质,进一步包括指令,所述指令被配置成响应于所述指令的运行而启用所述应用以在确定所述存储器的第二区间处于使用中之后,修改与所述存储器的第一区间关联的首部以指示所述存储器的第一区间是空闲的。
27.权利要求26的非临时计算机可读介质,进一步包括指令,所述指令被配置成响应于所述指令的运行而启用所述应用以进行以下动作: 在将所述存储器的第一区间的标识插入到所述合并队列中之后,根据与所述存储器的第一区间关联的首部来确定所述存储器的第二区间是否仍然正与所述存储器的第三区间合并; 基于所述存储器的第二区间不再处于正合并的确定,从所述合并队列中移除所述存储器的第一区间的标识; 在确定所述存储器的第二区间不再处于正合并之后,在所述存储器的第二区间是空闲的情况下,启用合并操作来合并所述存储器的第一和第二区间以继续进行;以及 在确定所述存储器的第二区间不再处于正合并之后,在所述存储器的第二区间从正合并转移到使用中的情况下,修改与所述存储器的第一区间关联的首部以指示所述存储器的第一区间是空闲的。
【文档编号】G06F12/02GK103703449SQ201180072680
【公开日】2014年4月2日 申请日期:2011年8月4日 优先权日:2011年8月4日
【发明者】A.科诺瓦洛夫, A.库卡诺夫 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1