TW201301033A - 用於未修正應用程式的記憶體管理模型和界面 - Google Patents

用於未修正應用程式的記憶體管理模型和界面 Download PDF

Info

Publication number
TW201301033A
TW201301033A TW101114220A TW101114220A TW201301033A TW 201301033 A TW201301033 A TW 201301033A TW 101114220 A TW101114220 A TW 101114220A TW 101114220 A TW101114220 A TW 101114220A TW 201301033 A TW201301033 A TW 201301033A
Authority
TW
Taiwan
Prior art keywords
application
memory
host
information
allocation
Prior art date
Application number
TW101114220A
Other languages
English (en)
Other versions
TWI539280B (zh
Inventor
Jeremiah C Spradlin
Galen Hunt
Anil F Thomas
Steven Maillet
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 TW201301033A publication Critical patent/TW201301033A/zh
Application granted granted Critical
Publication of TWI539280B publication Critical patent/TWI539280B/zh

Links

Classifications

    • 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
    • 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/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • 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/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5021Priority
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本文中描述一種記憶體管理系統,該記憶體管理系統自應用程式接收描述正如何使用記憶體之資訊,且該記憶體管理系統允許應用程式主機對請求使用記憶體之應用程式施加更多控制。該系統提供應用程式記憶體管理應用程式介面(API),該應用程式記憶體管理API允許應用程式指定關於記憶體分配之更多資訊,該資訊有助於隨後管理記憶體。該系統亦提供靜態地及/或動態地分析舊有應用程式之能力,以給予未經修正以與系統一起工作的應用程式參與更有效的記憶體管理之一些能力。該系統提供應用程式主機變化,以有效利用由應用程式提供的資訊且使用該資訊來更有效地管理記憶體,且該系統掛鉤至該應用程式之記憶體使用中。因此,該系統提供用於管理記憶體之新模型,該新模型改良應用程式主機行為且允許應用程式更有效率地使用計算資源。

Description

用於未修正應用程式的記憶體管理模型和界面
本發明係關於用於未修正應用程式的記憶體管理模型及介面。
電腦系統中之記憶體管理係指多個應用程式及作業系統對記憶體之使用達成一致的方式。儘管每一電腦系統具有固定量之實體隨機存取記憶體(RAM)或其他記憶體,但作業系統可向應用程式及向作業系統組件提供虛擬記憶體,該虛擬記憶體表示不同於實體記憶體的記憶體之大小。在某些狀況下,虛擬記憶體允許作業系統將每一應用程式限制於存取記憶體之特定部分,以防止一個應用程式藉由意外地或故意地修正另一應用程式之記憶體來干擾另一應用程式之操作。作業系統大體提供用於回應於應用程式及作業系統組件請求而分配及釋放記憶體之一或更多個函數。作業系統可向應用程式提供記憶體集用場,該應用程式可自該記憶體集用場分配記憶體塊。若一應用程式使用比經安裝實體記憶體之量更多的虛擬記憶體,或一組應用程式一起使用比經安裝實體記憶體之量更多的虛擬記憶體,則作業系統可使用較慢的基於磁碟之儲存器,以在程序調用分頁或磁碟調換(亦即,將記憶體之頁儲存且擷取至磁碟)中經由調換檔延伸記憶體之視大小。
除了所提供之分配及釋放函數以外,作業系統極少深入理解應用程式如何使用記憶體。許多計算裝置含有圍繞記憶體之特定限制。舉例而言,行動計算裝置可包括比通常在桌上型電腦系統上可用的記憶體更少量的記憶體(或系統可能想要降低某一記憶體之功率以降低能量消耗),從而產生對於裝置與多少應用程式可同時運行、每一應用程式可請求/消耗多少記憶體等等有關的限制。在特定計算系統內代管應用程式碼之其他計算環境亦可對環境之記憶體使用率強加限制或上限。諸如VMware及MICROSOFT TM Virtual PC之主機、超管理器、作業系統及其他可被指定有限資源。在所有此等情形下,有效的記憶體管理變得更值得注意。
新計算平臺已引入新技術或改變意圖之舊技術,以解決在應用程式之間共享的有限記憶體之問題。舉例而言,行動電話作業系統可產生每一應用程式之記憶體快照,以使得當應用程式不處於前臺(例如,經有效地使用)中時,作業系統關閉該應用程式且在較慢儲存器(例如,快閃記憶體或其他儲存器)上儲存應用程式之記憶體之影像。當選定應用程式時,作業系統將所儲存影像重新載入至記憶體中且啟動應用程式。應用程式可能甚至未察覺到該應用程式已被關閉。儘管此等技術為有幫助的,但作業系統仍經受應用程式對於使用記憶體之不透明的請求。當前作出的關於動態記憶體使用率之大部分決策係基於在運行時間期間發現的資訊作出。此資訊 之實例包括對經分配記憶體區段的引用之大小及數目。此資訊隨後可用以決定哪些分配將被分頁至磁碟、被快取至高效能記憶體或藉由某種自動記憶體管理系統釋放。令人遺憾的是,任何平臺因潛在多年之舊有應用程式而受限,因此在如記憶體管理一樣廣泛的區域中採用新模型十分困難。
本文中描述一種記憶體管理系統,該記憶體管理系統自應用程式接收描述記憶體正如何使用之資訊,且該記憶體管理系統允許應用程式主機對請求使用記憶體之應用程式施加更多控制。現今,除應用程式已作出多少記憶體請求及藉由每一請求已請求多大大小之記憶體之外,應用程式主機對於應用程式之記憶體使用所知甚少。然而,應用程式主機不知道每一記憶體分配之目的、很快將使用哪些記憶體分配、若應用程式主機需要更多記憶體則可容易地再產生哪些記憶體分配、暫時將不使用哪些記憶體分配且因此該等記憶體分配可分頁至磁碟而不影響應用程式之效能等等。令人遺憾的是,儘管應用程式主機的任務為作出此等類型之決策,但應用程式擁有關於有效地作出此等決策之大部分資訊。
記憶體管理系統以若干方式克服此等問題。第一,系統提供應用程式記憶體管理應用程式介面(application-programming interface;API),該應用程式記 憶體管理API允許應用程式指定關於記憶體分配之更多資訊,該資訊有助於隨後管理記憶體。API亦可提供應用程式主機通知應用程式何時需要記憶體的能力及主動釋放且按需要再產生記憶體分配而無應用程式之互動的能力。第二,系統提供靜態地及/或動態地分析舊有應用程式之能力,以給予未經修正以與系統一起工作的應用程式參與更有效的記憶體管理之某一能力。第三,系統提供應用程式主機變化,以有效利用由應用程式提供的資訊且使用該資訊來更有效地管理記憶體,且系統掛鉤至該應用程式之記憶體使用中。因此,記憶體管理系統提供用於管理記憶體之新模型,該新模型改良應用程式主機行為且潛在地允許應用程式更有效率地使用計算資源。
提供此發明內容以用簡化形式介紹在以下實施方式中進一步描述之概念選擇。此發明內容並不意欲識別所主張標的之關鍵特徵或基本特徵,亦不意欲用以限制所主張標的之範疇。
本文中描述一種記憶體管理系統,該記憶體管理系統自應用程式接收描述記憶體正如何使用之資訊,且該記憶體管理系統允許應用程式主機對請求使用記憶體之應用程式施加更多控制。現今,除應用程式已作出多少記憶體請求及每一請求已請求多大大小之記憶體之外,應 用程式主機對於應用程式之記憶體使用所知甚少。然而,應用程式主機不知道每一記憶體分配之目的、很快將使用哪些記憶體分配、若應用程式主機需要更多記憶體則可容易地再產生哪些記憶體分配、暫時將不使用哪些記憶體分配且因此該等記憶體分配可分頁至磁碟而不影響應用程式之效能等等。令人遺憾的是,儘管應用程式主機的任務為作出此等類型之決策,但應用程式擁有關於有效地作出此等決策之大部分資訊。現今藉由應用程式主機來解決此衝突,該應用程式主機提供功能性之基本位準且猜測採取哪些動作。在許多狀況下,應用程式主機可恰好在應用程式需要記憶體之前將記憶體分頁至磁碟,或應用程式主機可耗費大量努力來管理對於應用程式幾乎不重要的記憶體。
記憶體管理系統以本文中進一步論述的若干方式克服此等問題。第一,系統提供應用程式記憶體管理應用程式介面(API),該應用程式記憶體管理API允許應用程式指定關於記憶體分配之更多資訊,該資訊有助於隨後管理記憶體。API亦可提供應用程式主機通知應用程式何時需要記憶體的能力及主動釋放且按需要再產生記憶體分配而無應用程式之互動的能力。第二,系統提供靜態地及/或動態地分析舊有應用程式之能力,以給予未經修正以與系統一起工作的應用程式參與更有效的記憶體管理之某一能力。第三,系統提供核心位準作業系統(或主機)變化,以有效利用由應用程式提供的資訊且使用 該資訊來更有效地管理記憶體,且系統掛鉤至該應用程式之記憶體使用中。因此,記憶體管理系統提供用於管理記憶體之新模型,該新模型改良應用程式主機行為且潛在地允許應用程式更有效率地使用計算資源。如本文中所描述之應用程式主機可能係指作業系統,該作業系統執行應用程式或另一類型之主機(例如,本身在作業系統或虛擬化子系統上運行的應用程式),諸如,由SILVERLIGHT TM,.NET提供的運行時間、原Win32主機或由VMware及Virtual PC提供的其他主機或虛擬機器。在以下章節中進一步詳細描述上文介紹的三個區域中之每一區域。
經修正應用程式
在許多狀況下,對於軟體開發者而言修正軟體應用程式以與記憶體管理系統互動係有可能的。對於經有效開發的應用程式而言,軟體開發者可選擇採用記憶體管理系統以獲得記憶體管理系統提供的益處,或軟體開發者可由特定平臺委任,在該特定平臺上,應用程式操作以採用該記憶體管理系統。在許多狀況下,應用程式可保持該應用程式不可能使用之經分配記憶體。舉例而言,當使用者自應用程式之使用者介面之一個部分轉移至另一部分時,則應用程式可一直保持來自先前介面之資訊,以防使用者再訪彼介面。現今,此記憶體對主機而言被需要的程度恰如其他有效使用之記憶體。記憶體管理系統為應用程式提供通知主機如此等之情形的方式, 以便可將此記憶體去優先化。作為回應,主機可選擇此記憶體作為用於分頁之良好候選者或作出其他記憶體管理決策,該等其他記憶體管理決策由於添加的來自應用程式之資訊而更有效率。
在一些實施例中,記憶體管理系統提供應用程式化模型或框架,該應用程式化模型或框架使得記憶體管理器能夠在運行時間期間作出關於最佳化記憶體使用率之智慧型決策。此舉藉由利用應用程式化模型/框架來完成,該應用程式化模型/框架接收元資料與動作兩者,該等動作用以分配及填充為應用程式所請求的指定用於任何給定記憶體物件的記憶體分配。元資料提供應用程式想要傳輸至主機的資訊,該資訊描述記憶體分配之本質或目的,諸如,記憶體之優先級、正被分配的記憶體之數量、從頭再產生記憶體之內容的容易性(例如,該等內容可自檔案載入或可藉由演算法計算)、存取頻率、多久應用程式可使用記憶體等等。用以分配且填充記憶體之動作可向主機提供足夠的資訊,以能夠在應用程式之請求之後釋放且隨後再產生經釋放記憶體。藉由允許開發者指定元資料及用以填充記憶體之動作,記憶體管理系統可最佳化與由應用程式指定的所要使用率一致的記憶體使用率。
由記憶體管理系統向應用程式提供的API為應用程式開發者提供經由應用程式框架或程式化模型指定元資料之構件,該元資料描述記憶體分配之使用率。此外,API 允許應用程式框架委任開發者利用標準構件經由熟知的函數填充或修正記憶體。此舉允許記憶體管理系統出於效能原因為在低記憶體可用性之時期期間(亦即,當用於釋放記憶體之機會成本大於隨後再分配且再填充記憶體之成本時)釋放記憶體或出於其他目的,而佔先填充記憶體。
最佳化記憶體使用率可涵蓋此項技術中已知的許多技術,但最佳化記憶體使用率通常將意謂對於效能或者大小之最佳化。就效能而言,最佳化可能意謂若實現至今不需要的記憶體分配之構件為可用的,則允許至今不需要的記憶體分配發生。若當前CPU使用率較低且應用程式為閒置的,則此舉可能為可行的。在一些狀況下,應用程式對分配記憶體的請求可變為主機儲存用於未來參考之註解,而在當時並不分配任何記憶體。隨後,當應用程式經由API請求使用記憶體時,或當主機決定適合的時間來實現該請求時,記憶體管理系統實際上分配所請求的記憶體。就大小而言,最佳化可能意謂減少記憶體佔據面積或基於當前經分配記憶體及未來記憶體需要作出決策。
應用程式與主機之間的實際介面可採取將由一般熟習此項技術者辨識的各種形式。舉例而言,應用程式可針對每一類型之分配提供分配函數且可在分配請求中將對分配的指標或引用傳遞至主機。當主機準備執行分配時,主機調用所提供的分配函數,且應用程式使用常規 記憶體分配函數產生記憶體。類似地,應用程式可傳遞對其他函數的引用,以便主機可請求釋放記憶體、移動記憶體、將記憶體內容切換至不同類型之儲存器等等。當應用程式自作業系統請求記憶體時,相同概念亦可用於分配,作業系統可基於若干因素延遲分配。當作業系統準備分配時,(用經分配記憶體)返回調用函數引用或者發生事件(或相似機制)。介面亦可接收元資料,諸如,記憶體大小(該記憶體大小可不同於經請求大小)、優先級、快取偏好、分頁能力、如何填充記憶體、對記憶體的相依性或引用、是否更新記憶體等等。在一些實施例中,系統提供記憶體介面類別,分配自該記憶體介面類別導出,以定義每一類型之記憶體分配。該類別可包括用於擷取應用程式指定的分配函數之GetPointer函數或用於擷取執行其他記憶體處置任務的函數之其他GetX函數。替代性地或此外,應用程式可以傳統方式進行分配且隨後調用RegisterPointer函數,該等RegisterPointer函數將經分配記憶體註冊給主機且指定本文中所描述之與該經分配記憶體相關聯的額外資訊。以下偽碼提供應用程式可使用的一個記憶體類別之實例。
CMemChunk//base class for all memory allocations { <Global List of Allocations> ... }; CMyMemory:public CMemChunk { Allocate(size); Fill( ){<how to fill memory>}//override Attributes<e.g.,priority,pageability,etc.> }; 替代性地或此外,開發者可使用源注解語言(source annotation language;SAL)或其他標示將本文中所描述之框架引入至應用程式碼中,以識別現有記憶體分配且指定額外參數及與每一分配、存取或其他記憶體互動有關之元資料。
在一些實施例中,記憶體管理系統可在單一應用程式內操作且不與核心或其他主機共享。應用程式可受益於經改良記憶體管理,該應用程式自身的內部記憶體管理器可藉由使用本文中所描述之框架用所提供的額外資訊來執行該經改良記憶體管理。在一些狀況下,主機隨後可提供註冊函數,該應用程式可調用該註冊函數,以獲得跨應用程式的益處且允許主機亦使用定義良好的記憶體分配及使用率。作為實例,系統可在有毒軟體掃描之前通知應用程式,以便該應用程式可卸載任何不太有關的記憶體,以加速掃描。作為另一實例,應用程式可在CPU進入閒置狀態之前預佔性地分配記憶體,以便當使用者執行一些操作且CPU回復執行時,該應用程式可迅速地回應事件(增強對功率狀態改變的回應性)。
未修正應用程式
在軟體開發者不可能修正軟體應用程式以與記憶體管理系統互動的狀況下,或在實施系統以與未修正應用程式(亦即,未經特定設計以與系統一起工作的應用程式)操作的狀況下,系統仍可能提供記憶體管理益處。為此,系統收集描述應用程式如何使用記憶體本身(例如,基於靜態分析及/或側描該應用程式一使該應用程式運行、截取記憶體分配及查看在該應用程式之整個運行時間上的使用率)之資訊。此資訊在決定效能特性時有用,且此資訊可由應用程式的主機之記憶體管理器智慧地使用。可使用此資訊的方式之實例包括智慧型廢料收集、智慧型分頁至磁碟、智慧型快取至較高效能記憶體快取及甚至警告使用者關於應用程式可能遭遇的潛在記憶體限制。
利用二進制之靜態分析、二進制的行為之運行時間分析,及藉由檢測二進制,有可能收集關於二進制的給定記憶體分配及彼等分配之使用率中的任一者之額外資訊。此資訊隨後可用以驅動圍繞在實體記憶體內載入/卸載及分配的位置之更智慧的行為。記憶體管理系統提供用元資料自動地注解應用程式記憶體分配之構件,該元資料描述分配本身之潛在的或實際的使用率。此分析可在二進制上靜態地或者在運行時間期間動態地自動執行,而不需要現有應用程式之任何開發者互動或再創作。一旦執行分析,則該分析可由系統快取,因此主機 作業系統知道未來如何處理應用程式。分析亦可經公開以由其他用戶端發現,而非僅經本端快取。此外,有可能將資訊曝露於使用者用於視需要編輯,從而允許管理員或使用者定製應用程式之元資料及應用程式主機將如何處理應用程式之記憶體分配。
有可能使用靜態及動態分析來導出關於應用程式的記憶體分配之額外資訊,且此資訊隨後可用以幫助導引應用程式及系統記憶體分配之整體管理。實例為當正在接觸記憶體時,有可能決定另一記憶體區段是否用以幫助填充此記憶體分配。若此記憶體分配隨後取決於另一分配,則可指示此相依性,或者可簡單地藉由位元注解該記憶體分配,以指示在無輸入的情況下不產生該記憶體分配。靜態分析可決定軟體程式碼在何處接觸記憶體、如何使用記憶體、如何填充記憶體、程式碼路徑的共用性如何(例如,是否一次寫入程式碼路徑/讀取許多(WORM)程式碼路徑)及使用記憶體之頻率。動態分析可檢測所有分配及/或存取(類似於分析器),且動態分析可截獲系統環境對於程式碼的操作之影響、影響操作之使用者設定及不可用或難以靜態地決定之其他資料。
在一些實施例中,記憶體管理系統在已分析應用程式之後輸出應用程式的記憶體使用率之貨單或其他描述。此舉允許系統快取分析之結果且再使用該等結果用於應用程式之未來執行。作業系統可設計有應用程式二進制第一次執行時(或在如應用程式虛擬化之排序的程序期 間)執行此分析且隨後儲存供二進制每次執行時使用之分析的系統。核心或其他主機可經由額外資訊讀取貨單資料且採取適當的動作,該額外資訊描述應用程式如何使用記憶體。應用程式使用率可隨時間變化,因此可不時動態地更新貨單或其他快取。在一些狀況下,系統可針對每一分配來分配記憶體之整個頁,以便每一記憶體存取觸發頁錯失,該頁錯失允許核心控制如何使用記憶體,且系統可提供對記憶體的應用程式引用與本文中進一步描述的實際記憶體分配之間的間接類型。
在一些實施例中,系統可提供關於應用程式記憶體行為之報告。此舉為分析之另一用途,且此舉可幫助管理員作出關於應用程式之決策,諸如,該系統將在哪個伺服器或虛擬機上執行良好。系統亦可提供記憶體使用率之市場評級,以便行動電話應用程式儲存器之使用者(例如)可在下載應用程式之前知道該應用程式將如何使用行動電話之可用記憶體(例如,使用較多記憶體、使用較少記憶體等等)。管理員亦可基於所收集的關於記憶體消耗之元資料而將此資訊用於各種系統上之軟體的IT部署。
記憶體管理系統可使用自記憶體使用率分析導出的資訊,以在系統為閒置或未充分利用時佔先分配且潛在地填充記憶體。知道應用程式之記憶體未來使用率允許系統更有效率地分配記憶體且允許系統在系統未充分利用時有效利用時間來分配記憶體,該記憶體可能在系統處 於較大負載之下時使用。此舉允許較大負載使用更多處理或由較早完成的工作變得可用的其他資源。
主機修正
記憶體管理系統包括對核心或應用程式主機的修正,以接收關於由應用程式提供或經由應用程式之分析決定的記憶體使用率之額外資訊。不同於傳統的軟體記憶體管理,由於增加了對由元資料提供的記憶體使用率及自本文中所描述之應用程式傳輸的其他資訊之洞察力,核心可在不具有應用程式之知識或動作的情況下執行更多操作來有效率地管理記憶體。核心隨後可通知應用程式已採取何種動作或可管理記憶體,使得記憶體在應用程式需要記憶體時處於適當的位置,以便應用程式不察覺或不關心核心之與記憶體相關的動作。核心隨後可執行較好的分頁(例如,藉由將次要的或不可能使用的記憶體卸載至較慢磁碟儲存器)、可在記憶體壓力發生時釋放記憶體,且可代表一或更多應用程式使用由核心提供的操作環境採取其他動作來管理記憶體。舉例而言,核心可為較少片段而較好地分配記憶體。
記憶體為作業系統中之受約束資源;因此,重要的是核心適當地追蹤在何處分配記憶體,以便該核心可按需要自應用程式恢復記憶體。一個解決方案為在將記憶體分配給應用程式時使應用程式指派優先級至記憶體。因此,當系統決定該系統在記憶體上較低時,核心可決定最低優先級的記憶體在何處,且核心可解除分配或分頁 彼記憶體,而不影響具有較高優先級記憶體的其他應用程式之效能。
傳統上,由核心決定記憶體之優先級及對於應用程式的記憶體的分配。當系統在記憶體上運行較低時,核心可任意地釋放由具有較高優先級之應用程式使用的記憶體,從而中斷或降級應用程式之效能。實情為,較低優先級記憶體應首先解除分配。存在與核心如何決定自哪個應用程式釋放記憶體有關之有趣的態樣。一個解決方案為使應用程式在本身之間決定何種優先級次序用於記憶體資源。記憶體優先級方案要求應用程式在分配或解除分配時將經分配或經解除分配的記憶體之優先級指派至該等應用程式。因此,當存在記憶體壓力時,核心具有藉由優先級分級的記憶體映像,且核心可首先釋放及定位較低優先級記憶體。或者,核心可將通知發送至應用程式,該應用程式具有需要被釋放的分配之列表。記憶體管理系統可完全由作業系統代管,或記憶體管理系統在作業系統與應用程式之間為合作的。
優先級模型可藉由建立記憶體分配API來實施,每當作出記憶體請求時該記憶體分配API封裝應用程式。此舉亦可有益於未註冊之應用程式。藉由利用此API,由子系統自動地追蹤應用程式及優先級,而無需使應用程式有效地管理記憶體優先級。核心物件併入所有註冊、計算、發送訊號及記憶體管理功能性,因此每一應用程式僅必須調用此物件(或在未修正應用程式的狀況下代 表應用程式使此物件被調用)。
替代性解決方案為在核心外部具有主應用程式,該主應用程式用以追蹤當前正在運行的各種應用程式。當應用程式請求記憶體時,將該等應用程式註冊至主應用程式。因此,當應用程式變得無回應時,主應用程式可決定是否刪除暫斃應用程式,以收回記憶體或將該記憶體保持暫懸,以便可在需要記憶體時將記憶體返回至應用程式。
核心或主機可使用增強型記憶體資訊以更有效率地作出各種記憶體管理決策。舉例而言,低功率裝置之核心可選擇關閉記憶體之記憶庫,以節省電池壽命。系統可刪除或換出在待關閉的記憶庫中具有記憶體之程序。系統亦可解片段在若干記憶庫間散佈的記憶體,以實現可被關閉的一些空的記憶庫。作為另一實例,核心可選擇將一些記憶體分配推至其他裝置(包括基於雲端的儲存設施)。許多小佔據面積、低功率作業系統不具有分頁之概念,因此在此狀況下,可能在由另一裝置/服務代管的表示狀態傳送(Representational State Transfer;REST)介面內支援記憶體分配。以類似於在資料庫快照內翻捲的方式,應用程式在記憶體中不具有整個資料庫,但應用程式為自資料庫服務/伺服器輸送的塊。應用程式不知道該等應用程式正在看快照而非整個資料庫。能夠確信地四處移動記憶體或解除分配記憶體允許核心/主機更好地管理記憶體且仍維護記憶體可用性之應用程式預期。
在一些實施例中,系統與除記憶體之外的其他主機位準物件或組件一起使用。舉例而言,系統可在顯示器關閉時關閉圖形處理單元(graphical processing unit;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將所提交的請求儲存於由主機管理的資料儲存器中,且分配請求組件115包括所接收的元資料及填充規格,以供隨後的記憶體管理動作使用。
記憶體引用組件120在應用程式存取記憶體之前自應用程式接收指示,該記憶體為先前提交的分配請求之主題。因為主機可使記憶體變得不可用或實際上延遲分配的記憶體直至該主機選擇為止,所以應用程式需要一種方式來確保在應用程式準備好使用記憶體時記憶體是可用的。記憶體引用組件120用於此目的且允許應用程式指示該應用程式準備好存取特定記憶體分配。作為回應,主機可將實際記憶體位置(若記憶體已可用)之指標傳遞至應用程式,或主機可基於所接收的填充規格及元資料來產生且填充記憶體(若當前未分配記憶體)。應用程式可發送解除記憶體之指示,以便主機自由地再次在記憶體管理決策中包括記憶體。
應用程式介面組件125提供在應用程式與主機之間的通訊介面,以協商記憶體分配之使用。介面可包括由應用程式使用的請求記憶體分配且指定關於分配的資訊之一或更多個函數或基本類別,以及由主機使用的使用由應用程式提供的使用者定義函數與應用程式之記憶體互 動之函數或基本類別。應用程式與主機之間增強的通訊允許主機具有比通常位準高得多的對於應用程式的記憶體使用之可見性,且應用程式與主機之間增強的通訊允許主機代表共享有限資源的各種應用程式更有效地管理記憶體。
對於未經特定構建以使用記憶體管理系統100之應用程式而言,應用程式介面組件125提供由靜態及/或動態分析決定的任何經檢測應用程式碼之間的互動,且應用程式介面組件125與主機以類似於先前論述的方式之方式互動。用未經構建以使用系統100之應用程式,系統100可具有較少關於記憶體分配之目的或其他規格的資訊,且系統100可限於系統100可經由應用程式之靜態及動態分析發現的資訊。然而,此分析仍可發現可用於更有效地管理由舊有應用程式分配的記憶體之元資料。在一些狀況下,系統100可能夠自動地偵測應用程式如何填充記憶體,且系統100可能夠在無應用程式之明顯合作的情況下執行先前描述的記憶體內容之相同種類的應需填充。
靜態分析組件130靜態地分析應用程式二進制或其他應用程式碼,以決定應用程式如何使用記憶體。組件130可分析二進制碼、中間碼(例如,MICROSOFT TM中間語言(intermediate language;IL)碼)或應用程式之其他經編譯的或可執行版本。靜態分析在過去的數年內有實質進步,且許多技術在此項技術中熟知用於決定應用程 式二進制執行何操作及應用程式二進制如何執行該操作。記憶體管理系統100使用此等技術來特別集中於應用程式分配且使用記憶體之區域。組件130可檢測應用程式二進制,以接收資訊或截取應用程式之特定動作,且組件130可用新動作或額外動作來替換經截取動作。舉例而言,若組件130發現對記憶體分配函數之調用,則組件130可收集可自靜態分析獲得的任何元資料且可調用分配函數之版本,該版本可將元資料作為參數接收。以此方式,主機自應用程式接收元資料資訊恰如應用程式由該應用程式之開發者修正,以提供此資訊。同樣,系統可決定應用程式如何填充或存取特定記憶體分配,以便可向主機提供填充規格及描述記憶體引用之資訊。
動態分析組件135動態地分析運行應用程式,以收集與應用程式之記憶體使用有關之額外資訊,該資訊難以用靜態分析決定。通常應用程式包括程式化步驟,該等程式化步驟阻礙靜態分析(故意地或者簡單地阻礙因為該等步驟就是如此)。動態分析具有可用資訊,諸如,自外部組件接收的回應之內容及由應用程式使用的記憶體之實際內容,對於該可用資訊而言,在靜態分析期間僅猜測或近似值可用。因此,動態分析可找到記憶體使用及在靜態分析期間未找到之其他應用程式活動。組件135亦可使用動態分析來確認靜態分析之結果。動態分析組件135向主機提供經決定資訊,以進一步允許舊有 應用程式有效利用由系統100提供的至少一些功能性。
主機組件140包括環境,在該環境中,應用程式運行且提供對由系統100提供的記憶體管理之存取。取決於平臺,主機可包括各種軟體實體。對於傳統的桌上型計算系統而言,主機為作業系統,該作業系統可包括核心及諸如驅動程式之其他核心模式的軟體程式碼。對於受管理的軟體環境而言,主機可包括運行時間,諸如,MICROSOFT TM.NET TM運行時間或MICROSOFT TM SILVERLIGHT TM運行時間。Web應用程式亦可包括應用程式主機,且Web應用程式可在沙箱式環境中運行,該沙箱式環境在其他伺服器或桌上型計算環境內運行。伺服器計算系統可包括虛擬化硬體或軟體,且伺服器計算系統可包括在比一或更多個作業系統核心更高位準下操作的超管理器。記憶體管理系統100可實施各種位準之軟體程式碼,且因此,記憶體管理系統100不限於任何特定類型之主機。主機組件140表示負責與應用程式互動及管理用於特定平臺的資源之組件,系統100正在該特定平臺上運行。
請求接收組件145、請求儲存組件150、分配組件155及記憶體動作組件160一起組成記憶體管理器之組件,記憶體管理器之該等組件經修正以實施本文中所描述之系統100。
請求接收組件145自應用程式接收請求,以分配記憶體。每一請求包括元資料,該元資料向主機提供描述應 用程式如何使用經分配記憶體之資訊。請求接收組件145可自在特定主機上運行的多個或所有應用程式接收請求,以便該主機具有廣泛範圍的描述如何使用記憶體之資訊。主機隨後可優先化對決定採取特定動作(例如,分頁或釋放記憶體,以減小記憶體壓力)有影響之分配。
請求儲存組件150在作出記憶體管理決策期間儲存所接收的請求及相關聯元資料資訊用於後續使用。主機在接收請求時可能滿足或可能不滿足分配請求。然而,無論主機立即滿足請求或隨後滿足請求,主機皆儲存由與分配相關聯之應用程式提供的資訊,以便主機隨後在記憶體動作適當時具有可用資訊。在一些實施例中,在應用程式具有經分配記憶體之後,主機在單獨通訊中自應用程式接收元資料及其他資訊。在此等狀況下,主機可在多個時間處或當有用資訊可用時儲存分配資訊。
分配組件155執行實際動作以分配記憶體,來滿足一或更多個接收的應用程式分配請求。分配組件155可分配來自應用程式堆或直接來自安裝於電腦系統之實體記憶體之記憶體,該電腦系統可由主機存取且由主機管理。在分配之後,記憶體專用於特定應用程式且無法由其他應用程式使用(除非其他應用程式經由典型的共享記憶體技術請求執行此操作)。分配組件155可與頁表及虛擬記憶體一起工作,以將視窗提供至用於分配之實體記憶體中,且所提供的記憶體可由磁碟或其他儲存器經由調換檔返回。
記憶體動作組件160執行動作,以在裝置上管理記憶體,且記憶體動作組件160存取先前儲存的經接收請求資訊,以決定將受所執行之動作影響的一或更多個適當的記憶體分配。動作可包括將記憶體內容調換至調換檔、釋放先前經分配記憶體、請求應用程式減小該應用程式之記憶體佔據面積或影響由一或更多個應用程式使用的記憶體之任何其他動作。通常,在執行記憶體管理動作時主機之目的為處置當前或迫近的情況,諸如,低記憶體(例如,記憶體壓力)、收集足夠記憶體以滿足應用程式需求等等。
資料儲存組件165儲存由主機使用的資訊,以代表一或更多個應用程式管理記憶體。資料儲存組件165可包括留出供系統100、單獨的快閃或磁碟儲存器或用於儲存資料之其他設施使用之記憶體。資料儲存組件165亦可包括儲存於每一應用程式之記憶體空間中的資料,該資料追蹤與彼應用程式及由主機使用的其他資訊有關之分配,以代表應用程式管理記憶體。
實施記憶體管理系統的計算裝置可包括中央處理單元、記憶體、輸入裝置(例如,鍵盤及指向裝置)、輸出裝置(例如,顯示裝置)及儲存裝置(例如,磁碟機或其他非揮發性儲存媒體)。記憶體及儲存裝置為可用電腦可執行指令(例如,軟體)編碼的電腦可讀儲存媒體,該等電腦可執行指令實施或賦能該系統。此外,資料結構及訊息結構可經由諸如通訊鏈路上的訊號之資料傳輸 媒體儲存或傳輸。可使用各種通訊鏈路,諸如,網際網路、區域網路、廣域網路、點對點撥接連接、行動電話網路等等。
系統之實施例可在各種操作環境中實施,該等操作環境包括個人電腦、伺服器電腦、手持式或膝上型裝置、多處理器系統、基於微處理器的系統、可程式化家用電子產品、數位相機、網路PCs、迷你電腦、大型電腦、包括以上系統或裝置中之任何系統或裝置的分散式計算環境、轉頻器、片上系統(systems on a chip;SOCs)等等。電腦系統可為行動電話、個人數位助理、智慧型電話、個人電腦、可程式化家用電子產品、數位相機等等。
可在藉由一或更多個電腦或其他裝置執行的電腦可執行指令(諸如,程式模組)之一般上下文中描述系統。大體而言,程式模組包括執行特定任務或實施特定抽象資料類型之常式、程式、物件、組件、資料結構等等。通常,在各種實施例中,必要時可組合或分配程式模組之功能性。
第2圖為圖示在一個實施例中,記憶體管理系統之操作環境之方塊圖。環境包括核心/主機210、一或更多個應用程式220、記憶體處置框架230、經儲存分配元資料240及一或更多個工具250。核心/主機210管理由一或更多個應用程式220共享的記憶體。記憶體處置框架230提供一或更多個APIs,應用程式220可調用該一或更多個APIs,以分配記憶體及提供記憶體分配元資料。記憶 體處置框架230儲存所接收的元資料240。工具250操作應用程式,該應用程式未經設計在本機提供分配資訊,以經由靜態及動態分析擷取此資訊。隨後將任何經擷取資訊儲存為分配元資料240。
系統操作
第3圖為圖示在一個實施例中,記憶體管理系統在軟體應用程式內請求記憶體之分配及使用的處理之流程圖。
自方塊310開始,應用程式設定分配元資料,該分配元資料描述應用程式將如何使用記憶體分配。應用程式可構建用於傳遞至分配函數之參數結構、調用用於提供分配元資料之API,或根據本文中所描述之記憶體管理系統設定用於分配記憶體之導出類別之參數。分配元資料可包括記憶體對於應用程式之優先等級、應用程式計劃有多頻繁地使用經分配記憶體、對於應用程式而言替換分配之內容有多困難,及與應用程式之記憶體使用有關的且主機可如何操縱記憶體的其他資訊,以有效地使用由多個應用程式共享之實體記憶體資源。
在方塊320中繼續,應用程式設定記憶體填充函數,該記憶體填充函數填充記憶體分配之內容。記憶體填充函數可存取來自檔案之資訊、執行一或更多個計算以產生儲存於記憶體分配中之結果或執行填充記憶體分配之其他動作。藉由向主機提供記憶體填充函數,而非就在分配之後調用該填充函數,應用程式為主機提供所需要 的資訊,以按需要解除且再填充記憶體或延緩記憶體之分配及初始填充直至對於主機而言更適當的時間為止。
在方塊330中繼續,應用程式調用由主機提供的分配介面,該主機管理在多個應用程式間共享的實體記憶體,其中應用程式經由分配介面向主機提供經設定分配元資料及記憶體填充函數。分配介面可包括作業系統API、運行時間函數或在應用程式與負責記憶體管理的主機之間傳遞資訊之其他方式。分配介面提供比現今通常在記憶體分配中提供的資訊更多之資訊,且分配介面給予主機可用於在計算裝置上更有效率地管理記憶體之資訊。
在方塊340中繼續,回應於調用分配介面,應用程式接收引用,其中引用充當間接識別符,用於由應用程式後續使用經分配記憶體。在接收請求之後主機可能立即分配記憶體或可能不立即分配記憶體。此外,主機可以某種方式不時修正記憶體(例如,解除該記憶體、將該記憶體分頁至磁碟等等),對於該等方式而言,主機需要在應用程式使用記憶體之前再次接收控制。因此,主機為應用程式提供對記憶體之引用,且在應用程式想要使用記憶體時,應用程式提供該引用,以獲得對記憶體(例如,指標)之直接存取。
在決策方塊350中繼續,若應用程式偵測到該應用程式用經分配記憶體進行,則該應用程式完成,否則該應用程式在方塊360處繼續。在完成之前,應用程式可調 用分配介面,以解除分配(或釋放)先前經分配記憶體。若應用程式不使用記憶體,且主機實際上不分配記憶體,則此動作可簡單地清除主機之與分配有關的經儲存項且將控制返回至應用程式。
在決策方塊360中繼續,若應用程式在該應用程式中偵測到經分配記憶體之使用,則該應用程式在方塊370處繼續,否則該應用程式循環至方塊350,以等待記憶體存取或記憶體分配目的之完成。無論在應用軟體程式碼中記憶體在何處被存取,應用程式皆可調用特定函數,或應用程式可將記憶體分配封裝於類別中,該類別用對主機之適當調用包裹記憶體之存取,以使記憶體變得可用。
在方塊370中繼續,應用程式請求自主機對記憶體分配的直接存取。若主機已分配記憶體,則主機將指標返回至應用程式,在該指標處可存取記憶體。若主機尚未分配記憶體或已解除分配且再使用該記憶體,則主機回應於應用程式請求而分配記憶體、調用所接收的填充函數以填充記憶體內容且隨後將指標或存取記憶體之其他構件返回至應用程式。
在方塊380中繼續,應用程式經由用於記憶體之自主機接收的位址來存取記憶體分配。應用程式可修正記憶體、讀取來自記憶體之資訊或執行其他典型的記憶體操作。當應用程式通過存取記憶體時,應用程式可向主機指示該主機可再次執行可使記憶體變得不可用之管理操 作。應用程式可更新由填充函數使用的資料,以便若主機再次再填充記憶體,則記憶體將包括最近的改變(若有)。在方塊380之後,此等步驟結束。
第4圖為圖示在一個實施例中,記憶體管理系統在主機內接收分配及使用記憶體之應用程式請求的處理之流程圖。自方塊410開始,主機自應用程式接收記憶體分配請求。主機可服務來自多個應用程式之請求,且主機可包括記憶體管理器,該記憶體管理器在主機平臺上運行的多個應用程式之間截割或共享有限的實體記憶體。記憶體分配請求可包括資訊,諸如,經請求記憶體大小或與所請求的記憶體有關之其他參數。
在方塊420中繼續,主機接收記憶體分配元資料,該記憶體分配元資料指定方式,在該方式中應用程式計劃使用經請求記憶體分配。元資料可包括資訊,諸如,記憶體分配對於應用程式之重要性或優先級、分配是否適合於分頁至磁碟、若主機必須釋放分配則應用程式是否可恢復記憶體之內容等等。
在方塊430中繼續,主機自應用程式接收記憶體填充函數,該記憶體填充函數可由主機調用,以填充經請求記憶體分配之內容。若主機需要釋放記憶體分配來滿足另一應用程式請求或減輕其他記憶體壓力,則具有填充記憶體分配之構件允許主機延緩記憶體之分配以及恢復該記憶體。
在決策方塊440中繼續,若主機決定該主機可直接回 應於請求而分配記憶體,則該主機在方塊450處繼續,否則該主機在方塊460處繼續。主機可決定是否基於應用程式所指示的記憶體對於該應用程式有多重要及應用程式計劃有多頻繁地存取記憶體,來直接分配記憶體。主機亦可考慮其他因素,諸如,在請求時運行主機的計算裝置有多忙。
在方塊450中繼續,主機分配來自對主機可用的實體記憶體之經請求記憶體。主機可設立頁表或其他虛擬記憶體,應用程式經由該等頁表或其他虛擬記憶體存取實體記憶體。傳統的主機直接回應於應用程式請求而分配記憶體或若主機無法滿足該請求則使該請求失效。然而,記憶體管理系統可延緩請求或執行其他記憶體管理動作,以更有效率地使用記憶體及其他主機資源。
在方塊460中繼續,主機儲存用於隨後分配之所接收的請求以及所接收的元資料及填充函數。主機可維持由各種應用程式請求的記憶體之資料儲存,自該資料儲存選擇何時需要記憶體管理動作(諸如,使更多記憶體變得可用)。由應用程式提供的元資料幫助主機決定哪些應用程式及應用程式內之哪些分配將最小程度地受到主機之記憶體管理動作的負面影響。在方塊460之後,此等步驟結束。
在一些狀況下,應用程式之開發者不願意或無法作出改變來支援新作業系統特徵結構。在此等狀況下,如進一步參閱第5圖及第6圖描述的,記憶體管理系統仍可 能夠藉由分析應用程式二進制資訊以發現關於記憶體分配之資訊,來提供一些增強型記憶體管理。
第5圖為圖示在一個實施例中,記憶體管理系統分析未經特定設計以提供記憶體分配資訊的應用程式之處理之流程圖。
自方塊510開始,系統偵測應用程式,用於該應用程式之描述由該應用程式進行的記憶體分配之資訊不可用。應用程式可包括旗標或關於該旗標之二進制模組的其他資訊,該旗標或其他資訊指定該應用程式是否參與由記憶體管理系統提供的記憶體模型,或應用程式可提供另一指示。系統可快取先前決定的應用程式分配資訊,以便僅執行一次對每一應用程式之分析。因此,在此步驟中,系統亦決定先前尚未執行分析。
在方塊520中繼續,系統執行關於應用程式之分析,以決定由該應用程式進行的記憶體分配。該分析可包括應用程式之各種形式的靜態及/或動態分析。靜態分析在不運行應用程式的情況下發生且檢驗應用程式之二進制碼,以決定應用程式之行為。動態分析在應用程式運行時發生且檢驗應用程式之記憶體中程式碼、資料結構及其他資訊,以決定應用程式之行為。系統可尋找對用於分配、存取且釋放記憶體之特定主機APIs之調用,且系統可註解位置、周圍的增補資訊、用以填充經分配記憶體之步驟等等。
在方塊530中繼續,系統掛鉤應用程式,以在該應用 程式內該應用程式分配記憶體之位置處提供分配資訊。可用各種形式之應用程式掛鉤技術,諸如,MICROSOFT TM Detours及其他技術,該等應用程式掛鉤技術允許應用程式二進制碼重定向,以在程式中的任何點處截取或擴充應用程式之正常行為。舉例而言,系統可提供應用程式鉤,該應用程式鉤調用用於提供分配元資料之分配函數,而非調用不具有最初由應用程式調用的元資料之標準分配函數。
在方塊540中繼續,系統自應用程式接收分配記憶體之請求及由經掛鉤應用程式碼提供的相關聯分配資訊。由主機接收請求,該主機可能夠決定分配資訊來自未經特定設計以提供分配資訊之應用程式。主機對此等應用程式之行為可不同於主機針對經設計以與該系統一起工作的應用程式之行為。舉例而言,主機可潛在地佔有由未經設計以與系統一起工作的應用程式提供之較少資訊。在一些實施例中,為鼓勵採取新記憶體模型,系統可藉由在記憶體壓力發生時,寧願將應用程式之資料調換至磁碟或執行其他記憶體管理動作,來懲罰未遵守新記憶體模型之應用程式。在方塊540之後,此等步驟結束。
第6圖為圖示在一個實施例中,靜態地分析應用程式且提供增強型記憶體資訊之貨單的處理之流程圖。
自方塊610開始,系統接收經編譯應用程式碼,該經編譯應用程式碼不提供與對記憶體分配函數的調用相關 聯之記憶體分配資訊。系統可在運行應用程式的第一請求之後、在自計算裝置之硬碟機或其他儲存器之掃描大量處理期間或回應於特定使用者或管理員請求,來接收應用程式碼。經編譯應用程式碼可包括用於特定處理器之二進制碼(例如,x86或x64二進制碼)、用於特定運行時間之中間語言碼或其他形式之非源應用程式碼。在源可用的情況下,應用程式可經直接修正以使用本文中其他處所描述之系統。
在方塊620中繼續,系統對經接收應用程式碼執行靜態分析,以在程式碼內決定應用程式分配記憶體之位置。靜態分析可(諸如)經由導入模組或其他構件尋找對記憶體分配函數之調用。靜態分析擅長尋找對函數以及在一些狀況下被傳遞的參數之調用。在一些實施例中,系統用動態分析擴充靜態分析,且系統運行應用程式,以識別靜態不可用或可容易靜態地偵測之資訊。
在方塊630中繼續,系統在經分析應用程式碼中識別一或更多個與記憶體相關的程式碼動作。程式碼動作可包括記憶體分配、記憶體存取、記憶體解除及其他記憶體操作。系統可藉由動作發生之位址來識別程式碼動作,或藉由隨後可向主機提供或隨後可經修正以改變預設應用程式行為之其他識別來識別程式碼動作。
在方塊640中繼續,系統識別與每一經識別程式碼動作有關之周圍資訊,該周圍資訊提供描述經分配記憶體如何由應用程式使用之額外資訊。周圍資訊可識別系統 儲存分配多久(例如,在相同函數中使用一次或儲存於全局變數中用於重複的後續使用)、應用程式填充記憶體分配之內容有多容易等等。周圍資訊可經由靜態及/或動態分析識別。
在方塊650中繼續,系統在執行運行程式之後,在資料儲存器中儲存經識別的與記憶體相關之程式碼動作及任何經識別周圍資訊,用於由主機後續擷取。在一些實施例中,系統在用應用程式模組儲存的貨單中儲存經識別資訊,以便載入應用程式之主機可執行經識別位置之任何截取或掛鉤,以向主機提供描述由應用程式進行的記憶體分配之更多資訊。主機可使用此資訊(例如)以在系統閒置或利用不足時佔先分配藉由分析決定的、應用程式在未來某一時間將需要的記憶體。此舉允許舊有應用程式參與由記憶體管理系統提供的記憶體模型。在方塊650之後,此等步驟結束。
第7圖為圖示在一個實施例中,記憶體管理系統回應於經偵測記憶體壓力而採取與記憶體有關之動作的處理之流程圖。記憶體壓力可在具有有限記憶體之裝置接近該裝置之可用記憶體時發生。舉例而言,系統作業系統可將記憶體壓力定義為在已使用90%實體RAM時發生。
自方塊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‧‧‧方塊
320‧‧‧方塊
330‧‧‧方塊
340‧‧‧方塊
350‧‧‧決策方塊
360‧‧‧決策方塊
370‧‧‧方塊
380‧‧‧方塊
410‧‧‧方塊
420‧‧‧方塊
430‧‧‧方塊
440‧‧‧決策方塊
450‧‧‧方塊
460‧‧‧方塊
510‧‧‧方塊
520‧‧‧方塊
530‧‧‧方塊
540‧‧‧方塊
610‧‧‧方塊
620‧‧‧方塊
630‧‧‧方塊
640‧‧‧方塊
650‧‧‧方塊
710‧‧‧方塊
720‧‧‧方塊
730‧‧‧方塊
740‧‧‧方塊
750‧‧‧方塊
810‧‧‧方塊
820‧‧‧方塊
830‧‧‧方塊
840‧‧‧方塊
850‧‧‧方塊
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所述之方法,其中偵測該應用程式之步驟包含以下步驟:決定先前經快取應用程式分配資訊是否可用。
  4. 如請求項1所述之方法,其中執行分析之步驟包含以下步驟:對該應用程式應用靜態二進制分析,以在一應用程式二進制模組中識別與記憶體相關之行為。
  5. 如請求項1所述之方法,其中執行分析之步驟包含以下步驟:對該應用程式應用動態分析,以在該應用程式之運行時間時識別與記憶體相關之行為。
  6. 如請求項1所述之方法,其中執行分析之步驟包含以下步驟:識別對一或更多個特定主機應用程式介面(APIs)之調用,以分配、存取或釋放記憶體。
  7. 如請求項1所述之方法,其中執行分析之步驟包含以下步驟:在該應用程式碼之與記憶體相關的區域附近識別分配元資料。
  8. 如請求項1所述之方法,其中掛鉤該應用程式之步驟包含以下步驟:重定向應用程式二進制碼,以在該應用程式碼中的某一點處截取或擴充一應用程式之正常的與記憶體相關之行為。
  9. 如請求項1所述之方法,其中掛鉤該應用程式之步驟包含以下步驟:提供一應用程式鉤,該應用程式鉤調用用於提供分配元資料之一分配函數,而非調用不具有最初 由該應用程式調用的元資料之一標準分配函數。
  10. 如請求項1所述之方法,其中接收該分配請求之步驟包含以下步驟:由一主機接收該請求可決定該分配資訊來自一應用程式,該應用程式未經特定設計以提供分配資訊。
  11. 一種用於向一應用程式主機提供對於一軟體應用程式內記憶體之分配及使用的更多控制之電腦系統,該軟體應用程式未經設計以提供分配資訊,該系統包含:一處理器及記憶體,該處理器及記憶體經配置以執行實施於以下組件內的軟體指令;一應用程式介面組件,該應用程式介面組件提供該應用程式與一主機之間的一通訊介面,以協商記憶體分配之管理;一靜態分析組件,該靜態分析組件靜態地分析一應用程式二進制或其他應用程式碼,以決定該應用程式如何使用記憶體;一動態分析組件,該動態分析組件動態地分析一運行應用程式,以收集與該應用程式之記憶體使用有關之額外資訊;以及一主機組件,該主機組件包括一環境,在該環境中該應用程式運行且提供對由該系統提供的一記憶體管理器之存取,其中該靜態分析組件及動態分析組件向該主機提供 應用程式記憶體使用率資訊。
  12. 如請求項11所述之系統,其中該應用程式介面組件包括由該應用程式使用的請求記憶體分配及指定關於該等分配的資訊之一或更多個函數或基本類別,以及由該主機使用的使用由該應用程式提供的使用者定義函數與該應用程式之記憶體互動之函數或基本類別。
  13. 如請求項11所述之系統,其中該應用程式介面組件提供由靜態及/或動態分析決定的經檢測應用程式碼之間的互動,且該應用程式介面組件與該主機互動,以提供分配資訊。
  14. 如請求項11所述之系統,其中該靜態分析組件分析二進制碼、中間碼或一應用程式之其他經編譯或可運行版本。
  15. 如請求項11所述之系統,其中該靜態分析組件檢測該應用程式二進制,以接收資訊或截取該應用程式之特定的與記憶體相關之動作。
  16. 如請求項11所述之系統,其中該靜態分析組件在發現對一記憶體分配函數之一調用之後,收集可自靜態分析獲得的元資料且向該主機組件提供該元資料。
  17. 如請求項11所述之系統,其中該靜態分析組件決定該應用程式如何填充且存取一特定記憶體分配,且該靜態分析組件向該主機提供一填充規格及描述對該分配之一引用之資訊。
  18. 如請求項11所述之系統,其中該動態分析組件找到在靜態分析期間未找到之該應用程式之記憶體使用。
  19. 如請求項11所述之系統,其中該動態分析組件確認靜態分析之結果。
  20. 一種電腦可讀儲存媒體,該電腦可讀儲存媒體包含用於控制一電腦系統靜態地或動態地分析一應用程式且向一主機提供增強型記憶體資訊之一貨單之指令,其中該等指令在執行之後使一處理器執行動作,該等動作包含:接收經編譯應用程式碼,該經編譯應用程式碼不提供與對記憶體分配函數的調用相關聯之記憶體分配資訊;對該經接收應用程式碼執行靜態及/或動態分析,以在該程式碼內決定該應用程式分配或使用記憶體之位置;在該經分析應用程式碼中識別一或更多個與記憶體相關之程式碼動作;識別與每一經識別程式碼動作有關之周圍資訊,該周圍資訊提供描述該經分配記憶體如何由該應用程式使用之額 外資訊;以及在執行該應用程式之後,在一資料儲存器中儲存該等經識別的與記憶體相關之程式碼動作及任何經識別周圍資訊,用於由一主機後續擷取。
TW101114220A 2011-06-20 2012-04-20 用於分析未經特定設計以提供記憶體分配資訊之應用程式及擷取記憶體分配資訊的方法、及其電腦系統和電腦可讀儲存媒體 TWI539280B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/163,745 US9785470B2 (en) 2011-06-20 2011-06-20 Memory management model and interface for unmodified applications

Publications (2)

Publication Number Publication Date
TW201301033A true TW201301033A (zh) 2013-01-01
TWI539280B TWI539280B (zh) 2016-06-21

Family

ID=47354693

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101114220A TWI539280B (zh) 2011-06-20 2012-04-20 用於分析未經特定設計以提供記憶體分配資訊之應用程式及擷取記憶體分配資訊的方法、及其電腦系統和電腦可讀儲存媒體

Country Status (8)

Country Link
US (1) US9785470B2 (zh)
EP (1) EP2721483A4 (zh)
JP (1) JP5980916B2 (zh)
KR (1) KR101976221B1 (zh)
CN (1) CN103635876B (zh)
AR (1) AR086711A1 (zh)
TW (1) TWI539280B (zh)
WO (1) WO2012177577A2 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI699649B (zh) * 2015-05-07 2020-07-21 南韓商三星電子股份有限公司 資料儲存方法、記憶體模組以及資料儲存系統

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9218206B2 (en) 2011-06-20 2015-12-22 Microsoft Technology Licensing, Llc Memory management model and interface for new applications
US8627036B2 (en) 2011-09-12 2014-01-07 Microsoft Corporation Memory management techniques
JP2014149606A (ja) * 2013-01-31 2014-08-21 Fujitsu Ltd 資源使用量集計プログラム、資源使用量集計方法及び資源使用量集計装置
US9235505B2 (en) * 2013-05-17 2016-01-12 Ab Initio Technology Llc Managing memory and storage space for a data operation
US20140372988A1 (en) * 2013-06-14 2014-12-18 Microsoft Corporation Using a Static Analysis for Configuring a Follow-On Dynamic Analysis for the Evaluation of Program Code
WO2015002657A1 (en) * 2013-07-05 2015-01-08 Nokia Solutions And Networks Oy Collective over-the -top application policy administration
US9760417B2 (en) 2014-03-10 2017-09-12 Microsoft Technology Licensing, Llc Application dehydration and rehydration during application-to-application calls
US9557917B2 (en) * 2014-11-10 2017-01-31 International Business Machines Corporation Conditional stack frame allocation
CN104866237A (zh) * 2015-05-08 2015-08-26 深圳市金立通信设备有限公司 一种终端
KR102303417B1 (ko) * 2015-06-19 2021-09-23 삼성전자주식회사 복수의 운영 체제를 지원하는 전자 장치 제어 방법
GB2554083A (en) * 2016-09-16 2018-03-28 Siemens Rail Automation Holdings Ltd Method for operating a computer, method for controlling a railway network and computer program product
US11194556B1 (en) * 2021-05-11 2021-12-07 Apex.AI, Inc. Deterministic memory allocation for real-time applications

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3574498B2 (ja) 1995-04-27 2004-10-06 富士通株式会社 データ処理装置
JPH10269105A (ja) 1997-01-27 1998-10-09 N T T Data Tsushin Kk トレースシステム、リソース解放漏れ検出システム及び記録媒体
US6023712A (en) * 1997-07-30 2000-02-08 Quarterdeck Corporation Method and apparatus for brokering memory resources
DE69801332T2 (de) 1997-09-25 2002-05-23 British Telecomm Speicherzuordnung
US6742148B1 (en) 2000-03-06 2004-05-25 Pc-Doctor Inc. System and method for testing memory while an operating system is active
US7036118B1 (en) * 2001-12-20 2006-04-25 Mindspeed Technologies, Inc. System for executing computer programs on a limited-memory computing machine
JP2003241967A (ja) 2002-02-15 2003-08-29 Matsushita Electric Ind Co Ltd プログラム実行装置およびその方法、並びにそこで実行されるプログラム
US6965978B2 (en) * 2003-05-15 2005-11-15 Microsoft Corporation Memory tracking tool
US20050108562A1 (en) * 2003-06-18 2005-05-19 Khazan Roger I. Technique for detecting executable malicious code using a combination of static and dynamic analyses
US7293259B1 (en) 2003-09-02 2007-11-06 Sun Microsystems, Inc. Dynamically configuring selected methods for instrument-based profiling at application run-time
US8381037B2 (en) * 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7805509B2 (en) * 2004-06-04 2010-09-28 Optier Ltd. System and method for performance management in a multi-tier computing environment
GB2421096A (en) * 2004-12-10 2006-06-14 Hewlett Packard Development Co Determining a memory allocation algorithm in dependence on a memory allocation pattern for a process
US20060149914A1 (en) * 2004-12-30 2006-07-06 Doris Tom F Systems and methods for allocating data structures to memories
WO2006104407A1 (en) * 2005-03-28 2006-10-05 Intel Corporation A platform independent binary instrumentation method
US7912877B2 (en) 2005-05-20 2011-03-22 Microsoft Corporation Leveraging garbage collection to dynamically infer heap invariants
US7441094B2 (en) * 2005-07-05 2008-10-21 Microsoft Corporation Memory management configuration
US7434105B1 (en) * 2005-11-07 2008-10-07 Symantec Operating Corporation Selective self-healing of memory errors using allocation location information
US7552306B2 (en) 2005-11-14 2009-06-23 Kabushiki Kaisha Toshiba System and method for the sub-allocation of shared memory
US7975257B2 (en) 2006-06-13 2011-07-05 Microsoft Corporation Iterative static and dynamic software analysis
US7895579B2 (en) 2006-06-16 2011-02-22 Microsoft Corporation Automated method and system for collecting and reporting API performance profiles
US10353797B2 (en) 2006-12-29 2019-07-16 International Business Machines Corporation Using memory tracking data to inform a memory map tool
US7827358B2 (en) 2007-01-07 2010-11-02 Apple Inc. Memory management methods and systems
US8812809B2 (en) * 2008-06-10 2014-08-19 Oracle America, Inc. Method and apparatus for allocating memory for immutable data on a computing device
EP2329389A4 (en) * 2008-08-13 2013-02-27 ENHANCING THE PERFORMANCE OF A SOFTWARE APPLICATION

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI699649B (zh) * 2015-05-07 2020-07-21 南韓商三星電子股份有限公司 資料儲存方法、記憶體模組以及資料儲存系統

Also Published As

Publication number Publication date
EP2721483A2 (en) 2014-04-23
CN103635876B (zh) 2018-01-02
WO2012177577A2 (en) 2012-12-27
US9785470B2 (en) 2017-10-10
US20120324197A1 (en) 2012-12-20
AR086711A1 (es) 2014-01-15
KR20140033448A (ko) 2014-03-18
KR101976221B1 (ko) 2019-05-07
JP5980916B2 (ja) 2016-08-31
TWI539280B (zh) 2016-06-21
JP2014523022A (ja) 2014-09-08
CN103635876A (zh) 2014-03-12
EP2721483A4 (en) 2016-10-19
WO2012177577A3 (en) 2013-02-21

Similar Documents

Publication Publication Date Title
TWI539280B (zh) 用於分析未經特定設計以提供記憶體分配資訊之應用程式及擷取記憶體分配資訊的方法、及其電腦系統和電腦可讀儲存媒體
TWI574202B (zh) 用於新應用程式之記憶體管理模型與介面
US9558040B2 (en) Memory manager with enhanced application metadata
US11106579B2 (en) System and method to manage and share managed runtime memory for java virtual machine
RU2569805C2 (ru) Виртуальная архитектура неоднородной памяти для виртуальных машин
US9501313B2 (en) Resource management and allocation using history information stored in application&#39;s commit signature log
CN110447019B (zh) 存储器分配管理器及由其执行的用于管理存储器分配的方法
CN106547603B (zh) 减少golang语言系统垃圾回收时间的方法和装置
US20230266992A1 (en) Processor for managing resources using dual queues, and operating method thereof

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees