CN102165426B - 选择性地使用缓解来减少错误的存储器管理技术 - Google Patents

选择性地使用缓解来减少错误的存储器管理技术 Download PDF

Info

Publication number
CN102165426B
CN102165426B CN200980138420.3A CN200980138420A CN102165426B CN 102165426 B CN102165426 B CN 102165426B CN 200980138420 A CN200980138420 A CN 200980138420A CN 102165426 B CN102165426 B CN 102165426B
Authority
CN
China
Prior art keywords
memory
alleviation
software module
module
action
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
Application number
CN200980138420.3A
Other languages
English (en)
Other versions
CN102165426A (zh
Inventor
S·C·卡利诺
D·格兰特
A·J·洛雷利
P·卡斯图里
W·坎贝尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN102165426A publication Critical patent/CN102165426A/zh
Application granted granted Critical
Publication of CN102165426B publication Critical patent/CN102165426B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0787Storage of error reports, e.g. persistent data storage, storage using memory protection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)

Abstract

用于执行存储器管理来缓解存储器错误的技术。根据此处描述的原理,可实现一种存储器管理模块,该存储器管理模块对于向该存储器管理模块发出执行存储器操作的请求的一个或多个软件模块中的每一个以不同操作模式来操作。在一种操作模式中,作为调用软件模块所请求的存储器操作的补充或替代,存储器管理模块可执行一个或多个缓解动作,使得该存储器操作根据这些缓解动作来执行。这些缓解动作可用于降低存储器错误负面地影响调用软件模块的可能性。在另一种操作模式中,该存储器管理模块如所请求地执行存储器操作而不执行缓解动作。

Description

