![]() 用於新應用程式之記憶體管理模型與介面
专利摘要:
本文說明記憶體管理系統,此記憶體管理系統從應用程式接收說明記憶體如何被使用的資訊,並允許應用程式主機行使更多對使用記憶體之應用程式要求的控制。系統提供應用程式記憶體管理應用程式介面(API),此API允許應用程式指定更多關於記憶體分配,且對往後管理記憶體有幫助的資訊。系統亦提供靜態地及/或動態地分析傳統應用程式的能力,以給予並未經修改為與系統協同工作的應用程式一些參與更有效率之記憶體管理的能力。系統提供應用程式主機改變,以利用由應用程式提供的資訊,並使用資訊更有效率地管理記憶體,並與應用程式的記憶體使用掛勾。因此,系統提供用於管理記憶體的新模型,此新模型增進應用程式主機行為並允許應用程式更有效率地使用運算資源。 公开号:TW201303717A 申请号:TW101115795 申请日:2012-05-03 公开日:2013-01-16 发明作者:Jeremiah C Spradlin;Galen Hunt;Akshay Johar;Steven Maillet 申请人:Microsoft Corp; IPC主号:G06F12-00
专利说明:
用於新應用程式之記憶體管理模型與介面 本發明係關於用於新應用程式之記憶體管理模型與介面。 電腦系統中的記憶體管理,代表作業系統與多個應用程式同意使用記憶體的方式。雖然每一電腦系統具有固定的實體隨機存取記憶體(RAM)或其他記憶體的量,作業系統可對應用程式與作業系統部件呈現代表與實體記憶體不同大小的虛擬記憶體。在一些情況中,虛擬記憶體允許作業系統限制每一應用程式存取記憶體的特定部分,以防止一個應用程式意外地或有意地修改另一應用程式的記憶體,而妨礙另一應用程式的操作。作業系統一般提供一或多個功能以分配並釋放記憶體,以回應應用程式與作業系統部件要求。作業系統可對應用程式提供記憶體集用場,應用程式可從記憶體集用場分配記憶體塊(memory chunks)。若應用程式使用(或應用程式群組一起使用)多於所安裝實體記憶體量的虛擬記憶體,則作業系統可使用較慢的以磁碟為基礎的儲存,在稱為分頁(paging)或磁碟調換(disk swapping)的程序中,透過調換檔(swap file)來延伸適當的記憶體大小(亦即,對磁碟儲存與擷取記憶體分頁)。 除了所提供的分配與釋放功能之外,作業系統很少洞察應用程式如何使用記憶體。許多計算裝置包含圍繞著記憶體的特定限制。例如,行動計算裝置可包含比典型桌上型電腦系統可用之記憶體要小得多的記憶體量(或系統可想要將一些記憶體斷電以減少能源消耗),而產生關於可同時執行多少應用程式、每一應用程式可要求/消耗多少記憶體等等的裝置限制。在特定計算系統中容納應用程式碼的其他計算環境,可亦對環境的記憶體使用實施限制或上限。諸如VMware與MICROSOFT TM Virtual PC、超管理器、作業系統與其他的主機,可被指派受限的資源。在所有這些情況中,有效的記憶體管理變得更為值得注意。 新的計算平台已引入新技術或經重新制定目的之舊技術,以處理應用程式之間共享受限記憶體的問題。例如,行動電話作業系統可產生每一應用程式的記憶體快照,使得在應用程式不在前景(例如,被活動地使用)時,作業系統將此應用程式關閉並於較慢的儲存(例如,快閃記憶體或其他儲存)上儲存應用程式記憶體的映像。在應用程式被選定時,作業系統將所儲存的映像重新載入記憶體中,並啟動應用程式。應用程式可甚至不會覺察到應用程式自身被關閉。雖然此種技術是有幫助的,但作業系統仍經受應用程式不透明的使用記憶體要求。在當前考慮動態記憶體使用來作成的大多數決策,係基於在執行時間期間內找到的資訊來作成。此種資訊的範例包含對經分配記憶體區段之參照的大小與數量。此資訊隨後可用以决定哪些分配將被分頁至磁碟、快取至高效能記憶體或由一些類型的自動記憶體管理系統釋放。不幸地,任何平台皆受限於潛在許多年的傳統應用程式,所以在如記憶體管理般廣泛的領域中採用新模型是困難的。 本文說明記憶體管理系統,此記憶體管理系統從應用程式接收說明記憶體正如何被使用的資訊,並允許應用程式主機行使(exert)更多對使用記憶體之應用程式要求的控制。在今日,應用程式主機對應用程式使用記憶體的瞭解很少,除了應用程式已作成多少次記憶體要求以及每一要求所要求的記憶體大小以外。然而,應用程式主機不瞭解每一記憶體分配的目的、哪些記憶體分配將很快地被使用、哪些記憶體分配可被輕易地重製(若應用程式主機需要更多記憶體)、哪些記憶體分配在一段時間內將不被使用且因此可被分頁至磁碟而不衝擊應用程式效能等等。不幸地,雖然應用程式主機被派給作成這些決策類型的任務,擁有最能有效地作成這些決策的資訊的仍是應用程式。 記憶體管理系統以數種方式克服這些問題。第一,系統提供應用程式記憶體管理應用程式介面(API),此應用程式記憶體管理API允許應用程式指定較多往後能幫助管理記憶體之關於記憶體分配的資訊。此API亦可對應用程式主機提供在記憶體被需要時告知應用程式,並依所需預動式地(proactively)釋放並重製記憶體分配,而無需應用程式互動的能力。第二,系統提供靜態地及/或動態地分析傳統應用程式,以給予未被修改為與系統工作的應用程式一些參與更有效率之記憶體管理的能力。第三,系統提供應用程式主機變更,以利用由應用程式提供的資訊,並使用資訊更有效率地管理記憶體,並與應用程式對記憶體的使用掛勾。因此,記憶體管理系統提供用於管理記憶體的新模型,此新模型增進了應用程式主機行為,並潛在地允許應用程式更有效率地使用計算資源。 本【發明內容】被提供以由簡化形式介紹一些概念選擇,該等概念在以下的【實施方式】中將被進一步說明。本【發明內容】並不意為辨識所主張發明標的之關鍵特徵或必要特徵,亦不意為用以限制所主張發明標的之範圍。 本文說明記憶體管理系統,此記憶體管理系統從應用程式接收說明記憶體正如何被使用的資訊,並允許應用程式主機行使(exert)更多對使用記憶體之應用程式要求的控制。在今日,應用程式主機很少知道應用程式對記憶體的使用,除了應用程式已作成多少次記憶體要求以及每一要求所要求的記憶體大小以外。然而,應用程式主機不知道每一記憶體分配的目的、哪些記憶體分配將很快地被使用、哪些記憶體分配可被輕易地重製(若應用程式主機需要更多記憶體)、哪些記憶體分配在一段時間內將不被使用且因此可被分頁至磁碟而不衝擊應用程式效能等等。不幸地,雖然應用程式主機被派給作成這些決策類型的任務,擁有最能有效地作成這些決策的資訊的仍是應用程式。在今日,應用程式主機提供基本層級的功能性並猜測要採取哪些動作,來解決此衝突。在許多情況中,應用程式主機可恰於應用程式需要記憶體之前將記憶體分頁至磁碟,或者應用程式主機可花費了廣大的努力來管理對應用程式不太重要的記憶體。 記憶體管理系統以進一步討論於本文中的數種方式來克服這些問題。第一,系統提供應用程式記憶體管理應用程式介面(API),應用程式記憶體管理應用程式介面允許應用程式指定較多往後能幫助管理記憶體之關於記憶體分配的資訊。API亦可對應用程式主機提供在記憶體被需要時告知應用程式,並依所需預動式地釋放並重製記憶體分配,而無需應用程式互動的能力。第二,系統提供靜態地及/或動態地分析傳統應用程式,以給予未被修改為與系統工作的應用程式一些參與更有效率之記憶體管理的能力。第三,系統提供核心層級作業系統(或主機)變更,以利用由應用程式提供的資訊,並使用資訊更有效率地管理記憶體,並與應用程式對記憶體的使用掛勾。因此,記憶體管理系統提供用於管理記憶體的新模型,此新模型增進了應用程式主機行為,並潛在地允許應用程式更有效率地使用計算資源。如本文所說明的應用程式主機,可關連於執行應用程式或另一類型主機的作業系統(例如,自身執行於作業系統上或虛擬化子系統上的應用程式),諸如由SILVERLIGHT TM、.NET、專屬Win32主機或其他由VMware與Virtual PC提供的主機或虛擬機器所提供的運行時間(runtime)。上文介紹的三個領域之每一者,將於下文區段中進一步詳細說明。 經修改應用程式 在許多情況中,軟體開發者可能修改軟體應用程式以與記憶體管理系統互動。對於正活動地開發的應用程式,為了記憶體管理系統所提供的利益,軟體開發者可選擇採用記憶體管理系統,或可由特定平台(應用程式操作於特定平台上)委任以採用記憶體管理系統。在許多情況中,應用程式可讓應用程式不太可能使用的記憶體保持為經分配。例如,在使用者從應用程式之使用者介面的一個部分轉移至另一部分時,應用程式可保持來自先前介面的資訊,以防使用者再次參訪此介面。在今日,此記憶體在主機看來,如其他正活動地使用之記憶體般被需要。記憶體管理系統提供應用程式將像是這些情況告知主機的方式,而使此種記憶體可被去優先化(deprioritize)。作為回應,主機可將此種記憶體選定為良好的分頁候選者,或作成因為來自應用程式之附加資訊而為更加有效率的其他記憶體管理決策。 在一些具體實施例中,記憶體管理系統提供應用程式模型或框架,此應用程式模型或框架讓記憶體管理者能夠作成關於在運行時間期間內最佳化記憶體使用的智慧型決策。此係由利用接收用以分配並填滿記憶體分配的元資料與動作兩者的應用程式模型/框架來達成,此記憶體分配為應用程式所要求的任何給定記憶體物件所指定。元資料提供應用程式想要與主機溝通的資訊,此資訊說明記憶體分配的本質或目的,諸如記憶體的優先次序、正分配之記憶體的量、從頭開始重製記憶體內容的容易度(例如,內容可從檔案裝載或可由演算法計算出)、存取頻率、應用程式多快會使用到記憶體等等。用以分配並填滿記憶體的動作,可提供足夠的資訊給主機,而能夠在應用程式要求時釋放並隨後重製所釋放的記憶體。藉由允許開發者指定用以填滿記憶體的元資料與動作,記憶體管理系統可與由應用程式指定的所需使用一致地最佳化記憶體使用。 由記憶體管理系統提供給應用程式的API,提供了讓應用程式開發者透過應用程式框架或程式模型,指定說明記憶體分配之使用的元資料的手段。此外,API允許應用程式框架委任開發者利用標準手段以透過習知功能來填滿或修改記憶體。此允許記憶體管理系統為了效能盡量找機會填滿記憶體、在記憶體可用性低的期間內釋放記憶體(亦即,在釋放記憶體的機會成本大於在爾後重分配並重填充記憶體的成本時)或為了其他目的。 最佳化記憶體使用,可包含許多習知技術,但一般而言將表示最佳化效能或最佳化大小。在對於效能的情況中,最佳化可表示允許還未被需要的記憶體分配發生,若完成此記憶體分配的手段為可用。在當前CPU使用為低且應用程式閒置時此可為想要的。在一些情況中,應用程式欲分配記憶體的要求,可被主機儲存為註解,以供未來參考之用,而不在此時分配任何記憶體。其後,在應用程式透過API要求使用記憶體時,或在主機决定適合的時間以完成要求時,記憶體管理系統實際地分配所要求的記憶體。在對於大小的情況中,最佳化可表示減少記憶體佔據區域,或基於當前分配之記憶體與未來的記憶體需求來作成決策。 應用程式與主機之間的實際介面,可為將為在本發明領域中具有通常知識者所認知的各種形式。例如,應用程式可提供分配功能給每一分配類型,並可在分配要求中將對於分配的指標或參照傳給主機。在主機準備好要執行分配時,主機引動所提供的分配功能,且應用程式使用正常的記憶體分配功能來產生記憶體。類似地,應用程式可將參照傳給其他功能,而使主機可要求釋放記憶體、移動記憶體、將記憶體內容切換至不同類型的儲存等等。相同的概念亦可用於分配-在應用程式從作業系統要求記憶體時,作業系統可基於數種因素而延遲分配。在作業系統準備好分配時,功能參照被呼叫回(與經分配的記憶體),或者產生事件(或類似的機制)。介面亦可接收諸如記憶體大小(記憶體大小可不同於所要求的大小)、優先次序、快取優選、可分頁性、如何填滿記憶體、對記憶體的相依性或參照、記憶體是否被更新等等。在一些具體實施例中,系統提供記憶體介面類別,分配從記憶體介面類別推導以界定每一記憶體分配類型。類別可包含用以擷取應用程式所指定之分配功能的GetPointer功能,或其他用以擷取功能以執行其他記憶體處理工作的GetX功能。替代性地或額外地,應用程式可依傳統方式作成分配,並隨後呼叫RegisterPointer功能,RegisterPointer功能以主機登錄所分配的記憶體,並指定本文所說明的額外資訊為關連於所分配的記憶體。下列虛擬碼提供應用程式可使用的一種記憶體類別範例。 替代性或額外地,開發者可使用來源註解語言(source annotation language;SAL)或其他標記,將本文所說明的框架引入應用程式碼,以識別已存的記憶體分配並指定相關於每一分配、存取或其他記憶體互動的額外參數與元資料。 在一些具體實施例中,記憶體管理系統可操作於單一應用程式中,且不與核心或其他主機共享。應用程式可獲益自增進的記憶體管理:應用程式自身的內部記憶體管理器,可由使用本文所說明之框架提供的額外資訊來執行。在一些情況中,主機可隨後提供登錄功能,應用程式可呼叫登錄功能以得到跨應用程式的益處,並亦可允許主機使用良好界定的記憶體分配與使用。作為範例,系統可在掃描惡意軟體之前告知應用程式,而使應用程式可卸載任何較不相關的記憶體,以加速掃描。作為另一範例,應用程式可在CPU進入閒置狀態之前預先分配記憶體,使得在使用者做了一些事而CPU回復執行時,應用程式可對事件快速回應(增強對電力狀態改變的回應性)。 未經修改應用程式 在軟體開發者無法修改軟體應用程式以與記憶體管理系統互動的情況中,或者在系統被實施為與未經修改應用程式(亦即,非特定設計為與系統協同工作的應用程式)的情況中,系統仍可能提供記憶體管理益處。為此,系統收集說明應用程式自身如何使用記憶體的資訊(例如,基於靜態分析及/或概況分析(profiling)應用程式-使應用程式執行、截取(intercepting)記憶體分配以及在應用程式運行時間中觀察使用)。在决定效能特性時此資訊是有用的,且此資訊可由應用程式之主機的記憶體管理器智慧地使用。此資訊的使用方式範例,可包含智慧型廢料收集、智慧型分頁至磁碟、智慧型快取至較高效能記憶體快取以及甚至警告使用者關於應用程式可遭遇的潛在記憶體限制。 利用二進位碼靜態分析、二進位碼行為運行時間分析以及檢測二進位碼,可能收集關於任何二進位碼的給定記憶體分配與彼等分配的使用的額外資訊。此資訊隨後可用以驅動更智慧的行為(關於實體記憶體內分配的裝載/卸載以及位置)。記憶體管理系統提供對應用程式記憶體分配自動標記元資料的手段,此元資料說明分配自身的潛在使用或實際使用。此分析可被自動執行(靜態地對二進位碼分析,或動態地在運行時間分析),而不需任何開發者互動或重編輯已存應用程式。一旦執行,分析可由系統快取,而使主機作業系統知道在未來如何對待應用程式。分析亦可被公開以供其他用戶端探索,而不僅於本端快取。此外,亦可能將資訊暴露給使用者,以供可選的編輯,允許管理者或使用者修改應用程式元資料,以及應用程式主機將如何處理應用程式的記憶體分配。 可能使用靜態與動態分析來導出關於應用程式記憶體分配的額外資訊,且此資訊隨後可用以幫助指導應用程式與系統記憶體分配的整體管理。範例為在記憶體被接觸(touch)時;可能决定另一記憶體區段是否被用以幫助填滿此記憶體分配。若此記憶體分配隨後為相依另一分配,則此相依性可被指示,或記憶體分配可簡單地被以位元註記,以指示記憶體分配並不是不具輸入而產生。靜態分析可决定軟體碼在何處接觸記憶體、記憶體如何被使用、記憶體如何被填滿、碼路徑有多常見(例如,是否為單寫多讀(write once/read many;WORM))以及記憶體多常被使用。動態分析可檢測所有分配及/或存取(類似概況分析器),並可擷取系統環境對碼操作的影響、影響操作的使用者設定以及其他無法(或難以)靜態决定的資料。 在一些具體實施例中,在應用程式已被分析後,記憶體管理系統輸出清單(manifest)或其他對應用程式記憶體使用的說明。此允許系統快取分析結果,並在未來的應用程式執行時再使用結果。作業系統可與系統協同設計,以在應用程式二進位碼首次執行時執行此分析(或在像是應用程式虛擬化排序的程序期間),並隨後儲存分析以在每次二進位碼執行時使用。核心或其他主機可讀取清單資料,並透過說明應用程式如何使用記憶體的額外資訊採取適當的動作。應用程式使用可隨著時間改變,所以清單或其他快取可隨著時間動態地更新。在一些情況中,系統對每一分配可分配整個記憶體分頁,而使每一記憶體存取觸發分頁錯失(page fault),分頁錯失允許核心控制記憶體如何被使用,並提供在應用程式對記憶體的參照與實際記憶體分配之間的間接類型(於本文中更進一步說明)。 在一些具體實施例中,系統可提供對應用程式記憶體行為的報告。此為分析的另一用途,並可幫助管理者作成關於應用程式的決策,諸如應用程式將在哪個伺服器(或虛擬機器)上良好的執行。系統亦可提供記憶體使用的市場評價,而讓(例如)行動電話應用程式商店的使用者,可在下載應用程式之前知道應用程式將如何使用行動電話的可用記憶體(例如,高度使用、低度使用等等)。管理者亦可使用此資訊,以根據收集到之對於記憶體消耗的元資料,跨各種系統佈署資訊科技軟體。 記憶體管理系統可使用從記憶體使用分析導出的資訊,在系統閒置或未被充分利用時,預先分配(且潛在地填滿)記憶體。知道應用程式未來的記憶體使用,允許系統更有效率地分配記憶體,並利用系統未被充分利用的時間來分配可在系統負載較重時被使用的記憶體。此允許較重的負載存取更多程序,或其他因為先前完成的工作而為可用的資源。 主機修改 記憶體管理系統包含對核心或應用程式主機的修改,以接收關於記憶體使用的額外資訊,額外資訊係由應用程式提供或透過分析應用程式來决定。不像傳統的軟體記憶體管理,因為由元資料與其他與應用程式溝通而知的資訊(如本文所說明)所提供之增加的對記憶體使用的洞察,核心可做得更多,以有效率地管理記憶體而無需應用程式的知識或動作。核心在之後可告知應用程式採取了哪些動作來管理記憶體,使得在應用程式需要記憶體時記憶體已準備好,而使應用程式不覺察或不關注核心之與記憶體相關的動作。核心隨後可執行較佳的分頁(例如,藉由將較不重要或較不會被使用的記憶體卸載至較慢的磁碟儲存)、可在記憶體壓力發生時釋放記憶體以及可代表使用由核心提供之操作環境的一或多個應用程式來採取其他動作以管理記憶體。例如,核心可較佳地分配記憶體以得到較少的片段。 記憶體是作業系統中的受限資源;因此,重要的是核心適當地追蹤記憶體被分配之處,而使核心可依所需從應用程式回復記憶體。一個解決方案為在記憶體被分配給應用程式時,使應用程式指定優先次序給記憶體。因此,在系統决定記憶體量低時,核心可决定具有最低優先次序的記憶體的位置,並除分配或分頁此記憶體,而不影響其他具有較高優先次序之記憶體的效能。 傳統上,記憶體的優先次序,以及此優先次序對應用程式的分佈,係由核心决定。在系統記憶體量低時,核心可任意地釋放由具有較高優先次序之應用程式使用的記憶體,因此中斷或降低應用程式的效能。相反的,較低優先次序的記憶體應首先被除分配。相關於核心如何决定要從哪個應用程式來釋放記憶體,有許多值得注意的方面。一個解決方案為使應用程式在應用程式自身之間,對記憶體資源决定優先次序。記憶體優先次序方案要求在分配或除分配時,應用程式指定對應用程式分配與除分配之記憶體的優先次序。因此,在存在記憶體壓力時,核心具有由優先次序排序的記憶體地圖,並可首先釋放與放置較低優先次序的記憶體。替代性地,核心可傳送關於需要被釋放之分配列表的通知給應用程式。記憶體管理系統可完全由作業系統容納,或可在作業系統與應用程式之間協作。 可藉由產生記憶體分配API來實施優先次序模型,記憶體分配API在發生記憶體要求時封裝應用程式。此亦可使不登錄的應用程式受益。藉由利用此API,應用程式與優先次序被子系統自動地追蹤,而不使應用程式主動地管理記憶體優先次序。核心物件併入所有的登錄、計算、訊息傳遞與記憶體管理功能性,使每一應用程式僅需呼叫此物件(或在未經修改應用程式的情況中,代表應用程式使此物件被呼叫)。 一種替代性的解決方案為使用位在核心外的主應用程式,主應用程式追蹤當前執行的各種應用程式。在應用程式要求記憶體時,應用程式被登錄至主應用程式。因此,在應用程式變成無回應時,主應用程式可决定要將呆滯的應用程式刪除以取回記憶體,或讓呆滯應用程式保持懸宕,使得在需要記憶體時可將記憶體傳回給應用程式。 核心或主機可使用增強的記憶體資訊以更有效率地作成各種記憶體管理決策。例如,低功率裝置的核心可選擇關閉記憶體庫以節省電池電量。系統可刪除或調換出在要關閉之記憶體庫中具有記憶體的程序。系統亦可將散佈於數個記憶體庫中的記憶體解片段(defragment),以得到一些可被關閉的空記憶體庫。作為另一範例,核心可選擇將一些記憶體分配推播給其他裝置(包含以雲端為基礎的儲存設施)。許多具有小佔據面積與低功率的作業系統不具有分頁的概念,所以在此情況中,記憶體分配可由容納於另一裝置/服務的表示狀態傳送(Representational State Transfer;REST)介面支援。以與捲動通過資料庫快照類似的方式,應用程式不具有整個資料庫於記憶體中,但接收從資料庫服務/伺服器傳遞來的片段。應用程式不知道應用程式自己正觀看快照,而不是全體資料庫。能夠有信心地移動記憶體或除分配記憶體,允許核心/主機更佳地管理記憶體,且仍支撐對於記憶體可用性的應用程式期望。 在一些具體實施例中,除了記憶體外,系統一起使用其他主機層級物件或部件。例如,系統可在顯示器關閉時關閉圖形處理單元(GPU),或在硬體正未被使用(或將在一段時間內不被使用)時關閉相關聯的個別驅動程式。系統亦可用於系統的休眠,以首先將記憶體解片段,並隨後將記憶體分配線性串流串流至磁碟,記憶體分配線性串流在系統甦醒時可被輕易地重新載入。不像傳統儲存大小等同於整體實體記憶體的檔案的休眠,記憶體管理系統可在休眠之前鼓勵應用程式釋放不需要的(或可輕易回復的)記憶體(或可為了應用程式執行),且因此可儲存較少量的休眠資料。除了記憶體外,所管理的其他物件可包含檔案處置、計時器、核心物件等等。系統可接收(或從靜態與動態分析决定出)關於這些物件的使用資訊,就像記憶體使用一樣。 在一些具體實施例中,記憶體管理系統接收相關聯於每一記憶體分配的電力狀態。例如,在電力層級X處,系統可决定一些記憶體分配不再被需要。此可允許電量受限的裝置切換至較低的電力模式,藉由卸載任何在彼電力層級不被需要的記憶體。例如,行動電話可保持足夠的應用程式資料於記憶體中,以回應於電話來電或提醒使用者有新電子郵件,但可卸載其他較低優先次序的功能或應用程式。在一些情況中,應用程式在使用記憶體於一些較低電力狀態中之前,可僅需要確認指標有效性,但在較高電力狀態中可正常存取記憶體。此可被提供為對於任何給定平台之應用程式與主機之間協定的保證。 系統部件與操作環境 第1圖為圖示說明在一個具體實施例中記憶體管理系統的部件的方塊圖。系統100包含元資料接收部件105、填滿規格部件110、分配要求部件115、記憶體參照部件120、應用程式介面部件125、靜態分析部件130、動態分析部件135、主機部件140、要求接收部件145、要求儲存部件150、分配部件155、記憶體動作部件160以及資料儲存部件165。這些部件之每一者在本文中更進一步詳細說明。 元資料接收部件105、填滿規格部件110、分配要求部件115與記憶體參照部件120一起作成記憶體框架,系統100將此記憶體框架暴露給應用程式。想要修改他們的應用程式碼以更有效率地管理記憶體的開發者,可利用這些部件,從他們的應用程式產生允許主機或核心代表應用程式,更有效率地管理記憶體的應用程式。 元資料接收部件105接收相關聯於每一記憶體分配的資訊,資訊向應用程式主機提供說明應用程式如何使用記憶體的資訊。例如,元資料可指示對於應用程式之分配有多可輕易存取之程度,或指示應用程式計畫存取相關聯於分配之記憶體的頻率。元資料亦可指示記憶體內容難以產生的程度,且因此指示在內容被釋放或分頁至磁碟時,應用程式或主機有多難以置換記憶體內容。元資料接收部件105可在呼叫記憶體分配API時接收元資料,或在記憶體已被分配之後,從接續之用以提供元資料的API接收元資料。 填滿規格部件110接收說明如何填滿特定記憶體分配內容的資訊。記憶體的內容可來自各種來源,諸如來自讀取儲存在磁碟上之檔案內容、來自對輸入資料執行一或多個計算、來自使用者輸入、來自經網路存取之資訊(例如,資料庫或網際網路)等等。在一些具體實施例中,應用程式將記憶體填滿功能傳給主機,而使主機可引動功能,而在由主機决定的時間填滿記憶體內容。為了有效率地使用處理程序與其他資源,主機可選擇延遲填滿記憶體,直到資源未被充分利用或閒置時。此外,主機亦可自由地釋出或釋放在先前為了其他用途被填滿的記憶體,並隨後重分配並重填滿記憶體,在應用程式期望使用記憶體之前。所接收的元資料可提供主機用以瞭解應用程式將何時使用記憶體的資訊,或者應用程式可在每一次試圖使用記憶體之前告知主機,而使主機可查核記憶體的當前狀態。 分配要求部件115提出從應用程式至主機的要求,以基於所接收之元資料與填滿規格來分配記憶體。注意到,雖然主機接收要求,係由主機決定要立即對要求提供服務以回應,或等待直到另一適當的時間。在極端的情況中,主機可不分配任何記憶體,直到主機準備好被存取,此允許主機保存受限的資源,盡可能直到記憶體被應用程式需要且需被分配給應用程式以能夠執行應用程式工作的最後時刻。分配要求部件115將所發出的要求儲存於由主機管理的資料儲存中,並包含所接收的元資料與填滿規格,以供往後的記憶體管理動作使用。 記憶體參照部件120在應用程式存取記憶體(為先前提出之分配要求的主體)之前,從應用程式接收指示。因為主機可讓記憶體不可用或延遲實際地分配記憶體直到主機選擇,應用程式需要能在應用程式準備好使用彼記憶體時,確保彼記憶體為可用的方式。記憶體參照部件120提供此方式,並允許應用程式指示應用程式已準備好存取特定記憶體分配。作為回應,主機可將對於實際記憶體位置的指標傳給應用程式(若記憶體已為可用),或可基於所接收之填滿規格與元資料產生並填滿記憶體(若記憶體當前未被分配)。應用程式可傳送指示以釋放此記憶體,而使主機可再次在記憶體管理決策中考慮此記憶體。 應用程式介面部件125提供應用程式與主機之間的通訊介面,以協調記憶體分配的使用。介面可包含由應用程式使用以要求記憶體分配並指定關於分配之資訊的一或多個功能或基底類別,以及由主機使用以使用由應用程式提供的經使用者界定功能與應用程式之記憶體互動的功能或基底類別。增強的應用程式與主機之間通訊,允許主機對於應用程式的記憶體使用具有比一般階層要高得多的可見度,並允許主機代表更有效率地共享有限資源之各種應用程式管理記憶體。 對於並非建置為特定地使用記憶體管理系統100的應用程式,應用程式介面部件125提供在由靜態及/或動態分析所决定之任何經檢測應用程式碼之間的互動,並以類似於上文所討論方式的方式來與主機互動。使用並非建置為使用系統100的應用程式,系統100可具有較少的關於記憶體分配之目的或其他規格的資訊,且可被限制於系統100可透過應用程式之靜態與動態分析來發現的資訊。然而,此種分析仍可發現有用於更有效率地管理由傳統應用程式所分配之記憶體的元資料。在一些情況中,系統100可能夠自動地偵測應用程式如何填滿記憶體,並可能夠執行相同類型的隨選記憶體內容填滿,如上文所說明,而無需應用程式的明確協作。 靜態分析部件130靜態地分析應用程式二進位碼或其他應用程式碼,以决定應用程式如何使用記憶體。部件130可分析二進位碼、中間碼(例如,MICROSOFT TM中間語言(IL)碼)或應用程式的其他經編譯或可執行版本。靜態分析在近幾年來大大地進步,且用以决定應用程式二進位碼要進行什麼以及如何進行的許多技術係熟知於本技術領域。記憶體管理系統100使用這些技術以特定地聚焦於應用程式分配與使用記憶體的區域。部件130可檢測應用程式二進位碼,以接收資訊,或截取應用程式的特定動作,並可以新的或額外的動作替換所截取的動作。例如,若部件130發現對記憶體分配功能的呼叫,則部件130可由靜態分析收集任何可用的元資料,並呼叫可接收元資料以作為參數的分配功能版本。以此方式,主機從應用程式接收元資料資訊,如同應用程式已被應用程式的開發者修改為提供此種資訊一般。類似的,系統可决定應用程式如何填滿或存取特定記憶體分配,而使說明記憶體參照的填滿規格與資訊可被提供給主機。 動態分析部件135動態地分析執行中應用程式,以收集難以由靜態分析决定之相關於應用程式之記憶體使用的額外資訊。應用程式時常包含阻撓靜態分析的程式步驟(有意地或單純因為步驟不允許進行)。動態分析具有在靜態分析期間僅可經由猜測或估計而為可用的可用資訊,諸如從外部部件接收到的回應內容以及由應用程式使用的實際記憶體內容。因此,動態分析可發現在靜態分析期間所不能發現的記憶體使用與其他應用程式活動。部件135亦可使用動態分析以確認靜態分析的結果。動態分析部件135提供經决定資訊給主機,以進一步允許傳統應用程式利用至少一些由系統100提供的功能性。 主機部件140包含應用程式執行於其中的環境,並提供對由系統100提供的記憶體管理的存取。根據平台,主機可包含各種軟體個體。對於傳統桌面計算系統,主機為可包含核心與其他核心模式軟體碼(諸如驅動程式)的作業系統。對於經管理軟體環境,主機可包含運行時間,諸如MICROSOFT TM.NET TM運行時間或MICROSOFT TM SILVERLIGHT TM運行時間。網頁應用程式亦可包含應用程式主機,並可於在其他伺服器或桌面計算環境內執行的沙箱(sandboxed)環境中執行。伺服器計算系統可包含虛擬化硬體或軟體,並可包含以較一或多個作業系統核心為高之階層操作的超管理器。記憶體管理系統100可實施各種階層的軟體碼,且因此不限於任何特定類型的主機。主機部件140代表負責與應用程式互動,並管理系統100執行於其上之特定平台之資源的部件。 要求接收部件145、要求儲存部件150、分配部件155以及記憶體動作部件160,一起作成經修改為實施本文所說明之系統100的記憶體管理器的部件。 要求接收部件145接收來自應用程式之分配記憶體的要求。每一要求包含元資料,元資料向主機提供說明應用程式如何使用所分配記憶體的資訊。要求接收部件145可從執行於特定主機上之多個或所有的應用程式接收要求,而使主機具有說明如何使用記憶體的廣泛範圍的資訊。主機隨後可優先化在決定採取特定動作(例如,將記憶體分頁或釋放以減少記憶體壓力)時要衝擊哪些分配。 要求儲存部件150儲存所接收的要求與相關聯的元資料資訊,以在隨後作成記憶體管理決策期間內使用。主機在要求被接收到時可或不可滿足分配要求。然而,不論主機是立即或是較遲滿足要求,主機儲存由應用程式提供與分配相關聯的資訊,而使主機在往後適合進行記憶體動作時具有可用的資訊。在一些具體實施例中,主機以個別的與應用程式的通訊接收元資料與其他資訊,在應用程式已分配記憶體之後。在此種情況中,主機可多次儲存分配資訊,或在有用的資訊為可用時儲存分配資訊。 分配部件155執行實際動作以分配記憶體而滿足一或多個所接收的應用程式分配要求。分配部件155可從應用程式堆(application heap)分配記憶體,或直接從安裝在電腦系統中可由主機存取及管理的實體記憶體來分配記憶體。在分配之後,記憶體係專屬於特定應用程式且無法被其他應用程式使用(除非其他應用程式要求透過典型的共享記憶體技術來使用)。分配部件155可與分頁表和虛擬記憶體工作,以提供用於分配之對於實體記憶體的視窗,且所提供的記憶體可透過調換檔由磁碟或其他儲存支援。 記憶體動作部件160執行管理裝置上記憶體的動作,並存取先前儲存之所接收的要求資訊,以决定一或多個適當之將被所執動作影響的記憶體分配。動作可包含將記憶體內容調換至調換檔、釋放先前所分配的記憶體、要求應用程式減少應用程式的記憶體佔據面積或任何其他影響由一或多個應用程式使用之記憶體的動作。通常,主機執行記憶體管理動作的目的,是處理當前或即將發生的情況,諸如低記憶體(例如,記憶體壓力)、收集足夠的記憶體以滿足應用程式要求等等。 資料儲存部件165儲存由主機使用,以代表一或多個應用程式管理記憶體的資訊。資料儲存部件165可包含設為由系統100使用之記憶體、個別的快閃儲存或磁碟儲存或其他用以儲存資料的設施。資料儲存部件165亦可包含儲存在每一應用程式的記憶體空間中的資料,此資料追蹤關於彼應用程式的分配,以及其他由主機使用以代表應用程式管理記憶體的資訊。 實施記憶體管理系統的運算裝置,可包含中央處理單元、記憶體、輸入裝置(例如,鍵盤與指標裝置)、輸出裝置(例如,顯示裝置)以及儲存裝置(例如,磁碟機或其他非揮發性儲存媒體)。記憶體與儲存裝置為電腦可讀取儲存媒體,並可由實施或致能系統的電腦可執行指令(例如,軟體)編碼。此外,資料結構與訊息結構可經由資料傳輸媒體(諸如通訊鏈結上的訊號)儲存或傳送。可使用各種通訊鏈結,諸如網際網路、本地區域網路、廣域網路、點對點撥號連結、行動電話網路等等。 系統的具體實施例可實施於各種操作環境中,包含個人電腦、伺服器電腦、手持式或膝上型裝置、多處理器系統、以微處理器為基礎的系統、可程式消費者電子設備、數位攝影機、網路個人電腦、微電腦、大型電腦、包含前述系統或裝置之任意者的分散式運算環境、機上盒、晶片上系統(SOC)等等。電腦系統可為行動電話、個人數位助理、智慧型手機、個人電腦、可程式消費者電子設備、數位攝影機等等。 可由一般的電腦可執行指令背景(諸如程式模組)來描述系統,電腦可執行指令由一或多個電腦或其他裝置來執行。一般而言,程式模組包含執行特定工作或實施特定抽象資料類型的常式、程式、物件、部件、資料結構等等。通常,程式模組的功能性可依所需在各種具體實施例中結合或分散。 第2圖為圖示說明在一個具體實施例中,記憶體管理系統之操作環境的方塊圖。環境包含核心/主機210、一或多個應用程式220、記憶體處理框架230、經儲存分配元資料240以及一或多個工具250。核心/主機210管理由一或多個應用程式220共享的記憶體。記憶體處理框架230提供一或多個API,應用程式220可呼叫此一或多個API以分配記憶體,並提供記憶體分配元資料。記憶體處理框架230儲存所接收的元資料240。工具250對並非設計為固有地提供分配資訊的應用程式操作,以透過靜態與動態分析來萃取此種資訊。隨後,萃取出的任何資訊被儲存為分配元資料240。 系統操作 第3圖為圖示說明在一個具體實施例中,在軟體應用程式中記憶體管理系統要求分配並使用記憶體的處理程序的流程圖。 開始於方塊310,應用程式設定分配元資料,分配元資料說明應用程式將如何使用記憶體分配。應用程式可根據本文所說明之記憶體管理系統,建置參數結構以傳給分配功能、呼叫API以提供分配元資料或設定所導出類別的參數以分配記憶體。分配元資料可包含記憶體對應用程式的優先次序階層、應用程式計畫使用所分配記憶體的頻率、應用程式替換分配之內容的難度以及其他相關於應用程式對記憶體之使用與主機可如何操縱記憶體而有效率地使用由多個應用程式共享之實體記憶體資源的資訊。 繼續進行至方塊320,應用程式設定記憶體填滿功能,記憶體填滿功能填充記憶體分配的內容。記憶體填滿功能可從檔案存取資料執行一或多個計算以產生儲存於記憶體分配中的結果或執行其他填充記憶體分配的動作。藉由提供記憶體填滿功能給主機,而非在分配之後立即引動填滿功能,應用程式向主機提供依所需釋放並重填充記憶體所需的資訊或延緩記憶體分配與初始填充直到對主機更適合的時間所需的資訊。 繼續進行至方塊330,應用程式引動由主機提供的分配介面,分配介面管理由多個應用程式共享的實體記憶體,其中應用程式經由分配介面提供設定分配元資料與記憶體填滿功能給主機。分配介面可包含作業系統API、運行時間功能或其他在應用程式與負責管理記憶體的主機之間傳送資訊的方式。分配介面所提供的資訊,較今日之典型記憶體分配所提供的資訊要多,並給予主機有用以更有效率地在運算裝置上管理記憶體的資訊。 繼續進行至方塊340,回應於引動分配介面,應用程式接收參照,其中參照作為間接識別符,間接識別符在隨後用於使用所分配記憶體的應用程式。主機可或不可在接收到要求時立即分配記憶體。此外,在應用程式使用記憶體之前,主機有時可由主機需要再次接收控制的方式修改記憶體(例如,釋放記憶體、將記憶體分頁至磁碟等等)。因此,主機向應用程式提供對記憶體的參照,且在應用程式想要使用記憶體時,應用程式提供參照以直接存取記憶體(例如,指標)。 繼續進行至決策方塊350,若應用程式偵測到應用程式已結束使用所分配記憶體,則應用程式完成,否則應用程式繼續進行方塊360。在完成之前,應用程式可引動分配介面以除分配(或釋放)先前分配的記憶體。若應用程式並未使用記憶體,且主機並未實際地分配記憶體,則此動作可單純地清除主機先前儲存之相關於應用程式的項目,且將控制傳回給應用程式。 繼續進行至決策方塊360,若應用程式偵測到在應用程式中對所分配記憶體的使用,則應用程式繼續進行方塊370,否則應用程式循環(loop)至方塊350以等待記憶體存取或記憶體分配之目的的完成。應用程式可在記憶體在應用程式軟體碼中被存取時呼叫特定功能,或可將記憶體分配封裝於類別中,類別包覆對記憶體的存取,並適當地呼叫主機以讓記憶體為可用。 繼續進行至方塊370,應用程式要求直接存取由主機進行的記憶體分配。若主機已分配了記憶體,則主機傳回指標給應用程式,應用程式可依指標存取記憶體。若主機尚未分配記憶體或已除分配並再使用記憶體,則主機回應於應用程式要求而分配記憶體、引動所接收的填滿功能以填充記憶體內容並隨後傳回指標或其他存取記憶體的手段給應用程式。 繼續進行至方塊380,應用程式透過從主機接收的記憶體位址來存取記憶體分配。應用程式可修改記憶體、從記憶體讀取資訊或執行其他典型的記憶體操作。在應用程式完成存取記憶體時,應用程式可指示主機讓主機可再次執行可使記憶體不可用的管理操作。應用程式可更新由填滿功能使用的資料,使得若主機再次填充記憶體,則記憶體將包含最新的改變(若存在)。在方塊380之後,這些步驟完成。 第4圖為圖示說明在一個具體實施例中,在主機內的記憶體管理系統接收應用程式要求以分配並使用記憶體之處理程序的流程圖。開始於方塊410,主機從應用程式接收記憶體分配要求。主機可服務來自多個應用程式的要求,並可包含切割或共享在執行於主機平台上的多個應用程式中之受限實體記憶體的記憶體管理器。記憶體分配要求可包含資訊,諸如所要求的記憶體尺寸或其他相關於所要求記憶體的參數。 繼續進行方塊420,主機接收記憶體分配元資料,記憶體分配元資料指定應用程式計畫使用所要求記憶體分配的方式。元資料可包含諸如記憶體分配對應用程式之重要程度或優先次序、分配是否適於分頁至磁碟、應用程式是否可在主機必須釋放分配時回復記憶體內容等等的資訊。 繼續進行方塊430,主機從應用程式接收記憶體填滿功能,主機可引動記憶體填滿功能以填充所要求記憶體分配的內容。具有填充記憶體分配的手段,允許主機延緩記憶體的分配,以及在主機需要釋放記憶體分配以滿足另一應用程式要求或緩解其他記憶體壓力時回復記憶體。 繼續進行決策方塊440,若主機决定主機可直接回應要求而分配記憶體,則主機繼續進行方塊450,否則主機繼續進行方塊460。主機可基於應用程式所指示之記憶體對應用程式的重要程度,以及應用程式計畫多常存取記憶體,來决定是否要直接分配記憶體。主機亦可考慮其他因素,諸如主機執行於其上之運算裝置在要求的時間有多忙碌。 繼續進行方塊450,主機從主機可用的實體記憶體分配所要求的記憶體。主機可設置分頁表或由應用程式用以存取實體記憶體的其他虛擬記憶體。傳統主機直接回應應用程式要求而分配記憶體,或在主機無法滿足要求時使要求失敗。然而,記憶體管理系統可延緩要求或執行其他記憶體管理動作,以更有效率地使用記憶體與其他主機資源。 繼續進行方塊460,主機儲存所接收要求以及所接收元資料與填滿功能,以用於往後的分配。主機可維持由各種應用程式要求之記憶體的資料庫,在需要記憶體管理動作(諸如使更多記憶體成為可用)時從資料庫中選擇。由應用程式提供的元資料幫助主機决定,哪些應用程式與應用程式內的分配,將受到最小的來自主機之記憶體管理動作的負面衝擊。在方塊460之後,這些步驟完成。 在一些情況中,應用程式的開發者不想要或無法進行改變,以支援新的作業系統特徵。在此種情況中,記憶體管理系統可仍能夠藉由分析應用程式二進位碼資訊,以發現關於記憶體分配的資訊,來提供一些增強的記憶體管理,如參照第5圖與第6圖進一步說明者。 第5圖為圖示說明在一個具體實施例中,分析未被特定設計為提供記憶體分配資訊的應用程式的記憶體管理系統的處理程序的流程圖。 開始於方塊510,系統偵測無法作成說明記憶體分配之資訊的應用程式。應用程式可包含旗標或其他在應用程式二進位碼模組上,指定應用程式是否參與由記憶體管理系統提供之記憶體模型的資訊,或可提供另一指示。系統可快取先前所决定之應用程式分配資訊,而使對於每一應用程式的分析僅需執行一次。因此,在此步驟中,系統亦决定分析在先前尚未被執行過。 繼續進行方塊520,系統對應用程式執行分析,以决定由應用程式作成的記憶體分配。分析可包含各種應用程式之靜態及/或動態分析的形式。靜態分析的發生無需執行應用程式,並檢查應用程式的二進位碼以决定應用程式的行為。動態分析於應用程式正執行的同時發生並檢查應用程式在記憶體中的碼、資料結構與其他資訊,以决定應用程式的行為。系統可尋找呼叫特定主機API以分配、存取與釋放記憶體,並可註解位置、周遭附加資訊、用以填滿經分配記憶體的步驟等等。 繼續進行方塊530,系統與應用程式掛勾,以在應用程式內的位置提供分配資訊,應用程式在此等位置處配置記憶體。存在各種形式的應用程式掛勾技術,諸如MICROSOFT TM Detours與其他允許應用程式二進位碼改向,以在程式中的任意點截取或添加應用程式正常行為的技術。例如,系統可提供應用程式掛勾以引動分配功能以提供分配元資料,而非由應用程式原始呼叫之不具有元資料的標準分配功能。 繼續進行方塊540,系統從應用程式接收分配記憶體的要求,以及由經掛勾應用程式碼提供之相關聯的分配資訊。要求被主機接收,主機可能夠决定分配資訊係來自並非特定設計為提供分配資訊的應用程式。對於此種應用程式,主機的行為可不同於對於經設計為與系統協同工作的應用程式。例如,主機可說明由未經設計為與系統協同工作的應用程式所提供之可能較少的資訊。在一些具體實施例中,為了鼓勵採用新記憶體模型,系統可懲罰未依附新記憶體模型的應用程式,藉由傾向於將此等應用程式的資料調換至磁碟,或在記憶體壓力發生時執行其他記憶體管理動作。在方塊540之後,這些步驟完成。 第6圖為圖示說明在一個具體實施例中,靜態地分析應用程式並提供增強記憶體資訊清單的記憶體管理系統處理程序的流程圖。 開始於方塊610,系統接收不提供相關聯於對記憶體分配功能之呼叫的記憶體分配資訊的經編譯應用程式碼。系統可在首次要求執行應用程式時、在來自掃描運算裝置硬碟機或其他儲存之大量處理程序期間內或回應於特定使用者或管理者要求,來接收應用程式碼。經編譯應用程式碼可包含用於特定處理器的二進位碼(例如,x86或x64二進位碼)、用於特定運行時間的中間語言碼或其他形式的非來源碼應用程式碼。在來源碼為可用時,應用程式可被直接修改為使用系統,如在本文其他段落中說明者。 繼續進行方塊620,系統對所接收的應用程式碼執行靜態分析,以决定碼中應用程式分配記憶體的位置。靜態分析可尋找對記憶體分配功能的呼叫,諸如透過經輸入模組或其他手段。靜態分析擅於尋找對功能的呼叫,以及在一些情況中所傳送的參數。在一些具體實施例中,系統將靜態分析添加動態分析,並執行應用程式以識別無法或難以靜態地偵測到的資訊。 繼續進行方塊630,系統在所分析的應用程式碼中識別一或多個與記憶體相關的碼動作。碼動作可包含記憶體分配、記憶體存取、記憶體釋放以及其他記憶體操作。系統可藉由動作所發生之位址或藉由其他識別來識別碼動作,碼動作可在往後被提供給主機,或經修改以改變預設應用程式行為。 繼續進行方塊640,系統識別與每一經識別碼動作相關的周遭資訊,周遭資訊提供說明應用程式如何使用所分配記憶體的額外資訊。周遭資訊可告訴系統分配被儲存多久(例如,在相同功能中使用一次或儲存於全域變數以供接續的重複使用)、應用程式填充記憶體分配之內容的輕易度等等。可透過靜態及/或動態分析來識別周遭資訊。 繼續進行方塊650,系統儲存所識別之與記憶體相關的碼動作,以及任何所識別的周遭資訊,於資料儲存中,以供隨後在執行應用程式時由主機擷取。在一些具體實施例中,系統儲存所識別資訊於清單中,清單與應用程式模組一起儲存,而使裝載應用程式的主機可執行任何對所識別位置的截取或掛勾,以提供更多說明由應用程式作成之記憶體分配的資訊給主機。主機可使用此資訊以(例如)在系統閒置或未充分利用的同時,預先分配應用程式將在未來的一些時間需要的記憶體,如由分析所决定。此允許傳統應用程式參與由記憶體管理系統提供的記憶體模型。在方塊650之後,這些步驟完成。 第7圖為圖示說明在一個具體實施例中,記憶體管理系統採取相關於記憶體的動作以回應所偵測到的記憶體壓力的處理程序的流程圖。記憶體壓力可發生於具有受限記憶體的裝置使用了接近裝置可用記憶體時。例如,系統作業系統可界定記憶體壓力為發生於90%的實體隨機存取記憶體被使用時。 開始於方塊710,系統接收說明多個記憶體分配要求,以及一或多個應用程式如何使用記憶體分配的資訊。在一些情況中,系統儲存從應用程式接收之分配的列表或其他資料結構,以及相關聯之說明如何使用每一分配的元資料。分配使用資訊可包含優先次序或其他可幫助系統决定可釋放、分頁或者處理哪些分配,以有效率地管理可用記憶體。 繼續進行方塊720,系統偵測記憶體壓力,記憶體壓力指示需要作動以繼續有效率地執行應用程式。所偵測的記憶體壓力,可包含各種情況或核心或其他主機可採取的動作。例如,核心可想要關閉記憶體庫以節省電力,並可偵測儲存在彼記憶體庫上的分配,並釋放或調換出彼等分配至磁碟,而使記憶體庫可被關閉。作為另一範例,系統可將記憶體庫解片段,以得到可被關閉的空記憶體庫。在主機不完全控制記憶體的使用的情況下,時常難以不透過與應用程式合作而執行移動或釋放記憶體的操作。然而,本文所說明的記憶體管理系統允許主機具有更多的資訊與對記憶體管理方式的控制。 繼續進行方塊730,系統列舉所接收的分配要求,以决定要處理的分配。系統可遍歷分配的列表或其他資料結構,以决定在需要釋放時可輕易回復的分配,或應用程式可能不會再次使用的分配。 繼續進行方塊740,系統選擇要處理的所列舉分配的一或多者。系統可基於所接收之說明要求分配之應用程式如何使用分配的資訊來選擇分配。在一些情況中,系統可根據記憶體管理器的特定目標(例如,處理特定總和大小的記憶體,與尋找增加或超過彼大小的分配)來選擇多個分配。 繼續進行方塊750,系統對所選擇分配執動作,以緩解記憶體壓力。動作可包含釋放先前分配的記憶體、將記憶體內容調換至磁碟或其他儲存、將記憶體從先前位置移動至新位置等等。在一些情況中,系統把動作告知應用程式,讓應用程式可根據分配來修改行為。例如,應用程式可藉由在下次應用程式使用記憶體時重分配記憶體以回應。在方塊750之後,這些步驟完成。 第8圖為圖示說明在一個具體實施例中,記憶體管理系統啟動先前已由主機修改記憶體的應用程式的處理程序的流程圖。在許多多工系統中,應用程式被推至背景,且在往後由使用者或作業系統再啟動。在行動裝置上,使用者一次可與一個應用程式互動,且作業系統在特定應用程式位於前景時可料想其他應用程式。作業系統可釋放其他應用程式的記憶體,或將記憶體串流至磁碟或其他儲存。在啟動時,作業系統可作動以準備使應用程式再次執行。 開始於方塊810,系統接收應用程式要求以啟動。要求可來自應用程式自身、來自使用者或來自作業系統。啟動要求可單純地指示,使用者係再次與應用程式互動,而使應用程式可要求先前所分配的記憶體。 繼續進行方塊820,系統識別一或多個先前所接收的應用程式記憶體分配。系統可維持由一或多個分配所要求之每一分配的列表或其他資料結構,而使系統可藉由遍歷列表來識別先前所接收的記憶體分配。系統可檢查每一分配的狀態,諸如相關於分配的記憶體是否仍為可用並仍包含最後由應用程式放置於其中的內容。 繼續進行決策方塊830,若系統决定應用程式的分配已全部準備好,則系統跳至方塊860,否則系統繼續進行方塊840。系統可釋放、移動、分頁或者處理應用程式分配,以提供更多記憶體給其他工作,諸如執行其他應用程式。因此,在到了再次執行應用程式的時間時,系統可回復先前所處理的分配,或可將動作告知應用程式,而使應用程式可採取適當的動作。 繼續進行方塊840,系統分配未準備好的分配,以將分配放置於為應用程式所期望的狀態中。系統可指派實體記憶體給分配,藉由分配可用實體記憶體以滿足分配。在一些情況中,系統可提供虛擬記憶體,諸如由實體記憶體與調換檔所支援的虛擬記憶體。 繼續進行方塊850,系統使用由應用程式提供的填滿功能來填滿所分配的記憶體內容。應用程式提供足夠的資訊給系統,而使系統可釋放並重製應用程式的記憶體分配。此允許系統作成有效率的決策,以在應用程式之間共享資源,同時使對應用程式的負面影響保持為低。理想上,在系統處於記憶體壓力或其他壓力下時,系統將不會太快被使用到的記憶體釋放或移動,並隨後在記憶體再次被需要之前有時間回復記憶體。在傳統系統中,主機可進行的最佳方式為猜測,但使用本文所說明的記憶體管理系統,主機可非常有效率地選擇要處理的一或多個記憶體分配。 繼續進行方塊860,系統啟動所要求的應用程式並提供應用程式所期望的記憶體分配給應用程式。系統可中止應用程式,同時準備記憶體給應用程式,隨後在應用程式的所有記憶體分配準備好時繼續應用程式。在方塊860之後,這些步驟完成。 從上文看來,將認知到本文已為了說明目的說明了記憶體管理系統的特定具體實施例,但可進行各種修改而不脫離本發明的精神與範圍。因此,本發明並不被限制,除了由附加申請專利範圍限制者以外。 100‧‧‧記憶體管理系統 105‧‧‧元資料接收部件 110‧‧‧填滿規格部件 115‧‧‧分配要求部件 120‧‧‧記憶體參照部件 125‧‧‧應用程式介面部件 130‧‧‧靜態分析部件 135‧‧‧動態分析部件 140‧‧‧主機部件 145‧‧‧要求接收部件 150‧‧‧要求儲存部件 155‧‧‧分配部件 160‧‧‧記憶體動作部件 165‧‧‧資料儲存部件 210‧‧‧核心/主機 220‧‧‧應用程式 230‧‧‧記憶體處理框架 240‧‧‧經儲存分配元資料 250‧‧‧工具 310-380‧‧‧步驟 410-460‧‧‧步驟 510-540‧‧‧步驟 610-650‧‧‧步驟 710-750‧‧‧步驟 810-860‧‧‧步驟 第1圖為圖示說明在一個具體實施例中記憶體管理系統的部件的方塊圖。 第2圖為圖示說明在一個具體實施例中,記憶體管理系統之操作環境的方塊圖。 第3圖為圖示說明在一個具體實施例中,在軟體應用程式中記憶體管理系統要求分配並使用記憶體的處理程序的流程圖。 第4圖為圖示說明在一個具體實施例中,在主機內的記憶體管理系統接收應用程式要求以分配並使用記憶體之處理程序的流程圖。 第5圖為圖示說明在一個具體實施例中,分析未被特定設計為提供記憶體分配資訊的應用程式的記憶體管理系統的處理程序的流程圖。 第6圖為圖示說明在一個具體實施例中,靜態地分析應用程式並提供增強記憶體資訊清單的記憶體管理系統處理程序的流程圖。 第7圖為圖示說明在一個具體實施例中,記憶體管理系統採取相關於記憶體的動作以回應所偵測到的記憶體壓力的處理程序的流程圖。 第8圖為圖示說明在一個具體實施例中,記憶體管理系統啟動先前已由主機修改記憶體的應用程式的處理程序的流程圖。 100‧‧‧記憶體管理系統 105‧‧‧元資料接收部件 110‧‧‧填滿規格部件 115‧‧‧分配要求部件 120‧‧‧記憶體參照部件 125‧‧‧應用程式介面部件 130‧‧‧靜態分析部件 135‧‧‧動態分析部件 140‧‧‧主機部件 145‧‧‧要求接收部件 150‧‧‧要求儲存部件 155‧‧‧分配部件 160‧‧‧記憶體動作部件 165‧‧‧資料儲存部件
权利要求:
Claims (20) [1] 一種電腦實施方法,該方法用以在一軟體應用程式內要求來自一增強記憶體管理系統之記憶體的分配與使用,該方法包含以下步驟:設定分配元資料步驟,設定分配元資料,該分配元資料說明一應用程式將如何使用一記憶體分配;設定記憶體填滿功能步驟,設定一記憶體填滿功能,該記憶體填滿功能填充該記憶體分配的內容;引動步驟,引動由一主機提供的一分配介面,該分配介面管理為多個應用程式所共享的實體記憶體,其中該應用程式經由該分配介面提供該經設定分配元資料與該記憶體填滿功能給該主機;接收步驟,回應於引動該分配介面而接收一參照,其中該參照作為一間接識別符,該間接識別符用於隨後該應用程式對該記憶體分配的使用,其中前述步驟係由至少一個處理器執行。 [2] 如請求項1所述之方法,其中該設定分配元資料步驟包含以下步驟:建置一參數結構以傳給接收分配元資料的一分配功能。 [3] 如請求項1所述之方法,其中該設定分配元資料步驟包含以下步驟:呼叫一個別的應用程式介面(API)以在發生一分配之後提供分配元資料。 [4] 如請求項1所述之方法,其中該設定分配元資料步驟包含以下步驟:設定用於分配記憶體之一所導出類別的一參數,該參數接收分配元資料以增強記憶體管理。 [5] 如請求項1所述之方法,其中該設定分配元資料步驟包含含有該記憶體對該應用程式的一優先次序階層的元資料。 [6] 如請求項1所述之方法,其中該設定分配元資料步驟包含含有該應用程式計畫使用該所分配記憶體之頻率的元資料。 [7] 如請求項1所述之方法,其中該設定分配元資料步驟包含含有該應用程式替換該分配之該等內容的難度的元資料。 [8] 如請求項1所述之方法,其中該設定記憶體填滿功能步驟包含以下步驟:設定一功能,該功能從一檔案存取資訊以填充該記憶體分配的該等內容。 [9] 如請求項1所述之方法,其中該設定記憶體填滿功能步驟包含以下步驟:設定一功能,該功能可在往後由該主機呼叫以代表該應用程式填充該等記憶體內容,而不涉及該應用程式。 [10] 如請求項1所述之方法,其中該設定記憶體填滿功能步驟包含以下步驟:向該主機提供釋放並重填充該記憶體所需的資訊,或延緩該記憶體的分配與初始填充直到對該主機更適合的一時間所需的資訊。 [11] 如請求項1所述之方法,其中該接收參照步驟包含以下步驟:若該應用程式想要使用該記憶體,則提供該參照給該主機以直接存取該記憶體。 [12] 如請求項1所述之方法,該方法更包含以下步驟:若該應用程式偵測到該應用程式已結束使用該所分配之記憶體,則引動該分配介面以除分配該先前所分配之記憶體。 [13] 如請求項1所述之方法,該方法更包含以下步驟:在該應用程式存取該記憶體之後,向該主機指示該主機可再次執行可讓該記憶體不可用的管理作業。 [14] 一種電腦系統,該電腦系統用以提供一應用程式主機在一軟體應用程式內對記憶體分配與使用的更多控制,該系統包含:經配置以執行實施於下列部件內的軟體指令的一處理器與記憶體;一元資料接收部件,該元資料接收部件接收相關聯於每一記憶體分配的資訊,該資訊對一應用程式主機提供說明該應用程式如何使用該記憶體的資訊;一填滿規格部件,該填滿規格部件接收說明如何填滿一特定記憶體分配的內容的資訊;一分配要求部件,該分配要求部件發出從該應用程式至該主機的一要求,以基於該所接收之元資料與填滿規格來分配記憶體;一記憶體參照部件,該記憶體參照部件在該應用程式存取記憶體(為一先前提出之分配要求的主體)之前,從該應用程式接收一指示;一應用程式介面部件,該應用程式介面部件提供該應用程式與該主機之間的一通訊介面,以協調記憶體分配的使用;以及一主機部件,該主機部件包含該應用程式執行於其中的一環境並提供一記憶體管理器,該記憶體管理器使用該所接收元資料與填滿規格來管理記憶體。 [15] 如請求項14所述之系統,其中該元資料接收部件接收指示對於該應用程式之一分配有多可輕易存取之程度,或指示該應用程式計畫存取相關聯於該分配之該記憶體的頻率的資訊。 [16] 如請求項14所述之系統,其中該元資料接收部件接收指示在該等內容被釋放時,該應用程式或該主機有多難以置換該等記憶體內容的資訊。 [17] 如請求項14所述之系統,其中該填滿規格部件將一記憶體填滿功能傳給該主機,而使該主機可引動該功能以在由該主機决定的一時間填滿該等記憶體內容。 [18] 如請求項14所述之系統,其中該分配要求部件將該所發出的要求儲存於由該主機管理的一資料儲存中,並包含所接收的該元資料與填滿規格,以供往後的記憶體管理動作使用。 [19] 如請求項14所述之系統,其中該元資料接收部件、該填滿規格部件、該分配要求部件與該記憶體參照部件作成一記憶體框架,該主機將該記憶體框架暴露給應用程式,而讓想要修改開發者的應用程式碼以更有效率地管理記憶體的開發者,可利用這些部件,從開發者的應用程式產生允許該主機更有效率地代表該應用程式管理記憶體的應用程式。 [20] 一種電腦可讀取儲存媒體,該電腦可讀取儲存媒體包含指令以控制一電腦系統以在一主機內接收應用程式要求以分配並使用記憶體,其中該等指令在被執行時使一處理器執行動作,該等動作包含下列動作:從一應用程式接收一記憶體分配要求,其中該主機服務來自多個應用程式的要求,且該主機包含一記憶體管理器,該記憶體管理器在執行於該主機上的多個應用程式之間共享有限的實體記憶體;接收記憶體分配元資料,該記憶體分配元資料指定該應用程式計畫使用該所要求記憶體分配的一方式;從該應用程式接收一記憶體填滿功能,該記憶體填滿功能可由該主機引動以填充該所要求記憶體分配的該等內容;連同該所接收元資料與填滿功能,儲存該所接收的要求以供往後分配,其中該主機維持由各種應用程式要求之記憶體的一資料儲存,在需要一記憶體管理動作時從該資料儲存選擇。
类似技术:
公开号 | 公开日 | 专利标题 TWI574202B|2017-03-11|用於新應用程式之記憶體管理模型與介面 TWI539280B|2016-06-21|用於分析未經特定設計以提供記憶體分配資訊之應用程式及擷取記憶體分配資訊的方法、及其電腦系統和電腦可讀儲存媒體 US9558040B2|2017-01-31|Memory manager with enhanced application metadata RU2569805C2|2015-11-27|Виртуальная архитектура неоднородной памяти для виртуальных машин US11106579B2|2021-08-31|System and method to manage and share managed runtime memory for java virtual machine CN113010265A|2021-06-22|Pod的调度方法、调度器、存储插件及系统 US9501313B2|2016-11-22|Resource management and allocation using history information stored in application's commit signature log US20090320036A1|2009-12-24|File System Object Node Management US9405470B2|2016-08-02|Data processing system and data processing method
同族专利:
公开号 | 公开日 US20120324198A1|2012-12-20| WO2012177576A3|2013-04-04| US9946641B2|2018-04-17| KR101936453B1|2019-01-08| CN103608766A|2014-02-26| EP2721482A2|2014-04-23| KR20140034246A|2014-03-19| WO2012177576A2|2012-12-27| EP2721482A4|2016-04-13| JP6138774B2|2017-05-31| US9218206B2|2015-12-22| AR087009A1|2014-02-05| JP2014520346A|2014-08-21| US20160188454A1|2016-06-30| TWI574202B|2017-03-11| TWI604378B|2017-11-01| TW201712527A|2017-04-01| CN103608766B|2019-06-18|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题 TWI509514B|2013-02-01|2015-11-21|Htc Corp|電子裝置、電腦可讀媒體及其資料同步方法|US5018060A|1989-01-26|1991-05-21|Ibm Corporation|Allocating data storage space of peripheral data storage devices using implied allocation based on user parameters| US6023712A|1997-07-30|2000-02-08|Quarterdeck Corporation|Method and apparatus for brokering memory resources| US6205528B1|1997-08-29|2001-03-20|International Business Machines Corporation|User specifiable allocation of memory for processes in a multiprocessor computer having a non-uniform memory architecture| US6128713A|1997-09-24|2000-10-03|Microsoft Corporation|Application programming interface enabling application programs to control allocation of physical memory in a virtual memory system| US20010042058A1|1998-07-09|2001-11-15|Robert J. Harrington|Apparatus and method for managing memory use by software objects| US6701420B1|1999-02-01|2004-03-02|Hewlett-Packard Company|Memory management system and method for allocating and reusing memory| DE19951716A1|1999-10-27|2001-05-03|Heidenhain Gmbh Dr Johannes|Verfahren zur dynamischen Speicherverwaltung| US7016826B2|2000-12-21|2006-03-21|Intel Corporation|Apparatus and method of developing software for a multi-processor chip| US6895590B2|2001-09-26|2005-05-17|Intel Corporation|Method and system enabling both legacy and new applications to access an InfiniBand fabric via a socket API| US6985976B1|2002-02-22|2006-01-10|Teja Technologies, Inc.|System, method, and computer program product for memory management for defining class lists and node lists for allocation and deallocation of memory blocks| CA2382718C|2002-04-12|2007-02-13|Ibm Canada Limited-Ibm Canada Limitee|Memory balancing and optimization services| US7069396B2|2002-06-27|2006-06-27|Hewlett-Packard Development Company, L.P.|Deferred memory allocation for application threads| US7188216B1|2002-12-13|2007-03-06|Vignette Corporation|Method and system for an extensible caching framework| US7149863B1|2003-10-08|2006-12-12|Sun Microsystems, Inc.|System and method of descriptively specifying memory placement in a computer system| US7278005B1|2004-04-01|2007-10-02|Azul Systems, Inc.|Cooperative memory management| US7484065B2|2004-04-20|2009-01-27|Hewlett-Packard Development Company, L.P.|Selective memory allocation| US7418568B2|2005-01-05|2008-08-26|Sap Ag|Memory management technique| US7441094B2|2005-07-05|2008-10-21|Microsoft Corporation|Memory management configuration| KR101059633B1|2006-07-14|2011-08-25|인텔 코오퍼레이션|멀티태스킹 가상 머신을 위한 힙 구성| KR101287976B1|2006-09-11|2013-07-18|삼성전자주식회사|데이터 어플리케이션의 자동실행 조정방법 및 이를 적용한영상재생장치| US7900010B2|2007-07-09|2011-03-01|Ittiam Systems Ltd.|System and method for memory allocation management| TWI438633B|2007-11-29|2014-05-21|Ibm|記憶體管理之垃圾收集方法、其電腦程式產品,及其裝置| US8812809B2|2008-06-10|2014-08-19|Oracle America, Inc.|Method and apparatus for allocating memory for immutable data on a computing device| KR20100071483A|2008-12-19|2010-06-29|한국전자통신연구원|묶음 소프트웨어의 배포 방법 및 시스템| US9785470B2|2011-06-20|2017-10-10|Microsoft Technology Licensing, Llc|Memory management model and interface for unmodified applications|DE69801458T2|1997-04-04|2002-04-18|Canon Kk|Toner zur Herstellung von Bildern, Bildherstellungsverfahren, und Wärme-Fixierungsverfahren| JP2008299011A|2007-05-30|2008-12-11|Seiko Epson Corp|現像装置、画像形成装置、画像形成システム、及び、現像方法| US8627036B2|2011-09-12|2014-01-07|Microsoft Corporation|Memory management techniques| US8966213B2|2012-07-12|2015-02-24|International Business Machines Corporation|Granting and revoking supplemental memory allocation requests| US9678797B2|2014-03-10|2017-06-13|Microsoft Technology Licensing, Llc|Dynamic resource management for multi-process applications| KR102317599B1|2014-05-26|2021-10-26|삼성전자 주식회사|전자 장치 및 전자 장치의 단편화 분석 방법| US9491562B2|2014-06-04|2016-11-08|Grandios Technologies, Llc|Sharing mobile applications between callers| US9395754B2|2014-06-04|2016-07-19|Grandios Technologies, Llc|Optimizing memory for a wearable device| US8965348B1|2014-06-04|2015-02-24|Grandios Technologies, Llc|Sharing mobile applications between callers| CN105740158A|2014-12-11|2016-07-06|广州市动景计算机科技有限公司|减少便携式终端设备上浏览器内存占用的方法与装置| WO2016168202A1|2015-04-14|2016-10-20|Sendyne Corporation|Model numerical solver for system control| US9891861B2|2015-06-25|2018-02-13|International Business Machines Corporation|Off-line affinity-aware parallel zeroing of memory in non-uniform memory accessservers| KR102277731B1|2015-07-21|2021-07-14|삼성전자주식회사|스토리지 시스템의 구동 방법 및 스토리지 컨트롤러| US20170185292A1|2015-12-23|2017-06-29|Intel Corporation|Memory Management of High-Performance Memory| US9996293B1|2016-12-12|2018-06-12|International Business Machines Corporation|Dynamic management of memory allocation in a database| US10599353B2|2017-05-16|2020-03-24|Apple Inc.|Techniques for managing storage space allocation within a storage device| US10368128B2|2017-08-11|2019-07-30|Microsoft Technology Licensing, Llc|Memory allocation type for media buffer|
法律状态:
2018-12-11| MM4A| Annulment or lapse of patent due to non-payment of fees|
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 US13/163,752|US9218206B2|2011-06-20|2011-06-20|Memory management model and interface for new applications| 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|