由已分配的但不确保作为基础的物理存储器是否连续的存储器提供物理上连续的存储器的方法和系统,该方法涉及在已分配的虚拟存储器中识别出连续的物理存储器页。将这样的页归入连续物理存储器池,以便在需要时使用。任何未归于连续物理存储器池、且未与其它归入连续物理存储器池的页共同被分配的页,可以被从分配中释放,以用于其它用途。(*该技术在2023年保护过期,可自由使用*)
【技术实现步骤摘要】
本专利技术涉及在随机存取存储器中分配连续存储器(的技术)。
技术介绍
在计算机系统的内核体系结构中,使用连续物理存储器(即包括连续的真实(物理)地址的存储器)正变得越来越少见。内核设计者们假设硬件支持分散-集中I/O(scatter-gather I/O),该假设常常是正确的。但是,仍有很多旧的硬件组件不支持分散-集中I/O,并且一些较新的硬件组件也不支持分散-集中I/O。各种较新的硬件设备组件不支持其缓冲描述符环(buffer descriptor ring)的分散-集中I/O。一个例子是由位于(美国)加利福尼亚州San Jose的Alteon Websystems Inc(被NortelNetworks公司所收购)生产的千兆以太网/PCI网络接口卡,Tigon 2 ASIC,版本5或6,SX光纤连接器IBM FRU 07L8918。操作系统为内核编程提供了API(application program interfaces,应用程序接口)。特别而言,操作系统提供了API,以便在内核虚拟地址空间中分配存储器。一个例子是AIXTM操作系统所提供的xmalloc()。该API不保证由它所分配的物理存储器是连续的。某些操作系统提供了这样的API,其可以在虚拟地址空间中分配存储器,并保证该物理存储器是固定的。一个例子是AIXTM操作系统的rmalloc()。由该命令分配的存储器是固定的(pinned),但不可换页(notpageable)。提供连续物理存储器的API(如刚刚提到的rmalloc())的使用是受限制的。一般不允许编写内核扩展、设备驱动程序和其它模块的程序员使用如rmalloc()这样的API。此种API一般只是由固件程序员在某些情况下使用的。在这方面,使用rmalloc()时可用的自由存储器池是16MB,并在大多数使用AIXTM操作系统的系统如IBM RS/6000系列系统中,完全由固件使用。对于应用程序(即用户模式)编程,为存储器分配提供的标准API是malloc()和realloc()。在这两种情况下,作为基础的物理存储器的连续性都无法保证。因此,这些调用不适于在需要连续物理存储器的情况下使用。鉴于上述情况,显然需要一种改进的分配连续物理存储器的方法。
技术实现思路
这里描述的算法可以从在不确保作为基础的物理存储器是连续的情况下分配的存储器提供物理连续的存储器。这些算法可以融入用于分配存储器的操作系统调用中,以确保这些调用所分配的存储器是物理上连续的。提供物理连续的存储器涉及到在一个(相对较大的)已分配的虚拟存储器块中,或者在多个(相对较小的)已分配的虚拟存储器块中,识别出连续的物理存储器页。如此识别出的物理页被归入一个连续物理存储器池中,以在需要时使用。如果只分配一个单个虚拟存储器块,则如果至少某些页被用作连续页,任何未被使用的页都不可释放。但是,如果那些块未被分配带有归入连续物理存储器池以便于随后的使用的其它页,则某些未使用的页可以被释放,用于其它用途。任何未归入连续物理存储器池的页都可以从分配中释放,用于其它用途。只分配一个单个存储器块较简单,但效率较低,而分配多个离散(不连续)块较为复杂,但由于“浪费”了更少的未使用页,而效率更高。只分配一个单个的相对较大的存储器块较为简单,导致更多的物理连续页,但效率较低,而分配多个离散(不连续)的、相对较小的块较为复杂,导致较少的物理连续页,但由于“浪费”较少的未使用页,而效率可以较高。附图说明图1的流程图示出了用于以仅涉及一个虚拟存储器块的方式分配物理连续存储器的第一算法。图2和3的示意图示出了根据图1所示的第一算法、涉及分配物理连续存储器的处理过程。图4的流程图示出了以涉及多个虚拟存储器块的方式分配物理连续存储器的第二算法。图5和6的示意图示出了根据图4所示的第二算法、涉及分配物理连续存储器的处理过程。图7的示意图示出了一种计算机系统,在其中可实施参照图1至6以及说明书后面所附代码片段1至4所描述的技术。另外,说明书后面还附有代码片段1至4,其中示出了可用于实施参照图1至6所描述的算法的一些伪代码片段。具体实施例方式这里在操作系统环境中描述了一种用于分配物理连续存储器的方法、计算机系统和计算机软件。这里结合AIXTM操作系统描述了一个特定实现,尽管也可以在其它操作系统上实施。依次描述了用于分配连续物理存储器的第一和第二算法。每个算法都有其特定的优点,下面是对二者的概述第一算法下面参照图1至3,对分配连续物理存储器的第一算法中的步骤进行描述。下面描述的步骤与图1的流程图所示的步骤是一致的。步骤110 在虚拟地址空间中分配一个单独的、较大的存储器块(用户模式下的malloc()、realloc(),内核模式下xmalloc())。步骤120将所获得的块中的每页标记为不可换页的。这意味着这些页永远不会被交换出去,而其物理地址是持久的(内核模式下的xmempin())。步骤130获取该块中每个虚拟页的真实物理地址。步骤140分配两个数组(数据结构),其元素的数量与该块中页的数量相同。第一数组保存每页的虚拟地址,而第二数组保存相应页的物理地址。步骤150对两个数组进行排序,以使第二数组中的元素以升序排列。当排序时,应注意保持第一个和第二个数组元素的1∶1映射关系不变。结果,第二数组具有以升序排序的元素,而第二数组的元素没有特定的排列顺序。步骤160剖析第二数组,标记连续的页。步骤170将那些标记过的页归入物理连续池。图2示意性地表现了对单个存储器块210的分配。该单个块210包括虚拟存储器页220 Vl...Vn。进而,这些虚拟存储器页220分别与物理存储器页230 P201...P500对应。在诸虚拟存储器页220和诸物理存储器页230之间并没有特定的相互关系。如图2所示提供了象征的物理存储器地址P201、P204等作为例子。图3与图2相对应,示意性地表现了排序后的虚拟存储器页220和物理存储器页230。在本例中,如图3所示,可以识别出两组连续物理存储器页。这些连续物理存储器页包括其地址为P201、P202、P203、P204以及P310、P311的页。这两组物理存储器页230被放入连续物理存储器池,以便在需要时使用。识别出的未使用的物理存储器页具有地址P400和P500,但它们不能被释放,因为存储器块210向上述两组连续物理存储器页贡献了一些页。第二算法下面参照图4至6,对分配物理连续存储器的第二算法的步骤进行描述。下面描述的步骤与图4的流程图所示的步骤是对应的。步骤410在虚拟地址空间中分配小存储器块(用户模式下的malloc()、realloc(),内核模式下的xmalloc())。这些块可以是10或100或更多的页,并可以是可编程的。分配若干这样的块。注意在这种方法中,连续性被降低,因而需要分配更多的页。步骤420将上述所获得的每个块的每页标记为不可换页。这意味着这些页永远不会被交换出去,而其物理地址是持久的(内核模式下的xmempin())。步骤430获得每个块中的每个虚拟页的真实物理地址。步骤440分配两个数组(数据结构),其元素的数量与全部存储器块中页的总数相同。第一数组保存每页的虚拟地址,而第二数组保存相应页的物理地址。步本文档来自技高网...
【技术保护点】
一种用于提供物理连续的存储器地址的方法,该方法包括以下步骤:分配包括一个或多个离散的虚拟页的虚拟存储器地址空间的至少一个部分;获得所述至少一个部分的每个所述页的物理存储器地址;确定所述页的哪些具有连续的物理存储器地址 ;以及将所述确定的虚拟存储器地址分配给一个连续物理存储器池用随后的使用。
【技术特征摘要】
...
【专利技术属性】
技术研发人员:MC帕蒂尔,
申请(专利权)人:国际商业机器公司,
类型:发明
国别省市:US[美国]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。