存储器分配器的制作方法

文档序号:17831876发布日期:2019-06-05 23:08阅读:125来源:国知局
存储器分配器的制作方法

本申请涉及集成电路技术领域,具体涉及存储器分配器及其应用。



背景技术:

在信息处理设备中,程序或组件请求、使用并且释放存储器。例如,当应用程序打开文件时,该应用程序或其他组件可请求存储器创建与该文件相关的数据结构。作为另一示例,当用户浏览网站时,web浏览器可请求存储器存储来自网站的内容,以准备在显示器上呈现内容。在用户关闭浏览器之后,web浏览器可指示用于存储和呈现先前网站的内容的存储器可被释放并且返回到存储池。

相比于客户机计算机,处理来自其他组件的请求常常对高效地使用存储器有更大压力。低效存储器管理器可能浪费存储器并导致差性能。



技术实现要素:

本申请的目的在于提出基于硬件的存储器分配器,提高存储器分配、释放的速度、性能和/或效率。

本申请的第一方面,提供了根据本申请第一方面的第一存储器分配器,用于管理n个缓存单元的分配与释放,所述存储器分配器包括标记寄存器和索引寄存器;标记寄存器与索引寄存器各自包括n个存储单元,n为自然数;标记寄存器的存储单元、索引寄存器的存储单元以及被管理的缓存单元的数量相同。

根据本申请的第一方面的第一存储器分配器,提供了根据本申请第一方面的第二存储器分配器,索引寄存器的存储单元的值指示缓存单元。

根据本申请的第一方面的第一或第二存储器分配器,提供了根据本申请第一方面的第三存储器分配器,索引寄存器的存储单元存储缓存单元的地址。

根据本申请的第一方面的第一或第二存储器分配器,提供了根据本申请第一方面的第四存储器分配器,索引寄存器的存储单元中存储序号,序号与缓存单元一一对应。

根据本申请的第一方面的第一至第四存储器分配器之一,提供了根据本申请第一方面的第五存储器分配器,标记寄存器的存储单元同缓存单元一一对应。

根据本申请的第一方面的第一至第五存储器分配器之一,提供了根据本申请第一方面的第六存储器分配器,标记存储器的存储单元的值,指示与其对应的缓存单元是否已被分配。

根据本申请的第一方面的第一至第六存储器分配器之一,提供了根据本申请第一方面的第七存储器分配器,存储器分配器还包括读指针寄存器与写指针寄存器。

根据本申请的第一方面的第七存储器分配器,提供了根据本申请第一方面的第八存储器分配器,读指针寄存器与写指针寄存器各自记录索引,索引指示索引寄存器的存储单元。

根据本申请的第一方面的第一至第八存储器分配器之一,提供了根据本申请第一方面的第九存储器分配器,响应于存储器分配器被初始化,标记寄存器的所有存储单元被设置为指示对应的缓存单元为“未分配”状态。

根据本申请的第一方面的第一至第九存储器分配器之一,提供了根据本申请第一方面的第十存储器分配器,响应于存储器分配器被初始化,索引寄存器的存储单元各自被写入指示缓存单元之一的索引。

根据本申请的第一方面的第十存储器分配器,提供了根据本申请第一方面的第十一存储器分配器,索引寄存器的各个存储单元的索引互不重复。

根据本申请的第一方面的第一至第十一存储器分配器之一,提供了根据本申请第一方面的第十二存储器分配器,响应于存储器分配器被初始化,设置读指针与写指针,都指向索引寄存器的第一个存储单元。

根据本申请的第一方面的第一至第十二存储器分配器之一,提供了根据本申请第一方面的第十三存储器分配器,存储器分配器还记录缓存单元的总数,以及被分配的缓存单元的数量。

根据本申请的第一方面的第七至第十三存储器分配器之一,提供了根据本申请第一方面的第十四存储器分配器,响应于接收缓存单元分配请求,所述存储器分配器输出读指针寄存器所指示的索引寄存器的存储单元的值作为被分配的缓存单元的地址或索引。

根据本申请的第一方面的第七至第十三存储器分配器之一,提供了根据本申请第一方面的第十五存储器分配器,响应于接收缓存单元分配请求,所述存储器分配器还将读指针所指向的索引寄存器的存储单元的值作为索引,确定标记寄存器的存储单元。

根据本申请的第一方面的第十五存储器分配器,提供了根据本申请第一方面的第十六存储器分配器,所述存储器分配器在标记寄存器的被确定的存储单元中设置标记,以记录对应的缓存单元“已分配”状态。

根据本申请的第一方面的第十五存储器分配器,提供了根据本申请第一方面的第十七存储器分配器,若标记寄存器的被确定的存储单元指示对应的缓存单元处于“已分配”状态,所述存储器分配器递增读指针寄存器的值,直到找到读指针所指示的索引寄存器的第一存储单元,以所述第一存储单元的值作为索引确定的标记寄存器的存储单元指示“未分配”状态。

根据本申请的第一方面的第十五存储器分配器,提供了根据本申请第一方面的第十八存储器分配器,还将读指针递增,指向索引寄存器的下一个存储单元。

根据本申请的第一方面的第七至第十八存储器分配器之一,提供了根据本申请第一方面的第十九存储器分配器,响应于接收缓存单元释放请求,所述存储器分配器将将缓存单元释放请求指示的索引,记录在写指针寄存器所指示的索引寄存器的存储单元中,以及还用该索引获取标记寄存器的存储单元,在获取的标记寄存器的存储单元中记录“未分配”状态。

根据本申请的第一方面的第十九存储器分配器,提供了根据本申请第一方面的第二十存储器分配器,还递增写指针。

根据本申请的第一方面的第十九或第二十存储器分配器,提供了根据本申请第一方面的第二十一存储器分配器,响应于接收到缓存单元释放请求,还检查所释放的缓存单元的索引所指示的标记寄存器的存储单元是否指示对应的缓存单元处于“未分配”状态。

根据本申请的第一方面的第十九或第二十存储器分配器,提供了根据本申请第一方面的第二十二存储器分配器,响应于接收到缓存单元释放请求,若被释放的缓存单元处于“未分配”状态,输出异常信号。

根据本申请的第二方面,提供了根据本申请第二方面的第一管理缓存单元的方法,响应于接收缓存单元分配请求,输出被分配的缓存单元的地址或索引。

根据本申请的第二方面的第一管理缓存单元的方法,提供了根据本申请第二方面的第二管理缓存单元的方法,响应于缓存单元分配请求,获取读指针所指向的索引寄存器的存储单元的值,作为缓存单元分配的结果。

根据本申请的第二方面的第一管理缓存单元的方法,提供了根据本申请第二方面的第三管理缓存单元的方法,响应于缓存单元分配请求,根据读指针所指向的索引寄存器的存储单元的值,确定被分配的缓存单元的地址。

根据本申请的第二方面的第一至第三管理缓存单元的方法之一,提供了根据本申请第二方面的第四管理缓存单元的方法,还将读指针所指向的索引寄存器的存储单元的值作为索引,确定标记寄存器的存储单元,并在确定的标记寄存器的存储单元中设置标记,以记录对应的缓存单元“已分配”状态。

根据本申请的第二方面的第四管理缓存单元的方法,提供了根据本申请第二方面的第五管理缓存单元的方法,使读指针指向索引寄存器的下一个存储单元。

根据本申请的第二方面的第五管理缓存单元的方法,提供了根据本申请第二方面的第六管理缓存单元的方法,用索引寄存器的该下一个存储单元的值作为索引查询标记寄存器的存储单元,并确保该存储单元指示对应的缓存单元为“未分配”状态。

根据本申请的第二方面的第六管理缓存单元的方法,提供了根据本申请第二方面的第七管理缓存单元的方法,若该下一个存储单元指示对应的缓存单元为“已分配”状态,继续递增读指针的值,直到找到一个索引寄存器的存储单元,其所存储的值作为索引的标记寄存器的存储单元指示对应的缓存单元处于“未分配”状态的并使读指针指向索引寄存器的存储单元。

根据本申请的第二方面的第一至第七管理缓存单元的方法之一,提供了根据本申请第二方面的第八管理缓存单元的方法,响应于接收缓存单元分配请求,还通过检查已分配的缓存单元数量是否小于缓存单元的总量,以确定是否有缓存单元可供分配。

根据本申请的第二方面的第八管理缓存单元的方法,提供了根据本申请第二方面的第九管理缓存单元的方法,仅在有缓存单元可分配的情况下,才分配缓存单元。

根据本申请的第二方面的第一至第九管理缓存单元的方法之一,提供了根据本申请第二方面的第十管理缓存单元的方法,响应于缓存单元分配请求,从读指针指向的存储单元获取值,以值作为索引检查标记存储器的存储单元是否指示缓存单元处于“未分配”状态。

