CN103620548B - 具有增强的应用元数据的存储器管理器 - Google Patents
具有增强的应用元数据的存储器管理器 Download PDFInfo
- Publication number
- CN103620548B CN103620548B CN201280030154.4A CN201280030154A CN103620548B CN 103620548 B CN103620548 B CN 103620548B CN 201280030154 A CN201280030154 A CN 201280030154A CN 103620548 B CN103620548 B CN 103620548B
- Authority
- CN
- China
- Prior art keywords
- memory
- application
- distribution
- main frame
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/70—Details relating to dynamic memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
- Memory System (AREA)
Abstract
本文描述了一种存储器管理系统,它从各应用接收描述存储器正被如何使用的信息并且允许应用主机对使用存储器的应用请求施加更多控制。该系统提供应用存储器管理应用编程接口(API),该API允许应用指定与存储器分配有关的有助于后来管理存储器的更多信息。该系统还提供以下能力:静态地和/或动态地分析传统应用以便向未被修改成与该系统一起工作的各应用给予参与更有效的存储器管理的一些能力。该系统提供应用主机改变以利用各应用所提供的信息并通过使用该信息和该应用的存储器使用中的勾连来更有效地管理存储器。由此,该系统提供用于管理存储器的新模型,它改进了应用主机行为并允许各应用更有效地使用计算资源。
Description
技术领域
本发明涉及计算机系统,更具体的,涉及计算机存储器管理技术。
背景技术
计算机系统中的存储器管理指的是多个应用和操作系统对存储器的使用达成一致的方式。虽然每一计算机系统具有固定量的物理随机存取存储器(RAM)或其他存储器,但操作系统可向各应用和各操作系统组件呈现表示与物理存储器不同的存储器大小的虚拟存储器。在一些情况下,虚拟存储器允许操作系统限制每一应用访问存储器的特定部分、阻止一个应用通过无意地或有意地修改另一应用的存储器来干扰该另一应用的操作。操作系统一般提供用于响应于应用和操作系统组件请求来分配并释放存储器的一个或多个功能。操作系统可向应用提供存储器池,该应用可从该池中分配存储器块。如果一应用使用或者一组应用一起使用比所安装的物理存储器的量更多的虚拟存储器,则操作系统可以在被称为分页或盘交换(即,向盘存储和从中取回存储器的各页)的过程中使用较慢的基于盘的存储来通过交换文件扩展存储器的表观大小。
除了所提供的分配和释放功能之外,操作系统对各应用如何使用存储器具有非常少的洞察。许多计算设备包含围绕存储器的特定限制。例如,移动计算设备可包括与在台式计算机系统上可用的存储器量相比小得多的存储器量(或系统可能想要解除某存储器的电力以降低能耗),从而产生对该设备的与多少应用可同时运行、每一应用可请求/消费多少存储器等等有关的限制。在特定计算系统内主存应用代码的其他计算环境也可对该环境的存储器使用施加限制或上限。诸如VMware和MICROSOFT TM Virtual PC、系统管理程序、操作系统以及其他的主机可分配到有限的资源。在所有这些情况中,有效的存储器管理变得更加值得注意。
新计算平台引入新技术或重新利用旧技术来解决各应用之间共享的存储器有限的问题。例如,移动电话操作系统可以创建每一应用的存储器快照,以使得在该应用不在前台(例如,被主动使用)时,操作系统将它关闭并将该应用的存储器的镜像储存在较慢存储上(例如,闪存或其他存储)。在该应用被选择时,操作系统将所存储的镜像重新加载到存储器并起动该应用。该应用可能甚至不知道它被关闭过。虽然这些技术是有用的,但操作系统仍然将遭受该应用对使用存储器的不透明请求的损害。当前,关于动态存储器使用作出的大多数决策是基于在运行时期间找到的信息来作出的。这样的信息的示例包括对所分配的存储器段的引用的大小和数量。这一信息随后可被用来确定哪些分配将被分页到盘,被高速缓存到高性能存储器,或被某种自动存储器管理系统释放。不幸的是,任何平台都受到可能多年的传统应用的限制,所以在与存储器管理一样宽广的区域中采用新模型是困难的。
发明内容
本文描述了一种存储器管理系统,它从各应用接收描述存储器被如何使用的信息并且允许应用主机对使用存储器的应用请求施加更多控制。当今,除了应用已作出了多少存储器请求和每一请求请求了多大的存储器之外,应用主机对该应用的存储器使用知之甚少。然而,应用主机不知道每一存储器分配的目的,哪些存储器分配将很快被使用,在应用主机需要更多存储器的情况下哪些存储器分配可被容易地重新创建,哪些存储器分配暂时不会被使用并且因此可被分页到盘而不影响该应用的性能,等等。不幸的是,虽然应用主机的任务是作出这些类型的决策,但应用拥有与有效作出这些决策有关的最多信息。
本存储器管理系统用若干方式克服了这些问题。首先,该系统提供应用存储器管理应用程序编程接口(API),该API允许该应用指定与存储器分配有关的有助于后来管理存储器的更多信息。该API还可向应用主机提供通知该应用何时需要存储器以及在需要时抢先释放并重新创建存储器分配而无需该应用的交互的能力。其次,该系统提供以下能力:在统计上和/或动态地分析传统应用以向未被修改成与该系统一起工作的各应用给予参与更高效的存储器管理的某能力。第三,该系统提供应用主机改变以利用各应用所提供的信息并使用该信息和该应用的存储器使用中的勾连来更高效地管理存储器。因而,本存储器管理系统提供用于管理存储器的新模型,它改进了应用主机行为并潜在地允许各应用更高效地使用计算资源。
提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的选择的概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
附图说明
图1是示出在一个实施例中的存储器管理系统的各组件的框图。
图2是示出在一个实施例中的存储器管理系统的操作环境的框图。
图3是示出在一个实施例中的软件应用内的存储器管理系统请求分配和使用存储器的处理的流程图。
图4是示出在一个实施例中的主机内的存储器管理系统接收分配和使用存储器的应用请求的处理的流程图。
图5是示出在一个实施例中的存储器管理系统分析没有被专门设计成提供存储器分配信息的应用的处理的流程图。
图6是示出在一个实施例中的存储器管理系统在统计上分析应用并提供增强的存储器信息的清单的处理的流程图。
图7是示出一个实施例中的存储器管理系统响应于检测到的存储器压力来采取与存储器有关的动作的处理的流程图。
图8是示出一个实施例中的存储器管理系统激活存储器先前已针对其被主机修改的应用的处理的流程图。
具体实施方式
本文描述了一种存储器管理系统,它从各应用接收描述存储器被如何使用的信息并且允许应用主机对使用存储器的应用请求施加更多控制。当今,除了应用已作出了多少存储器请求和每一请求请求了多大的存储器之外,应用主机对该应用的存储器使用知之甚少。然而,应用主机不知道每一存储器分配的目的,哪些存储器分配将很快被使用,在应用主机需要更多存储器的情况下哪些存储器分配可被容易地重新创建,哪些存储器分配暂时不会被使用并且因此可被分页到盘而不影响该应用的性能,等等。不幸的是,虽然应用主机的任务是作出这些类型的决策,但应用拥有与有效作出这些决策有关的最多信息。这一冲突当今是通过应用主机提供基本水平的功能并猜测要采取哪些动作来解决的。在许多情况下,应用主机可能恰好在应用需要存储器之前将该存储器分页到盘,或者应用主机可能花费大量努力来管理对应用几乎不重要的存储器。
本存储器管理系统用本文进一步讨论的若干方式克服了这些问题。首先,该系统提供应用存储器管理应用程序编程接口(API),该API允许该应用指定与存储器分配有关的有助于后来管理存储器的更多信息。该API还可向应用主机提供通知该应用何时需要存储器以及在需要时抢先释放并重新创建存储器分配而无需该应用的交互的能力。其次,该系统提供以下能力:在统计上和/或动态地分析传统应用以向未被修改成与该系统一起工作的各应用给予参与更高效的存储器管理的某能力。第三,该系统提供内核级操作系统(或主机)改变以利用各应用所提供的信息并通过使用该信息和该应用的存储器使用中的勾连来更高效地管理存储器。因而,本存储器管理系统提供用于管理存储器的新模型,它改进了应用主机行为并潜在地允许各应用更高效地使用计算资源。如本文所描述的,应用主机可指执行应用的操作系统或另一类型的主机(例如,本身在操作系统或虚拟化子系统上运行的应用),如SILVERLIGHT TM、.NET所提供的运行时,本机Win32主机,或VMware和虚拟PC所提供的其他主机或虚拟机。以上介绍的这三个区域中的每一个在以下各节中进一步详细描述。
经修改的应用
在许多情况下,软件开发人员修改软件应用以与存储器管理系统进行交互是可能的。对于主动开发的应用,软件开发人员可选择采用存储器管理系统来获得它所提供的益处,或可被该应用在其上操作的特定平台强制采用存储器管理系统。在许多情况下,应用可能保持该应用不可能使用的存储器的分配。例如,在用户从该应用的用户界面的一部分转移到另一部分时,该应用可保持来自先前界面的信息以防万一用户重新访问该界面。当今,该存储器的需要程度在主机看来就与其他主动使用的存储器一样。存储器管理系统提供了供应用将诸如此类情形通知给主机以使得这类存储器可被降低优先级的方式。作为响应,主机可将这类存储器选为分页的良好候选或由于来自应用的添加信息而作出更高效的其它存储器管理决策。
在一些实施例中,存储器管理系统提供应用编程模型或框架,该应用编程模型或框架使存储器管理器能够作出关于优化运行时期间的存储器使用的智能决策。这可通过利用接收用于分配和填充被指定给应用请求的任何给定存储器对象的存储器分配的元数据和动作两者的应用编程模型/框架来完成。元数据提供应用想要传递给主机的描述存储器分配的性质或目的的信息,诸如存储器的优先级、正被分配的存储器的数量、从头重新创建存储器内容的容易度(例如,这些内容可以从文件加载或者可通过算法来计算)、访问频率、应用可能多久以后使用存储器,等等。用于分配和填充存储器的动作可以向主机提供足够的信息以使得能够释放存储器并且随后应应用的请求重新创建所释放的存储器。通过允许开发者指定用于填充存储器的元数据和动作,存储器管理系统能够与应用所指定的所需使用一致地优化存储器使用。
存储器管理系统提供给应用的API为应用开发者提供了通过应用框架或编程模型来指定描述对存储器分配的使用的元数据的手段。另外,该API允许应用框架规定开发者利用标准手段来通过公知的功能填充或修改存储器。这允许存储器管理系统出于性能原因不失时机地填充存储器,以便在低存储器可用性时段期间(即,在释放存储器的机会成本大于后来重新分配和重新填充存储器的成本时)释放存储器。
优化存储器使用可涵盖本领域内已知的许多技术,但将一般意味着针对性能或大小而进行优化。在性能的情况下,优化可能意味着在完成存储器分配的手段可用的情况下允许进行尚不需要的存储器分配。这在当前CPU使用率较低且应用空闲的情况下可以是合乎需要的。在某些情况下,应用分配存储器的请求可变成主机存储的笔记以供将来参考,而不在此时进行任何分配。后来,当应用通过API请求使用存储器时或者在主机确定完成该请求的合适时间时,存储器管理系统实际分配所请求的存储器。在大小的情况下,优化可能意味着减少存储器占用或基于当前分配的存储器和未来存储器需求来作出决策。
应用和主机之间的实际接口可采取本领域内的普通技术人员将会认识到的各种形式。例如,应用可以为每一种类型的分配提供分配函数并在分配请求中向主机传递针对该分配的指针或引用。当主机准备好执行分配时,主机调用所提供的分配函数并且应用使用常规存储器分配函数来创建存储器。类似地,应用可传递对其它函数的引用以使得主机能够请求释放存储器、移动存储器、将存储器内容切换至不同类型的存储,等等。相同的概念还可用于分配,当应用向操作系统请求存储器时,操作系统可基于多个因素来延迟分配。当操作系统准备好分配时,(用所分配的存储器)回调函数引用或者引发一事件(或类似机制)。该接口还可接收元数据,诸如存储器大小(其可以不同于所请求的大小)、优先级、高速缓存偏好、可分页性、如何填充存储器、对存储器的依赖或引用、是否更新存储器,等等。在一些实施例中,系统提供分配从中导出以定义每一种类型的存储器分配的存储器接口类。该类可包括用于检索应用指定分配函数的GetPointer函数或用于检索执行其它存储器处理任务的函数的其它GetX函数。另选地或另外地,应用可以按传统方式进行分配并且然后调用RegisterPointer函数,该函数向主机注册所分配的存储器并指定要与所分配的存储器相关联的本文描述的附加信息。以下伪代码提供了应用可使用的一个存储器类的示例。
CMemChunk//所有存储器分配的基类
另选地或另外地,开发者可使用源注释语言(SAL)或其它标记来将本文描述的框架引入应用代码,以标识现有存储器分配并且指定与每一次分配、访问或其它存储器交互相关的附加参数和元数据。
在一些实施例中,存储器管理系统可以在单个应用中操作并且不与内核或其它主机共享。应用能够受益于其自己的内置存储器管理器能够用通过使用本文描述的框架提供的附加信息来执行的改进的存储器管理。在某些情况下,主机然后可提供注册函数,应用可调用该函数来获得跨应用益处并允许主机也使用明确定义的存储器分配和使用。作为示例,该系统可以在恶意软件扫描之前通知应用,以使得该应用能够卸载任何较不相关的存储器以加速扫描。作为另一示例,应用可以在CPU去往空闲状态之前预先分配存储器,以使得应用能够在用户做了某件事并且CPU恢复执行时快速响应事件(增强对功率状态改变的响应性)。
未经修改的应用
在软件开发者不可能将软件应用修改成与存储器管理系统交互或者该系统未被实现为与未经修改的应用(即,未被专门设计成与该系统一起工作的应用)一起操作的情况下,该系统仍然可能提供存储器管理益处。为此,该系统收集描述应用如何使用存储器自身的信息(例如,基于静态分析和/或剖析应用-使应用运行、截取存储器分配以及查看跨应用运行时的使用)。该信息在确定性能特性时是有用的,并且可由应用主机的存储器管理器来智能地使用。可使用该信息的方式的示例包括智能垃圾收集、到盘的智能分页、到更高性能的存储器高速缓存的智能高速缓存以及甚至关于应用可能遇到的潜在存储器限制警告用户。
利用对二进制码的静态分析、对二进制码的行为的运行时分析以及通过对二进制码进行插装,收集到关于二进制码的给定存储器分配中的任一个以及对这些分配的使用的附加信息是可能的。该信息然后可被用来围绕物理存储器中的分配的加载/卸载和定位驱动更智能的行为。存储器管理系统提供了用描述对分配本身的潜在或实际使用的元数据来自动注释应用存储器分配的手段。该分析可以自动地对二进制码静态地或在运行时期间动态地执行,而不需要任何开发者交互或重新创作现有应用。一旦执行,该分析就可被系统高速缓存以使得主机操作系统知道将来如何处理应用。该分析还可被发布以供其它客户机发现,而不仅仅被本地地高速缓存。另外,信息可能被展示给用户以供可任选的编辑,从而允许管理员或用户定制应用的元数据以及应用主机将如何处理应用的存储器分配。
可能使用静态和动态分析来导出关于应用的存储器分配的附加信息,并且该信息然后可被用来帮助引导应用和系统存储器分配的总体管理。示例是在存储器正被触碰时;有可能确定是否使用另一存储器段来帮助填充该存储器分配。如果该存储器分配然后取决于另一分配,则可指示该依赖关系,或者通过一比特来标记该存储器分配即可,以指示该存储器分配不是在没有输入的情况下生成的。静态分析可确定软件代码在何处触碰到存储器,如何使用存储器、如何填充存储器、代码路径有多常见(例如,它是否是一次写多次读的(WORM))以及使用存储器的频率。动态分析可以对所有分配和/或访问进行插装(类似于剖析器)并且可捕捉系统环境对代码操作的影响、影响操作的用户设置以及不可用或难以静态地确定的其它数据。
在一些实施例中,存储器管理系统在已分析应用后输出应用的存储器使用的清单或其它描述。这允许系统高速缓存分析结果并重用结果以便将来执行应用。在应用二进制码第一次执行时(或者在像应用虚拟化的序列化的过程期间),操作系统可被设计成与系统一起执行该分析并且然后存储该分析以便在每一次二进制码执行时使用。内核或其它主机可读取清单数据并通过描述应用如何使用存储器的附加信息来采取适当动作。应用使用可随时间变化,以使得该清单或其他高速缓存有时可被动态更新。在某些情况下,该系统可以为每一分配分配整页存储器,以使得每一次存储器访问都触发页面错误,该页面错误允许内核控制如何使用存储器并提供此处进一步描述的对存储器的应用引用以及实际存储器分配之间的这种类型的间接性。
在一些实施例中,该系统可提供关于应用存储器行为的报告。这是分析的另一种用途并且可帮助管理员作出关于应用的决策,诸如应用将在哪一个服务器或虚拟机上良好地运行。该系统还可提供对存储器使用的市场评级,以使得移动电话应用商店的用户例如能够在下载应用之前知道该应用将如何使用移动电话的可用存储器(例如,高度使用、低度使用等)。管理员还可使用该信息来基于收集到的关于存储器消耗的元数据进行跨各种系统的IT软件部署。
存储器管理系统可使用从存储器使用分析中导出的信息来在系统空闲或未被充分利用时预先分配存储器并且可能填充该存储器。知道应用在将来对存储器的使用允许系统更高效地分配存储器并利用系统未被充分利用的时间来分配可以在系统处于更重负载时使用的存储器。这允许更重的负载具有对由于早先完成的工作而变得可用的更多处理或其它资源的访问权。
主机修改
存储器管理系统包括对内核或应用主机的修改以接收由应用提供的或通过对应用的分析来确定的关于存储器使用的附加信息。与传统软件存储器管理不同,由于本文描述的元数据以及传递自应用的其它信息提供的对存储器使用的增加洞察,内核可以对在没有应用知识或动作的情况下高效地管理存储器做更多。内核可以后来通知应用已采取什么动作或者管理存储器以使其在应用需要该存储器时就位,从而使得应用不知晓或不关心内核的存储器相关动作。内核然后可执行更好的分页(例如通过将较不重要的或不太可能使用的存储器卸载到较慢的盘存储),可以在出现存储器压力时释放存储器,并且可以采取其它动作来代表使用该内核提供的操作环境的一个或多个应用管理存储器。例如,内核可以更好地分配存储器以实现较少的碎片。
存储器是操作系统中的受限资源;因此,内核适当地跟踪存储器被分配在何处以使其能够在需要时从应用恢复存储器是重要的。一个解决方案是在向应用分配存储器时使应用向存储器分配优先级。由此,当系统确定存储器较少时,内核可确定优先级最低的存储器在何处并解除对该存储器的分配或对该存储器进行分页,而不影响具有优先级较高的存储器的其它应用的执行。
传统上,存储器的优先级及其到各应用的分发由内核确定。当系统运行到存储器较少时,内核可以任意地释放被应用使用的具有较高优先级的存储器,由此使应用的执行中断或降级。相反,优先级较低的存储器本应首先被解除分配。存在与内核如何确定从哪一个应用释放存储器相关的有趣方面。一个解决方案是使应用在其本身中确定对于存储器资源的优先级次序是什么。存储器优先级方案要求应用分配在分配或解除分配时所分配或解除分配的存储器的优先级。由此,当存在存储器压力时,内核具有按优先级排名的存储器地图,并且可以首先释放和定位优先级较低的存储器。或者,内核可以向应用发送具有需要被释放的分配的列表的通知。存储器管理系统可由操作系统来完全主存,或者可以在操作和应用之间协作。
优先级模型可通过创建只要在作出存储器请求时就封装应用的存储器分配API来实现。这也可使未注册的应用受益。通过利用该API,应用和优先级由子系统来自动跟踪,而不使得应用主动管理存储器优先级。内核对象结合注册、计算、信令和存储器管理功能中的全部,以使得每一个应用都只需调用该对象(或者在未经修改的应用的情况下代表应用调用该对象)。
一种替换解决方案是使主应用在内核之外,该主应用被用来跟踪当前正在运行的各种应用。当应用请求存储器时,这些应用被注册到主应用。由此,当应用变成不响应时,主应用可确定是否要清除该僵尸应用以回收存储器或者使该僵尸应用保持挂起以使得可以在需要存储器时将存储器返回给该应用。
内核或主机可使用增强的存储器信息来更高效地作出各种存储器管理决策。例如,低功率设备的内核可选择关闭存储器排以节省电池寿命。该系统可清除或换出使存储器排中的存储器关闭的进程。系统还可整理分布在若干排上的存储器的碎片以取得可被关闭的一些空排。作为另一示例,内核可选择将一些存储器分配推送到其它设备(包括基于云的存储设施)。许多占用量较小的低功率操作系统不具有分页概念,因此在这种情况下可通过由另一设备/服务主存的代表性状态传输(REST)接口来支持存储器分配。以与滚动通过数据库快照类似的方式,应用在存储器中不具有整个数据库,而是将各数据库片段从数据库服务/服务器传递给该应用。该应用不知道它们正在查看快照而不是整个数据库。能够确信地四处移动存储器或解除存储器分配允许内核/主机更好地管理存储器并且仍然维持应用对存储器可用性的期待。
在一些实施例中,该系统与除了存储器之外的其它主机级对象或组件一起使用。例如,该系统可以在显示器关闭时关闭图形处理单元(GPU),或者在与各驱动程序相关联的硬件未被使用或将在某一时间内不使用时关闭各驱动程序。该系统还可用于系统休眠,以便首先整理存储器碎片并且然后将线性的存储器分配流流传输到可以在系统被唤醒时容易地重新加载的盘。与存储大小等于整个物理存储器的文件的传统休眠不同,该存储器管理系统可鼓励应用在休眠之前释放不需要的或容易恢复的存储器(或者可以为这些应用这样做),并由此可存储较少的休眠数据量。除了存储器之外的其它被管理的项目可包括文件句柄、计时器、内核对象等。该系统可以就像存储器使用那样接收关于这些项目的使用信息(或者从静态和动态分析中确定该信息)。
在一些实施例中,存储器管理系统接收与每一次存储器分配相关联的功率状态。例如,在功率级别X,系统可确定不再需要某些存储器分配。这可允许电池受限设备通过下载在该功率级别不需要的任何存储器来切换至较低功率模式。例如,移动电话可以在存储器中保存足够的应用数据来响应电话呼叫或向用户警告新电子邮件,但可以卸载其它优先级较低的功能或应用。在某些情况下,应用可能只需在某些较低功率状态中在使用存储器之前验证指针有效性,而在较高功率状态中可具有对存储器的正常访问权。这可被提供为应用和用于任何给定平台的主机之间的契约保证。
系统组件和操作环境
图1是示出在一个实施例中的存储器管理系统的各组件的框图。系统100包括元数据接收组件105、填充规范组件110、分配请求组件115、存储器引用组件120、应用接口组件125、静态分析组件130、动态分析组件135、主机组件140、请求接收组件145、请求存储组件150、分配组件155、存储器动作组件160和数据存储组件165。这些组件中的每一个都在此处进一步详细讨论。
元数据接收组件105、填充规范组件110、分配请求组件115和存储器引用组件120一起构成系统100展示给应用的存储器框架。希望修改他们的应用代码以实现更高效的存储器管理的开发者可利用来自他们的应用的这些组件来创建允许主机或内核代表应用来更有效地管理存储器的应用。
元数据接收组件105接收与每一次存储器分配相关联的信息,该信息向应用主机提供描述应用如何使用存储器的信息。例如,该元数据可指示对于应用而言分配应可以多容易地访问或者应用计划多频繁地访问与该分配相关联的存储器。该元数据还可指示存储器内容有多难以生成,并由此对于应用或主机而言在内容被释放或分页到盘的情况下替换存储器内容有多难。元数据接收组件105可以在对存储器分配API的调用中接收元数据或者在存储器已经在用于提供元数据的后续API中分配之后接收元数据。
填充规范组件110接收描述如何填充特定存储器分配的内容的信息。存储器内容可来自各种源,诸如来自读取存储在盘上的文件内容、来自对输入数据执行一个或多个计算、来自用户输入、来自网络访问的信息(例如,数据库或因特网)等等。在一些实施例中,应用向主机传递存储器填充函数以使得主机能够调用该函数来在该主机确定的时刻填充存储器内容。为了高效地使用处理和其它资源,主机可选择延迟填充存储器直到资源未被充分利用或空闲。另外,主机还可自由地释放或解除先前填充的存储器以作他用,并且然后后来在应用期望使用存储器之前重新分配并重新填充该存储器。接收到的元数据可提供主机用来知晓应用将何时使用存储器的信息,或者应用可以在每一次试图使用存储器之前通知主机以使得主机能够检查存储器的当前状态。
分配请求组件115将来自应用的请求提交给主机以便基于接收到的元数据和填充规范来分配存储器。注意,尽管主机接收请求,但是立即服务该请求以作为响应还是等待直到另一适当时刻是主机的自由。在极端情况下,主机可能不分配任何存储器直到存储器准备好被访问,从而允许主机节省有限的资源直到应用需要存储器且必须为该应用分配存储器以能够执行其任务的最后可能时刻。分配请求组件115将所提交的请求存储在由主机管理的数据存储中,并且包括接收到的元数据和填充规范以便在后来的存储器管理动作中使用。
存储器引用组件120在应用访问作为先前提交的分配请求的对象的存储器之前从应用接收指示。因为主机可使存储器不可用或延迟实际分配存储器直到它选择,所以应用需要确保存储器在应用准备好使用它时可用的方法。存储器引用组件120服务于该目的,并且允许应用指示它准备好访问特定存储器分配。作为响应,主机可以向应用传递对实际存储器位置的指针(如果该存储器已经可用的话),或者可基于接收到的填充规范和元数据来创建和填充存储器(如果该存储器当前未被分配的话)。应用可发送释放存储器的指示以使得主机在存储器管理决策中自由地再次包括该存储器。
应用接口组件125提供应用和主机之间的通信接口以协商对存储器分配的使用。该接口可包括被应用用来请求存储器分配并指定关于分配的信息的一个或多个函数或基类,以及被主机用来使用应用所提供的用户定义的函数来与应用的存储器交互的函数或基类。应用和主机之间的增强通信允许主机具有对应用的存储器使用的比正常水平高得多的可见性,并允许主机代表各种应用管理存储器以便更有效地共享有限资源。
对于未被专门构建成使用存储器管理系统100的应用,应用接口组件125提供通过静态和/或动态分析来确定的任何插装的应用代码之间的交互,并以与以上讨论相似的方式与主机交互。在未被构建成使用系统100的应用的情况下,系统100可具有关于存储器分配的目的或其它规范的较少信息,并且可被限于系统100可通过对应用的静态和动态分析来发现的信息。然而,这样的分析仍然可发现可用于更有效地管理传统应用分配的存储器的元数据。在某些情况下,系统100能够自动检测应用正如何填充存储器并且能够在没有应用的显式协作的情况下执行上述相同种类的存储器内容按需填充。
静态分析组件130静态地分析应用二进制码或其它应用代码以确定应用如何使用存储器。组件130可分析二进制代码、中间代码(例如,MICROSOFTTM中间语言(IL)代码)或应用的其它经编译或可运行版本。静态分析在过去几年中进步显著,并且用于确定应用二进制码做了什么以及怎么做的许多技术在本领域内是公知的。存储器管理系统100使用这些技术来专门聚焦于应用分配和使用存储器的区域。组件130可以对应用二进制码进行插装以接收信息或截取应用的特定动作并且可以用新或另外的动作来替换所截取的动作。例如,如果组件130发现对存储器分配函数的调用,则组件130可收集可以从静态分析中获得的任何元数据并且调用可接收到元数据作为参数的分配函数版本。以此方式,主机就像应用被其开发者修改为提供元数据信息那样从应用接收这样的信息。同样,系统可确定应用如何填充或访问特定存储器分配,以使得可以向主机提供描述存储器引用的填充规范和信息。
动态分析组件135动态地分析正在运行的应用以收集难以用静态分析来确定的关于该应用对存储器的使用的附加信息。应用经常包括阻扰静态分析的编程步骤(有意地或者只是因为这些步骤以阻扰静态分析的方式出现)。动态分析具有可用信息,诸如从外部组件接收到的响应的内容以及由应用使用的存储器的实际内容,对于这些内容在静态分析期间只能进行猜测或逼近。由此,动态分析可以找到在静态分析期间找不到的存储器使用和其它应用活动。组件135还可使用动态分析来确认静态分析的结果。动态分析组件135向主机提供所确定的信息以便进一步允许传统应用利用系统100提供的至少一些功能。
主机组件140包括应用在其中运行的环境并提供对系统100提供的存储器管理的访问。取决于该平台,主机可包括各种软件实体。对于传统的桌面计算系统,主机是操作系统,该操作系统可包括内核或其它内核模式软件代码,诸如驱动程序。对于托管软件环境,主机可包括运行时环境,诸如MICROSOFTTM.NETTM运行时环境或MICROSOFTTM SILVERLIGHTTM运行时环境。web应用也可包括应用主机并且可以在沙箱环境中运行,该沙箱环境在其它服务器或桌面计算环境中运行。服务器计算系统可包括虚拟化硬件或软件并且可包括在比一个或多个操作系统内核更高的层级操作的管理程序。存储器管理系统100可被实现为各种层级的软件代码并由此不限于任何特定类型的主机。主机组件140表示负责与应用交互并管理用于系统100在其上运行的特定平台的资源的组件。
请求接收组件145、请求存储组件150、分配组件155和存储器动作组件160一起构成被修改成实现本文描述的系统100的存储器管理器的组件。
请求接收组件145从应用接收分配存储器的请求。每一个请求包括向主机提供描述应用如何使用所分配的存储器的信息的元数据。请求接收组件145可以从在特定主机上运行的多个或所有应用接收请求,以使得主机具有描述如何使用存储器的大范围的信息。主机然后可排定在决定采取特定动作(例如,分页或释放存储器以减小存储器压力)时影响哪些分配的优先级。
请求存储组件150存储接收到的请求及相关联的元数据信息以供后续在存储器管理决策制定期间使用。主机可以在接收到请求时满足或不满足分配请求。然而,无论主机是立即还是后来满足请求,主机都与分配相关联地存储应用提供的信息,以使得主机后来在存储器动作是适当的时候具有可用信息。在一些实施例中,主机在应用已经分配存储器后在与应用分开的通信中接收到元数据和其它信息。在这些情况下,主机可以在多个时刻或者在有用信息可用时存储分配信息。
分配组件155执行分配存储器的实际动作,以满足接收到的一个或多个应用分配请求。分配组件155可分配来自应用堆或直接来自计算机系统中安装的可由主机访问和管理的物理存储器的存储器。在分配后,存储器被托付给特定应用并且无法由其它应用使用(除非这些应用通过典型的共享存储器技术来请求这样做)。分配组件155可以与页表和虚拟存储器一起工作以便将窗口提供到供分配的物理存储器中,并且所提供的存储器可由盘或其它存储通过交换文件来备份。
存储器动作组件160执行管理设备上的存储器的动作并访问先前存储的接收到的请求信息以确定将受到所执行动作的影响的一个或多个合适的存储器分配。动作可包括将存储器内容交换到交换文件、释放先前分配的存储器、请求应用减少其存储器占用、或者影响一个或多个应用使用的存储器的任何其它动作。通常,主机执行存储器管理动作的目的是处理诸如存储器不足(例如,存储器压力)等当前或即将发生的情况、收集足够的存储器来满足应用需求,等等。
数据存储组件165存储被主机用来代表一个或多个应用管理存储器的信息。数据存储组件165可包括留给系统100使用的存储器、单独的闪存或盘存储或用于存储数据的其它设施。数据存储组件165还可包括被存储在每一个应用的存储器空间中的跟踪涉及该应用的分配的数据以及被主机用来代表该应用管理存储器的其它信息。
其上实现存储器管理系统的计算设备可包括中央处理单元、存储器、输入设备(例如,键盘和定点设备)、输出设备(例如,显示设备)和存储设备(例如,盘驱动器或其他非易失性存储介质)。存储器和存储设备是可以用实现或启用该系统的计算机可执行指令(如软件)来编码的计算机可读存储介质。此外,数据结构和消息结构可被存储或经由诸如通信链路上的信号等数据传输介质传送。可以使用各种通信链路,诸如因特网、局域网、广域网、点对点拨号连接、蜂窝电话网络等。
该系统的实施例可以在各种操作环境中实现,这些操作环境包括个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、数码照相机、网络PC、小型计算机、大型计算机、包括任何上述系统或设备、机顶盒、片上系统(SOC)等中任一种的分布式计算环境等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、个人计算机、可编程消费电子设备、数码相机等。
该系统可以在由一个或多个计算机或其他设备执行的诸如程序模块等计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。
图2是示出在一个实施例中的存储器管理系统的操作环境的框图。该环境包括内核/主机210、一个或多个应用220、存储器处理框架230、所存储的分配元数据240、以及一个或多个工具250。内核/主机210管理一个或多个应用220所共享的存储器。存储器处理框架230提供应用220可调用以分配存储器并提供存储器分配元数据的一个或多个API。存储器处理框架230存储接收到的元数据240。工具250操作未被设计成在本机提供分配信息的各应用以通过静态和动态分析来提取这一信息。任何所提取的信息随后被存储作为分配元数据240。
系统操作
图3是示出在一个实施例中的软件应用内的存储器管理系统请求分配和使用存储器的处理的流程图。
在框310开始,应用设置描述应用将如何使用存储器分配的分配元数据。根据本文描述的存储器管理系统,该应用可构建用于传递给分配函数的参数结构,调用用于提供分配元数据的API,或设置用于分配存储器的所导出的类的参数。分配元数据可包括存储器对于该应用的优先级、该应用有多频繁地计划使用所分配的存储器、该应用有多困难替换该分配的内容、以及与该应用对存储器的使用和主机可如何操纵该存储器来高效地使用多个应用所共享的物理存储器资源有关的其它信息。
在框320继续,该应用设置填充该存储器分配的内容的存储器填充函数。存储器填充函数可以访问来自文件的信息,执行一个或多个计算以生成储存在该存储器分配中的结果,或执行填充该存储器分配的其他动作。通过向主机提供存储器填充函数而非正好在分配之后调用填充函数,该应用向主机提供按需释放和重新填充存储器所需的信息或推迟存储器的分配和初始填充直至对该主机更适当的时间所需的信息。
在框330继续,该应用调用主机所提供的管理跨多个应用共享的物理存储器的分配接口,其中该应用经由该分配接口向主机提供设置分配元数据和存储器填充函数。该应用接口可包括操作系统API、运行时函数、或在该应用和负责存储器管理的主机之间传递信息的其他方式。该分配接口提供比当今存储器分配中通常所提供的信息更多的信息,并且给予主机对更高效地管理计算设备上的存储器有用的信息。
在框340继续,该应用响应于调用分配接口而接收引用,其中该引用担当该应用对所分配的存储器的后续使用的间接标识符。在接收到请求之后,主机可以或可以不立即分配存储器。另外,主机有时可按在应用使用存储器之前主机需要再次接收控制的方式修改该存储器(例如,释放它、将它分页到盘,等等)。因而,主机向该应用提供对存储器的引用,并且在该应用想要使用该存储器时,该应用提供该引用以得到对该存储器的直接访问(例如,指针)。
在决策框350继续,如果该应用检测到该应用对所分配的存储器已使用完毕,则该应用完成,否则该应用在框360继续。在完成之前该应用可调用分配接口以解除分配(即,释放)先前分配的存储器。如果该应用没有使用该存储器,并且主机实际上没有分配该存储器,则这一动作可简单地清理主机的所存储的与该分配有关的条目并将控制返回给该应用。
在决策框360继续,如果该应用检测到该应用中对所分配的存储器的使用,则该应用在框370继续,否则该应用循环到框350以等待存储器访问或该存储器分配的目的的完成。该应用可在应用软件代码中访问存储器的任何位置处调用特定函数,或可将存储器分配封装在用对主机的适当调用来包装存储器访问的类中以使得存储器可用。
在框370继续,该应用向主机请求直接访问存储器分配。如果主机已经分配了存储器,则主机向该应用返回可访问该存储器的指针。如果主机尚未分配存储器或已经解除分配并重用了该存储器,则主机响应于应用请求来分配存储器,调用接收到的填充函数来填充存储器内容,并随后将访问该存储器的指针或其他装置返回给该应用。
在框380继续,该应用通过从主机接收到的存储器地址来访问存储器分配。该应用可修改存储器,从存储器读取信息,或执行其他典型的存储器操作。在该应用完成访问该存储器时,该应用可向主机指示该主机可再次执行使得该存储器不可用的管理操作。该应用可更新填充函数所使用的数据以使得在主机再次重新填充该存储器的情况下,该存储器将包括最新改变(如果有的话)。在框380之后,这些步骤结束。
图4是示出在一个实施例中的主机内的存储器管理系统接收分配和使用存储器的应用请求的处理的流程图。在框410中开始,主机接收来自应用的存储器分配请求。主机可对来自多个应用的请求进行服务,并且可包括在运行于主机平台上的多个应用之间划分或共享有限的物理存储器的存储器管理器。存储器分配请求可包括诸如所请求的存储器大小或与所请求的存储器相关的其他参数等信息。
在框420继续,主机接收指定该应用计划使用所请求的存储器分配的方式的存储器分配元数据。该元数据可包括诸如存储器分配对该应用的重要性或优先级、该分配是否适于分页到盘、在主机必须释放该分配的情况下该应用是否可恢复该存储器的内容等信息。
在框430继续,主机从该应用接收可被主机调用来填充所请求的存储器分配的内容的存储器填充函数。具有用于填充该存储器分配的手段允许主机在主机需要释放该存储器分配以满足另一应用请求或释放其他存储器压力的情况下推迟该存储器的分配以及恢复该存储器。
在决策框440继续,如果主机确定主机可响应于该请求直接分配存储器,则主机在框450继续,否则主机在框460继续。主机可基于该应用指示存储器对该应用有多重要以及该应用计划多么频繁地访问该存储器来确定是否直接分配该存储器。主机还可考虑其他因素,如在请求的时刻主机在其上运行的计算设备有多繁忙。
在框450继续,主机从主机可用的物理存储器中分配所请求的存储器。主机可设立被该应用用来访问物理存储器的页表或其他虚拟存储器。传统主机直接响应于应用请求来分配存储器,或者在主机不能满足该请求的情况下使该请求失败。然而,本存储器管理系统可以推迟请求或执行其他存储器管理动作以更高效地使用存储器和其他主机资源。
在框460继续,主机存储接收到的请求以供后来与接收到的元数据和填充函数一起分配。主机可维护各应用所请求的存储器的数据存储,在需要存储器管理动作(如使得更多存储器可用)时从该数据存储中进行选择。该应用所提供的元数据帮助主机确定哪些应用和应用内的分配将受到主机的存储器管理动作的最少负面影响。在框460之后,这些步骤结束。
在一些情况下,应用的开发人员不愿或不能作出改变以支持新操作系统特征。在这样的情况下,本存储器管理系统仍然能够通过分析应用二进制信息以发现与存储器分配有关的信息来提供一些增强的存储器管理,如参考图5和6进一步描述的。
图5是示出在一个实施例中的存储器管理系统分析未被专门设计成提供存储器分配信息的应用的处理的流程图。
在框510开始,该系统检测应用,其中描述该应用所作出的存储器分配的信息是不可用的。该应用可在其二进制模块上包括指定该应用是否参与本存储器管理系统所提供的存储器模型的标志或其他信息,或可以提供另一指示。该系统可将先前确定的应用分配信息高速缓存以使得对每一应用的分析只被执行一次。因而,在这一步骤中,该系统还确定该分析先前尚未被执行。
在框520继续,该系统对该应用执行分析以确定该应用所作出的存储器分配。该分析可包括对该应用的各种形式的静态和/或动态分析。静态分析在不运行该应用的情况下发生,并调查该应用的二进制代码以确定该应用的行为。动态分析在该应用正在运行的情况下发生,并调查该应用的存储器内代码、数据结构、以及其他信息以确定该应用的行为。该系统可寻找对用于分配、访问、以及释放存储器的特定主机API的调用,并且可记录位置、周围补充信息、用于填充所分配的存储器的各步骤,等等。
在框530继续,该系统将该应用勾连以在该应用内的该应用分配存储器的各位置处提供分配信息。各种形式的应用勾连技术是可用的,如MICROSOFT TM Detours以及其他,它们允许重定向应用二进制代码以在该程序的任何点处截取或扩充应用的标准行为。例如,该系统可以提供调用用于提供分配元数据的分配函数而非调用该应用最初调用的不带有元数据的标准分配函数的应用勾连。
在框540继续,该系统从该应用接收分配存储器的请求和经勾连的应用代码所提供的相关联的分配信息。该请求由主机接收,主机能够确定该分配信息来自未被专门设计成提供分配信息的应用。对这样的应用而言,主机可与对被设计成与该系统一起工作的应用不同地操作。例如,主机可虑及未被设计成与该系统一起工作的应用所提供的可能更少的信息。在一些实施例中,为了鼓励采用新存储器模型,该系统可以通过在存储器压力发生时偏好将不依附新存储器模型的应用的数据交换到盘或执行其他存储器管理动作来惩罚这些应用。在框540之后,这些步骤结束。
图6是示出在一个实施例中的存储器管理系统静态地分析应用并提供增强的存储器信息的清单的处理的流程图。
在框610开始,该系统接收不与对存储器分配函数的调用相关联地提供存储器分配信息的已编译应用代码。该系统可在运行应用的第一次请求时、在来自计算设备的硬盘驱动器或其他存储的扫描的批量处理期间、或响应于特定用户或管理员请求,来接收应用代码。已编译应用代码可包括针对特定处理器(例如,x86或x64二进制代码)的二进制代码、针对特定运行时的中间语言代码、或其他形式的非源应用代码。在源可用时,该应用可被直接修改以使用该系统,如本文其他部分所述的。
在框620继续,该系统对接收到的应用代码执行静态分析以确定该代码内该应用分配存储器的位置。静态分析可以寻找对存储器分配函数的调用,如通过导入的模块或其他手段。在一些情况下,静态分析擅长找出函数调用以及所传递的参数。在一些实施例中,该系统用动态分析来扩充静态分析,并运行该应用以标识不能静态地获得或不能容易地静态地检测的信息。
在框630继续,该系统标识所分析的应用代码中的一个或多个存储器相关的代码动作。代码动作可包括存储器分配、存储器访问、存储器释放、或其他存储器操作。该系统可通过动作发生的地址或通过可后来提供给主机或者被修改以改变默认应用行为的其他标识,来标识代码动作。
在框640继续,该系统标识提供与每一所标识的代码动作有关的、描述所分配的存储器如何被该应用使用的附加信息的周围信息。周围信息可以告知该系统该分配被存储了多久(例如,在同一函数中被使用了一次或存储在全局变量中以供重复的后续使用)、该应用有多容易填充该存储器分配的内容,等等。周围信息可通过静态和/或动态分析来被标识。
在框650继续,该系统将所标识的存储器相关代码动作和任何所标识的周围信息储存在数据存储中以供主机在运行该应用时后续检索。在一些实施例中,该系统将所标识的信息储存在与应用模块一起存储的清单中,以使得加载该应用的主机可以执行对所标识的位置的任何截取或勾连以向主机提供描述该应用所作出的存储器分配的更多信息。主机可以使用这一信息例如来在该系统空闲时或未被充分利用时预先分配该应用将在未来某一时刻需要的存储器,如该分析所确定的。这允许传统应用参与本存储器管理系统所提供的存储器模型。在框650之后,这些步骤结束。
图7是示出一个实施例中的存储器管理系统响应于检测到的存储器压力来采取与存储器有关的动作的处理的流程图。存储器压力可在具有有限存储器的设备接近其可用存储器时发生。例如,系统操作系统可以将存储器压力定义为在已使用物理RAM的90%时发生。
在框710开始,该系统接收描述多个存储器分配请求以及一个或多个应用如何使用存储器分配的信息。在一些情况下,该系统在从应用接收到各分配以及描述每一分配是如何使用的相关联的元数据时存储分配的列表或其他数据结构。分配使用信息可包括可帮助该系统确定哪些分配可被释放、分页或以其他方式处理来高效地管理可用存储器的优先级或其他信息。
在框720继续,该系统检测指示需要采取动作来继续高效地运行各应用的存储器压力。检测到的存储器压力可包括内核或其他主机可采取的各种状况或动作。例如,内核可能想要关闭一排存储器以节省能量,并且可检测储存在该排上的分配并释放这些分配或将这些分配交换到盘以使得该排可被关闭。作为另一示例,该系统可以对各存储器排进行碎片整理以获得可被关闭的空排。在主机没有完全控制存储器的使用的情况下,在没有应用协作的情况下执行移动或释放存储器的操作通常是困难的。然而,本文描述的存储器管理系统允许主机有对如何管理存储器的多得多的信息和控制。
在框730继续,该系统枚举接收到的分配请求以确定要对其采取动作的分配。该系统可以遍历分配的列表或其他数据结构以确定在它们需要被释放的情况下能被容易地恢复的分配或应用不可能再次使用的分配。
在框740继续,该系统选择所枚举的分配中的要对其采取动作的一个或多个分配。该系统可基于接收到的描述请求分配的应用如何使用该分配的信息来选择分配。在一些情况下,取决于存储器管理器的特定目标(例如,操作特定总大小的存储器并找出加起来达到或超过该大小的分配),该系统可以选择多个分配。
在框750继续,该系统对所选分配执行动作以释放存储器压力。该动作可包括释放先前分配的存储器、将存储器内容交换到盘或其他存储、将存储器从先前位置移动到新位置,等等。在一些情况下,该系统向该应用通知该动作,使得该应用可以修改依赖于该分配的行为。例如,该应用可通过在该应用下次使用存储器时重新分配该存储器来进行响应。在框750之后,这些步骤结束。
图8是示出一个实施例中的存储器管理系统激活针对其存储器先前已被主机修改的应用的处理的流程图。在许多多任务系统中,各应用被推到后台并且后来被用户或操作系统重新激活。在移动设备上,用户可一次与一个应用进行交互,并且操作系统可在特定应用处于前台时挂起其他应用。操作系统可释放其他应用的存储器或者将它流传送到盘或其他存储。在激活时,操作系统可采取动作来准备该应用再次运行。
在框810中开始,系统接收激活的应用请求。该请求可来自应用自身、来自用户、或来自操作系统。激活请求可简单地指示用户再次与该应用交互,使得该应用可请求先前所分配的存储器。
在框820中继续,该系统标识一个或多个先前接收到的应用存储器分配。该系统可维护一个或多个分配所请求的每一分配的列表或其他数据结构,以使得该系统可以通过遍历该列表来标识先前接收到的存储器分配。该系统可以检查每一分配的状态,如与该分配相关的存储器是否仍然可用且仍然包含该应用最后置于其中的内容。
在决策框830继续,如果该系统确定该应用的分配全部就绪,则该系统跳转到框860,否则该系统在框840继续。该系统可以释放、移动、分页、或以其他方式对各应用分配采取动作以提供用于其他任务的更多存储器,如运行其他应用。因而,在再次运行该应用时,该系统可恢复先前操作的分配或可向该应用通知这些动作,以使得该应用可以采取适当的动作。
在框840继续,该系统分配未就绪的分配以将这些分配置于该应用所预期的状态。该系统可以通过分配满足该分配的可用物理存储器来向这些分配指派物理存储器。在一些情况下,该系统可以提供虚拟存储器,如由物理存储器和交换文件所支持的那些虚拟存储器。
在框850继续,该系统使用该应用所提供的填充函数来填充所分配的存储器内容。该应用向该系统提供足够信息,以使得该系统可以释放并重新创建各应用的存储器分配。这允许该系统作出在各应用之间共享资源的高效决策,同时将对应用的负面影响保持很低。理想地,在该系统处于存储器或其他压力之下时,该系统释放或移动将无论如何不再很快使用的并且随后在它再次被需要之前有时间进行恢复的存储器。在传统系统中,主机所能做的最好的是猜测,但通过使用本文的存储器管理系统,主机可以非常高效地选择要操作的一个或多个存储器分配。
在框860继续,该系统激活所请求的应用并向该应用提供该应用所预期的存储器分配。该系统可在为该应用准备存储器时挂起该应用,并且在该应用的所有存储器分配就绪时恢复该应用。在框860之后,这些步骤结束。
从前面的描述中可以看出,可以理解,存储器管理系统的特定实施例只是为了说明,但是,在不偏离本发明的精神和范围的情况下,可以进行各种修改。因此,本发明只受所附权利要求限制。
Claims (14)
1.一种计算机实现的用于在从各应用接收存储器优先级信息的应用主机中处理存储器管理的方法,所述方法包括:
在应用主机中接收描述多个存储器分配请求以及一个或多个应用如何使用存储器分配的信息;
检测指示要采取动作以在所述主机上继续高效地运行各应用的需求的至少一个存储器状况;
枚举接收到的分配请求以确定要对其采取动作的分配;
基于接收到的描述请求分配的应用如何使用所述分配的信息来选择所枚举的分配中的要对其采取动作的一个或多个分配;以及
对所选分配执行动作以减轻所检测到的存储器状况。
2.如权利要求1所述的方法,其特征在于,接收描述存储器分配请求的信息包括访问在所述主机从各应用接收到各分配时所存储的这些分配的数据结构。
3.如权利要求1所述的方法,其特征在于,接收描述存储器分配请求的信息包括访问帮助所述主机确定哪些分配可被释放或分页以高效地管理可用存储器的优先级。
4.如权利要求1所述的方法,其特征在于,检测所述存储器状况包括确定一应用正用完了执行所需的存储器并从其他正在运行的应用取得存储器来给予该应用。
5.如权利要求1所述的方法,其特征在于,检测所述存储器状况包括确定即将到来的应用存储器请求不能被满足并且预先使得更多存储器可用以在所述主机接收到所述请求之时满足所述应用的请求。
6.如权利要求1所述的方法,其特征在于,枚举所述请求包括遍历分配的数据结构以确定在需要被释放的情况下能被容易地恢复的分配。
7.如权利要求1所述的方法,其特征在于,枚举所述请求包括遍历分配的数据结构以确定应用不可能很快使用的分配。
8.如权利要求1所述的方法,其特征在于,选择分配还包括选择多个分配来操作特定总大小的存储器并选择加起来达到或超过所述大小的分配。
9.如权利要求1所述的方法,其特征在于,执行所述动作包括释放先前分配的存储器或者将存储器内容交换到盘。
10.如权利要求1所述的方法,其特征在于,执行所述动作包括向所述应用通知所述动作,使得所述应用能修改依赖于所述分配的行为。
11.一种用于使用从在主机上运行的应用接收到的分配元数据来在所述主机内高效地管理存储器的计算机系统,所述系统包括:
提供一个或多个应用和所述主机之间的通信接口以协商对存储器分配的使用的应用接口组件;
包括应用在其中运行的环境并提供对所述系统提供的存储器管理的访问的主机组件;
从各应用接收分配存储器的请求的请求接收组件,其中每一请求包括向所述主机提供描述所述应用如何使用所分配的存储器的信息的元数据;
存储接收到的请求及相关联的元数据信息以供后续在存储器管理决策制定期间使用的请求存储组件;
执行分配存储器的实际动作以满足接收到的一个或多个应用分配请求的分配组件;以及
执行管理设备上的存储器的动作并访问先前存储的接收到的请求信息以确定将受到所执行动作影响的一个或多个合适的存储器分配的存储器动作组件。
12.如权利要求11所述的系统,其特征在于,所述应用接口组件包括所述主机提供给所述应用的应用编程接口,所述应用可通过所述应用编程接口来提供描述所述分配的信息以允许所述主机代表所述应用来管理存储器。
13.如权利要求11所述的系统,其特征在于,所述应用接口组件静态地或动态地分析应用二进制模块以向所述主机提供存储器使用行为信息。
14.如权利要求11所述的系统,其特征在于,所述请求接收组件、所述请求存储组件、所述分配组件、以及所述存储器动作组件组成了所述主机能访问以管理应用存储器的存储器管理器的各组件。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/163,741 US9558040B2 (en) | 2011-06-20 | 2011-06-20 | Memory manager with enhanced application metadata |
US13/163,741 | 2011-06-20 | ||
PCT/US2012/043036 WO2012177579A2 (en) | 2011-06-20 | 2012-06-18 | Memory manager with enhanced application metadata |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103620548A CN103620548A (zh) | 2014-03-05 |
CN103620548B true CN103620548B (zh) | 2017-07-28 |
Family
ID=47354692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280030154.4A Active CN103620548B (zh) | 2011-06-20 | 2012-06-18 | 具有增强的应用元数据的存储器管理器 |
Country Status (8)
Country | Link |
---|---|
US (1) | US9558040B2 (zh) |
EP (1) | EP2721480B1 (zh) |
JP (1) | JP6370218B2 (zh) |
KR (1) | KR101955737B1 (zh) |
CN (1) | CN103620548B (zh) |
AR (1) | AR086712A1 (zh) |
TW (1) | TW201301029A (zh) |
WO (1) | WO2012177579A2 (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8627036B2 (en) * | 2011-09-12 | 2014-01-07 | Microsoft Corporation | Memory management techniques |
US9208082B1 (en) * | 2012-03-23 | 2015-12-08 | David R. Cheriton | Hardware-supported per-process metadata tags |
US20140379481A1 (en) * | 2013-06-19 | 2014-12-25 | Adobe Systems Incorporated | Method and apparatus for targeting messages in desktop and mobile applications |
CN103399822B (zh) * | 2013-08-14 | 2017-05-24 | 上海斐讯数据通信技术有限公司 | 用于解决申请图片内存不足的内存分配方法及系统 |
US9832268B2 (en) | 2014-08-28 | 2017-11-28 | Software AG USA Inc. | System, method, and medium for managing priority in requests to in-memory data grid (IMDG) |
US10282747B2 (en) * | 2015-06-02 | 2019-05-07 | Adobe Inc. | Using user segments for targeted content |
US9983887B2 (en) | 2015-06-05 | 2018-05-29 | Apple Inc. | Memory management of data processing systems |
US10013198B2 (en) | 2015-08-24 | 2018-07-03 | International Business Machines Corporation | Limiting memory consumption in a distributed environment at a group level |
US10469671B2 (en) | 2016-12-27 | 2019-11-05 | At&T Mobility Ii Llc | Network-based per-application data usage limitations |
US10318888B2 (en) | 2017-03-06 | 2019-06-11 | International Business Machines Corporation | Pre-backing virtual storage using historical learned data |
WO2018236925A1 (en) | 2017-06-19 | 2018-12-27 | Rigetti & Co, Inc. | QUANTICALLY DISTRIBUTED COMPUTING SYSTEM |
US10368128B2 (en) | 2017-08-11 | 2019-07-30 | Microsoft Technology Licensing, Llc | Memory allocation type for media buffer |
US10877691B2 (en) * | 2017-12-29 | 2020-12-29 | Intel Corporation | Stream classification based on logical regions |
US20190370043A1 (en) * | 2018-04-30 | 2019-12-05 | Nutanix, Inc. | Cooperative memory management |
US11327551B2 (en) * | 2019-02-14 | 2022-05-10 | Micron Technology, Inc. | Methods and apparatus for characterizing memory devices |
US10963396B1 (en) | 2019-09-17 | 2021-03-30 | Micron Technology, Inc. | Memory system for binding data to a memory namespace |
US11650742B2 (en) | 2019-09-17 | 2023-05-16 | Micron Technology, Inc. | Accessing stored metadata to identify memory devices in which data is stored |
US11269780B2 (en) | 2019-09-17 | 2022-03-08 | Micron Technology, Inc. | Mapping non-typed memory access to typed memory access |
US11494311B2 (en) | 2019-09-17 | 2022-11-08 | Micron Technology, Inc. | Page table hooks to memory types |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006107197A (ja) * | 2004-10-06 | 2006-04-20 | Nec Corp | メモリ制御方法およびプログラムならびに端末装置 |
JP2007323393A (ja) * | 2006-06-01 | 2007-12-13 | Fuji Xerox Co Ltd | 画像処理装置及びプログラム |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6023712A (en) * | 1997-07-30 | 2000-02-08 | Quarterdeck Corporation | Method and apparatus for brokering memory resources |
US6058461A (en) | 1997-12-02 | 2000-05-02 | Advanced Micro Devices, Inc. | Computer system including priorities for memory operations and allowing a higher priority memory operation to interrupt a lower priority memory operation |
EP1320028A4 (en) | 2000-05-30 | 2005-05-11 | Inst Comp Based Software | PROCESSING METHOD USING SYNCHRONIZATION STRUCTURE OF INFORMATION PROCESSOR |
US6941437B2 (en) | 2001-07-19 | 2005-09-06 | Wind River Systems, Inc. | Memory allocation scheme |
US7069396B2 (en) * | 2002-06-27 | 2006-06-27 | Hewlett-Packard Development Company, L.P. | Deferred memory allocation for application threads |
US7406699B2 (en) | 2003-04-02 | 2008-07-29 | Microsoft Corporation | Enhanced runtime hosting |
US7032088B2 (en) | 2003-08-07 | 2006-04-18 | Siemens Corporate Research, Inc. | Advanced memory management architecture for large data volumes |
US7213084B2 (en) | 2003-10-10 | 2007-05-01 | International Business Machines Corporation | System and method for allocating memory allocation bandwidth by assigning fixed priority of access to DMA machines and programmable priority to processing unit |
KR100631782B1 (ko) * | 2004-07-27 | 2006-10-11 | 삼성전자주식회사 | 객체지향 어플리케이션에서의 효율적인 메모리 관리 방법및 장치 |
KR20060033606A (ko) * | 2004-10-15 | 2006-04-19 | 주식회사 팬택앤큐리텔 | 힙 메모리 관리장치 및 그 방법 |
US20060149914A1 (en) * | 2004-12-30 | 2006-07-06 | Doris Tom F | Systems and methods for allocating data structures to memories |
US7395385B2 (en) | 2005-02-12 | 2008-07-01 | Broadcom Corporation | Memory management for a mobile multimedia processor |
US20060275934A1 (en) * | 2005-06-03 | 2006-12-07 | William Pohl | Management of computer processes |
US8095931B1 (en) | 2006-04-27 | 2012-01-10 | Vmware, Inc. | Controlling memory conditions in a virtual machine |
US7827358B2 (en) | 2007-01-07 | 2010-11-02 | Apple Inc. | Memory management methods and systems |
US8341611B2 (en) | 2007-04-11 | 2012-12-25 | Apple Inc. | Application interface on multiple processors |
US8510743B2 (en) | 2007-10-31 | 2013-08-13 | Google Inc. | Terminating computer applications |
TWI438633B (zh) * | 2007-11-29 | 2014-05-21 | Ibm | 記憶體管理之垃圾收集方法、其電腦程式產品,及其裝置 |
US8812809B2 (en) * | 2008-06-10 | 2014-08-19 | Oracle America, Inc. | Method and apparatus for allocating memory for immutable data on a computing device |
KR20090131142A (ko) * | 2008-06-17 | 2009-12-28 | 재단법인서울대학교산학협력재단 | 메모리 관리 장치 및 방법 |
US20100070678A1 (en) * | 2008-09-12 | 2010-03-18 | Vmware, Inc. | Saving and Restoring State Information for Virtualized Computer Systems |
US8291192B2 (en) | 2008-10-30 | 2012-10-16 | Kyocera Document Solutions, Inc. | Memory management system |
JP5235751B2 (ja) * | 2009-03-30 | 2013-07-10 | 株式会社日立製作所 | 仮想計算機を有する物理計算機 |
-
2011
- 2011-06-20 US US13/163,741 patent/US9558040B2/en active Active
-
2012
- 2012-04-20 TW TW101114221A patent/TW201301029A/zh unknown
- 2012-06-18 EP EP12801960.1A patent/EP2721480B1/en active Active
- 2012-06-18 WO PCT/US2012/043036 patent/WO2012177579A2/en unknown
- 2012-06-18 KR KR1020137033916A patent/KR101955737B1/ko active IP Right Grant
- 2012-06-18 CN CN201280030154.4A patent/CN103620548B/zh active Active
- 2012-06-18 JP JP2014517072A patent/JP6370218B2/ja active Active
- 2012-06-21 AR ARP120102231A patent/AR086712A1/es active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006107197A (ja) * | 2004-10-06 | 2006-04-20 | Nec Corp | メモリ制御方法およびプログラムならびに端末装置 |
JP2007323393A (ja) * | 2006-06-01 | 2007-12-13 | Fuji Xerox Co Ltd | 画像処理装置及びプログラム |
Also Published As
Publication number | Publication date |
---|---|
EP2721480A2 (en) | 2014-04-23 |
CN103620548A (zh) | 2014-03-05 |
WO2012177579A3 (en) | 2013-03-28 |
EP2721480A4 (en) | 2016-05-25 |
AR086712A1 (es) | 2014-01-15 |
KR101955737B1 (ko) | 2019-03-07 |
KR20140035416A (ko) | 2014-03-21 |
JP6370218B2 (ja) | 2018-08-08 |
TW201301029A (zh) | 2013-01-01 |
US20120324196A1 (en) | 2012-12-20 |
WO2012177579A2 (en) | 2012-12-27 |
US9558040B2 (en) | 2017-01-31 |
EP2721480B1 (en) | 2021-05-05 |
JP2014517434A (ja) | 2014-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103620548B (zh) | 具有增强的应用元数据的存储器管理器 | |
CN103635876B (zh) | 用于未经修改的应用的存储器管理模型和接口 | |
CN103608766B (zh) | 向应用主机提供应用对存储器分配和使用的方法和系统 | |
CN107273185B (zh) | 一种基于虚拟机的负载均衡控制方法 | |
US10241836B2 (en) | Resource management in a virtualized computing environment | |
CN104040485A (zh) | Paas分层调度和自动缩放 | |
CN104050042A (zh) | Etl作业的资源分配方法及装置 | |
Zhao et al. | Gpu-enabled function-as-a-service for machine learning inference | |
Katal et al. | Energy optimized container placement for cloud data centers: a meta-heuristic approach | |
CN110347502A (zh) | 云主机服务器的负载均衡调度方法、装置及电子设备 | |
Mangalampalli et al. | An Effective VM Consolidation Mechanism by Using the Hybridization of PSO and Cuckoo Search Algorithms | |
CN114510319A (zh) | 一种基于Kubernetes集群GPU空间共享的方法 | |
KR20220158547A (ko) | 컨테이너 기반 클라우드 환경에서의 gpu 자원 회수 장치 및 방법 | |
Kim et al. | RETRACTED ARTICLE: Simulator considering modeling and performance evaluation for high-performance computing of collaborative-based mobile cloud infrastructure | |
Monge et al. | Logos: Enabling local resource managers for the efficient support of data-intensive workflows within grid sites | |
CN118170505A (zh) | 基于缓存亲和的调度方法、系统、设备及介质 | |
CN117331690A (zh) | 一种基于云计算的高效利用计算资源的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150728 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150728 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |