两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于新應(yīng)用的存儲(chǔ)器管理模型和接口的制作方法

文檔序號(hào):6495641閱讀:258來源:國知局
用于新應(yīng)用的存儲(chǔ)器管理模型和接口的制作方法
【專利摘要】本文描述了一種存儲(chǔ)器管理系統(tǒng),它從各應(yīng)用接收描述存儲(chǔ)器正被如何使用的信息并且允許應(yīng)用主機(jī)對(duì)使用存儲(chǔ)器的應(yīng)用請(qǐng)求施加更多控制。該系統(tǒng)提供應(yīng)用存儲(chǔ)器管理應(yīng)用編程接口(API),該API允許應(yīng)用指定與存儲(chǔ)器分配有關(guān)的有助于稍后管理存儲(chǔ)器的更多信息。該系統(tǒng)還提供以下能力:靜態(tài)地和/或動(dòng)態(tài)地分析傳統(tǒng)應(yīng)用以便向未被修改成與該系統(tǒng)一起工作的各應(yīng)用給予參與更有效的存儲(chǔ)器管理的一些能力。該系統(tǒng)提供應(yīng)用主機(jī)改變以利用各應(yīng)用所提供的信息并使用該信息和該應(yīng)用的存儲(chǔ)器使用中的掛鉤來更有效地管理存儲(chǔ)器。由此,該系統(tǒng)提供用于管理存儲(chǔ)器的新模型,它改進(jìn)了應(yīng)用主機(jī)行為并允許各應(yīng)用更有效地使用計(jì)算資源。
【專利說明】用于新應(yīng)用的存儲(chǔ)器管理模型和接口[0001]背景[0002]計(jì)算機(jī)系統(tǒng)中的存儲(chǔ)器管理指的是多個(gè)應(yīng)用和操作系統(tǒng)對(duì)存儲(chǔ)器的使用達(dá)成一 致的方式。雖然每一計(jì)算機(jī)系統(tǒng)具有固定量的物理隨機(jī)存取存儲(chǔ)器(RAM)或其他存儲(chǔ)器, 但操作系統(tǒng)可向各應(yīng)用和各操作系統(tǒng)組件呈現(xiàn)表示與物理存儲(chǔ)器不同的存儲(chǔ)器大小的虛 擬存儲(chǔ)器。在一些情況下,虛擬存儲(chǔ)器允許操作系統(tǒng)約束每一應(yīng)用訪問存儲(chǔ)器的特定部分 以阻止一個(gè)應(yīng)用通過無意地或有意地修改另一應(yīng)用的存儲(chǔ)器來干擾該另一應(yīng)用的操作。操 作系統(tǒng)一般提供用于響應(yīng)于應(yīng)用和操作系統(tǒng)組件請(qǐng)求來分配并釋放存儲(chǔ)器的一個(gè)或多個(gè) 功能。操作系統(tǒng)可向應(yīng)用提供存儲(chǔ)器池,該應(yīng)用可從該池中分配存儲(chǔ)器塊。如果一應(yīng)用使 用或者一組應(yīng)用一起使用比所安裝的物理存儲(chǔ)器的量更多的虛擬存儲(chǔ)器,則操作系統(tǒng)可以 在被稱為分頁或盤交換(即,向盤存儲(chǔ)和從中取回存儲(chǔ)器的各頁)的過程中使用較慢的基于 盤的存儲(chǔ)來通過交換文件擴(kuò)展存儲(chǔ)器的外觀大小。[0003]除了所提供的分配和釋放功能之外,操作系統(tǒng)具有對(duì)各應(yīng)用如何使用存儲(chǔ)器的非 常少的洞察。許多計(jì)算設(shè)備包含圍繞存儲(chǔ)器的特定限制。例如,移動(dòng)計(jì)算設(shè)備可包括與在 臺(tái)式計(jì)算機(jī)系統(tǒng)上通??捎玫拇鎯?chǔ)器量相比小得多的存儲(chǔ)器量(或系統(tǒng)可能想要解除某存 儲(chǔ)器的動(dòng)力以降低能耗),從而對(duì)該設(shè)備造成與多少應(yīng)用可同時(shí)運(yùn)行、每一應(yīng)用可請(qǐng)求/消 費(fèi)多少存儲(chǔ)器等等有關(guān)的限制。在特定計(jì)算系統(tǒng)內(nèi)主存應(yīng)用代碼的其他計(jì)算環(huán)境也可對(duì)該 環(huán)境的存儲(chǔ)器使用施加限制或上限。主機(jī),如VMware和MICROSOFT TM虛擬PC、系統(tǒng)管理程 序、操作系統(tǒng)以及其他,可被分配有限的資源。在所有這些情況中,有效的存儲(chǔ)器管理變得 更加引人注目。[0004]新計(jì)算平臺(tái)引入新技術(shù)或重新要求舊技術(shù)來解決各應(yīng)用之間共享的有限存儲(chǔ)器 的問題。例如,移動(dòng)電話操作系統(tǒng)可以創(chuàng)建每一應(yīng)用的存儲(chǔ)器快照,使得在該應(yīng)用不在前臺(tái) (例如,被主動(dòng)使用)時(shí),操作系統(tǒng)將它關(guān)閉并將該應(yīng)用的存儲(chǔ)器的鏡像儲(chǔ)存在較慢存儲(chǔ)上 (例如,閃存或其他存儲(chǔ))。在該應(yīng)用被選擇時(shí),操作系統(tǒng)將所存儲(chǔ)的鏡像重新加載到存儲(chǔ)器 并開始該應(yīng)用。該應(yīng)用可能甚至不知道它被關(guān)閉過。雖然這些技術(shù)是有用的,但操作系統(tǒng) 然而將遭受該應(yīng)用對(duì)使用存儲(chǔ)器的不透明請(qǐng)求的損害。當(dāng)前做出的與動(dòng)態(tài)存儲(chǔ)器使用有關(guān) 的大多數(shù)決策是基于在運(yùn)行時(shí)期間找到的信息來做出的。這樣的信息的示例包括對(duì)所分配 的存儲(chǔ)器段的引用的大小和數(shù)量。這一信息隨后可被用來確定哪些分配將被分頁到盤,被 高速緩存到高性能存儲(chǔ)器,或被某種自動(dòng)存儲(chǔ)器管理系統(tǒng)來釋放。不幸的是,任何平臺(tái)都受 到可能許多年的傳統(tǒng)應(yīng)用的限制,所以在與存儲(chǔ)器管理一樣寬廣的區(qū)域中采用新模型是困 難的。[0005]概述[0006]本文描述了一種存儲(chǔ)器管理系統(tǒng),它從各應(yīng)用接收描述存儲(chǔ)器正被如何使用的信 息并且允許應(yīng)用主機(jī)對(duì)使用存儲(chǔ)器的應(yīng)用請(qǐng)求施加更多控制。當(dāng)今,除了應(yīng)用已做出了多 少存儲(chǔ)器請(qǐng)求和每一請(qǐng)求所請(qǐng)求的存儲(chǔ)器大小之外,應(yīng)用主機(jī)對(duì)該應(yīng)用的存儲(chǔ)器使用知之 甚少。然而,應(yīng)用主機(jī)不知道每一存儲(chǔ)器分配的目的,哪些存儲(chǔ)器分配將被很快使用,在應(yīng) 用主機(jī)需要更多存儲(chǔ)器的情況下哪些存儲(chǔ)器分配將被容易地重新創(chuàng)建,哪些存儲(chǔ)器分配暫時(shí)不會(huì)被使用并且因此可被分頁到盤而不影響該應(yīng)用的性能,等等。不幸的是,雖然應(yīng)用主機(jī)的任務(wù)是做出這些類型的決策,但應(yīng)用擁有與有效做出這些決策有關(guān)的最多信息。
[0007]存儲(chǔ)器管理系統(tǒng)用若干方式克服了這些問題。首先,該系統(tǒng)提供應(yīng)用存儲(chǔ)器管理應(yīng)用編程接口(API),該API允許該應(yīng)用指定與存儲(chǔ)器分配有關(guān)的有助于稍后管理存儲(chǔ)器的更多信息。該API還可向應(yīng)用主機(jī)提供通知該應(yīng)用何時(shí)需要存儲(chǔ)器以及在需要時(shí)在沒有應(yīng)用交互的情況下?lián)屜柔尫挪⒅匦聞?chuàng)建存儲(chǔ)器分配的能力。其次,該系統(tǒng)提供以下能力:靜態(tài)地和/或動(dòng)態(tài)地分析傳統(tǒng)應(yīng)用以便向未被修改成與該系統(tǒng)一起工作的各應(yīng)用給予參與更有效的存儲(chǔ)器管理的某種能力。第三,該系統(tǒng)提供應(yīng)用主機(jī)改變以利用各應(yīng)用所提供的信息并使用該信息和該應(yīng)用的存儲(chǔ)器使用中的掛鉤(hook)來更有效地管理存儲(chǔ)器。由此,本存儲(chǔ)器管理系統(tǒng)提供用于管理存儲(chǔ)器的新模型,它改進(jìn)了應(yīng)用主機(jī)行為并潛在地允許各應(yīng)用更高效地使用計(jì)算資源。
[0008]提供本概述是為了以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的選擇的概念。本概述并不旨在標(biāo)識(shí)所要求保護(hù)主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)主題的范圍。
[0009]附圖簡(jiǎn)述
[0010]圖1是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)的各組件的框圖。
[0011]圖2是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)的操作環(huán)境的框圖。
[0012]圖3是示出在一個(gè)實(shí)施例中的軟件應(yīng)用內(nèi)的存儲(chǔ)器管理系統(tǒng)請(qǐng)求分配和使用存儲(chǔ)器的處理的流程圖。
[0013]圖4是示出在一個(gè)實(shí)施例中的主機(jī)內(nèi)的存儲(chǔ)器管理系統(tǒng)接收分配和使用存儲(chǔ)器的應(yīng)用請(qǐng)求的處理的流程圖。
[0014]圖5是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)分析未被專門設(shè)計(jì)成提供存儲(chǔ)器分配信息的應(yīng)用的處理的流程圖。
[0015]圖6是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)靜態(tài)地分析應(yīng)用并提供增強(qiáng)的存儲(chǔ)器信息的清單的處理的流程圖。
[0016]圖7是示出一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)響應(yīng)于檢測(cè)到的存儲(chǔ)器壓力來采取與存儲(chǔ)器有關(guān)的動(dòng)作的處理的流程圖。
[0017]圖8是示出一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)激活其存儲(chǔ)器先前已被主機(jī)修改的應(yīng)用的處理的流程圖。
[0018]詳細(xì)描述
[0019]本文描述了一種存儲(chǔ)器管理系統(tǒng),它從各應(yīng)用接收描述存儲(chǔ)器正被如何使用的信息并且允許應(yīng)用主機(jī)對(duì)使用存儲(chǔ)器的應(yīng)用請(qǐng)求施加更多控制。當(dāng)今,除了應(yīng)用已做出了多少存儲(chǔ)器請(qǐng)求和每一請(qǐng)求所請(qǐng)求的存儲(chǔ)器大小之外,應(yīng)用主機(jī)對(duì)該應(yīng)用的存儲(chǔ)器使用知之甚少。然而,應(yīng)用主機(jī)不知道每一存儲(chǔ)器分配的目的,哪些存儲(chǔ)器分配將被很快使用,在應(yīng)用主機(jī)需要更多存儲(chǔ)器的情況下哪些存儲(chǔ)器分配將被容易地重新創(chuàng)建,哪些存儲(chǔ)器分配暫時(shí)不會(huì)被使用并且因此可被分頁到盤而不影響該應(yīng)用的性能,等等。不幸的是,雖然應(yīng)用主機(jī)的任務(wù)是做出這些類型的決策,但應(yīng)用擁有與有效做出這些決策有關(guān)的最多信息。這一沖突當(dāng)今是通過應(yīng)用主機(jī)提供基本水平的功能并猜測(cè)要采取哪些動(dòng)作來解決的。在許多情況下,應(yīng)用主機(jī)可能恰好在應(yīng)用需要存儲(chǔ)器之前將該存儲(chǔ)器分頁到盤,或者應(yīng)用主機(jī)可能花費(fèi)大量努力來管理對(duì)應(yīng)用不重要的存儲(chǔ)器。[0020]本存儲(chǔ)器管理系統(tǒng)用本文進(jìn)一步討論的若干方式克服了這些問題。首先,該系統(tǒng) 提供應(yīng)用存儲(chǔ)器管理應(yīng)用編程接口(API),該API允許該應(yīng)用指定與存儲(chǔ)器分配有關(guān)的有 助于稍后管理存儲(chǔ)器的更多信息。該API還可向應(yīng)用主機(jī)提供通知該應(yīng)用何時(shí)需要存儲(chǔ)器 以及在需要時(shí)在沒有應(yīng)用的交互的情況下?lián)屜柔尫挪⒅匦聞?chuàng)建存儲(chǔ)器分配的能力。其次, 該系統(tǒng)提供以下能力:靜態(tài)地和/或動(dòng)態(tài)地分析傳統(tǒng)應(yīng)用以便向未被修改成與該系統(tǒng)一起 工作的各應(yīng)用給予參與更有效的存儲(chǔ)器管理的某種能力。第三,該系統(tǒng)提供內(nèi)核級(jí)操作系 統(tǒng)(或主機(jī))改變以利用各應(yīng)用所提供的信息并使用該信息和該應(yīng)用的存儲(chǔ)器使用中的掛 鉤來更有效地管理存儲(chǔ)器。因而,本存儲(chǔ)器管理系統(tǒng)提供用于管理存儲(chǔ)器的新模型,它改進(jìn) 了應(yīng)用主機(jī)行為并潛在地允許各應(yīng)用更高效地使用計(jì)算資源。如本文所描述的,應(yīng)用主機(jī) 可指的是執(zhí)行應(yīng)用的操作系統(tǒng)或另一類型的主機(jī)(例如,本身在操作系統(tǒng)上或虛擬化子系 統(tǒng)上運(yùn)行的應(yīng)用),如SILVERLIGHT TM、.NET所提供的運(yùn)行時(shí),本機(jī)Win32主機(jī),或VMware 和虛擬PC所提供的其他主機(jī)或虛擬機(jī)。以上介紹的這三個(gè)區(qū)域中的每一個(gè)在以下各節(jié)中 進(jìn)一步詳細(xì)描述。[0021]經(jīng)修改的應(yīng)用[0022]在許多情況下,軟件開發(fā)人員修改軟件應(yīng)用以與存儲(chǔ)器管理系統(tǒng)進(jìn)行交互是可能 的。對(duì)于主動(dòng)開發(fā)的應(yīng)用,軟件開發(fā)人員可選擇采用存儲(chǔ)器管理系統(tǒng)來獲得它所提供的益 處,或可由該應(yīng)用在其上操作的特定平臺(tái)來托管以采用存儲(chǔ)器管理系統(tǒng)。在許多情況下,應(yīng) 用可能保持該應(yīng)用不太可能使用的所分配的存儲(chǔ)器。例如,在用戶從該應(yīng)用的用戶界面的 一部分轉(zhuǎn)移到另一部分時(shí),該應(yīng)用可常常保持來自先前界面的信息以防用戶重新訪問該界 面。當(dāng)今,該存儲(chǔ)器只在需要時(shí)被主機(jī)視作其它主動(dòng)使用的存儲(chǔ)器。存儲(chǔ)器管理系統(tǒng)提供 了供應(yīng)用將諸如此類情形通知給主機(jī)以使得這類存儲(chǔ)器可被降低優(yōu)先級(jí)的方式。作為響 應(yīng),主機(jī)可將這類存儲(chǔ)器選為分頁的良好候選或做出由于來自應(yīng)用的添加的信息而更高效 的其它存儲(chǔ)器管理決策。[0023]在一些實(shí)施例中,存儲(chǔ)器管理系統(tǒng)提供應(yīng)用編程模型或框架,該應(yīng)用編程模型或 框架使存儲(chǔ)器管理器能夠做出關(guān)于優(yōu)化運(yùn)行時(shí)期間的存儲(chǔ)器使用的智能決策。這可通過利 用接收用于分配和填充被指定給應(yīng)用請(qǐng)求的任何給定存儲(chǔ)器對(duì)象的存儲(chǔ)器分配的元數(shù)據(jù) 和動(dòng)作兩者的應(yīng)用編程模型/框架來完成。元數(shù)據(jù)提供應(yīng)用想要傳遞給主機(jī)的描述存儲(chǔ)器 分配的特性或目的的信息,諸如存儲(chǔ)器的優(yōu)先級(jí)、正被分配的存儲(chǔ)器的數(shù)量、從頭重新創(chuàng)建 存儲(chǔ)器內(nèi)容的容易度(例如,這些內(nèi)容可以從文件加載或者可由算法來計(jì)算)、訪問頻率、應(yīng) 用可能多久以后使用存儲(chǔ)器,等等。用于分配和填充存儲(chǔ)器的動(dòng)作可以向主機(jī)提供足夠的 信息以使得能夠釋放并且隨后應(yīng)應(yīng)用的請(qǐng)求重新創(chuàng)建被釋放的存儲(chǔ)器。通過允許開發(fā)者指 定用于填充存儲(chǔ)器的元數(shù)據(jù)和動(dòng)作,存儲(chǔ)器管理系統(tǒng)能夠優(yōu)化與應(yīng)用所指定的所需使用一 致的存儲(chǔ)器使用。[0024]存儲(chǔ)器管理系統(tǒng)提供給應(yīng)用的API為應(yīng)用開發(fā)者提供了一種通過應(yīng)用框架或編 程模型來指定描述對(duì)存儲(chǔ)器分配的使用的元數(shù)據(jù)的手段。另外,該API允許應(yīng)用框架規(guī)定 開發(fā)者利用標(biāo)準(zhǔn)手段來通過公知的功能填充或修改存儲(chǔ)器。這允許存儲(chǔ)器管理系統(tǒng)出于性 能原因或出于其它目的不失時(shí)機(jī)地填充存儲(chǔ)器,以便在低存儲(chǔ)器可用性時(shí)段期間(即,在釋 放存儲(chǔ)器的機(jī)會(huì)成本大于稍后重新分配和重新填充存儲(chǔ)器的成本時(shí))釋放存儲(chǔ)器。[0025]優(yōu)化存儲(chǔ)器使用可涵蓋本領(lǐng)域內(nèi)已知的許多技術(shù),但將一般意味著為了性能或大小而優(yōu)化。在性能的情況下,優(yōu)化可能意味著在填充存儲(chǔ)器的手段可用的情況下允許進(jìn)行尚不需要的存儲(chǔ)器分配。這在當(dāng)前CPU使用率較低且應(yīng)用空閑的情況下可以是合乎需要的。在某些情況下,應(yīng)用分配存儲(chǔ)器的請(qǐng)求可變成筆記,主機(jī)存儲(chǔ)該筆記以供將來參考,而不在此時(shí)進(jìn)行任何分配。隨后,當(dāng)應(yīng)用通過API請(qǐng)求使用存儲(chǔ)器時(shí)或者在主機(jī)確定滿足該請(qǐng)求的合適時(shí)間時(shí),存儲(chǔ)器管理系統(tǒng)實(shí)際分配所請(qǐng)求的存儲(chǔ)器。在大小的情況下,優(yōu)化可能意味著減少存儲(chǔ)器占用或基于當(dāng)前分配的存儲(chǔ)器和未來存儲(chǔ)器需求來做出決策。
[0026]應(yīng)用和主機(jī)之間的實(shí)際接口可采取本領(lǐng)域內(nèi)的普通技術(shù)人員將會(huì)認(rèn)識(shí)到的各種形式。例如,應(yīng)用可以為每一種類型的分配提供分配函數(shù)并在分配請(qǐng)求中向主機(jī)傳遞針對(duì)該分配的指針或引用。當(dāng)主機(jī)準(zhǔn)備好執(zhí)行分配時(shí),主機(jī)調(diào)用所提供的分配函數(shù)并且應(yīng)用使用常規(guī)存儲(chǔ)器分配函數(shù)來創(chuàng)建存儲(chǔ)器。類似地,應(yīng)用可傳遞對(duì)其它函數(shù)的引用以使得主機(jī)能夠請(qǐng)求釋放存儲(chǔ)器、移動(dòng)存儲(chǔ)器、將存儲(chǔ)器內(nèi)容切換至不同類型的存儲(chǔ),等等。相同的概念還可用于分配,當(dāng)應(yīng)用向操作系統(tǒng)請(qǐng)求存儲(chǔ)器時(shí),操作系統(tǒng)可基于多個(gè)因素來延遲分配。當(dāng)操作系統(tǒng)準(zhǔn)備好分配時(shí),(用所分配的存儲(chǔ)器)回調(diào)函數(shù)引用或者引發(fā)一事件(或類似機(jī)制)。該接口還可接收元數(shù)據(jù),諸如存儲(chǔ)其大小(可以不同于所請(qǐng)求的大小)、優(yōu)先級(jí)、高速緩存偏好、可分頁性、如何填充存儲(chǔ)器、對(duì)存儲(chǔ)器的依賴或引用、是否更新存儲(chǔ)器,等等。在一些實(shí)施例中,系統(tǒng)提供分配從中導(dǎo)出以定義每一種類型的存儲(chǔ)器分配的存儲(chǔ)器接口類。該類可包括用于檢索應(yīng)用專用分配函數(shù)的GetPointer函數(shù)或用于檢索執(zhí)行其它存儲(chǔ)器處理任務(wù)的函數(shù)的其它GetX函數(shù)。另選地或另外地,應(yīng)用可以按傳統(tǒng)方式進(jìn)行分配并且然后調(diào)用RegisterPointer函數(shù),該函數(shù)向主機(jī)注冊(cè)所分配的存儲(chǔ)器并指定要與所分配的存儲(chǔ)器相關(guān)聯(lián)的本文描述的附加信息。以下偽代碼提供了應(yīng)用可使用的一個(gè)存儲(chǔ)器類的示例。
[0027]CMemChunk//用于所有存儲(chǔ)器分配的雞肋
[0028]{
[0029]<分配的全局列 表>
[0030]…
[0031]};
[0032]CMyMemory: pub lie CMemChunk
[0033]{
[0034]分配(大小);
[0035]填充(){〈如何填充存儲(chǔ)器>} //覆蓋
[0036]屬性〈例如,優(yōu)先級(jí)、可分頁性等>
[0037]};
[0038]另選地或另外地,開發(fā)者可使用源注釋語言(SAL)或其它標(biāo)記來將本文描述的框架引入應(yīng)用代碼,以標(biāo)識(shí)現(xiàn)有存儲(chǔ)器分配并且指定與每一次分配、訪問或其它存儲(chǔ)器交互相關(guān)的附加參數(shù)和元數(shù)據(jù)。
[0039]在一些實(shí)施例中,存儲(chǔ)器管理系統(tǒng)可以在單個(gè)應(yīng)用中操作并且不與內(nèi)核或其它主機(jī)共享。應(yīng)用能夠受益于改進(jìn)的存儲(chǔ)器管理,所述改進(jìn)的存儲(chǔ)器管理的自己的內(nèi)置存儲(chǔ)器管理器能夠通過使用本文描述的框架所提供的附加信息來執(zhí)行。在某些情況下,主機(jī)然后可提供注冊(cè)函數(shù),應(yīng)用可調(diào)用該函數(shù)來獲得跨應(yīng)用益處并允許主機(jī)也使用明確定義的存儲(chǔ)器分配和使用。作為示例,該系統(tǒng)可以在惡意軟件掃描之前通知應(yīng)用,以使得該應(yīng)用能夠 卸載任何較不相關(guān)的存儲(chǔ)器以加速掃描。作為另一示例,應(yīng)用可以在CPU去往空閑狀態(tài)之 前預(yù)先分配存儲(chǔ)器,以使得應(yīng)用能夠在用戶做了某件事并且CPU恢復(fù)執(zhí)行時(shí)快速響應(yīng)事件 (增強(qiáng)對(duì)功率狀態(tài)改變的響應(yīng)性)。[0040]未經(jīng)修改的應(yīng)用[0041]在軟件開發(fā)者不可能將軟件應(yīng)用修改成與存儲(chǔ)器管理系統(tǒng)交互或者該系統(tǒng)被實(shí) 現(xiàn)為與未經(jīng)修改的應(yīng)用(即,未被專門設(shè)計(jì)成與該系統(tǒng)一起工作的應(yīng)用)一起操作的情況 下,該系統(tǒng)仍然可能提供存儲(chǔ)器管理益處。為此,該系統(tǒng)收集描述應(yīng)用如何使用存儲(chǔ)器自身 的信息(例如,基于靜態(tài)分析和/或剖析應(yīng)用一使應(yīng)用運(yùn)行、截取存儲(chǔ)器分配以及查看跨應(yīng) 用運(yùn)行時(shí)的使用)。該信息在確定性能特性時(shí)是有用的,并且可由應(yīng)用主機(jī)的存儲(chǔ)器管理器 來智能地使用??墒褂迷撔畔⒌姆绞降氖纠ㄖ悄芾占⒌奖P的智能分頁、到更高性 能的存儲(chǔ)器高速緩存的智能高速緩存以及甚至警告用戶應(yīng)用可能遇到的潛在存儲(chǔ)器限制。[0042]利用對(duì)二進(jìn)制碼的靜態(tài)分析、對(duì)二進(jìn)制碼的行為的運(yùn)行時(shí)分析以及通過對(duì)二進(jìn)制 碼進(jìn)行插裝(instrument),收集到關(guān)于二進(jìn)制碼的給定存儲(chǔ)器分配中的任一個(gè)以及對(duì)這些 分配的使用的附加信息是可能的。該信息然后可被用來導(dǎo)出圍繞物理存儲(chǔ)器中的分配的加 載/卸載和定位的更智能的行為。存儲(chǔ)器管理系統(tǒng)提供了用描述對(duì)分配本身的潛在或?qū)嶋H 使用的元數(shù)據(jù)來自動(dòng)注釋應(yīng)用存儲(chǔ)器分配的手段。該分析可以自動(dòng)地對(duì)二進(jìn)制碼靜態(tài)地或 在運(yùn)行時(shí)期間動(dòng)態(tài)地執(zhí)行,而不需要任何開發(fā)者交互或重新創(chuàng)作現(xiàn)有應(yīng)用。一旦執(zhí)行,該分 析就可被系統(tǒng)高速緩存以使得主機(jī)操作系統(tǒng)知道將來如何處理應(yīng)用。該分析還可被發(fā)布以 供其它客戶機(jī)發(fā)現(xiàn),而不僅僅被本地地高速緩存。另外,信息可能被展示給用戶以供可選的 編輯,從而允許管理員或用戶定制應(yīng)用的元數(shù)據(jù)以及應(yīng)用主機(jī)將如何處理應(yīng)用的存儲(chǔ)器分 配。[0043]可能使用靜態(tài)和動(dòng)態(tài)分析來導(dǎo)出關(guān)于應(yīng)用的存儲(chǔ)器分配的附加信息,并且該信 息然后可被用來幫助引導(dǎo)應(yīng)用和系統(tǒng)存儲(chǔ)器分配的總體管理。示例是在存儲(chǔ)器正被觸碰 時(shí);可能確定是否使用另一存儲(chǔ)器段來幫助填充該存儲(chǔ)器分配。如果該存儲(chǔ)器分配然后取 決于另一分配,則可指示該依賴關(guān)系,或者通過一位來標(biāo)記該存儲(chǔ)器分配即可,該位指示該 存儲(chǔ)器分配不是在沒有輸入的情況下生成的。靜態(tài)分析可確定軟件代碼在何處觸碰到存 儲(chǔ)器,如何使用存儲(chǔ)器、如何填充存儲(chǔ)器、代碼路徑有多常見(例如,它是否是單寫/多讀的 (WORM))以及使用存儲(chǔ)器的頻率。動(dòng)態(tài)分析可以對(duì)所有分配和/或訪問進(jìn)行插裝(類似于剖 析器)并且可捕捉系統(tǒng)環(huán)境對(duì)代碼操作的影響、影響操作的用戶設(shè)置以及不可用或難以靜 態(tài)地確定的其它數(shù)據(jù)。[0044]在一些實(shí)施例中,存儲(chǔ)器管理系統(tǒng)在分析應(yīng)用后輸出應(yīng)用的存儲(chǔ)器使用的清單或 其它描述。這允許系統(tǒng)高速緩存分析結(jié)果并重用結(jié)果以便將來執(zhí)行應(yīng)用。在應(yīng)用二進(jìn)制碼 第一次執(zhí)行時(shí)(或者在如應(yīng)用虛擬化的序列化的過程期間),操作系統(tǒng)可被設(shè)計(jì)成與系統(tǒng)一 起執(zhí)行該分析,并且然后存儲(chǔ)該分析以便在每一次二進(jìn)制碼執(zhí)行時(shí)使用。內(nèi)核或其它主機(jī) 可讀取清單數(shù)據(jù)并通過描述應(yīng)用如何使用存儲(chǔ)器的附加信息來采取適當(dāng)動(dòng)作。應(yīng)用使用可 隨時(shí)間變化,以使得該清單或其他高速緩存有時(shí)可被動(dòng)態(tài)更新。在某些情況下,該系統(tǒng)可以 為每一分配分配整頁存儲(chǔ)器,以使得每一次存儲(chǔ)器訪問都觸發(fā)頁面錯(cuò)誤,該頁面錯(cuò)誤允許 內(nèi)核控制如何使用存儲(chǔ)器并提供此處進(jìn)一步描述的對(duì)存儲(chǔ)器的應(yīng)用引用以及實(shí)際存儲(chǔ)器分配之間的這種類型的間接性。
[0045]在一些實(shí)施例中,該系統(tǒng)可提供關(guān)于應(yīng)用存儲(chǔ)器行為的報(bào)告。這是分析的另一種用途并且可幫助管理員做出關(guān)于應(yīng)用的決策,諸如應(yīng)用將在哪一個(gè)服務(wù)器或虛擬機(jī)上良好地運(yùn)行。該系統(tǒng)還可提供對(duì)存儲(chǔ)器使用的市場(chǎng)評(píng)級(jí),以使得移動(dòng)電話應(yīng)用商店的用戶例如能夠在下載應(yīng)用之前知道該應(yīng)用將如何使用移動(dòng)電話的可用存儲(chǔ)器(例如,高度使用、低度使用等)。管理員還可使用該信息來基于收集到的關(guān)于存儲(chǔ)器消耗的元數(shù)據(jù)進(jìn)行跨各種系統(tǒng)的IT軟件部署。
[0046]存儲(chǔ)器管理系統(tǒng)可使用從存儲(chǔ)器使用分析中導(dǎo)出的信息來在系統(tǒng)空閑或未被充分利用時(shí)預(yù)先分配并且可能填充存儲(chǔ)器。知道應(yīng)用在將來對(duì)存儲(chǔ)器的使用允許系統(tǒng)更高效地分配存儲(chǔ)器并利用系統(tǒng)未被充分利用的時(shí)間來分配可以在系統(tǒng)處于更重負(fù)載時(shí)使用的存儲(chǔ)器。這允許更重的負(fù)載具有對(duì)由于早先完成的工作而變得可用的更多處理或其它資源的訪問權(quán)。
[0047]主機(jī)修改
[0048]存儲(chǔ)器管理系統(tǒng)包括對(duì)內(nèi)核或應(yīng)用主機(jī)的修改以接收由應(yīng)用提供的或通過對(duì)應(yīng)用的分析來確定的關(guān)于存儲(chǔ)器使用的附加信息。不像傳統(tǒng)軟件存儲(chǔ)器管理,由于本文描述的元數(shù)據(jù)以及傳遞自應(yīng)用的其它信息提供的對(duì)存儲(chǔ)器使用的增加的洞察,內(nèi)核可以做更多以便在沒有應(yīng)用知識(shí)或動(dòng)作的情況下高效地管理存儲(chǔ)器。內(nèi)核可以稍后通知應(yīng)用已采取什么動(dòng)作或者管理存儲(chǔ)器以使其在應(yīng)用需要該存儲(chǔ)器時(shí)就位,從而使得應(yīng)用不知曉或不關(guān)心內(nèi)核的存儲(chǔ)器相關(guān)動(dòng)作。內(nèi)核然后可執(zhí)行更好的分頁(例如通過將較不重要的或不太可能使用的存儲(chǔ)器卸載到較慢的盤存儲(chǔ)),可以在出現(xiàn)存儲(chǔ)器壓力時(shí)釋放存儲(chǔ)器,并且可以采取其它動(dòng)作來替使用該內(nèi)核提供的操作環(huán)境的一個(gè)或多個(gè)應(yīng)用管理存儲(chǔ)器。例如,內(nèi)核可以更好地分配存儲(chǔ)器以實(shí)現(xiàn)較少的碎片。
[0049]存儲(chǔ)器是操作系統(tǒng)中的受限資源;因此,內(nèi)核適當(dāng)?shù)馗櫾诤翁幏峙浯鎯?chǔ)器以使其能夠在需要時(shí)從應(yīng)用恢復(fù)存儲(chǔ)器是重要的。一個(gè)解決方案是在向應(yīng)用分配存儲(chǔ)器時(shí)使應(yīng)用向存儲(chǔ)器分配優(yōu)先級(jí)。由此,當(dāng)系統(tǒng)確定存儲(chǔ)器較少時(shí),內(nèi)核可確定優(yōu)先級(jí)最低的存儲(chǔ)器在何處并解除對(duì)該存儲(chǔ)器的分配或?qū)υ摯鎯?chǔ)器進(jìn)行分頁,而不影響具有優(yōu)先級(jí)較高的存儲(chǔ)器的其它應(yīng)用的執(zhí)行。
[0050]傳統(tǒng)上,存儲(chǔ)器的優(yōu)先級(jí)及其到各應(yīng)用的分發(fā)由內(nèi)核確定。當(dāng)系統(tǒng)以較少的存儲(chǔ)器運(yùn)行時(shí),內(nèi)核可以任意地釋放被應(yīng)用使用的具有較高優(yōu)先級(jí)的存儲(chǔ)器,由此使應(yīng)用的性能中斷或降級(jí)。而優(yōu)先級(jí)較低的存儲(chǔ)器本應(yīng)首先被解除分配。存在與內(nèi)核如何確定從哪一個(gè)應(yīng)用釋放存儲(chǔ)器相關(guān)的有趣方面。一個(gè)解決方案是使應(yīng)用在其本身中確定對(duì)于存儲(chǔ)器資源的優(yōu)先級(jí)次序是什么。存儲(chǔ)器優(yōu)先級(jí)方案要求應(yīng)用分配在分配或解除分配時(shí)對(duì)應(yīng)用分配或解除分配的存儲(chǔ)器的優(yōu)先級(jí)。由此,當(dāng)存在存儲(chǔ)器壓力時(shí),內(nèi)核具有通過優(yōu)先級(jí)排名的存儲(chǔ)器地圖,并且可以首先釋放和定位優(yōu)先級(jí)較低的存儲(chǔ)器?;蛘?,內(nèi)核可以向應(yīng)用發(fā)送具有需要被釋放的分配的列表的通知。存儲(chǔ)器管理系統(tǒng)可由操作系統(tǒng)來完全主存,或者可以在操作和應(yīng)用之間協(xié)作。
[0051]優(yōu)先級(jí)模型可通過創(chuàng)建只要在做出存儲(chǔ)器請(qǐng)求時(shí)就封裝應(yīng)用的存儲(chǔ)器分配API來實(shí)現(xiàn)。這也可使未注冊(cè)的應(yīng)用受益。通過利用該API,應(yīng)用和優(yōu)先級(jí)由子系統(tǒng)來自動(dòng)跟蹤,而不使得應(yīng)用主動(dòng)管理存儲(chǔ)器優(yōu)先級(jí)。內(nèi)核對(duì)象結(jié)合注冊(cè)、計(jì)算、信令和存儲(chǔ)器管理功能中的全部,以使得每一個(gè)應(yīng)用都只需調(diào)用該對(duì)象(或者在未經(jīng)修改的應(yīng)用的情況下代表 應(yīng)用調(diào)用該對(duì)象)。[0052]一種替換解決方案是在內(nèi)核之外具有主應(yīng)用,該主應(yīng)用被用來跟蹤當(dāng)前正在運(yùn)行 的各種應(yīng)用。當(dāng)應(yīng)用請(qǐng)求存儲(chǔ)器時(shí),這些應(yīng)用被注冊(cè)到主應(yīng)用。由此,當(dāng)應(yīng)用變成不響應(yīng) 時(shí),主應(yīng)用可確定是否清除該僵尸應(yīng)用以回收存儲(chǔ)器或者使該僵尸應(yīng)用保持掛起以使得可 以在需要存儲(chǔ)器時(shí)將存儲(chǔ)器返回給該應(yīng)用。[0053]內(nèi)核或主機(jī)可使用增強(qiáng)的存儲(chǔ)器信息來更高效地做出各種存儲(chǔ)器管理決策。例 如,低功率設(shè)備的內(nèi)核可選擇關(guān)閉存儲(chǔ)器排以節(jié)省電池壽命。該系統(tǒng)可清除或換出具有存 儲(chǔ)器排中的將被關(guān)閉的存儲(chǔ)器的進(jìn)程。系統(tǒng)還可整理跨若干排分布的存儲(chǔ)器的碎片以取得 可被關(guān)閉的一些空排。作為另一示例,內(nèi)核可選擇將一些存儲(chǔ)器分配推送到其它設(shè)備(包括 基于云的存儲(chǔ)設(shè)施)。許多占用量較小的低功率操作系統(tǒng)不具有分頁概念,因此在這種情況 下可通過由另一設(shè)備/服務(wù)主存的代表性狀態(tài)傳輸(REST)接口來支持存儲(chǔ)器分配。以與 滾動(dòng)遍歷數(shù)據(jù)庫快照類似的方式,應(yīng)用在存儲(chǔ)器中不具有整個(gè)數(shù)據(jù)庫,但將各數(shù)據(jù)庫片段 從數(shù)據(jù)庫服務(wù)/服務(wù)器傳遞給該應(yīng)用。該應(yīng)用不具有它們正在查看快照而不是整個(gè)數(shù)據(jù)庫 的知識(shí)。能夠確信地移走存儲(chǔ)器或解除存儲(chǔ)器分配允許內(nèi)核/主機(jī)更好地管理存儲(chǔ)器并且 仍然維持應(yīng)用對(duì)存儲(chǔ)器可用性的期待。[0054]在一些實(shí)施例中,該系統(tǒng)與除了存儲(chǔ)器之外的其它主機(jī)級(jí)對(duì)象或組件一起使用。 例如,該系統(tǒng)可以在顯示器關(guān)閉時(shí)關(guān)閉圖形處理單元(GPU),或者在與各驅(qū)動(dòng)程序相關(guān)聯(lián)的 硬件未被使用或?qū)⒃谀骋粫r(shí)間內(nèi)不使用時(shí)關(guān)閉各驅(qū)動(dòng)程序。該系統(tǒng)還可用于系統(tǒng)休眠,以 便首先整理存儲(chǔ)器碎片并且然后將線性的存儲(chǔ)器分配流流傳輸?shù)娇梢栽谙到y(tǒng)被喚醒時(shí)容 易被重新加載的盤。不像存儲(chǔ)大小等于整個(gè)物理存儲(chǔ)器的文件的傳統(tǒng)休眠,該存儲(chǔ)器管理 系統(tǒng)可鼓勵(lì)應(yīng)用在休眠之前釋放不需要的或容易恢復(fù)的存儲(chǔ)器(或者可以為這些應(yīng)用做這 些事),并由此可存儲(chǔ)較少的休眠數(shù)據(jù)量。除了存儲(chǔ)器之外的其它被管理的項(xiàng)目可包括文件 句柄、計(jì)時(shí)器、內(nèi)核對(duì)象等。該系統(tǒng)可以就像存儲(chǔ)器使用那樣接收關(guān)于這些項(xiàng)目的使用信息 (或者從靜態(tài)和動(dòng)態(tài)分析中確定該信息)。[0055]在一些實(shí)施例中,存儲(chǔ)器管理系統(tǒng)接收與每一次存儲(chǔ)器分配相關(guān)聯(lián)的功率狀態(tài)。 例如,在功率級(jí)別X,系統(tǒng)可確定不再需要某些存儲(chǔ)器分配。這可允許電池受限設(shè)備通過卸 載在該功率級(jí)別不需要的任何存儲(chǔ)器來切換至較低功率模式。例如,移動(dòng)電話可以在存儲(chǔ) 器中保存足夠的應(yīng)用數(shù)據(jù)來響應(yīng)電話呼叫或向用戶警告新電子郵件,但可以卸載其它優(yōu)先 級(jí)較低的功能或應(yīng)用。在某些情況下,在某些較低功率狀態(tài)中應(yīng)用可能只需在使用存儲(chǔ)器 之前驗(yàn)證指針有效性,但在較高功率狀態(tài)中可具有對(duì)存儲(chǔ)器的正常訪問權(quán)。這可被提供為 應(yīng)用和用于任何給定平臺(tái)的主機(jī)之間的合同保證。[0056]系統(tǒng)組件和操作環(huán)境[0057]圖1是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)的各組件的框圖。系統(tǒng)100包括元 數(shù)據(jù)接收組件105、填充規(guī)定組件110、分配請(qǐng)求組件115、存儲(chǔ)器引用組件120、應(yīng)用接口組 件125、靜態(tài)分析組件130、動(dòng)態(tài)分析組件135、主機(jī)組件140、請(qǐng)求接收組件145、請(qǐng)求存儲(chǔ)組 件150、分配組件155、存儲(chǔ)器動(dòng)作組件160和數(shù)據(jù)存儲(chǔ)組件165。這些組件中的每一個(gè)都在 此處進(jìn)一步詳細(xì)討論。[0058]元數(shù)據(jù)接收組件105、填充規(guī)定組件110、分配請(qǐng)求組件115和存儲(chǔ)器引用組件120一起構(gòu)成系統(tǒng)100展示給應(yīng)用的存儲(chǔ)器框架。希望修改他們的應(yīng)用代碼以實(shí)現(xiàn)更高效的存儲(chǔ)器管理的開發(fā)者可利用來自他們的應(yīng)用的這些組件來創(chuàng)建允許主機(jī)或內(nèi)核代表應(yīng)用來更有效地管理存儲(chǔ)器的應(yīng)用。
[0059]元數(shù)據(jù)接收組件105接收與每一次存儲(chǔ)器分配相關(guān)聯(lián)的信息,該信息向應(yīng)用主機(jī)提供描述應(yīng)用如何使用存儲(chǔ)器的信息。例如,該元數(shù)據(jù)可指示對(duì)于應(yīng)用而言應(yīng)該可以多容易地訪問分配或者應(yīng)用計(jì)劃多頻繁地訪問與該分配相關(guān)聯(lián)的存儲(chǔ)器。該元數(shù)據(jù)還可指示存儲(chǔ)器內(nèi)容有多難以生成,并由此對(duì)于應(yīng)用或主機(jī)而言在內(nèi)容被釋放或分頁到盤的情況下替換存儲(chǔ)器內(nèi)容有多難。元數(shù)據(jù)接收組件105可以在對(duì)存儲(chǔ)器分配API的調(diào)用中接收元數(shù)據(jù)或者在存儲(chǔ)器已經(jīng)在用于提供元數(shù)據(jù)的后續(xù)API中被分配之后接收元數(shù)據(jù)。
[0060]填充規(guī)定組件110接收描述如何填充特定存儲(chǔ)器分配的內(nèi)容的信息。存儲(chǔ)器內(nèi)容可來自各種源,諸如來自讀取存儲(chǔ)在盤上的文件內(nèi)容、來自對(duì)輸入數(shù)據(jù)執(zhí)行一個(gè)或多個(gè)計(jì)算、來自用戶輸入、來自網(wǎng)絡(luò)訪問的信息(例如,數(shù)據(jù)庫或因特網(wǎng))等等。在一些實(shí)施例中,應(yīng)用向主機(jī)傳遞存儲(chǔ)器填充函數(shù)以使得主機(jī)能夠調(diào)用該函數(shù)來在該主機(jī)確定的時(shí)刻填充存儲(chǔ)器內(nèi)容。為了高效地使用處理和其它資源,主機(jī)可選擇延遲填充存儲(chǔ)器直到資源未被充分利用或空閑。另外,主機(jī)還可自由地釋放或解除先前填充的存儲(chǔ)器以作他用,并且然后稍后在應(yīng)用期望使用存儲(chǔ)器之前重新分配并重新填充該存儲(chǔ)器。接收到的元數(shù)據(jù)可提供主機(jī)用來知曉應(yīng)用將何時(shí)使用存儲(chǔ)器的信息,或者應(yīng)用可以在每一次試圖使用存儲(chǔ)器之前通知主機(jī)以使得主機(jī)能夠檢查存儲(chǔ)器的當(dāng)前狀態(tài)。
[0061]分配請(qǐng)求組件115將來自應(yīng)用的請(qǐng)求提交給主機(jī)以便基于接收到的元數(shù)據(jù)和填充規(guī)定來分配存儲(chǔ)器。注意,盡管主機(jī)接收請(qǐng)求,但是是立即服務(wù)該請(qǐng)求以作為響應(yīng)還是等待直到另一適當(dāng)時(shí)刻是主機(jī)的自由。在極端情況下,主機(jī)可能未分配任何存儲(chǔ)器直到存儲(chǔ)器準(zhǔn)備好被訪問,以允許主機(jī)節(jié)省有限的資源直到應(yīng)用需要存儲(chǔ)器且必須為該應(yīng)用分配存儲(chǔ)器以使得能夠執(zhí)行其工作的最后可能時(shí)刻。分配請(qǐng)求組件115將所提交的請(qǐng)求存儲(chǔ)在數(shù)據(jù)存儲(chǔ)中,該數(shù)據(jù)存儲(chǔ)由主機(jī)管理并且包括接收到的元數(shù)據(jù)和填充規(guī)定以便在稍后存儲(chǔ)器管理動(dòng)作中使用。
[0062]存儲(chǔ)器引用組件120在應(yīng)用訪問作為先前提交的分配請(qǐng)求的主體的存儲(chǔ)器之前從應(yīng)用接收指示。因?yàn)橹鳈C(jī)可使存儲(chǔ)器不可用或延遲實(shí)際分配存儲(chǔ)器直到它選擇,所以應(yīng)用需要確保該存儲(chǔ)器在應(yīng)用準(zhǔn)備好使用它時(shí)可用的方法。存儲(chǔ)器引用組件120服務(wù)于該目的,并且允許應(yīng)用指示它準(zhǔn)備好訪問特定存儲(chǔ)器分配。作為響應(yīng),主機(jī)可以向應(yīng)用傳遞對(duì)實(shí)際存儲(chǔ)器位置的指針(如果該存儲(chǔ)器已經(jīng)可用的話),或者可基于接收到的填充規(guī)定和元數(shù)據(jù)來創(chuàng)建和填充存儲(chǔ)器(如果該存儲(chǔ)器當(dāng)前未被分配的話)。應(yīng)用可發(fā)送釋放存儲(chǔ)器的指示以使得主機(jī)在存儲(chǔ)器管理決策中自由地再次包括該存儲(chǔ)器。
[0063]應(yīng)用接口組件125提供應(yīng)用和主機(jī)之間的通信接口以協(xié)商對(duì)存儲(chǔ)器分配的使用。該接口可包括被應(yīng)用用來請(qǐng)求存儲(chǔ)器分配并指定關(guān)于分配的信息的一個(gè)或多個(gè)函數(shù)或基類,以及被主機(jī)用來使用應(yīng)用所提供的用戶定義的函數(shù)來與應(yīng)用的存儲(chǔ)器交互的函數(shù)或基類。應(yīng)用和主機(jī)之間的增強(qiáng)的通信允許主機(jī)具有對(duì)應(yīng)用的存儲(chǔ)器使用的比正常水平高得多的可見性,并允許主機(jī)代表各種應(yīng)用管理存儲(chǔ)器以便更有效地共享有限資源。
[0064]對(duì)于未被專門構(gòu)建成使用存儲(chǔ)器管理系統(tǒng)100的應(yīng)用,應(yīng)用接口組件125提供通過靜態(tài)和/或動(dòng)態(tài)分析來確定的任何插裝的應(yīng)用代碼之間的交互,并以與以上討論相似的方式與主機(jī)交互。在未被構(gòu)建成使用系統(tǒng)100的應(yīng)用的情況下,系統(tǒng)100可具有關(guān)于存儲(chǔ) 器分配的目的或其它規(guī)定的較少信息,并且可被限于系統(tǒng)100可通過對(duì)應(yīng)用的靜態(tài)和動(dòng)態(tài) 分析來發(fā)現(xiàn)的信息。然而,這樣的分析仍然可發(fā)現(xiàn)可用于更有效地管理傳統(tǒng)應(yīng)用分配的存 儲(chǔ)器的元數(shù)據(jù)。在某些情況下,系統(tǒng)100能夠自動(dòng)檢測(cè)應(yīng)用正如何填充存儲(chǔ)器并且能夠在 沒有應(yīng)用的顯式協(xié)作的情況下執(zhí)行上述相同種類的存儲(chǔ)器內(nèi)容按需填充。[0065]靜態(tài)分析組件130靜態(tài)地分析應(yīng)用二進(jìn)制碼或其它應(yīng)用代碼以確定應(yīng)用如何使 用存儲(chǔ)器。組件130可分析二進(jìn)制代碼、中間代碼(例如,MICROSOFT?中間語言(IL)代碼) 或應(yīng)用的其它經(jīng)編譯或可運(yùn)行版本。靜態(tài)分析在過去幾年中進(jìn)步顯著,并且用于確定應(yīng)用 二進(jìn)制碼做了什么以及怎么做的許多技術(shù)在本領(lǐng)域內(nèi)是公知的。存儲(chǔ)器管理系統(tǒng)100使用 這些技術(shù)來專門聚焦于應(yīng)用分配和使用存儲(chǔ)器的區(qū)域。組件130可以對(duì)應(yīng)用二進(jìn)制碼進(jìn)行 插裝以接收信息或截取應(yīng)用的特定動(dòng)作并且可以用新或另外的動(dòng)作來替換所截取的動(dòng)作。 例如,如果組件130發(fā)現(xiàn)對(duì)存儲(chǔ)器分配函數(shù)的調(diào)用,則組件130可收集可以從靜態(tài)分析中獲 得的任何元數(shù)據(jù)并且調(diào)用可接收到元數(shù)據(jù)作為參數(shù)的分配函數(shù)版本。以此方式,主機(jī)就像 應(yīng)用被其開發(fā)者修改為提供元數(shù)據(jù)信息那樣從應(yīng)用接收這樣的信息。同樣,系統(tǒng)可確定應(yīng) 用如何填充或訪問特定存儲(chǔ)器分配,以使得可以向主機(jī)提供描述存儲(chǔ)器引用的填充規(guī)定和 信息。[0066]動(dòng)態(tài)分析組件135動(dòng)態(tài)地分析正在運(yùn)行的應(yīng)用以收集難以用靜態(tài)分析來確定的 關(guān)于該應(yīng)用對(duì)存儲(chǔ)器的使用的附加信息。應(yīng)用經(jīng)常包括阻擾靜態(tài)分析的編程步驟(有意地 或者只是因?yàn)檫@些步驟以阻擾靜態(tài)分析的方式出現(xiàn))。動(dòng)態(tài)分析具有可用信息,諸如從外部 組件接收到的響應(yīng)的內(nèi)容以及由應(yīng)用使用的存儲(chǔ)器的實(shí)際內(nèi)容,對(duì)于這些內(nèi)容在靜態(tài)分析 期間只能進(jìn)行猜測(cè)或逼近。由此,動(dòng)態(tài)分析可以找到在靜態(tài)分析期間找不到的存儲(chǔ)器使用 和其它應(yīng)用活動(dòng)。組件135還可使用動(dòng)態(tài)分析來確認(rèn)靜態(tài)分析的結(jié)果。動(dòng)態(tài)分析組件135 向主機(jī)提供所確定的信息以便進(jìn)一步允許傳統(tǒng)應(yīng)用利用系統(tǒng)100提供的至少一些功能。[0067]主機(jī)組件140包括應(yīng)用在其中運(yùn)行的環(huán)境并提供對(duì)系統(tǒng)100提供的存儲(chǔ)器管理的 訪問。取決于該平臺(tái),主機(jī)可包括各種軟件實(shí)體。對(duì)于傳統(tǒng)的桌面計(jì)算系統(tǒng),主機(jī)是操作系 統(tǒng),該操作系統(tǒng)可包括內(nèi)核或其它內(nèi)核模式軟件代碼,諸如驅(qū)動(dòng)程序。對(duì)于托管軟件環(huán)境, 主機(jī)可包括運(yùn)行時(shí)環(huán)境,諸如MICROSOFT?.NET?運(yùn)行時(shí)環(huán)境或MICROSOFT? SILVERLIGHT? 運(yùn)行時(shí)環(huán)境。web應(yīng)用也可包括應(yīng)用主機(jī)并且可以在沙箱環(huán)境中運(yùn)行,該沙箱環(huán)境在其它服 務(wù)器或桌面計(jì)算環(huán)境中運(yùn)行。服務(wù)器計(jì)算系統(tǒng)可包括虛擬化硬件或軟件并且可包括在比一 個(gè)或多個(gè)操作系統(tǒng)內(nèi)核更高的層面操作的管理程序。存儲(chǔ)器管理系統(tǒng)100可被實(shí)現(xiàn)為各種 層面的軟件代碼并由此不限于任何特定類型的主機(jī)。主機(jī)組件140表示負(fù)責(zé)與應(yīng)用交互并 管理用于系統(tǒng)100在其上運(yùn)行的特定平臺(tái)的資源的組件。[0068]請(qǐng)求接收組件145、請(qǐng)求存儲(chǔ)組件150、分配組件155和存儲(chǔ)器動(dòng)作組件160 —起 構(gòu)成被修改成實(shí)現(xiàn)本文描述的系統(tǒng)100的存儲(chǔ)器管理器的組件。[0069]請(qǐng)求接收組件145從應(yīng)用接收分配存儲(chǔ)器的請(qǐng)求。每一個(gè)請(qǐng)求包括向主機(jī)提供描 述應(yīng)用如何使用所分配的存儲(chǔ)器的信息的元數(shù)據(jù)。請(qǐng)求接收組件145可以從在特定主機(jī)上 運(yùn)行的多個(gè)或所有應(yīng)用接收請(qǐng)求,以使得主機(jī)具有描述如何使用存儲(chǔ)器的大范圍的信息。 主機(jī)然后可排定在決定采取特定動(dòng)作(例如,分頁或釋放存儲(chǔ)器以減小存儲(chǔ)器壓力)時(shí)影響 哪些分配的優(yōu)先級(jí)。[0070]請(qǐng)求存儲(chǔ)組件150存儲(chǔ)接收到的請(qǐng)求及相關(guān)聯(lián)的元數(shù)據(jù)信息以供在存儲(chǔ)器管理決策制定期間后續(xù)使用。主機(jī)可以在接收到請(qǐng)求時(shí)滿足或不滿足分配請(qǐng)求。然而,無論主機(jī)是立即還是稍后滿足請(qǐng)求,主機(jī)都與分配相關(guān)聯(lián)地存儲(chǔ)應(yīng)用提供的信息,以使得主機(jī)稍后在存儲(chǔ)器動(dòng)作是適當(dāng)?shù)臅r(shí)候具有可用信息。在一些實(shí)施例中,主機(jī)在應(yīng)用已經(jīng)分配存儲(chǔ)器后在與應(yīng)用分開的通信中接收到元數(shù)據(jù)和其它信息。在這些情況下,主機(jī)可以在多個(gè)時(shí)刻或者在有用信息可用時(shí)存儲(chǔ)分配信息。
[0071]分配組件155執(zhí)行分配存儲(chǔ)器的實(shí)際動(dòng)作,以滿足接收到的一個(gè)或多個(gè)應(yīng)用分配請(qǐng)求。分配組件155可分配來自應(yīng)用堆或直接來自計(jì)算機(jī)系統(tǒng)中安裝的可由主機(jī)訪問和管理的物理存儲(chǔ)器的存儲(chǔ)器。在分配后,存儲(chǔ)器被托付給特定應(yīng)用并且無法由其它應(yīng)用使用(除非這些應(yīng)用通過典型的共享存儲(chǔ)器技術(shù)來請(qǐng)求這樣做)。分配組件155可以與頁表和虛擬存儲(chǔ)器一起工作以便將窗口提供到供分配的物理存儲(chǔ)器中,并且所提供的存儲(chǔ)器可由盤或其它存儲(chǔ)通過交換文件來備份。
[0072]存儲(chǔ)器動(dòng)作組件160執(zhí)行管理設(shè)備上的存儲(chǔ)器的動(dòng)作并訪問先前存儲(chǔ)的接收到的請(qǐng)求信息以確定將受到所執(zhí)行的動(dòng)作的影響的一個(gè)或多個(gè)合適的存儲(chǔ)器分配。動(dòng)作可包括將存儲(chǔ)器內(nèi)容交換到交換文件、釋放先前分配的存儲(chǔ)器、請(qǐng)求應(yīng)用減少其存儲(chǔ)器占用、或者影響一個(gè)或多個(gè)應(yīng)用使用的存儲(chǔ)器的任何其它動(dòng)作。通常,主機(jī)執(zhí)行存儲(chǔ)器管理動(dòng)作的目的是處理諸如存儲(chǔ)器不足(例如,存儲(chǔ)器壓力)等當(dāng)前或即將發(fā)生的情況、收集足夠的存儲(chǔ)器來滿足應(yīng)用需求,等等。
[0073]數(shù)據(jù)存儲(chǔ)組件165存儲(chǔ)被主機(jī)用來代表一個(gè)或多個(gè)應(yīng)用管理存儲(chǔ)器的信息。數(shù)據(jù)存儲(chǔ)組件165可包括留給系統(tǒng)100使用的存儲(chǔ)器、單獨(dú)的閃存或盤存儲(chǔ)或用于存儲(chǔ)數(shù)據(jù)的其它設(shè)施。數(shù)據(jù)存儲(chǔ)組件165還可包括被存儲(chǔ)在每一個(gè)應(yīng)用的存儲(chǔ)器空間中的跟蹤涉及該應(yīng)用的分配的數(shù)據(jù)以及被主機(jī)用來代表該應(yīng)用管理存儲(chǔ)器的其它信息。
[0074]其上實(shí)現(xiàn)存儲(chǔ)器管理系統(tǒng)的計(jì)算設(shè)備可包括中央處理單元、存儲(chǔ)器、輸入設(shè)備(例如,鍵盤和定點(diǎn)設(shè)備)、輸出設(shè)備(例如,顯示設(shè)備)和存儲(chǔ)設(shè)備(例如,盤驅(qū)動(dòng)器或其他非易失性存儲(chǔ)介質(zhì))。存儲(chǔ)器和存儲(chǔ)設(shè)備是可以用實(shí)現(xiàn)或啟用該系統(tǒng)的計(jì)算機(jī)可執(zhí)行指令(如軟件)來編碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。此外,數(shù)據(jù)結(jié)構(gòu)和消息結(jié)構(gòu)可被存儲(chǔ)或經(jīng)由諸如通信鏈路上的信號(hào)等數(shù)據(jù)傳輸介質(zhì)傳送??梢允褂酶鞣N通信鏈路,諸如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)、點(diǎn)對(duì)點(diǎn)撥號(hào)連接、蜂窩電話網(wǎng)絡(luò)等。
[0075]該系統(tǒng)的實(shí)施例可以在各種操作環(huán)境中實(shí)現(xiàn),這些操作環(huán)境包括個(gè)人計(jì)算機(jī)、月艮務(wù)器計(jì)算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費(fèi)電子產(chǎn)品、數(shù)碼照相機(jī)、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括任何上述系統(tǒng)或設(shè)備、機(jī)頂盒、片上系統(tǒng)(SOC)等中任一種的分布式計(jì)算環(huán)境等。計(jì)算機(jī)系統(tǒng)可以是蜂窩電話、個(gè)人數(shù)字助理、智能電話、個(gè)人計(jì)算機(jī)、可編程消費(fèi)電子設(shè)備、數(shù)碼相機(jī)等。
[0076]該系統(tǒng)可以在由一個(gè)或多個(gè)計(jì)算機(jī)或其他設(shè)備執(zhí)行的諸如程序模塊等計(jì)算機(jī)可執(zhí)行指令的通用上下文中描述。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。通常,程序模塊的功能可在各個(gè)實(shí)施例中按需進(jìn)行組合或分布。
[0077]圖2是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)的操作環(huán)境的框圖。該環(huán)境包括內(nèi)核/主機(jī)210、一個(gè)或多個(gè)應(yīng)用220、存儲(chǔ)器處理框架230、所存儲(chǔ)的分配元數(shù)據(jù)240、以及一個(gè)或多個(gè)工具250。內(nèi)核/主機(jī)210管理一個(gè)或多個(gè)應(yīng)用220所共享的存儲(chǔ)器。存儲(chǔ)器處 理框架230提供應(yīng)用220可調(diào)用以分配存儲(chǔ)器并提供存儲(chǔ)器分配元數(shù)據(jù)的一個(gè)或多個(gè)API。 存儲(chǔ)器處理框架230存儲(chǔ)接收到的元數(shù)據(jù)240。工具250操作未被設(shè)計(jì)成在本機(jī)提供分配 信息的各應(yīng)用以通過靜態(tài)和動(dòng)態(tài)分析來提取這一信息。任何所提取的信息隨后被存儲(chǔ)作為 分配元數(shù)據(jù)240。[0078]系統(tǒng)操作[0079]圖3是示出在一個(gè)實(shí)施例中的軟件應(yīng)用內(nèi)的存儲(chǔ)器管理系統(tǒng)請(qǐng)求分配和使用存 儲(chǔ)器的處理的流程圖。[0080]在框310開始,應(yīng)用設(shè)置描述應(yīng)用將如何使用存儲(chǔ)器分配的分配元數(shù)據(jù)。根據(jù)本 文描述的存儲(chǔ)器管理系統(tǒng),該應(yīng)用可構(gòu)建用于傳遞給分配函數(shù)的參數(shù)結(jié)構(gòu),調(diào)用用于提供 分配元數(shù)據(jù)的API,或設(shè)置分配存儲(chǔ)器的派生類的參數(shù)。分配元數(shù)據(jù)可包括存儲(chǔ)器對(duì)于該應(yīng) 用的優(yōu)先級(jí)、該應(yīng)用計(jì)劃有多頻繁地使用所分配的存儲(chǔ)器、該應(yīng)用替換該分配的內(nèi)容有多 困難、以及與該應(yīng)用對(duì)存儲(chǔ)器的使用以及主機(jī)可如何操縱該存儲(chǔ)器來有效地使用多個(gè)應(yīng)用 所共享的物理存儲(chǔ)器資源有關(guān)的其它信息。[0081]在框320繼續(xù),該應(yīng)用設(shè)置填充該存儲(chǔ)器分配的內(nèi)容的存儲(chǔ)器填充函數(shù)。存儲(chǔ)器 填充函數(shù)可以訪問來自文件的信息,執(zhí)行一個(gè)或多個(gè)計(jì)算以生成儲(chǔ)存在該存儲(chǔ)器分配中的 結(jié)果,或執(zhí)行填充該存儲(chǔ)器分配的其他動(dòng)作。通過向主機(jī)提供存儲(chǔ)器填充函數(shù)而非正好在 分配之后調(diào)用填充函數(shù),該應(yīng)用向主機(jī)提供按需釋放和重新填充存儲(chǔ)器所需的信息或推遲 存儲(chǔ)器的分配和初始填充直至對(duì)該主機(jī)更適當(dāng)?shù)臅r(shí)間所需的信息。[0082]在框330繼續(xù),該應(yīng)用調(diào)用主機(jī)所提供的管理跨多個(gè)應(yīng)用上共享的物理存儲(chǔ)器的 分配接口,其中該應(yīng)用經(jīng)由該分配接口向主機(jī)提供設(shè)置分配元數(shù)據(jù)和存儲(chǔ)器填充函數(shù)。該 應(yīng)用接口可包括操作系統(tǒng)AP1、運(yùn)行時(shí)函數(shù)、或在該應(yīng)用和負(fù)責(zé)存儲(chǔ)器管理的主機(jī)之間傳遞 信息的其他方式。該分配接口提供比當(dāng)今存儲(chǔ)器分配中通常所提供的信息更多的信息,并 且向主機(jī)給予有用于更高效地管理計(jì)算設(shè)備上的存儲(chǔ)器的信息。[0083]在框340繼續(xù),該應(yīng)用響應(yīng)于調(diào)用分配接口而接收引用,其中該引用擔(dān)當(dāng)該應(yīng)用 對(duì)所分配的存儲(chǔ)器的后續(xù)使用的間接標(biāo)識(shí)符。在接收到請(qǐng)求之后,主機(jī)可以或可以不立即 分配存儲(chǔ)器。另外,主機(jī)有時(shí)可按在應(yīng)用使用存儲(chǔ)器之前主機(jī)需要再次接收控制的方式修 改該存儲(chǔ)器(例如,釋放它、將它分頁到盤,等等)。因而,主機(jī)向該應(yīng)用提供對(duì)存儲(chǔ)器的引 用,并且在該應(yīng)用想要使用該存儲(chǔ)器時(shí),該應(yīng)用提供該引用以得到對(duì)該存儲(chǔ)器的直接訪問 (例如,指針)。[0084]在決策框350繼續(xù),如果該應(yīng)用檢測(cè)到該應(yīng)用對(duì)所分配的存儲(chǔ)器已使用完畢,則 該應(yīng)用完成,否則該應(yīng)用在框360繼續(xù)。在完成該應(yīng)用之前可調(diào)用分配接口以解除分配 (即,釋放)先前分配的存儲(chǔ)器。如果該應(yīng)用沒有使用該存儲(chǔ)器,并且主機(jī)實(shí)際上沒有分配該 存儲(chǔ)器,則這一動(dòng)作可簡(jiǎn)單地清理主機(jī)的所存儲(chǔ)的與該分配有關(guān)的條目并將控制返回給該 應(yīng)用。[0085]在決策框360繼續(xù),如果該應(yīng)用檢測(cè)到該應(yīng)用中對(duì)所分配的存儲(chǔ)器的使用,則該 應(yīng)用在框370繼續(xù),否則該應(yīng)用循環(huán)到框350以等待存儲(chǔ)器訪問或該存儲(chǔ)器分配的目的的 完成。該應(yīng)用可在應(yīng)用軟件代碼中訪問存儲(chǔ)器的任何位置處調(diào)用特定函數(shù),或可將存儲(chǔ)器 分配封裝在用對(duì)主機(jī)的適當(dāng)調(diào)用來包裝存儲(chǔ)器訪問的類中以使得存儲(chǔ)器可用。[0086]在框370繼續(xù),該應(yīng)用向主機(jī)請(qǐng)求直接訪問存儲(chǔ)器分配。如果主機(jī)已經(jīng)分配了存儲(chǔ)器,則主機(jī)向該應(yīng)用返回可訪問該存儲(chǔ)器的指針。如果主機(jī)尚未分配存儲(chǔ)器或已經(jīng)解除分配并重用了該存儲(chǔ)器,則主機(jī)響應(yīng)于應(yīng)用請(qǐng)求來分配存儲(chǔ)器,調(diào)用接收到的填充函數(shù)來填充存儲(chǔ)器內(nèi)容,并隨后將訪問該存儲(chǔ)器的指針或其他裝置返回給該應(yīng)用。
[0087]在框380繼續(xù),該應(yīng)用通過從主機(jī)接收到的存儲(chǔ)器地址來訪問存儲(chǔ)器分配。該應(yīng)用可修改存儲(chǔ)器,從存儲(chǔ)器讀取信息,或執(zhí)行其他典型的存儲(chǔ)器操作。在該應(yīng)用完成訪問該存儲(chǔ)器時(shí),該應(yīng)用可向主機(jī)指示該主機(jī)可再次執(zhí)行使得該存儲(chǔ)器不可用的管理操作。該應(yīng)用可更新填充函數(shù)所使用的數(shù)據(jù)以使得在主機(jī)再次重新填充該存儲(chǔ)器的情況下,該存儲(chǔ)器將包括最新改變(如果有的話)。在框380之后,這些步驟結(jié)束。
[0088]圖4是示出在一個(gè)實(shí)施例中的主機(jī)內(nèi)的存儲(chǔ)器管理系統(tǒng)接收分配和使用存儲(chǔ)器的應(yīng)用請(qǐng)求的處理的流程圖。在框410中開始,主機(jī)接收來自應(yīng)用的存儲(chǔ)器分配請(qǐng)求。主機(jī)可對(duì)來自多個(gè)應(yīng)用的請(qǐng)求進(jìn)行服務(wù),并且可包括在運(yùn)行于主機(jī)平臺(tái)上的多個(gè)應(yīng)用之間劃分或共享有限的物理存儲(chǔ)器的存儲(chǔ)器管理器。存儲(chǔ)器分配請(qǐng)求可包括諸如所請(qǐng)求的存儲(chǔ)器大小或與所請(qǐng)求的存儲(chǔ)器相關(guān)的其他參數(shù)等信息。
[0089]在框420繼續(xù),主機(jī)接收指定該應(yīng)用計(jì)劃使用所請(qǐng)求的存儲(chǔ)器分配的方式的存儲(chǔ)器分配元數(shù)據(jù)。該元數(shù)據(jù)可包括諸如存儲(chǔ)器分配對(duì)該應(yīng)用的重要性或優(yōu)先級(jí)、該分配是否適于分頁到盤、在主機(jī)必須釋放該分配的情況下該應(yīng)用是否可恢復(fù)該存儲(chǔ)器的內(nèi)容等信
肩、O
[0090]在框430繼續(xù),主機(jī)從該應(yīng)用接收可被主機(jī)調(diào)用來填充所請(qǐng)求的存儲(chǔ)器分配的內(nèi)容的存儲(chǔ)器填充函數(shù)。具有用于填充該存儲(chǔ)器分配的手段允許主機(jī)在主機(jī)需要釋放該存儲(chǔ)器分配以滿足另一應(yīng)用請(qǐng)求或釋放其他存儲(chǔ)器壓力的情況下推遲該存儲(chǔ)器的分配以及恢復(fù)該存儲(chǔ)器。
[0091]在決策框440繼續(xù),如果主機(jī)確定主機(jī)可響應(yīng)于該請(qǐng)求直接分配存儲(chǔ)器,則在框450繼續(xù),否則主機(jī)在框460繼續(xù)。主機(jī)可基于該應(yīng)用指示存儲(chǔ)器對(duì)該應(yīng)用有多重要以及該應(yīng)用計(jì)劃多么頻繁地訪問該存儲(chǔ)器來確定是否直接分配該存儲(chǔ)器。主機(jī)還可考慮其他因素,如在請(qǐng)求的時(shí)刻主機(jī)在其上運(yùn)行的計(jì)算設(shè)備有多繁忙。
[0092]在框450繼續(xù),主機(jī)從主機(jī)可用的物理存儲(chǔ)器中分配所請(qǐng)求的存儲(chǔ)器。主機(jī)可設(shè)立被該應(yīng)用通過其來訪問物理存儲(chǔ)器的頁表或其他虛擬存儲(chǔ)器。傳統(tǒng)主機(jī)直接響應(yīng)于應(yīng)用請(qǐng)求來分配存儲(chǔ)器,或者在主機(jī)不能滿足該請(qǐng)求的情況下使該請(qǐng)求失敗。然而,本存儲(chǔ)器管理系統(tǒng)可以推遲請(qǐng)求或執(zhí)行其他存儲(chǔ)器管理動(dòng)作以更高效地使用存儲(chǔ)器和其他主機(jī)資源。
[0093]在框460繼續(xù),主機(jī)存儲(chǔ)接收到的請(qǐng)求以及接收到的元數(shù)據(jù)和填充函數(shù)以供稍后進(jìn)行分配。主機(jī)可維護(hù)各應(yīng)用所請(qǐng)求的存儲(chǔ)器的數(shù)據(jù)存儲(chǔ),在需要存儲(chǔ)器管理動(dòng)作(如使得更多存儲(chǔ)器可用)時(shí)從該數(shù)據(jù)存儲(chǔ)中進(jìn)行選擇。該應(yīng)用所提供的元數(shù)據(jù)幫助主機(jī)確定哪些應(yīng)用和應(yīng)用內(nèi)的分配將受到主機(jī)的存儲(chǔ)器管理動(dòng)作的最少負(fù)面影響。在框460之后,這些步驟結(jié)束。
[0094]在一些情況下,應(yīng)用的開發(fā)人員不愿或不能做出改變以支持新操作系統(tǒng)特征。在這樣的情況下,本存儲(chǔ)器管理系統(tǒng)仍然能夠通過分析應(yīng)用二進(jìn)制信息以發(fā)現(xiàn)與存儲(chǔ)器分配有關(guān)的信息來提供一些增強(qiáng)的存儲(chǔ)器管理,如參考圖5和6進(jìn)一步描述的。
[0095]圖5是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)分析未被專門設(shè)計(jì)成提供存儲(chǔ)器分配信息的應(yīng)用的處理的流程圖。
[0096]在框510開始,該系統(tǒng)檢測(cè)描述應(yīng)用做出的存儲(chǔ)器分配的信息對(duì)其不可用的應(yīng)用。該應(yīng)用可在它的二進(jìn)制模塊上包括指定該應(yīng)用是否參與本存儲(chǔ)器管理系統(tǒng)所提供的存儲(chǔ)器模型的標(biāo)志或其他信息,或可以提供另一指示。該系統(tǒng)可將先前確定的應(yīng)用分配信息高速緩存以使得對(duì)每一應(yīng)用的分析只被執(zhí)行一次。因而,在這一步驟中,該系統(tǒng)還確定該分析先前尚未被執(zhí)行。
[0097]在框520繼續(xù),該系統(tǒng)對(duì)該應(yīng)用執(zhí)行分析以確定該應(yīng)用所做出的存儲(chǔ)器分配。該分析可包括對(duì)該應(yīng)用的各種形式的靜態(tài)和/或動(dòng)態(tài)分析。靜態(tài)分析在不運(yùn)行該應(yīng)用的情況下發(fā)生,并調(diào)查該應(yīng)用的二進(jìn)制代碼以確定該應(yīng)用的行為。動(dòng)態(tài)分析在該應(yīng)用正在運(yùn)行的情況下發(fā)生,并調(diào)查該應(yīng)用的存儲(chǔ)器內(nèi)代碼、數(shù)據(jù)結(jié)構(gòu)、以及其他信息以確定該應(yīng)用的行為。該系統(tǒng)可尋找對(duì)用于分配、訪問、以及釋放存儲(chǔ)器的特定主機(jī)API的調(diào)用,并且可記錄位置、周圍補(bǔ)充信息、用于填充所分配的存儲(chǔ)器的各步驟,等等。
[0098]在框530繼續(xù),該系統(tǒng)將該應(yīng)用掛鉤以在該應(yīng)用內(nèi)的該應(yīng)用分配存儲(chǔ)器的各位置處提供分配信息。各種形式的應(yīng)用掛鉤技術(shù)是可用的,如MICR0S0FTTM Detours以及其他,它們?cè)试S重定向應(yīng)用二進(jìn)制代碼以在該程序的任何點(diǎn)處截取或擴(kuò)充應(yīng)用的標(biāo)準(zhǔn)行為。例如,該系統(tǒng)可以提供調(diào)用用于提供分配元數(shù)據(jù)的分配函數(shù)而非調(diào)用該應(yīng)用最初調(diào)用的不帶有元數(shù)據(jù)的標(biāo)準(zhǔn)分配函數(shù)的應(yīng)用掛鉤。
[0099]在框540繼續(xù),該系統(tǒng)從該應(yīng)用接收分配存儲(chǔ)器的請(qǐng)求和經(jīng)掛鉤的應(yīng)用代碼所提供的相關(guān)聯(lián)的分配信息。該請(qǐng)求由主機(jī)接收,主機(jī)能夠確定該分配信息來自未被專門設(shè)計(jì)成提供分配信息的應(yīng)用。對(duì)這樣的應(yīng)用而言,主機(jī)可與對(duì)被設(shè)計(jì)成與該系統(tǒng)一起工作的應(yīng)用不同地操作。例如,主機(jī)可慮及未被設(shè)計(jì)成與該系統(tǒng)一起工作的應(yīng)用所提供的可能更少的信息。在一些實(shí)施例中,為了鼓勵(lì)采用新存儲(chǔ)器模型,該系統(tǒng)可以通過在存儲(chǔ)器壓力發(fā)生時(shí)將不依附新存儲(chǔ)器模型的應(yīng)用的數(shù)據(jù)優(yōu)先對(duì)換到盤或執(zhí)行其他存儲(chǔ)器管理動(dòng)作來懲罰這些應(yīng)用。在框540之后,這些步驟結(jié)束。
[0100]圖6是示出在一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)靜態(tài)地分析應(yīng)用并提供增強(qiáng)的存儲(chǔ)器信息的清單的處理的流程圖。
[0101]在框610開始,該系統(tǒng)接收不與對(duì)存儲(chǔ)器分配函數(shù)的調(diào)用相關(guān)聯(lián)地提供存儲(chǔ)器分配信息的已編譯應(yīng)用代碼。該系統(tǒng)可在運(yùn)行應(yīng)用的第一次請(qǐng)求時(shí)、在來自計(jì)算設(shè)備的硬盤驅(qū)動(dòng)器或其他存儲(chǔ)的掃描的批量處理期間、或響應(yīng)于特定用戶或管理員請(qǐng)求,來接收應(yīng)用代碼。已編譯應(yīng)用代碼可包括針對(duì)特定處理器(例如,x86或x64 二進(jìn)制代碼)的二進(jìn)制代碼、針對(duì)特定運(yùn)行時(shí)的中間語言代碼、或其他形式的非源應(yīng)用代碼。在源可用時(shí),該應(yīng)用可被直接修改以使用該系統(tǒng),如本文其他部分所述的。
[0102]在框620繼續(xù),該系統(tǒng)對(duì)接收到的應(yīng)用代碼執(zhí)行靜態(tài)分析以確定該代碼內(nèi)該應(yīng)用分配存儲(chǔ)器的位置。靜態(tài)分析可以尋找對(duì)存儲(chǔ)器分配函數(shù)的調(diào)用,如通過導(dǎo)入的模塊或其他手段。在一些情況下,靜態(tài)分析擅長找出函數(shù)調(diào)用以及所傳遞的參數(shù)。在一些實(shí)施例中,該系統(tǒng)用動(dòng)態(tài)分析來擴(kuò)充靜態(tài)分析,并運(yùn)行該應(yīng)用以標(biāo)識(shí)不能靜態(tài)地獲得或不能容易地靜態(tài)地檢測(cè)的信息。
[0103]在框630繼續(xù),該系統(tǒng)標(biāo)識(shí)所分析的應(yīng)用代碼中的一個(gè)或多個(gè)存儲(chǔ)器相關(guān)的代碼動(dòng)作。代碼動(dòng)作可包括存儲(chǔ)器分配、存儲(chǔ)器訪問、存儲(chǔ)器釋放、和其他存儲(chǔ)器操作。該系統(tǒng)可通過動(dòng)作發(fā)生的地址或通過可稍后提供給主機(jī)或者被修改以改變默認(rèn)應(yīng)用行為的其他標(biāo)識(shí),來標(biāo)識(shí)代碼動(dòng)作。
[0104]在框640繼續(xù),該系統(tǒng)標(biāo)識(shí)與每一所標(biāo)識(shí)的代碼動(dòng)作有關(guān)的周圍信息,所述周圍信息提供了描述所分配的存儲(chǔ)器如何被該應(yīng)用使用的附加信息。周圍信息可以告知該系統(tǒng)該分配被存儲(chǔ)了多久(例如,在同一函數(shù)中被使用了一次或存儲(chǔ)在全局變量中以供重復(fù)的后續(xù)使用)、該應(yīng)用有多容易填充該存儲(chǔ)器分配的內(nèi)容,等等。周圍信息可通過靜態(tài)和/或動(dòng)態(tài)分析來被標(biāo)識(shí)。
[0105]在框650繼續(xù),該系統(tǒng)將所標(biāo)識(shí)的存儲(chǔ)器相關(guān)的代碼動(dòng)作和任何所標(biāo)識(shí)的周圍信息儲(chǔ)存在數(shù)據(jù)存儲(chǔ)中以供在運(yùn)行該應(yīng)用時(shí)主機(jī)的后續(xù)檢索。在一些實(shí)施例中,該系統(tǒng)將所標(biāo)識(shí)的信息儲(chǔ)存在與應(yīng)用模塊一起存儲(chǔ)的清單中,使得加載該應(yīng)用的主機(jī)可以執(zhí)行對(duì)所標(biāo)識(shí)的位置的任何截取或掛鉤以向主機(jī)提供描述該應(yīng)用所做出的存儲(chǔ)器分配的更多信息。主機(jī)可以使用這一信息例如來在該系統(tǒng)空閑時(shí)或未被充分利用時(shí)預(yù)先分配該應(yīng)用將在未來某一時(shí)刻需要的存儲(chǔ)器,如該分析所確定的。這允許傳統(tǒng)應(yīng)用參與本存儲(chǔ)器管理系統(tǒng)所提供的存儲(chǔ)器模型。在框650之后,這些步驟結(jié)束。
[0106]圖7是示出一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)響應(yīng)于檢測(cè)到的存儲(chǔ)器壓力來采取與存儲(chǔ)器有關(guān)的動(dòng)作的處理的流程圖。存儲(chǔ)器壓力可在具有有限存儲(chǔ)器的設(shè)備接近其可用存儲(chǔ)器時(shí)發(fā)生。例如,系統(tǒng)操作系統(tǒng)可以將存儲(chǔ)器壓力定義為在已使用物理RAM的90%時(shí)發(fā)生。
[0107]在框710開始,該系統(tǒng)接收描述多個(gè)存儲(chǔ)器分配請(qǐng)求以及一個(gè)或多個(gè)應(yīng)用如何使用存儲(chǔ)器分配的信息。在一些情況下,該系統(tǒng)在從應(yīng)用接收到各分配以及描述每一分配是如何使用的相關(guān)聯(lián)的元數(shù)據(jù)時(shí)存儲(chǔ)分配的列表或其他數(shù)據(jù)結(jié)構(gòu)。分配使用信息可包括可幫助該系統(tǒng)確定哪些分配可被釋放、分頁或以其他方式處理來高效地管理可用存儲(chǔ)器的優(yōu)先級(jí)或其他信息。
[0108]在框720繼續(xù),該系統(tǒng)檢測(cè)指示需要采取動(dòng)作來繼續(xù)高效地運(yùn)行各應(yīng)用的存儲(chǔ)器壓力。檢測(cè)到的存儲(chǔ)器壓力可包括內(nèi)核或其他主機(jī)可采取的各種條件或動(dòng)作。例如,內(nèi)核可能想要關(guān)閉一排存儲(chǔ)器以節(jié)省能量,并且可檢測(cè)儲(chǔ)存在該排上的分配并釋放這些分配或?qū)⑦@些分配對(duì)換到盤以使得該排可被關(guān)閉。作為另一示例,該系統(tǒng)可以對(duì)各存儲(chǔ)器排進(jìn)行碎片整理以獲得可被關(guān)閉的空排。在主機(jī)沒有完全控制存儲(chǔ)器的使用的情況下,在沒有應(yīng)用協(xié)作的情況下執(zhí)行移動(dòng)或釋放存儲(chǔ)器的操作通常是困難的。然而,本文描述的存儲(chǔ)器管理系統(tǒng)給予主機(jī)更多信息和對(duì)如何管理存儲(chǔ)器的更多控制。
[0109]在框730繼續(xù),該系統(tǒng)枚舉接收到的分配請(qǐng)求以確定要對(duì)其采取動(dòng)作的分配。該系統(tǒng)可以遍歷分配的列表或其他數(shù)據(jù)結(jié)構(gòu)以確定在它們需要被釋放的情況下能被容易地恢復(fù)的分配或應(yīng)用不太可能再次使用的分配。
[0110]在框740繼續(xù),該系統(tǒng)選擇所枚舉的分配中的要對(duì)其采取動(dòng)作的一個(gè)或多個(gè)分配。該系統(tǒng)可基于接收到的描述請(qǐng)求分配的應(yīng)用如何使用該分配的信息來選擇分配。在一些情況下,取決于存儲(chǔ)器管理器的特定目標(biāo)(例如,對(duì)特定總大小的存儲(chǔ)器進(jìn)行操作并找出加起來達(dá)到或超過該大小的分配),該系統(tǒng)可以選擇多個(gè)分配。
[0111]在框750繼續(xù),該系統(tǒng)對(duì)所選分配執(zhí)行動(dòng)作以釋放存儲(chǔ)器壓力。該動(dòng)作可包括釋放先前分配的存儲(chǔ)器、將存儲(chǔ)器內(nèi)容對(duì)換到盤或其他存儲(chǔ)、將存儲(chǔ)器從先前位置移動(dòng)到新位置,等等。在一些情況下,該系統(tǒng)向該應(yīng)用通知該動(dòng)作,使得該應(yīng)用可以修改依賴于該分配的行為。例如,該應(yīng)用可通過在該應(yīng)用下次使用存儲(chǔ)器時(shí)重新分配該存儲(chǔ)器來進(jìn)行響應(yīng)。在框750之后,這些步驟結(jié)束。
[0112]圖8是示出一個(gè)實(shí)施例中的存儲(chǔ)器管理系統(tǒng)激活其存儲(chǔ)器先前已被主機(jī)修改的應(yīng)用的處理的流程圖。在許多多任務(wù)系統(tǒng)中,各應(yīng)用被推到后臺(tái)并且稍后被用戶或操作系統(tǒng)重新激活。在移動(dòng)設(shè)備上,用戶可一次與一個(gè)應(yīng)用進(jìn)行交互,并且操作系統(tǒng)可在特定應(yīng)用處于前臺(tái)時(shí)掛起其他應(yīng)用。操作系統(tǒng)可釋放其他應(yīng)用的存儲(chǔ)器或者將它流傳送到盤或其他存儲(chǔ)。在激活時(shí),操作系統(tǒng)可采取動(dòng)作來準(zhǔn)備該應(yīng)用再次運(yùn)行。
[0113]在框810中開始,系統(tǒng)接收激活應(yīng)用請(qǐng)求。該請(qǐng)求可來自應(yīng)用自身、來自用戶、或來自操作系統(tǒng)。激活請(qǐng)求可簡(jiǎn)單地指示用戶再次與該應(yīng)用交互,使得該應(yīng)用可請(qǐng)求先前所分配的存儲(chǔ)器。
[0114]在框820中繼續(xù),該系統(tǒng)標(biāo)識(shí)一個(gè)或多個(gè)先前接收到的應(yīng)用存儲(chǔ)器分配。該系統(tǒng)可維護(hù)一個(gè)或多個(gè)分配所請(qǐng)求的每一分配的列表或其他數(shù)據(jù)結(jié)構(gòu),使得該系統(tǒng)可以通過遍歷該列表來標(biāo)識(shí)先前接收到的存儲(chǔ)器分配。該系統(tǒng)可以檢查每一分配的狀態(tài),如與該分配相關(guān)的存儲(chǔ)器是否仍然可用且仍然包含該應(yīng)用最后置于其中的內(nèi)容。
[0115]在決策框830繼續(xù),如果該系統(tǒng)確定該應(yīng)用的分配全部就緒,則該系統(tǒng)跳轉(zhuǎn)到框860,否則該系統(tǒng)在框840繼續(xù)。該系統(tǒng)可以釋放、移動(dòng)、分頁、或以其他方式對(duì)各應(yīng)用分配采取動(dòng)作以提供用于運(yùn)行其他任務(wù)的更多存儲(chǔ)器,如運(yùn)行其他應(yīng)用。因而,在再次運(yùn)行該應(yīng)用時(shí),該系統(tǒng)可恢復(fù)先前操作依據(jù)的分配或可向該應(yīng)用通知這些動(dòng)作,使得該應(yīng)用可以采取適當(dāng)?shù)膭?dòng)作。
[0116]在框840繼續(xù),該系統(tǒng)分配未就緒的分配以將這些分配置于該應(yīng)用所預(yù)期的狀態(tài)。該系統(tǒng)可以通過分配滿足該分配的可用物理存儲(chǔ)器來向這些分配指派物理存儲(chǔ)器。在一些情況下,該系統(tǒng)可以提供虛擬存儲(chǔ)器,如由物理存儲(chǔ)器和對(duì)換文件所支持的那些。
[0117]在框850繼續(xù),該系統(tǒng)使用該應(yīng)用所提供的填充函數(shù)來填充所分配的存儲(chǔ)器內(nèi)容。該應(yīng)用向該系統(tǒng)提供足夠信息,使得該系統(tǒng)可以釋放并重新創(chuàng)建各應(yīng)用的存儲(chǔ)器分配。這允許該系統(tǒng)做出在各應(yīng)用之間共享資源的高效決策,同時(shí)保持對(duì)應(yīng)用的負(fù)面影響很低。理想地,在該系統(tǒng)處于存儲(chǔ)器或其他壓力之下時(shí),該系統(tǒng)釋放或移動(dòng)將無論如何也不會(huì)很快使用的并且隨后在它被再次需要之前有時(shí)間進(jìn)行恢復(fù)的存儲(chǔ)器。在傳統(tǒng)系統(tǒng)中,主機(jī)所能做的最好的是猜測(cè),但使用本文的存儲(chǔ)器管理系統(tǒng),主機(jī)可以非常高效地選擇要操作的一個(gè)或多個(gè)存儲(chǔ)器分配。
[0118]在框860繼續(xù),該系統(tǒng)激活所請(qǐng)求的應(yīng)用并向該應(yīng)用提供該應(yīng)用所預(yù)期的存儲(chǔ)器分配。該系統(tǒng)可在為該應(yīng)用準(zhǔn)備存儲(chǔ)器時(shí)掛起該應(yīng)用,并且在該應(yīng)用的所有存儲(chǔ)器分配就緒時(shí)恢復(fù)該應(yīng)用。在框860之后,這些步驟結(jié)束。
[0119]從前面的描述中可以看出,可以理解,存儲(chǔ)器管理系統(tǒng)的特定實(shí)施例只是為了說明,但是,在不偏離本發(fā)明的精神和范圍的情況下,可以進(jìn)行各種修改。因此,本發(fā)明只受所附權(quán)利要求限制。
【權(quán)利要求】
1.一種軟件應(yīng)用中的向增強(qiáng)的存儲(chǔ)器管理系統(tǒng)請(qǐng)求分配和使用存儲(chǔ)器的計(jì)算機(jī)實(shí)現(xiàn)的方法,所述方法包括:設(shè)置描述應(yīng)用將如何使用存儲(chǔ)器分配的分配元數(shù)據(jù);設(shè)置填充所述存儲(chǔ)器分配的內(nèi)容的存儲(chǔ)器填充函數(shù);調(diào)用由主機(jī)提供的管理跨多個(gè)應(yīng)用共享的物理存儲(chǔ)器的分配接口,其中所述應(yīng)用經(jīng)由所述分配接口向所述主機(jī)提供所設(shè)置的分配元數(shù)據(jù)和存儲(chǔ)器填充函數(shù);響應(yīng)于調(diào)用所述分配接口來接收引用,其中所述引用用作供所述應(yīng)用對(duì)所述存儲(chǔ)器分配的后續(xù)使用的間接標(biāo)識(shí)符,其中,前述步驟由至少一個(gè)處理器來執(zhí)行。
2.如權(quán)利要求1所述的方法,其特征在于,設(shè)置分配元數(shù)據(jù)包括構(gòu)建用于傳遞給接收分配元數(shù)據(jù)的分配函數(shù)的參數(shù)結(jié)構(gòu)。
3.如權(quán)利要求1所述的方法,其特征在于,設(shè)置分配元數(shù)據(jù)包括調(diào)用用于在進(jìn)行分配后提供分配元數(shù)據(jù)的單獨(dú)的應(yīng)用編程接口(API)。
4.如權(quán)利要求1所述的方法,其特征在于,設(shè)置分配元數(shù)據(jù)包括設(shè)置用于分配存儲(chǔ)器的、接收分配元數(shù)據(jù)以增強(qiáng)存儲(chǔ)器管理的派生類的參數(shù)。
5.如權(quán)利要求1所述的方法,其特征在于,設(shè)置分配元數(shù)據(jù)包括包含對(duì)于所述應(yīng)用的存儲(chǔ)器的優(yōu)先級(jí)的元數(shù)據(jù)。
6.如權(quán)利要求1所述的方法,其特征在于,設(shè)置分配元數(shù)據(jù)包括包含所述應(yīng)用計(jì)劃有多頻繁地使用所分配的存儲(chǔ)器的元數(shù)據(jù)。
7.如權(quán)利要求1所述的方法,其特征在于,設(shè)置分配元數(shù)據(jù)包括包含所述應(yīng)用替換所述分配的內(nèi)容有多困難的元數(shù)據(jù)。
8.如權(quán)利要求1所述的方法,其特征在于,設(shè)置所述存儲(chǔ)器填充函數(shù)包括設(shè)置訪問來自文件的信息以填充所述存儲(chǔ)器分配的內(nèi)容的函數(shù)。
9.如權(quán)利要求1所述的方法,其特征在于,設(shè)置所述存儲(chǔ)器填充函數(shù)包括設(shè)置稍后可由所述主機(jī)調(diào)用以便在不涉及所述應(yīng)用的情況下代表所述應(yīng)用填充存儲(chǔ)器內(nèi)容的函數(shù)。
10.如權(quán)利要求1所述的方法,其特征在于,設(shè)置所述存儲(chǔ)器填充函數(shù)包括向所述主機(jī)提供釋放和重新填充所述存儲(chǔ)器或者延遲所述存儲(chǔ)器的分配和初始填充直到對(duì)于所述主機(jī)而言更合適的時(shí)間所需的信息。
11.如權(quán)利要求1所述的方法,其特征在于,接收所述引用包括在所述應(yīng)用想要使用所述存儲(chǔ)器的情況下向所述主機(jī)提供所述引用以獲取對(duì)所述存儲(chǔ)器的直接訪問。
12.如權(quán)利要求1所述的方法,其特征在于,還包括如果所述應(yīng)用檢測(cè)到所述應(yīng)用對(duì)所分配的存儲(chǔ)器已使用完畢,調(diào)用所述分配接口來解除分配先前分配的存儲(chǔ)器。
13.如權(quán)利要求1所述的方法,其特征在于,還包括在所述應(yīng)用訪問所述存儲(chǔ)器后向所述主機(jī)指示所述主機(jī)能夠再次執(zhí)行可使得所述存儲(chǔ)器變得不可用的管理操作。
14.一種用于向應(yīng)用主機(jī)提供對(duì)軟件應(yīng)用中的對(duì)存儲(chǔ)器的分配和使用的更多控制的計(jì)算機(jī)系統(tǒng),所述系統(tǒng)包括:被配置成執(zhí)行包含在以下組件內(nèi)的軟件指令的處理器和存儲(chǔ)器;元數(shù)據(jù)接收組件,所述元 數(shù)據(jù)接收組件接收與每一次存儲(chǔ)器分配相關(guān)聯(lián)的信息,所述信息向應(yīng)用主機(jī)提供描述所述應(yīng)用如何使用所述存儲(chǔ)器的信息;填充規(guī)定組件,所述填充規(guī)定組件接收描述如何填充特定存儲(chǔ)器分配的內(nèi)容的信息;分配請(qǐng)求組件,所述分配請(qǐng)求組件將來自所述應(yīng)用的請(qǐng)求提交給所述主機(jī)以便基于接收到的元數(shù)據(jù)和填充規(guī)定來分配存儲(chǔ)器; 存儲(chǔ)器引用組件,所述存儲(chǔ)器引用組件在所述應(yīng)用訪問作為先前提交的分配請(qǐng)求的主體的存儲(chǔ)器之前從所述應(yīng)用接收指示; 應(yīng)用接口組件,所述應(yīng)用接口組件提供所述應(yīng)用和主機(jī)之間的通信接口以協(xié)商對(duì)存儲(chǔ)器分配的使用;以及 主機(jī)組件,所述主機(jī)組件包括所述應(yīng)用在其中運(yùn)行的環(huán)境并提供使用所述接收到的元數(shù)據(jù)和填充規(guī)定來管理存儲(chǔ)器的存儲(chǔ)器管理器。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述元數(shù)據(jù)接收組件接收指示以下內(nèi)容的信息:對(duì)于所述應(yīng)用而言分配應(yīng)可以多容易地訪問或者所述應(yīng)用計(jì)劃多頻繁地訪問與所述分配相關(guān)聯(lián)的存儲(chǔ)器。
【文檔編號(hào)】G06F12/00GK103608766SQ201280030227
【公開日】2014年2月26日 申請(qǐng)日期:2012年6月18日 優(yōu)先權(quán)日:2011年6月20日
【發(fā)明者】J·C·斯帕德林, G·亨特, A·卓哈, S·馬耶 申請(qǐng)人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
武安市| 宝鸡市| 疏附县| 安多县| 灵石县| 五寨县| 安国市| 民乐县| 新民市| 平利县| 方城县| 琼结县| 郸城县| 西丰县| 利津县| 新邵县| 巴林左旗| 清苑县| 斗六市| 和林格尔县| 祁门县| 武夷山市| 乐清市| 台安县| 南宁市| 霞浦县| 八宿县| 河曲县| 伊宁县| 万载县| 交城县| 英吉沙县| 宜都市| 三河市| 荆州市| 玉田县| 湘乡市| 肃宁县| 武川县| 射阳县| 丹巴县|