用于管理数据存储器的物理内存的方法以及数据存储器管理系统的制作方法

文档序号:6365413阅读:148来源:国知局
专利名称:用于管理数据存储器的物理内存的方法以及数据存储器管理系统的制作方法
技术领域
本发明涉及一种用于管理数据存储器的物理内存的方法,并且涉及ー种数据存储器管理系统。特别地,本发明涉及一种用于管理数据存储器的物理内存的方法,并且涉及一种数据存储器管理系统,其中与常规方法或系统相比,物理内存的可靠性和/或可用性和/或确定性(determinism)和/或分配和/或访问的速度有所改进。
背景技术
特别地,对于针对要求结果正确并且在预定时间内获得结果的实时要求而言,内存管理可能受到特别关注。特别地,实时应用可以包括測量诸如风速、温度、振动、电功率量、电压、电流等的 物理量。特别地,实时应用可以运行以控制和/或监视诸如发电系统之类的发电设备,特别是风カ涡轮机系统。特别地,可能需要根据测量物理量的一个或多个测量数据来控制风カ涡轮机,所述物理量诸如风速、温度、所产生的电能量、连接到风カ涡轮机的并网系统的频率等。这里,可能要求在预定时间内实现或许可对所要求的内存部分的访问和/或分配,以确保在实时系统或应用的预定时间内获得結果。特别地,所述应用可以访问或分配一部分堆阵(heap),所述堆阵可以是为动态内存分配和内存解除分配保留的内存区域。根据ー种堆阵管理系统,其是操作系统中由QNX Software Systems公司所提供的一部分(http://www. qnx. com/download/feature. html programid=19524),所述堆阵的物理内存被分为4k字节大小的内存部分。所述物理内存被映射到虚拟内存,其中每个操作、处理或应用可以分配或访问所述虚拟内存。所述虚拟内存可以模仿内存的连续段,然而,所述内存可以被映射到物理内存中的大量(分离的)4k字节内存部分,它们可以遍布物理内存地分布,使得它们可以与没有分配的内存部分一起散置。对于针对内存的毎次访问,都需要执行从虚拟内存到物理内存的映射,这使得操作减慢。可能需要一种用于管理特别是堆阵的数据存储器的物理内存的方法以及ー种数据存储器管理系统,其中可以改进对内存部分的分配和/或解除分配和/或访问,特别是与常规的已知方法或系统相比更为高效。特别地,需要一种用于管理特别是堆阵的数据存储器的物理内存的方法以及ー种数据存储器管理系统,该数据存储器管理系统特别是包括堆阵,其中可以在可预测的时间跨度内执行内存部分的分配和/或访问。

发明内容
这种需要可以通过根据独立权利要求的主题得以满足。本发明的有利实施例通过从属权利要求进行描述。根据ー个实施例,ー种方法(该方法例如可以以软件来实现,诸如使用高级计算机语目,诸如C++、JAVA、C,或者该方法可以通过低级计算机语目来实现,诸如汇编程序,或者其中该方法以硬件来实现,例如通过提供专用集成电路(ASIC))用于管理(特别是用于分配、访问、解除分配和/或指定)特别是堆阵(特别地,表示为动态内存分配和/或解除分配保留的电子内存区域)的数据存储器(例如,RAM的一部分,特别是堆阵或硬盘或闪存,或者适于以电子形式存储数据的任何其它设备)的物理内存(特别地,包括可以由相关联的明确地址进行寻址或指代的多个内存単元),其中所述方法包括请求(特别地,由诸如计算机处理、计算机应用、计算机上运行的线程等的请求方进行请求)内存部分(特别地,例如用于在应用或处理内实例化了变量、数据对象或任何其它数据结构时,由所述应用或处理使用该内存部分将数据写入该内存部分),所述内存部分具有内存部分大小(其可以由请求方请求用来存储计算机或处理器上所运行的应用或处理中正使用的变量、数据结构或数据对象的特定字节数来表示)。所述用于管理数据存储器的物理内存的方法进ー步包括标识(特别地,包括确定、计算和/或导出)池(特别是数据池,特别是提供用于存储电子数据的数据容器,特别是被提供用于存储数据存储器的地址,其中每个地址指向所述数据存储器的特定内存元素或内存単元),其中所述池被提供用于存储访问信息(特别是所述数据存储器的物理内存的地址, 其中所述访问信息指示到所述数据存储器的索引部分的地址,其中所述索引部分的长度例如可以为I字节或更多字节,例如4字节或8字节)的很多实例,其中所述访问信息指示所述数据存储器的内存块(处于所述数据存储器的物理内存中)的地址(所述内存块的地址特别是所述内存块的开始地址,其中所述内存块开始于该开始地址,其中所述内存块可以跨越从开始地址开始并且延伸到结束地址的多个地址,其中所述内存块的长度(结束地址和开始地址之间的差)可以对应于内存块大小,诸如特定字节数的内存块大小),其中所述内存块具有等于或大于内存部分大小的内存块大小(使得请求具有所述内存部分大小的内存的请求方能够使用所述内存块来保存或存储所述应用需要存储的数据)。特别地,所述内存块可以被分配给请求方并且可以被数据存储器管理系统所保留,所述数据存储器管理系统执行所述用于管理数据存储器的物理内存的方法以使得没有其它应用或没有其它处理可以访问被保留的内存块。因此,确保了数据的完整性。特别地,所述访问信息可以是或可以包括所述数据存储器的延伸内存块的地址(在所述数据存储器的物理内存中),或者所述数据存储器的内存块的地址。不管怎样,所述数据存储器的内存块的地址都可以从访问信息导出。此外,所述用于管理数据存储器的物理内存的方法包括确定访问信息是否存储在池中。此外所述方法包括,如果访问信息存储在池中(这可以指示该特定内存块事先已经由相同或由其它处理或应用分配了,但是该特定内存块已经由于该内存块不再由该处理或由该应用使用而被再次释放),则返回所述内存块的地址数据(特别是将所述地址数据返回给请求内存部分的请求方,特别是将所述地址数据返回给请求内存部分的处理或应用),其中所述地址数据基于所述访问信息(使得能够使用所述访问信息导出或获得所述地址数据,例如所述地址数据可以表示数据存储器的物理内存的地址,该地址与访问信息(特别地也是数据存储器的物理内存的地址)间隔诸如I字节、2字节或更多字节的预定的固定数值),并且从所述池中去除所述访问信息(特别地,可以从池中删除访问信息),由此指示该内存块不再可用于任何其它应用或任何其它处理或任何其它请求方。此外所述方法包括,如果所述访问信息没有存储在池中(这指示内存块之前还没有被任何应用或任何处理或任何请求方所分配或访问),则创建访问信息(这可以包括在所述数据存储器的物理内存内搜索仍然可用的部分,即还没有被任何请求方所访问的部分),并且返回内存块的地址数据(特别是返回给请求方,诸如请求内存部分的应用或处理),其中所述地址数据基于所述访问信息。特别地,不管怎样,一旦请求了内存部分,可用内存块的地址数据就被返回给请求方,特别是返回给在计算机上运行的应用或处理,其中可用内存块可以由地址数据进行标识,其中特别地,所述地址数据可以为内存块在所述数据存储器的物理内存内开始的地址。在其它实施例中,所述地址数据例如可以是内存块内的、但是与该内存块的开始间隔或者与该内存块的结束间隔预定地址量的任何地址。特别地,所述地址数据可以表示所述内存块的开始地址,因此简化了请求方访问所述内存块的过程。特别地,已经被分配(特别是通过将内存块的地址返回给请求方)的任何内存块将由所述用于管理物理内存的方法来控制,使得该内存块将以非碎片的方式仅被 指定给任何随后的请求方,使得以后由任何随后的请求方来分配整个内存块。在内存块被第一次分配之后,所述用于管理数据存储器的物理内存的方法可以确保所述内存块将不以内存块的碎片部分进行分配。特别地,执行所述用于管理数据存储器的物理内存的方法可以避免数据存储器的物理内存的碎片。此外,请求内存部分和返回地址数据之间的时间跨度是可以预测的,并且特别地可以小于或等于预定的分配时间跨度。由此,特别地,可以通过执行所述用于管理数据存储器的物理内存的方法来支持实时应用或处理。根据ー个实施例,所述内存块包括数据存储器的连续物理内存段(从而所述内存块可以由很多相邻的内存段或内存元素形成),其中所述物理内存段具有内存块大小,其中特别地,所述内存块由物理上连续的内存单元形成(特别是通过由连续地址来寻址的内存単元形成)。由此,访问部分内存块或整个内存块可以被加速和/或简化。由此,特别地,不仅能够減少内存分配时间跨度,而且还能够减少内存访问时间跨度。根据ー个实施例,创建访问信息是基于数据存储器的可用部分(这是之前还没有分配的部分,因此其可以表示自由的内存部分)的开始地址(物理开始地址),并且其中创建访问信息进ー步包括基于内存块大小改变可用部分的开始地址。特别地,数据存储器的可用部分的开始地址可以被认为是指向数据存储器的特定地址的指针,其中对于大于(或小干)所述开始地址的地址而言,内存可以是自由的,即可被用于请求方。无论内存块的地址数据何时被返回给请求方,指向从其开始存在可用内存的开始地址的指针都将移动,这是因为数据存储器的可用部分已经由于内存块被分配给请求方而有所減少。特别地,数据存储器的可用部分的开始地址可以存储在可以被访问的数据结构中。特别地,无论何时收到针对内存部分的进ー步请求并且其中在对应池中没有可以返回给请求方的访问信息,所述开始地址都可以被读出。可以保留自由区域的开始地址,使得可以不必捜索足够大的内存块。如果在开始地址处没有足够的自由内存,则可能没有足够的自由内存来满足请求。如果有足够的内存来满足请求,则开始地址可以根据满足所述请求所必需的大小而变化,使得自动区域被缩短。用于得到和/或释放内存的较早请求的数量和/或组合因此可能不会影响确定堆阵中是否以及在哪里存在足够内存以满足请求所花费的时间。特别地,这可以快速且以恒定时间进行确定。由此,这可以加速向请求方返回内存块的地址数据。
根据ー个实施例,创建访问信息进ー步包括将与池相关的池索引(其使得能够标识所述池)在所述数据存储器的索引部分(特别是跨越一个或多个地址地)写入(特别是对一个或多个内存単元进行电子修改)所述数据存储器的物理内存,其中所述索引部分的地址基于所述访问信息(其中,特别地,所述索引部分的开始地址可以是访问信息),其中特别地,改变所述数据存储器的可用部分的开始地址进一歩基于所述索引部分的大小。特别地,内存块大小可以在整体上可被请求方所用,而所述索引部分可以表示执行所述用于管理数据存储器的物理内存的方法的管理开销。特别地,所述索引部分与内存块大小相比可以是很小的部分,特别地,所述索引部分可能需要I字节,而所述内存块大小可以是大于零的任何大小。特别地,根据ー个实施例,索引部分和内存块大小之和可以对应于很多字节,其中这些字节的数目是2的冪。特别地,如将在以下进ー步详细解释的,ー个或多个另外的池可以适用于存储与不同内存块大小相关的地址(访问信息)。
根据ー个实施例,所述用于管理数据存储器的物理内存的方法进ー步包括特别是由已经请求了内存部分的请求方释放(特别是由请求方或者应用或处理来释放)内存部分(由此,特别是包括接收与被释放内存部分的地址相关的信息);并且在池中存储访问信息。由此,所述访问信息可以从内存部分导出,特别是从所述内存部分的地址导出。特别地,释放内存部分可以表示请求方不再请求该内存部分,例如由于已经在运行的应用或运行的处理内删除了访问该内存部分的变量或数据对象,所述删除特别是销毁。根据ー个实施例,所述用于管理数据存储器的物理内存的方法进ー步包括基于内存块的地址确定访问信息(特别地,如果所述内存块的地址表示该内存块的开始地址,则所述访问信息可以是该内存块的开始地址之前或之后的地址,特别是直接处于内存地址之前的地址),其中在池中存储访问信息是基于所确定的访问信息。特别地,可以从内存块的地址减去特定量以获得所述访问信息(特别是地址)。由此,该方法可以被简化。根据ー个实施例,所述方法进ー步包括,一旦释放了内存部分,则在所述数据存储器的索引部分处将与池相关的池索引維持(特别是保持而因此并不删除)在所述数据存储器的物理内存中(使得特别地尽管请求方已经释放了该内存部分,但是所述池索引被保持在数据存储器的物理内存中)。与用于堆阵管理的常规方法相比这可能是意义深远的,其中一旦释放了内存部分,(存储在除了被保留指定给请求方的内存之外的数据容器中的)指示该内存部分或对应内存块已经在之前被分配过的任何信息都从数据存储器的物理内存被擦除,使得在常规系统中不存在内存部分之前是否已经被指定给请求方并且为该请求方所使用的信息。根据ー个实施例,随后被一个或多个请求方所请求的不同大小的内存部分的模式可能导致存储在被间隔开来的多个地址处的多个池索引的模式,这些地址对应于可以根据随后所请求的内存部分的大小而具有不同内存块大小的多个内存块。写在多个访问信息实例处的该多个池索引的模式可以在执行所述方法期间得以維持,即使ー个或多个内存部分被一个或多个请求方所释放。根据所述用于管理数据存储器的物理内存的方法的实施例,在所述数据存储器中,索引部分在物理上与所述内存块相邻(特别是直接相邻),特别是在所述内存块之前或之后的字节中。由此,可以以简单的方式基于内存块的地址找到索引部分。此外,也可以以简单的方式基于索引部分的地址ー特别是基于所述访问信息一找到内存块,特别是内存块的地址,更特别是内存块的开始地址。由此,所述方法的性能、特别是速度可以提高。根据所述用于管理数据存储器的物理内存的方法的实施例,标识池包括基于访问信息确定池索引。特别地,当访问信息表示数据存储器中的地址时,可以通过访问并读取存储在所述访问信息的数据(并且跨越对应于索引部分的数量的地址)来确定所述池索引。根据所述用于管理数据存储器的物理内存的方法的实施例,在池中存储另ー个访问信息(特别地,也是数据存储器的物理内存内的地址),其中所述另ー个访问信息指示所述数据存储器的另ー个物理内存块的另ー个地址,其中所述另ー个内存块具有与所述内存块相同的内存块大小。根据所述用于管理数据存储器的物理内存的方法的实施例,所述池适用于存储包括所述访问信息和所述另ー个访问信息在内的多个访问信息实例(诸如在特定地址处),其中对所述池进行适配以使得能够在与池中所存储的多个访问信息实例的数目无关的时间跨度内访问所述访问信息和所述另ー个访问信息。由此,特别地,所述池可以在类似矩阵的数据结构中、在队列中、在另ー适当数据容器中,或者在使得能够存储很多元素并且以与元素数量无关的恒定时间访问所述元素的任何其它数据结构中存储所述多个访问信息实例。由此,所述管理方法的性能、特别是速度可以提高。根据所述用于管理数据存储器的物理内存的方法的实施例,所述方法进ー步包括支持对具有另外的内存部分大小的另外的内存部分的请求进行处理;标识另外的池,其中所述另外的池被提供用于存储指示所述数据存储器的另外的内存块的另外的地址的至少一条另外的访问信息,所述另外的内存块具有等于或大于另外的内存部分大小并且不同于所述内存块大小的另外的内存块大小;确定所述另外的访问信息是否存储在所述另外的池中;如果所述另外的访问信息存储在所述另外的池中,则返回所述另外的内存块的另外的地址数据,其中所述另外的地址数据基于所述另外的访问信息,并且从所述另外的池中去除所述另外的访问信息;如果所述另外的访问信息没有存储在所述另外的池中,则创建所述另外的访问信息,并且返回所述另外的内存块的另外的地址数据,其中所述另外的地址数据基于所述另外的访问信息。根据所述管理方法的实施例,提供所述池和另外的池,另一条另外的访问信息可以存储在所述另外的池中,其中所述另一条另外的访问信息指示所述数据存储器的另ー个另外的内存块的另ー个另外的地址,其中所述另ー个另外的内存块具有所述另外的内存块大小。因此,特别地,在特定的池访问信息中,特别地可以存储若干访问信息实例,其中每个访问信息实例涉及具有相同内存块大小的内存块。根据所述管理方法的实施例,所述方法进ー步包括特别是在所述数据存储器或者例如在与所述数据存储器分离的另外的数据存储器中定义数据容器以用于存储多个池,特别是预定数量的池,其中所述池和另外的池存储在所述数据容器中,其中所述数据容器被适配以使得可以在与所述容器中所存储的多个池的数量无关地恒定的时间跨度内访问所述池和另外的池(和/或所述池和另外的池中所包括的元素)。特别地,所述数据容器可以是类似阵列的数据结构或者允许以与数据容器内所存储元素的数量无关的恒定时间访问其任何元素的任何其它数据容器。
所述池可以为任何类型,能够以恒定时间去除至少ー个其元素,并且能够以恒定时间添加元素。
应当理解的是,关于用于管理数据存储器的物理内存的方法的一个或多个实施例的解释或描述所(独立或以任何组合)公开的任何特征也可以(独立或以任何组合)被应用、使用、采用或适配以用于根据本发明实施例的数据存储器管理系统,反之亦然。根据本发明的实施例,提供了一种数据存储器管理系统,其中所述系统包括用于存储数据的数据存储器;以及用于控制对所述数据存储器的访问的控制器,其中所述控制器被适配以使得所述控制器执行以下方法步骤接收请求,所述请求请求具有内存部分大小的内存部分;标识池,其中所述池被提供用于存储至少一条指示所述数据存储器的内存块的地址的访问信息,所述内存块具有等于或大于内存部分大小的最小可能的固定的内存块大小;确定访问信息是否存储在所述池中;如果访问信息存储在所述池中,则返回所述内存块的地址数据,其中所述地址数据基于所述访问信息,并且从所述池中去除所述访问信息;如果访问信息没有存储在所述池中,则创建访问信息,并且返回所述内存块的地址数据,其中所述地址数据基于所述访问信息。特别地,所述数据存储器至少可以是RAM的一部分,特别是堆阵、硬盘、硬盘驱动器、闪存、磁性-光学数据存储器,或者用于存储数据的任何其它数据存储器,所述数据特 别是电数据和/或电子数据。特别地,所述控制器可以被配置为专用集成电路,用于操作处理器、特别是操作计算机的操作系统(的一部分)。另外,特别地,所述控制器可以是与所述数据存储器接ロ并且提供访问层以便访问所述数据存储器的附加组件或外部设备。另外,特别地,所述控制器包括通用处理器和可以由所述处理器执行的软件元素。根据本发明的实施例,提供了ー种包括数据存储器管理系统的动カ产生系统,特别是风カ涡轮机系统,其中控制器特别是控制对数据存储器的访问,其中对数据存储器的访问由应用进行请求,所述应用用于控制和/或监视所述风カ涡轮机系统,特别是用于测量物理量,所述物理量诸如风速、温度、振动,和/或所述应用用于控制所述动カ产生系统的至少ー个组件,诸如动叶片,特别是控制动叶片螺旋角、风カ涡轮机系统的转换器所产生或释放的能量的量,等等。根据本发明的实施例,在实时应用中执行ー种用于管理数据存储器的物理内存的方法,其中特别地,所述实时应用要求结果正确并且结果在预定时间跨度内获得。根据本发明的实施例,提供了一种程序元素和/或特别是容纳所述程序元素的可电子读取的存储介质,其中当被诸如计算机的处理器执行时,所述程序元素适于执行或控制如上所述的用于管理数据存储器的物理内存的方法的实施例。根据本发明的实施例,通过系统自身的需要来构建所需大小的池。这可能是以更高的内存利用以及引入类似但是较小的问题为代价的。在系统需要比其自启动以来所使用的更多给定大小的内存块并且未使用的堆阵已经变得过小而无法分配适当大小的块的情况下,池中未使用的内存块以及不在池中的堆阵一起的总和对于请求可能是足够的,但是不可能作为连续的内存块返回。这仅可能在堆阵的总量不足以创建系统在其执行期间所需要的不同内存块的数目时发生。如果发生这种情况,则可能使得可用性退化。对于在不同时间具有类似内存利用并且可用性由于针对堆阵的请求被拒绝而退化的系统而言,更多的内存会提高可用性。如果缓冲器只是需要所提供的堆阵,则系统将能够继续使用其所有的内存块大小并且每个大小的数目等于系统在之前任何时间所使用的那些大小的最高数目。系统的长期运行并不改变该事实。
本发明实施例的一个优势在干,(系统所需要的)大内存块的数目不会随时间流逝而减少,其仅会增加。所分配的任何给定大小的块的数目在任何时间都等于系统自其启动以来所使用的(该大小的)块的最高数目。与普通的堆阵管理策略相比,该解决方案能够仅在所分配的任何给定大小的块的数目方面有所增长。不同大小的大内存块的数目不会随时间减小的事实使得对所需数量的堆阵的测试更加容易且更加可靠。如果系统在不同时间具有类似的内存利用,则安装更多的内存将減少堆阵不足所导致的停エ时间。根据实施例,内存从堆阵的一端进行分配并且内存仅连续分配(类似于并不释放内存的下个匹配(fit)),并且任何内存都绝不会被返回到还没有被转变成内存块的自由堆阵。相反,返回到堆阵管理器的内存块被存储在池中。这确保避免了堆阵的外部碎片(未被转变成内存块)。内存可以一直以ー个或多个可能的固定大小进行分配。可以对每种可能的固定块大小创建池。
每个池可以仅被用于ー个具体块大小的地址,并且不存在具有针对相同大小的块的地址的两个池。当内存块地址被返回给堆阵管理器时,则该内存块地址可以被存储在针对该内存块大小的池中。本发明的实施例可以提供一种作为被用于管理堆阵的软件(和/或硬件)的堆阵管理器。所要注意的是,已经參照不同主题对本发明的实施例进行了描述。特别地,ー些实施例已经參照方法类型的权利要求进行了描述,而其它实施例已经參照装置类型的权利要求进行了描述。然而,本领域技术人员从以上和以下的描述将会得出,除非另外指出,否则除了属于ー种主题类型的特征的任何组合之外,涉及不同主题的特征之间的任何组合,特别是方法类型的权利要求的特征和装置类型的权利要求的特征之间的任何组合也被认为被本文所公开。以上所定义的方面以及本发明另外的方面根据随后所要描述的实施例的示例将是显而易见的并且參照所述实施例的示例进行解释。随后将參照实施例的示例对本发明进行更为详细的描述,但是本发明并不局限于此。


现在将參照附图对本发明的实施例进行描述。
图I示意性地图示了根据本发明实施例的数据存储器管理系统,其中所述数据存储器管理系统适于执行根据本发明实施例的用于管理数据存储器的物理内存的方法。
具体实施例方式图中的图示为示意形式。注意,在不同附图中,相似或相同的元素被提供以相同的附图标记或者仅在第一数字方面与相应附图标记有所不同的附图标记。数据存储器管理系统100包括用于存储数据的数据存储器101,其中所述数据存储器特别地可以是堆阵(heap)。数据存储器101包括可以使用明确的内存单元地址进行访问的多个内存単元,其中这些内存单元以连续方式排列并且多个内存単元被描绘为直线103。
数据存储器101包括访问组件105,其可以通过使用数据存储器101中的地址引用每个内存单元来访问任何内存单元。这些地址是以增序排列的数字,用于由访问设备105访问特定内存单元。由此,访问设备105可以如双箭头107所指示的沿多个内存単元103移动。访问设备105可以是没有机械组件的纯电子设备。例如,特别地当所述数据存储器包括堆阵时,访问设备105可以是适于访问内存芯片的不同内存单元的控制电路。在其它实施例中,特别地在数据存储器包括硬盘或硬盘驱动器或者包括机械部件的任何其它存储器时,访问设备105可以包括机械组件和/或电子组件。数据存储器管理系统100进ー步包括用于控制对数据存储器101的各部分的访问和/或分配的控制器109。特别地,在所图示的示例中,处理或应用111可以从控制器109请求(具有特定内存部分大小的)内存部分。由此,应用111可以将针对该内存部分的请求113传送到控制器109。控制器109将适于維持多个池的数据容器,其中每个池被提供用于存储与具有特定内存块大小的内存块相关的访问信息。特别地,控制器109可以保持数据容器115,其中 阵列索引i0,il, i2, i3…对池进行标识,其中在每个池中具有很多访问信息实例,诸如可以存储 ail、ai2、ai3、ai4、ai5、ai6 和 ai7。特别地,索引iO所标识的池存储访问信息ai4的实例,其中该访问信息ai4涉及具有2字节的内存块大小的内存块m4。索引il标识存储或可以存储访问信息ai2、ai3、ai5和ai7的实例的池,其中这些访问信息实例分别涉及内存块m2、m3、m5和m7,它们全部具有相同的4字节的内存块大小。此外,索引i2标识其中可以存储访问信息ail、ai6的实例的池,其中这些访问信息实例分别涉及均具有8字节内存块大小的内存块ml和m6。另外,控制器109可以在数据容器115中包括具有索引i3,i4,…的另外的池,所述索引标识与数据存储器101内具有甚至更大内存块大小的内存块相关的另外的池。在数据存储器管理系统100启动之后,应用111可以首先请求具有例如6字节的内存部分大小的内存部分。一旦从应用111接收到请求113,控制器109就将标识被提供用于存储访问信息ail的池,所述访问信息ail指示数据存储器101的内存块ml的地址al,其中内存块ml具有7字节的内存块大小,这大于具有6字节大小的所请求的内存部分大小。一旦接收到针对具有6字节的内存部分大小的内存部分的请求113,控制器109就将从数据存储器101中内存单元103的一端分配数据存储器101中的内存单元103,这是因为在开始指针118 (以下详细描述)将定位在一端。可替换地,相反可以从末端向回进行分配。控制器109随后将从索引部分i2(被提供用于存储与具有7字节大小的内存块相关的访问信息的池的索引i2)处的地址ail开始向数据存储器101进行写入。可以通过将索引部分i2的长度添加到地址ail而从访问信息ail获得内存块ml的开始地址al。由此确定的内存块ml的开始地址al随后经由响应117返回给进行请求的应用111。另外,索引 2被写入索引部分。特别地,访问信息ail并不被添加到索引i2所标识的池。另外,特别是随后,应用111可以请求具有2字节内存部分大小的内存部分。一旦从应用111接收到该请求,控制器109就将标识出以索引il作为标记或索引的池,其中该池被提供用于存储与具有3字节的内存块大小的内存块相关的访问信息实例。另外,索引il被写在以访问信息ai2开始的索引部分中。另外,使用响应127将地址a2返回给应用101。此外,控制器109可以从应用111或者从计算机上运行的若干其它应用或处理接收针对内存部分的另外的请求。特别地,当控制器109接收到针对内存部分的新请求时,控制器109首先在由索引iO、il、i2、…之ー标识的适当池中查找与具有足够内存块大小的内存块相关的访问信息以满足针对内存的请求。如果数据容器115中的适当池没有这样的访问信息,则控制器109确定在可用内存的开始地址118 (指示数据存储器101的可用分段的开始)处开始的数据存储器是否足够大。特别地,无论控制器109何时向应用111返回地址或地址数据al,a2, a3, a4, a5,a6, a7,可用内存的开始地址118都被动态适配(在未使用端的方向上移动,在这种情况下是向图中右侧移动)。因此,确定可用或自由内存部分的位置可以在可预测的时间跨度内执行,特别是其能够以恒定时间进行。在执行应用111的同时,该应用可以不时释放之前已经被应用111所使用过的内 存部分。例如,所述应用可以释放存储在内存块m2中的内存部分。由此,应用101可以向控制器109传送地址数据a2。基于所述地址数据a2,控制器109可以确定访问信息ai2,并且控制器109可以查看地址ai2处的数据存储器以检索索引i2。因此,访问信息ai2将被存储在由索引i2标识的池中。此外,应用111可以释放在以地址a6开始的内存块m6中所存储的内存部分。因此,应用111可以将地址a6传送到控制器109。控制器109可以从地址a6中计算出访问信息ai6,例如通过从地址a6减去I字节,特别是通过从地址a6减去索引部分i2的宽度或大小。接着,控制器109将在地址ai6访问数据存储器101并且将读取存储在该地址的索引i2o因此,如图所示,访问信息或地址ai6将被存储在由索引i2标识的池中。随后,应用111或任何其它应用或处理可以向控制器109发送请求具有4至7字节大小的内存部分的请求113。控制器109将首先标识出被设计为用于存储与具有足够的最小大小的内存块相关的访问信息的池,并且将标识出以索引i2为索引的池。控制器109随后将查看以索引i2为索引的池是否包含访问信息。控制器109将找到访问信息ai6。从该访问信息或地址ai6,控制器109将确定或计算作为具有内存块大小7的内存块m6的开始地址的地址a6。因此,内存块m6大得足以满足请求具有4至7字节大小的内存部分的请求113。因此,控制器109将把地址a6返回给应用11,并且还将从由索引i2标识的池中去除访问信息ai6。根据请求内存部分和/或释放内存部分,数据容器115以及特别是以索引iO,il, 2, 3,…为索引的不同池将包含动态变化的访问信息实例,其中在图中仅描绘出了特定的情形。所述池可以被存储在类似阵列的结构115 (或利用恒定时间访问的其它结构)中。可能的内存块大小(以及它们的匹配池)可以通过算法进行排序,从而能以恒定时间计算出针对特定内存块大小的池的阵列索引il, 2, 3,。本发明可以不要求使用任何特定算法;其仅要求所述算法能够以恒定时间执行。实施方式甚至可以允许算法的配置。针对匹配池的阵列索引可以被存储在每个延伸内存块的(多个)第一字节中(相反可能是(多个)最后的字节)。延伸内存块可以是(在开头或结尾)利用索引部分延伸的内存块。对于能够在该内存块中存储数据的请求方而言,大小必须至少为索引-大小+1,但是也可以选择更大的最小内存块大小以降低管理开销。可以考虑其它问题(但并不局限于此):
-更高的最小大小可以降低管理开销,并且増加浪费(对于所使用的内存块平均而
言);
-更高的最小大小也会減少池的数量并因此由于该池中具有更多不同大小而使得具有最小大小的池更为灵活。最小大小也可以是可配置的。当内存块地址被返回给堆阵管理器109时,索引部分il,i2, i3, i4, i5, i6, 7的大小被减去以得到针对具有匹配池的阵列的入口的索引的地址(或访问信息)ail,ai2, ai3, ai4, ai5, ai6, ai7。索引的地址表示延伸内存块的地址。延伸内存块的地址,即访问信息ail,ai2, ai3, ai4, ai5, ai6, ai7随后被存储在匹配池中。所述池被存储 或維持在能够以恒定时间访问其元素的容器115中。所述池是能够以恒定时间増加元素并且以恒定时间去除其至少ー个元素的容器。由于阵列入口的索引il,i2, i3,…被存储在每个内存块的开始,所以不必进行搜索,并且能够以恒定时间选择正确的池。当接收到针对内存的请求113时,对于请求+索引大小而言足够大的最小块大小的池被检查是否为空。如果该池为空,则从可用堆阵120创建该大小的新的内存块。在(根据所选择索引的大小)的(多个)第一字节中写入阵列索引,并且所述索引之后的第一字节的地址al, a2, a3, a4, a5, a6, a7被返回给请求方。如果所述池不为空,则从对应池中去除存储地址ail, ai2, ai3, ai4, ai5, ai6,ai7的任何地址,并且所述索引之后的第一字节的地址al,a2, a3, a4, a5, a6, a7被返
回给请求方。本发明的示例使用其中第一池包含大小为2的延伸内存块并且每个后续池用于之前池两倍大小的延伸内存块的算法。但是也可以使用其它算法。重要的是,所述算法能够以恒定时间基于内存请求的大小来计算出针对适当池的索引。可以考虑其它问题(但是并不局限于此)
具有较少的不同大小的算法导致 -在使用中块的浪费有所増加。-未使用的块更可能被再次使用。-未使用的块平均较少。池的预期块大小能够基于其在阵列中的索引计算出来(其中第一索引为O) f (X) = 2' (x+1)
其中X是进入阵列的索引,并且f (χ)返回被使用的池的内存块大小。针对池中的最小内存块(具有索引0),以下示例针对索引部分使用一个字节(因此
用于存储索引i0,il, 2,…)并且针对存储使用一个字节(总共两个字节)。索引I用于
大小为4的延伸内存块,等等
Itfij-JfiII01234S6T8-.
じ I::ド.U. 1 A. 士·2 4 8 16 32 64 128 256 512. …
IllIllfe ; ; ,I S13 ふ‘ふ.
针对该示例,用于基于所请求的内存大小找出针对阵列的正确索引的算法可以是f (χ) = round_fIoor( log2 (x))
其中X是请求方所需要的字节数(内存部分大小),并且f(x)返回针对阵列的索引,所述阵列具有针对足够大的最小块大小的池。round_floor()截短小数点之后的任何数字。示例
X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 18 19 20 21 22 23 24I(K) 01 1222233333333444444444
针对I字节的请求应当在池中寻找位于阵列入口 O处的自由内存块的地址。[2. . 3]字
节在入口 I处进行请求。[4. . 7]字节在入口 2处进行请求,等等。具有大数目χ的f (χ)的示例
χ 1000 1Ε+06 1Ε+09 1Ε+12 1Ε+15 1Ε+18 1Ε+21 1Ε+24 1Ε+27 …f(x) 9 19 29 39 49 59 69 79 89 .
入口 255将包含到应当足够不久的将来所用的1,15792E+77字节的内存块的地址。当其不够时或者如果使用了具有较不陡峭曲线的算法,则可以使用具有多达65536个入口的阵列的2字节索引。如果仍然需要更多,则可以使用具有多达4294967296个入口的4字节索引(等等)。在对堆阵管理器109进行初始化时,池的阵列115可以被限制为仅包含在给定堆阵数量情况下可能的大小。由于在堆阵管理器109启动时并没有创建延伸内存块,所以仅创建了系统使用大小的延伸内存块。当内存块被释放时,它们将在池中准备供下一次使用并且不可被用于其它分配大小。通常,系统(诸如应用或处理111)可能再次使用相同的块大小。比之前池的内存块大小大X字节的内存块能够满足X个不同的内存请求大小,因此系统不必针对可再次使用的自由内存块再次请求确切相同的块大小。任何池都最多包含系统在任何时刻已经同时使用的数目的内存块。对于示例性算法而言,使用中的内存块浪费平均将低于25%,但是该解决方案并不局限于所述示例性算法。对块大小的増加使用较不陡峭的曲线,能够轻易地将浪费/内部碎片减少为平均低于1%,但是这是以收窄内存块能够满足的平均不同的请求大小为代价的。因此,可以出于具体系统需要的目的来调节出次最优化。本发明的实施例起因于所述技术特征的优势可能是
堆阵的外部碎片并没有导致可用性的降低。该问题已经以以下方式得以处理,其中通过系统需求构建所需大小的池,这解决并避免了大的内存块的大小和数量被堆阵的外部碎片降低。长时间段地运行系统并不会改变这一事实。· 0(1)中的快速内存分配,但并不是完全确定性的。系统已经启动之后的第一时间段,不同内存块大小的池很小,并且请求内存块有时会通过从堆阵进行分配以及有时从池中准备好的块进行分配而得以满足,并且因此不是完全确定性的(但仍然是0(1))。一段时间之后,当(并且如果)池已经变为能够继续满足系统需求的大小,则一直从池中取得内存块,并且因此将弥合(seam)确定性。·该解决方案不必进行捜索,并且内存分配快速且以0(1)进行处理。 以0(1)进行的快速且确定性的内存解除分配。·该解决方案并未像(QNX及其它所使用的)内存映射那样引入非确定性作为使用对给予系统的内存使用的负面效应。 无论块大小如何,每个内存块的管理开销都可能为I字节。低的内部碎片/浪费也是可能的。对于示例性算法而言,浪费平均低于25%,但是通过使用块大小较不陡峭增加的算法,能够将浪费轻易減少为低于1%。收窄平均的不同请求大小的内存块能够满足等同于池中更多的块并且因此可以在最后等同于要求同样多的堆阵。预先需要更多堆阵以确保能够继续使用的(特别是)大的内存块的数目是可接受的,因为这有助于I)可用性、2)可测试性(针对RAM需求)和3)确保足够的RAM升级至少在新的需求要求更多RAM之前将是继续充足的。
该解决方案仅在处理分配和解除分配的请求时使用CPU和RAM,但是并不在请求之间使用CPU或RAM,因此并没有降低(请求之间的)CPU的可能利用。·该解决方案针对RAM需求的可测试性提供了更容易且更加可靠的方式。由于已经消除了堆阵的外部碎片,所以不会由于系统长时间段运行的(改变的碎片)而导致所需要的内存块的具体集合不可使用。仅在系统需要比其之前所使用的更多的某大小的内存块的情况下以及自由堆阵(其被保证为连续)对于新的请求而言不够大的情况下所述解决方案才会无法满足请求。如果所需要的额外内存安装在系统之中,则保证不会再次发生相同的情况,并且长时间段运行系统也仍然不会改变该事实(因为碎片被消除)。·该解决方案与静态内存分配具有ー些相似之处,这是因为创建了不同内存块大小的池,但是同时避免了该方法的不良属性如果测试失败或可用性过低,则充分的RAM升级避免了相同的情形再次发生。即使系统有时具有不同的RAM需求,更多的RAM也将会减少RAM不足所导致的不可用性。这并没有重新编辑或重新配置,因为该解决方案随着RAM的量而自动调节。本发明的实施例随着针对软件所进行的变化而自动调节,这是因为池的大小在软件执行时通过软件的需求而进行构建。研发人员不必花时间来创建或维护池。研发人员不必在软件变化时考虑池的大小。在任何可用时间,在所安装RAM的可能性之内,该解决方案自动调整为不同安装时的不同需求。假设系统(堆阵管理器)在所需要的内存块根本改变时被重启,则所述堆阵管理器将进行适配并调整至在任何安装时可能随时间逐步形成的不同需求。正常情况下,这仅会在系统监管/控制的问题域也发生根本变化时发生,并且在这样的情况下,系统无论如何都可能会重启。因此,与静态内存分配方法相比,这是较不容易出错且更为廉价的更为有效的解决方案。本发明的实施例可以是能够用于许多系统的一次性(one time)实施方式。应当注意的是,术语“包括”并不排除其它元素或步骤,并且“ー个”(“a”或“an”)并不排除多个。而且,结合不同实施例描述的元素可以进行合井。还应当注意的是,权利要求中的附图标记不应当被理解为对权利要求的范围进行限制。
权利要求
1.一种用于管理特别是堆阵的数据存储器(101)的物理内存(103)的方法,所述方法包括 请求(113)具有内存部分大小的内存部分; 对池(i0,il, i2, i3)进行标识,其中所述池被提供用于存储至少一条指示所述数据存储器(101)的内存块(ml, m2, m3, m4, m5, m6, m7)的地址(al, a2, a3, a4, a5, a6,a7)的访问信息(ail, ai2, ai3, ai4, ai5, ai6, ai7),所述内存块具有等于或大于所述内存部分大小的内存块大小; 确定所述访问信息是否存储在池中; 如果所述访问信息存储在池中, 返回(117)内存块(ml, m2, m3, m4, m5, m6, m7)的地址数据(al, a2, a3, a4, a5,a6, a7),其中所述地址数据基于所述访问信息(ail, ai2, ai3, ai4, ai5, ai6, ai7),并且 从池(iO, il, i2, i3)去除所述访问信息(ail, ai2, ai3, ai4, ai5, ai6, ai7); 如果所述访问信息没有存储在池中, 创建访问信息(ail, ai2, ai3, ai4, ai5, ai6, ai7),并且 返回(117)内存块(ml, m2, m3, m4, m5, m6, m7)的地址数据(al, a2, a3, a4, a5,a6, a7),其中特别地所述地址数据基于所述访问信息。
2.如权利要求I所述的方法,其中所述内存块包括所述数据存储器的连续物理内存段,其中所述物理内存段具有所述内存块大小,其中特别地所述内存块由物理上连续的内存单元形成。
3.如之前任一项权利要求所述的方法,其中创建所述访问信息是基于所述数据存储器的可用部分(120)的开始地址(118),并且其中创建所述访问信息进ー步包括基于所述内存块大小改变所述可用部分的开始地址。
4.如权利要求3所述的方法,其中创建所述访问信息进ー步包括在所述数据存储器的索引部分处将与所述池相关的池索引(iO,il, i2, i3)写入所述数据存储器的物理内存中,其中所述索引部分的地址基于所述访问信息(ail, ai2, ai3, ai4, ai5, ai6, ai7),其中特别地,改变所述数据存储器的可用部分的开始地址进ー步基于延伸内存块的大小。
5.如权利要求4所述的方法,进ー步包括 特别是由已经请求了所述内存部分的请求方释放(113)所述内存部分;并且 将所述访问信息(ail, ai2, ai3, ai4, ai5, ai6, ai7)存储在所述池中。
6.如权利要求5所述的方法,进ー步包括 基于所述内存块的地址(al, a2, a3, a4, a5, a6, a7)确定所述访问信息(ail, ai2,ai3, ai4, ai5, ai6, ai7),其中将所述访问信息存储在所述池中基于位于索引部分中的池索引,其中所述索引部分的地址能够从所述访问信息导出。
7.如权利要求5或6所述的方法,进ー步包括,一旦释放了所述内存部分,就在所述数据存储器的索引部分处将与所述池相关的池索引(iO,il, i2, i3)維持在所述数据存储器(101)的物理内存(103)中。
8.如权利要求4至7中任一项所述的方法,其中在所述数据存储器中,所述索引部分在物理上与所述内存块相邻,特别是处于所述内存块之前或之后的字节中。
9.如之前任一项权利要求所述的方法,其中对所述池进行标识包括基于访问信息确定池索引。
10.如之前任一项权利要求所述的方法,其中另ー访问信息被存储在所述池中,其中所述另ー访问信息指示所述数据存储器的另ー内存块的另一地址,所述另ー内存块具有所述内存块大小。
11.如权利要求10所述的方法,其中所述池被适配以存储包括所述访问信息和所述另一访问信息在内的多个访问信息实例,其中所述池被适配以使得能够在与所述池中所存储的多个访问信息实例的数目无关的时间跨度中访问所述访问信息和所述另ー访问信息中的至少ー个。
12.如之前任一项权利要求所述的方法,所述方法进ー步包括 请求具有另外的内存部分大小的另外的内存部分; 对另外的池进行标识,其中所述另外的池被提供用于存储至少一条指示所述数据存储器的另外的内存块的另外的地址的另外的访问信息,所述另外的内存块具有等于或大于所述另外的内存部分大小并且不同于所述内存块大小的另外的内存块大小; 确定所述另外的访问信息是否存储在所述另外的池中; 如果所述另外的访问信息存储在所述另外的池中, 返回所述另外的内存块的另外的地址数据,其中所述另外的地址数据基于所述另外的访问信息,并且 从所述另外的池去除所述另外的访问信息; 如果所述另外的访问信息没有存储在所述另外的池中, 创建另外的访问信息,并且 返回所述另外的内存块的另外的地址数据,其中所述另外的地址数据基于所述另外的访问信息。
13.如权利要求12所述的方法,其中另ー另外的访问信息存储在所述另外的池中,其中所述另ー另外的访问信息指示所述数据存储器的另ー另外的内存块的另ー另外的地址,所述另ー另外的内存块具有所述另外的内存块大小。
14.如权利要求12或13所述的方法,进ー步包括 特别是在所述数据存储器中定义数据容器(115)以便存储多个池,特别是预定数目的池,其中所述池和所述另外的池存储在所述数据容器中,其中所述数据容器被适配以使得所述池和所述另外的池能够在对于该容器中所存储的所述多个池的数目増加而恒定的时间跨度内被访问。
15.一种数据存储器管理系统,所述系统包括 数据存储器(101),用于存储数据;和 控制器(109),用于控制对所述数据存储器的访问,其中所述控制器被适配以使得所述控制器执行以下方法步骤 接收(113)请求,所述请求请求具有内存部分大小的内存部分; 对池进行标识,其中所述池被提供用于存储至少一条指示所述数据存储器的内存块的地址的访问信息,所述内存块具有等于或大于所述内存部分大小的内存块大小; 确定访问信息是否存储在所述池中;如果访问信息存储在所述池中,返回所述内存块的地址数据,其中所述地址数据基于所述访问信息,并且从所述池中去除所述访问信息;如果访问信息没有存储在所述池中, 创建访问信息,并且返回所述内存块的地址数据,其中所述地址数据基于所述访问信息。
全文摘要
描述了一种用于管理特别为堆阵的数据存储器的物理内存的方法和控制器,所述方法包括请求具有内存部分大小的内存部分;标识池,其中所述池被提供用于存储至少一条指示数据存储器的内存块的地址的访问信息,所述内存块具有等于或大于所述内存部分大小的内存块大小;确定所述访问信息是否存储在池中;如果所述访问信息存储在池中,则返回所述内存块的地址数据,其中该地址数据基于所述访问信息,并且从所述池去除所述访问信息;如果所述访问信息没有存储在池中,则创建访问信息,并且返回所述内存块的地址数据。
文档编号G06F12/06GK102693186SQ20121004652
公开日2012年9月26日 申请日期2012年2月24日 优先权日2011年2月25日
发明者I.S.哈祖尔 申请人:西门子公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1