根据本申请的第二方面的第十管理缓存单元的方法,提供了根据本申请第二方面的第十一管理缓存单元的方法,若缓存单元处于“已分配”状态,递增读指针,检查读指针所指示的索引寄存器的存储单元所存储的值,用该值作为索引访问标记寄存器的存储单元。

根据本申请的第二方面的第十一管理缓存单元的方法,提供了根据本申请第二方面的第十二管理缓存单元的方法,若标记寄存器的存储单元指示缓存单元处于“已分配”状态,递增读指针,检查读指针所指示的索引寄存器的下一个存储单元所存储的值,用该值作为索引访问标记寄存器的存储单元,直至标记寄存器的存储单元指示缓存单元处于“未分配”状态,从读指针指向的存储单元获取值,作为被分配的缓存单元的地址或索引。

根据本申请的第二方面的第一至第十二管理缓存单元的方法之一,提供了根据本申请第二方面的第十三管理缓存单元的方法,若读指针已指向索引寄存器的最后一个存储单元,再递增读指针,将使读指针发生回绕而指向索引寄存器的第一个存储单元。

根据本申请的第三方面,提供了根据本申请第三方面的第一管理缓存单元的方法,响应于接收到缓存单元释放请求,将缓存单元释放请求指示的索引,记录在写指针所指示的索引寄存器的存储单元中,以及还用该索引获取标记寄存器的存储单元,在标记寄存器的存储单元中记录对应的缓存单元处于“未分配”状态。

根据本申请的第三方面的第一管理缓存单元的方法,提供了根据本申请第三方面的第二管理缓存单元的方法,还递增写指针。

根据本申请的第三方面的第一或第二管理缓存单元的方法,提供了根据本申请第三方面的第三管理缓存单元的方法,响应于接收到缓存单元释放请求,还检查所释放的缓存单元的索引所指示的标记寄存器的存储单元是否指示对应的缓存单元处于“未分配”状态。

根据本申请的第三方面的第一至第三管理缓存单元的方法之一,提供了根据本申请第三方面的第四管理缓存单元的方法,若被释放的缓存单元处于“未分配”状态,输出异常信号。

根据本申请的第三方面的第一至第四管理缓存单元的方法之一,提供了根据本申请第三方面的第五管理缓存单元的方法,还包括:执行根据本申请第二方面的方法之一。

根据本申请的第四方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本发明第二方面或第三方面的方法之一。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1a是根据本申请实施例的存储器分配器电路的框图;

图1b是根据本申请实施例的缓存单元;

图2a是根据本申请实施例的接收缓存单元分配请求时的存储器分配器的状态;

图2b是根据本申请的另一实施例的接收缓存单元分配请求后的存储器分配器的状态;

图2c是根据本申请的又一实施例的接收缓存单元分配请求后的存储器分配器的状态;

图3a是根据本申请的实施例的接收缓存单元释放请求后的存储器分配器的状态;

图3b是根据本申请的另一实施例的接收缓存单元释放请求后的存储器分配器的状态;

图3c是根据本申请的又一实施例的接收缓存单元释放请求后的存储器分配器的状态。

具体实施方式

下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1a是根据本申请实施例的存储器分配器电路的框图。存储器分配器包括标记寄存器与索引寄存器。标记寄存器与索引寄存器各自包括多个(例如n个)存储单元,用于管理n个缓存单元的分配与释放。标记寄存器的存储单元、索引寄存器的存储单元以及被管理的缓存单元的数量相同。

图1b是根据本申请实施例的缓存单元。被管理的缓存单元有n个,由诸如dram、sram的存储器提供,外部耦合于内存分配器所在的集成电路,或者同内存分配器集成在同一集成电路中。n个缓存单元的每个具有地址,每个缓存单元的地址由索引寄存器的值所指示。作为举例,在索引寄存器的每个存储单元中存储缓存单元之一的地址。作为又一个例子,在索引寄存器的每个存储单元中存储序号,通过计算计算出对应缓存单元的地址。多个缓存单元在存储器中的地址可以是连续的或不连续的。

标记寄存器的存储单元同缓存单元一一对应。通过缓存单元的地址,或者索引寄存器的存储单元的值,可得到标记寄存器的存储单元的索引或地址。标记存储器的存储单元的值,指示与其对应的缓存单元是否已被分配。

存储器分配器还包括读指针寄存器与写指针寄存器。读指针寄存器与写指针寄存器各自记录索引,用于指向索引寄存器的存储单元。

作为举例,参看图1a,根据本申请实施例的存储器分配器被初始化后,标记寄存器的所有存储单元被设置为指示“未分配”状态(例如,用值“0”指示),而索引寄存器的存储单元各自被写入指示缓存单元之一的索引。索引寄存器的各个存储单元的索引互不重复,且唯一,索引寄存器的每个存储单元的唯一值指示缓存单元之一。以及设置读指针与写指针,使其指向索引寄存器的第一个存储单元(图1a中最左侧的存储单元)。

可选地,存储器分配器还记录缓存单元的总数,以及被分配的缓存单元的数量。

为获取并使用缓存单元,向存储器分配器提供缓存单元分配请求,作为响应,存储器分配器输出被分配的缓存单元的地址或索引。

存储器分配器响应于缓存单元分配请求,输出读指针所指向的索引寄存器的存储单元的值,作为缓存单元分配的结果。或者,存储器分配器根据读指针所指向的索引寄存器的存储单元的值,确定被分配的缓存单元的地址。存储器分配器还将读指针所指向的索引寄存器的存储单元的值作为索引,确定标记寄存器的存储单元,并在确定的标记寄存器的存储单元中设置标记,以记录对应的缓存单元为“已分配”状态。还将读指针的值递增,指向索引寄存器的下一个存储单元。可选地,还用索引寄存器的该下一个存储单元的值作为索引查询标记寄存器的存储单元,并确保该存储单元指示对应的缓存单元为“未分配”状态。若该存储单元指示对应的缓存单元为“已分配”状态,继续递增读指针的值,直到找到一个索引寄存器的存储单元(a),其所存储的值作为索引的标记寄存器的存储单元指示对应的缓存单元处于“未分配”状态的并使读指针指向索引寄存器的存储单元(a)。

作为举例,参看图1a,读指针指向索引寄存器的第一个存储单元(其值为0)。响应于缓存单元分配请求,将读指针指向的索引寄存器的第一个存储单元的值0作为对分配的缓存单元的指示。以及用该值0作为索引,将标记寄存器的索引为0的存储单元的值设置为指示“已分配”状态(例如,用值“1”指示),还将读指针递增,以指向索引寄存器指向第二个存储单元。图2a是根据本申请的实施例的接收缓存单元分配请求时的存储器分配器的状态。可选地,响应于缓存单元分配请求,存储器分配器还通过检查已分配的缓存单元数量是否小于缓存单元的总量,以确定是否有缓存单元可供分配。并且,仅在有缓存单元可控分配的情况下,才分配缓存单元。依然可选地,读指针递增后指向索引寄存器指向第二个存储单元,还获取第二个存储单元的值(1)作为索引,获取索引为1的标记寄存器的存储单元(第二个存储单元),由于标记寄存器的索引为1的存储单元的值指示“未分配”状态,则不再调整读指针,使其保持指向索引寄存器的索引为1的存储单元。

缓存单元分配请求的请求方,从存储器分配器获得了缓存单元的索引(值0),并可以根据需要使用该缓存单元。

作为又一个例子,在存储器分配器处于图2a展示的状态下,接收到缓存单元分配请求。将读指针指向的索引寄存器的第二个存储单元的值1作为对分配的缓存单元的指示。以及用该值1作为索引,将标记寄存器的索引为1的存储单元的值设置为指示“已分配”状态,还将读指针递增,以指向索引寄存器指向第三个存储单元。图2b是根据本申请的另一实施例的接收缓存单元分配请求后的存储器分配器的状态,图2b是此时存储器分配器的状态。

可选地,响应于缓存单元分配请求而更新读指针时,不检查以读指针所指向的索引寄存器的存储单元的值为索引的标记寄存器的存储单元是否指示缓存单元处于“未分配”状态。而是在下次响应于缓存单元分配请求访问索引寄存器的存储单元时,从读指针指向的存储单元获取值,以值作为索引检查标记存储器的存储单元是否指示缓存单元处于“未分配”状态。若缓存单元处于“已分配”状态,递增读指针,检查索引寄存器的下一个存储单元所存储器的值,用该值作为索引访问标记寄存器的存储单元,并期待标记寄存器的存储单元指示缓存单元(b)处于“未分配”状态。若缓存单元(b)处于“已分配”状态,重复上述过程,继续递增读指针。

