本发明专利技术涉及一种管理存储器的方法。当执行一进程时,创建用于存储器对象(10.1,10.2,…10.k)的至少一个堆栈(6、7、8、9)。通过利用一原子操作执行从堆栈(6、7、8、9)中请求存储器对象(10.k),并且通过利用一原子操作来同样地使存储器对象(10.k)返回堆栈(6、7、8、9)。
【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及数字计算机设备中的存储器管理方法。
技术介绍
以大量的可用存储能力和卓越的计算性能为基础,现代计算机设备支持 复杂程序的使用。在计算机设备中,这种程序可以执行若干个所谓的线程同时进行处理的过程。由于这些线程中的许多线程没能彼此恰好地匹配时间, 因此可能发生若干线程同时试图访问存储器管理器从而可能同时访问可用 存储器的特定区的情况。这类同时访问可能导致系统不稳定。不过,可以利用操作系统的干预来防止同时访问特定的存储区。在DE 679 15 532 T2中, 描述了利用另 一线程来防止访问已经被访问过的存储区。在这种情况下,只 有在同时访问涉及到同 一存储区时才来防止同时访问。在目前可用的存储器管理系统中,通常使用所谓的双向链表,用于例如 管理各存储器对象中的总存储容量。利用这些双向链表,可以在若干阶段访 问特定的存储器对象。因此,在第一次访问这类存储器对象时,需要阻止其 它线程,从而使在第一次访问的各阶段得到处理之前,另一线程的同时访问 是不可能的。这种访问阻止可借助操作系统通过所谓的互斥例程来实现。不 过,加入操作系统及执行互斥例程浪费了宝贵的计算时间。在这段时间,其 它线程通过操作系统被这种基于互斥的锁定阻止,从而暂时避免了它们的执 行。
技术实现思路
本专利技术的目的在于提供一种数字计算机单元中的存储器管理方法,从而 防止多线程环境下,次要线程同时访问特定的存储区,并同时获得较短的存储器访问时间。以上目的通过根据如权利要求1所限定的本专利技术的方法来实现。先在可用存储范围中创建至少一个这种堆栈。然后,在任何情况下,由一线 程利用原子操作实现存储器对象的检索和返回。使用这类用于存储器访问的 原子操作连同存储器的堆栈结构,只允许访问堆栈中的最后 一个对象一次, 从而使得不再需要过多地阻止其它线程。在这种情况下,原子操作已经确保 只在 一 个阶段中实现对存储器对象的访问,从而不会发生与另外线程的并行 运行阶段重叠。根据本专利技术方法的其它有利改进在从属权利要求中详细说明。 附图说明以下,将在附图中呈现并更详细地阐述优选的示范性实施例。附图如下图1示出已知的利用双向链表的存储器管理的示意图2示出利用堆栈以及原子检索和返回功能的存储器管理;和图3示出根据本专利技术的存储器管理的步骤的示意图。在所谓双向链表的情况下,存储器被细分成若干存储器对象1、 2、 3和 4,它们被示意性地图示在图1中。在这种存储器对象l-4的每个中分别创 建第一字段la和第二字段lb。在这种情况下,第一存储器对象l的第一字 段la指示第二存储器对象2的位置。类似地,第二存储器对象2的第一字 段2a指示第三存储器对象3的位置,依次类推。为了允许检索任何需要的 中间区,不仅沿前向指示相应下一存储器对象的位置,而且还在存储器对象 2、 3和4的第二字段2b、 3b和4b中指示相应前一存储器对象1、 2和3的 位置。利用这种方式,有可能移除设置在两个存储器对象之间的存储器对象, 同时更新相邻存储器对象的字段。实际上,这类双向链表允许单独访问任何需要的存储器对象,不过,反 过来说,它们所具有的缺点是,在多线程环境中只能经由缓慢搡作来防止若 干线程同时访问一个存储器对象。 一种可能性是如同在
技术介绍
中已经描述的那样利用互斥功能来管理这些访问。可以通过专用指针5来指示列表中第一存储器对象1,而且第一存储器对象]还被特征化成在第二字段]b中存储零向量而不是前一存储器对象的位置。相应地,通过在存储器对象4的第 一字段4a中存储零向量而不是另一存储器对象的位置,最后特征化存储器 对象4。相对照地,图2示出根据本专利技术的存储器管理的示例。利用根据本专利技术 的存储器管理,首先,在初始化过程期间优选创建若干堆栈。这些堆栈为专 门的单向链表形式。图2示出四个由附图标记6、 7、 8和9表示的这种堆栈。 这些堆栈6-9中的每个堆栈均包括若干大小不同的存储器对象。例如,在第 一堆栈6中可以存储大小达到16字节的对象,在第二堆栈7中可以存储大 小达到32字节的对象,在第三堆栈8中可以存储大小达到64字节的对象, 而最后在第四堆栈9中可以存储大小达到128字节的对象。在出现更大的待 存储元素的情况下,也可以创建具有更大存储器对象的堆栈,其中优选的是, 对于下一相应堆栈来it各存储器对象的大小加倍。对于第四堆栈9,详细示 出了这类堆栈细分成各存储器对象10.i的情况。第四堆栈9包括一系列逐一链接的存储器对象10.1、 10.2、 10.3..... 10.k。在图2中示出了第四堆栈9的最后一个存储器对象10.k稍微有些区距。对于所有堆栈6-9来说,访问各 存储器对象,只可以分别访问堆栈6-9的最低存储器对象,例如,对于堆栈 9来说,只可以访问存储器对象10.k。因此,图2中第四堆栈9的最后一个存储器对象10.1〈可以用在例如请 求存储的情况下。如果由于线程不再需要存储器对象10.k而使其再次变得 空闲,则将据此返回到第四堆栈9的末尾。图2利用多个不同的线程11来示意性地示出这个过程,其中在任何情 况下都通过这些线程给出存储请求。利用该具体的示范性实施例,例如若千线程12、 13和14中的进程请求相同大小的存储容量。所请求的存储器大小 由待存储的数据产生。在所示的示范性实施例中, 一出现超过64字节至最 大128字节大小的存储请求,就选择第四堆栈9。现在,如果通过第一线程 12需要例如75字节的存储容量,则首先选择堆栈6-9中的那个包括适合大 小的空闲存储器对象的堆栈。在所示的示范性实施例中,就是第四堆栈9。 此处提供的是大小为128字节的存储器对象10丄由于存储器对象10.k是第 四堆栈9中的最后一个存储器对象,所以基于第一线程12的存储请求,完 成所谓的POP(出栈)操作,因此,存储器对象10.k可用于线程 12。这类出栈例程是原子的或不可分的,也就是说,在一个处理阶段中,存 储器对象10.k从第四堆栈9中移除,以用于线程12。这种原子或不可分的 操作可将存储器对象10.k分配给线程12,并且防止另一线程例如线程13同 时访问同一存储器对象10.k。也就是说,系统一完成新的处理阶段,就結束 有关存储器对象10.k的处理,并且第10.k存储器对象不再是第四堆栈9的 组成部分。因此,在通过线程13请求另一存储的情况下,此时第四堆栈9 的最后存储器对象是存储器对象10.k-l。此处,还可以再执行原子出栈搡作, 以便将存储器对象lO.k-1转至线程13。这类原子操作以对应的硬件支持为先决条件,并且不能以标准的编程语 言直接阐述,而是需要使用机器代码。不过,根据本专利技术,这些硬件实现的 所谓无锁定(lock-free )出栈调用或无锁定进栈调用通常不用于存储器管理。 为此,使用例如单向链表代替图1中示意性示出的双向链表,并且在单向链 表中只有在所创建的堆栈的一端才能检索或相应返回存储器对象。图2还示出,对于多个线程15来说,当在线程的删除调用之后变得空 闲时,每个存储器对象如何返回到适合的堆栈。如图2中对存储器对象10.k 所示的那样,在每个存储器对象10.i中示出了头10.U,而头IO.U中对特定 堆栈的分配进行编码。例如,在头10.k *中包含了对第四堆栈9的分配。现 在,本文档来自技高网...
【技术保护点】
一种存储器管理方法,包括以下步骤: 创建针对存储器对象(10.1,10.2,…,10.k)的至少一个堆栈(6、7、8、9); 利用一原子操作从堆栈(6、7、8、9)中请求存储器对象(10.k);并且 利用一原子操作使存储器对象(10.k)返回堆栈(6、7、8、9)。
【技术特征摘要】
【国外来华专利技术】DE 2005-6-9 10 2005 026 721.11、一种存储器管理方法,包括以下步骤创建针对存储器对象(10.1,10.2,...,10.k)的至少一个堆栈(6、7、8、9);利用一原子操作从堆栈(6、7、8、9)中请求存储器对象(10.k);并且利用一原子操作使存储器对象(10.k)返回堆栈(6、7、8、9)。2、 根据权利要求1所述的方法,其特征在于分别创建若干针对大小不同的存储器对象(16字节、32字节、64字节、 128字节)的堆栈(6、 7、 8、 9)。3、 根据权利要求1或2所述的方法,其特征在于在检索存储器对象U0.k)之前,选择与存储请求相比分别具有下一最大 存储器对象(16字节、32字节、64字节、128字节)的堆栈(6、 7、 8、 9)。4、 根据权利要求1-3中任一项所述的方法,其特征在于 在初始化堆栈(6、 7、 8、 9)之后,最初在堆栈(6、 7、 8、 9)中不存在任何存储器对象(10.i),并且在任何情况下,如果第一次请求存储容量,则经 由系统存储器管理来请求存储器对象,并且当返回时将该存储器对象分配给堆 栈(6、 7、 8、 9)。5、 根...
【专利技术属性】
技术研发人员:迈克尔罗斯,
申请(专利权)人:罗德施瓦兹两合股份有限公司,
类型:发明
国别省市:DE[德国]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。