选择性地使用缓解来减少错误的存储器管理技术
背景
在多用途计算设备中,操作系统通常,但不专门地,用于管理供在该计算设备上执行的一个或多个应用程序使用的该计算设备的存储器。例如,如果两个应用程序存取计算设备上的存储器,则操作系统可分配存储器的各部分以供这两个应用程序使用,使得两者都能存取存储器而不破坏对方所存储的数据。
该管理和仲裁可能是缓解在应用程序试图使用对方正在使用的存储器时引发的问题所必需的。例如,如果两个应用程序都试图在相同或重叠的时间段内使用存储器的同一部分,则第二个应用程序可能盖写第一个应用程序的数据,且第一个应用程序可能无法正确执行或者甚至可能崩溃。诸如这些的错误对用户体验有显著影响,尤其是在它们频繁发生的情况下。
操作系统通常包括应用程序可向其发送执行存储器管理任务的请求的存储器管理器,使得存储器管理器可针对存储器资源的使用在进程之间进行仲裁。例如,如果应用程序希望临时或永久地存储数据,则应用程序可请求存储器管理器向该应用程序分配某一量的存储器。稍后,当应用程序不再需要该存储器时,应用程序可如此通知存储器管理器,并且请求解除分配(或“释放”)所分配的存储器,以使其可被另一应用程序使用。当第二应用程序向存储器管理器发送对存储器的请求时,存储器管理器可咨询其记录来确定存储器中当前未被分配的部分,并将这些部分分配给第二应用程序。
可执行与操作系统进行交互的进程的某些软件应用程序例如可包括与执行存储器操作相关的隐错或其他编程缺陷,并且即使是在存储器管理器正确地执行了存储器操作的时候,软件应用程序也可能因存储器错误而失败。这些存储器错误可因可在存储器操作之间引发的不一致性而引起。例如,如上所述,软件应用程序可请求向应用程序分配第一数量的存储器,然后将大于该第一数量的第二数量的数据写入该存储器。操作之间的不一致性——在该示例中,是第一数量和第二数量之间大小的不一致性——会引起导致软件应用程序中的失败的存储器错误。这些失败可包括因存储器错误所引起的不正确执行,或甚至是停止应用程序的执行的灾难性错误或“崩溃”。
由于这些编程隐错的影响,已经开发了软件工具来试图标识引起这些存储器错误的编程隐错。这些工具可在软件应用程序的开发性测试期间使用。
例如,存在可用于在软件应用程序的开发性测试期间标识隐错的不同类型的“诊断”工具。某些软件开发应用程序,如可从美国华盛顿州雷蒙德市的微软公司获得的Visual Studio,具有诸如这些的内置工具。在Visual Studio中,开发者可选择在测试期间启用可包括页堆(Page Heap)功能的应用程序验证器(Application Verifier)功能。页堆可用于通过监视对于正被测试的应用程序的存储器分配和使用来检测某些存储器错误,包括缓存溢出和数据不足。在页堆中,在堆存储器的所分配的部分(正常地,是“用户分配”页)之后放置一定量的保留的额外存储器(称为“不可存取页”),并且启用应用程序验证器功能来检测信息何时被写入该不可存取页。以此方式,诊断工具可以标识错误并将其报告给开发者。
然而,此类诊断工具可能无法在软件应用程序的运行时期间使用。开发了其他工具来在存储器错误引起崩溃时收集崩溃信息,该收集的信息在被分析时可用于标识存储器错误。这一解决运行时期间经历的崩溃的尝试在传统上限于检测此类错误何时发生并将崩溃状况报告给中央聚集点,该中央聚集点然后向开发者通知关于错误的可用信息。开发者可试图使用该信息来重建或诊断错误,然后标识并解决该隐错。可从微软公司获得的Windows操作系统在其Windows错误报告(WER)系统中提供了此类报告功能。在该系统中,当WER检测到应用程序非干净地退出时——例如,通过崩溃或以其他方式不正确退出——则诸如指令栈的内容等关于应用程序状态的信息可由WER捆绑并报告给聚集服务器。该信息还可包括标识错误的类的通用系统错误代码,但是不包括关于引起该错误的确切隐错的信息。
概述
申请人认识到且明白,通过使用存储器管理来补偿引起存储器错误的软件应用程序中的编程隐错,应用程序能更可靠地操作,且改善用户体验。申请人认识到,许多存储器错误可能是由应用程序执行的存储器操作中的不一致性引起的,且这些编程隐错的影响可通过预期这些不一致性并以纠正它们的方式执行存储器管理来缓解。例如,通过向应用程序分配多于请求量的资源(如存储器和/或时间),存储器管理模块可补偿应用程序中导致应用程序存取多于请求量的存储器、或在其发信号通知其处理完存储器之后使用存储器的隐错。此外,在某些情况下,存储器管理模块可通过例如在其检测到对应用程序所请求的存储器操作的输入信息不正确的情况下不执行该操作来缓解错误。
可用不同类型的缓解动作来缓解许多不同类型的错误,其示例将在下文中更详细讨论。然而,申请人明白,诸如此类的缓解可对计算设备的效率有显著影响,并且可影响在这些设备上执行的应用程序的性能。每次当请求存储器操作时评估并操纵该操作可增加完成请求的时间,并且分配多于请求量的存储器使用了更多存储器且因此会减少系统可用的资源。申请人明白存储器管理模块的具有能够对每一应用程序选择性地启用的缓解的愿望。
根据此处描述的原理,可实现一种存储器管理模块,该存储器管理模块对于向该存储器管理模块发出执行存储器操作的请求的一个或多个软件模块中的每一个具有不同的操作模式。在一种操作模式中,作为调用软件模块所请求的存储器操作的补充或替代,存储器管理模块可执行一个或多个缓解动作,使得该存储器操作根据该缓解动作来执行。这些缓解动作可用于降低存储器错误影响调用软件模块的可能性。在另一种操作模式中,该存储器管理模块如所请求地执行存储器操作而不执行缓解动作。一种存储器管理模块可在与该存储器管理模块相关联的数据存储中维护一记录,该记录具有对应于每一调用软件模块的至少一个条目,该条目指示对于该调用软件模块存储器管理模块应以其操作的模式。
根据此处所描述的部分或全部原理来操作存储器管理模块可以降低诸如用户应用程序等软件模块不正确执行或崩溃的可能性,这可用于改善在使用这些软件模块时的用户体验。
应当理解,以上内容旨在是本发明的非限制概述,本发明仅由所附权利要求书来定义。
附图简述
附图不旨在按比例绘制。在附图中,各个附图中示出的每一完全相同或近乎完全相同的组件由同样的标号来表示。出于简明的目的,不是每一个组件在每张附图中均被标号。在附图中:
图1是根据此处描述的原理中的某一些来操作的技术可在其中起作用的示例性计算设备的框图;
图2A是根据用于存储器管理的常规技术来操作的系统的各组件之间的交互的示意图;
图2B是根据此处描述的部分原理来操作的技术可在其中其作用的一个示例性系统的某些组件之间的某些交互的示意图;
图2C是可用于在逐个应用程序的基础上实现存储器缓解的计算机存储介质中的数据结构的示意性图示;
图3是根据此处所描述的某些原理来执行存储器管理的示例性技术的流程图;
图4A、4B、4C和4D是根据此处描述的一个或多个原理来执行存储器操作的示例性技术的流程图;
图5是根据此处所描述的某些原理来执行解除存储器分配的操作的一个示例性技术的流程图;
图6是根据此处描述的某些原理来确定是否将缓解技术应用于特定应用程序的示例性技术的流程图;
图7A和7B是根据此处描述的某些原理来确定缓解技术成功地缓解了存储器错误对应用程序的影响的示例性技术的流程图;
图8是根据此处描述的某些原理来确定是否对特定应用程序移除缓解技术的示例性技术的流程图;
图9是根据此处描述的原理中的某一些来操作的技术可在其中起作用的示例性计算设备的框图;
图10是根据此处描述的部分原理来操作的技术可在其中其作用的一个示例性系统的某些组件之间的某些交互的示意图;
图11示出了根据此处描述的某些原理来操作的技术可在其中起作用的示例性计算机系统;
图12是根据此处描述的某些原理来配置计算设备以便使用存储器管理技术的示例性技术的流程图;以及
图13是根据此处描述的某些原理在适用于配置计算设备以便使用存储器管理技术的中央聚集服务器处接收错误和缓解数据的示例性技术的流程图。
详细描述
资源管理模块在具有共享资源的系统中操作,且用作该共享资源的仲裁者来确保其多个消费者在试图访问该资源时不会彼此干涉。存储器管理模块是这一资源管理模块的一个示例。某些计算设备,包括单用途和多用途计算设备,可以并行执行与两个或更多任务相关的应用程序或其他指令集,并且这些并行执行可能会竞争对存储器的存取。如果两个或更多应用程序被正确地编码并且给予存储器管理模块的指令是正确的,则存储器管理可以是相对简单的任务。不幸的是,申请人认识到,情况并非始终如此,且应用程序或指令集可能会因为引起存储器错误的编程隐错而崩溃。例如,华盛顿州雷蒙德市的微软公司的研究发现在Windows操作系统中运行的用户软件应用程序中的编程隐错引起存储器错误,这些存储器错误是每天大量应用程序崩溃的源头——占研究中分析了全部数量的崩溃中的约15%。
申请人认识到且明白,应用程序中的编程隐错的影响可通过使用改进的存储器管理模块来缓解,该改进的存储器管理模块可采取步骤来降低引起错误的编程隐错对应用程序产生负面影响的概率。例如,通过向应用程序分配多于应用程序请求量的资源,存储器管理模块可以补偿应用程序中导致应用程序使用多于请求量的存储器或者在应用程序发信号通知其已完成对存储器的处理之后使用存储器的隐错。此外,在某些情况下,存储器管理模块可以通过不执行作出对要执行的存储器操作的调用的应用程序所请求的存储器操作来缓解错误。例如,如果存储器管理模块检测到关于操作的输入信息是不正确的,则它可以不执行该操作。可用不同类型的缓解动作来缓解许多不同类型的错误,其示例将在下文中更详细讨论。然而,应当理解,除了以下列出的之外,许多不同类型的缓解动作是可能的,可以采取任何合适的动作来缓解引起存储器错误的编程隐错。
申请人还认识到且明白,在某些情况下,缓解动作会对应用程序或其他指令集的性能有不利影响,例如,向应用程序分配多于请求量的存储器,或者在释放存储器以供另一应用程序使用之前延迟,导致计算设备使用的存储器比其本来将使用的更多。另外,通过在存储器管理模块接收到存储器操作时检查该存储器操作来确定缓解动作是否可用,增加了响应这些存储器操作的时间,导致应用程序的执行时间增加。申请人认识到且明白,由于并非所有调用存储器管理器的软件模块(“调用软件模块”)将具有导致存储器错误的编程隐错,对性能的这一不利影响可通过取决于是否检测到调用软件模块经历了存储器错误而对调用软件模块选择性地应用缓解动作来减轻。因此,此处所描述的是用于对每一具体的调用软件模块以不同操作模式执行存储器操作的技术,其中调用软件模块是应用程序的实例,这些操作模式如其中对应用程序向存储器操作应用缓解动作的第一模式,以及不对应用程序应用缓解动作的第二模式。
另外,申请人明白,在缓解模式中始终对调用软件模块执行存储器操作可能并不是高效的。例如,在某些实现中,存储器管理模块可以不被配置成缓解调用软件模块可经历的所有存储器错误,并且特定调用软件模块可具有可能无法通过在计算设备上实现的特定存储器管理模块来缓解的编程隐错。作为另一示例,某些调用软件模块可在某些不频繁执行的指令中具有编程隐错。作为另一示例,调用软件模块可具有非常少的导致存储器错误的隐错。在这些情况的每一种中,尽管对调用软件模块在缓解模式中操作存储器管理模块可能有助于缓解某些错误,但这些可缓解错误可能是不频繁的,并且因在缓解模式中进行操作而引起的效率损失可能会超过缓解错误的获益。
因此,申请人认识到且明白进行测试来确定在缓解模式中操作存储器管理模块的有效性并响应于该测试来配置存储器管理模块的愿望。确定有效性可以按任何合适的方式来完成。例如,如果检测到存储器错误不影响软件模块,则即使引起错误的编程隐错存在于该模块中,也确定缓解动作有效地或成功地缓解了存储器错误。该测试可以随时间且随应用程序的多个实例来执行,以收集关于缓解动作是否有效的统计数据,包括关于错误和检测到的缓解动作的成功的数量和/或频率的统计数据。这些统计数据可采用任何合适的形式,包括作为标签值,该标签值在一个实例中在即使存在隐错但缓解动作仍成功地避免了对调用应用程序的影响的情况下递增,且在另一实例中在缓解动作不成功时递减。可使用任何合适的准则来确定缓解是成功还是不成功。在某些实施例中,如果没有检测到可被缓解类型的隐错,则缓解可被认为是不成功的。然而,在其他实施例中,可以应用其他不同或附加的准则。作为基于缓解的先前成功来选择应用缓解所引起的行为的一个示例,存储器管理模块可被配置成当对作为应用程序的实例的特定软件模块执行存储器操作时以缓解模式来操作。可在崩溃或归因于存储器功能的其他错误之后进入该模式。如果在某一段时间之后确定缓解未有效地阻止存储器错误影响该模块,则存储器管理模块可被配置成对该特定应用程序的后续实例以正常模式操作而没有缓解。该时间段可以通过计时来测量,和/或以某种其他方式,如基于在没有成功缓解的情况下从应用程序干净退出的次数来测量。以下描述了可用于作出这一判定的示例性测试,其结果可用于控制对特定的调用软件模块存储器管理模块应以其操作的模式。
申请人还明白,诸如与广泛发行的软件应用程序相关联的某些软件模块可在多个计算设备上执行,且这些计算设备中的每一个可具有这些软件模块以及缓解动作是否有效的经验。例如,其他计算设备可具有确定缓解动作是成功还是不成功的经验。申请人认识到且明白,计算设备的性能因此可通过充分利用其他计算设备的经验来作出关于是否对应用程序应用缓解动作以及应用缓解动作多长时间来进一步提高。
为了利用聚集的信息,计算设备可适用于向从多个设备收集信息的一个或多个其他计算设备发送关于错误类型和缓解动作的成功的详细信息,所有这些设备可执行作为应用程序的实例的软件模块。这一个或多个设备可聚集关于对特定应用程序缓解的成功的信息。基于该聚集的信息,设备还可从一个或多个计算设备接收关于是否要对特定软件模块应用缓解动作的配置信息。该信息可以采用任何合适的形式,如关于可对照其来测量缓解动作的成功的统计数据。例如,配置信息可包括在确定是否对应用程序禁用缓解之前应考虑应用程序的更多或更少数量实例的指示。在某些这样的实现中,这些指令可包括初始缓解标签值,该标签值可根据此处所描述的测试技术使用来确定是否要对应用程序禁用缓解。因此,以下描述的是用于向其他计算设备发送并从其他计算设备接收信息的技术,该信息可用于配置计算设备上的存储器管理模块来应用缓解动作。
应当理解,在具体实施例中,各技术可以根据此处描述的某些原理来实现而无需每一实施例都使用所有原理。可实现这些原理中的一个或多个的任何合适的组合,本发明的各实施例不限于用任何具体原理或这些原理的集合来实现。例如,可以实现选择性地应用缓解动作但不测试缓解动作的有效性或接受来自其他计算设备的配置数据的存储器管理模块,或者实现选择性地应用缓解动作并测试有效性但不接受来自其他计算设备的配置数据的存储器管理模块。
以下描述的技术可以用各种方式中的任一种来实现,并在各种类型的指令集的任一种上操作。为简明起见,以下的示例将存储器管理模块和错误报告服务描述为计算设备的操作系统的一部分,且将软件模块描述为由操作系统管理的应用程序。这一示例可以在此处描述的某些原理的一种商业实现中看到,其中操作系统是Microsoft Windows,以下描述的缓解模块是容错堆(FTH)客户端,以下描述的缓解启用模块是FTH服务器,且错误报告客户端和服务器是Windows错误报告(WER)服务的组件。然而,应当理解,这仅是可实现此处所描述的原理的不同方式的一个示例,且其他方式是可能的。例如,存储器管理模块可被实现为与计算设备的操作系统交互的独立组件、由操作系统管理的应用程序的组件、或在不具有操作系统的计算设备上执行的模块。此外,向存储器管理模块发出请求的软件模块(“调用软件模块”)可以是可由处理器执行的指令的任何合适的安排。在某些实现中,软件模块可以是用户应用程序的实例、操作系统的组件、服务或端口映射程序、或任何其他合适的软件模块。每一软件模块可以是以下描述的一个或多个“功能模块”。
另外,存储器管理模块可以被实现为执行一个或多个存储器操作的任何合适的组合,以及一个或多个缓解动作的任何合适的组合。存储器操作可以是影响存储器资源的使用的任何合适的操作,如分配、解除分配(释放)、重新分配、分页、以及许多其他操作。缓解动作可以是可由存储器管理模块采取来降低调用软件模块中的编程隐错将导致存储器错误且如通过引起不正确执行或崩溃而负面地影响调用软件模块的可能性。
存储器错误可以是导致会如通过引起不正确执行或崩溃而负面地影响软件模块的存储器破坏的任何错误。在许多情况下,存储器破坏可由导致存储器操作之间的不一致性的编程隐错引起。存储器错误包括在所分配的存储器的边界外部写入(缓存溢出或数据不足)、当两个模块在重叠的时间段内各自使用相同的存储器空间时另一软件模块对所存储的信息的盖写、或使用与分配给模块的不同的存储器部分。应当理解,这些存储器错误仅是软件模块可经历且可通过此处描述的某些原理来缓解的类型的示例。
缓解存储器错误可以通过执行任何合适的一个或多个缓解动作以任何合适的方式来完成。在某些情况下,缓解动作可包括在预期不一致存储器操作时采取的且试图抵消该不一致性的动作。示例性缓解动作在下文中更详细地描述,但是可包括在执行操作之前改变操作、不执行操作、在稍后的时间执行操作、在执行操作之前确认对操作的正确输入、或以对存储器空间的最小改变来执行操作中的任一动作。
此外,以下用对通常称为“堆”存储器的一种类型的存储器来操作的存储器管理模块描述了示例性实现。然而,应当理解,任何一种或多种合适类型的存储器可由根据此处描述的某些原理来操作的技术来管理,包括栈存储器和/或全局变量存储器。
在此处描述的原理的一个示例性实现中,调用软件模块(可以是例如软件应用程序的实例)可向存储器管理模块发出执行存储器操作的请求。存储器管理模块可以与缓解启用模块进行交互。缓解启用模块可以咨询启用模块所存储的规则和设置数据的一个或多个条目来确定当对特定的调用软件模块执行操作时存储器管理模块应以其操作的模式。咨询规则和设置数据在这一和某些其他实现中可包括检查来确定一个或多个统计数据是在阈值水平之上还是之下。如果规则和设置指示存储器管理单元不应以缓解模式操作——例如,如果缓解标签值低于阈值水平——则如所请求地执行存储器操作。然而,如果规则和设置指示存储器管理单元应以缓解模式操作,则可启用存储器管理单元的缓解模块。缓解模块然后可结合存储器管理模块来根据一个或多个缓解操作执行存储器操作,这些缓解动作可用于降低存储器错误负面地影响调用软件模块的可能性。应当理解,存储器管理模块的操作模式较佳地独立于每一软件模块,且存储器管理单元可以对一个调用软件模块以第一模式执行存储器操作,且对另一调用软件模块以第二模式执行另一存储器操作。
在该示例性实现中,缓解和缓解启用模块也可适用于评估一个或多个缓解动作一旦被启用是否成功地缓解了错误。这可以用任何合适的方式来完成,其示例在下文中讨论。例如,当执行缓解动作时,可取得最初的观察结果并将其与稍后记录的观察结果进行比较,来确定调用软件模块是否采取了指示可通过缓解动作阻止其引起错误的编程隐错的任何动作。例如,如以下所讨论的,在分配操作期间,可分配大于请求量的存储器,并且可将标记值写入额外存储器中。当调用软件模块稍后请求解除该存储器的分配时,缓解模块可检查该额外存储器来查看标记值是否仍在该存储器中。如果部分或全部标记值已被盖写,则缓解模块可确定缓解动作(分配额外存储器)有效地阻止了缓存溢出引起的存储器错误。评估缓解动作和其他示例性测试的有效性的进一步细节在下文中讨论。在使用缓解标签值的某些实现中,当确定缓解动作对特定调用软件模块有效时,则可递增该缓解标签值,且如果确定缓解动作不是有效的或没有任何效果时,则可递减该缓解标签值。
在该实现中,缓解和缓解启用模块可进一步适用于向远程计算设备发送和从远程计算设备接收关于缓解动作阻止存储器错误负面地影响软件模块的有效性以及关于是否启用缓解动作的信息。例如,当存储器管理模块检测到调用软件模块崩溃时,它可从记录中确定是否检测到任何存储器错误以及这些存储器错误中的任一个是否被缓解。它然后可将该信息发送到一个或多个其他计算设备,且作为回报可从一个或多个其他计算设备接收信息。在该示例性实现但非所有实现中,一个或多个其他计算设备可包括聚集服务器,且该聚集服务器可用作诸如Windows错误报告服务等错误报告服务的一部分。聚集服务器可接受来自一个或多个计算设备的错误和缓解信息,并且可以将该信息发送给包括被检测为崩溃的软件模块的开发者的厂商。聚集服务器还可确定缓解动作是否在每一计算设备处成功地缓解了存储器错误,并且可通知计算设备是否对特定软件模块启用缓解模式。在某些实现中,通知计算设备是否启用缓解模式可包括发送关于缓解标签值的推荐初始化值,如在缓解在历史上成功或以高比率成功时的较高值,以及在缓解在历史上不成功或成功但仅有低比率时的较低值,但是应理解,其他实现可对任何合适的配置信息操作,因为本发明的各实施例在这一方面不受限制。
应当理解,尽管该示例性实施例被描述为根据此处描述的许多原理来操作,但其他实现可根据这些原理中的较多或较少数量的原理来操作,且并非所有实现都要根据此处描述的所有原理来操作。
如上简要讨论的,申请人明白,许多不同类型的编程隐错会引起可诸如通过使得软件模块不正确地执行或崩溃而负面地影响软件模块的存储器错误。对于上下文,这些编程隐错中一些最常见的隐错在下文中描述,但应理解,该错误列表不是可通过实现此处描述的某些原理来缓解的全部编程隐错的全面描述,且存在可使用根据这些原理中的某一些或全部操作的技术来缓解的其他隐错。
作为第一示例,调用软件模块可请求存储器管理模块向该软件模块分配某一量的存储器——例如,16字节——然后试图使用多于请求量的存储器——例如,17字节或更多。常规的存储器管理模块不能检测到该软件模块正在使用额外存储器,且可将该存储器分配给另一软件模块。如果该另一软件模块然后开始使用该存储器,则作为在它/它们试图使用存储器时的存储器错误的结果,一个或两个软件模块可能不正确地执行或甚至崩溃。
作为可引起存储器错误的编程隐错的第二个示例,软件模块可请求存储器管理模块向该软件模块分配某些存储器,然后通知存储器管理模块它已经完成了对该存储器的处理,但是接着继续使用该存储器。根据存储器管理模块的记录,该存储器被释放以分配给另一软件模块,并且两个软件模块可试图同时使用该存储器,导致一个或两个软件模块不正确地执行。
作为第三个示例,软件模块可通过通知存储器管理模块它已经完成了对存储器的处理来“释放”已经被分配给它的存储器,然后可通过编程隐错再次释放该存储器。存储器管理模块可与此同时将该存储器分配给另一软件模块,并且作为第二个不正确的释放操作的结果,可将其分配给第三个软件模块。作为第一个软件模块中的编程隐错的结果,第二和第三软件模块中的一个或两个然后可不正确地执行。
作为第四个示例,某些软件模块在退出时可能试图释放分配给它们的所有存储器,但是可能会过早地或以其他方式不正确地这样做,且会导致软件模块的崩溃。
作为第五个示例,不同的信息可被存储在不同类型的存储器中,如通用地址空间、栈存储器、以及动态或堆存储器。某些指令集可通过编程隐错而使用错误的命令来与不同类型的存储器交互,如使用堆存储器操作来执行打算在通用地址空间存储器上完成的操作。当存储器管理模块使用通用地址空间存储器的标识符在堆存储器上执行操作时,则它正在错误的存储器上操作,且使用堆存储器来作出该调用或指令集的软件模块结果会崩溃。
作为第六个示例,在减少或扩大对指令集的存储器分配的重新分配操作中,存储器分配可被移至存储器的另一部分,但是通过编程隐错,该指令集会继续引用原始位置中的存储器。该指令集以及任何其他使用该原始存储器的指令集因此会因隐错而崩溃。
通过根据此处描述的原理来操作,存储器管理模块可阻止这些和其他编程隐错引起通过导致不正确执行或甚至崩溃来负面地影响软件模块的存储器错误。对软件模块的负面影响可对用户体验有负面影响,且缓解这些编程隐错的影响可显著地改善用户体验。另外,通过操作来选择性地启用缓解动作并测试其有效性,这些缓解动作的任何负面影响本身可被缓解。
根据此处所描述的原理来操作的这些和其他技术的其他功能和优点将从以下描述的示例中得到更完全的理解。以下示例旨在方便理解本发明并示出此处所描述的原理的好处,但不例示本发明的各实施例的全部范围。
本文描述的技术可在各种计算系统中实现,这些计算系统的示例在下文较为详细地描述。此类系统一般涉及使用适当配置的计算设备,这些计算设备实现各自提供完成此类技术的执行所需的一个或多个操作的多个功能模块。每一个功能模块可以按照其自己的方式来实现;不必全都用相同方式实现。如此处所使用的,功能模块是执行执行操作职责的系统的结构组件。操作职责可以是整个软件元素的一部分。例如,功能模块可执行进程、离散进程、或任何其他合适的处理单元的功能。功能模块可包括计算机可执行指令,并且可在计算机存储介质上编码。此外,这样的计算机可执行指令可使用多种合适的程序设计语言和/或程序设计或脚本工具中的任何一种来编写,而且它们还可被编译为可执行机器语言代码或在框架或虚拟机上执行的中间代码。功能模块可在适当时并行或串行执行,并且可使用在其上执行这些模块的计算机上的共享存储器、使用消息传递协议、或以任何其他合适的方式,来在彼此之间传递信息。下文描述了执行一项或多项任务的示例性功能模块,但应该理解领会,所描述的功能模块和任务划分仅仅示出可实现本文描述的示例性技术的功能模块的类型,并且本发明并不限于在任何特定数量、划分、或类型的功能模块中实现。在一些实现中,所有功能可在单个功能模块中实现。此外,为清楚起见,功能模块在下文中是作为全部在一个或两个计算设备上执行来讨论的,但应该理解,在一些实现中,功能模块可在适用于彼此通信的许多单独的计算设备或单个计算设备的单独的处理器上实现。例如,一个处理器可适用于执行向存储器管理模块发出执行存储器操作的请求的调用软件模块,而另一处理器可适用于执行存储器管理模块。
在以下描述的一些实施例中,根据此处描述的原理来操作的技术可被实现为在一个或多个计算机可读存储介质上编码的计算机可执行指令,这些计算机可读存储介质诸如有磁介质(例如,硬盘驱动器)、诸如紧致盘(CD)或数字多功能盘(DVD)等光介质、持久或非持久固态存储器(例如,闪存、磁RAM等)、或任何其他合适的存储介质。计算机存储介质可被实现为图1和9的计算机可读存储介质104(即,作为计算设备100的一部分)或被实现为单独的计算机存储介质。应当理解,如此处所使用的,包括“计算机可读存储介质”的“计算机可读介质”指的是具有可在其上记录数据的过程期间用某种方式更改的至少一个物理结构的有形存储介质。例如,计算机可读介质的物理结构的一部分的磁化状态可在记录过程中更改。在一些此类实施例中,实现依照本文描述的原理来操作的技术的计算机可执行指令可被实现为一个或多个独立功能模块(例如,存储器管理模块)。
在此处描述的技术被具体化为计算机可执行指令的情况下,它们可在任何合适的计算机系统中操作的任何合适的计算设备上执行,包括以下图1和9描述的示例性计算设备。例如,根据本文讨论的一些或所有原理来操作的技术可以在以下系统上操作:单个多用途可编程数字计算机装置、共享处理能力并联合执行本文描述的技术的两个或更多多用途计算机装置的协调系统、专用于执行本文描述的技术的单个计算机装置或计算机装置(同处一处或在地理上分布)的协调系统、用于执行本文描述的技术的一个或多个专用集成电路(ASIC)、用于执行本文描述的技术的一个或多个现场可编程门阵列(FPGA)、或任何其他合适的系统。
图1示出了计算设备100形式的可用于实现本文描述的技术的系统中的计算设备的一个示例性实现,然而其他实现也是可能的。此外,应理解,图1既不旨在是对用于依照本发明描述的原理操作的计算设备的必要组件的描绘,也不旨在是全面描绘。还应当理解,其他实现可在任何其他合适的计算设备中操作。
计算设备100可包括处理器102、计算机可读存储介质104和存储器116。计算设备100可以是任何合适的计算设备,包括例如台式或膝上型个人计算机、工作站、服务器、大型机、智能电话、个人数字助理(PDA)、独立联网设备、或能够在单个时间执行一个或多个软件模块且具有可在一个或多个软件模块之间共享的诸如存储器等一个或多个资源的任何其他合适的计算设备。计算机可读存储介质104可以是适用于存储要由处理器102处理的数据和/或要由处理器902执行的指令的任何合适的有形存储介质。处理器102能够处理数据和执行指令。这些数据和指令可被存储在计算机可读存储介质104上,并且例如可以启用计算设备100的各组件之间的通信。
存储在计算机可读存储介质104上的数据和指令可包括实现根据本文描述的原理操作的技术的计算机可执行指令。在图1的示例中,如上所述,计算机可读存储介质104存储实现各种模块并存储各种信息的计算机可执行指令。计算机可读存储介质104存储与可在计算设备上执行的一个或多个软件模块106以及可支配计算设备100上的进程的执行并调节诸如存储器116等共享资源的使用的操作系统108相关的数据和指令。
为了调节对存储器的使用,操作系统108可具有用于执行调用软件模块所请求的存储器操作的存储器管理模块110。调用软件模块可以是软件应用程序106、操作系统108的其他组件、或在计算设备100上执行的任何其他软件元件。存储器管理模块110可以用任何合适的方式来实现以执行常规存储器管理技术以及此处描述的一种或多种技术。如上所述,在此处描述的技术的某些实现中,存储器管理模块110可包括缓解模块112,缓解模块112可用于在调用软件模块请求存储器操作时执行一个或多个缓解动作。缓解模块112可以对每一调用软件模块选择性地应用,使得缓解动作仅对被检测为需要缓解动作的软件模块执行。因此,为了在这些实现中执行检测和启用,操作系统108还可包括用于监视计算设备100中的软件模块的执行的缓解启用模块114。然而,在替换实现中,缓解模块可诸如由计算设备900的管理员来手动启用或禁用,并且在此类实现中可以不提供缓解启用模块。图1所示的模块,包括缓解模块112和缓解启用模块114,可适用于根据此处描述的原理以任何合适的方式操作,包括通过以下描述的示例性技术中的任一种来操作。
应当理解,图1所示的实现仅是可实现此处描述的原理的不同方式的示例。在替换实现中,缓解模块和缓解启用模块可被实现为与操作系统分开的组件,或者可被实现为操作系统内的单个组件,或以任何其他合适的方式来实现,因为本发明的各实施例不限于被实现为任何特定模块或模块集。
常规存储器管理模块和根据图1所示的实现来操作的存储器管理模块之间的区别在图2A和2B中示出。在图2A中,示出多个调用软件模块200向操作系统API和存储器管理模块206发出操作请求202和204,包括执行存储器操作的请求。这些操作如所请求地被执行,并且任何合适的信息被返回给调用软件模块。没有缓解动作可用,且不执行对调用软件应用程序的监视,使得这些软件模块容易受到因包括上述隐错在内的编程隐错引起的存储器错误的影响。
在图2B中,示出了图1的示例性实现,且缓解模块112被实现为操作系统的组件。在该实现中,调用软件模块200向操作系统和存储器管理模块206发出相同的操作请求202和204,因为在所示实施例中,这些软件模块不知道缓解模块112以及是否对特定的调用软件模块实现了缓解模块。如上所讨论且如图2B中所示,缓解模块112可对每一调用软件模块选择性地应用来执行一个或多个缓解动作,且因此,调用软件模块200所发出的操作请求中的某一些(不一定是全部)被缓解模块112截取。为了确定是否应对特定调用软件模块启用缓解模块112,缓解启用模块114与存储器管理单元110和缓解模块112、以及调用软件模块200进行通信。
在检测到调用软件应用程序已经发送了执行存储器操作的请求之后,缓解启用模块114可以审阅存储在与缓解启用模块114相关联的缓解数据存储212中的信息,来确定在执行所请求的存储器操作时缓解模块是否应以缓解模式操作。这也可被认为是与存储器管理模块110相关联的数据存储,因为它维护与存储器管理模块110的操作相关的信息,且在上述的某些实现中,在缓解启用模块114被实现为存储器管理模块110的一部分时可以是存储器管理模块110的一部分。审阅存储在数据存储212中的信息可包括任何合适的动作,包括审阅事件日志216以及规则与设置218。数据存储212可按持久方式来存储,从而如果缓解启用模块114被禁用或关闭,当它稍后被重新启用时,它将能够访问先前收集的信息,包括关于先前作出的决策的信息。
数据存储212可存储事件日志216,该事件日志包括关于调用软件模块200经历的存储器错误、被检测为被缓解的存储器错误、以及被请求执行的存储器操作的信息。事件日志216中的每一条目可包括任何合适的信息,包括装桶(bucketing)参数,如软件模块的名称、软件模块的版本、在错误的时候软件模块的什么库或部分正被执行、在执行中的哪一点检测到错误、以及描述错误的异常代码,以及任何其他合适的信息。规则与设置18可存储关于一个或多个调用软件模块200的任何合适的信息,以及关于通用缓解策略的信息。图2C示出了可被存储在规则与设置218中的信息的一个示例。规则与设置218可包括对应于多个调用软件模块200中的每一个(包括对应于调用软件模块的每一标识符,其可以是应用程序标识符)的条目,可在确定是否应对调用软件模块启用缓解模式时使用的一个或多个值,以及如果是则要启用缓解的时间。可在确定是否应启用缓解模式时使用的一个或多个值可以是任何合适的值,包括可被收集的、关于跨调用软件模块所关联的应用程序的一个或多个实例软件模块所经历的错误和/或所检测的缓解动作的成功的一个或多个统计数据。这些统计数据可采取任何合适的形式。在某些实现中,统计数据可采取缓解标签值的形式,该标签值在检测到成功的情况下可递增,且在检测到错误的情况下递减。缓解标签值然后可以与诸如阈值等其他统计值进行比较,来确定是否应对应用程序的后续实例启用缓解模式。然而,应当理解,统计数据仅是可被存储在规则与设置218中的值的类型的一个示例,且缓解标签值仅是可被存储的统计数据的类型的一个示例。
缓解启用模块114可以用任何合适的方式,包括通过以下讨论的示例性技术中的任一种,审阅该信息来确定是否对特定软件模块启用缓解模式。
为了提供用于确定是否对特定软件模块启用缓解模式的示例性技术的讨论的上下文,首先描述当缓解模块112处于缓解模式时的缓解模块112的操作的示例性技术。包括以上概括描述以及以下更具体描述的示例在内的缓解动作可以用任何合适的方式来执行,并且实现这些缓解动作的缓解模式可以用任何合适的方式来执行。图3示出了其中缓解模块112可以以由本发明的各实施例实现的缓解模式操作的方式的一个示例,该缓解模块选择性地以缓解模式操作存储器管理模块,但是其他方式也是可能的,根据此处描述的原理,存储器管理模块可以用任何合适的方式来实现,包括不以两种不同模式操作。
图3的说明性过程300在框302开始,在那里调用软件模块发出要存储器管理模块110执行存储器操作的请求。在框304,对发出请求的特定调用软件模块确定存储器管理模块110是否应以缓解模式操作来执行一个或多个缓解动作(在以下的某些情况下,为简明起见,这可被描述为软件模块是否以缓解模式操作,但应理解,这样做纯粹是为了方便描述,并且较佳地,软件模块不知道缓解模块以及缓解模块操作的模式)。如果确定存储器管理模块110应以缓解模式操作,则启用缓解模块112,并且在框306,接收执行存储器操作的请求。
在框306中接收到该请求之后,缓解模块112和存储器管理模块110可根据缓解动作来执行存储器操作。在某些实现中,这可包括执行单个动作或可包括执行许多动作。在图3的图示中,为清楚起见,根据缓解动作执行存储器操作被示为四个单独的操作,但是应理解,这仅是为了方便可视化,且根据图3操作的技术可以不完全如图所示那样来实现。
在框308,缓解模块112至少基于所请求的存储器操作的类型以及该操作的输入参数来确定其是否适用于执行任何缓解动作。可以这样做是因为在某些实现中,缓解模块112可能仅被配置成缓解因一组一个或多个存储器操作而导致的一种或多种类型的存储器错误,且因此可能没有其可以对特定存储器操作执行的缓解动作。在某些替换实现中,可以实现适用于对所有类型的存储器操作执行缓解动作的存储器管理模块112,因此可以不实现具有判定框308的过程。
如果在框308确定有至少一个缓解动作可用,则在框310执行该缓解动作,这可包括将该缓解动作应用于该操作。将缓解动作应用于存储器操作可包括任何合适的过程,包括以下详细讨论的过程中的任一个。例如,应用缓解动作可包括评估存储器操作,如确定该操作的输入参数是否正确;调整存储器操作的参数,如增加所请求的存储器的量;等待执行存储器操作直到稍后的时间;或不执行存储器操作。在框312,在应用了缓解动作之后,确定是否仍要执行该存储器操作。如果是,则在框314,执行缓解动作,且过程300结束。然而,如果在框312确定不要执行该存储器操作——例如,如果缓解动作不执行存储器操作,或者如果确定输入参数不正确——则过程300也结束。
返回到框304,如果确定存储器管理模块110不应以缓解模式操作,或者如果在框308确定没有缓解动作可用,则在框316,如所请求地执行存储器操作,且过程300结束。框316处的执行可以如在常规存储器管理器中的那样,但可使用任何合适的执行方法。
图4A、4B、4C和4D示出了可由缓解模块112采取来执行诸如图3的框310所示的至少一个缓解动作的四个不同过程。应当理解,这些过程仅说明了可被实现来执行这些缓解动作的过程的类型,并且这些缓解动作仅是可由缓解模块112执行的缓解动作的类型的示例。
这一缓解动作的第一示例在图4A的过程400A中示出。过程400A在框402开始,在那里确定调用软件模块所请求的存储器操作是否是分配操作;即,请求将一定量的存储器分配给调用软件模块,使得该软件模块可在一段时间内存储一定量的数据。如果否,则过程400A结束。然而,如果所请求的存储器操作是对一定量的存储器的分配操作,则在框404,采取缓解动作来增加所分配的存储器的量。在某些实施例中,该较大的存储器量可以取决于所请求的存储器的大小;例如,是所请求的存储器的两倍。在另一实现中,额外存储器可以是用于给定计算设备的固定量的存储器;例如,对于32位处理器,额外的所分配的存储器可以是32字节(即,如果请求了四个字节,则总的分配将是36字节),且对于64位处理器,该额外的所分配的存储器可以是48字节。在框404可以分配任何合适量的额外存储器。
在框406,然后通过在其中存储标记值来将该额外存储器“标记”为额外存储器。该标记值可以是任何合适的值,并且可以是对每一存储器单元(如对每一存储器块)存储的重复值,或者是跨额外的所分配的存储器的整个空间写入的单个值或值模式。该标记值可以是可以如下所讨论的用作评估的一部分来确定缓解动作是否成功地缓解了存储器错误的任何合适的值。例如,如果稍后审阅该额外存储器且确定标记值已被盖写,则可以确定软件模块遭受引起缓存溢出错误的编程隐错——意味着写入了大于请求量的数据——并且额外分配通过分配额外的空间缓解了存储器错误。在写入了标记值之后,则过程400A结束。
图4B示出了用于根据此处描述的某些原理来执行缓解动作的第二示例性过程400B。过程400B在框410开始,在那里确定所请求的存储器操作是否是重新分配操作,其中调用软件模块正在寻求增加或减少先前分配的存储器的量。如果不是重新分配操作,则过程400B结束。
然而,如果存储器操作是重新分配操作,则在框412,确定该请求是否是针对减少存储器分配的。如果是,则在框414,在解除来自原始分配的剩余存储器的分配时将分配保持在相同的根位置中。在框416,存储器管理模块110不立即释放剩余的存储器,而是等待直到一等待时间段之后。在框414,可将如上所述的标记添加到要释放的存储器。当存储器实际被释放时,可检查这些标记来查明是否存取了旨在不被使用的存储器。过程400B随后结束。
如果在框412确定所请求的重新分配是针对更大量的存储器的,则在框418,确定是否有足够的、与原始分配直接相邻的空闲存储器,使得可以从该直接相邻存储器分配所请求的新存储器并且可为该数据保持原始位置。如果是,则在框420,完成:将来自原始分配的数据保持在相同的位置中,从该位置扩大分配,并且该过程结束。
然而,如果没有足够的直接相邻的存储器,则在框422将分配移至存储器的另一部分中的较大空间,并且在框424不解除原始存储器的分配,直到一等待时间段之后。如上所述,先前分配且不应再被使用的存储器可用标记来填充,以便可检测引起对该存储器的存取的隐错。该过程随后结束。
该缓解可用于缓解遭受导致软件模块在其中存储器分配被移至存储器的不同部分的重新分配操作之后继续使用原始存储器空间的编程隐错的软件模块中的存储器错误。通过试图将存储器分配保持在相同位置且不允许其他软件模块使用存储器块直到一等待时间段之后,这些编程隐错的影响可被缓解,因为软件模块直到等待时间段到期之后才能使用原始分配。
图4C示出了另一示例性过程400C。过程400C在框430开始,在那里确定所请求的操作是否是解除分配,即“释放”操作。如果否,则过程400C结束。
然而,如果所请求的存储器操作是释放操作,则在框432,确定释放操作的输入参数是否正确。例如,如果存储器管理模块112是管理堆存储器的分配的模块,则在框432可以确定请求释放的存储器的地址是否是正确分配的堆存储器而非栈存储器或全局变量空间的地址。这可以按任何合适的方式完成。
例如,缓解模块112可以通过将“释放”操作的输入地址与堆的地址范围进行比较来确定该地址所引用的存储器是否是堆存储器;如果否,则该输入地址可能是不正确的。作为另一示例,存储器管理器在分配了堆中的存储器块之后可用标记来为该块加上标签。如果缓解模块112被实现为执行图4A的过程400A,则任何正确分配的堆存储器将会在额外存储器中存储了标记值。通过检查这些标记值的存在,缓解模块112可确定存储器已被存储器管理模块110正确地分配,且因此输入参数是正确的。如果在框432以任何方式确定参数是正确的,则在框434,可在等待时间段之后执行所请求的释放操作,且过程400C结束。如上所述,在缓解模式中,“释放的”存储器可能无法直接可供使用。相反,可以用标记值来填充该存储器以便允许检测对该存储器的非预期存取。然而,如果参数是不正确的,则在框436,可忽略该操作,或者可生成错误消息并将其发回到调用软件模块,且该过程结束。在忽略操作时,可存储缓解成功地阻止了隐错创建错误的指示。这一所存储的指示可如下所述地用于确定是否继续向调用软件模块应用缓解400C。
图4D示出了可由缓解模块112实现来执行一个或多个缓解动作的过程的另一个示例。在图4D的过程400D中,首先在框440确定所请求的存储器操作是否是解除分配,即“释放”操作。如果否,则过程400D结束。然而,如果所请求的存储器操作是释放操作,则在框442,确定该释放操作是否是“双重释放”——即,确定该释放操作是否因调用软件模块中的编程隐错而是先前的释放操作的重复。这可用任何合适的方式来完成,包括通过确定请求释放的存储器是否仍未被执行,因为其仍在自前一请求起的等待时间段内。该等待时间段内的存储器可被标识为包含如上所述的标记值,或者通过存储“释放的”存储器块的记录或以任何其他合适的方式来标识。
如果是重复,则在框444,忽略该操作。如果不是重复,则在框446,确定释放操作是否与调用软件模块的退出相关联,因为调用软件试图在退出期间清除其所分配的存储器。这可以按任何合适的方式完成。如果是,则在框444,忽略且不执行所请求的操作。这可以出于两个原因来完成。首先,研究显示诸如用户应用程序等许多调用软件模块在关闭期间不正确地释放存储器,导致在关闭期间经历的30%的存储器错误。第二,许多操作系统108和存储器管理模块110已经有了在调用软件模块退出时的自动释放操作,因此调用软件模块所做出的释放操作请求可被认为是重复。如果在框444作为框442或446的任一个中的判定的结果忽略该操作,则过程400D结束。
然而,如果所请求的存储器操作在框446被确定为不是退出操作时的释放,则在框448,在等待时间段之后执行该释放操作。可以这样做来防止可在调用软件模块因编程隐错而释放存储器然后在释放之后仍使用该存储器时所引发的存储器错误。通过直到等待时间段之后才执行释放操作,能缓解可因存储器在释放之后被立即重新分配给另一软件模块而导致的存储器错误的影响,在这种存储器错误的情况下,原始软件模块和新软件模块然后两者都会使用该存储器且各自盖写对方所保存的数据。一旦在等待时间段之后执行了存储器操作,则过程400D结束。
在等待时间段之后执行释放操作可以用任何合适的方式来完成。例如,该等待时间段可以是一设定的时间段,如几秒。该等待时间段也可以是灵活的时间段,如基于所请求的分配和释放操作的次数,如当存在对存储器的较低需求时该时间段较长,而当存在对存储器的较高需求时该时间段较短。另一可能的实现是等待直到应用程序终止之后,使得在进程终止时,解除该进程内使用的存储器的分配的操作系统的部分实际释放该存储器。以此方式,应用程序终止,且该应用程序在其中执行的进程也终止,存储器最终可被释放。在其他实现中,该等待时间段可以完全不是设定的时间段,而是因将释放操作置于队列中以便在其到达该队列的顶部时执行而得到的非预定时间段。这一实现的一个示例在图5中示出,但应当理解,其他实现是可能的。
图5的过程500在框502开始,在那里确定释放的存储器高速缓存的大小。这可以用任何合适的方式来确定,如通过选择总存储器空间的百分比,或通过接受来自计算设备的用户或管理员的输入。例如,所释放的存储器高速缓存可以是8兆字节(8MB)。在框506,缓解模块112接收用于执行释放操作的请求。在框508,将请求释放的存储器添加到高速缓存,这意味着将释放操作中的存储器量添加到高速缓存总量。当将存储器添加到高速缓存时,也向进程队列添加要执行的操作的指示,指示请求了该操作。应当理解,当该存储器在“高速缓存”中时,该存储器被维护为被分配给调用软件模块,因为在该实现中,该高速缓存被维护为请求释放但尚未释放的存储器量的指示符。
在框510,在将存储器添加到高速缓存之后,确定尚未释放的存储器量是否达到或超过了高速缓存的大小。如果否,则过程500返回到框506,在那里它接收释放存储器的另一指令。如果达到或超过了高速缓存限制,则在框512,至少将队列顶部的操作弹出并执行,从而释放与最早延迟的释放操作相关联的存储器并将分配给高速缓存的存储器的大小减小到该限制以下。应当理解,在某些情况下,为了再一次将高速缓存的大小返回到限制以下,可要求执行来自队列的两个或更多操作,但是该原理与图5所示的相同。一旦执行了队列中的第一个操作并将其从队列中移除,则过程500的流程返回到框506,在那里接收执行释放操作的另一指令。
以上描述了具有缓解模式的存储器管理模块110的若干示例性实现,在缓解模式中,缓解模块112使用一个或多个缓解动作来降低存储器错误负面地影响软件模块的可能性。如下所述,这些缓解可基于缓解是否可能减少每一应用程序中的错误而在逐个应用程序的基础上选择性地应用。可描述用于选择性地启用缓解模式且评估缓解动作的有效性的缓解启用模块114的示例性实现。然而,应当理解,缓解启用模块114可以用任何合适的方式来实现,包括作为缓解模块112的组件,因为本发明的各实施例在这一方面不受限制。
图6示出了根据此处描述的原理的一个这样的示例性实现。图6的过程600在框602开始,在那里缓解启用模块114检测调用软件模块经历了错误。该检测可以用任何合适的方式来执行,如通过检测软件模块崩溃或以其他方式不正确地执行。在框604,读取与错误相关联的错误代码,并且在框606,确定其是否是存储器错误。如果不是存储器错误,则过程600结束。
然而,如果是存储器错误,则过程600继续到框608,在那里如通过对数据存储212中的规则与设置记录218创建或编辑条目并将关于错误事件的信息写入事件日志216来对该特定调用软件模块启用缓解模式。在某些实现中,缓解模式可以在首次检测到存储器错误时启用,而在替换实现中,在应用缓解模式之前必须达到阈值数量的存储器错误或在某一时间帧内达到阈值数量的存储器错误,如一小时内四次。根据此处描述的原理可以实现用于启动缓解模式的任何合适的测试。
在框610,在软件模块请求且存储器管理模块的缓解模块114执行操作时,缓解启用模块114随时间跟踪缓解动作的成功。跟踪成功可用任何合适的方式来完成,包括通过上述技术中的任一种。在某些实现中,这可包括编译关于所检测到的软件模块经历的错误和/或所检测到的缓解动作在阻止存储器错误负面地影响软件模块方面的成功的统计数据。这些统计数据可对与应用程序相关的软件模块的一具体实例来编译,或者可随时间跨软件模块的多个实例来收集。在某些实现中,该统计数据可包括缓解标签值,或者可跟踪成功和其中应用程序在没有成功的缓解的情况下执行的实例的其他机制。作为一具体示例,缓解标签值可以在缓解动作被检测为成功时递增,且在应用程序在没有成功缓解的情况下终止时递减。在没有成功缓解的情况下终止可以仅基于从应用程序的“干净”退出确定。然而,可应用关于无成功缓解的其他度量,如是否检测到错误或崩溃影响了软件模块,或者在对应用程序的具体实例没有成功缓解的情况下。
在框612,使用在框610的跟踪期间收集的信息来确定缓解动作是否成功地缓解了错误。在使用诸如缓解标签值等统计数据的实现中,这可包括确定该统计数据是否指示成功在特定阈值水平之上或者错误在特定阈值水平之下——如通过确定缓解标签值是否在特定阈值之上——但这可用任何合适的方式来完成。如果缓解动作成功地缓解了错误,则在框614,可对该软件模块维持缓解模式,但是如果缓解动作不成功,则在框616对该软件模块禁用缓解模式。在框616或616之后,过程600结束。
应当理解,图6的过程600仅是可由缓解启用模块114根据此处描述的原理来实现的技术的类型的示例,其他技术也是可能的。例如,尽管检测错误和评估错误代码在图6中被描述为是缓解启用模块114的责任,但在某些替换实现中,这些功能可由操作系统108的另一模块来执行,如微软Windows操作系统的Windows诊断基础结构(WDI),且缓解启用模块114可监视WDI模块来确定何时检测到存储器错误,或当检测到存储器错误时由WDI模块通知。
此外,缓解模式被描述为基于框612中对缓解动作是否成功地缓解了错误的判定来启用或禁用。在某些实现中,缓解启用模块114可另外地或另选地基于其他因素来启用/禁用缓解模式,如其存储器操作以缓解模式执行的软件模块的时间或数量。例如,在一个实现中,软件模块的操作可以仅在一段时间(如一周)内以缓解模式执行,之后回退到正常(非缓解)模式。
在另一示例性实现中,缓解启用模块114可以在给定时间内仅对一设定数量的软件应用程序启用缓解模式,如同时仅对四个软件应用程序启用,来节省系统资源。如果达到了最大值且如在框602-606中检测到应对另一软件模块启用缓解模式,则最早启用了缓解模式的软件模块可将该缓解模式禁用,使得新软件模块可启用缓解模式。
在某些实现中,可使用这些技术中的每一个的组合,使得缓解模块保持在一设定时间段内对软件模块启用,只要缓解启用模块114检测到缓解动作成功地缓解了错误,但是该模式仅被启用一设定时间段,之后当接着检测到另一软件模块可从缓解模式中获益时则禁用该模式。
跟踪缓解动作在减少应用程序经历的存储器错误的数量方面的成功可用任何合适的方式来执行。图7A和7B示出了用于检测缓解动作的成功的两种示例性技术的流程图,但应当理解,取决于期望被缓解的存储器错误的类型以及对缓解模块112可用的缓解动作的类型,其他技术是可能的。
图7A的过程700A是关于如何能跟踪缓解动作在缓解错误方面的成功的总体过程的一个示例。在该示例中,图4A的分配过程400A是缓解动作被跟踪。过程700A在框702开始,在那里缓解启用模块114出于任何原因对软件模块启用缓解模式。在框704,缓解模块112接收对特定软件模块执行分配操作的请求,并且根据图4A的过程400A,分配多于请求量的存储器且将标记值写入该额外存储器。
在框706,缓解模块112接收对框704中分配的存储器执行释放操作的请求。如上所述,该释放操作可被延迟。但是,当在框708处实现该操作时,确定框704中分配的额外存储器是否仍存储写入它的标记值。如果该额外存储器仍存储该标记值,则在框710,缓解启用模块114可存储在该实例中缓解动作对存储器错误没有影响的指示,如存储在其事件日志216中。然而,如果在框708确定额外存储器未存储标记值,则在框712,缓解启用模块114可在事件日志216中存储成功地缓解了错误的指示。在这一情况下,成功地检测到软件模块写入了多于空间请求量的数据,且因此缓解模块112成功地缓解了缓存溢出错误。在框710或712中存储了任一指示之后,在框714释放存储器,这可以用任何方式来完成,包括根据结合图5描述的延迟的释放过程500。在框714中释放了存储器之后,该过程结束。
图7B示出了用于跟踪缓解模块在缓解错误方面的成功的另一示例性技术700B,这一次是根据诸如图5的过程500等延迟的释放缓解动作来进行的。如同过程700A一样,过程700B在框720开始,在那里缓解模块出于任何原因对特定软件模块启用缓解模式。在框722,缓解模块112接收对先前已被分配给特定软件模块的存储器执行释放操作的请求。在框724,对于期望被释放的存储器的内容以任何合适的方式计算校验和或散列值,且在框726,延迟释放操作的执行直到一等待时间段之后。在框728,在该等待时间段之后,再一次为存储器的内容计算校验和或散列值。在框730,确定来自框724的原始散列值是否匹配框728的后一散列值。如果是,则在框732,缓解启用模块114可在其事件日志216中存储缓解动作在该实例中对缓解错误没有影响。然而,如果在框730确定散列值不相同,则在框734,可在缓解启用模块114的事件日志216中存储缓解模块112成功缓解错误的指示,因为可以检测到由于存储器的内容随时间改变,延迟释放直到等待时间段之后缓解了因编程隐错在软件模块完成使用存储器之前释放了存储器而引起的存储器错误的影响。在框732或734中存储任一指示之后,在框736释放存储器,且该过程结束。
过程700A和700B所存储的缓解动作的有效和无效性的指示可用任何合适的方式来使用。在某些实现中,这些指示可用于计算关于缓解动作对与应用程序相关的软件模块的影响的统计数据。这些统计数据可以跨软件应用程序的多个实例来计算。这些统计数据可以包括允许计算成功缓解频率的时间分量。在某些实施例中,该时间分量可以是观察到多个成功缓解的时间的指示。然而,该时间分量也可被测量为调用软件模块的调用次数。成功缓解频率可以是保持缓解是否有可能避免隐错对调用软件模块的影响的预测符,并且可以基于这些统计数据来确定是否对调用软件模块的将来实例实现缓解动作。
如上所述,在一个实现中,可使用诸如图2C所示的缓解标签值来作为用于确定是否应对特定软件模块启用缓解模式的统计数据。该缓解标签值可以是任何合适的值,并且可以用任何合适的方式来初始化和调整。图8示出了可用于使用每一调用软件模块的缓解标签值来管理缓解模式的技术的一个示例。在所示实施例中,标签值被存储在非易失性存储器中,并且可以跨应用程序的实例、计算机的关闭或其他事件而持久保存。
图8的过程800在框802开始,在那里缓解启用模块114检测存储器错误。框802中的检测可以用任何合适的方式来完成,包括通过检测软件模块的不正确执行或崩溃。在框804,对软件模块启用缓解模式,并且在框806,将缓解标签值初始化为一特定值。该特定值可以是任何合适的值,并且可以是跨特定系统上的所有软件模块一致的值、基于任何合适的特性(如函数或源开发者)为特定一组应用程序选择的值、为特定软件模块选择的值、或任何其他合适的值。在某些实施例中,如下所述,该初始值可以基于关于对所关注的应用程序成功缓解了错误的历史数据。在一个示例性实现中,缓解标签值可以是整数,且在对软件模块启用缓解模式时,该初始化的值可以是七(7)。
在框808,缓解模块112以缓解模式对软件模块执行存储器操作,并且对于该软件模块的每一实例化——如模块的每一次执行——缓解启用模块114跟踪缓解模块112在该实例化中缓解错误的成功。跟踪成功可用任何合适的方式来完成,包括通过以上结合图7A和7B描述的技术中的任一种。
在框810,缓解启用模块114检测软件模块的实例的结束。实例的结束可以是正确的结束,如用户驱动或进程驱动的退出所导致的结束,或者可以是不正确的结束,如崩溃导致的结束。在框810,可将关于软件模块的实例的结束以及该结束的起因的信息存储在缓解数据存储212的事件日志216中。
在框812,缓解启用模块814使用框808和810中收集的信息来更新软件模块的缓解标签值。在某些实现中,如果检测到缓解模块112成功地缓解了错误,则可递增缓解标签值。如果缓解模块112未成功缓解错误,则可递减缓解标签值。在其他实现中,可使用更多因素。表I示出了可用于确定如何调整缓解标签值的因素的一个示例,但其他因素是可能的。
表I
在表I的示例中,使用了关于软件模块的实例的结束类型以及关于缓解动作的成功两者的信息来确定如何调整软件模块的缓解标签值。在表I中,如果缓解启用模块114确定该实例随诸如崩溃等不正确执行结束,则不论是否有任何成功缓解,都可递减缓解标签值。可以这样做是因为很清楚,缓解模式的缓解动作没有足够尽力停止崩溃,且如果仍有崩溃,则可假定以缓解模式操作存储器管理模块110而带来的效率损失超过了缓解模式的获益。然而,对崩溃的其他可能的反应是可能的,如对标签值不进行改变。
然而,如果缓解启用模块114检测到随正确执行结束的实例,从而导致干净退出,则对是否有任何成功缓解的判定更为重要。在表I的实现中,如果实例干净地结束并且没有检测到成功缓解,则可以递减缓解标签值。可以这样做是因为如果实例在缓解动作没有任何注意得到的影响的情况下正确操作,则任何检测到的获益未超过效率损失。然而,如果实例干净地结束且存在一些检测到的成功缓解,则可递增缓解标签值,因为可以假定成功的缓解至少部分地是实例正确操作的原因。
应当理解,尽管在表I的示例中,在每一情况下缓解标签值仅递增或递减一,但在其他实现中,可以对每一情况使用任何合适的值,包括对每一情况不相等的值。同样,可以对标签值设置上限。
一旦在框812更新了缓解标签值,则通过使用任何合适的技术,在框814,确定软件模块的缓解标签值是否低于阈值水平。例如,在缓解标签值是整数的情况下,可以确定缓解标签值是否为零(0)或低于零。如果缓解标签值不低于阈值,则过程800继续跟踪缓解动作在软件模块的下一实例中的成功。然而,如果确定缓解标签值低于阈值水平,则可对软件模块的将来实例禁用缓解模式,且过程800结束。
在此处描述的原理的使用缓解标签值的实现中,该值可在任何合适的时间调整,且不仅是在软件模块的实例的执行之后。例如,在一个实现中,如上所述,可在一段时间(如一周)内对软件模块启用缓解模式,之后移除缓解模式。因此,在使用缓解标签值的实现中,在该时间段之后,缓解标签值可被重置为空、减小到零、或以其他方式清除。在某些实现中,有时候除了时间段之外,在特定时刻仅允许特定数量的软件模块以缓解模式操作,且如果另一软件模块被置于缓解模式,则可清除第一软件模块的缓解标签值。同样,为了避免任意地增大如图2C所示的数据结构的大小,可在某一时间段之后完全删除关于应用程序的信息。
过程800中使用的缓解标签值的初始化值可从任何合适的源接收,包括从计算设备100的用户和/或管理员接收。在根据此处描述的某些原理操作的某些实现中,初始化值的源可以是远程计算设备,如从多个计算设备收集关于缓解动作在缓解特定软件模块的错误方面的成功的信息的聚集服务器。这一实现在图9-11中示出,且根据该实施例操作的技术在图12-13中示出。
图9示出了根据该实现的计算设备900的实现。如以上关于图1所讨论的,计算设备900的图并不旨在是计算设备900的组件的全面描绘,也不旨在是根据本实现来操作计算设备所必需的组件的描绘。图9的计算设备900与上述图1的计算设备100共享某些共同的组件,且因此,为简明起见,这些共同的组件用相同的附图标记来指定并且将不在此处讨论。此外,应当理解,计算设备900可以被实现为上述合适的计算设备中的任一个,包括被实现为台式或膝上型个人计算机。
除了共同组件之外,图9的计算设备100包括作为操作系统108的组件的错误报告客户端902,以及网络适配器904。网络适配器904可以是使得计算设备900能够通过任何合适的计算网络来与任何其他合适的计算设备进行通信的任何合适的硬件和/或软件。该计算网络可以是用于在两个或更多个计算机之间交换数据的任何合适的一个或多个有线和/或无线通信介质,包括因特网。在一些实现中,网络适配器904可被实现为两个或更多单独的网络适配器,以提供经由两种或更多种类型的接口的连接(例如,诸如以太网适配器之类的有线网络适配器和诸如IEEE 802.11g适配器之类的无线网络适配器)。错误报告客户端902可以是用于收集关于在计算设备900上执行的软件模块以及该软件模块经历的任何错误和缓解模块112采取的任何成功的缓解动作的信息的任何合适的功能模块。错误报告客户端902可以使用网络适配器904将该信息发送到任何合适的目的地,包括聚集服务器。
图10示出了计算设备900可在其中起作用的计算机系统的一个示例。图10示出包括计算设备900可以连接的通信网络1000的计算机系统。通信网络1000可以是任何合适的有线和/或无线网络,其中包括较大有线和/或无线网络的一部分,诸如家庭网络、企业网的子网、因特网、和/或其他。此外,如上所讨论的,计算设备900被示为台式个人计算机,但是可以是任何合适的计算设备。可供计算设备900通过通信网络1100访问的是服务器1102。聚集服务器可被实现为被配置成收集任何合适的信息的任何合适的服务器设备,包括被实现为担当与在多个计算设备(包括计算设备900以及计算设备1006A和1006B)上执行的软件模块有关的数据的中央储存库的错误报告服务器。错误报告服务器1102存储的数据可用任何合适的方式来存储,包括存储在相关联的数据存储1104上。如以下进一步讨论的,错误报告服务器1102可适用于聚集多个计算设备的错误报告客户端发送的信息、评估信息、并向计算设备提供配置信息。以此方式,计算设备900可基于其他计算设备1006A和1006B的经验来配置,反之亦然。错误报告服务器1002提供的配置信息可以是任何合适的信息,包括用于跨应用程序的多个实例测量缓解动作的成功的配置统计数据。如同本地收集的统计数据一样,成功信息可与时间分量相组合以产生可用于预测将来成功的成功缓解频率。这一信息可用于导出指示是否应该应用缓解以及缓解应被应用多久的值。例如,配置统计数据可包括在确定应禁用缓解模式之前应考虑多少实例的指示。在某些实现中,配置统计数据可包括特定应用程序的缓解标签初始化值。
图11是图10所示的计算机系统的各个组件的交互的图。图11的系统与上述图2B的系统共享共同的组件。为简明起见,这些共同组件用相同的附图标记来指示,且将不在此讨论。在图11的系统中,错误报告客户端902收集与在计算设备900上执行的软件模块的不正确执行有关的信息。当错误报告客户端902检测到软件模块在不正确地执行时——例如,崩溃或以其他方式不正确退出——错误报告客户端902可以从软件模块以及从缓解启用模块114两者检索与不正确执行相关的信息。与软件模块有关的信息可以是任何合适的信息,包括与不正确执行相关联的任何错误代码,以及提供关于在崩溃时该软件模块的执行的状态信息的“栈垃圾(stack dump)”。除了来自软件模块的该信息之外,错误报告客户端902还可适用于从缓解启用模块114检索关于任何存储器错误的信息,且如果软件模块以缓解模式操作,则检索缓解模块112检测到的任何缓解成功以及软件模块的缓解标签值。在这样做时,错误报告客户端900能够检索比常规错误报告客户端更多的关于在不正确执行时软件模块的状态的信息,并且向聚集服务器提供比先前可能的更多的详细信息。尽管错误报告在常规上是由崩溃触发的,但可使用其他合适的触发,包括仅仅是时间的经过,使得即使没有发生崩溃,所存储的缓解信息也可被传输到错误报告服务。
错误报告客户端902然后可将该详细信息发送到错误报告服务器1002以便存储在错误报告数据存储1004中。错误报告数据存储1004中的信息可包括关于软件模块的不正确执行的崩溃信息1106,以及缓解设置1108。缓解设置1108可以是关于缓解的任何合适的信息,和/或可用于支配诸如计算设备900等计算设备上的缓解模式的任何合适的信息,包括成功频率信息。错误报告服务器1002然后可处理从错误报告客户端902发送的信息,以及存储在错误报告数据存储1104中的信息,并作为响应提供任何合适的配置信息。如上所述,配置信息可以是任何合适的信息,包括建议的初始缓解标签值。除了向错误报告客户端提供配置信息之外,错误报告服务器1002可以将任何合适的信息发送到其他方。例如,关于缓解动作的成功以及错误类型的信息可被发送到存储器管理模块110和/或操作系统108的开发者,并且关于存储器管理模块110检测到的存储器错误的信息可被发送到软件模块的开发者,使得开发者可以试图标识并解决引起存储器错误的编程隐错。
图12和13示出了在包括根据此处描述的某些原理操作的错误报告服务器的实现中用于操作计算系统的示例性过程。在图12和13的示例中,发送到错误报告服务器的信息和从错误报告服务器接收的信息可包括缓解标签值。然而,应当理解,并非包括错误报告服务器的所有实现都可使用统计数据来跟踪多个实例上的缓解动作的成功,且某些使用统计数据的实现可以不使用缓解标签值,因为本发明的各实施例在这些方面不受限制。
图12示出了用于根据此处描述的某些原理来操作计算设备900以便与错误报告服务器1002交换信息并接受来自该服务器的配置数据的一个示例性过程1200。然而,应当理解,此处描述的不以错误报告服务器为特征的原理的实现可按任何合适的方式操作,且这些实现不限于用图12所示的示例性过程1200来实现。
示例性过程1200在框1202开始,在那里错误报告客户端902检查用户是否授权错误报告。如果是,则错误报告客户端打开到错误报告服务器1002的连接,且在框1204,将信息发送到服务器来报告错误和缓解成功。框1202和1204的动作可在任何合适的时间执行,包括在检测到软件模块的不正确执行之后或以周期性的报告时间。框1204发送的信息可基于作出发送的时间和环境来改变。例如,如果响应于对软件模块的不正确执行的检测采取动作,则该信息可包括关于与该软件模块有关的错误和缓解成功的信息,而如果以周期性报告时间采取动作,则该信息可以与自从上一次报告以来计算设备900执行的所有或部分软件模块有关。在框1206,在框1204的发送之后,错误报告客户端902可以向错误报告服务器1002请求配置数据,且在框1208接收该配置数据。在框1210,错误报告客户端902可以将配置数据提供给缓解启用模块116,缓解启用模块116进而更新缓解数据存储212的规则与设置数据218。在更新了数据存储212之后,缓解启用模块114然后可应用规则与设置来选择性地对在计算设备900上执行的软件模块启用缓解模式,且该过程结束。应用规则与设置可以按任何合适的方式来完成。例如,如果配置数据包括初始缓解标签值,则在对软件模块启用了缓解模式之后,缓解启用模块114可以将软件模块的缓解标签值初始化为配置数据中包含的值。
图13示出了用于根据此处描述的某些原理来操作错误报告服务器1002的说明性过程1300。过程1300在框1302开始,在那里错误报告服务器1002打开到一个或多个错误报告客户端900/1006A/1006B的连接。在框1304,错误报告服务器1002从客户端接收信息,并在数据存储1004中聚集该信息。框1304中接收的信息可以是任何合适类型的信息,包括关于软件模块所经历和错误报告客户端检测到的错误的信息,以及关于缓解模块112所采取和检测到的缓解动作的成功的信息。在框1306,将框1304接收的缓解成功数据与在该信息中报告的每一软件模块的先前的缓解成功数据进行比较,来确定总体上以缓解模式操作软件模块是否成功。例如,这可以包括确定所检测到的不正确执行的次数是否超过或基本上超过所缓解的错误的数量,或者可包括任何合适的判定。
基于框1306的这一比较,在框1308作出对于特定软件模块缓解模式是否成功地缓解了存储器错误的判定。如果是,则在框1310,错误报告服务器1310可以例如通过通知客户端对软件模块使用高初始缓解标签值来通知客户端使用缓解模式。然而,如果在框1308确定缓解模式不成功,则在框1312,错误报告服务器例如通过通知客户端使用低初始缓解标签值来通知客户端限制缓解模式的使用。在框1310或1312的任一个中通知了客户端之后,过程1300结束。
如上所讨论的,在某些实现中,缓解启用模块114可能不对特定软件模块启用缓解模式,直到该软件模块崩溃了阈值次数或者在某一时间段内崩溃了阈值次数,如一小时内崩溃了四次。然而,在包括计算设备900可与其交互的错误报告服务器1002的某些实现中,信息可在每一次检测到软件模块的不正确执行之后,包括在第一次这样的检测之后被发送到错误报告服务器。如果错误报告服务器1002的记录指示缓解模式成功地缓解了软件模块的错误,则如结合图12和13所讨论的,错误报告服务器1002可以向计算设备902发送指示应使用缓解模式的配置信息。响应于该配置信息,缓解启用模块114在这些实现中可以在软件模块的下一次执行时对软件模块启用缓解模式,而不论缓解启用模块是否维护了阈值规则。
至此描述了本发明的至少一个实施例的若干方面,可以理解,本领域的技术人员可容易地想到各种更改、修改和改进。
例如,描述了其中应用所有可用缓解或不应用任何缓解的两种操作模式。应当理解,在某些实施例中,其中应用部分但非全部可用缓解的中间选项是可能的。
这样的更改、修改和改进旨在是本发明的一部分且旨在处于本发明的精神和范围内。因此,上述描述和附图仅用作示例。
本发明的各个方面可单独、组合或以未在前述实施例中具体讨论的各种安排来使用,从而并不将其应用限于前述描述中所述或附图中所示的组件的细节和安排。例如,可使用任何方式将一个实施例中描述的各方面与其他实施例中描述的各方面组合。
同样,本发明可被具体化为方法,其示例已经提供。作为该方法的一部分所执行的动作可以按任何合适的方式来排序。因此,可以构建各个实施例,其中各动作以与所示的次序所不同的次序执行,不同的次序可包括同时执行某些动作,即使这些动作在各说明性实施例中被示为顺序动作。
在权利要求书中使用诸如“第一”、“第二”、“第三”等序数词来修饰权利要求元素本身并不意味着一个权利要求元素较之另一个权利要求元素的优先级、先后次序或顺序、或者方法的各动作执行的时间顺序,而仅用作将具有某一名字的一个权利要求元素与(若不是使用序数词则)具有同一名字的另一元素区分开的标签以区分各权利要求元素。
同样,此处所使用的短语和术语是出于描述的目的而不应被认为是限制。此处对“包括”、“包含”、“具有”、“含有”、“涉及”及其变型的使用旨在包括其后所列的项目及其等效物以及其他项目。

