一种基于缓存结构的对象扫描方法与流程

文档序号:31728069发布日期:2022-10-05 01:08阅读:23来源:国知局
一种基于缓存结构的对象扫描方法与流程

1.本技术涉及计算机存储技术领域,尤其涉及一种基于缓存结构的对象扫描方法。


背景技术:

2.在计算机系统里,存储资源可按持久性分为两类:易失性存储和持久性存储。易失性存储访问速度比较快,如目前在主流设备中广泛使用的ddr,或者静态ram,使用时必须一直加电。如果掉电,则存储的内容就丢失。持久性存储,如闪存(flash),可擦可编程只读存储(eeprom),只读存储(rom),磁性存储(硬盘),在掉电后依然可以保持存储信息不丢失,但持久性存储访问速度比较慢。通常的计算机系统同时具有易失性存储和持久性存储,用易失性存储来进行计算,而用持久性存储来保存数据。
3.在现代面向对象的编程系统里,如java/python/kotlin等编程语言,都会需要运行时系统(runtime system)支撑。系统在运行过程中会用到各种对象。对象的分配通常来说比较简单,而对象的释放就很复杂。而为了编程方便,通常都会对系统运行过程中产生的对象采用自动垃圾回收,即运行时系统会对存储空间进行定期扫描,在易失性存储中标记出还在使用的对象,对没有使用的对象进行回收,释放所占用的存储空间。
4.现有技术中,系统在易失性存储中标记出还在使用的对象,需要在易失性存储中分配一块连续的存储空间对标记索引数组进行记录,但在资源受限的系统中,易失性存储(比如ram)通常很少。那么系统在扫描过程就可能因为新的内存分配请求失败而导致需要将系统重启,从而影响程序运行的效率。


技术实现要素:

5.在现代面向对象的编程系统里,系统对正在使用对象扫描的频率较高,需要将扫描标记索引数组放在访问速度相对较快的易失性存储空间中,但易失性存储往往资源受限,持久性存储相对充足。本技术提出一种基于缓存结构的对象扫描方法,结合易失性存储读写快速和持久性存储空间充裕的优点,针对易失性存储不足的应用场景,可以提高存储管理和程序运行的效率。
6.本技术提供一种基于缓存结构的对象扫描方法,由系统施行,所述系统包括易失性存储和持久性存储,其特征在于,所述方法包括:
7.所述系统为创建的每一个对象顺序分配逻辑索引并按数量规则对逻辑索引连续的对象进行分组;在持久性存储上为所述分组产生的每一组对象分配一个满足所述数量规则的存储块;在易失性存储上分配一个标记索引数组,所述标记索引数组的一个数组元素包含所述分组产生的一组对象的逻辑索引起始值和指向一个与所述存储块同样大小的标记块的物理地址;
8.扫描系统正在使用的一个对象,在易失性存储中,根据所述一个对象的逻辑索引查找所述标记索引数组中对应的数组元素;
9.在易失性存储中,为指向标记块的物理地址为空的所述对应的数组元素分配新标
记块;若分配失败按照缓存替换策略选择一个已分配的标记块作为替换标记块,将所述替换标记块的内容回写到持久性存储中的指向所述替换标记块的数组元素包含的一组对象对应的存储块,并将指向所述替换标记块的数组元素的物理地址写为空;
10.在易失性存储中,设置所述对应的数组元素的物理地址指向所述新标记块或所述替换标记块。
11.优选的,所述方法还包括:读取持久性存储中的所述对应的数组元素的一组对象对应的存储块内容,填写到所述对应的数组元素的物理地址指向的标记块,并在所述对应的数组元素的物理地址指向的标记块中为所述正在使用的一个对象设置扫描标记;
12.若在易失性存储中找不到所述新标记块和所述替换标记块,在持久性存储中根据所述正在使用的一个对象的逻辑索引查找所述分组产生的一组对象对应的存储块,在所述对应的存储块中为所述正在使用的一个对象设置扫描标记。
13.优选的,所述方法还包括:在易失性存储中,对指向标记块的物理地址不为空的所述对应的数组元素,在所述对应的数组元素的物理地址指向的标记块中为所述正在使用的一个对象设置扫描标记。
14.优选的,所述系统完成对象扫描后执行对象垃圾回收。
15.优选的,所述垃圾回收包括,在易失性存储中,根据系统创建的每一个对象的逻辑索引查找标记索引数组中对应的数组元素,若所述对应的数组元素指向标记块的物理地址不为空,读取所述对应的数组元素的物理地址指向的标记块中为所述创建的每一个对象设置的扫描标记;对没有设置扫描标记的所述创建的每一个对象回收系统资源。
16.优选的,所述垃圾回收还包括,若所述对应的数组元素指向标记块的物理地址为空,在持久性存储中根据所述创建的每一个对象的逻辑索引查找所述分组产生的一组对象对应的存储块,读取所述对应的存储块中为所述创建的每一个对象设置的扫描标记,对没有设置扫描标记的所述创建的每一个对象回收系统资源。
17.优选的,所述在持久性存储上为所述分组产生的每一组对象分配一个满足所述数量规则的存储块,所述存储块用于在持久性存储上保存所述每一组对象的扫描标记,系统对所述扫描标记初始化为未设置扫描标记;
18.所述在易失性存储上分配一个标记索引数组,系统将所述标记索引数组的数组元素的指向一个与所述存储块同样大小的标记块的物理地址初始化为空,所述标记块用于在易失性存储上保存所述数组元素包含的一组对象的扫描标记。
19.优选的,在易失性存储中,所述标记索引数组的一个数组元素的物理地址指向的标记块彼此之间是独立的,可以是不连续的存储空间。
20.优选的,在持久性存储上为所述分组产生的每一组对象分配的存储块空间大小为所述持久性存储的最小写单元或最小写单元的倍数。
21.优选的,将所述替换标记块的内容回写到持久性存储中的指向所述替换标记块的数组元素包含的一组对象对应的存储块,或在持久性存储中根据所述正在使用的一个对象的逻辑索引查找所述分组产生的一组对象对应的存储块,在所述对应的存储块中为所述正在使用的一个对象设置扫描标记,根据持久性存储的擦写特点,此时需要整页写或块写。
22.实际应用中,经常存在系统资源受限的场景,此时易失性存储通常较少。本技术通过在系统扫描对象时对所设置的的扫描标识采用易失性存储和持久性存储的混合架构。通
过在持久性存储中保存全部对象的标记,在易失性存储中保留部分对象的标记,可进一步减少易失性存储的使用。同时不要求易失性存储需要一片较大的连续存储空间来存储所有的标记,可以使用若干较小的存储块分别存储。通过使用少量易失性存储进行缓存,既提高了效率,也可以大大减少持久性存储的擦写次数,延长持久性存储的使用寿命。
附图说明
23.为了更简单说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
24.图1为本技术实施例中一种基于缓存结构的对象扫描方法的流程示意图;
25.图2为本技术实施例中一种基于缓存结构的对象扫描方法扫描算法的流程示意图;
26.图3为本技术实施例中一种基于缓存结构的对象扫描方法扫描算法的结构示意图。
具体实施方式
27.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
28.对正在使用对象的扫描过程中,每一个正在使用的对象都会赋予其一个标记,这个标记称为tag。在存储空间充足的系统中,标记可以是对象的完整物理地址或逻辑索引(以下以逻辑索引为例)。在存储资源受限的系统中,如果每一个对象都可以赋予一个唯一的整数标识,可以采用位图来做存储压缩,即每一个对象都用一个位数组中的一位来标识。这时对象的标记(tag)就是标志位。比如,如果某一对象对应的标志位为0,则表示该对象未被标记;如果该位为1,则表示该对象已被标记。
29.图1为本技术实施例中一种基于缓存结构的对象扫描方法的流程示意图,由系统施行,系统包括易失性存储和持久性存储。
30.图1所示流程示意图包括以下步骤:
31.步骤s110:系统为创建的每一个对象顺序分配逻辑索引并按数量规则对逻辑索引连续的对象进行分组;在持久性存储上为分组产生的每一组对象分配一个满足数量规则的存储块;在易失性存储上分配一个标记索引数组,标记索引数组的一个数组元素包含分组产生的一组对象的逻辑索引起始值和指向一个与存储块同样大小的标记块的物理地址。
32.数量规则通常为数量是2的整数次幂,根据持久性存储的擦写特点,将标记索引数组的一个数组元素指向的标识块分配的空间大小设置为持久性存储的最小写单元或最小写单元的倍数。
33.在一个实施例中,
34.在持久性存储上分配空间保存所有已创建对象的扫描标记,这个持久性存储空间
称为标记存储tagspace。在易失性存储上分配空间对上述标记存储进行缓存,易失性存储作为标记缓存,不必保存所有标记。在易失性存储较少时,可以使用较少的易失性存储作为缓存,这个缓存称为tagcache。
35.标记缓存(tagcache)的存储结构由一个标记索引数组tagindexarray和若干个标记块tagblock组成。每一个tagblock可存储的标记数目为标记块容量(tagblockcapacity)。
36.一个标记索引数组,这个数组里的每一个元素包含两部分信息:一组对象的逻辑索引的起始值(tagblockbase),该标记索引数组的数组元素包含的一组对象的逻辑索引范围就是[tagblockbase,tagblockbase+tagblockcapacity);标记块物理地址(tagblockaddr),指向设置该组对象扫描标记的标记块。
[0037]
若干个标记块,标记块的数量可能小于标记索引数组的个数,每一个标记块存储一组对象的扫描标记,每一个标记块对应标记存储上一个同样大小的存储块。
[0038]
tagspace对应上述分组产生的每一组对象,比如第n组对象在tagspace上对应的存储块物理地址位置是:基地址+n*tagbloackcapacity。
[0039]
标记缓存的结构采用通常的缓存架构。该方法的好处是当易失性存储较少不足以存储所有的扫描标记时,提供一种可行而高效的标记存储方法。而且标记索引数组和标记块都是可以独立的存储块,不需要连续存储空间。
[0040]
缓存的组织最好以持久性存储的最小的写单元的大小或者倍数来划分。不同的系统可能支持的最小的写单元的粒度不一样,比如有的flash只支持512字节的页写,而有的flash支持8字节的按字写,eeprom一般都支持按字节写。最合理的大小可以通过运行实际应用来进行统计分析,以获得比较合理的缓存单元大小。
[0041]
缓存替换策略(也经常称为缓存替换算法或缓存算法)指的是对指令或算法的优化,计算机程序或硬件维护结构可以利用这些指令或算法来管理存储在计算机上的信息的缓存。缓存算法通过将最近或经常使用的数据项保存在比普通内存存储访问速度更快或计算成本更低的内存位置来提高性能。当缓存已满时,算法必须选择丢弃哪些条目(item)以为新条目腾出空间。
[0042]
在一个实施例中,
[0043]
缓存替换策略选择最不常用的优先替换策略(least-used first),即首先丢弃最近最少使用的项目。如果想要确保算法总是丢弃最近最少使用的项目,则需要算法跟踪条目什么时候被使用过,该技术的一般实现需要为缓存行保留“年龄位”并根据年龄位跟踪“最近最少使用”缓存行。在这样的实现中,每次使用缓存行时,所有其他缓存行的年龄都会发生变化,该算法还可以拓展为其他的缓存算法。
[0044]
与许多其他替换策略一样,优先替换策略可以使用向量空间中的状态转换场来表征,它决定动态缓存状态的变化,类似于电磁场如何决定放置在其中的带电粒子的运动。
[0045]
步骤s120:扫描系统正在使用的一个对象,在易失性存储中,根据一个对象的逻辑索引查找标记索引数组中对应的数组元素。
[0046]
步骤s130:在易失性存储中,为指向标记块的物理地址为空的对应的数组元素分配新标记块;若分配失败按照缓存替换策略选择一个已分配的标记块作为替换标记块,将替换标记块的内容回写到持久性存储中的指向替换标记块的数组元素包含的一组对象对
应的存储块(根据持久性存储的擦写特点,此时需要整页写或块写),并将指向替换标记块的数组元素的物理地址写为空。
[0047]
步骤s140:在易失性存储中,设置对应的数组元素的物理地址指向新标记块或替换标记块。
[0048]
本发明方法还包括:读取持久性存储中的对应的数组元素的一组对象对应的存储块内容,填写到对应的数组元素的物理地址指向的标记块,并在对应的数组元素的物理地址指向的标记块中为正在使用的一个对象设置扫描标记;
[0049]
若在易失性存储中找不到新标记块和替换标记块,在持久性存储中根据正在使用的一个对象的逻辑索引查找分组产生的一组对象对应的存储块,在对应的存储块中为正在使用的一个对象设置扫描标记。根据持久性存储的擦写特点,此时需要整页写或块写。
[0050]
本发明方法还包括:在易失性存储中,对指向标记块的物理地址不为空的对应的数组元素,在对应的数组元素的物理地址指向的标记块中为正在使用的一个对象设置扫描标记。
[0051]
本发明方法还包括,在系统完成对象扫描后执行对象垃圾回收:
[0052]
在易失性存储中,根据系统创建的每一个对象的逻辑索引查找标记索引数组中对应的数组元素,若对应的数组元素指向标记块的物理地址不为空,读取对应的数组元素的物理地址指向的标记块中为创建的每一个对象设置的扫描标记;对没有设置扫描标记的创建的每一个对象回收系统资源;
[0053]
若对应的数组元素指向标记块的物理地址为空,在持久性存储中根据创建的每一个对象的逻辑索引查找分组产生的一组对象对应的存储块,读取对应的存储块中为创建的每一个对象设置的扫描标记,对没有设置扫描标记的创建的每一个对象回收系统资源。
[0054]
图2为本技术实施例中一种基于缓存结构的对象扫描方法扫描算法的流程示意图,扫描算法如下:
[0055]
初始化标记索引数组和标记存储。并在必要的时候,对标记存储进行擦除,标记存储中所有对象的标志位都是未设置的。持久性存储如flash之类写入需要两步:先擦除,再写入。比如,在写之前找个合适的时机擦除。标记索引数组中的每个索引指向的标记块物理地址都初始化为空。
[0056]
扫描所有正在使用的对象,对每个扫描到的对象做如下处理:
[0057]
步骤210:根据该对象的逻辑索引,找到标记索引数组中对应的数组元素;
[0058]
步骤211,如果对应的数组元素指向的标记块物理地址是空的,则试图从系统中分配一个新标记块;
[0059]
步骤212,如果分配不成功,采用一个可行缓存替换策略,比如“最不常用的优先替换”,从已分配的标记块中选出一个替换标记块;
[0060]
步骤213,如果成功选出一个替换标记块,就将该替换标记块的内容回写到标记存储中(即从易失性存储写回到非易失性存储);并且将原来指向该替换标志块的数组元素的指向标记块的物理地址置为空;
[0061]
步骤214,设置对应的数组元素的物理地址指向分配的新标记块或替换标记块;
[0062]
步骤215,读取对应的数组元素的一组对象对应的持久性存储块内容,填写到对应的数组元素的物理地址指向的标记块;
[0063]
步骤216,在对应的数组元素的物理地址指向的标记块中对正在使用对象设置扫描标记,流程结束;
[0064]
步骤217,如果分配新标记块失败,也找不到替换标记块,在持久性存储中根据正在使用对象的逻辑索引查找分组产生的一组对象对应的存储块,在所述对应的存储块中为所述正在使用的一个对象设置扫描标记,流程结束。
[0065]
图3为本技术实施例中一种基于缓存结构的对象扫描方法扫描算法的结构示意图。
[0066]
在一个实施例中,标记索引数组有n≥4个标记索引,标记缓存tagcache的存储结构由一个标记索引数组tagindexarray和4个标记块tagblock组成。
[0067]
每一个tagblock可存储的标记数目为标记块容量tagblockcapacity,具体为25=32位,在标记块和标记存储中都需要4byte来进行表示,对于一个标记索引数组,这个数组里的每一个元素包含两部分信息:某一组对象的逻辑索引的起始值tagblockbase,该组逻辑索引的范围就是[tagblockbase,tagblockbase+tagblockcapacity),比如第一组为[0,32),第二组为[64,96),第三组为[128,160),第四组为[160,192);标记块物理地址tagblockaddr,指向该组标记的标记块。标记索引数组里有4个标记块,每一个标记块存储一组对象的扫描标记,每一个标记块对应标记存储上一个同样大小的存储块。
[0068]
在持久性存储中,tagspace对应系统分组产生的每一组对象。系统将对象分组产生的第n组对象在存储块上的位置是:基地址+n*tagbloackcapacity,在图3中以基地址0开始进行地址偏移。
[0069]
如图3所示,标记索引数组中的每一个数组保存一组对象逻辑索引的起始值,在标记存储中从基地址分配一块连续的空间保存所有的对象标记,每个数组包含对象的逻辑索引个数(32个)与基地址每次地址偏移的位数(32位)一一对应。假设持久性存储的最小写单位为4byte,每个标记块的空间大小和持久性存储的最小写单元相同。在采用“最不常用的优先替换”缓存替换策略时,假设扫描的正在使用的当前对象逻辑索引为192∈[192,256),在标记索引数组中写于第5个数组元素,从已分配的标记块1~4中选出一个标记块进行替换。比如选出的替换标记块为标记块4,原来指向标记块4的对象逻辑索引范围是[160,192),位于标记索引数组中的第4个数组元素。在持久性存储中,因为1byte=8bit,按照160
÷
8=20(从基地址0开始,地址偏移为20),将该标记块4的所有扫描标记内容回写到标记存储中的第6个存储块(即从易失性存储写回到非易失性存储),根据非易失性存储的擦写特点,此操作需要整页写或块写;将该标记块4作为当前对象逻辑索引对应的标记索引数组中第5个数组元素的标记块,将标记块4的物理地址填写到标记索引数组的第5个数组元素中,将原来指向标志块4的标记索引数组中第4个数组元素的指向标记块的物理地址置为空。在持久性存储中,按照192
÷
8=24(从基地址0开始,地址偏移为24),然后读取标记存储中的第7个存储块内容加载到标记块4,并在标记块4的32bit中的第一个bit为逻辑索引192的当前对象设置扫描标志。
[0070]
如果找不到替换标记块,就直接找到该对象的逻辑索引192∈[192,256)对应的标记存储中的第7个存储块,并在该存储块的32bit中的第一个bit设置当前对象的扫描标记。根据非易失性存储的擦写特点,此操作需要整页写或块写。
[0071]
需要说明的是,在此提供的方法不与任何特定计算机、虚拟装置或者其它设备固
有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定的编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明内容,并且上面对特定语言、系统功能模块的调用所做的描述仅仅是为了披露发明的最佳实施方式。
[0072]
在此处所提供的说明书中,说明了大量的具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下完成实现。在一些示例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0073]
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要去及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1