背景技术
用于可视化三维体数据的应用采用内存增强方法,如Ray-Casting、Splatting、以及Shear-Warp。通过这些方法可视化的体数据可以从医疗层析成像扫描器如磁共振(MR)、计算机断层照相(CT)、正电子发射X射线层析照相(PET)、或任何其它能够产生一系列类似栅格阵列的切片的其它装置中获得。许多体可视化方法是利用程序化计算机实现的,依赖于计算机的虚拟内存和用于存储和访问切片数据的虚拟分页系统。当今可用的个人计算机典型地采用诸如Windows NT、Windows XP、Unix、或Linux的操作系统。这些操作系统运用虚拟内存寻址和虚拟分页的方法。当为大的三维体的大量切片分配内存,并且被分配的内存大于程序化计算机的可用随机存取存储器(RAM),也称为物理内存时,该程序化计算机中虚拟内存寻址和虚拟分页的性能显著降低。该虚拟内存寻址和虚拟分页性能的降低还导致体可视化方法性能的显著降低。
由于最近层析成像领域的技术进步,提高了空间分辨率和数据采集速度,导致产生了包含数百甚至数千切片的大数据集,使得内存限制进一步加剧。例如,使用西门子SOMATOM VolumeZoomTMCT扫描器可以快速产生1024个切片的序列,其中每个切片包括512×512像素的一个栅格,从而产生512×512×1024个体积元素的三维体(超过26.8千万个数据值)。在石油天然气工业中,地震数据测量值也存储在很大的三维体中,其中具有多达2048×2048×2048个栅格元素(超过85亿个数据值)。这些类型的数据可能大于现代计算机上可用的RAM存储量。一些三维阵列可以大到超出多数个人计算机和图形工作站中的32位中央处理器(CPU)的内存寻址能力,其典型地限于42亿个数据元素。
本领域中可用的传统虚拟分页方法的限制之一是它们针对通用目的设计的,它们的性能并不是针对有效处理大量三维体的切片而优化。当计算机的RAM由于过多切片缓冲而过载时,虚拟分页系统将切片内存缓冲器的部分页出到盘的可能性增加,该部分是体可视化方法随后马上就要用到的,从而可能导致不断的页入/页出效应,严重降低计算机的处理性能。该问题通称为“盘颠簸(disk thrashing)”。
例如,Windows XP虚拟内存管理器只有当所有物理内存都用尽时(即当再没有可用内存时),才开始将内存分页到盘。在这样的低内存条件下,所有应用都变得反应非常迟钝,因为操作系统忙于将内存段页出到盘和从盘页入。由于每个分页的段只是64K字节,因此需要很长时间才能从低内存状态恢复。
此外,Windows XP虚拟内存管理器不知道哪些图像数据缓冲器正被使用,哪些不是,因此,它将所有图像数据缓冲器都保留在内存中,直到所有物理内存都饱和。当将图像数据分页到盘上时,其不知道该数据是否很快就会再次需要,因此,效率将很低。
另一个限制是32位CPU的虚拟内存寻址能力,其寻址大约42亿字节元素。在一些虚拟内存寻址系统中,32个地址位中的一位为操作系统的内核保留,因此,剩余的可用于虚拟内存分配的寻址空间减少了一半,即21亿字节元素。这样,虚拟内存的大小可能被超过,例如,具有2048个切片缓冲器,每个缓冲器具有2048×2048栅格元素的三维地震数据体将要求超过85亿字节元素的存储空间,超过32位CPU的虚拟内存寻址能力。如果需要分配多个大数据体,用于切片缓冲器的有限个数的虚拟内存地址也会存在问题。
如上所述,由于有限的物理内存量、有限的虚拟地址空间、和操作系统虚拟内存管理和交换文件的低效率,计算机很难适应处理大数据体的应用。
因此,需要一种高效的内存管理方法来处理大数据体。
发明内容
根据本发明的一个实施例,一种管理用于大数据体的内存系统的方法包括由一个中央内存管理系统在多个应用和程序化计算机的物理内存之间提供一个接口。
该方法进一步包括保持一个由多个应用分配的内存缓冲器的全局优先权列表作为链接列表,其中该列表按照每个缓冲器被一个应用最后访问的时间排序。该优先权列表将存储设备的数据映射到虚拟内存的缓冲器,其中所述虚拟内存的缓冲器当被所述多个应用请求时,被页入到物理内存。
该方法包括指定一个低物理内存限制,并监视可用物理内存量,一旦判断可用物理内存量降到低物理内存限制以下,即通过所述内存管理接口将最近用过的切片缓冲器从物理内存页出,从而将可用物理内存增加到特定的高物理内存限制左右。
该方法进一步包括判断耦合到物理内存的内存系统的虚拟地址空间中未使用的数据缓冲器,标记该未使用的数据缓冲器,以及一旦检测到程序化计算机正在分配多于计算机处理器所能寻址的虚拟内存时,通过从虚拟地址空间解映射未使用的数据缓冲器,恢复虚拟地址空间。
该方法进一步包括通过内存管理接口,在多个应用之间共享物理内存中存储的数据缓冲器,其中所述数据缓冲器包含共享数据,以及判断由所述多个应用访问的缓冲器的优先权列表,其中所述优先权列表将数据缓冲器映射到一个存储设备。
该方法包括根据所包含的共享数据唯一地识别一个给定的数据缓冲器,其中创建该给的数据缓冲器的一个创建应用指定一个标识符,以及判断该标识符是否先前已经被指定给一个共享数据缓冲器,一旦判断该标识符已经存在于物理内存中,则给予所述创建应用访问该共享数据缓冲器的权力。
该方法包括在一个中央内存管理系统中利用使用该中央内存管理系统的应用内部的内存地址寻址指向一个数据缓冲器的对象,并使用一个密钥确认该内存地址,其中所述密钥包括唯一的信息,并且为对象的发送者和接收者所知。该方法包括提供唯一的句柄,在快速恢复句柄中组合该内存地址和句柄,在两个或更多应用之间共享该快速恢复句柄,以及一旦访问对象,即判断由快速恢复句柄识别的该对象是否有效。
保持全局优先权列表进一步包括在创建一个数据缓冲器后,对应于该数据缓冲器向全局优先权列表加入一个对象,以及在判断对应于该对象的数据缓冲器指针删除后,将该对象从全局优先权列表中去除。其中该对象在全局优先权列表中的父对象和子对象在去除该对象之前被链接。保持列表进一步包括一旦判断该对象要被使用时,将该对象移到列表末尾,其中在全局优先权列表末尾的对象比在全局优先权列表开头的对象被溢出(flush)的可能性小。该方法包括通知所述多个应用,由于内存解映射或映射操作,缓冲器的地址改变。
根据本发明的一个实施例,内存管理系统包括:一个或多个存储设备,用于存储分页文件;耦合到该存储设备的一个优先权链接列表,其中该优先权链接列表的节点与存储设备中的分页文件对应;以及包含多个数据缓冲器的虚拟内存空间,每个数据缓冲器耦合到优先权链接列表的一个唯一的节点。
根据本发明的一个实施例,内存管理系统或者与多个应用直接接口,或者耦合到一个中央图像处理服务器,该图像处理服务器再提供至少一个应用与内存管理系统之间的接口。
具体实施方式
根据本发明的一个实施例,计算机内存被有效管理,其中内存根据数据体分配。一种管理内存的方法通过举例,根据用于二维切片和包含这样的切片的三维体的存储和可视化的成像应用加以描述。参考图2,为每个二维切片分配一系列内存缓冲器201。每个内存缓冲器中包含的数据例如是从医疗层析成像扫描器如磁共振(MR)、计算机断层照相(CT)、正电子发射X射线层析照相(PET)、或任何其它能够产生一系列类似栅格阵列的切片的其它装置中获得。每个内存缓冲器或切片缓冲器具有其自身的虚拟分页文件,如202,其可以从存储设备203页入或页出到存储设备203。存储设备可以是例如磁硬盘设备。内存管理器204能够在多个存储设备如205上创建和访问多个虚拟分页文件,从而使实现内存管理器204的程序化计算机的存储能力最大化。
根据本发明的一个实施例,通过采用记录最近被使用的和最远(least recently)被使用的二维切片缓冲器201的全局链接列表206,改善了程序化计算机的现有虚拟内存分页系统和磁硬盘装置的性能。当程序化计算机访问切片缓冲器的数据时,内存管理器204判断程序化计算机的可用RAM量是否降低到预定下限以下。如果是,则将一组最远使用过的内存缓冲器页出到存储设备,如硬盘设备,直到恢复了预定量的可用RAM。这样,防止了计算机内存过载,允许包括大量切片的三维体的有效可视化。
操作大量数据的应用可能向程序化计算机请求多于实际的资源才能有效操作。例如,存在允许用户创建任意期望数量的光栅和各种大小的位平面对象的图像处理应用。大量的这些对象可能很快用尽所有可用的物理内存(如RAM内存),迫使虚拟内存管理器如Windows XP虚拟内存管理器不断将内存段交换到盘,从而大大降低系统性能。根据本发明的一个实施例,采用内存管理体系分配你存缓冲器防止了低内存状态,并保持了期望水平的性能和交互性。该内存管理体系可以就任何对象类型实现。对象类型可以体现分组、从属/相关、通知、或其它高级功能。
应当理解,本发明可以在各种形式的硬件、软件、固件、专用处理器、或者其组合中实现。在一个实施例中,本发明可以实现为软件,作为明确体现在程序存储设备上的应用程序。该应用程序可以上载到包含任何合适结构的及其中并由其执行。
参考图3,根据本发明的一个实施例,用于实现本发明的计算机系统301可以包括:中央处理器(CPU)302、内存303、和输入/输出(I/O)接口304。计算机系统301通常通过I/O接口304耦合到显示器305和各种输入设备306,如鼠标和键盘。支持电路可以包括诸如高速缓存、电源、时钟电路、和通信总线等电路。内存103可以包括RAM、ROM、盘驱动、带驱动等,或其结合。本发明可以实现为存储在内存303中并且由CPU302执行以处理来自信号源308的信号的程序。同样,计算机系统301是通用计算机系统,当执行本发明的程序307时成为专用计算机系统。
计算机系统301还包括操作系统和微指令代码。此处所描述的各种处理和功能可以是微指令代码的一部分,或者是应用程序的一部分(或其组合),其通过操作系统执行。此外,各种其它外部设备也可连接到计算机平台,如附加的数据存储设备和打印设备。
进一步应当理解,因为附图中描述的部分组成系统部件和方法步骤可以实现为软件,系统部件(或处理步骤)之间的实际连接可能随本发明被编程的方法不同而不同。给出此处提供的本发明的启示,本领域的普通技术人员将能够想象出本发明的这些和类似的实现或配置。
参考图4,内存管理系统401可以同时支持多个应用(402、404、405)。即,内存管理系统401适合内存库的多个实例。应用程序可以直接与内存管理系统401接口,也可通过其它层如库服务器403接口。
管理内存系统的方法包括在多个应用之间共享物理内存中存储的数据缓冲器,其中所述数据缓冲器包含共享数据。内存管理器知道物理内存中存储的所有共享数据缓冲器。该方法包括根据所包含的共享数据识别一个给定数据缓冲器,其中创建给定数据缓冲器的创建应用指定一个标识符。该标识符对数据缓冲器的数据是唯一的,因此,如果两个应用试图创建同一数据的数据缓冲器,将产生同样的标识符。该方法包括判断所述标识符先前是否已被分配给一个共享数据缓冲器,一旦判断该标识符已经存在于物理内存中,则赋予所述创建应用访问该共享数据缓冲器的权力。
根据本发明的一个实施例,提供了内存映射对象类型和内存管理器对象类型。
内存映射对象使用内存映射的缓冲器分配内存。内存映射的缓冲器可以向任何其它内存缓冲器一样使用,例如被分配C语言运行时间的malloc或new函数,但此外内存映射的缓冲器提供其它优点。
不是被缺省操作系统的交换文件支持,每个内存映射的缓冲器由临时分页文件支持,该分页文件可以按照程序指定。这使得可以分配的内存比能够适合典型操作系统交换文件的多。内存映射对象还允许在不同盘上创建临时文件,其中总的分配内存可以与多个盘上可用的所有自由空间的总和一样多,如若干G字节。
内存映射的缓冲器可以在不同处理和/或应用之间共享。这对于在客户-服务器体系中的过程之间传递数据是很重要的,例如,见图5,其中不必制作数据的附加拷贝。
与其它内存缓冲器(如,被分配malloc或new的缓冲器)不同,根据本发明一个实施例的内存映射缓冲器可以按照程序溢出物理内存。
再参考成像应用的例子,当创建光栅或位平面对象时,在内部图像数据被存储在内存映射对象类型的例子中,其分配一个内存映射的图像缓冲器。一组配置参数(如,由操作系统提供)允许对参数的说明,如需要多少盘进行内存映射,每个盘可以用多少空间,以及临时分页文件将被创建的路径名称。
内存管理器对象的一个实例负责监视可用的自由物理内存,并用于当接近低内存状态时,将最远使用过的内存映射缓冲器溢出到盘。这样,内存管理器对象能够记录哪些图像缓冲器正被使用,哪些图像缓冲器最近没有被使用。通过利用活动/不活动缓冲器的知识,内存管理器对象可以选择哪些缓冲器被溢出,从而提供比利用如Windows NT虚拟内存管理器可获得的更高的分页效率。
内存管理器对象可以一次将整个内存映射图像缓冲器分页到盘,从而提供附加的自由物理内存。
内存管理器对象可以持续溢出,直到将期望的内存大小如若干M字节被页出到盘。因此,低内存状态之间的周期可以延长。
内存管理器对象可以在所有内存饱和之前将内存映射缓冲器溢出到物理内存之外,从而维持足够的内存,使得应用能够具有期望的响应时间。
一组配置参数允许规定在缓冲器被溢出之前自由物理内存的最小量,以及溢出缓冲器后需要恢复的物理内存量。
参考图5,内存管理器对象501包括由客户图像处理应用创建的所有内存映射对象的链接列表502、503、505。链接列表502保持排序顺序,从而最远使用的缓冲器总能在列表开头找到(如首先将被溢出的项目),而最近使用的缓冲器在列表末尾找到(如最后将被溢出的项目)。
用于保持链接列表为排序顺序的方法效率很高,且几乎不需要系统开销。链接列表不需要由排序操作重新安排,所涉及的操作仅仅是在列表的末尾添加或移去项目。通过实现下列步骤使链接列表保持排序:
只要创建一个图像缓冲器,则新分配的一个内存映射对象将其自己加到列表末尾,因为它很可能很快就被用到。
只要删除一个图像缓冲器,其对应内存映射对象自己从列表中去除,并将其父链接与子链接结合,因此,该列表在删除项目时不需要被遍历。
只要图像缓冲器要被使用,其对应内存映射对象被移到列表末尾,从而使其不易被溢出。然后检查总的自由物理内存,如果降到特定阈值之下,列表中的第一个项目被溢出到盘,并且在列表的末尾还移动。
这些步骤足以保证当前使用的图像缓冲器和刚刚被溢出的缓冲器在列表的末尾。在列表开头剩余的项目总是最远使用过的缓冲器。应当理解,可以预期其它保持链接列表的方法,本领域的技术人员可以理解这些其它方法的实现。例如,最频繁使用的链接列表。
内存映射对象允许应用在访问一个缓冲器时将其闭锁。该信息存储在对应于可以访问内存管理器对象的缓冲器的一个标记中。因此,根据这些标记,内存管理器知道哪些缓冲器当前被图像处理应用使用。利用指示缓冲器是否被使用的标记,内存管理器对象能够解映射当前不被使用的内存映射缓冲器,以减小应用的虚拟地址空间上的印记。该优化发生在请求一个不适合图像处理应用的可用虚拟地址空间的新的缓冲器时,该优化对于应用本身是透明的,允许寻址比处理器体系自然支持的更多的数据,如2G字节。
当内存管理器对象从应用的虚拟地址空间解映射一个缓冲器,并且随后当该缓冲器再次被访问时将其映射回去时,虚拟地址空间内的地址可能与创建该缓冲器时初始指定的地址不同。因此,需要将应用编程为不保持超过对应对象生存期的内存映射缓冲器地址,因为它们可能已经变得无效。但是,根据本发明的一个实施例,任何通过内存映射对象使用内存映射缓冲器的应用都可以得到关于缓冲器地址是否由于映射操作而改变的通知,从而应用能够保持最新的数据地址。
上述内存管理实施例也可应用于并行运行的图像处理应用,如图6和7所示。并行运行的应用使用内存管理器对象401的中央示例(instance),其管理所有应用的所有内存映射缓冲器的链接列表。关于哪些缓冲器被溢出以便优化可用物理内存的决定根据该全局列表作出。一旦选定最老的缓冲器被溢出物理内存,则通知所有持有这些缓冲器的索引的应用。这样,溢出指令需要由共享该缓冲器的所有应用发出。
为了允许直接访问而不需要附加的列表遍历或查表,需要在集中式内存管理和应用之间交换内存映射对象示例的地址索引。但是,直接访问这些地址存在万一对象示例同时被毁坏的情况下非法访问的危险。用于并行图像处理应用的内存管理的一个实施例可以将内存映射对象地址801与系统内存映射句柄802结合,以确认内存地址801的完整性,如图8所示。一旦应用接收到恢复句柄803,则地址指针801只在附加的系统内存映射句柄802在给定地址也能发现的情况下才被确认。
尽管通过标识符寻址远程对象导致管理标识符的列表时附加的开销,具体地是每次需要寻址一个对象时需要遍历该列表,但是通过用对象的内存地址在应用之间直接对其寻址,并利用一个密钥确认该内存地址,可以减少或消除该附加开销。该密钥提供附加的随对象而变化的信息,并且为发送者和接收者所知。在一个远程站点,对象的密钥需要存储在远程对象的内存地址内,例如,作为类成员变量或面向对象的编程语言中的域。当删除一个对象时,该密钥被一个缺省值覆盖,例如利用面向对象的编程语言中的类析构函数。将对象的内存地址801与密钥803组合成单个单元或可恢复句柄803允许以安全方式在逻辑或物理边界内直接寻址远程对象。在访问可恢复句柄803内存储的内存地址之前,该远程端判断来自可恢复句柄803的密钥803是否也在给定内存地址801出现。这只有对生存期尚未终止的对象才会发生。
密钥802可以是任意足够独特的字母数字值,例如,序列号、随机产生的数字、或与一个对象关联的系统资源的资源句柄。
以上描述了用于处理大数据体的虚拟内存系统和方法的实施例,应当注意,根据以上叙述,本领域的技术人员能够进行修改和变化,因此应当理解,可以对本发明的实施例进行变化,这包含在所附权利要求定义的本发明的范围和主旨内。这样利用细节和专利法要求的特性描述了本发明,所要求和期望专利保护的范围在所附权利要求中提出。