Claims (18)

1.一种用于降低计算机系统遇到存储器错误的频率的方法,所述方法包括:
从调用软件模块接收执行存储器操作的请求;
响应于接收执行存储器操作的请求,确定在所述调用软件模块请求的所述存储器操作的执行期间是否应当应用一个或多个缓解动作,确定对所述调用软件模块是否应当应用一个或多个缓解动作包括检查与存储器管理模块相关联的数据存储中的条目,所述条目与所述调用软件模块相关联;
如果应当应用所述一个或多个缓解动作,则应用至少一个缓解动作,所述缓解动作可用于降低作为所述存储器操作的结果而发生存储器错误的可能性;以及
根据所述缓解动作执行所述存储器操作。
2.如权利要求1所述的方法,其特征在于,所述存储器操作是请求释放分配给所述调用软件模块的存储器,并且根据所述缓解动作执行所述存储器操作包括将分配给所述调用软件模块的存储器添加到要释放的存储器的队列,并且在所述存储器到达所述队列的顶部时执行释放所述存储器的存储器操作。
3.如权利要求1所述的方法,其特征在于,所述存储器操作是影响堆存储器的操作,
所述缓解动作包括确定所述存储器操作的输入信息是否包括堆存储器的地址,以及
根据所述缓解动作执行所述存储器操作包括如果所述输入信息不包括所述堆存储器的地址,则不执行所述存储器操作。
4.如权利要求1所述的方法,其特征在于,所述与存储器管理模块相关联的数据存储与和所述存储器管理模块交互的缓解启用模块相关联。
5.如权利要求1所述的方法,其特征在于,所述检查与存储器管理模块相关联的数据存储中的条目包括:审阅存储在缓解数据存储中的先前收集的信息,所述信息包括事件日志以及规则与设置。
6.如权利要求5所述的方法,其特征在于,审阅所述信息包括审阅关于所述缓解动作是否有效的一个或多个统计数据,包括所述缓解动作的成功的数量和/或频率的统计数据。
7.如权利要求6所述的方法,其特征在于,审阅所述信息包括将所述一个或多个统计数据与一阈值相比较,以及基于所述一个或多个统计数据是在所述阈值水平之上还是之下的判定来确定应用所述一个或多个缓解动作。
8.如权利要求7所述的方法,其特征在于,所述一个或多个统计数据指示关于存储器错误和/或检测到的缓解动作的成功的数量/频率。
9.一种操作计算设备的操作系统的存储器管理模块的方法,所述方法包括:
用所述存储器管理模块接收来自第一调用软件模块的执行第一存储器操作的第一请求,以及来自第二调用软件模块的执行第二存储器操作的第二请求;
审阅与所述存储器管理模块相关联的数据存储中的至少一个第一条目来确定在所述第一调用软件模块请求的存储器操作的执行期间是否应当应用一个或多个缓解动作;
审阅与所述存储器管理模块相关联的数据存储中的至少一个第二条目来确定在所述第二调用软件模块请求的存储器操作的执行期间是否应当应用一个或多个缓解动作;
通过部分地应用至少一个缓解动作来执行所述第一存储器操作,所述至少一个缓解动作可用于降低发生存储器错误的可能性;以及
在不应用缓解动作的情况下执行所述第二存储器操作。
10.如权利要求9所述的方法,其特征在于,所述第一调用软件模块是第一软件应用程序,所述第二调用软件模块是与所述第一软件应用程序不同的第二软件应用程序。
11.如权利要求9所述的方法,其特征在于,所述第一存储器操作是立即解除用于所述第一和第二调用软件模块的存储器的分配,并且通过应用所述至少一个缓解动作来执行所述第一存储器操作包括在将来的时间执行解除所述存储器的分配的操作。
12.如权利要求11所述的方法,其特征在于,所述将来时间不是预定量的时间,并且通过应用所述至少一个缓解动作来执行所述第一存储器操作包括:将所述第一存储器操作置于队列中以便在所述第一存储器操作到达所述队列的顶部时执行。
13.如权利要求9所述的方法,其特征在于,通过部分地应用所述至少一个缓解动作来执行所述第一存储器操作包括确定所述第一存储器操作的输入信息是否正确,并且如果不正确,则不执行所述第一存储器操作,并向所述第一调用软件模块返回所述第一存储器操作被执行的指示。
14.如权利要求9所述的方法,其特征在于,审阅数据存储中的至少一个第一条目包括审阅先前收集的信息,所述信息包括事件日志以及规则与设置。
15.如权利要求14所述的方法,其特征在于,审阅信息包括将与所述先前应用有关的至少一个值与一阈值进行比较,以及确定在所述至少一个值超过所述阈值时应用所述一个或多个缓解动作,所述至少一个值指示关于存储器错误和/或检测到的缓解动作的成功的数量/频率。
16.一种用于降低计算机系统遇到存储器错误的频率的设备,包括:
用于从调用软件模块接收执行存储器操作的请求的装置;
响应于接收所述执行存储器操作的请求,用于确定在所述调用软件模块请求的所述存储器操作的执行期间是否应当应用一个或多个缓解动作的装置,其中所述用于确定在所述调用软件模块请求的所述存储器操作的执行期间是否应当应用一个或多个缓解动作的装置包括用于检查与存储器管理模块相关联的数据存储中的条目的装置,所述条目与所述调用软件模块相关联;
用于如果应当应用所述一个或多个缓解动作,则应用至少一个缓解动作的装置,所述缓解动作可用于降低作为所述存储器操作的结果而发生存储器错误的可能性;以及
用于根据所述缓解动作执行所述存储器操作的装置。
17.如权利要求16所述的设备,其特征在于,用于检查与存储器管理模块相关联的数据存储中的条目的装置包括用于审阅存储在缓解数据存储中的先前收集的信息的装置,所述信息包括事件日志以及规则与设置。
18.如权利要求17所述的设备,其特征在于,用于审阅所述信息的装置包括用于将与所述先前应用有关的至少一个值与一阈值进行比较,以及确定在所述至少一个值超过所述阈值时应用所述一个或多个缓解动作的装置,所述至少一个值指示关于存储器错误和/或检测到的缓解动作的成功的数量/频率。
CN200980138420.3A 2008-09-26 2009-09-12 选择性地使用缓解来减少错误的存储器管理技术 Active CN102165426B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/238,600 US7949903B2 (en) 2008-09-26 2008-09-26 Memory management techniques selectively using mitigations to reduce errors
US12/238,600 2008-09-26
PCT/US2009/056763 WO2010036526A2 (en) 2008-09-26 2009-09-12 Memory management techniques selectively using mitigations to reduce errors