可以理解地,若读指针已指向索引寄存器的最后一个存储单元,再递增读指针,将使读指针发生回绕而指向索引寄存器的第一个存储单元。

作为又一个例子,图2c是根据本申请的又一实施例的接收缓存单元分配请求后的存储器分配器的状态,存储器分配器处于图2c展示的状态。读指针指向索引寄存器的第n-2个存储单元(存储单元存储的值为n-3)。以值n-3为索引的标记寄存器的存储单元指示对应的缓存单元“未分配”。索引寄存器的第n-1个存储单元存储的值为n-2,以值n-2为索引的标记寄存器的存储单元指示对应的缓存单元“已分配”。

接收到缓存单元分配请求。将读指针指向的索引寄存器的第n-2个存储单元的值n-3作为对分配的缓存单元的指示。以及用该值n-3作为索引,将标记寄存器的索引n-3的存储单元的值设置为指示“已分配”,还将读指针递增。读指针递增后,读指针指向值为n-2的索引寄存器的存储单元,而以n-2为索引获取的标记寄存器指示对应的缓存单元“已分配”,继续递增读指针,使读指针指向索引寄存器的第n个存储单元(图2c中,其值为n-1)。

响应于接收到缓存单元释放请求(指示了待释放的缓存单元的索引),存储器分配器将缓存单元释放请求指示的索引,记录在写指针所指示的索引寄存器的存储单元中,以及还用该索引获取标记寄存器的存储单元,在标记寄存器的存储单元中记录对应的缓存单元处于“未分配”状态。还递增写指针。

作为又一个例子,图3a是根据本申请的实施例的接收缓存单元释放请求后的存储器分配器的状态,存储器分配器处于图3a展示的状态。读指针指向索引寄存器的第n个存储单元(存储单元存储的值为n-1)。写指针指向索引寄存器的第1个存储单元(存储单元的值为0)。此时,存储器分配器接收到缓存单元释放请求,请求释放由索引值2所指示的缓存单元。存储器分配器将缓存单元释放请求所指示的索引值2写入写指针所指示的索引寄存器的第1个存储单元,以及还根据缓存单元释放请求所指示的索引值2作为索引,访问标记寄存器的索引为2的存储单元(第3个存储单元),将标记寄存器的索引为2的存储单元设置为指示“未分配”状态(例如,用值“0”指示)。还使写指针递增。图3b是根据本申请的另一实施例的接收缓存单元释放请求后的存储器分配器的状态,此时,存储器分配器的状态由图3b所展示。

作为依然又一个例子,存储器分配器处于图3b展示的状态。此时,存储器分配器接收到缓存单元释放请求,请求释放由索引值0所指示的缓存单元。存储器分配器将缓存单元释放请求所指示的索引值0写入写指针所指示的索引寄存器的第2个存储单元,以及还根据缓存单元释放请求所指示的索引值0作为索引,访问标记寄存器的索引为0的存储单元(第1个存储单元),将标记寄存器的索引为0的存储单元设置为指示“未分配”状态(例如,用值“0”指示)。还使写指针递增。图3c是根据本申请的又一实施例的接收缓存单元释放请求后的存储器分配器的状态,此时,存储器分配器的状态由图3c所展示。

可选地,根据本申请的实施例,存储器分配器处理缓存单元释放请求时,不考虑所释放的缓存单元的索引所指示的标记寄存器的存储单元的值。而在又一个例子中,存储器分配器处理缓存单元释放请求时,检查所释放的缓存单元的索引所指示的标记寄存器的存储单元是否指示对应的缓存单元处于“未分配”状态。若缓存单元处于“未分配”状态,意味着对该缓存单元的释放存在逻辑错误,并可选地,输出异常信号,以指示对缓存单元的重复释放。

根据本申请实施例的存储器分配器可被软件、固件和/或硬件使用,以分配和/或释放缓存单元。

除了根据图1a所展示的实现为硬件的存储器分配器,根据跟申请实施例的存储器分配器也可实现为软件和/或固件,或者软件、固件和/或硬件的组合。硬件可以包括数字电路、模拟电路、数字信号处理器(dsp,digitalsignalprocessor)、专用集成电路(asic,applicationspecificintegratedcircuits)等等。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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