计算机系统的存储器管理系统的制作方法

文档序号:6408956阅读:193来源:国知局
专利名称:计算机系统的存储器管理系统的制作方法
技术领域
本发明涉及一种计算机系统的存储器管理系统。
计算机系统的,特别是实时系统的存储器管理系统应保证短的存取时间和高的占用密度。此外,数据可靠性和可支配性是对这种存储器管理系统的其它主要要求。
用于管理可变长度数据的工作存储器的存储器管理系统以不同长度的存储块方式实施对存储空间的分配。根据存储请求和存储释放的顺序得出各存储块的长度。空闲出的分部分与相邻的空闲的分部分合并在一起。
在完成任务时,通常存储器管理系统按占用表和空闲表运作。众所周知,目前对存储分配已有各种空闲表检索方法。
在采用所谓的先符合方法时,从被管理的存储区的始端开始搜索,并把第一个长度够用的块分配给用户。
在采用所谓的下一个符合方法时,同样是把第一个长度报用的块分配给用户,但搜索从最近一次分配给用户的那个块开始。
在采用最佳符合方法时,搜索一直进行到找到具有最小的剩余空间的块为止(长度够用的尽可能小的块)。
作为采用占用表和空闲表的存储器管理系统的一种替代方案的是所谓的两伙伴方法(Buddy system)。两伙伴方法在管理2n字节存储器时需要n个空闲表。在第K个表中管理着容量为2K的空闲块。当这时要求长度为m的存储范围时,则对大于m的最小的空闲块进行平分,直至以后的平分产生出小于m的块为止。在上一次平分产生的两个块中的一个被占用。其它的在多次平分中产生的块被登记在某空闲表内。在释放某一个块时,某些块相互合并,直至继续合并不再可能时为止,这是因为例如第二个一半被占用。由于对此的前提条件是,必须有两个大小相同的块并列空闲存在,故这种合并相对来说未必能实现。因而存在的趋势是,运行中对特别是较大的而且少有的几块不再能实施有效的管理。
两伙伴系统的缺点是,在实际要求与更高一级的双潜力之间是无法使用存储器的。
两伙伴系统的另外一个缺点在于其对安全起关键作用的管理结构,这是因为在占用一个“小”容量的块时在某些情况下有可能需要进行多次裂分和在空闲链中进行反向链接。特别在开始占用时这是经常发生的情况。
最佳符合方法的缺点在于搜索时间较长,并且裂分/合并频繁。
先符合方法的缺点在于裂分/合并频繁,并且占用密度太低。
空闲存储器管理的另一方案是,用一按块长分类的动态树取代一个表,其各个节点容纳一个块的某些管理数据。这种空闲存储器管理的主要优点是,就搜索空闲块而言,实现快速的最佳符合访问。但这种管理方式也有下述的严重缺点—为长期保证所述的优点,必须定期对树进行重新平衡。
—通常请求或释放一个存储块(或多个存储块)必然会引起对树的重新平衡。这期间势必造成对空闲存储器管理访问的阻塞。
—必要的重新平衡使得经常要在较大程度上对总结构进行处理,因而势必大大提高键接误差概率。为对此进行补偿,就必须多次进行检查。
—出于对数据安全考虑,必须半永久地保持动态树。为此每个在重新平衡时更改的首标作为存储单元将出现在与相应事务联系在一起的一磁盘记录薄上。
—面对可能的扩展,存储器管理系统应采用无用(garbage)存储单元收集来保持开放。在动态树结构的情况下与无用存储单元收集相联系的存储器的滚动变换将导致树内的大量的链接调整,这反之又造成上述已提及问题的出现。
—以最佳符合搜索为基础的空闲存储器管理的最根本的问题是,将会出现大量的相对无用的小块,这些小块是在历次从大块中选定“某些”时由于裂分(块分裂)产生的余剩物。
本发明的任务是,提出一种用于管理可变长度数据的工作存储器的存储器管理系统,该系统访问时间短,而对数据可靠性和可支配性不会产生不利的影响。
由于采用树结构,因而实现了对空闲存储块的短的访问时间。由于树结构是静态形成的,因而避免了在实时系统作业时由误差造成的树结构的变化,从而保证了数据安全性和持续的可用性。
权利要求2对本发明的一种设计做了表述。由于引入了粒度机制,即为特定块长打上静态印痕,因而一方面与纯最佳符合方法相比进一步有效地提高了占用密度,这是因为避免了最佳符合方法导致的典型的大量无用的小裂分余剩物的生成,另一方面与最佳符合方法相比并不太频繁地需要裂分和合并,因而缩短了访问时间。
权利要求3对本发明的进一步设计做了表述。由于采用了作为二叉树的静态搜索结构的设计,因而以二叉搜索方式可实现对各树叶的访问。因此搜索十分迅速。
权利要求4对本发明的进一步设计做了表述。由于采用分成多个树枝的设计,故在搜索一个合适的块时在第一个树枝的端节点上已能识别出,是否通过此端节点进入的子树是空闲的。一旦在搜索时遇到这样一个空闲的子树,就会直接指示出另一个子树,而不必穿越空闲的子树结构,直到到达其端节点为止。因此进一步缩短了平均访问时间。
权利要求5对本发明的进一步设计做了表述。这种设计一方面保证了在对块进行分配时不会赠送存储空间(最佳占用密度),另一方面保证了树结构仍保持平衡(最佳访问时间)。
权利要求6对本发明的进一步设计做了表述。这种设计保证了在块裂分后有用的余剩块又重新挂入管理结构中。这同样作用于树结构的补偿,并从而实现最短的访问时间。
权利要求7对本发明的进一步设计做了表述。采用中,该设计实现了根据请求发现的空闲块长立刻,(即仍根据此请求)重新用块进行的充填。
权利要求8对本发明的进一步设计做了表述。该设计使补偿机理的采用得以实现,该补偿机理为了实现对树结构的补偿,仅在必要时有针对性地影响容器结构的充填度。另外因此在作业时提出块长轮廓,根据此轮廓就可以确定与此应用适配的新的管理结构的长度间隔划分。
权利要求9和10对本发明的进一步设计做了表述。此设计提出了用于补偿树结构的专用补偿机理,此补偿机理建立在通过记录装置已知的充填度的基础之上。
权利要求11对本发明的进一步设计做了表述。这种设计保证了树结构与应用的最佳配合,并因此使访问时间保持最短。
权利要求12对本发明的进一步设计做了表述。根据此设计,存储器管理系统被分成两个子系统。此分结构实现了出于对数据安全的考虑存入后备存储器的副本仍限定在已占用的块上进行。
权利要求13对本发明的进一步设计做了表述。此设计使人们可以将一种新的更能适应应用的并因此缩短平均搜索时间的管理结构引入存储器管理系统中。该设计特别与依照权利要求8的记录装置结合在一起是有益的。
下面将借助附图对本发明的实施例做进一步的说明。


图1示出一种存储器管理系统VLP的结构,该系统包含空闲管理系统IBM、占用管理系统UBM、块状态控制系统BEM和访问控制系统DAM。
存储器管理系统VLP向用户系统提供例如数据管理系统的数据模块(模块实例)、可变长度存储块的工作存储器。空闲管理系统IBM管理空闲块,并且占用管理系统UBM管理已被用户系统占用(使用)了的存储块。
占用管理系统UBM借助一个所谓的占用块表管理已占用的存储块。占用块表首先用于把由存储器管理系统管理的用户系统的数据封装起来。用户系统因此对由其占用的存储块的所有访问都通过占用块表进行,占用块表包含由用户系统使用的逻辑索引与存储块的物理地址的联系(用户系统先根据请求由占用存储系统获得用于寻址使用的逻辑索引,接着通过把逻辑索引输送给空闲存储器管理系统驱动此系统找到一空闲的存储块并保留起来)。
如上述已提及的那样,空闲管理系统IBM负责管理存储器管理系统的空闲存储块。它将处理对所请示的存储块的搜索、通过对存储块的请求进行的尽可能必要的裂分和在存储块被释放后进行的尽可能必要的合并。对请示的存储块的搜索通过管理结构进行,该管理结构包含一预先完成的、根据长度分类的二叉树,其树叶是容量相同的空闲存储块链的进入点。
一种方案是,在管理结构激活(投入运行)前预先可以把二叉树的所述的链用块充填好,即空闲存储器已分配好。另一种方案是,在激活前链仍是空的,并且在激活后才通过作业过程,例如块的释放、裂分或合并加以充填。
块状态控制系统BEM负责控制“占用”与“空闲”状态间的存储块的状态变换,并随之控制占用管理与空闲管理间的块的管理变换。
访问控制系统DAM负责控制对占用存储块的数据内容的访问,向用户系统提供必要的接口原语。
当所表述的存储器管理系统VLP以多任务系统方式被使用时,有必要对并行进行的存储器管理系统进行的访问实施互锁。此外,按特有的程序进行的对后备存储器的写入访问必须与对存储器管理系统的访问同步。该并行控制和实现是,即使在多个逻辑配合的被称作事务的访问过程中,由一访问控制系统CTC保证提供一个对此逻辑紧密的存储器管理系统的状态。
存储块是存储器管理系统的待管理的基本单元。存储块主要采用其在存储器中的位置、长度和状态加以标识。该信息和一些附加信息被收集在存储块—首标BLK-H中,该首标是存储器管理系统的中心管理结构。
图2示出存储块—首标BLK-H的结构。数据域PATTERN被用于记录所属的存储块的状态。可能的状态是“空闲”、“占用”和“预留”,其中前两个状态不言自明,状态“预留”表示处于两状态间的过渡阶段。
数据域LENGTH用于说明存储块的长度,其中数据以最小块长的倍数方式表示。
两个指针PTR_NEXT_PHYS和PTR_PREV_PHYS用于链接在存储器内物理相邻的块。该数据对真正的存储器管理毫无意义,但对监控存储器管理系统的整体是重要的。即这两个指针可以保证重新找到在空闲/占用存储器IBM、UBM间链接变换时丢失的块,并在必要时可以恢复到所需要的状态。
两个指针PTR_NEXT_LOG和PTR_PREV_LOG用于提供某个块的逻辑后继者或前身的参考基准。其具体的意义与块的瞬时状态有关(见数据域PATTERN)。只要一个块分配给空闲管理IBM,它就会被包装入一个相同容量的块的双链接表内,其中在每一个链中的最后一个块的指针PRT_NEXT_LOG就会追溯到这个链的根。当块内包含有有用数据时,则将涉及中央关键词表。这时由指针PTR_PREV_LOG进行的追溯指示表示的是相应的项。
逻辑前向指示的指针可以为检查占用块采用校验和。在需要分配有关多个块的逻辑关联数据时,此指针另外用于对后续块的寻址,并仅在最后的块中有校验和。
下面借助在图3和图4中表述的存储管理原语(primitive)对存储器管理VLP的工作方式做进一步的说明。
与上述的块—首标BLK-H的管理结构相配合,原语的任务是,实现存储块的物理管理,并且又使存储器管理系统的用户看不见此管理。这里应把外原语和内原语区分开,其中前者是一个向外的,即对应于用户系统的、已知的接口,而后者仅是功能单元,在必要时其实施以隐含方式触发,即在外原语范围内被利用。
由于外原语建立在内原语基础之上,故首先对内原语做进一步阐述。
在图3中表述了内部过程,该过程包含在空闲管理IBM内。当空闲管理变化时,该实现所必需的作用仅限于该原语组。
过程FIND_ENTRY搜索预给定容量块的链的开始端ENTRY。该原语仅作为待述的原语FIND_BLOCK和PUT_TO_TDLE的组件。
过程FIND_BLOCK用于搜索预给定容量的块。有关详细的搜索算法的流程将在下面加以说明。在最有利的情况下,此原语找到一个合适的块(确切地说,在原语FIND-ENTRY帮助下找到的链中),否则将选定一个尽可能合适选择的大块,PATTERN不间断地被置于“预留”状态,并且在块“太大”的情况下,用相应的标记通告对此块的指示。
过程PUT_TO_TDLE用于将块置于空闲管理之下。首先检查即将被释放的块的物理相邻块的状态。如果这时找到一空闲相邻块,则将此通告给BEM。如果没有找到空闲的相邻块—并且只有在此时!—则空闲块挂在借助原语FIND_ENTRY找到的双链的结束端部,并且PATTERN变更成“FREE”。
原语GET_FROM_IDLE用于从空闲管理中提取块。为此,该块必须以相应的方式从管理链中分出,并且块—首标的PATTERN被置于“USED”。提取在链的开始端进行。
过程SPLIT_BLOCK将一块裂分成预定容量的部分。为此必须置入一新的块—首标BLK-H,并启动与相邻物理块的连接。
原语SMELT_BLOCK用于将两个物理相邻的块合并在一起。可以把多余的块—首标加以放弃,并且必须启动与相邻物理邻块的连接。
下面将对外原语做一步说明,该原语包含在块状态控制BEM和访问控制DAM中。图4示出在BEM中含有的原语。
原语RESERVE_BLOCK用于启动对空闲块的搜索,并为所属事务占用此块,同时该原语将PATTERN置于状态“RESERVED。”就功能而言,该原语是建立在原语FIND-BLOCK之上的。如果这时访问存储器管理系统的一个预留—块,则必须立刻采用隐含PUT_TO_IDLE实施SPLIT_BLOCK。
原语SEIZE_BLOCK用于由空闲管理中提取一事先预留的块,并且在必要时通过块裂分使此块实现实际所需的长度。剩余块重新被交回空闲管理。就功能而言,首先实施GET_FROM_IDLE,然后必要时再实施SPLIT_BLOCK。
原语RELEASE_BLOCK用于将不再需要的块送回空闲管理。当有一个空闲的相邻块时,则启动块合并,并且把合并好的块而不是原来的块接入链内。如果把此情况用同时隐含采用的内原语加以表示,则首先进行PUT_TO_TDLE。当此原语找到一空闲相邻块时,则此时并不马上接入链内,而是首先调用SMELT_BLOCK,并接着再次调用尚处于“激活”状态的PUT_TO_IDLE。
在VLP的多任务环境下,在RESERVE_BLOCK的过程中,由于缺少较小的合适的块,事务处理被引向大的剩余块,即执行空闲存储器备用时,不得把整个备用阻塞。此时必须立刻进行块裂分。否则最好在事务处理完毕后再进行块裂分,这样就可以在出现误差和在以后实施重新运行时,即重建事务处理开始前的状态的情况时减少浪费。
如图3所示,由块状态控制BEM调用空闲管理的原语。由原语FIND_BLOCK实施对空闲存储块的搜索,原语FIND_ENTRY对FIND_BLOCK以隐含方式调用,从而在第一步就找到一个具有空闲块的合适的管理链,并且同时以隐含方式调用原语FAST_SPLIT,以便同时实施快速的裂分。
通过原语PUT_TO_IDLE和GET_FROM_IDLE,为找到空闲存储块进行对管理链的访问,其中位于前者的原语重新调用FIND_ENTRY原语,以便找到正确的链。
采用原语SPLIT_BLOCK的裂分和采用原语SMELT_BLOCK的合并同样都是由块状态控制启动的,确切地说是在对引起的事务处理的日期注明后,这样就可以保证在中断的情况下反向滚动回事务处理前的状态。
DAM包含有写入块和读出块程序。原语WRITE_BLOCK用于写入用户数据,同样是在附加采用所述的更新过程的情况下,将用户数据写入预留的块内。过程读出块由预留块内读出用户数据。
下面将借助图5对空闲管理的主要数据结构,即管理结构做进一步说明,通过此管理结构对访问存储器管理系统的空闲块进行组织。
可以把管理结构分成3部分,即导致“小”块的第一访问结构RIT、通向“大”块的第二访问结构LBA和通向预留块的第三访问结构RBA。第二和第三访问结构仅有少量的指针,而第一访问结构却有一个静态二叉树。
所述静态二叉树的结构建立在下述规定的基础之上,—至少对“小”块—仅允许具有离散值的块长,即特定最小块长的倍数。然后具有相同长度的块的链对二叉树的每个叶编址,其中叶通过节点根据块的某长度分类。
采用所述的访问结构,通过粒度的压缩除外,保证了接近最佳符合的搜索。此外,由于采用二叉树结构,因而保证了十分迅速的访问。对引入粒度造成的空闲存储空间的损失,将通过改善占用和空闲存储空间之间的比例得到几倍的补偿。
正如已提及的那样,将通过一单独的第二访问结构实施对“大”块链的访问。所述的“大”块链在由VLP管理的存储空间MR的端部出现,其中根据最佳符合搜索进行选择。鉴于考虑问题的出发点是,所述链较短,故搜索时在可以接受的时间内进行链的运算。
与所述的“大”块不同的是,“小”块定位于由存储器管理系统管理的存储空间MR的开始端。而且在“小”块的存储区内也可以对块进行合并,因此有可能超过在第一访问结构上最大的可直接编址的块长。所以二叉树最后一片叶通常不仅包含给定块长的块,而且也包含通过合并处理产生的所有较大的块长。
对预留块的管理(第三访问结构RBA)包含在预留块的开始端和结束端的两个标记以及两个其它标记,该标记对在预留块的开始端或结束端的一个正好被裂分的块编址,以便对快速裂分和合并加以支持。
“大”块的管理(第二访问结构LBA)包含在“大”块链的开始端或结束端的两个标记。
图6再次示出第一访问结构,即一个静态预完成的、根据长度分类的二叉树,其树叶提供对相同容量空闲块链的进入点。为实现动态最佳化,二叉树被分成两层(在图5中未示出),即分成母树(参见图6)和子树(参见图7)。
母树将空闲存储器的预给定块长轮廓大致地分成块长间隔ITV,而子树(第二层)将间隔分成离散块长,其中子树的树叶提供相同长度块链的入口。由此树结构支持的块长是静态预给定的,并造成一定的粒度和一特定义的最小块长。这一表面上看起来的压缩是十分有益的,下面将在对结构及其功能进行说明时对此做进一步的阐述。
间隔的数量由上限和所需的细分粒度的比例得出,上限把所有块非特定地作为“大”块加以处理。
根据此粒度,支持了“准”最佳符合搜索。对首先由于引入粒度必然产生的存储空间的损失,一方面直接通过提高占用密度(分层长度能更好地相互适合)得到补偿,另一方面由少量的所需的裂分总体上实现较好的系统状况。
可以等间隔地把空闲存储器分成长度间隔ITV,或与专门的应用相关根据应用的长度轮廓(用户专用的块长请求再现性)进行细分。如果例如选择一个与其它间隔相比非常小的特定间隔,则在此间隔中仅有少许的离散长度存在并且因此裂分此间隔的子树与另外间隔的子树相比具有很小的深度。因此对在此间隔内块长的搜索步骤数量较少并随之访问较快。采用此方法可以缩短对经常请求的块长的访问时间。与最终选定的细分无关,可以无约束地选择最后的间隔,这是因为其包含有高于所接受长度轮廓的最大值的所有块。
图6中的树节点包含有对每个二叉树典型的信息,即基准长度LENGTH,该基准长度在搜索时总是与请求块长比较,以及在两个相邻节点/相邻叶上的小于指示LT_IX和大于—等于指示GE_IX(GE=大于或等于)。
图6中的树十包含用于实际在此间隔中供使用的块的总数量(NO_OF_BLOCKS)、访问间隔内管理结构的指示(START_OF_ITV)和为收集“空”的间隔(NO_OF_BLOCKS=0)用的分配给下一个高级/低级间隔的相邻叶的两个指示(NEXT_ITV、PREV_ITV)。
如果采用分成2n间隔的划分,则必须对母树预先完成2n个树叶和2n-1个节点,总是采用4个字节。另一项静态预完成的工作是,对最小块长度进行定义。以包含有必要的管理数据的块—首标的固定长度作为基础,如果对由首标管理的用户数据至少再次设置相同的长度,则为最小块长度获得的值是明智的。当块较小时,将对块裂分进行抑制。最小的支援单元同时与粒度长度相符,采用此单元仅用于提供块长度。
由间隔宽度与最小块长度的比例得出一个间隔内块长度的最大可能的数量。
严格地讲,由于对最小单元和与此相联系的粒度做了确定,故在本发明的存储器管理系统中采取的不是最佳符合的方法,这也就是为什么把在本发明存储器管理系统中采用的访问方法最好称作“准最佳符合方法”的原因。
但与最佳符合方法相比,确定最小单元具有一惊人的优点。只要没有非常多的对小于此单元的长度的块的请求—在实践中就是以此为出发点的—,则此粒度的功能仅用于抑制非常小的,最终将不能使用的块的产生。因此将会产生占用的与空闲的存储空间之间基本较好的关系。
对每个上面已采用的间隔,按照可能的块长度在叶内(在间隔内)总是要预先建立另一个静态、半永久的二叉树(子树),该二叉树构成二叉树的第二层,并悬持于第一层的(间隔)叶下。
图7示出一子树,该子树悬挂于第一层的一个(间隔)叶下。该树的树叶包含有所分配的长度LENGTH,该长度说明间隔的上限,相应长度的空闲块链CHN的开始(START_OF_CHN)或结束(END_OF_CHN)指示,和为可以对“空”链(START_OF_CHN=NULL)做出反应的对此间隔内具有下一长度的相邻十(NEXT_ENTRY)或对在上一级二叉树内下一个较高的间隔的叶的指示或“最后间隔”标记。换句话说,节点由上述对二叉树典型的表目构成。
假设把间隔分成2m个链,则必须对子树预先建立长度2m-1个节点和2m个叶,其中,每个节点占4个字节,每个叶占12字节。
如果在作业时必须调换到一个新的与用户相适应的细分上(例如高请求再现性范围内的窄的间隔),则只要可以保持最小块长,这一点相对来说不成问题。新的管理结构开始时是非现用的,与在老的树结构上作业的同时进行准备。一旦此准备结束,预留块和“大”块的管理数据就可以从老的管理结构转入新的管理结构并启用新结构。从此时刻起用新的管理结构运行,甚至有短暂的动态损耗,也无大碍。在接着的过程中必须逐步把通过老树访问的空闲块链转入新树中。此过渡过程如下。在特定的时域(过渡阶段)内,在请示一空闲的块时仍在老的管理结构中搜索。只有当在老结构中找不到空闲块时,才在新管理结构中继续搜索。如果在老的管理结构中找到一空闲的,但太大了的块,则该找到的块被裂分并且裂分后的部分收纳在新管理结构中。如果一迄今占用的块被释放,则该块当然立刻被新管理结构所收纳。在过渡阶段后最终把尚留在老的管理结构中的空闲块经一个与用户请求无关的处理转入新管理结构中。随着此过程的结束对新的管理结构的变化完毕。
下面将对一个块的请求过程做进一步阐述。
根据对特定长度块的请求,程序FIND_BLOCK被调用。该过程在程序FIND_ENTRY辅助下完成第一访问结构,即所述的二叉树。到达母树的相应的树叶,读出此处可供使用的块的数量。如果该数不等于0(1>0),则被转交给间隔内管理。在另外的情况下(1=0),将指示相邻的间隔或出于最佳化目的—对此下面还将进一步说明—指示一其它的对用户有利的间隔。在下面将对这两种情况做进一步阐述。
1>0在间隔内树上找出相应的长度(准最佳符合!)。如果在此叶下找到一个块,则搜索过程结束。但如果在此叶下没有块,则可以指示在同一间隔内的相邻十(或出于最佳化目的指示其它叶),以便找到稍大的块。如果所有其它的链也都是空的,则间隔的最后叶指示访问下一个间隔。在此处重复进行上述情况区分,当1>0时,这时可以肯定已找到一个可用块,该块一般尚需裂分。
1=0由于在此间隔中没有块,因而可以直接指向下一个间隔。
为实现上述简单地描述过的判定(1>0或1=0),替代计数预设置一位已足够了。但计数就校验和空闲管理的统计监督而言还是有益的。
在最佳的情况下有一个符合请求的块(根据预先建立的粒度!),因而直接通过预设立的静态二叉树可以迅速地进行访问。
如果所请示的块的长度是最小长度的二倍,并且如果虽然有最小长度的块,但除此之外在空闲管理中不再有块(所述预留块除外),这时的情况是最坏的。除第一和最后一个间隔的计数之外,所有间隔计数此时因此为0。
在此条件下,请示进入第一间隔并找到在相应叶的空白表目,接着在间隔内的整个宽度(-2叶)继续访问。到达其结束端点上时,跳入下一个间隔的入口。鉴于在此间隔中,甚至在后面的间隔中,根据条件没有可供使用的块,因而请示被跨越指向直至上一级树(母树)的结束端点,以便在该处找到备用块并把此块裂分成相应的部分。
正常情况将介于这两种极端情况之间,当然通过采取相宜措施(预给定间隔分层、预给定标准块分配、有针对性的裂分等)是可以把通常情况保持在非常接近于理想的情况。
一旦用非空白链找到一个叶,则在此链开始端对此块用预留加以标记(PATTERN=“RESERVED”)。如果此块不是VLP的备用块,则在多任务环境情况下,在必要时进行裂分前(SPLIT_BLOCK)要对该块的说明进行等待。但如果该块是VLP备用块,则应不得延迟进行此裂分,以便使此备用块提供其它的请求使用。采用此法获得的块最后被划出,把叶的初始计数(START_OF_CHN)置于接续叶中,并把该处的追溯基准和在该块和间隔—叶中的计数加以变更。
在释放一个块时,首先调查待释放的块(PATTERN=“FREE”)的物理相邻块的状态。如果有一个或两个相邻块是空闲的(PATTERN=“FREE”),就可以实施块合并(SMELT_BLOCK)。
对据此释放的块,通过上述树搜索符合其长度的叶。当然该搜索始终是可以直接进行的。采用该叶中的指示END_OF_CHN,在其结束端划入链内。叶中的计数应相应增长。
加以指出的是,在块释放时进行的搜索作为附加花费是预规定的等级结构的必然后果。但在本发明的存储器管理系统中的搜索步骤数量是极其少的。
下面将借助范例对动态过程做进一步说明。
等量分配长度轮廓被视为是最简单的分配;用256K字节作范围的上限。16字节作块首标的长度(块首标的最小结构,即如图2所示,不含PTR-NEXT-PHYS和PTR-PREV-LOG),最小块长度及粒度为32字节;Lmax256k字节(范围上限)Lmin32字节(最小块长度)Gran32字节(粒度)块长范围应分成256个宽度为1千字节的等距离间隔,树拥有8个节点的深度;间隔宽度1千字节与32字节的粒度共同得出每个间隔的32个可能长度,子树的深度为5个节点IntB 1K字节(间隔宽度)HBT8(母树的节点深度)UBT5(子树的节点深度)NInt32(每个间隔的可能的长度数量)因此已知空闲管理的预给定分量,即母树的深度HBT=8和256个间隔内子树,子树的深度UBT=5。预先完成的空间需要量约130K字节母树(第一层)→ 28间隔28-1节点×4字节1K字节28叶×4字节1K字节2K字节子树(第二层) → 25链/间隔25-1节点×4字节=128字节
25叶×12字节=384字节*28间隔→128K字节总计130K字节在最佳情况下经13个搜索步骤就找到特定的块长度,在最坏的情况下需要334个搜索步骤,对此简述如下。最佳情况8 (母树深度)+5(子树深度)13搜索步骤最坏情况8 (母树深度)5 (子树深度)25-2 (子树宽度)28-1 (母树宽度)5 (子树宽度)+25-1(子树宽度)334搜索步骤所述最坏的情况当然是很少出现的,这也就是为什么平均搜索时间接近于理想情况(13个搜索步骤)的原因。
在块释放时,必须把该块归还空闲管理的相应的叶。在本例中对此需要13个搜索步骤。
下面将对用于搜索时间或搜索步骤最佳化的不同机理加以说明,这两者是互为补充的。
一个策略在于,在找到一个空白链时并不简单地直接指向相邻链,而应指示,在实施块裂分后出于对树稳定的考虑把有利的余剩物作为空闲块保留下来。
在具体实现此策略时,例如可以在空白链的结束端不指向间隔内的下一相邻链,而是指示直接向下一间隔或泛指向另一间隔。同样也可以不把后续间隔,而是直接把例如根据请求专用的分配选定的叶作为这种指示的目标。采用这两种实现方式时保证了在块裂分后又有一个—视指示结构的智能—可以使用的剩余供使用。所述的策略最好被称作“向前看裂分”。
另一策略在于,对持续要求的块长的空闲块的合并进行抑制。这种策略最好被称作“向后看裂分”。
另一策略在于,在一个与请示(事务处理)无关的过程中重新对相对空的链进行充填。最好在非信息交换时间,例如夜晚进行这种与事务处理无关的裂分,以便不对系统状况造成不利的影响。这种策略的具体实现在于,对含有第二树层的叶的表制备一短暂的影子表,该影子表包含对此叶最后请示的时间标记和/或所含块的计数。当检索此表时,就会借助时间标记读出特定长度的块的利用概率,并借助计数读出是否仍有足够数量的这种块存在。一旦属于某叶的链由于充填度过低应进行重新充填时,则一个相当于被搜索块几倍的块被裂分成许多小块,并把这些产生出来的分块挂入链中。(充填度是一个表示瞬时现有的与静态预给定块的数量的比)。
由于有目的地制备经常需要的块长度,并使其保持在最佳状态,因而提高了以最短的可能的搜索时间满足请求的概率,故所述策略缩短了搜索时间。
此外,采用所述策略也可以隐含提高占用管理的动态水平,降低了每个请求使用后备存储器的平均次数。该降低也与进行必要的裂分的平均次数较少是分不开的。
特别是如果由一个大块K一次就制备出相同长度的多个小块时,降低启动次数的效果就更为明显。在下面与正常实施例的K裂分相对照对此策略的效果做进一步的说明,其中在括号内给出的启动次数与块首标结构和叶结构的最小构成相关。
在正常实施K裂分情况下,每当调用过程SEIZE_BLOCK时就会启动裂分。这时就会改变原始块的首标(模式、长度等),其逻辑前身和后继者被启动,并为余剩块制备新的首标,与此余剩块相关必须改变物理后继者的追溯基准,并且新的块必须被收纳在空闲管理中(逻辑前身和空闲链的结束端显示)老首标 K逻辑前身K(逻辑接替者 K)新首标 K(逻辑接替者 K)逻辑前身K(空闲链端指针 K)启动次数7×K(4×K)在采用所述策略时,与此相反大的块被裂分成K个长度相同的小块并接着进行K次SEIZE_BLOCK调用,该调用不用裂分就能实现。在对大块裂分时制备出K个新的首标,总共只启动一个物理后继者;整个链被分配给同一个叶,这也就是为什么仅更改一个逻辑前身或后继者的原因。对于长度要处理相应的首标和逻辑基准新首标 K(物理接替者1)首标 K逻辑前身 K(逻辑后继者K)启动次数 4×n+1(3×n)
权利要求
1.计算机系统的存储器管理系统,带有管理结构(RIT),该结构以块方式对计算机系统的空闲存储器进行管理,并根据请求将块提供给用户系统,其特征在于该管理结构含有一静态树结构,在其端节点(叶)容纳有空闲存储器块。
2.依照权利要求1的存储器管理系统,其特征在于根据可能的离散块长分配空闲存储器,其中可能的离散块长是静态预给定的,并且在所述树结构的端节点(叶)下容纳有特定块长的块。
3.依照权利要求1或2的存储器管理系统,其特征在于静态树结构涉及的是二叉树结构。
4.依照权利要求1至3中的一个权利要求的存储器管理系统,其特征在于所述树结构分成等级树层,每个树层把上一个树层预给定的块长范围分成分范围,并且最下面的树层把预给定其的范围分成离散块长,并且其中树层的树的端节点包含有有关当时总共在此端节点下的可供使用的空闲块数量的数据。
5.依照权利要求1至4中的一个权利要求的存储器管理系统,其特征在于裂分机理,当找到的块不具有请求的块长时,在每次把找到的块分配给用户系统之前,裂分机理实施块裂分;合并机理,该合并机理在每次用户系统释放一个块后审查是否同时与此块物理相邻的块是空闲的,只要是这种情况,则两个块相互合并。
6.依照权利要求5的存储器管理系统,其特征在于指示机理,为找到一空闲块长,该机理对继续搜索下一个子范围加以指示。
7.依照权利要求5的存储器管理系统,其特征在于指示机理,为找到一空闲的请求的块长,该机理指示出K倍块长,并且在分配给用户系统前将按K倍块长找到的块裂分成具有请求块长的K个块。
8.依照权利要求1至7之一的存储器管理系统,其特征在于记录装置,该装置对用于容纳特定块长的容器结构的充填度进行记录和/或对特定块长的块的再现性进行记录。
9.依照权利要求8的存储管理系统,其特征在于充填机理,当充填度低于特定门限时,该机理通过块裂分重新用块对容器结构进行充填。
10.依照权利要求8或9的存储器管理系统,其特征在于抑制机理,当属于被释放块的容器结构的充填度低于特定门限时,该机理将对被释放的块与物理相邻块的合并进行抑制。
11.依照权利要求4至10中的一个权利要求的存储器管理系统,其特征在于根据用户对特定块长的请求频度的特定分布,将块长分成分范围。
12.依照权利要求1至11中的一个权利要求的存储器管理系统,具有占用管理系统(UBM),该系统管理被用户系统占用的块,并负责为所有被占用的块在后备存储器上制做副本。
13.依照权利要求1至12中的一个权利要求的存储器管理系统,具有互换手段,作业时一个新的静态管理系统可以替换迄今的静态管理结构。
全文摘要
计算机系统,特别是实时系统的存储器管理系统应实现对空闲存储器的短的访问时间,而不会对数据安全性和可用性造成不利的影响。通过空闲存储器的管理结构(RIT)实现了此目的,该结构根据本发明包含一个静态树结构。
文档编号G06F12/02GK1143220SQ9510258
公开日1997年2月19日 申请日期1995年9月19日 优先权日1994年9月19日
发明者S·克鲁舍, D·卢卡斯, G·索默 申请人:西门子公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1