專利名稱:選擇性地使用緩解來(lái)評(píng)估存儲(chǔ)器管理技術(shù)的有效性以減少錯(cuò)誤的制作方法
選擇性地使用緩解來(lái)評(píng)估存儲(chǔ)器管理技術(shù)的有效性以減少
錯(cuò)誤背景在多用途計(jì)算設(shè)備中,操作系統(tǒng)通常,但不專門地,用于管理供在該計(jì)算設(shè)備上執(zhí)行的一個(gè)或多個(gè)應(yīng)用程序使用的該計(jì)算設(shè)備的存儲(chǔ)器。例如,如果兩個(gè)應(yīng)用程序存取計(jì)算設(shè)備上的存儲(chǔ)器,則操作系統(tǒng)可分配存儲(chǔ)器的各部分以供這兩個(gè)應(yīng)用程序使用,使得兩者都能存取存儲(chǔ)器而不破壞對(duì)方所存儲(chǔ)的數(shù)據(jù)。該管理和仲裁可能是緩解在應(yīng)用程序試圖使用對(duì)方正在使用的存儲(chǔ)器時(shí)引發(fā)的問(wèn)題所必需的。例如,如果兩個(gè)應(yīng)用程序都試圖在相同或重疊的時(shí)間段內(nèi)使用存儲(chǔ)器的同一部分,則第二個(gè)應(yīng)用程序可能蓋寫第一個(gè)應(yīng)用程序的數(shù)據(jù),且第一個(gè)應(yīng)用程序可能無(wú)法正確執(zhí)行或者甚至可能崩潰。諸如這些的錯(cuò)誤對(duì)用戶體驗(yàn)有顯著影響,尤其是在它們頻繁發(fā)生的情況下。操作系統(tǒng)通常包括應(yīng)用程序可向其發(fā)送執(zhí)行存儲(chǔ)器管理任務(wù)的請(qǐng)求的存儲(chǔ)器管理器,使得存儲(chǔ)器管理器可針對(duì)存儲(chǔ)器資源的使用在進(jìn)程之間進(jìn)行仲裁。例如,如果應(yīng)用程序希望臨時(shí)或永久地存儲(chǔ)數(shù)據(jù),則應(yīng)用程序可請(qǐng)求存儲(chǔ)器管理器向該應(yīng)用程序分配某一量的存儲(chǔ)器。稍后,當(dāng)應(yīng)用程序不再需要該存儲(chǔ)器時(shí),應(yīng)用程序可如此通知存儲(chǔ)器管理器,并且請(qǐng)求解除分配(或“釋放”)所分配的存儲(chǔ)器,以使其可被另一應(yīng)用程序使用。當(dāng)?shù)诙?yīng)用程序向存儲(chǔ)器管理器發(fā)送對(duì)存儲(chǔ)器的請(qǐng)求時(shí),存儲(chǔ)器管理器可咨詢其記錄來(lái)確定存儲(chǔ)器中當(dāng)前未被分配的部分,并將這些部分分配給第二應(yīng)用程序。可執(zhí)行與操作系統(tǒng)進(jìn)行交互的進(jìn)程的某些軟件應(yīng)用程序例如可包括與執(zhí)行存儲(chǔ)器操作相關(guān)的隱錯(cuò)或其他編程缺陷,并且即使是在存儲(chǔ)器管理器正確地執(zhí)行了存儲(chǔ)器操作的時(shí)候,軟件應(yīng)用程序也可能因存儲(chǔ)器錯(cuò)誤而失敗。這些存儲(chǔ)器錯(cuò)誤可因可在存儲(chǔ)器操作之間引發(fā)的不一致性而引起。例如,如上所述,軟件應(yīng)用程序可請(qǐng)求向應(yīng)用程序分配第一數(shù)量的存儲(chǔ)器,然后將大于該第一數(shù)量的第二數(shù)量的數(shù)據(jù)寫入該存儲(chǔ)器。操作之間的不一致性一一在該示例中,是第一數(shù)量和第二數(shù)量之間大小的不一致性——會(huì)引起導(dǎo)致軟件應(yīng)用程序中的失敗的存儲(chǔ)器錯(cuò)誤。這些失敗可包括因存儲(chǔ)器錯(cuò)誤所引起的不正確執(zhí)行,或甚至是停止應(yīng)用程序的執(zhí)行的災(zāi)難性錯(cuò)誤或“崩潰”。由于這些編程隱錯(cuò)的影響,已經(jīng)開(kāi)發(fā)了軟件工具來(lái)試圖標(biāo)識(shí)引起這些存儲(chǔ)器錯(cuò)誤的編程隱錯(cuò)。這些工具可在軟件應(yīng)用程序的開(kāi)發(fā)性測(cè)試期間使用。例如,存在可用于在軟件應(yīng)用程序的開(kāi)發(fā)性測(cè)試期間標(biāo)識(shí)隱錯(cuò)的不同類型的“診斷”工具。某些軟件開(kāi)發(fā)應(yīng)用程序,如可從美國(guó)華盛頓州雷蒙德市的微軟公司獲得的Visual Studio,具有諸如這些的內(nèi)置工具。在Visual Mudio中,開(kāi)發(fā)者可選擇在測(cè)試期間啟用可包括頁(yè)堆(Page Heap)功能的應(yīng)用程序驗(yàn)證器(Application Verifier)功能。頁(yè)堆可用于通過(guò)監(jiān)視對(duì)于正被測(cè)試的應(yīng)用程序的存儲(chǔ)器分配和使用來(lái)檢測(cè)某些存儲(chǔ)器錯(cuò)誤,包括緩存溢出和數(shù)據(jù)不足。在頁(yè)堆中,在堆存儲(chǔ)器的所分配的部分(正常地,是“用戶分配”頁(yè))之后放置一定量的保留的額外存儲(chǔ)器(稱為“不可存取頁(yè)”),并且啟用應(yīng)用程序驗(yàn)證器功能來(lái)檢測(cè)信息何時(shí)被寫入該不可存取頁(yè)。以此方式,診斷工具可以標(biāo)識(shí)錯(cuò)誤并將其報(bào)告給開(kāi)發(fā)者。然而,此類診斷工具可能無(wú)法在軟件應(yīng)用程序的運(yùn)行時(shí)期間使用。開(kāi)發(fā)了其他工具來(lái)在存儲(chǔ)器錯(cuò)誤引起崩潰時(shí)收集崩潰信息,該收集的信息在被分析時(shí)可用于標(biāo)識(shí)存儲(chǔ)器錯(cuò)誤。這一解決運(yùn)行時(shí)期間經(jīng)歷的崩潰的嘗試在傳統(tǒng)上限于檢測(cè)此類錯(cuò)誤何時(shí)發(fā)生并將崩潰狀況報(bào)告給中央聚集點(diǎn),該中央聚集點(diǎn)然后向開(kāi)發(fā)者通知關(guān)于錯(cuò)誤的可用信息。開(kāi)發(fā)者可試圖使用該信息來(lái)重建或診斷錯(cuò)誤,然后標(biāo)識(shí)并解決該隱錯(cuò)??蓮奈④浌精@得的 Windows操作系統(tǒng)在其Windows錯(cuò)誤報(bào)告(WER)系統(tǒng)中提供了此類報(bào)告功能。在該系統(tǒng)中, 當(dāng)WER檢測(cè)到應(yīng)用程序非干凈地退出時(shí)——例如,通過(guò)崩潰或以其他方式不正確退出—— 則諸如指令棧的內(nèi)容等關(guān)于應(yīng)用程序狀態(tài)的信息可由WER捆綁并報(bào)告給聚集服務(wù)器。該信息還可包括標(biāo)識(shí)錯(cuò)誤的類的通用系統(tǒng)錯(cuò)誤代碼,但是不包括關(guān)于引起該錯(cuò)誤的確切隱錯(cuò)的 fn息ο概述申請(qǐng)人:認(rèn)識(shí)到且明白,通過(guò)使用存儲(chǔ)器管理來(lái)補(bǔ)償引起存儲(chǔ)器錯(cuò)誤的軟件應(yīng)用程序中的編程隱錯(cuò),應(yīng)用程序能更可靠地操作,且改善用戶體驗(yàn)。申請(qǐng)人認(rèn)識(shí)到,許多存儲(chǔ)器錯(cuò)誤可能是由應(yīng)用程序執(zhí)行的存儲(chǔ)器操作中的不一致性引起的,且這些編程隱錯(cuò)的影響可通過(guò)預(yù)期這些不一致性并以糾正它們的方式執(zhí)行存儲(chǔ)器管理來(lái)緩解。例如,通過(guò)向應(yīng)用程序分配多于請(qǐng)求量的資源(如存儲(chǔ)器和/或時(shí)間),存儲(chǔ)器管理模塊可補(bǔ)償應(yīng)用程序中導(dǎo)致應(yīng)用程序存取多于請(qǐng)求量的存儲(chǔ)器、或在其發(fā)信號(hào)通知其處理完存儲(chǔ)器之后使用存儲(chǔ)器的隱錯(cuò)。此外,在某些情況下,存儲(chǔ)器管理模塊可通過(guò)例如在其檢測(cè)到對(duì)應(yīng)用程序所請(qǐng)求的存儲(chǔ)器操作的輸入信息不正確的情況下不執(zhí)行該操作來(lái)緩解錯(cuò)誤??捎貌煌愋偷木徑鈩?dòng)作來(lái)緩解許多不同類型的錯(cuò)誤,其示例將在下文中更詳細(xì)討論。然而,申請(qǐng)人明白,諸如此類的緩解可對(duì)計(jì)算設(shè)備的效率有顯著影響,并且可影響在這些設(shè)備上執(zhí)行的應(yīng)用程序的性能。每次當(dāng)請(qǐng)求存儲(chǔ)器操作時(shí)評(píng)估并操縱該操作可增加完成請(qǐng)求的時(shí)間,并且分配多于請(qǐng)求量的存儲(chǔ)器使用了更多存儲(chǔ)器且因此會(huì)減少系統(tǒng)可用的資源。申請(qǐng)人明白存儲(chǔ)器管理模塊的具有能夠?qū)γ恳粦?yīng)用程序選擇性地啟用的緩解的愿望。根據(jù)此處描述的原理,可實(shí)現(xiàn)一種存儲(chǔ)器管理模塊,該存儲(chǔ)器管理模塊對(duì)于向該存儲(chǔ)器管理模塊發(fā)出執(zhí)行存儲(chǔ)器操作的請(qǐng)求的一個(gè)或多個(gè)軟件模塊中的每一個(gè)具有不同的操作模式。在一種操作模式中,作為調(diào)用軟件模塊所請(qǐng)求的存儲(chǔ)器操作的補(bǔ)充或替代,存儲(chǔ)器管理模塊可執(zhí)行一個(gè)或多個(gè)緩解動(dòng)作,使得該存儲(chǔ)器操作根據(jù)該緩解動(dòng)作來(lái)執(zhí)行。這些緩解動(dòng)作可用于降低存儲(chǔ)器錯(cuò)誤影響調(diào)用軟件模塊的可能性。在另一種操作模式中,該存儲(chǔ)器管理模塊如所請(qǐng)求地執(zhí)行存儲(chǔ)器操作而不執(zhí)行緩解動(dòng)作。一種存儲(chǔ)器管理模塊可在與該存儲(chǔ)器管理模塊相關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)中維護(hù)一記錄,該記錄具有對(duì)應(yīng)于每一調(diào)用軟件模塊的至少一個(gè)條目,該條目指示對(duì)于該調(diào)用軟件模塊存儲(chǔ)器管理模塊應(yīng)以其操作的模式。然而,申請(qǐng)人明白,諸如此類的緩解可對(duì)計(jì)算設(shè)備以及其上實(shí)現(xiàn)的應(yīng)用程序的效率有顯著影響。每次當(dāng)請(qǐng)求存儲(chǔ)器操作時(shí)評(píng)估并操縱該操作可增加完成請(qǐng)求的時(shí)間,并且分配多于請(qǐng)求量的存儲(chǔ)器使用了更多存儲(chǔ)器且因此會(huì)減少系統(tǒng)可用的資源。因此,申請(qǐng)人明白存儲(chǔ)器管理模塊的具有能夠?qū)γ恳卉浖K選擇性地啟用的緩解的愿望。根據(jù)此處描述的原理,可實(shí)現(xiàn)一種存儲(chǔ)器管理模塊,該存儲(chǔ)器管理模塊對(duì)于向該存儲(chǔ)器管理模塊發(fā)出執(zhí)行存儲(chǔ)器操作的請(qǐng)求的一個(gè)或多個(gè)軟件模塊中的每一個(gè)以兩種操作模式中的一種來(lái)動(dòng)作。在一種操作模式中,作為調(diào)用軟件模塊所請(qǐng)求的存儲(chǔ)器操作的補(bǔ)充或替代,存儲(chǔ)器管理模塊可執(zhí)行一個(gè)或多個(gè)緩解動(dòng)作,使得該存儲(chǔ)器操作根據(jù)該緩解動(dòng)作來(lái)執(zhí)行。這些緩解動(dòng)作可用于降低存儲(chǔ)器錯(cuò)誤影響調(diào)用軟件模塊的可能性。在另一種操作模式中,該存儲(chǔ)器管理模塊如所請(qǐng)求地執(zhí)行存儲(chǔ)器操作而不執(zhí)行緩解動(dòng)作。一旦對(duì)軟件模塊啟用了緩解動(dòng)作,然后就可監(jiān)視該緩解動(dòng)作以便確定它們是否成功地減少了對(duì)軟件模塊有負(fù)面影響的存儲(chǔ)器錯(cuò)誤的數(shù)量。監(jiān)視可以用任何合適的方式來(lái)完成,如通過(guò)隨時(shí)間且隨應(yīng)用程序的多個(gè)實(shí)例進(jìn)行監(jiān)視來(lái)收集關(guān)于緩解動(dòng)作是否有效的統(tǒng)計(jì)數(shù)據(jù)。可收集任何合適的統(tǒng)計(jì)數(shù)據(jù),包括關(guān)于錯(cuò)誤和所檢測(cè)到的緩解動(dòng)作的成功的數(shù)量和/或頻率的統(tǒng)計(jì)數(shù)據(jù)。這些統(tǒng)計(jì)數(shù)據(jù)可采用任何合適的形式,包括作為標(biāo)簽值,該標(biāo)簽值在一個(gè)實(shí)例中在緩解動(dòng)作成功的情況下遞增,且在另一實(shí)例中在緩解動(dòng)作不成功時(shí)遞減。如果監(jiān)視指示緩解動(dòng)作成功地減少了對(duì)軟件模塊有負(fù)面影響的存儲(chǔ)器錯(cuò)誤的數(shù)量,則可將該緩解動(dòng)作應(yīng)用于該軟件模塊所請(qǐng)求的將來(lái)的存儲(chǔ)器操作。如果否,則存儲(chǔ)器管理模塊可以禁止將緩解動(dòng)作應(yīng)用于該軟件模塊所請(qǐng)求的將來(lái)的存儲(chǔ)器操作。一種存儲(chǔ)器管理模塊可在與該存儲(chǔ)器管理模塊相關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)中維護(hù)一記錄,該記錄具有對(duì)應(yīng)于每一調(diào)用軟件模塊的至少一個(gè)條目,該條目指示對(duì)于該調(diào)用軟件模塊存儲(chǔ)器管理模塊應(yīng)在其中操作的模式。根據(jù)此處所描述的部分或全部原理來(lái)操作存儲(chǔ)器管理模塊提供了多種優(yōu)點(diǎn),包括降低了諸如用戶應(yīng)用程序等軟件模塊不正確執(zhí)行或崩潰的可能性,這可用于改善在使用這些軟件模塊時(shí)的用戶體驗(yàn)。應(yīng)當(dāng)理解,以上內(nèi)容旨在是本發(fā)明的非限制概述,本發(fā)明僅由所附權(quán)利要求書(shū)來(lái)定義。附圖簡(jiǎn)述附圖不旨在按比例繪制。在附圖中,各個(gè)附圖中示出的每一完全相同或近乎完全相同的組件由同樣的標(biāo)號(hào)來(lái)表示。出于簡(jiǎn)明的目的,不是每一個(gè)組件在每張附圖中均被標(biāo)號(hào)。在附圖中
圖1是根據(jù)此處描述的原理中的某一些來(lái)操作的技術(shù)可在其中起作用的示例性計(jì)算設(shè)備的框圖;圖2A是根據(jù)用于存儲(chǔ)器管理的常規(guī)技術(shù)來(lái)操作的系統(tǒng)的各組件之間的交互的示意圖;圖2B是根據(jù)此處描述的部分原理來(lái)操作的技術(shù)可在其中其作用的一個(gè)示例性系統(tǒng)的某些組件之間的某些交互的示意圖;圖2C是可用于在逐個(gè)應(yīng)用程序的基礎(chǔ)上實(shí)現(xiàn)存儲(chǔ)器緩解的計(jì)算機(jī)存儲(chǔ)介質(zhì)中的數(shù)據(jù)結(jié)構(gòu)的示意性圖示;圖3是根據(jù)此處所描述的某些原理來(lái)執(zhí)行存儲(chǔ)器管理的示例性技術(shù)的流程圖;圖4A、4B、4C和4D是根據(jù)此處描述的一個(gè)或多個(gè)原理來(lái)執(zhí)行存儲(chǔ)器操作的示例性技術(shù)的流程圖;圖5是根據(jù)此處所描述的某些原理來(lái)執(zhí)行解除存儲(chǔ)器分配的操作的一個(gè)示例性技術(shù)的流程圖;圖6是根據(jù)此處描述的某些原理來(lái)確定是否將緩解技術(shù)應(yīng)用于特定應(yīng)用程序的示例性技術(shù)的流程圖;圖7A和7B是根據(jù)此處描述的某些原理來(lái)確定緩解技術(shù)成功地緩解了存儲(chǔ)器錯(cuò)誤對(duì)應(yīng)用程序的影響的示例性技術(shù)的流程圖;圖8是根據(jù)此處描述的某些原理來(lái)確定是否對(duì)特定應(yīng)用程序移除緩解技術(shù)的示例性技術(shù)的流程圖;圖9是根據(jù)此處描述的原理中的某一些來(lái)操作的技術(shù)可在其中起作用的示例性計(jì)算設(shè)備的框圖;圖10是根據(jù)此處描述的部分原理來(lái)操作的技術(shù)可在其中其作用的一個(gè)示例性系統(tǒng)的某些組件之間的某些交互的示意圖;圖11示出了根據(jù)此處描述的某些原理來(lái)操作的技術(shù)可在其中起作用的示例性計(jì)算機(jī)系統(tǒng);圖12是根據(jù)此處描述的某些原理來(lái)配置計(jì)算設(shè)備以便使用存儲(chǔ)器管理技術(shù)的示例性技術(shù)的流程圖;以及圖13是根據(jù)此處描述的某些原理在適用于配置計(jì)算設(shè)備以便使用存儲(chǔ)器管理技術(shù)的中央聚集服務(wù)器處接收錯(cuò)誤和緩解數(shù)據(jù)的示例性技術(shù)的流程圖。詳細(xì)描述資源管理模塊在具有共享資源的系統(tǒng)中操作,且用作該共享資源的仲裁者來(lái)確保其多個(gè)消費(fèi)者在試圖訪問(wèn)該資源時(shí)不會(huì)彼此干涉。存儲(chǔ)器管理模塊是這一資源管理模塊的一個(gè)示例。某些計(jì)算設(shè)備,包括單用途和多用途計(jì)算設(shè)備,可以并行執(zhí)行與兩個(gè)或更多任務(wù)相關(guān)的應(yīng)用程序或其他指令集,并且這些并行執(zhí)行可能會(huì)競(jìng)爭(zhēng)對(duì)存儲(chǔ)器的存取。如果兩個(gè)或更多應(yīng)用程序被正確地編碼并且給予存儲(chǔ)器管理模塊的指令是正確的,則存儲(chǔ)器管理可以是相對(duì)簡(jiǎn)單的任務(wù)。不幸的是,申請(qǐng)人認(rèn)識(shí)到,情況并非始終如此,且應(yīng)用程序或指令集可能會(huì)因?yàn)橐鸫鎯?chǔ)器錯(cuò)誤的編程隱錯(cuò)而崩潰。例如,華盛頓州雷蒙德市的微軟公司的研究發(fā)現(xiàn)在Windows操作系統(tǒng)中運(yùn)行的用戶軟件應(yīng)用程序中的編程隱錯(cuò)引起存儲(chǔ)器錯(cuò)誤,這些存儲(chǔ)器錯(cuò)誤是每天大量應(yīng)用程序崩潰的源頭——占研究中分析了全部數(shù)量的崩潰中的約 15%。申請(qǐng)人:認(rèn)識(shí)到且明白,應(yīng)用程序中的編程隱錯(cuò)的影響可通過(guò)使用改進(jìn)的存儲(chǔ)器管理模塊來(lái)緩解,該改進(jìn)的存儲(chǔ)器管理模塊可采取步驟來(lái)降低引起錯(cuò)誤的編程隱錯(cuò)對(duì)應(yīng)用程序產(chǎn)生負(fù)面影響的概率。例如,通過(guò)向應(yīng)用程序分配多于應(yīng)用程序請(qǐng)求量的資源,存儲(chǔ)器管理模塊可以補(bǔ)償應(yīng)用程序中導(dǎo)致應(yīng)用程序使用多于請(qǐng)求量的存儲(chǔ)器或者在應(yīng)用程序發(fā)信號(hào)通知其已完成對(duì)存儲(chǔ)器的處理之后使用存儲(chǔ)器的隱錯(cuò)。此外,在某些情況下,存儲(chǔ)器管理模塊可以通過(guò)不執(zhí)行作出對(duì)要執(zhí)行的存儲(chǔ)器操作的調(diào)用的應(yīng)用程序所請(qǐng)求的存儲(chǔ)器操作來(lái)緩解錯(cuò)誤。例如,如果存儲(chǔ)器管理模塊檢測(cè)到關(guān)于操作的輸入信息是不正確的,則它可以不執(zhí)行該操作。可用不同類型的緩解動(dòng)作來(lái)緩解許多不同類型的錯(cuò)誤,其示例將在下文中更詳細(xì)討論。然而,應(yīng)當(dāng)理解,除了以下列出的之外,許多不同類型的緩解動(dòng)作是可能的,可以采取任何合適的動(dòng)作來(lái)緩解引起存儲(chǔ)器錯(cuò)誤的編程隱錯(cuò)。申請(qǐng)人:還認(rèn)識(shí)到且明白,在某些情況下,緩解動(dòng)作會(huì)對(duì)應(yīng)用程序或其他指令集的性能有不利影響,例如,向應(yīng)用程序分配多于請(qǐng)求量的存儲(chǔ)器,或者在釋放存儲(chǔ)器以供另一應(yīng)用程序使用之前延遲,導(dǎo)致計(jì)算設(shè)備使用的存儲(chǔ)器比其本來(lái)將使用的更多。另外,通過(guò)在存儲(chǔ)器管理模塊接收到存儲(chǔ)器操作時(shí)檢查該存儲(chǔ)器操作來(lái)確定緩解動(dòng)作是否可用,增加了響應(yīng)這些存儲(chǔ)器操作的時(shí)間,導(dǎo)致應(yīng)用程序的執(zhí)行時(shí)間增加。申請(qǐng)人認(rèn)識(shí)到且明白,由于并非所有調(diào)用存儲(chǔ)器管理器的軟件模塊(“調(diào)用軟件模塊”)將具有導(dǎo)致存儲(chǔ)器錯(cuò)誤的編程隱錯(cuò),對(duì)性能的這一不利影響可通過(guò)取決于是否檢測(cè)到調(diào)用軟件模塊經(jīng)歷了存儲(chǔ)器錯(cuò)誤而對(duì)調(diào)用軟件模塊選擇性地應(yīng)用緩解動(dòng)作來(lái)減輕。因此,此處所描述的是用于對(duì)每一具體的調(diào)用軟件模塊以不同操作模式執(zhí)行存儲(chǔ)器操作的技術(shù),其中調(diào)用軟件模塊是應(yīng)用程序的實(shí)例,這些操作模式如其中對(duì)應(yīng)用程序向存儲(chǔ)器操作應(yīng)用緩解動(dòng)作的第一模式,以及不對(duì)應(yīng)用程序應(yīng)用緩解動(dòng)作的第二模式。另外,申請(qǐng)人明白,在緩解模式中始終對(duì)調(diào)用軟件模塊執(zhí)行存儲(chǔ)器操作可能并不是高效的。例如,在某些實(shí)現(xiàn)中,存儲(chǔ)器管理模塊可以不被配置成緩解調(diào)用軟件模塊可經(jīng)歷的所有存儲(chǔ)器錯(cuò)誤,并且特定調(diào)用軟件模塊可具有可能無(wú)法通過(guò)在計(jì)算設(shè)備上實(shí)現(xiàn)的特定存儲(chǔ)器管理模塊來(lái)緩解的編程隱錯(cuò)。作為另一示例,某些調(diào)用軟件模塊可在某些不頻繁執(zhí)行的指令中具有編程隱錯(cuò)。作為另一示例,調(diào)用軟件模塊可具有非常少的導(dǎo)致存儲(chǔ)器錯(cuò)誤的隱錯(cuò)。在這些情況的每一種中,盡管對(duì)調(diào)用軟件模塊在緩解模式中操作存儲(chǔ)器管理模塊可能有助于緩解某些錯(cuò)誤,但這些可緩解錯(cuò)誤可能是不頻繁的,并且因在緩解模式中進(jìn)行操作而引起的效率損失可能會(huì)超過(guò)緩解錯(cuò)誤的獲益。因此,申請(qǐng)人認(rèn)識(shí)到且明白進(jìn)行測(cè)試來(lái)確定在緩解模式中操作存儲(chǔ)器管理模塊的有效性并響應(yīng)于該測(cè)試來(lái)配置存儲(chǔ)器管理模塊的愿望。確定有效性可以按任何合適的方式來(lái)完成。例如,如果檢測(cè)到存儲(chǔ)器錯(cuò)誤不影響軟件模塊,則即使引起錯(cuò)誤的編程隱錯(cuò)存在于該模塊中,也確定緩解動(dòng)作有效地或成功地緩解了存儲(chǔ)器錯(cuò)誤。該測(cè)試可以隨時(shí)間且隨應(yīng)用程序的多個(gè)實(shí)例來(lái)執(zhí)行,以收集關(guān)于緩解動(dòng)作是否有效的統(tǒng)計(jì)數(shù)據(jù),包括關(guān)于錯(cuò)誤和檢測(cè)到的緩解動(dòng)作的成功的數(shù)量和/或頻率的統(tǒng)計(jì)數(shù)據(jù)。這些統(tǒng)計(jì)數(shù)據(jù)可采用任何合適的形式,包括作為標(biāo)簽值,該標(biāo)簽值在一個(gè)實(shí)例中在即使存在隱錯(cuò)但緩解動(dòng)作仍成功地避免了對(duì)調(diào)用應(yīng)用程序的影響的情況下遞增,且在另一實(shí)例中在緩解動(dòng)作不成功時(shí)遞減??墒褂萌魏魏线m的準(zhǔn)則來(lái)確定緩解是成功還是不成功。在某些實(shí)施例中,如果沒(méi)有檢測(cè)到可被緩解類型的隱錯(cuò),則緩解可被認(rèn)為是不成功的。然而,在其他實(shí)施例中,可以應(yīng)用其他不同或附加的準(zhǔn)則。作為基于緩解的先前成功來(lái)選擇應(yīng)用緩解所引起的行為的一個(gè)示例,存儲(chǔ)器管理模塊可被配置成當(dāng)對(duì)作為應(yīng)用程序的實(shí)例的特定軟件模塊執(zhí)行存儲(chǔ)器操作時(shí)以緩解模式來(lái)操作??稍诒罎⒒驓w因于存儲(chǔ)器功能的其他錯(cuò)誤之后進(jìn)入該模式。如果在某一段時(shí)間之后確定緩解未有效地阻止存儲(chǔ)器錯(cuò)誤影響該模塊,則存儲(chǔ)器管理模塊可被配置成對(duì)該特定應(yīng)用程序的后續(xù)實(shí)例以正常模式操作而沒(méi)有緩解。該時(shí)間段可以通過(guò)計(jì)時(shí)來(lái)測(cè)量,和 /或以某種其他方式,如基于在沒(méi)有成功緩解的情況下從應(yīng)用程序干凈退出的次數(shù)來(lái)測(cè)量。 以下描述了可用于作出這一判定的示例性測(cè)試,其結(jié)果可用于控制對(duì)特定的調(diào)用軟件模塊存儲(chǔ)器管理模塊應(yīng)以其操作的模式。申請(qǐng)人:還明白,諸如與廣泛發(fā)行的軟件應(yīng)用程序相關(guān)聯(lián)的某些軟件模塊可在多個(gè)計(jì)算設(shè)備上執(zhí)行,且這些計(jì)算設(shè)備中的每一個(gè)可具有這些軟件模塊以及緩解動(dòng)作是否有效的經(jīng)驗(yàn)。例如,其他計(jì)算設(shè)備可具有確定緩解動(dòng)作是成功還是不成功的經(jīng)驗(yàn)。申請(qǐng)人認(rèn)識(shí)到且明白,計(jì)算設(shè)備的性能因此可通過(guò)充分利用其他計(jì)算設(shè)備的經(jīng)驗(yàn)來(lái)作出關(guān)于是否對(duì)應(yīng)用程序應(yīng)用緩解動(dòng)作以及應(yīng)用緩解動(dòng)作多長(zhǎng)時(shí)間來(lái)進(jìn)一步提高。
為了利用聚集的信息,計(jì)算設(shè)備可適用于向從多個(gè)設(shè)備收集信息的一個(gè)或多個(gè)其他計(jì)算設(shè)備發(fā)送關(guān)于錯(cuò)誤類型和緩解動(dòng)作的成功的詳細(xì)信息,所有這些設(shè)備可執(zhí)行作為應(yīng)用程序的實(shí)例的軟件模塊。這一個(gè)或多個(gè)設(shè)備可聚集關(guān)于對(duì)特定應(yīng)用程序緩解的成功的信息?;谠摼奂男畔?,設(shè)備還可從一個(gè)或多個(gè)計(jì)算設(shè)備接收關(guān)于是否要對(duì)特定軟件模塊應(yīng)用緩解動(dòng)作的配置信息。該信息可以采用任何合適的形式,如關(guān)于可對(duì)照其來(lái)測(cè)量緩解動(dòng)作的成功的統(tǒng)計(jì)數(shù)據(jù)。例如,配置信息可包括在確定是否對(duì)應(yīng)用程序禁用緩解之前應(yīng)考慮應(yīng)用程序的更多或更少數(shù)量實(shí)例的指示。在某些這樣的實(shí)現(xiàn)中,這些指令可包括初始緩解標(biāo)簽值,該標(biāo)簽值可根據(jù)此處所描述的測(cè)試技術(shù)使用來(lái)確定是否要對(duì)應(yīng)用程序禁用緩解。因此,以下描述的是用于向其他計(jì)算設(shè)備發(fā)送并從其他計(jì)算設(shè)備接收信息的技術(shù),該信息可用于配置計(jì)算設(shè)備上的存儲(chǔ)器管理模塊來(lái)應(yīng)用緩解動(dòng)作。應(yīng)當(dāng)理解,在具體實(shí)施例中,各技術(shù)可以根據(jù)此處描述的某些原理來(lái)實(shí)現(xiàn)而無(wú)需每一實(shí)施例都使用所有原理??蓪?shí)現(xiàn)這些原理中的一個(gè)或多個(gè)的任何合適的組合,本發(fā)明的各實(shí)施例不限于用任何具體原理或這些原理的集合來(lái)實(shí)現(xiàn)。例如,可以實(shí)現(xiàn)選擇性地應(yīng)用緩解動(dòng)作但不測(cè)試緩解動(dòng)作的有效性或接受來(lái)自其他計(jì)算設(shè)備的配置數(shù)據(jù)的存儲(chǔ)器管理模塊,或者實(shí)現(xiàn)選擇性地應(yīng)用緩解動(dòng)作并測(cè)試有效性但不接受來(lái)自其他計(jì)算設(shè)備的配置數(shù)據(jù)的存儲(chǔ)器管理模塊。以下描述的技術(shù)可以用各種方式中的任一種來(lái)實(shí)現(xiàn),并在各種類型的指令集的任一種上操作。為簡(jiǎn)明起見(jiàn),以下的示例將存儲(chǔ)器管理模塊和錯(cuò)誤報(bào)告服務(wù)描述為計(jì)算設(shè)備的操作系統(tǒng)的一部分,且將軟件模塊描述為由操作系統(tǒng)管理的應(yīng)用程序。這一示例可以在此處描述的某些原理的一種商業(yè)實(shí)現(xiàn)中看到,其中操作系統(tǒng)是Microsoft Windows,以下描述的緩解模塊是容錯(cuò)堆(FTH)客戶端,以下描述的緩解啟用模塊是FTH服務(wù)器,且錯(cuò)誤報(bào)告客戶端和服務(wù)器是Windows錯(cuò)誤報(bào)告(WE 服務(wù)的組件。然而,應(yīng)當(dāng)理解,這僅是可實(shí)現(xiàn)此處所描述的原理的不同方式的一個(gè)示例,且其他方式是可能的。例如,存儲(chǔ)器管理模塊可被實(shí)現(xiàn)為與計(jì)算設(shè)備的操作系統(tǒng)交互的獨(dú)立組件、由操作系統(tǒng)管理的應(yīng)用程序的組件、或在不具有操作系統(tǒng)的計(jì)算設(shè)備上執(zhí)行的模塊。此外,向存儲(chǔ)器管理模塊發(fā)出請(qǐng)求的軟件模塊 (“調(diào)用軟件模塊”)可以是可由處理器執(zhí)行的指令的任何合適的安排。在某些實(shí)現(xiàn)中,軟件模塊可以是用戶應(yīng)用程序的實(shí)例、操作系統(tǒng)的組件、服務(wù)或端口映射程序、或任何其他合適的軟件模塊。每一軟件模塊可以是以下描述的一個(gè)或多個(gè)“功能模塊”。另外,存儲(chǔ)器管理模塊可以被實(shí)現(xiàn)為執(zhí)行一個(gè)或多個(gè)存儲(chǔ)器操作的任何合適的組合,以及一個(gè)或多個(gè)緩解動(dòng)作的任何合適的組合。存儲(chǔ)器操作可以是影響存儲(chǔ)器資源的使用的任何合適的操作,如分配、解除分配(釋放)、重新分配、分頁(yè)、以及許多其他操作。緩解動(dòng)作可以是可由存儲(chǔ)器管理模塊采取來(lái)降低調(diào)用軟件模塊中的編程隱錯(cuò)將導(dǎo)致存儲(chǔ)器錯(cuò)誤且如通過(guò)引起不正確執(zhí)行或崩潰而負(fù)面地影響調(diào)用軟件模塊的可能性。存儲(chǔ)器錯(cuò)誤可以是導(dǎo)致會(huì)如通過(guò)引起不正確執(zhí)行或崩潰而負(fù)面地影響軟件模塊的存儲(chǔ)器破壞的任何錯(cuò)誤。在許多情況下,存儲(chǔ)器破壞可由導(dǎo)致存儲(chǔ)器操作之間的不一致性的編程隱錯(cuò)引起。存儲(chǔ)器錯(cuò)誤包括在所分配的存儲(chǔ)器的邊界外部寫入(緩存溢出或數(shù)據(jù)不足)、當(dāng)兩個(gè)模塊在重疊的時(shí)間段內(nèi)各自使用相同的存儲(chǔ)器空間時(shí)另一軟件模塊對(duì)所存儲(chǔ)的信息的蓋寫、或使用與分配給模塊的不同的存儲(chǔ)器部分。應(yīng)當(dāng)理解,這些存儲(chǔ)器錯(cuò)誤僅是軟件模塊可經(jīng)歷且可通過(guò)此處描述的某些原理來(lái)緩解的類型的示例。
緩解存儲(chǔ)器錯(cuò)誤可以通過(guò)執(zhí)行任何合適的一個(gè)或多個(gè)緩解動(dòng)作以任何合適的方式來(lái)完成。在某些情況下,緩解動(dòng)作可包括在預(yù)期不一致存儲(chǔ)器操作時(shí)采取的且試圖抵消該不一致性的動(dòng)作。示例性緩解動(dòng)作在下文中更詳細(xì)地描述,但是可包括在執(zhí)行操作之前改變操作、不執(zhí)行操作、在稍后的時(shí)間執(zhí)行操作、在執(zhí)行操作之前確認(rèn)對(duì)操作的正確輸入、 或以對(duì)存儲(chǔ)器空間的最小改變來(lái)執(zhí)行操作中的任一動(dòng)作。此外,以下用對(duì)通常稱為“堆”存儲(chǔ)器的一種類型的存儲(chǔ)器來(lái)操作的存儲(chǔ)器管理模塊描述了示例性實(shí)現(xiàn)。然而,應(yīng)當(dāng)理解,任何一種或多種合適類型的存儲(chǔ)器可由根據(jù)此處描述的某些原理來(lái)操作的技術(shù)來(lái)管理,包括棧存儲(chǔ)器和/或全局變量存儲(chǔ)器。在此處描述的原理的一個(gè)示例性實(shí)現(xiàn)中,調(diào)用軟件模塊(可以是例如軟件應(yīng)用程序的實(shí)例)可向存儲(chǔ)器管理模塊發(fā)出執(zhí)行存儲(chǔ)器操作的請(qǐng)求。存儲(chǔ)器管理模塊可以與緩解啟用模塊進(jìn)行交互。緩解啟用模塊可以咨詢啟用模塊所存儲(chǔ)的規(guī)則和設(shè)置數(shù)據(jù)的一個(gè)或多個(gè)條目來(lái)確定當(dāng)對(duì)特定的調(diào)用軟件模塊執(zhí)行操作時(shí)存儲(chǔ)器管理模塊應(yīng)以其操作的模式。咨詢規(guī)則和設(shè)置數(shù)據(jù)在這一和某些其他實(shí)現(xiàn)中可包括檢查來(lái)確定一個(gè)或多個(gè)統(tǒng)計(jì)數(shù)據(jù)是在閾值水平之上還是之下。如果規(guī)則和設(shè)置指示存儲(chǔ)器管理單元不應(yīng)以緩解模式操作——例如,如果緩解標(biāo)簽值低于閾值水平——?jiǎng)t如所請(qǐng)求地執(zhí)行存儲(chǔ)器操作。然而,如果規(guī)則和設(shè)置指示存儲(chǔ)器管理單元應(yīng)以緩解模式操作,則可啟用存儲(chǔ)器管理單元的緩解模塊。緩解模塊然后可結(jié)合存儲(chǔ)器管理模塊來(lái)根據(jù)一個(gè)或多個(gè)緩解操作執(zhí)行存儲(chǔ)器操作,這些緩解動(dòng)作可用于降低存儲(chǔ)器錯(cuò)誤負(fù)面地影響調(diào)用軟件模塊的可能性。應(yīng)當(dāng)理解,存儲(chǔ)器管理模塊的操作模式較佳地獨(dú)立于每一軟件模塊,且存儲(chǔ)器管理單元可以對(duì)一個(gè)調(diào)用軟件模塊以第一模式執(zhí)行存儲(chǔ)器操作,且對(duì)另一調(diào)用軟件模塊以第二模式執(zhí)行另一存儲(chǔ)器操作。在該示例性實(shí)現(xiàn)中,緩解和緩解啟用模塊也可適用于評(píng)估一個(gè)或多個(gè)緩解動(dòng)作一旦被啟用是否成功地緩解了錯(cuò)誤。這可以用任何合適的方式來(lái)完成,其示例在下文中討論。 例如,當(dāng)執(zhí)行緩解動(dòng)作時(shí),可取得最初的觀察結(jié)果并將其與稍后記錄的觀察結(jié)果進(jìn)行比較, 來(lái)確定調(diào)用軟件模塊是否采取了指示可通過(guò)緩解動(dòng)作阻止其引起錯(cuò)誤的編程隱錯(cuò)的任何動(dòng)作。例如,如以下所討論的,在分配操作期間,可分配大于請(qǐng)求量的存儲(chǔ)器,并且可將標(biāo)記值寫入額外存儲(chǔ)器中。當(dāng)調(diào)用軟件模塊稍后請(qǐng)求解除該存儲(chǔ)器的分配時(shí),緩解模塊可檢查該額外存儲(chǔ)器來(lái)查看標(biāo)記值是否仍在該存儲(chǔ)器中。如果部分或全部標(biāo)記值已被蓋寫,則緩解模塊可確定緩解動(dòng)作(分配額外存儲(chǔ)器)有效地阻止了緩存溢出引起的存儲(chǔ)器錯(cuò)誤。評(píng)估緩解動(dòng)作和其他示例性測(cè)試的有效性的進(jìn)一步細(xì)節(jié)在下文中討論。在使用緩解標(biāo)簽值的某些實(shí)現(xiàn)中,當(dāng)確定緩解動(dòng)作對(duì)特定調(diào)用軟件模塊有效時(shí),則可遞增該緩解標(biāo)簽值,且如果確定緩解動(dòng)作不是有效的或沒(méi)有任何效果時(shí),則可遞減該緩解標(biāo)簽值。在該實(shí)現(xiàn)中,緩解和緩解啟用模塊可進(jìn)一步適用于向遠(yuǎn)程計(jì)算設(shè)備發(fā)送和從遠(yuǎn)程計(jì)算設(shè)備接收關(guān)于緩解動(dòng)作阻止存儲(chǔ)器錯(cuò)誤負(fù)面地影響軟件模塊的有效性以及關(guān)于是否啟用緩解動(dòng)作的信息。例如,當(dāng)存儲(chǔ)器管理模塊檢測(cè)到調(diào)用軟件模塊崩潰時(shí),它可從記錄中確定是否檢測(cè)到任何存儲(chǔ)器錯(cuò)誤以及這些存儲(chǔ)器錯(cuò)誤中的任一個(gè)是否被緩解。它然后可將該信息發(fā)送到一個(gè)或多個(gè)其他計(jì)算設(shè)備,且作為回報(bào)可從一個(gè)或多個(gè)其他計(jì)算設(shè)備接收信息。在該示例性實(shí)現(xiàn)但非所有實(shí)現(xiàn)中,一個(gè)或多個(gè)其他計(jì)算設(shè)備可包括聚集服務(wù)器,且該聚集服務(wù)器可用作諸如Windows錯(cuò)誤報(bào)告服務(wù)等錯(cuò)誤報(bào)告服務(wù)的一部分。聚集服務(wù)器可接受來(lái)自一個(gè)或多個(gè)計(jì)算設(shè)備的錯(cuò)誤和緩解信息,并且可以將該信息發(fā)送給包括被檢測(cè)為崩潰的軟件模塊的開(kāi)發(fā)者的廠商。聚集服務(wù)器還可確定緩解動(dòng)作是否在每一計(jì)算設(shè)備處成功地緩解了存儲(chǔ)器錯(cuò)誤,并且可通知計(jì)算設(shè)備是否對(duì)特定軟件模塊啟用緩解模式。在某些實(shí)現(xiàn)中,通知計(jì)算設(shè)備是否啟用緩解模式可包括發(fā)送關(guān)于緩解標(biāo)簽值的推薦初始化值,如在緩解在歷史上成功或以高比率成功時(shí)的較高值,以及在緩解在歷史上不成功或成功但僅有低比率時(shí)的較低值,但是應(yīng)理解,其他實(shí)現(xiàn)可對(duì)任何合適的配置信息操作,因?yàn)楸景l(fā)明的各實(shí)施例在這一方面不受限制。應(yīng)當(dāng)理解,盡管該示例性實(shí)施例被描述為根據(jù)此處描述的許多原理來(lái)操作,但其他實(shí)現(xiàn)可根據(jù)這些原理中的較多或較少數(shù)量的原理來(lái)操作,且并非所有實(shí)現(xiàn)都要根據(jù)此處描述的所有原理來(lái)操作。如上簡(jiǎn)要討論的,申請(qǐng)人明白,許多不同類型的編程隱錯(cuò)會(huì)引起可諸如通過(guò)使得軟件模塊不正確地執(zhí)行或崩潰而負(fù)面地影響軟件模塊的存儲(chǔ)器錯(cuò)誤。對(duì)于上下文,這些編程隱錯(cuò)中一些最常見(jiàn)的隱錯(cuò)在下文中描述,但應(yīng)理解,該錯(cuò)誤列表不是可通過(guò)實(shí)現(xiàn)此處描述的某些原理來(lái)緩解的全部編程隱錯(cuò)的全面描述,且存在可使用根據(jù)這些原理中的某一些或全部操作的技術(shù)來(lái)緩解的其他隱錯(cuò)。作為第一示例,調(diào)用軟件模塊可請(qǐng)求存儲(chǔ)器管理模塊向該軟件模塊分配某一量的存儲(chǔ)器——例如,16字節(jié)——然后試圖使用多于請(qǐng)求量的存儲(chǔ)器——例如,17字節(jié)或更多。 常規(guī)的存儲(chǔ)器管理模塊不能檢測(cè)到該軟件模塊正在使用額外存儲(chǔ)器,且可將該存儲(chǔ)器分配給另一軟件模塊。如果該另一軟件模塊然后開(kāi)始使用該存儲(chǔ)器,則作為在它/它們?cè)噲D使用存儲(chǔ)器時(shí)的存儲(chǔ)器錯(cuò)誤的結(jié)果,一個(gè)或兩個(gè)軟件模塊可能不正確地執(zhí)行或甚至崩潰。作為可引起存儲(chǔ)器錯(cuò)誤的編程隱錯(cuò)的第二個(gè)示例,軟件模塊可請(qǐng)求存儲(chǔ)器管理模塊向該軟件模塊分配某些存儲(chǔ)器,然后通知存儲(chǔ)器管理模塊它已經(jīng)完成了對(duì)該存儲(chǔ)器的處理,但是接著繼續(xù)使用該存儲(chǔ)器。根據(jù)存儲(chǔ)器管理模塊的記錄,該存儲(chǔ)器被釋放以分配給另一軟件模塊,并且兩個(gè)軟件模塊可試圖同時(shí)使用該存儲(chǔ)器,導(dǎo)致一個(gè)或兩個(gè)軟件模塊不正確地執(zhí)行。作為第三個(gè)示例,軟件模塊可通過(guò)通知存儲(chǔ)器管理模塊它已經(jīng)完成了對(duì)存儲(chǔ)器的處理來(lái)“釋放”已經(jīng)被分配給它的存儲(chǔ)器,然后可通過(guò)編程隱錯(cuò)再次釋放該存儲(chǔ)器。存儲(chǔ)器管理模塊可與此同時(shí)將該存儲(chǔ)器分配給另一軟件模塊,并且作為第二個(gè)不正確的釋放操作的結(jié)果,可將其分配給第三個(gè)軟件模塊。作為第一個(gè)軟件模塊中的編程隱錯(cuò)的結(jié)果,第二和第三軟件模塊中的一個(gè)或兩個(gè)然后可不正確地執(zhí)行。作為第四個(gè)示例,某些軟件模塊在退出時(shí)可能試圖釋放分配給它們的所有存儲(chǔ)器,但是可能會(huì)過(guò)早地或以其他方式不正確地這樣做,且會(huì)導(dǎo)致軟件模塊的崩潰。作為第五個(gè)示例,不同的信息可被存儲(chǔ)在不同類型的存儲(chǔ)器中,如通用地址空間、 棧存儲(chǔ)器、以及動(dòng)態(tài)或堆存儲(chǔ)器。某些指令集可通過(guò)編程隱錯(cuò)而使用錯(cuò)誤的命令來(lái)與不同類型的存儲(chǔ)器交互,如使用堆存儲(chǔ)器操作來(lái)執(zhí)行打算在通用地址空間存儲(chǔ)器上完成的操作。當(dāng)存儲(chǔ)器管理模塊使用通用地址空間存儲(chǔ)器的標(biāo)識(shí)符在堆存儲(chǔ)器上執(zhí)行操作時(shí),則它正在錯(cuò)誤的存儲(chǔ)器上操作,且使用堆存儲(chǔ)器來(lái)作出該調(diào)用或指令集的軟件模塊結(jié)果會(huì)崩潰。作為第六個(gè)示例,在減少或擴(kuò)大對(duì)指令集的存儲(chǔ)器分配的重新分配操作中,存儲(chǔ)器分配可被移至存儲(chǔ)器的另一部分,但是通過(guò)編程隱錯(cuò),該指令集會(huì)繼續(xù)引用原始位置中的存儲(chǔ)器。該指令集以及任何其他使用該原始存儲(chǔ)器的指令集因此會(huì)因隱錯(cuò)而崩潰。通過(guò)根據(jù)此處描述的原理來(lái)操作,存儲(chǔ)器管理模塊可阻止這些和其他編程隱錯(cuò)引起通過(guò)導(dǎo)致不正確執(zhí)行或甚至崩潰來(lái)負(fù)面地影響軟件模塊的存儲(chǔ)器錯(cuò)誤。對(duì)軟件模塊的負(fù)面影響可對(duì)用戶體驗(yàn)有負(fù)面影響,且緩解這些編程隱錯(cuò)的影響可顯著地改善用戶體驗(yàn)。另外,通過(guò)操作來(lái)選擇性地啟用緩解動(dòng)作并測(cè)試其有效性,這些緩解動(dòng)作的任何負(fù)面影響本身可被緩解。根據(jù)此處所描述的原理來(lái)操作的這些和其他技術(shù)的其他功能和優(yōu)點(diǎn)將從以下描述的示例中得到更完全的理解。以下示例旨在方便理解本發(fā)明并示出此處所描述的原理的好處,但不例示本發(fā)明的各實(shí)施例的全部范圍。本文描述的技術(shù)可在各種計(jì)算系統(tǒng)中實(shí)現(xiàn),這些計(jì)算系統(tǒng)的示例在下文較為詳細(xì)地描述。此類系統(tǒng)一般涉及使用適當(dāng)配置的計(jì)算設(shè)備,這些計(jì)算設(shè)備實(shí)現(xiàn)各自提供完成此類技術(shù)的執(zhí)行所需的一個(gè)或多個(gè)操作的多個(gè)功能模塊。每一個(gè)功能模塊可以按照其自己的方式來(lái)實(shí)現(xiàn);不必全都用相同方式實(shí)現(xiàn)。如此處所使用的,功能模塊是執(zhí)行執(zhí)行操作職責(zé)的系統(tǒng)的結(jié)構(gòu)組件。操作職責(zé)可以是整個(gè)軟件元素的一部分。例如,功能模塊可執(zhí)行進(jìn)程、離散進(jìn)程、或任何其他合適的處理單元的功能。功能模塊可包括計(jì)算機(jī)可執(zhí)行指令,并且可在計(jì)算機(jī)存儲(chǔ)介質(zhì)上編碼。此外,這樣的計(jì)算機(jī)可執(zhí)行指令可使用多種合適的程序設(shè)計(jì)語(yǔ)言和/或程序設(shè)計(jì)或腳本工具中的任何一種來(lái)編寫,而且它們還可被編譯為可執(zhí)行機(jī)器語(yǔ)言代碼或在框架或虛擬機(jī)上執(zhí)行的中間代碼。功能模塊可在適當(dāng)時(shí)并行或串行執(zhí)行,并且可使用在其上執(zhí)行這些模塊的計(jì)算機(jī)上的共享存儲(chǔ)器、使用消息傳遞協(xié)議、或以任何其他合適的方式,來(lái)在彼此之間傳遞信息。下文描述了執(zhí)行一項(xiàng)或多項(xiàng)任務(wù)的示例性功能模塊,但應(yīng)該理解領(lǐng)會(huì),所描述的功能模塊和任務(wù)劃分僅僅示出可實(shí)現(xiàn)本文描述的示例性技術(shù)的功能模塊的類型,并且本發(fā)明并不限于在任何特定數(shù)量、劃分、或類型的功能模塊中實(shí)現(xiàn)。在一些實(shí)現(xiàn)中,所有功能可在單個(gè)功能模塊中實(shí)現(xiàn)。此外,為清楚起見(jiàn),功能模塊在下文中是作為全部在一個(gè)或兩個(gè)計(jì)算設(shè)備上執(zhí)行來(lái)討論的,但應(yīng)該理解,在一些實(shí)現(xiàn)中,功能模塊可在適用于彼此通信的許多單獨(dú)的計(jì)算設(shè)備或單個(gè)計(jì)算設(shè)備的單獨(dú)的處理器上實(shí)現(xiàn)。例如, 一個(gè)處理器可適用于執(zhí)行向存儲(chǔ)器管理模塊發(fā)出執(zhí)行存儲(chǔ)器操作的請(qǐng)求的調(diào)用軟件模塊, 而另一處理器可適用于執(zhí)行存儲(chǔ)器管理模塊。在以下描述的一些實(shí)施例中,根據(jù)此處描述的原理來(lái)操作的技術(shù)可被實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上編碼的計(jì)算機(jī)可執(zhí)行指令,這些計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)諸如有磁介質(zhì)(例如,硬盤驅(qū)動(dòng)器)、諸如緊致盤(⑶)或數(shù)字多功能盤(DVD)等光介質(zhì)、持久或非持久固態(tài)存儲(chǔ)器(例如,閃存、磁RAM等)、或任何其他合適的存儲(chǔ)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)可被實(shí)現(xiàn)為圖1和9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)104(即,作為計(jì)算設(shè)備100的一部分)或被實(shí)現(xiàn)為單獨(dú)的計(jì)算機(jī)存儲(chǔ)介質(zhì)。應(yīng)當(dāng)理解,如此處所使用的,包括“計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)”的 “計(jì)算機(jī)可讀介質(zhì)”指的是具有可在其上記錄數(shù)據(jù)的過(guò)程期間用某種方式更改的至少一個(gè)物理結(jié)構(gòu)的有形存儲(chǔ)介質(zhì)。例如,計(jì)算機(jī)可讀介質(zhì)的物理結(jié)構(gòu)的一部分的磁化狀態(tài)可在記錄過(guò)程中更改。在一些此類實(shí)施例中,實(shí)現(xiàn)依照本文描述的原理來(lái)操作的技術(shù)的計(jì)算機(jī)可執(zhí)行指令可被實(shí)現(xiàn)為一個(gè)或多個(gè)獨(dú)立功能模塊(例如,存儲(chǔ)器管理模塊)。在此處描述的技術(shù)被具體化為計(jì)算機(jī)可執(zhí)行指令的情況下,它們可在任何合適的計(jì)算機(jī)系統(tǒng)中操作的任何合適的計(jì)算設(shè)備上執(zhí)行,包括以下圖1和9描述的示例性計(jì)算設(shè)備。例如,根據(jù)本文討論的一些或所有原理來(lái)操作的技術(shù)可以在以下系統(tǒng)上操作單個(gè)多用途可編程數(shù)字計(jì)算機(jī)裝置、共享處理能力并聯(lián)合執(zhí)行本文描述的技術(shù)的兩個(gè)或更多多用途計(jì)算機(jī)裝置的協(xié)調(diào)系統(tǒng)、專用于執(zhí)行本文描述的技術(shù)的單個(gè)計(jì)算機(jī)裝置或計(jì)算機(jī)裝置(同處一處或在地理上分布)的協(xié)調(diào)系統(tǒng)、用于執(zhí)行本文描述的技術(shù)的一個(gè)或多個(gè)專用集成電路(ASIC)、用于執(zhí)行本文描述的技術(shù)的一個(gè)或多個(gè)現(xiàn)場(chǎng)可編程門陣列(FPGA)、或任何其他合適的系統(tǒng)。圖1示出了計(jì)算設(shè)備100形式的可用于實(shí)現(xiàn)本文描述的技術(shù)的系統(tǒng)中的計(jì)算設(shè)備的一個(gè)示例性實(shí)現(xiàn),然而其他實(shí)現(xiàn)也是可能的。此外,應(yīng)理解,圖1既不旨在是對(duì)用于依照本發(fā)明描述的原理操作的計(jì)算設(shè)備的必要組件的描繪,也不旨在是全面描繪。還應(yīng)當(dāng)理解, 其他實(shí)現(xiàn)可在任何其他合適的計(jì)算設(shè)備中操作。計(jì)算設(shè)備100可包括處理器102、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)104和存儲(chǔ)器116。計(jì)算設(shè)備100可以是任何合適的計(jì)算設(shè)備,包括例如臺(tái)式或膝上型個(gè)人計(jì)算機(jī)、工作站、服務(wù)器、 大型機(jī)、智能電話、個(gè)人數(shù)字助理(PDA)、獨(dú)立聯(lián)網(wǎng)設(shè)備、或能夠在單個(gè)時(shí)間執(zhí)行一個(gè)或多個(gè)軟件模塊且具有可在一個(gè)或多個(gè)軟件模塊之間共享的諸如存儲(chǔ)器等一個(gè)或多個(gè)資源的任何其他合適的計(jì)算設(shè)備。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)104可以是適用于存儲(chǔ)要由處理器102處理的數(shù)據(jù)和/或要由處理器902執(zhí)行的指令的任何合適的有形存儲(chǔ)介質(zhì)。處理器102能夠處理數(shù)據(jù)和執(zhí)行指令。這些數(shù)據(jù)和指令可被存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)104上,并且例如可以啟用計(jì)算設(shè)備100的各組件之間的通信。存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)104上的數(shù)據(jù)和指令可包括實(shí)現(xiàn)根據(jù)本文描述的原理操作的技術(shù)的計(jì)算機(jī)可執(zhí)行指令。在圖1的示例中,如上所述,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)104 存儲(chǔ)實(shí)現(xiàn)各種模塊并存儲(chǔ)各種信息的計(jì)算機(jī)可執(zhí)行指令。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)104存儲(chǔ)與可在計(jì)算設(shè)備上執(zhí)行的一個(gè)或多個(gè)軟件模塊106以及可支配計(jì)算設(shè)備100上的進(jìn)程的執(zhí)行并調(diào)節(jié)諸如存儲(chǔ)器116等共享資源的使用的操作系統(tǒng)108相關(guān)的數(shù)據(jù)和指令。為了調(diào)節(jié)對(duì)存儲(chǔ)器的使用,操作系統(tǒng)108可具有用于執(zhí)行調(diào)用軟件模塊所請(qǐng)求的存儲(chǔ)器操作的存儲(chǔ)器管理模塊110。調(diào)用軟件模塊可以是軟件應(yīng)用程序106、操作系統(tǒng)108 的其他組件、或在計(jì)算設(shè)備100上執(zhí)行的任何其他軟件元件。存儲(chǔ)器管理模塊110可以用任何合適的方式來(lái)實(shí)現(xiàn)以執(zhí)行常規(guī)存儲(chǔ)器管理技術(shù)以及此處描述的一種或多種技術(shù)。如上所述,在此處描述的技術(shù)的某些實(shí)現(xiàn)中,存儲(chǔ)器管理模塊110可包括緩解模塊112,緩解模塊112可用于在調(diào)用軟件模塊請(qǐng)求存儲(chǔ)器操作時(shí)執(zhí)行一個(gè)或多個(gè)緩解動(dòng)作。緩解模塊112 可以對(duì)每一調(diào)用軟件模塊選擇性地應(yīng)用,使得緩解動(dòng)作僅對(duì)被檢測(cè)為需要緩解動(dòng)作的軟件模塊執(zhí)行。因此,為了在這些實(shí)現(xiàn)中執(zhí)行檢測(cè)和啟用,操作系統(tǒng)108還可包括用于監(jiān)視計(jì)算設(shè)備100中的軟件模塊的執(zhí)行的緩解啟用模塊114。然而,在替換實(shí)現(xiàn)中,緩解模塊可諸如由計(jì)算設(shè)備900的管理員來(lái)手動(dòng)啟用或禁用,并且在此類實(shí)現(xiàn)中可以不提供緩解啟用模塊。圖1所示的模塊,包括緩解模塊112和緩解啟用模塊114,可適用于根據(jù)此處描述的原理以任何合適的方式操作,包括通過(guò)以下描述的示例性技術(shù)中的任一種來(lái)操作。應(yīng)當(dāng)理解,圖1所示的實(shí)現(xiàn)僅是可實(shí)現(xiàn)此處描述的原理的不同方式的示例。在替換實(shí)現(xiàn)中,緩解模塊和緩解啟用模塊可被實(shí)現(xiàn)為與操作系統(tǒng)分開(kāi)的組件,或者可被實(shí)現(xiàn)為操作系統(tǒng)內(nèi)的單個(gè)組件,或以任何其他合適的方式來(lái)實(shí)現(xiàn),因?yàn)楸景l(fā)明的各實(shí)施例不限于被實(shí)現(xiàn)為任何特定模塊或模塊集。
常規(guī)存儲(chǔ)器管理模塊和根據(jù)圖1所示的實(shí)現(xiàn)來(lái)操作的存儲(chǔ)器管理模塊之間的區(qū)別在圖2A和2B中示出。在圖2A中,示出多個(gè)調(diào)用軟件模塊200向操作系統(tǒng)API和存儲(chǔ)器管理模塊206發(fā)出操作請(qǐng)求202和204,包括執(zhí)行存儲(chǔ)器操作的請(qǐng)求。這些操作如所請(qǐng)求地被執(zhí)行,并且任何合適的信息被返回給調(diào)用軟件模塊。沒(méi)有緩解動(dòng)作可用,且不執(zhí)行對(duì)調(diào)用軟件應(yīng)用程序的監(jiān)視,使得這些軟件模塊容易受到因包括上述隱錯(cuò)在內(nèi)的編程隱錯(cuò)引起的存儲(chǔ)器錯(cuò)誤的影響。在圖2B中,示出了圖1的示例性實(shí)現(xiàn),且緩解模塊112被實(shí)現(xiàn)為操作系統(tǒng)的組件。 在該實(shí)現(xiàn)中,調(diào)用軟件模塊200向操作系統(tǒng)和存儲(chǔ)器管理模塊206發(fā)出相同的操作請(qǐng)求202 和204,因?yàn)樵谒緦?shí)施例中,這些軟件模塊不知道緩解模塊112以及是否對(duì)特定的調(diào)用軟件模塊實(shí)現(xiàn)了緩解模塊。如上所討論且如圖2B中所示,緩解模塊112可對(duì)每一調(diào)用軟件模塊選擇性地應(yīng)用來(lái)執(zhí)行一個(gè)或多個(gè)緩解動(dòng)作,且因此,調(diào)用軟件模塊200所發(fā)出的操作請(qǐng)求中的某一些(不一定是全部)被緩解模塊112截取。為了確定是否應(yīng)對(duì)特定調(diào)用軟件模塊啟用緩解模塊112,緩解啟用模塊114與存儲(chǔ)器管理單元110和緩解模塊112、以及調(diào)用軟件模塊200進(jìn)行通信。在檢測(cè)到調(diào)用軟件應(yīng)用程序已經(jīng)發(fā)送了執(zhí)行存儲(chǔ)器操作的請(qǐng)求之后,緩解啟用模塊114可以審閱存儲(chǔ)在與緩解啟用模塊114相關(guān)聯(lián)的緩解數(shù)據(jù)存儲(chǔ)212中的信息,來(lái)確定在執(zhí)行所請(qǐng)求的存儲(chǔ)器操作時(shí)緩解模塊是否應(yīng)以緩解模式操作。這也可被認(rèn)為是與存儲(chǔ)器管理模塊110相關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ),因?yàn)樗S護(hù)與存儲(chǔ)器管理模塊110的操作相關(guān)的信息,且在上述的某些實(shí)現(xiàn)中,在緩解啟用模塊114被實(shí)現(xiàn)為存儲(chǔ)器管理模塊110的一部分時(shí)可以是存儲(chǔ)器管理模塊110的一部分。審閱存儲(chǔ)在數(shù)據(jù)存儲(chǔ)212中的信息可包括任何合適的動(dòng)作,包括審閱事件日志216以及規(guī)則與設(shè)置218。數(shù)據(jù)存儲(chǔ)212可按持久方式來(lái)存儲(chǔ),從而如果緩解啟用模塊114被禁用或關(guān)閉,當(dāng)它稍后被重新啟用時(shí),它將能夠訪問(wèn)先前收集的信息,包括關(guān)于先前作出的決策的信息。數(shù)據(jù)存儲(chǔ)212可存儲(chǔ)事件日志216,該事件日志包括關(guān)于調(diào)用軟件模塊200經(jīng)歷的存儲(chǔ)器錯(cuò)誤、被檢測(cè)為被緩解的存儲(chǔ)器錯(cuò)誤、以及被請(qǐng)求執(zhí)行的存儲(chǔ)器操作的信息。事件日志216中的每一條目可包括任何合適的信息,包括裝桶(bucketing)參數(shù),如軟件模塊的名稱、軟件模塊的版本、在錯(cuò)誤的時(shí)候軟件模塊的什么庫(kù)或部分正被執(zhí)行、在執(zhí)行中的哪一點(diǎn)檢測(cè)到錯(cuò)誤、以及描述錯(cuò)誤的異常代碼,以及任何其他合適的信息。規(guī)則與設(shè)置18可存儲(chǔ)關(guān)于一個(gè)或多個(gè)調(diào)用軟件模塊200的任何合適的信息,以及關(guān)于通用緩解策略的信息。圖 2C示出了可被存儲(chǔ)在規(guī)則與設(shè)置218中的信息的一個(gè)示例。規(guī)則與設(shè)置218可包括對(duì)應(yīng)于多個(gè)調(diào)用軟件模塊200中的每一個(gè)(包括對(duì)應(yīng)于調(diào)用軟件模塊的每一標(biāo)識(shí)符,其可以是應(yīng)用程序標(biāo)識(shí)符)的條目,可在確定是否應(yīng)對(duì)調(diào)用軟件模塊啟用緩解模式時(shí)使用的一個(gè)或多個(gè)值,以及如果是則要啟用緩解的時(shí)間??稍诖_定是否應(yīng)啟用緩解模式時(shí)使用的一個(gè)或多個(gè)值可以是任何合適的值,包括可被收集的、關(guān)于跨調(diào)用軟件模塊所關(guān)聯(lián)的應(yīng)用程序的一個(gè)或多個(gè)實(shí)例軟件模塊所經(jīng)歷的錯(cuò)誤和/或所檢測(cè)的緩解動(dòng)作的成功的一個(gè)或多個(gè)統(tǒng)計(jì)數(shù)據(jù)。這些統(tǒng)計(jì)數(shù)據(jù)可采取任何合適的形式。在某些實(shí)現(xiàn)中,統(tǒng)計(jì)數(shù)據(jù)可采取緩解標(biāo)簽值的形式,該標(biāo)簽值在檢測(cè)到成功的情況下可遞增,且在檢測(cè)到錯(cuò)誤的情況下遞減。緩解標(biāo)簽值然后可以與諸如閾值等其他統(tǒng)計(jì)值進(jìn)行比較,來(lái)確定是否應(yīng)對(duì)應(yīng)用程序的后續(xù)實(shí)例啟用緩解模式。然而,應(yīng)當(dāng)理解,統(tǒng)計(jì)數(shù)據(jù)僅是可被存儲(chǔ)在規(guī)則與設(shè)置218中的值的類型的一個(gè)示例,且緩解標(biāo)簽值僅是可被存儲(chǔ)的統(tǒng)計(jì)數(shù)據(jù)的類型的一個(gè)示例。緩解啟用模塊114可以用任何合適的方式,包括通過(guò)以下討論的示例性技術(shù)中的任一種,審閱該信息來(lái)確定是否對(duì)特定軟件模塊啟用緩解模式。為了提供用于確定是否對(duì)特定軟件模塊啟用緩解模式的示例性技術(shù)的討論的上下文,首先描述當(dāng)緩解模塊112處于緩解模式時(shí)的緩解模塊112的操作的示例性技術(shù)。包括以上概括描述以及以下更具體描述的示例在內(nèi)的緩解動(dòng)作可以用任何合適的方式來(lái)執(zhí)行, 并且實(shí)現(xiàn)這些緩解動(dòng)作的緩解模式可以用任何合適的方式來(lái)執(zhí)行。圖3示出了其中緩解模塊112可以以由本發(fā)明的各實(shí)施例實(shí)現(xiàn)的緩解模式操作的方式的一個(gè)示例,該緩解模塊選擇性地以緩解模式操作存儲(chǔ)器管理模塊,但是其他方式也是可能的,根據(jù)此處描述的原理, 存儲(chǔ)器管理模塊可以用任何合適的方式來(lái)實(shí)現(xiàn),包括不以兩種不同模式操作。圖3的說(shuō)明性過(guò)程300在框302開(kāi)始,在那里調(diào)用軟件模塊發(fā)出要存儲(chǔ)器管理模塊110執(zhí)行存儲(chǔ)器操作的請(qǐng)求。在框304,對(duì)發(fā)出請(qǐng)求的特定調(diào)用軟件模塊確定存儲(chǔ)器管理模塊110是否應(yīng)以緩解模式操作來(lái)執(zhí)行一個(gè)或多個(gè)緩解動(dòng)作(在以下的某些情況下,為簡(jiǎn)明起見(jiàn),這可被描述為軟件模塊是否以緩解模式操作,但應(yīng)理解,這樣做純粹是為了方便描述,并且較佳地,軟件模塊不知道緩解模塊以及緩解模塊操作的模式)。如果確定存儲(chǔ)器管理模塊110應(yīng)以緩解模式操作,則啟用緩解模塊112,并且在框306,接收?qǐng)?zhí)行存儲(chǔ)器操作的請(qǐng)求。在框306中接收到該請(qǐng)求之后,緩解模塊112和存儲(chǔ)器管理模塊110可根據(jù)緩解動(dòng)作來(lái)執(zhí)行存儲(chǔ)器操作。在某些實(shí)現(xiàn)中,這可包括執(zhí)行單個(gè)動(dòng)作或可包括執(zhí)行許多動(dòng)作。在圖3的圖示中,為清楚起見(jiàn),根據(jù)緩解動(dòng)作執(zhí)行存儲(chǔ)器操作被示為四個(gè)單獨(dú)的操作,但是應(yīng)理解,這僅是為了方便可視化,且根據(jù)圖3操作的技術(shù)可以不完全如圖所示那樣來(lái)實(shí)現(xiàn)。在框308,緩解模塊112至少基于所請(qǐng)求的存儲(chǔ)器操作的類型以及該操作的輸入?yún)?shù)來(lái)確定其是否適用于執(zhí)行任何緩解動(dòng)作??梢赃@樣做是因?yàn)樵谀承?shí)現(xiàn)中,緩解模塊 112可能僅被配置成緩解因一組一個(gè)或多個(gè)存儲(chǔ)器操作而導(dǎo)致的一種或多種類型的存儲(chǔ)器錯(cuò)誤,且因此可能沒(méi)有其可以對(duì)特定存儲(chǔ)器操作執(zhí)行的緩解動(dòng)作。在某些替換實(shí)現(xiàn)中,可以實(shí)現(xiàn)適用于對(duì)所有類型的存儲(chǔ)器操作執(zhí)行緩解動(dòng)作的存儲(chǔ)器管理模塊112,因此可以不實(shí)現(xiàn)具有判定框308的過(guò)程。如果在框308確定有至少一個(gè)緩解動(dòng)作可用,則在框310執(zhí)行該緩解動(dòng)作,這可包括將該緩解動(dòng)作應(yīng)用于該操作。將緩解動(dòng)作應(yīng)用于存儲(chǔ)器操作可包括任何合適的過(guò)程,包括以下詳細(xì)討論的過(guò)程中的任一個(gè)。例如,應(yīng)用緩解動(dòng)作可包括評(píng)估存儲(chǔ)器操作,如確定該操作的輸入?yún)?shù)是否正確;調(diào)整存儲(chǔ)器操作的參數(shù),如增加所請(qǐng)求的存儲(chǔ)器的量;等待執(zhí)行存儲(chǔ)器操作直到稍后的時(shí)間;或不執(zhí)行存儲(chǔ)器操作。在框312,在應(yīng)用了緩解動(dòng)作之后, 確定是否仍要執(zhí)行該存儲(chǔ)器操作。如果是,則在框314,執(zhí)行緩解動(dòng)作,且過(guò)程300結(jié)束。然而,如果在框312確定不要執(zhí)行該存儲(chǔ)器操作——例如,如果緩解動(dòng)作不執(zhí)行存儲(chǔ)器操作, 或者如果確定輸入?yún)?shù)不正確——?jiǎng)t過(guò)程300也結(jié)束。返回到框304,如果確定存儲(chǔ)器管理模塊110不應(yīng)以緩解模式操作,或者如果在框 308確定沒(méi)有緩解動(dòng)作可用,則在框316,如所請(qǐng)求地執(zhí)行存儲(chǔ)器操作,且過(guò)程300結(jié)束???316處的執(zhí)行可以如在常規(guī)存儲(chǔ)器管理器中的那樣,但可使用任何合適的執(zhí)行方法。圖4A、4B、4C和4D示出了可由緩解模塊112采取來(lái)執(zhí)行諸如圖3的框310所示的至少一個(gè)緩解動(dòng)作的四個(gè)不同過(guò)程。應(yīng)當(dāng)理解,這些過(guò)程僅說(shuō)明了可被實(shí)現(xiàn)來(lái)執(zhí)行這些緩解動(dòng)作的過(guò)程的類型,并且這些緩解動(dòng)作僅是可由緩解模塊112執(zhí)行的緩解動(dòng)作的類型的示例。這一緩解動(dòng)作的第一示例在圖4A的過(guò)程400A中示出。過(guò)程400A在框402開(kāi)始, 在那里確定調(diào)用軟件模塊所請(qǐng)求的存儲(chǔ)器操作是否是分配操作;即,請(qǐng)求將一定量的存儲(chǔ)器分配給調(diào)用軟件模塊,使得該軟件模塊可在一段時(shí)間內(nèi)存儲(chǔ)一定量的數(shù)據(jù)。如果否,則過(guò)程400A結(jié)束。然而,如果所請(qǐng)求的存儲(chǔ)器操作是對(duì)一定量的存儲(chǔ)器的分配操作,則在框 404,采取緩解動(dòng)作來(lái)增加所分配的存儲(chǔ)器的量。在某些實(shí)施例中,該較大的存儲(chǔ)器量可以取決于所請(qǐng)求的存儲(chǔ)器的大小;例如,是所請(qǐng)求的存儲(chǔ)器的兩倍。在另一實(shí)現(xiàn)中,額外存儲(chǔ)器可以是用于給定計(jì)算設(shè)備的固定量的存儲(chǔ)器;例如,對(duì)于32位處理器,額外的所分配的存儲(chǔ)器可以是32字節(jié)(即,如果請(qǐng)求了四個(gè)字節(jié),則總的分配將是36字節(jié)),且對(duì)于64位處理器,該額外的所分配的存儲(chǔ)器可以是48字節(jié)。在框404可以分配任何合適量的額外存儲(chǔ)器。在框406,然后通過(guò)在其中存儲(chǔ)標(biāo)記值來(lái)將該額外存儲(chǔ)器“標(biāo)記”為額外存儲(chǔ)器。 該標(biāo)記值可以是任何合適的值,并且可以是對(duì)每一存儲(chǔ)器單元(如對(duì)每一存儲(chǔ)器塊)存儲(chǔ)的重復(fù)值,或者是跨額外的所分配的存儲(chǔ)器的整個(gè)空間寫入的單個(gè)值或值模式。該標(biāo)記值可以是可以如下所討論的用作評(píng)估的一部分來(lái)確定緩解動(dòng)作是否成功地緩解了存儲(chǔ)器錯(cuò)誤的任何合適的值。例如,如果稍后審閱該額外存儲(chǔ)器且確定標(biāo)記值已被蓋寫,則可以確定軟件模塊遭受引起緩存溢出錯(cuò)誤的編程隱錯(cuò)——意味著寫入了大于請(qǐng)求量的數(shù)據(jù)——并且額外分配通過(guò)分配額外的空間緩解了存儲(chǔ)器錯(cuò)誤。在寫入了標(biāo)記值之后,則過(guò)程400A結(jié)束ο圖4B示出了用于根據(jù)此處描述的某些原理來(lái)執(zhí)行緩解動(dòng)作的第二示例性過(guò)程 400B。過(guò)程400B在框410開(kāi)始,在那里確定所請(qǐng)求的存儲(chǔ)器操作是否是重新分配操作,其中調(diào)用軟件模塊正在尋求增加或減少先前分配的存儲(chǔ)器的量。如果不是重新分配操作,則過(guò)程400B結(jié)束。然而,如果存儲(chǔ)器操作是重新分配操作,則在框412,確定該請(qǐng)求是否是針對(duì)減少存儲(chǔ)器分配的。如果是,則在框414,在解除來(lái)自原始分配的剩余存儲(chǔ)器的分配時(shí)將分配保持在相同的根位置中。在框416,存儲(chǔ)器管理模塊110不立即釋放剩余的存儲(chǔ)器,而是等待直到一等待時(shí)間段之后。在框414,可將如上所述的標(biāo)記添加到要釋放的存儲(chǔ)器。當(dāng)存儲(chǔ)器實(shí)際被釋放時(shí),可檢查這些標(biāo)記來(lái)查明是否存取了旨在不被使用的存儲(chǔ)器。過(guò)程400B隨后結(jié)束。如果在框412確定所請(qǐng)求的重新分配是針對(duì)更大量的存儲(chǔ)器的,則在框418,確定是否有足夠的、與原始分配直接相鄰的空閑存儲(chǔ)器,使得可以從該直接相鄰存儲(chǔ)器分配所請(qǐng)求的新存儲(chǔ)器并且可為該數(shù)據(jù)保持原始位置。如果是,則在框420,完成將來(lái)自原始分配的數(shù)據(jù)保持在相同的位置中,從該位置擴(kuò)大分配,并且該過(guò)程結(jié)束。然而,如果沒(méi)有足夠的直接相鄰的存儲(chǔ)器,則在框422將分配移至存儲(chǔ)器的另一部分中的較大空間,并且在框4M不解除原始存儲(chǔ)器的分配,直到一等待時(shí)間段之后。如上所述,先前分配且不應(yīng)再被使用的存儲(chǔ)器可用標(biāo)記來(lái)填充,以便可檢測(cè)引起對(duì)該存儲(chǔ)器的存取的隱錯(cuò)。該過(guò)程隨后結(jié)束。
該緩解可用于緩解遭受導(dǎo)致軟件模塊在其中存儲(chǔ)器分配被移至存儲(chǔ)器的不同部分的重新分配操作之后繼續(xù)使用原始存儲(chǔ)器空間的編程隱錯(cuò)的軟件模塊中的存儲(chǔ)器錯(cuò)誤。 通過(guò)試圖將存儲(chǔ)器分配保持在相同位置且不允許其他軟件模塊使用存儲(chǔ)器塊直到一等待時(shí)間段之后,這些編程隱錯(cuò)的影響可被緩解,因?yàn)檐浖K直到等待時(shí)間段到期之后才能使用原始分配。圖4C示出了另一示例性過(guò)程400C。過(guò)程400C在框430開(kāi)始,在那里確定所請(qǐng)求的操作是否是解除分配,即“釋放”操作。如果否,則過(guò)程400C結(jié)束。然而,如果所請(qǐng)求的存儲(chǔ)器操作是釋放操作,則在框432,確定釋放操作的輸入?yún)?shù)是否正確。例如,如果存儲(chǔ)器管理模塊112是管理堆存儲(chǔ)器的分配的模塊,則在框432可以確定請(qǐng)求釋放的存儲(chǔ)器的地址是否是正確分配的堆存儲(chǔ)器而非棧存儲(chǔ)器或全局變量空間的地址。這可以按任何合適的方式完成。例如,緩解模塊112可以通過(guò)將“釋放”操作的輸入地址與堆的地址范圍進(jìn)行比較來(lái)確定該地址所引用的存儲(chǔ)器是否是堆存儲(chǔ)器;如果否,則該輸入地址可能是不正確的。作為另一示例,存儲(chǔ)器管理器在分配了堆中的存儲(chǔ)器塊之后可用標(biāo)記來(lái)為該塊加上標(biāo)簽。如果緩解模塊112被實(shí)現(xiàn)為執(zhí)行圖4A的過(guò)程400A,則任何正確分配的堆存儲(chǔ)器將會(huì)在額外存儲(chǔ)器中存儲(chǔ)了標(biāo)記值。通過(guò)檢查這些標(biāo)記值的存在,緩解模塊112可確定存儲(chǔ)器已被存儲(chǔ)器管理模塊110正確地分配,且因此輸入?yún)?shù)是正確的。如果在框432以任何方式確定參數(shù)是正確的,則在框434,可在等待時(shí)間段之后執(zhí)行所請(qǐng)求的釋放操作,且過(guò)程400C結(jié)束。 如上所述,在緩解模式中,“釋放的”存儲(chǔ)器可能無(wú)法直接可供使用。相反,可以用標(biāo)記值來(lái)填充該存儲(chǔ)器以便允許檢測(cè)對(duì)該存儲(chǔ)器的非預(yù)期存取。然而,如果參數(shù)是不正確的,則在框 436,可忽略該操作,或者可生成錯(cuò)誤消息并將其發(fā)回到調(diào)用軟件模塊,且該過(guò)程結(jié)束。在忽略操作時(shí),可存儲(chǔ)緩解成功地阻止了隱錯(cuò)創(chuàng)建錯(cuò)誤的指示。這一所存儲(chǔ)的指示可如下所述地用于確定是否繼續(xù)向調(diào)用軟件模塊應(yīng)用緩解400C。圖4D示出了可由緩解模塊112實(shí)現(xiàn)來(lái)執(zhí)行一個(gè)或多個(gè)緩解動(dòng)作的過(guò)程的另一個(gè)示例。在圖4D的過(guò)程400D中,首先在框440確定所請(qǐng)求的存儲(chǔ)器操作是否是解除分配,即 “釋放”操作。如果否,則過(guò)程400D結(jié)束。然而,如果所請(qǐng)求的存儲(chǔ)器操作是釋放操作,則在框442,確定該釋放操作是否是“雙重釋放”——即,確定該釋放操作是否因調(diào)用軟件模塊中的編程隱錯(cuò)而是先前的釋放操作的重復(fù)。這可用任何合適的方式來(lái)完成,包括通過(guò)確定請(qǐng)求釋放的存儲(chǔ)器是否仍未被執(zhí)行,因?yàn)槠淙栽谧郧耙徽?qǐng)求起的等待時(shí)間段內(nèi)。該等待時(shí)間段內(nèi)的存儲(chǔ)器可被標(biāo)識(shí)為包含如上所述的標(biāo)記值,或者通過(guò)存儲(chǔ)“釋放的”存儲(chǔ)器塊的記錄或以任何其他合適的方式來(lái)標(biāo)識(shí)。如果是重復(fù),則在框444,忽略該操作。如果不是重復(fù),則在框446,確定釋放操作是否與調(diào)用軟件模塊的退出相關(guān)聯(lián),因?yàn)檎{(diào)用軟件試圖在退出期間清除其所分配的存儲(chǔ)器。這可以按任何合適的方式完成。如果是,則在框444,忽略且不執(zhí)行所請(qǐng)求的操作。這可以出于兩個(gè)原因來(lái)完成。首先,研究顯示諸如用戶應(yīng)用程序等許多調(diào)用軟件模塊在關(guān)閉期間不正確地釋放存儲(chǔ)器,導(dǎo)致在關(guān)閉期間經(jīng)歷的30%的存儲(chǔ)器錯(cuò)誤。第二,許多操作系統(tǒng)108和存儲(chǔ)器管理模塊110已經(jīng)有了在調(diào)用軟件模塊退出時(shí)的自動(dòng)釋放操作,因此調(diào)用軟件模塊所做出的釋放操作請(qǐng)求可被認(rèn)為是重復(fù)。如果在框444作為框442或446的任一個(gè)中的判定的結(jié)果忽略該操作,則過(guò)程400D結(jié)束。
然而,如果所請(qǐng)求的存儲(chǔ)器操作在框446被確定為不是退出操作時(shí)的釋放,則在框448,在等待時(shí)間段之后執(zhí)行該釋放操作??梢赃@樣做來(lái)防止可在調(diào)用軟件模塊因編程隱錯(cuò)而釋放存儲(chǔ)器然后在釋放之后仍使用該存儲(chǔ)器時(shí)所引發(fā)的存儲(chǔ)器錯(cuò)誤。通過(guò)直到等待時(shí)間段之后才執(zhí)行釋放操作,能緩解可因存儲(chǔ)器在釋放之后被立即重新分配給另一軟件模塊而導(dǎo)致的存儲(chǔ)器錯(cuò)誤的影響,在這種存儲(chǔ)器錯(cuò)誤的情況下,原始軟件模塊和新軟件模塊然后兩者都會(huì)使用該存儲(chǔ)器且各自蓋寫對(duì)方所保存的數(shù)據(jù)。一旦在等待時(shí)間段之后執(zhí)行了存儲(chǔ)器操作,則過(guò)程400D結(jié)束。在等待時(shí)間段之后執(zhí)行釋放操作可以用任何合適的方式來(lái)完成。例如,該等待時(shí)間段可以是一設(shè)定的時(shí)間段,如幾秒。該等待時(shí)間段也可以是靈活的時(shí)間段,如基于所請(qǐng)求的分配和釋放操作的次數(shù),如當(dāng)存在對(duì)存儲(chǔ)器的較低需求時(shí)該時(shí)間段較長(zhǎng),而當(dāng)存在對(duì)存儲(chǔ)器的較高需求時(shí)該時(shí)間段較短。另一可能的實(shí)現(xiàn)是等待直到應(yīng)用程序終止之后,使得在進(jìn)程終止時(shí),解除該進(jìn)程內(nèi)使用的存儲(chǔ)器的分配的操作系統(tǒng)的部分實(shí)際釋放該存儲(chǔ)器。以此方式,應(yīng)用程序終止,且該應(yīng)用程序在其中執(zhí)行的進(jìn)程也終止,存儲(chǔ)器最終可被釋放。在其他實(shí)現(xiàn)中,該等待時(shí)間段可以完全不是設(shè)定的時(shí)間段,而是因?qū)⑨尫挪僮髦糜陉?duì)列中以便在其到達(dá)該隊(duì)列的頂部時(shí)執(zhí)行而得到的非預(yù)定時(shí)間段。這一實(shí)現(xiàn)的一個(gè)示例在圖5中示出,但應(yīng)當(dāng)理解,其他實(shí)現(xiàn)是可能的。圖5的過(guò)程500在框502開(kāi)始,在那里確定釋放的存儲(chǔ)器高速緩存的大小。這可以用任何合適的方式來(lái)確定,如通過(guò)選擇總存儲(chǔ)器空間的百分比,或通過(guò)接受來(lái)自計(jì)算設(shè)備的用戶或管理員的輸入。例如,所釋放的存儲(chǔ)器高速緩存可以是8兆字節(jié)(8MB)。在框 506,緩解模塊112接收用于執(zhí)行釋放操作的請(qǐng)求。在框508,將請(qǐng)求釋放的存儲(chǔ)器添加到高速緩存,這意味著將釋放操作中的存儲(chǔ)器量添加到高速緩存總量。當(dāng)將存儲(chǔ)器添加到高速緩存時(shí),也向進(jìn)程隊(duì)列添加要執(zhí)行的操作的指示,指示請(qǐng)求了該操作。應(yīng)當(dāng)理解,當(dāng)該存儲(chǔ)器在“高速緩存”中時(shí),該存儲(chǔ)器被維護(hù)為被分配給調(diào)用軟件模塊,因?yàn)樵谠搶?shí)現(xiàn)中,該高速緩存被維護(hù)為請(qǐng)求釋放但尚未釋放的存儲(chǔ)器量的指示符。在框510,在將存儲(chǔ)器添加到高速緩存之后,確定尚未釋放的存儲(chǔ)器量是否達(dá)到或超過(guò)了高速緩存的大小。如果否,則過(guò)程500返回到框506,在那里它接收釋放存儲(chǔ)器的另一指令。如果達(dá)到或超過(guò)了高速緩存限制,則在框512,至少將隊(duì)列頂部的操作彈出并執(zhí)行,從而釋放與最早延遲的釋放操作相關(guān)聯(lián)的存儲(chǔ)器并將分配給高速緩存的存儲(chǔ)器的大小減小到該限制以下。應(yīng)當(dāng)理解,在某些情況下,為了再一次將高速緩存的大小返回到限制以下,可要求執(zhí)行來(lái)自隊(duì)列的兩個(gè)或更多操作,但是該原理與圖5所示的相同。一旦執(zhí)行了隊(duì)列中的第一個(gè)操作并將其從隊(duì)列中移除,則過(guò)程500的流程返回到框506,在那里接收?qǐng)?zhí)行釋放操作的另一指令。以上描述了具有緩解模式的存儲(chǔ)器管理模塊110的若干示例性實(shí)現(xiàn),在緩解模式中,緩解模塊112使用一個(gè)或多個(gè)緩解動(dòng)作來(lái)降低存儲(chǔ)器錯(cuò)誤負(fù)面地影響軟件模塊的可能性。如下所述,這些緩解可基于緩解是否可能減少每一應(yīng)用程序中的錯(cuò)誤而在逐個(gè)應(yīng)用程序的基礎(chǔ)上選擇性地應(yīng)用??擅枋鲇糜谶x擇性地啟用緩解模式且評(píng)估緩解動(dòng)作的有效性的緩解啟用模塊114的示例性實(shí)現(xiàn)。然而,應(yīng)當(dāng)理解,緩解啟用模塊114可以用任何合適的方式來(lái)實(shí)現(xiàn),包括作為緩解模塊112的組件,因?yàn)楸景l(fā)明的各實(shí)施例在這一方面不受限制。圖6示出了根據(jù)此處描述的原理的一個(gè)這樣的示例性實(shí)現(xiàn)。圖6的過(guò)程600在框602開(kāi)始,在那里緩解啟用模塊114檢測(cè)調(diào)用軟件模塊經(jīng)歷了錯(cuò)誤。該檢測(cè)可以用任何合適的方式來(lái)執(zhí)行,如通過(guò)檢測(cè)軟件模塊崩潰或以其他方式不正確地執(zhí)行。在框604,讀取與錯(cuò)誤相關(guān)聯(lián)的錯(cuò)誤代碼,并且在框606,確定其是否是存儲(chǔ)器錯(cuò)誤。如果不是存儲(chǔ)器錯(cuò)誤,則過(guò)程600結(jié)束。然而,如果是存儲(chǔ)器錯(cuò)誤,則過(guò)程600繼續(xù)到框608,在那里如通過(guò)對(duì)數(shù)據(jù)存儲(chǔ)212 中的規(guī)則與設(shè)置記錄218創(chuàng)建或編輯條目并將關(guān)于錯(cuò)誤事件的信息寫入事件日志216來(lái)對(duì)該特定調(diào)用軟件模塊啟用緩解模式。在某些實(shí)現(xiàn)中,緩解模式可以在首次檢測(cè)到存儲(chǔ)器錯(cuò)誤時(shí)啟用,而在替換實(shí)現(xiàn)中,在應(yīng)用緩解模式之前必須達(dá)到閾值數(shù)量的存儲(chǔ)器錯(cuò)誤或在某一時(shí)間幀內(nèi)達(dá)到閾值數(shù)量的存儲(chǔ)器錯(cuò)誤,如一小時(shí)內(nèi)四次。根據(jù)此處描述的原理可以實(shí)現(xiàn)用于啟動(dòng)緩解模式的任何合適的測(cè)試。在框610,在軟件模塊請(qǐng)求且存儲(chǔ)器管理模塊的緩解模塊114執(zhí)行操作時(shí),緩解啟用模塊114隨時(shí)間跟蹤緩解動(dòng)作的成功。跟蹤成功可用任何合適的方式來(lái)完成,包括通過(guò)上述技術(shù)中的任一種。在某些實(shí)現(xiàn)中,這可包括編譯關(guān)于所檢測(cè)到的軟件模塊經(jīng)歷的錯(cuò)誤和/或所檢測(cè)到的緩解動(dòng)作在阻止存儲(chǔ)器錯(cuò)誤負(fù)面地影響軟件模塊方面的成功的統(tǒng)計(jì)數(shù)據(jù)。這些統(tǒng)計(jì)數(shù)據(jù)可對(duì)與應(yīng)用程序相關(guān)的軟件模塊的一具體實(shí)例來(lái)編譯,或者可隨時(shí)間跨軟件模塊的多個(gè)實(shí)例來(lái)收集。在某些實(shí)現(xiàn)中,該統(tǒng)計(jì)數(shù)據(jù)可包括緩解標(biāo)簽值,或者可跟蹤成功和其中應(yīng)用程序在沒(méi)有成功的緩解的情況下執(zhí)行的實(shí)例的其他機(jī)制。作為一具體示例, 緩解標(biāo)簽值可以在緩解動(dòng)作被檢測(cè)為成功時(shí)遞增,且在應(yīng)用程序在沒(méi)有成功緩解的情況下終止時(shí)遞減。在沒(méi)有成功緩解的情況下終止可以僅基于從應(yīng)用程序的“干凈”退出確定。然而,可應(yīng)用關(guān)于無(wú)成功緩解的其他度量,如是否檢測(cè)到錯(cuò)誤或崩潰影響了軟件模塊,或者在對(duì)應(yīng)用程序的具體實(shí)例沒(méi)有成功緩解的情況下。在框612,使用在框610的跟蹤期間收集的信息來(lái)確定緩解動(dòng)作是否成功地緩解了錯(cuò)誤。在使用諸如緩解標(biāo)簽值等統(tǒng)計(jì)數(shù)據(jù)的實(shí)現(xiàn)中,這可包括確定該統(tǒng)計(jì)數(shù)據(jù)是否指示成功在特定閾值水平之上或者錯(cuò)誤在特定閾值水平之下——如通過(guò)確定緩解標(biāo)簽值是否在特定閾值之上——但這可用任何合適的方式來(lái)完成。如果緩解動(dòng)作成功地緩解了錯(cuò)誤, 則在框614,可對(duì)該軟件模塊維持緩解模式,但是如果緩解動(dòng)作不成功,則在框616對(duì)該軟件模塊禁用緩解模式。在框616或616之后,過(guò)程600結(jié)束。應(yīng)當(dāng)理解,圖6的過(guò)程600僅是可由緩解啟用模塊114根據(jù)此處描述的原理來(lái)實(shí)現(xiàn)的技術(shù)的類型的示例,其他技術(shù)也是可能的。例如,盡管檢測(cè)錯(cuò)誤和評(píng)估錯(cuò)誤代碼在圖6 中被描述為是緩解啟用模塊114的責(zé)任,但在某些替換實(shí)現(xiàn)中,這些功能可由操作系統(tǒng)108 的另一模塊來(lái)執(zhí)行,如微軟Windows操作系統(tǒng)的Windows診斷基礎(chǔ)結(jié)構(gòu)(WDI),且緩解啟用模塊114可監(jiān)視WDI模塊來(lái)確定何時(shí)檢測(cè)到存儲(chǔ)器錯(cuò)誤,或當(dāng)檢測(cè)到存儲(chǔ)器錯(cuò)誤時(shí)由WDI 模塊通知。此外,緩解模式被描述為基于框612中對(duì)緩解動(dòng)作是否成功地緩解了錯(cuò)誤的判定來(lái)啟用或禁用。在某些實(shí)現(xiàn)中,緩解啟用模塊114可另外地或另選地基于其他因素來(lái)啟用 /禁用緩解模式,如其存儲(chǔ)器操作以緩解模式執(zhí)行的軟件模塊的時(shí)間或數(shù)量。例如,在一個(gè)實(shí)現(xiàn)中,軟件模塊的操作可以僅在一段時(shí)間(如一周)內(nèi)以緩解模式執(zhí)行,之后回退到正常 (非緩解)模式。在另一示例性實(shí)現(xiàn)中,緩解啟用模塊114可以在給定時(shí)間內(nèi)僅對(duì)一設(shè)定數(shù)量的軟件應(yīng)用程序啟用緩解模式,如同時(shí)僅對(duì)四個(gè)軟件應(yīng)用程序啟用,來(lái)節(jié)省系統(tǒng)資源。如果達(dá)到了最大值且如在框602-606中檢測(cè)到應(yīng)對(duì)另一軟件模塊啟用緩解模式,則最早啟用了緩解模式的軟件模塊可將該緩解模式禁用,使得新軟件模塊可啟用緩解模式。在某些實(shí)現(xiàn)中,可使用這些技術(shù)中的每一個(gè)的組合,使得緩解模塊保持在一設(shè)定時(shí)間段內(nèi)對(duì)軟件模塊啟用,只要緩解啟用模塊114檢測(cè)到緩解動(dòng)作成功地緩解了錯(cuò)誤,但是該模式僅被啟用一設(shè)定時(shí)間段,之后當(dāng)接著檢測(cè)到另一軟件模塊可從緩解模式中獲益時(shí)則禁用該模式。跟蹤緩解動(dòng)作在減少應(yīng)用程序經(jīng)歷的存儲(chǔ)器錯(cuò)誤的數(shù)量方面的成功可用任何合適的方式來(lái)執(zhí)行。圖7A和7B示出了用于檢測(cè)緩解動(dòng)作的成功的兩種示例性技術(shù)的流程圖, 但應(yīng)當(dāng)理解,取決于期望被緩解的存儲(chǔ)器錯(cuò)誤的類型以及對(duì)緩解模塊112可用的緩解動(dòng)作的類型,其他技術(shù)是可能的。圖7A的過(guò)程700A是關(guān)于如何能跟蹤緩解動(dòng)作在緩解錯(cuò)誤方面的成功的總體過(guò)程的一個(gè)示例。在該示例中,圖4A的分配過(guò)程400A是緩解動(dòng)作被跟蹤。過(guò)程700A在框702 開(kāi)始,在那里緩解啟用模塊114出于任何原因?qū)浖K啟用緩解模式。在框704,緩解模塊112接收對(duì)特定軟件模塊執(zhí)行分配操作的請(qǐng)求,并且根據(jù)圖4A的過(guò)程400A,分配多于請(qǐng)求量的存儲(chǔ)器且將標(biāo)記值寫入該額外存儲(chǔ)器。在框706,緩解模塊112接收對(duì)框704中分配的存儲(chǔ)器執(zhí)行釋放操作的請(qǐng)求。如上所述,該釋放操作可被延遲。但是,當(dāng)在框708處實(shí)現(xiàn)該操作時(shí),確定框704中分配的額外存儲(chǔ)器是否仍存儲(chǔ)寫入它的標(biāo)記值。如果該額外存儲(chǔ)器仍存儲(chǔ)該標(biāo)記值,則在框710,緩解啟用模塊114可存儲(chǔ)在該實(shí)例中緩解動(dòng)作對(duì)存儲(chǔ)器錯(cuò)誤沒(méi)有影響的指示,如存儲(chǔ)在其事件日志216中。然而,如果在框708確定額外存儲(chǔ)器未存儲(chǔ)標(biāo)記值,則在框712,緩解啟用模塊 114可在事件日志216中存儲(chǔ)成功地緩解了錯(cuò)誤的指示。在這一情況下,成功地檢測(cè)到軟件模塊寫入了多于空間請(qǐng)求量的數(shù)據(jù),且因此緩解模塊112成功地緩解了緩存溢出錯(cuò)誤。在框710或712中存儲(chǔ)了任一指示之后,在框714釋放存儲(chǔ)器,這可以用任何方式來(lái)完成,包括根據(jù)結(jié)合圖5描述的延遲的釋放過(guò)程500。在框714中釋放了存儲(chǔ)器之后,該過(guò)程結(jié)束。圖7B示出了用于跟蹤緩解模塊在緩解錯(cuò)誤方面的成功的另一示例性技術(shù)700B, 這一次是根據(jù)諸如圖5的過(guò)程500等延遲的釋放緩解動(dòng)作來(lái)進(jìn)行的。如同過(guò)程700A —樣, 過(guò)程700B在框720開(kāi)始,在那里緩解模塊出于任何原因?qū)μ囟ㄜ浖K啟用緩解模式。在框722,緩解模塊112接收對(duì)先前已被分配給特定軟件模塊的存儲(chǔ)器執(zhí)行釋放操作的請(qǐng)求。 在框724,對(duì)于期望被釋放的存儲(chǔ)器的內(nèi)容以任何合適的方式計(jì)算校驗(yàn)和或散列值,且在框 726,延遲釋放操作的執(zhí)行直到一等待時(shí)間段之后。在框728,在該等待時(shí)間段之后,再一次為存儲(chǔ)器的內(nèi)容計(jì)算校驗(yàn)和或散列值。在框730,確定來(lái)自框724的原始散列值是否匹配框728的后一散列值。如果是,則在框732,緩解啟用模塊114可在其事件日志216中存儲(chǔ)緩解動(dòng)作在該實(shí)例中對(duì)緩解錯(cuò)誤沒(méi)有影響。然而,如果在框730確定散列值不相同,則在框 734,可在緩解啟用模塊114的事件日志216中存儲(chǔ)緩解模塊112成功緩解錯(cuò)誤的指示,因?yàn)榭梢詸z測(cè)到由于存儲(chǔ)器的內(nèi)容隨時(shí)間改變,延遲釋放直到等待時(shí)間段之后緩解了因編程隱錯(cuò)在軟件模塊完成使用存儲(chǔ)器之前釋放了存儲(chǔ)器而引起的存儲(chǔ)器錯(cuò)誤的影響。在框732 或734中存儲(chǔ)任一指示之后,在框736釋放存儲(chǔ)器,且該過(guò)程結(jié)束。過(guò)程700A和700B所存儲(chǔ)的緩解動(dòng)作的有效和無(wú)效性的指示可用任何合適的方式來(lái)使用。在某些實(shí)現(xiàn)中,這些指示可用于計(jì)算關(guān)于緩解動(dòng)作對(duì)與應(yīng)用程序相關(guān)的軟件模塊的影響的統(tǒng)計(jì)數(shù)據(jù)。這些統(tǒng)計(jì)數(shù)據(jù)可以跨軟件應(yīng)用程序的多個(gè)實(shí)例來(lái)計(jì)算。這些統(tǒng)計(jì)數(shù)據(jù)可以包括允許計(jì)算成功緩解頻率的時(shí)間分量。在某些實(shí)施例中,該時(shí)間分量可以是觀察到多個(gè)成功緩解的時(shí)間的指示。然而,該時(shí)間分量也可被測(cè)量為調(diào)用軟件模塊的調(diào)用次數(shù)。成功緩解頻率可以是保持緩解是否有可能避免隱錯(cuò)對(duì)調(diào)用軟件模塊的影響的預(yù)測(cè)符,并且可以基于這些統(tǒng)計(jì)數(shù)據(jù)來(lái)確定是否對(duì)調(diào)用軟件模塊的將來(lái)實(shí)例實(shí)現(xiàn)緩解動(dòng)作。如上所述,在一個(gè)實(shí)現(xiàn)中,可使用諸如圖2C所示的緩解標(biāo)簽值來(lái)作為用于確定是否應(yīng)對(duì)特定軟件模塊啟用緩解模式的統(tǒng)計(jì)數(shù)據(jù)。該緩解標(biāo)簽值可以是任何合適的值,并且可以用任何合適的方式來(lái)初始化和調(diào)整。圖8示出了可用于使用每一調(diào)用軟件模塊的緩解標(biāo)簽值來(lái)管理緩解模式的技術(shù)的一個(gè)示例。在所示實(shí)施例中,標(biāo)簽值被存儲(chǔ)在非易失性存儲(chǔ)器中,并且可以跨應(yīng)用程序的實(shí)例、計(jì)算機(jī)的關(guān)閉或其他事件而持久保存。圖8的過(guò)程800在框802開(kāi)始,在那里緩解啟用模塊114檢測(cè)存儲(chǔ)器錯(cuò)誤???02 中的檢測(cè)可以用任何合適的方式來(lái)完成,包括通過(guò)檢測(cè)軟件模塊的不正確執(zhí)行或崩潰。在框804,對(duì)軟件模塊啟用緩解模式,并且在框806,將緩解標(biāo)簽值初始化為一特定值。該特定值可以是任何合適的值,并且可以是跨特定系統(tǒng)上的所有軟件模塊一致的值、基于任何合適的特性(如函數(shù)或源開(kāi)發(fā)者)為特定一組應(yīng)用程序選擇的值、為特定軟件模塊選擇的值、 或任何其他合適的值。在某些實(shí)施例中,如下所述,該初始值可以基于關(guān)于對(duì)所關(guān)注的應(yīng)用程序成功緩解了錯(cuò)誤的歷史數(shù)據(jù)。在一個(gè)示例性實(shí)現(xiàn)中,緩解標(biāo)簽值可以是整數(shù),且在對(duì)軟件模塊啟用緩解模式時(shí),該初始化的值可以是七(7)。在框808,緩解模塊112以緩解模式對(duì)軟件模塊執(zhí)行存儲(chǔ)器操作,并且對(duì)于該軟件模塊的每一實(shí)例化——如模塊的每一次執(zhí)行——緩解啟用模塊114跟蹤緩解模塊112在該實(shí)例化中緩解錯(cuò)誤的成功。跟蹤成功可用任何合適的方式來(lái)完成,包括通過(guò)以上結(jié)合圖7A 和7B描述的技術(shù)中的任一種。在框810,緩解啟用模塊114檢測(cè)軟件模塊的實(shí)例的結(jié)束。實(shí)例的結(jié)束可以是正確的結(jié)束,如用戶驅(qū)動(dòng)或進(jìn)程驅(qū)動(dòng)的退出所導(dǎo)致的結(jié)束,或者可以是不正確的結(jié)束,如崩潰導(dǎo)致的結(jié)束。在框810,可將關(guān)于軟件模塊的實(shí)例的結(jié)束以及該結(jié)束的起因的信息存儲(chǔ)在緩解數(shù)據(jù)存儲(chǔ)212的事件日志216中。在框812,緩解啟用模塊814使用框808和810中收集的信息來(lái)更新軟件模塊的緩解標(biāo)簽值。在某些實(shí)現(xiàn)中,如果檢測(cè)到緩解模塊112成功地緩解了錯(cuò)誤,則可遞增緩解標(biāo)簽值。如果緩解模塊112未成功緩解錯(cuò)誤,則可遞減緩解標(biāo)簽值。在其他實(shí)現(xiàn)中,可使用更多因素。表I示出了可用于確定如何調(diào)整緩解標(biāo)簽值的因素的一個(gè)示例,但其他因素是可能的。
權(quán)利要求
1.一種用于確定在對(duì)調(diào)用軟件模塊執(zhí)行存儲(chǔ)器操作時(shí)是否要應(yīng)用一個(gè)或多個(gè)緩解動(dòng)作的計(jì)算機(jī)實(shí)現(xiàn)的方法,所述方法包括對(duì)所述調(diào)用軟件模塊執(zhí)行(312、314)至少一個(gè)第一存儲(chǔ)器操作,所述執(zhí)行包括應(yīng)用所述一個(gè)或多個(gè)緩解動(dòng)作;評(píng)估(708、730)所述一個(gè)或多個(gè)緩解動(dòng)作是否成功地阻止存儲(chǔ)器錯(cuò)誤影響所述調(diào)用軟件模塊;確定(61 所述一個(gè)或多個(gè)緩解動(dòng)作減少存儲(chǔ)器錯(cuò)誤影響所述調(diào)用軟件模塊的可能性;以及隨后對(duì)所述調(diào)用軟件模塊執(zhí)行(312、314、316)至少一個(gè)第二存儲(chǔ)器操作,結(jié)合所述至少一個(gè)第二存儲(chǔ)器操作基于所述可能性選擇性地應(yīng)用所述一個(gè)或多個(gè)緩解動(dòng)作,所述執(zhí)行包括如果所確定的可能性高于一閾值,則根據(jù)所述一個(gè)或多個(gè)緩解動(dòng)作來(lái)對(duì)所述調(diào)用軟件模塊執(zhí)行(312、314)所述至少一個(gè)第二存儲(chǔ)器操作,以及如果所確定的可能性低于一閾值,則在沒(méi)有所述一個(gè)或多個(gè)緩解動(dòng)作的情況下對(duì)所述調(diào)用軟件模塊執(zhí)行(316)所述至少一個(gè)第二存儲(chǔ)器操作。
2.如權(quán)利要求1所述的方法,其特征在于,所述一個(gè)或多個(gè)緩解動(dòng)作包括,對(duì)分配操作,分配(704)多于所述分配操作中的請(qǐng)求量的額外存儲(chǔ)器,并將一標(biāo)記值寫入所述額外存儲(chǔ)器;以及其中評(píng)估所述一個(gè)或多個(gè)緩解動(dòng)作是否成功地阻止存儲(chǔ)器錯(cuò)誤影響所述調(diào)用軟件模塊包括審閱(708)所述額外存儲(chǔ)器來(lái)確定所述額外存儲(chǔ)器是否保持所述標(biāo)記值。
3.如權(quán)利要求1所述的方法,其特征在于,所述一個(gè)或多個(gè)緩解動(dòng)作包括,對(duì)存儲(chǔ)器釋放操作,在等待時(shí)間段之后執(zhí)行(736)所述釋放操作;以及其中評(píng)估所述一個(gè)或多個(gè)緩解動(dòng)作是否成功地阻止存儲(chǔ)器錯(cuò)誤影響所述調(diào)用軟件模塊包括在所述等待時(shí)間段之后,確定(730)所述存儲(chǔ)器的內(nèi)容是否與在請(qǐng)求所述釋放操作時(shí)的內(nèi)容相同。
4.如權(quán)利要求1所述的方法,其特征在于,評(píng)估所述一個(gè)或多個(gè)緩解是否成功地阻止存儲(chǔ)器錯(cuò)誤影響所述調(diào)用軟件模塊包括檢測(cè)(810)所述調(diào)用軟件模塊的退出以及確定所述退出是否正確,并且在檢測(cè)到所述調(diào)用軟件模塊正確退出的情況下確定所述一個(gè)或多個(gè)緩解動(dòng)作是成功的。
5.如權(quán)利要求4所述的方法,其特征在于,還包括如果所述退出是正確的,則更新第一統(tǒng)計(jì)數(shù)據(jù)來(lái)指示所述緩解是成功的,且如果所述退出不正確,則更新第二統(tǒng)計(jì)數(shù)據(jù)來(lái)指示所述緩解不成功。
6.如權(quán)利要求5所述的方法,其特征在于,所述第一統(tǒng)計(jì)數(shù)據(jù)和第二統(tǒng)計(jì)數(shù)據(jù)在所述調(diào)用軟件模塊的一系列實(shí)例上更新,以及其中確定所述可能性包括評(píng)估所述第一和第二統(tǒng)計(jì)數(shù)據(jù)。
7.如權(quán)利要求1所述的方法,其特征在于,確定所述可能性包括基于所述評(píng)估動(dòng)作來(lái)更新(81 關(guān)于所述調(diào)用軟件模塊的統(tǒng)計(jì)數(shù)據(jù),該統(tǒng)計(jì)數(shù)據(jù)指示所述一個(gè)或多個(gè)緩解動(dòng)作在所述調(diào)用軟件模塊的多個(gè)實(shí)例上的成功,以及其中所述隨后執(zhí)行的動(dòng)作是根據(jù)所述統(tǒng)計(jì)數(shù)據(jù)來(lái)執(zhí)行的。
8.如權(quán)利要求7所述的方法,其特征在于,所述統(tǒng)計(jì)數(shù)據(jù)是緩解標(biāo)簽值,并且其中更新所述統(tǒng)計(jì)數(shù)據(jù)包括如果所述一個(gè)或多個(gè)緩解動(dòng)作是成功的則遞增所述緩解標(biāo)簽值,且如果所述一個(gè)或多個(gè)緩解動(dòng)作不成功則遞減所述緩解標(biāo)簽值。
9.一種管理計(jì)算機(jī)系統(tǒng)中的存儲(chǔ)器的方法,所述方法適用于在對(duì)調(diào)用軟件模塊執(zhí)行存儲(chǔ)器操作時(shí)應(yīng)用一個(gè)或多個(gè)緩解動(dòng)作,所述方法包括檢測(cè)(60 所述調(diào)用軟件模塊經(jīng)歷的存儲(chǔ)器錯(cuò)誤,所述存儲(chǔ)器錯(cuò)誤與存儲(chǔ)器操作相關(guān)聯(lián);在與所述存儲(chǔ)器管理模塊相關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)中存儲(chǔ)(608)在對(duì)所述調(diào)用軟件模塊執(zhí)行所述存儲(chǔ)器操作時(shí)應(yīng)當(dāng)應(yīng)用所述一個(gè)或多個(gè)緩解動(dòng)作的指示;隨后根據(jù)所述一個(gè)或多個(gè)緩解動(dòng)作對(duì)所述調(diào)用軟件模塊執(zhí)行(610)至少一個(gè)第一存儲(chǔ)器操作;評(píng)估(708、730)所述一個(gè)或多個(gè)緩解動(dòng)作是否成功地減少了與所述存儲(chǔ)器操作相關(guān)聯(lián)的存儲(chǔ)器錯(cuò)誤的數(shù)量;基于所述評(píng)估動(dòng)作的結(jié)果更新(812)關(guān)于所述調(diào)用軟件模塊的至少一個(gè)統(tǒng)計(jì)數(shù)據(jù);以及隨后對(duì)所述調(diào)用軟件模塊執(zhí)行(300)至少一個(gè)第二存儲(chǔ)器操作,所述執(zhí)行包括 如果所述統(tǒng)計(jì)數(shù)據(jù)高于一閾值,則根據(jù)所述一個(gè)或多個(gè)緩解動(dòng)作來(lái)對(duì)所述調(diào)用軟件模塊執(zhí)行(312、314)所述至少一個(gè)第二存儲(chǔ)器操作;以及如果所述統(tǒng)計(jì)數(shù)據(jù)低于所述閾值,則在沒(méi)有所述一個(gè)或多個(gè)緩解動(dòng)作的情況下對(duì)所述調(diào)用軟件模塊執(zhí)行(316)所述至少一個(gè)第二存儲(chǔ)器操作。
10.如權(quán)利要求9所述的方法,其特征在于,還包括對(duì)向其應(yīng)用了所述一個(gè)或多個(gè)緩解的第二調(diào)用軟件模塊,評(píng)估(612、808)所述一個(gè)或多個(gè)緩解是否成功地減少了負(fù)面地影響所述第二調(diào)用軟件模塊的存儲(chǔ)器錯(cuò)誤的數(shù)量;以及向?qū)τ谒龅诙{(diào)用軟件模塊的將來(lái)的存儲(chǔ)器操作應(yīng)用(312、314)所述一個(gè)或多個(gè)緩解動(dòng)作,而不管所述一個(gè)或多個(gè)緩解動(dòng)作是否將被應(yīng)用于所述調(diào)用軟件模塊。
11.如權(quán)利要求9所述的方法,其特征在于,所述至少一個(gè)統(tǒng)計(jì)數(shù)據(jù)在所述調(diào)用軟件模塊的多個(gè)實(shí)例上更新,以及其中所述至少一個(gè)第一存儲(chǔ)器操作是所述調(diào)用軟件模塊的第一實(shí)例請(qǐng)求的,且所述至少一個(gè)第二存儲(chǔ)器操作是所述調(diào)用軟件模塊的第二實(shí)例請(qǐng)求的。
12.如權(quán)利要求9所述的方法,其特征在于,所述至少一個(gè)統(tǒng)計(jì)數(shù)據(jù)包括指示所述一個(gè)或多個(gè)緩解動(dòng)作在所述調(diào)用軟件模塊的多個(gè)實(shí)例上的成功的緩解標(biāo)簽值。
13.如權(quán)利要求12所述的方法,其特征在于,更新所述緩解標(biāo)簽值包括如果所述一個(gè)或多個(gè)緩解動(dòng)作是成功的則遞增所述緩解標(biāo)簽值,且如果所述一個(gè)或多個(gè)緩解動(dòng)作不成功則遞減所述緩解標(biāo)簽值。
14.至少一個(gè)其上編碼有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(104),所述計(jì)算機(jī)可執(zhí)行指令在被執(zhí)行時(shí)使得計(jì)算機(jī)(10 執(zhí)行一種用于確定在對(duì)調(diào)用軟件模塊執(zhí)行存儲(chǔ)器操作時(shí)是否要應(yīng)用一個(gè)或多個(gè)緩解動(dòng)作的方法,所述方法包括對(duì)所述調(diào)用軟件模塊執(zhí)行(312、314)至少一個(gè)第一存儲(chǔ)器操作,所述執(zhí)行包括應(yīng)用所述一個(gè)或多個(gè)緩解動(dòng)作;評(píng)估(612、708、730)所述一個(gè)或多個(gè)緩解動(dòng)作是否成功地減少了影響所述調(diào)用軟件模塊的存儲(chǔ)器錯(cuò)誤的數(shù)量;以及隨后根據(jù)所述一個(gè)或多個(gè)緩解動(dòng)作對(duì)所述調(diào)用軟件模塊執(zhí)行(300)至少一個(gè)第二存儲(chǔ)器操作,所述執(zhí)行包括如果所述一個(gè)或多個(gè)緩解動(dòng)作是成功的,則根據(jù)所述一個(gè)或多個(gè)緩解動(dòng)作來(lái)對(duì)所述調(diào)用軟件模塊執(zhí)行(312、314)至少一個(gè)第二存儲(chǔ)器操作,以及如果所述一個(gè)或多個(gè)緩解動(dòng)作不成功,則在沒(méi)有所述一個(gè)或多個(gè)緩解動(dòng)作的情況下對(duì)所述調(diào)用軟件模塊執(zhí)行(316)所述至少一個(gè)第二存儲(chǔ)器操作。
15.如權(quán)利要求14所述的至少一個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述一個(gè)或多個(gè)緩解動(dòng)作包括,對(duì)分配操作,分配(704)多于所述分配操作中的請(qǐng)求量的額外存儲(chǔ)器,并將一標(biāo)記值寫入所述額外存儲(chǔ)器;以及其中,評(píng)估所述一個(gè)或多個(gè)緩解動(dòng)作是否成功包括審閱(708)所述額外存儲(chǔ)器來(lái)確定所述額外存儲(chǔ)器是否保持所述標(biāo)記值。
16.如權(quán)利要求14所述的至少一個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述一個(gè)或多個(gè)緩解動(dòng)作包括,對(duì)存儲(chǔ)器釋放操作,在等待時(shí)間段之后執(zhí)行(736)所述釋放操作;以及其中評(píng)估所述一個(gè)或多個(gè)緩解動(dòng)作是否成功包括在所述等待時(shí)間段之后,確定(730) 所述存儲(chǔ)器的內(nèi)容是否與在請(qǐng)求所述釋放操作時(shí)的內(nèi)容相同。
17.如權(quán)利要求14所述的至少一個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,評(píng)估所述一個(gè)或多個(gè)緩解是否成功包括檢測(cè)(810)所述調(diào)用軟件模塊的退出,并確定所述退出是否正確,以及如果檢測(cè)到所述調(diào)用軟件模塊正確地退出,則確定所述一個(gè)或多個(gè)緩解動(dòng)作是成功的。
18.如權(quán)利要求17所述的至少一個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述方法還包括如果所述退出是正確的,則更新第一統(tǒng)計(jì)數(shù)據(jù)來(lái)指示所述緩解是成功的,且如果所述退出不正確,則更新第二統(tǒng)計(jì)數(shù)據(jù)來(lái)指示所述緩解不成功。
19.如權(quán)利要求14所述的至少一個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括基于所述評(píng)估動(dòng)作來(lái)更新(81 關(guān)于所述調(diào)用軟件模塊的統(tǒng)計(jì)數(shù)據(jù),該統(tǒng)計(jì)數(shù)據(jù)指示所述一個(gè)或多個(gè)緩解動(dòng)作在所述調(diào)用軟件模塊的多個(gè)實(shí)例上的成功,以及其中所述隨后執(zhí)行的動(dòng)作是根據(jù)所述統(tǒng)計(jì)數(shù)據(jù)來(lái)執(zhí)行的。
20.如權(quán)利要求19所述的至少一個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述統(tǒng)計(jì)數(shù)據(jù)是緩解標(biāo)簽值,并且其中更新所述統(tǒng)計(jì)數(shù)據(jù)包括如果所述一個(gè)或多個(gè)緩解動(dòng)作是成功的則遞增所述緩解標(biāo)簽值,且如果所述一個(gè)或多個(gè)緩解動(dòng)作不成功則遞減所述緩解標(biāo)簽值。
全文摘要
提高應(yīng)用程序可靠性的用于計(jì)算機(jī)的緩解啟用模塊。當(dāng)執(zhí)行存儲(chǔ)器管理操作時(shí),該緩解啟用模塊和相關(guān)聯(lián)的存儲(chǔ)器管理器選擇性地使用旨在阻止應(yīng)用程序隱錯(cuò)引起應(yīng)用程序錯(cuò)誤的緩解。存儲(chǔ)器管理器可以基于這些緩解成功地阻止隱錯(cuò)引起應(yīng)用程序錯(cuò)誤的可能性來(lái)對(duì)一個(gè)或多個(gè)應(yīng)用程序中的每一個(gè)應(yīng)用緩解。該可能性從關(guān)于緩解在被應(yīng)用時(shí)是否阻止隱錯(cuò)引起會(huì)導(dǎo)致應(yīng)用程序錯(cuò)誤的存儲(chǔ)器操作的歷史信息來(lái)確定。該歷史信息可以在應(yīng)用程序的多次調(diào)用上在單個(gè)計(jì)算機(jī)上收集,或者可從各自調(diào)用該應(yīng)用程序的多個(gè)計(jì)算機(jī)聚集。所確定的可能性然后可用于確定對(duì)應(yīng)用程序所請(qǐng)求的存儲(chǔ)器操作是否應(yīng)用緩解動(dòng)作以及要應(yīng)用多久。
文檔編號(hào)G06F15/00GK102165423SQ200980138388
公開(kāi)日2011年8月24日 申請(qǐng)日期2009年9月14日 優(yōu)先權(quán)日2008年9月26日
發(fā)明者A·J·洛雷利, D·G·格蘭特, P·卡斯圖里, S·C·卡利諾, W·坎貝爾 申請(qǐng)人:微軟公司