Publications (2)

Publication Number Publication Date
CN102165426A CN102165426A (zh) 2011-08-24
CN102165426B true CN102165426B (zh) 2014-11-26

Family

ID=42058924

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200980138420.3A Active CN102165426B (zh) 2008-09-26 2009-09-12 选择性地使用缓解来减少错误的存储器管理技术

Country Status (5)

Country Link
US (1) US7949903B2 (zh)
EP (1) EP2329384B1 (zh)
JP (1) JP5694170B2 (zh)
CN (1) CN102165426B (zh)
WO (1) WO2010036526A2 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7937625B2 (en) * 2008-09-26 2011-05-03 Microsoft Corporation Evaluating effectiveness of memory management techniques selectively using mitigations to reduce errors
JP5703968B2 (ja) * 2011-05-31 2015-04-22 富士電機株式会社 プログラム開発支援装置およびそのプログラム
US9940053B2 (en) 2014-05-28 2018-04-10 Nec Corporation Information processing device, information processing system, memory management method, and program recording medium
WO2016114789A1 (en) * 2015-01-16 2016-07-21 Hewlett Packard Enterprise Development Lp Memory manager
US10579494B2 (en) * 2018-01-05 2020-03-03 Nec Corporation Methods and systems for machine-learning-based resource prediction for resource allocation and anomaly detection
CN108062204A (zh) * 2018-01-12 2018-05-22 江苏华存电子科技有限公司 一种强化数据可靠度的系统和方法
CN117591267B (zh) * 2024-01-17 2024-04-05 苏州元脑智能科技有限公司 一种任务处理方法、设备、介质及系统

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04367951A (ja) * 1991-06-17 1992-12-21 Fujitsu Ltd メモリ滞留防止方式
JPH07121464A (ja) * 1993-10-28 1995-05-12 Hitachi Ltd 記憶領域割当て制御方式
JPH1173364A (ja) * 1997-08-29 1999-03-16 Nec Corp メモリバッファの管理方式
US6728907B1 (en) * 2000-04-14 2004-04-27 Microsoft Corporation System and method for self-diagnosing system crashes
JP2002108698A (ja) * 2000-10-04 2002-04-12 Nissin Electric Co Ltd メモリ管理システム及びメモリ管理方法
JP2003288266A (ja) * 2002-03-28 2003-10-10 Fujitsu Ltd メモリ割当方法及びそのプログラム
US7325118B2 (en) * 2003-09-30 2008-01-29 Samsung Electronics, Co., Ltd. Method and apparatus for executing dynamic memory management with object-oriented program
US7191364B2 (en) * 2003-11-14 2007-03-13 Microsoft Corporation Automatic root cause analysis and diagnostics engine
US7350045B2 (en) * 2003-12-31 2008-03-25 Microsoft Corporation Dynamic memory heap tagging
US7409596B2 (en) * 2004-09-02 2008-08-05 International Business Machines Corporation Apparatus and method for initializing diagnostic functions when specified run-time error criteria are satisfied
US7519867B2 (en) * 2004-12-21 2009-04-14 National Instruments Corporation Test executive which provides heap validity checking and memory leak detection for user code modules
US7451387B2 (en) * 2005-07-11 2008-11-11 Alcatel Lucent Autonomous method and apparatus for mitigating soft-errors in integrated circuit memory storage devices at run-time
US7484132B2 (en) * 2005-10-28 2009-01-27 International Business Machines Corporation Clustering process for software server failure prediction
JP2008003945A (ja) * 2006-06-23 2008-01-10 Toshiba Corp 監視制御システムとそのコンピュータ管理方法およびプログラム
US20090210750A1 (en) * 2008-02-19 2009-08-20 Sas Institute Inc. Systems And Methods For Identifying Memory Leaks In A Computer System

Also Published As

Publication number Publication date
JP5694170B2 (ja) 2015-04-01
WO2010036526A2 (en) 2010-04-01
EP2329384B1 (en) 2019-10-23
EP2329384A4 (en) 2016-08-03
WO2010036526A3 (en) 2010-07-29
US7949903B2 (en) 2011-05-24
US20100083047A1 (en) 2010-04-01
CN102165426A (zh) 2011-08-24
JP2012503825A (ja) 2012-02-09
EP2329384A2 (en) 2011-06-08

Similar Documents

Publication Publication Date Title
CN102165423B (zh) 选择性地使用缓解来评估存储器管理技术的有效性以减少错误
CN102165426B (zh) 选择性地使用缓解来减少错误的存储器管理技术
US11550630B2 (en) Monitoring and automatic scaling of data volumes
US9485160B1 (en) System for optimization of input/output from a storage array
US8595564B2 (en) Artifact-based software failure detection
US8738972B1 (en) Systems and methods for real-time monitoring of virtualized environments
US9535754B1 (en) Dynamic provisioning of computing resources
US20090172674A1 (en) Managing the computer collection of information in an information technology environment
US20140019814A1 (en) Error framework for a microprocesor and system
US20170359243A1 (en) Compute node cluster management
US20140195861A1 (en) Implementing rate controls to limit timeout-based faults
US8296552B2 (en) Dynamically migrating channels
US8140892B2 (en) Configuration of memory management techniques selectively using mitigations to reduce errors
US20120089729A1 (en) Systems and methods for abstracting storage views in a network of computing systems
US20070174836A1 (en) System for controlling computer and method therefor
CN103733181A (zh) 系统中的故障处理
US20090138764A1 (en) Billing Adjustment for Power On Demand
US20070234114A1 (en) Method, apparatus, and computer program product for implementing enhanced performance of a computer system with partially degraded hardware
US7895493B2 (en) Bus failure management method and system
CN117827158A (zh) 一种基于云原生Serverless底座的Flink中台系统
CN117608908A (zh) 大模型训练容错方法、系统、终端及存储介质
CN114218054A (zh) 一种基于需求匹配的压力机资源调度方法及系统
CN117726299A (zh) 单据变更状态处理方法、装置、设备及计算机存储介质
CN113867912A (zh) 执行任务的方法、装置、电子设备及可读存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150508

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150508

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.