能够有效使用存储器的存储池管理方法和系统的制作方法

文档序号:6605792阅读:105来源:国知局
专利名称:能够有效使用存储器的存储池管理方法和系统的制作方法
技术领域
本发明涉及用于计算机等的存储池管理方法和系统。
背景技术
众所周知各种各样的装置或系统由软件程序控制。在这种装置中,当程序执行时使用各种数据。虽然所有的数据都存储在(主)存储器中有利于程序的高速执行,但是大容量的存储器非常昂贵。因此,存储器的容量通常小于存储所有的数据所需要的容量。因此,存储器根据来自程序的占用(getting)请求存储所需的数据部分。
当存储器没有可分配的存储区用来接收来自程序的占用请求时,暂停程序的执行直到在存储器中出现可分配的存储区。因此,必须尽可能有效的使用存储器,以避免这种情况。
采用相关的存储池管理系统来有效地利用存储器,并称作可变长度存储池管理系统。存储池管理系统允许来自程序的占用请求随意请求存储器容量。
当接收到占用请求时,存储池管理系统搜索存储器等于或大于所请求的存储器容量的可分配存储区的可用或未占用的存储区。当作存储器中找到可分配存储区时,存储池管理系统占用或调取部分或全部可分配的存储区作为具有所请求的存储器容量的调取存储区。所调取的存储区分配给或被程序占用。存储池管理系统接收到另一个占用请求时重复上述操作。
另一方面,存储池管理系统响应来自程序的释放请求释放被程序占用的占用存储区,将占用区变为可重新使用存储区。可重新使用存储区与可用存储区相同,并且相邻的可用存储区联合起来形成连续的可用存储区。
当可重新使用存储区与另一个占用存储区相邻时,它只能用于所请求的存储器容量小于或等于自身容量的请求。因此,存在一种情况,虽然可用存储区的总和大于新的占用请求所请求的容量,但是存储池管理系统不能接收新的占用请求。即,存储池管理系统存在可用存储区碎片的问题。
另一种相关的存储池管理系统称作固定长度存储池管理系统。存储池管理系统将存储器的存储区分为多个存储池。每个存储池包括多个容量的子存储池。存储池的子存储池的容量彼此不同。
存储池管理系统允许来自程序的特定的请求存储器容量。特定的请求存储器容量必须等于存储池的任何一个的子存储池的容量。换句话说,存储池管理系统以子存储池为单位调取和释放存储区。
虽然存储池管理系统没有可用存储区的碎片问题,但是存在下面所述的另外的问题。
当相应的存储池没有可用的子存储池时,存储池管理系统不能接收特定的请求存储容量等于某个子存储池的容量的新的占用请求。即使其他存储池有足够的可用存储区也会有这样的情况。即,存储池管理系统具有尽管有足够的可用存储区但不能接受占用请求的问题。换句话说,存储池管理系统具有由存储区分区引起的分区缺点。
发明概述因此,本发明的目的是提供一种能够有效利用存储器的存储池管理系统。
本发明的其它目的会随着说明书的进展而阐述清楚。
根据本发明的第一方面,存储池管理方法用于从具有多个子存储池的存储池中得到存储区。该方法包括以下步骤接收来自任务程序的指定请求存储区容量的存储区占用请求;以子存储池为单位按关于请求存储区容量的预定的搜索顺序,从存储池中搜索等于或大于所请求存储区容量的可分配存储区;当在任何一个子存储池中发现可分配存储区时,从可分配存储区得到所请求存储区容量的存储区。
根据本发明的第二方面,用在计算机中的计算机程序产品从具有多个子存储池的存储池中得到存储区。计算机程序产品包括载有计算机可读的指令和存储计算机可读指令的记录媒体。该指令用于让计算机可以根据以下步骤操作接收来自任务程序的指定请求存储区容量的存储区占用请求;以子存储池为单位按关于请求存储区容量的预定的搜索顺序,从存储池中搜索等于或大于所请求存储区容量的可分配存储区;当在任何一个子存储池中发现可分配存储区时,从可分配存储区得到所请求存储区容量的存储区。
根据本发明的第三方面,存储池管理系统用于从具有多个子存储池的存储池中得到存储区。存储池管理系统包括用来接收来自任务程序的指定请求存储区容量的存储区占用请求的占用请求接收部分。搜索顺序控制部分连接到接收部分,以根据关于请求存储区容量的预定的搜索顺序通知子存储池ID,响应占用请求接收部分的请求。占用部分连接到占用请求接收部分,以尝试根据从搜索顺序控制部分通过占用请求接收部分发来的相应的子存储池ID从子存储池中占用所请求存储区容量的存储区。


图1是根据本发明的第一实施例的存储池管理系统的方框图;
图2示出了在由图1的存储池管理系统管理的存储器中存储池的结构;图3是在图1的存储池管理系统中所用的搜索顺序表,搜索可分配存储区;图4是用来说明在图1的存储池管理系统中所提供的存储器占用请求接收部分的工作的流程图;图5是用来说明在图1的存储池管理系统中所提供的存储器释放请求接收部分的工作的流程图;图6是用来说明在图1的存储池管理系统中所提供的搜索顺序控制部分的工作的流程图;图7是用来说明图1的存储池管理系统中所提供的队列控制部分的工作的流程图,图示情况为队列控制部分从存储器请求接收部分接收到存储池ID和请求存储区容量;图8示出了由图1的存储池管理系统所用的任务控制模块(TCB)的结构;图9是用来图示说明队列控制部分的工作流程图,队列控制部分从存储器释放请求接收部分接收到存储池ID、子存储池ID和最大可用存储区容量;图10是用来说明在图1的存储池管理系统中所提供的存储器占用部分的工作的流程图;图11是用来说明在图1的存储池管理系统中所提供的存储器释放部分的工作的流程图;图12是根据本发明的第二实施例的存储池管理系统的方框图;图13示出了在由图12的存储池管理系统管理的存储器中存储组的结构;图14是在图12的存储池管理系统中所用的搜索顺序表,搜索可分配存储区;图15是用来说明在图12的存储池管理系统中所提供的存储器占用请求接收部分的工作的流程图;图16是用来说明在图12的存储池管理系统中所提供的存储器释放请求接收部分的工作的流程图;图17是用来说明在图12的存储池管理系统中所提供的搜索顺序控制部分的工作的流程图。
优选实施例的说明参考图1到11,说明根据本发明的第一实施例的存储池管理系统。
简言之,存储池管理系统预先将各存储池分为多个子存储池,并根据请求的存储区容量以不同的方搜索顺序搜索可分配存储区。在该结构中,倾向于使用各子存储池满足特定范围的请求存储区容量。因此,难以产生子存储池碎片。此外,因为各子存储池不仅用于特定范围的请求存储区容量,所以存储池分为子存储池不会产生分区缺点。
在图1中,存储池管理系统连接到存储器100,并包括搜索顺序控制部分101、存储器占用请求接收部分102、存储器释放请求接收部分103、存储器占用部分104、队列控制部分105和存储器释放部分106。
搜索顺序控制部分101控制在存储器100中的存储池的子存储池中搜索可用存储区的顺序。搜索顺序控制部分101响应从存储器占用请求接收部分102来的请求将搜索顺序通知存储器占用请求接收部分102。换句话说,搜索顺序控制部分101将要被搜索的子存储池通知存储器占用请求接收部分102。
存储器占用请求接收部分102用来接收来自任务程序的储器占用请求。当接收到储器占用请求时,存储器占用请求接收部分102询问搜索顺序控制部分101的搜索顺序。然后,存储器占用请求接收部分102使存储器占用部分104尝试从由搜索顺序控制部分101通知的搜索顺序所决定的第一子存储池中占用或调取具有所请求的存储区容量的可用存储区。在第一子存储池中没有可用存储区的情况下,存储器占用请求接收部分102使存储器占用部分104尝试从剩余的子存储池中按照搜索顺序一个接一个的搜索,以调取具有所请求的存储区容量的可用存储区。
存储器占用部分104用来从存储器占用请求接收部分102指定的特定子存储池中占用或调取具有所请求的存储区容量的可用存储区,作为调取的存储区。当在特定子存储池中没有可用存储区时,存储器占用部分104通知存储器占用请求接收部分102搜索失败。
存储器释放请求接收部分103用来接收来自任务程序的储器释放请求。存储器释放请求接收部分103使存储器释放部分106释放调取的存储区。同时,存储器释放请求接收部分103将对调取的存储区的释放通知队列控制部分105。
存储器释放部分106用来释放调取的存储区。
当存储器调取请求没有接受时,队列控制部分105用来使任务程序进入等待或睡眠状态,直到在存储池中出现可用存储区。队列控制部分105将调取存储区的释放通知等待可用存储区出现的任务程序。换句话说,当可用存储区出现时,队列控制部分105唤醒任务程序。
接下来,说明存储器100的存储区的结构和搜索顺序控制部分101保存的搜索顺序表。
图2示出了存储器100的存储区的结构。如图2所示,存储区提供了多个存储池(A、B、…)。各存储池分为多个子存储池。在本实施例中,存储池A分为四个子存储池A-1、A-2、A-3和A-4,同时存储池B分为三个子存储池B-1、B-2和B-3。在各存储池中,子存储池的容量彼此不同。但是,在各存储池中,子存储池的容量可以是相同的。
图3示出了由搜索顺序控制部分101保存的搜索顺序表的例子。搜索顺序表为存储池A的搜索顺序。搜索顺序表有四个条目。第一个是请求存储区容量等于或小于64K字节的。第二个是请求存储区容量大于64K字节等于或小于128K字节的。第三个是请求存储区容量大于128K字节等于或小于512K字节的。最后一个是请求存储区容量等于或大于512K字节的。例如,当请求存储区容量等于256K字节时,第三个条目(entry)用来在存储池A中搜索可用存储区。这些条目用来处理任何容量的请求存储区容量。分别对应于剩余存储池的其它搜索顺序表由搜索顺序控制部分101保存。即,搜索顺序表定义了相应存储池的搜索顺序。其它搜索顺序表可以与图3的搜索顺序表不同,也可以彼此不相同。
然后,参考图4到11以及图1到3说明存储池管理系统的工作。这里,存储池管理系统通过使用分别对应于任务的控制表(TCB任务控制模块Task Control Block)控制多个任务,类似于一般的操作系统(或OS)。
首先,任务程序调用存储器占用请求接收部分,以得到存储区。即,任务程序将包括存储池ID和请求存储区容量的占用请求发送到存储器占用请求接收部分102。当接收到来自任务程序的占用请求时,存储器占用请求接收部分102进行如图4所示的操作。
如图4所示,在步骤S401中,存储器占用请求接收部分102初始化搜索计数器“Count”。即,存储器占用请求接收部分102在搜索计数器“Count”中置“1”作为计数值。
然后,在步骤S402中,存储器占用请求接收部分102将存储池ID、所请求的存储区容量和计数值发送到搜索顺序控制部分101。
接收到的存储池ID、所请求的存储区容量和计数值后,在步骤S402中,搜索顺序控制部分101向存储器占用请求接收部分102发送应答。应答(replay)代表要搜索的子存储池的子存储池ID或没有要搜索的子存储池(或搜索结束)。
在步骤S403中,当存储器占用请求接收部分102接收到搜索顺序控制部分101的应答时,判断应答是否代表子存储池ID或没搜索到。当应答代表子存储池ID时,步骤S403转到步骤S404。另一方面,当应答代表没有要搜索的子存储池时,步骤S403跳到步骤S408。
在步骤S404中,存储器占用请求接收部分102将存储池ID和所请求的存储区容量发送到存储器占用部分104。存储器占用部分104尝试得到或调取子存储池中所请求存储容量的分配的子存储器ID的存储区。存储器占用部分104将存储器占用尝试的结果通知存储器占用请求接收部分102。当存储器占用部分104尝试成功时,结果表示占用或调取的存储器地址。当存储器占用部分104尝试失败时,结果表示失败状态。
在步骤S405中,存储器占用请求接收部分102根据来自存储器占用部分104的结果判断储器占用部分104的尝试是否成功。当结果表示失败状态时,步骤S405转到步骤S406。当结果表示存储器地址时,步骤S405跳到步骤S407。
在步骤S406中,存储器占用请求接收部分102使搜索计数器“Count”累加。即,存储器占用请求接收部分102使当前计数值加“1”,产生新的计数值。然后,步骤S406返回到步骤S402。
另一方面,当存储器占用请求接收部分102在步骤S405中收到存储器地址时,在步骤S407中,存储器占用请求接收部分102将存储器地址发送到任务程序。
在步骤S403中,当搜索顺序控制部分101通知没有子存储池时,在步骤S408中,存储器占用请求接收部分102将存储池ID和所请求的存储区容量发送到队列控制部分105。队列控制部分105使任务的TCB在等候任务队列中排队等候对应于存储池ID的存储池。因此,任务等待在对应于存储池ID的存储池中发现可分配的存储区。
当在存储池中发现可分配的存储区时,队列控制部分105将可分配存储区的存储器地址存储到TCB中,并唤醒任务。
在步骤S409中,被唤醒的任务从TCB中读出可分配存储区的存储器地址。因此,任务占用并占用了所需要的存储区容量的存储区。
下面说明任务程序调用存储器释放请求接收部分103的情况。在这种情况下,任务程序将包括释放存储器地址的释放请求发送到存储器释放请求接收部分103。存储器释放请求接收部分103接收释放请求并如图5所示操作。
在步骤S501中,存储器释放请求接收部分103将释放的存储器地址发送到存储器释放部分106,以使存储器释放部分106释放所调取的对应于释放存储器地址的存储区。存储器释放部分106找到通过释放所调取的在属于释放存储器地址的子存储池中的存储区所形成的最大可用存储区。存储器释放部分106将包括最大可用存储区的子存储池的子存储池ID和最大可用存储区的容量发送给存储器释放请求接收部分103。
在步骤S502中,根据接收到的子存储池ID和最大可用存储区容量之后,存储器释放请求接收部分103将它们与包括由子存储池ID代表的子存储池的存储池的存储池ID通知队列控制部分105。
然后,将说明由存储器占用请求接收部分102调用的搜索顺序控制部分101的操作。
当搜索顺序控制部分101接收到来自存储器占用请求接收部分102的存储池ID、所请求的存储区容量和“Count”的计数值时,其操作如图6所示。
在步骤S601中,搜索顺序控制部分101根据从存储器占用请求接收部分102发来的存储池ID选择搜索顺序表中的一个。
然后,在步骤S602中,搜索顺序控制部分101根据来自存储器占用请求接收部分102的所请求的存储区容量从选定的搜索顺序表中找到一个条目。
随后,在步骤S603中,搜索顺序控制部分101判断从存储器占用请求接收部分102发来的计数值是否大于在找到的条目中的子存储池ID的数量。当计数值等于或小于在找到的条目中的子存储池ID的数量时,步骤S603转到步骤S604。在步骤S604中,搜索顺序控制部分101将对应于计数值的相应的子存储池ID发送到存储器占用请求接收部分102。另一方面,当计数值大于子存储池ID的数量时,步骤S604跳到步骤S605。在步骤S605中,搜索顺序控制部分101通知存储器占用请求接收部分102没有相应的子存储池ID。换句话说,搜索顺序控制部分101通知存储器占用请求接收部分102搜索结束。
现在,假设来自存储器占用请求接收部分102的存储池ID和所请求的存储区容量分别为存储池A和256K字节容量。在这种情况下,搜索顺序控制部分101操作如下。
首先,因为存储池ID表示存储池A,所以搜索顺序控制部分101选择图3的搜索顺序表。然后,因为所请求的存储区容量等于256K字节,所以搜索顺序控制部分101选择搜索顺序表的第三个条目。
当来自存储器占用请求接收部分102的计数值等于“1”时,搜索顺序控制部分101将“A-3”作为子存储池ID发送给存储器占用请求接收部分102。如果计数值等于“2”、“3”和“3”,则搜索顺序控制部分101将分别发送“A-2”、“A-1”和“A-4”。当计数值等于“5”时,搜索顺序控制部分101通知存储器占用请求接收部分102搜索结束。
下面参考图7到9说明队列控制部分105的操作。从存储器占用请求接收部分102收到存储池ID和所请求的存储区容量时,队列控制部分105的操作如图7所示。此外,当被存储器释放请求接收部分103调用或从存储器释放请求接收部分103收到存储池ID、子存储池ID和最大可用存储区容量时,队列控制部分105的操作如图9所示。
如图7所示,在步骤S701中,当从存储器占用请求接收部分102收到存储池ID和所请求的存储区容量后,队列控制部分105得到对应于产生存储池ID和所请求存储区容量的任务的TCB。TCB具有用来存储所请求的存储区容量的第一域和用来存储可分配的存储区的存储器地址的第二域,如图8所示。
然后,在步骤S702中,队列控制部分105将所请求的存储区容量储存在所得到的TCB的第一域中,并将第二域清空使之为零。
最后,在步骤S703中,TCB在等候任务队列中排队等候对应于存储池ID的存储池,并由此使任务进入休眠状态。例如,如图8所示的情况,因为已经有三个TCB在排队,所以该TCB为第四个。等候任务队列用已知的方法处理,例如FIFO方法、根据任务优先权的方法等。无论如何,等候任务队列采用调度程序(未示)来处理。
如图9所示,在步骤S901中,当队列控制部分105接收到存储池ID、子存储池ID和最大可用存储区容量时,用最大可用存储区容量代替“下一个容量”。
然后,在步骤S902中,队列控制部分105判断在对应于存储池ID的等候任务队列中是否还剩有TCB。当在等候任务队列中还留有TCB时,步骤S902转到步骤S903。另一方面,当在等候任务队列中没有TCB时,步骤S902到结束。
在步骤S903中,队列控制部分105得到在等候任务队列最前面的TCB。
接着,在步骤S904中,队列控制部分105将存储在所得到的TCB中的所请求的存储区容量与“下一个容量”进行比较。当所请求的存储区容量等于或小于“下一个容量”时,步骤S904转到步骤S905。当所请求的存储区容量大于“下一个容量”时,步骤S904转到结束。
在步骤S905中,队列控制部分105使存储池查询部分1204从对应于子存储池ID的子存储池中得到具有所请求的存储区容量的存储区。
随后,队列控制部分105从等候任务队列中取出TCB并将由存储池查询部分1204得到的调取存储区的存储器地址存储到TCB的第二域中。此外,队列控制部分105唤醒对应TCB的任务。
接着,在步骤S907中,队列控制部分105从“下一个容量”中减去所请求的存储区容量,以得到新的“下一个容量”。然后,步骤S907返回到步骤S902。
在本实施例中,队列控制部分105仅考虑从存储器占用请求接收部分102发来的对应于子存储池ID的子存储池。但是,也可以考虑从存储器占用请求接收部分102发来的对应于存储池ID的存储池的子存储池。这通过使队列控制部分105具有表示在个子存储池中的最大可用存储区容量的最大容量表来实现。在这种情况下,在步骤S904中,队列控制部分105通过采用最大容量表将在TCB中存储的所请求的存储区容量与在各存储池中的最大可用存储区容量进行比较。在这种情况下,使用搜索顺序控制部分101是有利的。
下面参考图10说明存储池查询部分1204的操作。
存储池查询部分104从存储器占用请求接收部分102或队列控制部分105收到子存储池ID和所请求的存储区容量,如上所述。然后,在步骤S1001中,存储池查询部分1204尝试从对应于子存储池ID的子存储池中得到所请求存储容量的存储区。该尝试通过采用已知的方法进行。
下面在步骤S1002中,存储池查询部分1204判断是否得到了存储区。
当在步骤S1002中得到了存储区时,在步骤S1003中,存储池查询部分1204将所得到的存储区的存储器地址发送到存储器占用请求接收部分102或队列控制部分105。
另一方面,当在步骤S1002中没有得到存储区时,在步骤S1004中,存储池查询部分1204将失败状态的结果发送到存储器占用请求接收部分102或队列控制部分105。
然后,参考图11说明存储器释放部分106的操作。
如图11所示,在步骤S1101中,存储器释放部分106根据存储器释放请求接收部分103发来的相应的释放存储器地址释放调取的存储区。
接下来,在步骤S1102中,存储器释放部分106发送子存储池的子存储池ID,其中包括所调取的存储区的释放存储器地址和由释放所调取的存储区形成的最大可用存储区。
如上所述,本实施例的存储池管理系统以子存储池为单位按关于所请求的存储区容量的预定的搜索顺序在存储池中搜索等于或大于所请求的存储区容量的可分配的存储区。因此,存储池管理系统可以有效地利用存储器100。即,存储池管理系统可以抑制可用存储区的碎片和分区缺点的出现。
因为子存储池的考虑了所调取的存储区容量的搜索顺序依赖于所请求的存储区容量,并且局部化了在各存储池的子存储池,所以难以产生碎片。
因为不仅在特定的一个子存储池中进行可分配存储区的搜索,而且在输入搜索顺序表的其它子存储池中进行,所以不会出现分区缺点。
参考图12到17,说明根据本发明第二实施例的存储池管理系统。
存储池管理系统通过采用符合TRON ASSOCIATION的μITRON3.0的操作系统的标准规范的操作系统的存储器管理功能来实现。
图12是存储池管理系统的方框图。存储池管理系统与图1的不同点在于具有符合OS μITRON 3.0的标准规范的存储池查询部分1204、存储池等候和占用部分1205以及存储器释放部分1206。在OSμITRON 3.0的标准规范中,存储池查询部分1204、存储池等候和占用部分1205以及存储器释放部分1206分别定义为“pget_blk”、“get_blk”和“rel_blk”的系统调用。
此外,存储池管理系统包括搜索顺序控制部分1201、存储器占用请求接收部分1202和存储器释放请求接收部分1203。搜索顺序控制部分1201、存储器占用请求接收部分1202和存储器释放请求接收部分1203与图1中的类似。
OS μITRON 3.0的标准规范在存储器中定义了多个存储池。在本实施例中,存储池管理系统管理作为图2的子存储池的存储池,以形成对应于图2的存储池的存储池组,如图13所示。
存储池管理系统采用搜索顺序表响应存储器占用请求搜索可分配存储区。搜索顺序表分别对应于存储池组。
在图14中示出了搜索顺序表的例子。搜索顺序表为存储池组A的。与图3的搜索顺序表的不同点在于具有用于进入等候存储池ID的列。在存储池查询部分1204在相应的存储池组中没有找到可分配的存储区的情况下,对应于各等候存储池ID的存储池通过存储池等候和占用部分1205进行搜索。为了区分正常搜索顺序的存储池ID和等候存储池ID,在下文中存储池ID将被称作正常池ID。虽然等候存储池ID通常对应于各条目中搜索顺序的第一个正常池ID,但这不是必需的。
参考图15到17以及图12到14说明存储池管理系统的操作。
当任务程序调用存储器占用请求接收部分1202时,将包括存储池组ID和所请求的存储区容量的存储器占用请求发送到存储器占用请求接收部分1202。收到的存储器占用请求后,存储器占用请求接收部分1202如图15所示。
首先,在步骤S1501中,存储器占用请求接收部分1202初始化搜索计数器“Count”的计数值。
然后,在步骤S1502中,存储器占用请求接收部分1202向搜索顺序控制部分1201发送存储池组ID、所请求的存储区容量和计数值。
接收到的存储池ID、所请求的存储区容量和计数值之后,在步骤S1202中,搜索顺序控制部分1201向存储器占用请求接收部分1202发送应答。应答(replay)表示要搜索的子存储池的子存储池ID或没有要搜索的子存储池。
在步骤S1503中,当存储器占用请求接收部分1202接收到搜索顺序控制部分1201的应答时,判断应答是否代表子存储池ID或没搜索到。当应答代表子存储池ID时,步骤S1503转到步骤S1504。另一方面,当应答代表没有要搜索的子存储池时,步骤S1503跳到步骤S1508。
在步骤S1504中,存储器占用请求接收部分1202将存储池ID和所请求的存储区容量发送到存储池查询部分1204。存储池查询部分1204从分配的子存储器ID的子存储池中尝试得到或调取具有所请求存储容量的存储区。存储池查询部分1204将存储器占用尝试的结果通知存储器占用请求接收部分1202。当存储池查询部分1204尝试成功时,结果表示占用或调取的存储区的存储器地址。当存储池查询部分1204尝试失败时,结果表示失败状态。
在步骤S1505中,存储器占用请求接收部分1202判断来自存储池查询部分1204的结果是否为失败状态。当结果表示失败状态时,存储器占用请求接收部分1202判断存储池查询部分尝试失败,步骤S1505转到步骤S1506。当结果表示存储器地址时,存储器占用请求接收部分1202判断存储池查询部分得到了存储器地址,步骤S1505跳到步骤S1507。
在步骤S1506中,存储器占用请求接收部分1202使搜索计数器“Count”累加。即,存储器占用请求接收部分1202使当前计数值加“1”,产生新的计数值。然后,步骤S1506返回到步骤S1502。
另一方面,当存储器占用请求接收部分1202在步骤S1505中收到存储器地址时,在步骤S1507中,存储器占用请求接收部分1202将存储器地址发送给任务程序。
在步骤S1503中,当存储器占用请求接收部分1202接收到表示没有要搜索的存储池的应答时,在步骤S1508中,将计数值“0”与存储池组ID和所请求的存储区容量一起发送到搜索顺序控制部分1201。
接收到的计数值“0”、存储池组ID和所请求的存储区容量之后,搜索顺序控制部分1201将对应于存储池组ID和所请求的存储区容量的等候存储池ID发送到存储器占用请求接收部分1202。
然后,在步骤S1508中,存储器占用请求接收部分1202将从搜索顺序控制部分1201发来的等候存储池ID和所请求的存储区容量一起发送到存储池等候和占用部分1205。
存储池等候和占用部分1205通过OS μITRON 3.0实现了等待可分配存储区出现的功能。存储池等候和占用部分1205代替了图1的队列控制部分105的一部分。当可分配存储区出现在等候存储池分配的等候存储池中时,存储池等候和占用部分1205得到具有所请求的存储区容量的存储区。
下面参考图16说明由任务程序调用的存储器释放请求接收部分1203的操作。
当存储器释放请求接收部分1203从任务程序接收到包括释放存储器地址的释放请求时,存储器释放请求接收部分1203将释放存储器地址发送到存储器释放部分1206。
接收到的释放存储器地址后,存储器释放部分1206释放所调取的对应于释放存储器地址的存储区。具有由OS μITRON 3.0实现的功能的存储器释放部分1206通知存储池等候和占用部分1205释放所调取的存储区。即,存储器释放部分1206代替了图1的队列控制部分105的另一部分。释放所调取的存储区的通知只在当存储池等候和占用部分1205等待在包括释放的存储区的存储池中的可分配存储区的出现时进行。
下面参考图17说明由存储器占用请求接收部分1202调用的搜索顺序控制部分1201的操作。
当搜索顺序控制部分1201接收到来自存储器占用请求接收部分1202的存储池组ID、所请求的存储区容量和计数值时,其操作如图17所示。
在步骤S1701中,搜索顺序控制部分1201根据从存储器占用请求接收部分1202发来的存储池组ID选择搜索顺序表中的一个。
然后,在步骤S1702中,搜索顺序控制部分1201根据来自存储器占用请求接收部分1202的所请求的存储区容量从选定的搜索顺序表中找到一个条目。
随后,搜索顺序控制部分1201判断从存储器占用请求接收部分1202发来的计数值是等于“0”。当计数值等于“0”时,在步骤S1706中,搜索顺序控制部分1201将所发现的条目的等候存储池ID发送到存储器占用请求接收部分1202。
当计数值不等于“0”时,在步骤S1704中,搜索顺序控制部分1201进一步判断计数值是否大于所发现条目中正常存储池ID的数量。
当计数值等于或小于所发现条目中正常存储池ID的数量时,在步骤S1705中,搜索顺序控制部分1201将对应于计数值的相应的存储池ID发送到存储器占用请求接收部分1202。
另一方面,当计数值大于所发现条目中正常存储池ID的数量时,在步骤S1707中,搜索顺序控制部分1201通知存储器占用请求接收部分1202没有要搜索的存储池。
根据本实施例,存储器管理系统没有可变长度存储池管理系统或固定长度存储池管理系统所存在的问题。因此,存储池管理系统可以有效地利用存储器100。即,存储池管理系统可以抑制可用存储区的碎片和分区缺点的出现。
因为存储池的搜索顺序依赖于所请求的存储区容量,并且局部化了在各存储池组中的存储池,考虑了所调取的存储区的容量,所以难以产生碎片。
因为不仅在特定的一个存储池中进行可分配存储区的搜索,而且在进入搜索顺序表的其它存储池中进行,所以不会出现分区缺点。
虽然本发明仅结合优选实施例进行了说明,但是对于本领域的技术人员可以用各种其他方式实现本发明。例如,搜索顺序控制部分(101或1201)、存储器占用请求接收部分(102或1202)以及存储器释放请求接收部分(103或1203)可以与不同于μITRON 3.0的操作系统的存储器管理功能相结合。
此外,存储池管理系统可以包括计算机程序产品或软件。计算机程序产品用在计算机中,并包括计算机可读的指令以及存储计算机可读指令的记录媒体。指令用于让计算机能够如上所述地操作。
权利要求
1.一种存储池管理方法,用于从具有多个子存储池的存储池中得到存储区,包括以下步骤接收来自任务程序的指定请求存储区容量的存储区占用请求;以子存储池为单位按关于请求存储区容量的预定的搜索顺序,从存储池中搜索等于或大于所请求存储区容量的可分配存储区;以及当在任何一个所述子存储池中发现所述可分配存储区时,从可分配存储区得到所请求存储区容量的所述存储区。
2.根据权利要求1的存储池管理方法,其中预定的搜索顺序从关于预先确定的用于对所请求的存储区容量进行分类的不同容量范围的多个搜索顺序中选择。
3.根据权利要求1的存储池管理方法,其中所述方法还包括以下步骤在搜索步骤中,在所述存储池中未发现所述可分配存储区的情况下,等待在所述存储池中所述可分配存储区的出现。
4.根据权利要求1的存储池管理方法,其中所述子存储池相应于由μITRON 3.0操作系统所定义的存储池。
5.一种用在计算机中的计算机程序产品,从具有多个子存储池的存储池中得到存储区,所述计算机程序产品包括计算机可读的指令和存储计算机可读指令的记录媒体;该指令是可改变的,以使所述计算机能够根据以下步骤操作接收来自任务程序的指定请求存储区容量的存储区占用请求;以子存储池为单位按关于请求存储区容量的预定的搜索顺序,从所述存储池中搜索等于或大于所请求存储区容量的可分配存储区;以及当在任何一个所述子存储池中发现所述可分配存储区时,从可分配存储区得到所请求存储区容量的所述存储区。
6.根据权利要求5的计算机程序产品,其中预定的搜索顺序从关于预先确定的用于对所请求的存储区容量进行分类的不同容量范围的多个搜索顺序中选择。
7.根据权利要求5的计算机程序产品,其中指令还包括以下步骤在搜索步骤中,在所述存储池中未发现所述可分配存储区的情况下,等待在所述存储池中所述可分配存储区的出现。
8.根据权利要求5的计算机程序产品,其中所述子存储池相应于由μITRON 3.0操作系统所定义的存储池。
9.一种存储池管理系统,用于从具有多个子存储池的存储池中得到存储区,所述存储池管理系统包括用来接收来自任务程序的指定请求存储区容量的存储区占用请求的占用请求接收部分;连接到所述接收部分的搜索顺序控制部分,用来根据关于请求存储区容量的预定的搜索顺序通知子存储池ID,响应所述占用请求接收部分的请求;以及连接到所述占用请求接收部分的占用部分,用来尝试根据从所述搜索顺序控制部分通过所述占用请求接收部分发来的相应的子存储池ID从子存储池中占用所请求存储区容量的所述存储区。
10.根据权利要求9的存储池管理系统,其中预定的搜索顺序从关于预先确定的用于对所请求的存储区容量进行分类的不同容量范围的多个搜索顺序中选择。
11.根据权利要求9的存储池管理系统,其中所述存储池管理系统还包括一个等待部分,用于在所述搜索顺序控制部分通知所述占用请求接收部分搜索结束的情况下,等待在所述存储池中等于或大于所述请求的存储区容量的可分配存储区的出现。
12.根据权利要求9的存储池管理系统,其中所述子存储池相应于由μITRON 3.0操作系统所定义的存储池。
全文摘要
搜索顺序控制部分具有用于具有子存储池的存储池的搜索顺序表。搜索顺序表具有条目,其中输入了所请求的存储区容量范围和相应的搜索顺序。搜索顺序控制部分响应占用请求接收部分的请求,通过使用搜索顺序表找到要搜索的子存储池,用作可分配存储区。搜索顺序控制部分通知占用请求接收部分所找到的子存储池的子存储池ID。占用请求接收部分使占用部分尝试从子存储池ID的子存储池得到具有所请求的存储区容量的存储区。占用请求接收部分重复上述操作,直到占用部分得到存储区或搜索顺序控制部分通知搜索结束。
文档编号G06F12/02GK1432922SQ0215984
公开日2003年7月30日 申请日期2002年12月27日 优先权日2001年12月27日
发明者角广崇 申请人:日本电气株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1