專利名稱:用于在可控運(yùn)行時(shí)環(huán)境中進(jìn)行基于硬件的動態(tài)逸出檢測的方法和裝置的制作方法
技術(shù)領(lǐng)域:
一個(gè)或多個(gè)實(shí)施例一般涉及集成電路和計(jì)算機(jī)系統(tǒng)設(shè)計(jì)領(lǐng)域。更具體
地, 一個(gè)或多個(gè)實(shí)施例涉及用于在可控運(yùn)行時(shí)環(huán)境(managed run-time environment)中進(jìn)行基于硬件的動態(tài)逸出(escape)檢測的方法和裝置。
背景技術(shù):
可控運(yùn)行時(shí)環(huán)境是用于運(yùn)行基于新編程語言的應(yīng)用程序的基礎(chǔ)結(jié)構(gòu), 所述新編程語言例如Java和C-Sharp (C#)。在可控運(yùn)行時(shí)環(huán)境的背景中, 執(zhí)行從公共內(nèi)存區(qū)域的對象分配,所述公共內(nèi)存區(qū)域被稱為"堆",其在該 環(huán)境中經(jīng)常是共享資源。 一般地,在該環(huán)境中,作為自動內(nèi)存管理的一部 分來對堆進(jìn)行周期性地收集。這通常涉及動態(tài)掃描為不可達(dá)對象所分配的 內(nèi)存,以及返回被該對象占用的內(nèi)存。如本文所描述的,可以將所分配的 對象分類為具有局部范圍或全局范圍。
如本文所描述的,被定義或分類為具有局部范圍的對象是對單個(gè)線程 可見的對象。換句話說,局部對象僅被局部指針訪問,或僅被同一線程的 其它局部對象鏈接。相反,被分類為具有全局范圍的對象是指對一個(gè)以上 線程可見的對象。
在多線程可控運(yùn)行時(shí)環(huán)境(MRTE)中,當(dāng)在已知對單個(gè)線程為局部的 對象上進(jìn)行操作時(shí),能夠應(yīng)用很多優(yōu)化??梢员苊饩植繉ο蟮耐?,并且 可以用啟動局部收回的方式分配局部對象,從而使MRTE中全局垃圾收集 器的工作負(fù)擔(dān)最小化。
實(shí)際上大多數(shù)對象都是局部的,但是難以確定給定對象為局部還是全 局。傳統(tǒng)地,存在兩種方法來確定對象是否為局部。第一種方法能夠執(zhí)行 程序的編譯器靜態(tài)分析并確定對象從何時(shí)創(chuàng)建到何時(shí)消滅,對象無法變?yōu)?對另一線程是可達(dá)的。遺憾的是,靜態(tài)分析僅能標(biāo)識可被可證實(shí)地標(biāo)識為局部的一小部分對象。
第二種用于標(biāo)識局部對象的方法為動態(tài)地保持跟蹤哪些對象為局部 以及哪些對象為全局,并且通過檢測出到對象的鏈接當(dāng)前使得該對象變得 全局可達(dá)來檢測對象何時(shí)變?yōu)槿?。如本文所描述的,對象的范圍或可達(dá) 性是指對象對任一單個(gè)線程的可見性,或稱為"局部可達(dá)的",其中該對象 被視為具有局部范圍。相反,將對一個(gè)以上線程可見的對象標(biāo)識為具有全 局范圍,或者可選地稱為"全局可達(dá)的"。
動態(tài)逸出檢測提供了一種方法,其用于通過檢測出到對象的鏈接當(dāng)前 使得該對象變得全局可達(dá)來確定局部對象何時(shí)變?yōu)槿?。傳統(tǒng)的動態(tài)逸出 檢測是通過檢查對象的每次更新來實(shí)現(xiàn)的?;谒龈拢绻骆溄訉?目標(biāo)對象從局部可達(dá)對象變?yōu)槿挚蛇_(dá)對象,則該目標(biāo)對象當(dāng)前包括已修 改的范圍,從而局部對象當(dāng)前為具有全局范圍的或可選地標(biāo)識為"全局可
達(dá)的"全局對象。如本文所描述的,"寫屏障(write barrier)"是指執(zhí)行所 述檢査,以基于指針更新來確定是否檢測出局部對象的動態(tài)逸出檢測。
在大多數(shù)MRTE中,并未嘗試標(biāo)識局部對象,也未基于這種獲知去優(yōu) 化運(yùn)行。原因在于靜態(tài)分析僅標(biāo)識很少的優(yōu)化候選。此外,動態(tài)逸出檢測 的開銷減少了進(jìn)行優(yōu)化和利用局部對象獲知的益處。
在下面的附圖中,通過實(shí)例而非限定的方式示出了本發(fā)明的多個(gè)實(shí)施 例,其中-
圖1是示出根據(jù)一個(gè)實(shí)施例的提供基于硬件的動態(tài)逸出檢測的可控運(yùn) 行時(shí)環(huán)境(MRTE)的方框圖。
圖2是示出根據(jù)一個(gè)實(shí)施例的提供屬性感知(aware)技術(shù)(AAT)的
高速緩存的方框圖。
圖3是示出根據(jù)一個(gè)實(shí)施例的AAT指令的方框圖。
圖4是示出根據(jù)一個(gè)實(shí)施例的基本指針更新操作的方框圖。 圖5是示出根據(jù)一個(gè)實(shí)施例的用于如圖1所示的MRTE的可選平臺配 置的方框圖。
圖6是示出根據(jù)一個(gè)實(shí)施例的計(jì)算機(jī)平臺的方框圖,在該計(jì)算機(jī)平臺中,可以實(shí)現(xiàn)如圖1所示的MRTE以提供基于硬件的動態(tài)逸出檢測。
圖7是示出根據(jù)一個(gè)實(shí)施例的對稱多處理器(SMP)計(jì)算機(jī)系統(tǒng)的方
框圖,在該對稱多處理器計(jì)算機(jī)系統(tǒng)中可以實(shí)現(xiàn)如圖1所示的MRTE。
圖8是示出根據(jù)一個(gè)實(shí)施例的用于提供基于硬件的動態(tài)逸出檢測的方
法的流程圖。
圖9是示出根據(jù)一個(gè)實(shí)施例的用于進(jìn)行初始化以啟動基于硬件的動態(tài) 逸出檢測的方法的流程圖。
圖IO是示出根據(jù)一個(gè)實(shí)施例的用于發(fā)出AAT指令的方法的流程圖。
圖11是示出根據(jù)一個(gè)實(shí)施例的用于調(diào)用處理程序例程以驗(yàn)證目標(biāo)對象 的范圍為局部的方法的流程圖。
圖12是示出根據(jù)一個(gè)實(shí)施例的用于將局部對象轉(zhuǎn)換為全局對象的方法 的流程圖。
圖13是示出根據(jù)一個(gè)實(shí)施例的用于將局部對象轉(zhuǎn)換為全局對象的方法 的流程圖。
圖14是示出根據(jù)一個(gè)實(shí)施例的用于啟動基于硬件的動態(tài)逸出檢測的方 法的流程圖。
圖15是示出根據(jù)一個(gè)實(shí)施例的用于初始化高速緩存以啟動基于硬件的 動態(tài)逸出檢測的方法的流程圖。
具體實(shí)施例方式
描述了一種用于在可控運(yùn)行時(shí)環(huán)境中進(jìn)行基于硬件的動態(tài)逸出檢測的 方法和裝置。在一個(gè)實(shí)施例中,所述方法包括檢測具有全局范圍的第一對 象的指針更新。在一個(gè)實(shí)施例中,所述指針更新將所述第一對象的鏈接更 新為指向第二對象。在一個(gè)實(shí)施例中,發(fā)出單個(gè)指令,以斷言(assert)與 第二對象關(guān)聯(lián)的范圍屬性將第二對象的范圍標(biāo)識為全局。如果與第二對象 關(guān)聯(lián)的范圍屬性將第二對象的范圍標(biāo)識為局部,則所述單個(gè)指令可以返回 失敗。在一個(gè)實(shí)施例中,所述單個(gè)指令的失敗可以引起該單個(gè)指令調(diào)用處 理程序例程,以驗(yàn)證(verify)所述第二對象的范圍為局部。所述驗(yàn)證可以 包括讀取第二對象的對象描述符,以確定對象描述符的范圍屬性是否指示 第二對象的范圍為局部。如果已經(jīng)驗(yàn)證,則將第二對象和從該第二對象可達(dá)的每個(gè)對象轉(zhuǎn)換為全局對象。
在下面的描述中,為了提供更全面的理解而給出大量具體細(xì)節(jié),例如
邏輯實(shí)^a、信號和總線的大小和名稱、系統(tǒng)部件的類型和相互關(guān)系以及邏 輯劃分/集成選擇。然而,應(yīng)該注意,在沒有這些具體細(xì)節(jié)的情況下,本領(lǐng) 域技術(shù)人員也可以實(shí)施本發(fā)明。在其它實(shí)例中,沒有具體示出控制結(jié)構(gòu)和 門級電路,以避免使本發(fā)明不夠明確。通過所包括的描述,本領(lǐng)域技術(shù)人 員不需進(jìn)行過多實(shí)驗(yàn)就能夠?qū)崿F(xiàn)適當(dāng)?shù)倪壿嬰娐贰?br>
在下面的描述中,使用某些術(shù)語來描述特征。例如,術(shù)語"邏輯"代 表被配置用于實(shí)現(xiàn)一個(gè)或多個(gè)功能的硬件和/或軟件。例如,"硬件"的實(shí)例 包括但不限制或約束于集成電路、有限狀態(tài)機(jī)或者組合邏輯。集成電路可 'u采用處理器形式,所述處理器例如微處理器、專用集成電路、數(shù)字信號 處理器、微控制器等等。
圖1是示出根據(jù)一個(gè)實(shí)施例的可控運(yùn)行時(shí)環(huán)境(MRTE) 100的方框圖, 其包括寫屏障邏輯100,用于執(zhí)行基于硬件的動態(tài)逸出檢測。典型地,MRTE 100包括內(nèi)核虛擬機(jī)(CVM)102,其能夠?qū)⒆止?jié)碼解釋為能被主機(jī)平臺140 理解的指令,其中MRTE IOO在所述主機(jī)平臺140上運(yùn)行。在一個(gè)實(shí)施例 中,CVM 102是Java虛擬機(jī)(JVM)。在可選實(shí)施例中,CVM 102是C-Sharp (C#)程序的通用語言基礎(chǔ)結(jié)構(gòu)(CLI)。
如本領(lǐng)域技術(shù)人員所公知的,虛擬機(jī)(VM)在邏輯上劃分物理機(jī)器, 使得機(jī)器的底層硬件表現(xiàn)為一個(gè)或多個(gè)獨(dú)立運(yùn)行的VM。盡管沒有示出, CVM 102可以包括虛擬機(jī)監(jiān)視器(VMM),其創(chuàng)建CVM 102并在平臺硬件 140上運(yùn)行,以協(xié)助其它軟件提取一個(gè)或多個(gè)VM。因此,CVM102可以作 為自包含平臺,運(yùn)行其自己的操作系統(tǒng)(OS)和應(yīng)用軟件。如圖1中所示, CVM 102提供對主機(jī)平臺硬件140的抽象。在一個(gè)實(shí)施例中,主機(jī)平臺140 可以包括多核處理器,以支持多個(gè)應(yīng)用程序線程的運(yùn)行。
在一個(gè)實(shí)施例中,MRTE100提供自動內(nèi)存管理、類型管理、線程和同 步以及動態(tài)加載功能。典型地,由MRTE提供的自動內(nèi)存管理包括對堆106 的管理。如本文所描述的,堆是為應(yīng)用程序的動態(tài)內(nèi)存分配需要而保留的 一個(gè)內(nèi)存區(qū)域。因此,通常,由于不能在編譯時(shí)確定將被分配的對象的大 小、數(shù)量和延遲時(shí)間,所以將堆保留用于在運(yùn)行時(shí)創(chuàng)建的數(shù)據(jù)。對于具有較小內(nèi)存占用面積的設(shè)備,例如包括蜂窩電話和個(gè)人數(shù)字助理的移動設(shè)備, 對該相對有限的內(nèi)存進(jìn)行管理以使可用存儲容量最大化的處理將成為極大 的限制。
再次參照圖1, CVM102可以包括執(zhí)行引擎112。在一個(gè)實(shí)施例中,執(zhí) 行引擎112可以將字節(jié)碼直接解釋為主機(jī)平臺140的處理器能夠理解的指 令。典型地,用例如Jave和C存等高級編程語言編寫的程序首先被編譯成采 用中間平臺發(fā)布格式的代碼,本文稱為"字節(jié)碼"。典型地,所編譯的字節(jié) 碼不在平臺上直接運(yùn)行。
因此,盡管MRTE可以直接解釋字節(jié)碼,但是通常不這樣做,除非內(nèi) 存極為有限。如圖1中所示,在一個(gè)實(shí)施例中,MRTE100包括即時(shí)(JIT) 編譯器108。從而,MRTE IOO可以執(zhí)行由JIT編譯器108生成的原生碼, 取代使用由執(zhí)行引擎104提供的相對較慢的字節(jié)碼解釋。
如圖1進(jìn)一步所示,根據(jù)一個(gè)實(shí)施例,MRTE 100可以包括運(yùn)行時(shí)存儲 管理器(RSM) 112和垃圾收集器(GC) 114。在一個(gè)實(shí)施例中,GC 114 聯(lián)合RSM 112—起執(zhí)行對堆106的管理以及垃圾收集,以收回未使用的內(nèi) 存。在一個(gè)實(shí)施例中,GC 114可以為對象管理分配空間,以及為垃圾收集 (GC)分配堆。典型地,當(dāng)堆用盡時(shí),GC 114在安全GC 114點(diǎn)處停止所 有可控線程,以從未使用的對象中收回內(nèi)存。因此,在一個(gè)實(shí)施例中,GC114 聯(lián)合RSM 112—起周期性地掃描為不可達(dá)對象動態(tài)分配的內(nèi)存,并返回被 這些對象占用的內(nèi)存。在一個(gè)實(shí)施例中,RSM功能可被并入到GC114中。
如本文所描述的,所分配的對象可以被分類為(1)局部,即,這些 對象對單個(gè)線程是可見的;或者(2)全局,S卩,該對象對一個(gè)以上線程是 可見的。例如,如圖1所示,在多線程MRTE環(huán)境中,當(dāng)在已知對單個(gè)線 程為局部的對象上進(jìn)行操作時(shí),能夠應(yīng)用很多優(yōu)化。由于局部對象僅對單 個(gè)線程是可達(dá)的,所以局部對象僅被局部指針訪問,或者被同一線程的其 它局部對象鏈接。因此,能夠避免很多同步操作,并且能夠分配局部對象 以啟動局部收回,從而使全局GC114的工作負(fù)擔(dān)最小化。
實(shí)際上大部分對象是局部的,但是難以確定給定對象是否為局部。用 于確定對象是否為局部的第一種方法被提供為執(zhí)行程序的編譯器靜態(tài)分 析以確定對象從何時(shí)創(chuàng)建到何時(shí)消滅,對象無法變?yōu)閷α硪痪€程是可達(dá)的。遺憾的是,靜態(tài)分析僅標(biāo)識出可被證實(shí)為局部的一小部分對象。
第二種所用的方法為動態(tài)地保持跟蹤哪些對象為局部或全局,并且 通過檢測出到對象的鏈接當(dāng)前使得該對象變得全局可達(dá)來檢測對象何時(shí)變 為全局。該方法在學(xué)術(shù)出版物中被稱為"動態(tài)逸出檢測"。 一種動態(tài)逸出檢 測的方法為每當(dāng)任意指針被更新時(shí),撿查新的鏈接是否將目標(biāo)對象從局 部可達(dá)變?yōu)槿挚蛇_(dá)。因此,如果指針更新將對象從局部可達(dá)變?yōu)槿挚?達(dá),則檢測出"動態(tài)逸出"。如本文所描述的,在本文中將為檢測動態(tài)逸出 而對所有指針更新進(jìn)行的檢查稱為"寫屏障"。
再次參照圖1,在一個(gè)實(shí)施例中,CVM 102可以為在MRTE 100內(nèi)執(zhí) 行的每個(gè)線程提供局部高速緩存200 (200-1, ..., 200-N),如圖2中進(jìn)一
步所示。在一個(gè)實(shí)施例中,如圖2所示,高速緩存200啟動元數(shù)據(jù)到由線 程實(shí)例化的不同對象的關(guān)聯(lián)或映射。如本文所描述的,屬性感知技術(shù)(AAT) 將屬性位與內(nèi)存塊進(jìn)行關(guān)聯(lián)。
因此,在圖2示出的實(shí)施例中,AAT提供對軟件可見的實(shí)際高速緩存 層級的簡化抽象。在一個(gè)實(shí)施例中,每個(gè)線程具有專用高速緩存(例如, 高速緩存200),所述高速緩存具有已知的行大小及未知的容量和關(guān)聯(lián)性。 此外,每個(gè)行處于三種狀態(tài)之一修改(該高速緩存具有對該行的獨(dú)占備 份,其中局部線程能夠?qū)υ撔羞M(jìn)行更新)、共享(該高速緩存具有對該行的 非獨(dú)占、只讀備份)和無效(該高速緩存不具有對該行的備份)。在一個(gè)實(shí) 施例中,每個(gè)高速緩存行201具有若干屬性位231,其可被應(yīng)用程序設(shè)置和 檢查。
如圖2中所示,高速緩存200可被修改為包括一個(gè)或多個(gè)屬性位234 (234-1、 234-2、 234-3、 234-4),其是基于高速緩存行塊(201)定義的, 并且對特定線程是局部的。在一個(gè)實(shí)施例中,程序裝置(sequencer)按照 一個(gè)或多個(gè)AAT指令的指示來執(zhí)行數(shù)據(jù)加載并設(shè)置屬性234。在一個(gè)實(shí)施 例中,AAT啟動線程以設(shè)置內(nèi)存塊的屬性。此外,線程可以請求被通知具 有特定屬性位的高速緩存行何時(shí)被無效或從其局部高速緩存被逐出 (evict)。線程還能夠執(zhí)行內(nèi)存加載,即斷言特定屬性位被設(shè)置,以及如果 期望的屬性位沒有被設(shè)置,則取代所述加載而運(yùn)行用戶層處理程序。
因此,如本文所描述的,AAT引入了用戶控制屬性位234,其與高速緩存行201關(guān)聯(lián)。根據(jù)所期望的實(shí)現(xiàn)方式,盡管參照與高速緩存行的相關(guān) 性進(jìn)行了示例,但是元數(shù)據(jù)或?qū)傩晕慌c內(nèi)存塊的相關(guān)性不局限于屬性位與 高速緩存行的相關(guān)性,而是可以包括將系統(tǒng)內(nèi)存內(nèi)的、甚至是內(nèi)存頁面內(nèi) 的屬性位加入到盤片中。
圖3是示出在一個(gè)實(shí)施例中的加載設(shè)置(LOAD—AND—SET)指令216 和加載檢査(LOAD—AND—CHECK)指令218的方框圖,所述指令在本文 可被稱為"AAT指令"。在一個(gè)實(shí)施例中,LOAD—AND—SET指令216執(zhí)行 常規(guī)內(nèi)存LOAD—AND—SET,將參考行201的特定屬性位234設(shè)置為特定 值(例如,將第二屬性位設(shè)置為值1)。 一旦線程在其局部高速緩存200中 設(shè)置了屬性位,則線程就能請求被異步地通知關(guān)聯(lián)行201是否從其局部高 速緩存200中被無效。LOAD—AND—CHECK指令218執(zhí)行常規(guī)內(nèi)存加載, 同時(shí)斷言參考行的特定屬性位當(dāng)前被設(shè)置為特定值(例如,該行的第一屬 性位當(dāng)前被設(shè)置為零?)。如果行的屬性不具有期望值,則 LOAD—AND—CHECK指令218就被特定處理程序取代。清除屬性位 (CLEAR—ATTRIBUTE_BITS)指令(未示出)將特定位置的屬性位清除為 值0 (例如,清除高速緩存中每行的第三個(gè)屬性位)。
可以通過加載用戶專用處理程序來提供與所監(jiān)視到的行無效相關(guān)聯(lián)的 異步通知以及對失敗位斷言的同步處理。在一個(gè)被稱為"內(nèi)存行無效"(MLI) 方案的實(shí)施例中,適當(dāng)?shù)奶幚沓绦驅(qū)⑿枰m當(dāng)?shù)挠捎脩暨x擇的處理程序例 程,其中,當(dāng)具有特定屬性位設(shè)置的行在線程的高速緩存中被無效時(shí)(因 為其被另一線程明確地?zé)o效,或者因?yàn)檫@些行被簡單地從高速緩存中逐 出),需要調(diào)用所述適當(dāng)?shù)奶幚沓绦?。第二種方案被稱為"非預(yù)期內(nèi)存狀態(tài) (UMS )方案"。UMS方案標(biāo)識適當(dāng)?shù)奶幚沓绦?,其中,?dāng) LOAD—AND—CHECK指令218發(fā)現(xiàn)一個(gè)屬性不符合該指令所期望的值時(shí), 需要調(diào)用所述適當(dāng)?shù)奶幚沓绦颉?br>
在一個(gè)實(shí)施例中,AAT能夠進(jìn)一步擴(kuò)展為提供AAT區(qū)域描述符之一的 集合。這些用戶可編程區(qū)域描述符定義了由基址和邊界或等效方法所定義 的虛擬內(nèi)存空間的區(qū)域,其中,行的實(shí)際屬性由于LOAD一AND一CHECK指 令218而重寫。因此,在一個(gè)實(shí)施例中,當(dāng)LOAD—AND—CHECK指令218 的目標(biāo)地址落入預(yù)定的AAT區(qū)域內(nèi)時(shí),將所期望的屬性值與提供給該區(qū)域的基本屬性進(jìn)行比較,而不是將所期望的屬性值與參考行的實(shí)際AAT屬性 進(jìn)行比較。在一個(gè)實(shí)施例中,AAT區(qū)域描述符對于被無效或逐出的檢測行 和報(bào)告行沒有任何作用。
圖4是示出基本指針更新操作250的方框圖。典型地,將第一對象252 的指針253更新為指向第二對象254。在一個(gè)實(shí)施例中,將寫屏障邏輯(圖 1)描述為分析指針更新,以確定指針更新的目標(biāo)對象254是否已引起目標(biāo) 對象的動態(tài)逸出,從而目標(biāo)對象的范圍己從局部變?yōu)槿帧T诒砀?中示 出了基本指針更新操作。
__
_基本操作_
first_object->ptr —-. second—object
在一個(gè)實(shí)施例中,只要全局對象(第一對象)252的指針253中的一個(gè) 進(jìn)行更新,則寫屏障邏輯IIO(圖1)就檢查該全局對象將要指向的對象254 (第二 (目標(biāo))對象)當(dāng)前是否為局部對象。當(dāng)?shù)诙ο?54被標(biāo)識為局 部對象時(shí),在可執(zhí)行指針更新操作之前,需要將第二對象254從局部對象 轉(zhuǎn)換為全局對象。此外,將從第二對象可達(dá)的每個(gè)對象256轉(zhuǎn)換為全局對 象。表格2示出用于實(shí)現(xiàn)這些操作的偽代碼。
表格2
if (if—globally—reachable (first—object) = = true)
if (if_globaIly—reachable (second—object) = = false)
convert—to—globally reachable (second—object)
〃對從該對象可達(dá)的所有對象進(jìn)行遞歸 first—object->prt = second—object
遺憾的是,由于寫屏障功能的增加引起了重要的性能影響,該性能影 響為利用寫屏障功能(見表格2)替代每個(gè)指針更新(見表格1中所示的基 本操作)的性能影響。在一個(gè)實(shí)施例中,可以避免在表格2的偽代碼中指 示的第一次檢査,從而,能夠基于基本更新操作的背景來確定第一對象是 否為全局。因此,可以去除這部分寫屏障功能。然而,即使去除該功能, 將寫屏障功能包括到每個(gè)基本指針更新操作的開銷也是很大的。如表格2的偽代碼所示,第二次檢查用于確定第二對象是否為全局可 達(dá)。在一個(gè)實(shí)施例中,該檢査涉及讀取對象描述符,以確定該對象描述符 的范圍屬性是否將該第二對象標(biāo)識為全局。在一個(gè)實(shí)施例中,能夠使用機(jī) 器代碼實(shí)現(xiàn)該功能,所述機(jī)器代碼包括讀取指令、接著是比較指令、再接 著是條件分支指令。盡管這種機(jī)器代碼看起來相當(dāng)簡單,但是指針可被非 常頻繁地更新,從而即使稍微增加每個(gè)基本指針更新操作所執(zhí)行的操作, 都將會帶來使得應(yīng)用程序的執(zhí)行顯著減慢的凈效應(yīng)。
因此,在一個(gè)實(shí)施例中,如圖2和圖3中所示,屬性234與每個(gè)內(nèi)存 對象相關(guān)聯(lián),以將該對象的可達(dá)性標(biāo)識為局部或全局。因此,在一個(gè)實(shí)施 例中,執(zhí)行從對象到內(nèi)存塊(高速緩存行)的映射,其中對于該內(nèi)存塊保 持了AAT屬性。在一個(gè)實(shí)施例中,可以將對象與該對象開始的高速緩存行 相關(guān)聯(lián)。在一個(gè)實(shí)施例中,如果對象比高速緩存行更長,則將該對象開始 的第一高速緩存行的屬性認(rèn)為是該對象的屬性。
在一個(gè)實(shí)施例中,通過使得所有對象至少具有單個(gè)高速緩存行的高速 緩存行大小(約64字節(jié)),可以強(qiáng)制對象依賴于單個(gè)高速緩存行??蛇x地, 在一個(gè)實(shí)施例中,多個(gè)小對象可以在同一高速緩存行處起始。在一個(gè)實(shí)施 例中,提供了允許多個(gè)小對象在單個(gè)高速緩存行處起始的能力。在一個(gè)實(shí) 施例中,如果在高速緩存行上起始的任意對象是局部的,則將相應(yīng)高速緩 存行201的可達(dá)性屬性234標(biāo)記為局部。
在一個(gè)實(shí)施例中,可以假設(shè)對于每個(gè)局部對象,該對象開始的高速緩 存行將可達(dá)性屬性234設(shè)置為指示局部范圍。此外,還假設(shè)基于發(fā)生指針 更新的背景,能夠確定被更新的對象(第一對象)為局部或全局?;谶@ 種假設(shè),只有第一對象為全局時(shí),才執(zhí)行表格2中所示的偽代碼中的寫屏 障功能。
在一個(gè)實(shí)施例中,在表格2中所示的偽代碼被LOAD一AND一CHECK指 令218所取代,以斷言第二對象或目標(biāo)對象不是局部對象。在一個(gè)實(shí)施例 中,響應(yīng)于該斷言,如果LOAD一AND一CHECK指令失敗,則可以調(diào)用由用 戶選擇的處理程序來對第二對象執(zhí)行全面檢查,以確定第二對象是否真的 是局部對象;如果第二對象是局部對象,則對該局部對象和從第二對象可 達(dá)的所有對象執(zhí)行轉(zhuǎn)換,以將這些對象的范圍設(shè)置為局部。因此,在一個(gè)實(shí)施例中,AAT指令(216和218)可被用來實(shí)現(xiàn)單個(gè)加載指令,以提供用 于去除額外檢查的過濾器,所述額外檢查是用于動態(tài)逸出檢測的寫屏障語 義所必須的。
在對于其各自的線程,可達(dá)屬性與局部高速緩存的多個(gè)高速緩存行相 關(guān)聯(lián)的實(shí)施例中,按如下方式執(zhí)行對包含局部對象的高速緩存行的逐出。 在一個(gè)實(shí)施例中,如果所有局部對象均在特定地址區(qū)域內(nèi)創(chuàng)建,則可以為 AAT區(qū)域特征提供用于該區(qū)域的基本屬性位設(shè)置。根據(jù)該實(shí)施例,對包含 局部對象的高速緩存行的逐出不存在問題。在可選實(shí)施例中,可以提供MLI 方案以檢測局部對象起始的行何時(shí)被逐出。
在一個(gè)實(shí)施例中,假設(shè)將值1用作表示局部范圍的適當(dāng)?shù)膶傩誀顟B(tài)。 為實(shí)現(xiàn)該實(shí)施例,維護(hù)一個(gè)包含所有局部對象的列表。根據(jù)該實(shí)施例,當(dāng) 一個(gè)局部對象逸出高速緩存時(shí),能夠?qū)⑺芯植繉ο罄氐礁咚倬彺?。?一個(gè)實(shí)施例中,可以將一個(gè)或多個(gè)局部對象升級為全局對象,以減少被監(jiān) 視的行數(shù)。
在可選實(shí)施例中,將值0用作表示局部的適當(dāng)?shù)膶傩誀顟B(tài)。在這種情 況下,默認(rèn)將進(jìn)入高速緩存的所有對象標(biāo)記為局部。因此,在一個(gè)實(shí)施例 中,如果LOAD一AND—CHECK指令失敗,從而導(dǎo)致對對象描述符的全面檢 査,則可將行屬性更新為指示該對象的范圍實(shí)際上為全局。因此,對該目 標(biāo)全局對象的后續(xù)訪問將會被AAT屬性位成功過濾。所述多個(gè)實(shí)施例的實(shí) 現(xiàn)可以根據(jù)性能折衷來執(zhí)行并且略去實(shí)現(xiàn)細(xì)節(jié)。
圖5是示出用于圖1所示的MRTE主機(jī)平臺硬件300/400/500的不同配 置的方框圖。如圖1所示,根據(jù)獨(dú)立虛擬機(jī)(VM)模型,將MRTE示為包 括寫屏障邏輯(WBL) 310,以提供基于硬件的動態(tài)逸出檢測。在獨(dú)立VM 模型中,VM監(jiān)視器(VMM)或管理程序(hypervisor) VMM直接運(yùn)行在 硬件資源之上,例如硬件資源340/440/540。在一個(gè)實(shí)施例中,VMM 320 加載運(yùn)行時(shí)存儲管理器(RSM) 312和全局垃圾收集器(GC) 314。然而, MRTE 300/400/500的不同配置并不局限于圖1中所示的獨(dú)立VM模型。在 一個(gè)實(shí)施例中,mrte可以根據(jù)主機(jī)vm配置400來進(jìn)行配置,如圖5中所示。
典型地,主機(jī)VM模型400包括運(yùn)行在主機(jī)操作系統(tǒng)(OS) 442之上的VMM 420以及用于提供基于硬件的動態(tài)逸出檢測的WBL 410。在一個(gè) 實(shí)施例中,VMM420加載RSM412和GC414。在進(jìn)一步的實(shí)施例中,根 據(jù)如圖5中所示的混合VM模型500,可以將圖1中所示的MRTE 100配 置為包括用于提供基于硬件的動態(tài)逸出檢測的WBL 510。
典型地,混合VM模型500包括服務(wù)OS 542和微管理程序(基本VMM) 520,所述微管理程序520包括優(yōu)化的API 524。根據(jù)混合VM模型500, 微管理程序520可以負(fù)責(zé)CPU/內(nèi)存資源虛擬化和域調(diào)度。在一個(gè)實(shí)施例中, VMM 520加載RSM 512和GC 514。服務(wù)OS 542可以負(fù)責(zé)VM管理和設(shè)備 虛擬化/模擬。根據(jù)圖5中示出的實(shí)施例,可以根據(jù)圖5中所示的任意MRTE 配置300/400/500或其它相似配置來執(zhí)行基于硬件的動態(tài)逸出檢測。
圖6是示出根據(jù)一個(gè)實(shí)施例的計(jì)算機(jī)系統(tǒng)600的方框圖,其可并入如 圖l所示的MRTE 100,以提供動態(tài)的基于硬件的逸出檢測。初始地, 一個(gè) VM 602、寫屏障邏輯610、運(yùn)行時(shí)存儲管理器612和垃圾收集器614以及 例如主機(jī)固件(692、 694、 696)的其它相似部件被存儲在硬盤或盤片存儲 器681內(nèi),如圖6的計(jì)算機(jī)系統(tǒng)600中所示。如圖6中所示,可擴(kuò)展固件 接口 (EFI) 692支持客戶VM 602訪問固件部件。典型地,固件部件包括 系統(tǒng)抽象層(SAL) 696和處理器抽象層(PAL) 694。如本文所描述的, EFI692、 SAL696和PAL694在本文一起被稱為"主機(jī)固件"。在一個(gè)實(shí)施 例中,VM610經(jīng)由EFI接口 692與主機(jī)固件、具體為PAL694和SAL696 進(jìn)行交互,以提供可由CPU執(zhí)行應(yīng)用程序的環(huán)境。
典型地,計(jì)算機(jī)系統(tǒng)600可以是例如個(gè)人計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)系統(tǒng)600 可以包括多核處理器(例如,處理器660)、內(nèi)存控制器664、輸入/輸出(1/0) 控制器670以及一個(gè)或多個(gè)BIOS (基本輸入/輸出系統(tǒng))內(nèi)存(例如,BIOS 內(nèi)存670)。在一個(gè)實(shí)施例中,處理器660、內(nèi)存控制器664、 I/O控制器680 和BIOS內(nèi)存690可以駐留在芯片組661上。如本文所描述的,以本領(lǐng)域技 術(shù)人員公知的方式將術(shù)語"芯片組"用于整體描述耦合到處理器660的用 于執(zhí)行所需系統(tǒng)功能的多個(gè)設(shè)備。在可選實(shí)施例中,處理器660、內(nèi)存控制 器664、 I/O控制器680和BIOS內(nèi)存690可以駐留在其它類型的部件板上, 例如,子板。
內(nèi)存控制器664控制處理器660與內(nèi)存設(shè)備670之間的操作,所述內(nèi)存設(shè)備670包括例如多個(gè)存儲器模塊,所述存儲器模塊包括隨機(jī)存取存儲 器(RAM)、動態(tài)RAM (DRAM)、靜態(tài)RAM (SRAM)、同步DRAM (SDRAM)、雙倍數(shù)據(jù)速率(DDR)SDRAM(DDR-SDRAM)、 Rambus DRAM (RDRAM)或能夠支持?jǐn)?shù)據(jù)高速存儲的任意設(shè)備。1/O控制器680可以控 制處理器660與一個(gè)或多個(gè)輸入/輸出(I/O)設(shè)備685之間的操作,所述I/O 設(shè)備685例如通過低引腳數(shù)(LPC)總線連接的鍵盤和鼠標(biāo)。I/O控制器680 也可以控制處理器660與外圍設(shè)備之間的操作,所述外圍設(shè)備例如經(jīng)由集 成驅(qū)動電路(IDE)接口 687耦合到I/O控制器680的驅(qū)動器686。還可以 將附加的總線耦合到I/O控制器6S0,用于控制其它設(shè)備,例如外圍組件接 口 (PCI)鏈路682、或后續(xù)的點(diǎn)到點(diǎn)鏈路(例如,PCIx、 PCIExpress)、或 通用串行總線(USB) 688。在一個(gè)實(shí)施例中,內(nèi)存控制器664可被集成到 處理器660中,或者與I/O控制器680集成到單個(gè)部件中。
在所示實(shí)施例中,驅(qū)動器控制器683可以耦合到PCI鏈路682,并且可 以控制硬盤驅(qū)動器681的操作。在一個(gè)實(shí)施例中,VM 602、寫屏障邏輯610、 運(yùn)行時(shí)存儲管理器(RSM) 612和垃圾收集器(GC) 614可被存儲在硬盤 驅(qū)動器681上。通過這種方式,硬盤驅(qū)動器681可以作為引導(dǎo)設(shè)備,包括 例如加載不同主機(jī)部件的加載程序和加載MRTE部件的VM 602。
BIOS內(nèi)存690可以經(jīng)由總線684耦合到I/O控制器680。BIOS內(nèi)存690 是非易失性可編程存儲器,例如即使在不再被供電之后也可保持其內(nèi)所存 儲的數(shù)據(jù)內(nèi)容的閃存??蛇x地,BIOS內(nèi)存690可以是其它類型的可編程存 儲器設(shè)備,例如可編程只讀存儲器(PROM)和可擦除可編程只讀存儲器 (EPROM)。計(jì)算機(jī)系統(tǒng)600除BIOS內(nèi)存690外,還可以包括其它BIOS 內(nèi)存。
因此,如圖6中所示,BIOS內(nèi)存690可以包括主機(jī)平臺固件,用于在 系統(tǒng)復(fù)位之后對計(jì)算機(jī)系統(tǒng)進(jìn)行初始化。如本文所描述的,主機(jī)固件包括 EFI692、 SAL 696和PAL 694。因此,如本文所描述的,主機(jī)固件是在計(jì)算 機(jī)系統(tǒng)600啟動期間加載的,以提供主機(jī)平臺。啟動之后,主機(jī)平臺將加 載VM 602,其負(fù)責(zé)加載內(nèi)核VM 602、寫屏障邏輯610、運(yùn)行時(shí)存儲管理 器612、垃圾收集器614、服務(wù)OS642以及來自硬盤681的其它相似部件。
圖7是示出根據(jù)一個(gè)實(shí)施例的對稱多處理(SMP)系統(tǒng)700的方框圖,其可以運(yùn)行為MRTE100(圖1)的主機(jī)平臺,以提供基于硬件的逸出檢測。 典型地,SMP700可以包含單芯片多處理器'(CMP),其包括在同一管芯上 制成的多個(gè)處理器內(nèi)核760 (760-1,…,760-N)。如圖所示,處理器內(nèi)核 (CPU) 710耦合到互聯(lián)網(wǎng)絡(luò)780以訪問共享內(nèi)存770,以及耦合到寫屏障 邏輯(WBL) 710以提供基于硬件的動態(tài)逸出檢測。在一個(gè)實(shí)施例中,每 個(gè)CPU710包括專用內(nèi)核高速緩存層級(未示出),以支持如圖3中所示的 AAT指令。
典型地,CPU760經(jīng)由互聯(lián)網(wǎng)絡(luò)780訪問共享內(nèi)存770。在一個(gè)實(shí)施例 中,共享內(nèi)存770可以包括但不局限于雙側(cè)存儲器封裝,其包括多個(gè)存儲 器模塊,所述存儲器模塊包括隨機(jī)訪問存儲器(RAM)、動態(tài)RAM(DRAM)、 靜態(tài)RAM(SRAM)、同步DRAM(SDRAM)、雙倍數(shù)據(jù)速率(DDR)SDRAM (DDR-SDRAM)、 Rambus DRAM (RDRAM)或能夠支持?jǐn)?shù)據(jù)高速存儲的 任意設(shè)備。
因此,在所描述的實(shí)施例中,例如,如圖1所示的MRTE內(nèi)部的基于 硬件的逸出檢測可以包括主機(jī)平臺硬件,例如計(jì)算機(jī)系統(tǒng)600 (圖6)、 SMP 700 (圖7)或其它相似計(jì)算機(jī)體系結(jié)構(gòu)?,F(xiàn)在給出用于實(shí)現(xiàn)一個(gè)或多個(gè)上 述實(shí)施例的處理方法。
現(xiàn)在轉(zhuǎn)到圖8,通過參照流程圖,針對計(jì)算機(jī)軟件和硬件描述與不同實(shí) 施例關(guān)聯(lián)的特定方法。由計(jì)算設(shè)備(例如,MRTE)執(zhí)行的方法可以包括狀 態(tài)機(jī)或由計(jì)算機(jī)可執(zhí)行指令組成的計(jì)算機(jī)程序。可以用計(jì)算機(jī)程序和編程 語言將計(jì)算機(jī)可執(zhí)行指令編寫到或包含在固件邏輯中。如果用符合公認(rèn)標(biāo) 準(zhǔn)的編程語言編寫,則這些指令能夠在不同硬件平臺上執(zhí)行,并用于與多 種操作系統(tǒng)接口。
此外,并未參照任何特定編程語言描述實(shí)施例。應(yīng)該注意到,可以將 多種編程語言用于實(shí)現(xiàn)本文所描述的實(shí)施例。此外,在本領(lǐng)域中,當(dāng)采取 操作或?qū)е陆Y(jié)果時(shí),通常以一種形式或其它形式(例如,程序、過程、處 理、應(yīng)用等)來表述軟件。這些表達(dá)方式僅僅是對由于計(jì)算設(shè)備執(zhí)行軟件 而弓I起該設(shè)備執(zhí)行操作或產(chǎn)生結(jié)果的簡化表達(dá)方式。
圖8是示出根據(jù)一個(gè)實(shí)施例的用于提供基于硬件的動態(tài)逸出檢測的方 法800的流程圖。在所描述的實(shí)施例中,通過參照圖l-7來提供所描述實(shí)施例的實(shí)例。然而,所描述的實(shí)施例不應(yīng)被局限于所提供的實(shí)例,從而限制 由所附權(quán)利要求書提出的范圍。再次參照圖8,在處理方框820處,確定是否檢測到具有全局范圍的第 一對象的指針更新。在一個(gè)實(shí)施例中,例如,如圖4中所示,指針更新250 將具有全局范圍的第一對象252的鏈接253更新為指向第二對象254。如參 照圖4所描述的,使具有全局范圍的第一對象252指向第二對象254的指 針更新250需要確定第二對象254是否具有局部范圍。當(dāng)情況如此時(shí),發(fā) 現(xiàn)第二對象已經(jīng)執(zhí)行了從局部對象到全局對象的動態(tài)逸出。遺憾的是,確定第二對象或目標(biāo)對象是否具有局部范圍將會是一個(gè)非 常耗時(shí)的處理,這需要査詢第二對象254的對象描述符,以確定該對象描 述符的可達(dá)性屬性或范圍屬性是否指示第二對象具有局部范圍。因此,在 一個(gè)實(shí)施例中,例如,提供單個(gè)指令,如圖3中所示的AAT指令(216和 218)。再次參照圖8,在處理方框830處,發(fā)出單個(gè)指令,以斷言與第二對象 關(guān)聯(lián)的范圍屬性將第二對象的范圍標(biāo)識為全局。如圖3中所示, LODA—AND—CHECK指令將斷言與第二對象的起始高速緩存行關(guān)聯(lián)的可 達(dá)性或范圍、屬性為全局。例如,在一個(gè)實(shí)施例中,假設(shè)將高速緩存行的 范圍屬性位設(shè)置為值一 ("1")的這種設(shè)置指示局部范圍,如果在高速緩存 行的范圍屬性內(nèi)包含的值與期望值(例如值1 )不匹配,則 LOAD—AND—CHECK指令將會返回失敗。然而,在本文所描述的實(shí)施例中, 與高速緩存行關(guān)聯(lián)的可達(dá)性或范圍、屬性值可以是值零("0")或值一 ("1") 或其它相似值,這取決于特定的實(shí)現(xiàn)方式。再次參照圖8,在處理方框840處,確定所述單個(gè)指令是否檢測出與第二對象關(guān)聯(lián)的范圍屬性將第二對象的范圍標(biāo)識為局部。如上文所指出的, 例如,這種確定會引起如圖3中所示的LOAD—AND一CHECK指令218失敗,并用處理程序例程的發(fā)起來取代所述加載。因此,在處理方框850處,所述單個(gè)指令調(diào)用處理程序例程,以驗(yàn)證 第二對象的范圍為局部。通過參照圖10-12來進(jìn)一步描述該處理程序例程所 執(zhí)行的操作。最后,在處理方框876處,當(dāng)執(zhí)行該處理程序例程時(shí),執(zhí)行 第二對象的轉(zhuǎn)換,以將第二對象變?yōu)槿挚蛇_(dá)對象或具有全局范圍,以及執(zhí)行指針更新操作,從而使得第一對象的指針指向第二對象。圖9是示出根據(jù)一個(gè)實(shí)施例的用于進(jìn)行初始化以啟動基于硬件的動態(tài) 逸出檢測的方法802的流程圖。在處理方框804處,對由應(yīng)用程序創(chuàng)建的 每個(gè)對象的對象描述符進(jìn)行編碼,以將每個(gè)對象各自的范圍標(biāo)識為局部或 全局。在處理方框806處,將范圍屬性位234與高速緩存200的每個(gè)高速 緩存行201相關(guān)聯(lián),例如如圖2和圖3中所示。再次參照圖9,在處理方框808處,將應(yīng)用程序創(chuàng)建的每個(gè)對象映射到 內(nèi)存塊。在處理方框810處,當(dāng)每個(gè)對象各自被加載到高速緩存時(shí),將范 圍屬性位設(shè)置為局部或全局值。盡管參照高速緩存進(jìn)行描述,但是取決于 根據(jù)上述實(shí)施例的基于硬件的逸出檢測的所需實(shí)現(xiàn)方式,可以在系統(tǒng)內(nèi)存 內(nèi)部、甚至是虛擬內(nèi)存提供的頁面系統(tǒng)內(nèi)部,提供屬性位或元數(shù)據(jù)與由應(yīng) 用程序創(chuàng)建的不同對象的不同映射。圖10是示出根據(jù)一個(gè)實(shí)施例的用于圖8的處理方框830中發(fā)出單個(gè)指 令的方法832的流程圖。在處理方框834處,發(fā)出LOAD_AND_CHECK指 令218,以驗(yàn)證第二對象254的起始高速緩存行201的范圍屬性位234將第 二對象254的范圍標(biāo)識為局部,例如圖3和圖4所示。在處理方框836處, 確定第二對象254的起始高速緩存行201的范圍屬性位234是否指示第二 對象的范圍為局部。當(dāng)情況如此時(shí),LOAD—ANDj:HECK指令218失敗。 在一個(gè)實(shí)施例中,LOAD—AND—CHECK指令218的失敗引起 LOAD一AND一CHECK指令218調(diào)用處理程序例程。在一個(gè)實(shí)施例中,該處 理程序例程執(zhí)行附加檢查,以驗(yàn)證第二對象具有局部范圍。圖U是示出根據(jù)一個(gè)實(shí)施例的用于調(diào)用處理程序例程以驗(yàn)證第二對象 的范圍為局部的方法852的流程圖。在處理方框854處,讀取第二對象的 對象描述符。 一旦讀出,就在處理方框856處分析局部對象描述符的范圍 屬性,以確定局部對象描述符的范圍屬性是否指示第二對象的范圍為局部。 在處理方框858處,確定局部對象描述符的范圍屬性是否指示第二對象的 范圍為局部。在一個(gè)實(shí)施例中,當(dāng)局部對象描述符將第二對象標(biāo)識為具有局部范圍 時(shí),檢測出第二對象的動態(tài)逸出檢測。因此,在處理方框860處,將第二 對象從局部對象轉(zhuǎn)換為全局對象。參照圖12和圖13對第二對象從局部對象到全局對象的轉(zhuǎn)換進(jìn)行描述。圖12是示出根據(jù)一個(gè)實(shí)施例的用于將局部對象轉(zhuǎn)換為全局對象的方法 862的流程圖。在處理方框864處,標(biāo)識從第二對象可達(dá)的每個(gè)對象。 一旦 己經(jīng)標(biāo)識,就在處理方框866處將從第二對象可達(dá)的每個(gè)對象轉(zhuǎn)換為全局 對象。例如圖4中所示,根據(jù)第二對象254的一個(gè)或多個(gè)指針255,將第二 對象254的每個(gè)可達(dá)對象256從局部對象轉(zhuǎn)換為全局對象。圖13是示出根據(jù)一個(gè)實(shí)施例的用于將局部對象轉(zhuǎn)換為全局對象的方法 870的流程圖。在處理方框872處,將從第二對象可達(dá)的每個(gè)對象的對象描 述符進(jìn)行編碼,以將每個(gè)對象各自的范圍標(biāo)識為全局。此外,在處理方框 874處,將從第二對象可達(dá)的每個(gè)對象的范圍屬性位設(shè)置為全局值。圖14是示出根據(jù)一個(gè)實(shí)施例的用于啟動基于硬件的動態(tài)逸出檢測的方 法880的流程圖。在處理方框882處,維護(hù)應(yīng)用程序所生成的包含所有對 象的對象列表。在處理方框884處,確定高速緩存行是否從內(nèi)存中被逐出。 一旦檢測出上述情況,就在處理方框886處查詢所述對象列表,以確定被 逐出的高速緩存行是否是至少一個(gè)被逐出的局部對象的起始高速緩存行。 在處理方框887處,確定被逐出的高速緩存行是否是至少一個(gè)被逐出的局 部對象的起始高速緩存行。當(dāng)情況如此時(shí),在處理方框888處,在高速緩 存內(nèi)部重新加載所述高速緩存行。因此,在參照圖14示出的實(shí)施例中,與程序?qū)ο箨P(guān)聯(lián)的屬性位不是固 定不變的,而是只要局部對象的所述起始高速緩存行位于各自線程的局部 高速緩存內(nèi)部就是可用的。在一個(gè)實(shí)施例中,為了維護(hù)局部對象的起始高 速緩存行,利用指示出高速緩存行將程序?qū)ο髽?biāo)識為具有局部范圍的屬性, 通知處理程序例程高速緩存行何時(shí)被逐出。圖15是示出根據(jù)一個(gè)實(shí)施例的用于初始化高速緩存以啟動基于硬件的 動態(tài)逸出檢測的方法890的流程圖。在處理方框891處,對初始加載到高 速緩存中的所有對象進(jìn)行標(biāo)識,以將每個(gè)所標(biāo)識對象各自的屬性位設(shè)置為 默認(rèn)的局部范圍值。在處理方框892處,單個(gè)指令將目標(biāo)地址與至少一個(gè) 預(yù)定地址區(qū)域進(jìn)行比較。在處理方框893處,確定目標(biāo)地址是否位于預(yù)定 地址區(qū)域內(nèi)。當(dāng)檢測出上述情況時(shí),在處理方框894處,確定預(yù)定地址區(qū) 域的屬性位。 一旦已經(jīng)確定,就在處理方框895處將該范圍屬性位與預(yù)定的局部范圍值進(jìn)行比較。在處理方框896處,處理程序例程可以檢測范圍 屬性與預(yù)定的局部范圍值相匹配。當(dāng)情況如此時(shí),在處理方框898處,更 新目標(biāo)對象的范圍屬性值,以將該目標(biāo)對象標(biāo)識為具有全局范圍。
因此,相比于傳統(tǒng)運(yùn)行時(shí)環(huán)境,如圖l所示的和參照圖2-15所進(jìn)一步 描述的MRTE 100實(shí)現(xiàn)內(nèi)存感知技術(shù)或AAT,以實(shí)現(xiàn)用于執(zhí)行動態(tài)逸出檢 測的寫屏障邏輯100。以降低的成本提供了將單個(gè)AAT指令(例如,圖3 的LOAD_AND—CHECK指令218)用于基于指針更新執(zhí)行初始檢測的方案。 因此,例如圖3所示,AAT指令降低了實(shí)現(xiàn)動態(tài)逸出檢測的成本,以提供 一種用于區(qū)分局部和全局可達(dá)對象的實(shí)用方法。因此,在一個(gè)實(shí)施例中, 如圖1中所示,垃圾收集器116可被優(yōu)化,以便避免同步開銷,以及通過 利用對哪些對象為局部可達(dá)的獲知來使垃圾檢測的對象污染最小化。
應(yīng)該注意到,對于其它實(shí)施例,可以使用不同的系統(tǒng)配置。例如,盡 管MRTE 600 (圖6)包括多核CPU 660以及MRTE 700 (圖7)包括CMP 650,但是對于其它實(shí)施例,多處理器系統(tǒng)(其中一個(gè)或多個(gè)處理器可以在 配置和操作方面與上述CPU 660/CMP 650相似)可以受益于不同實(shí)施例的 基于硬件的動態(tài)逸出檢測。可將其它不同類型的系統(tǒng)或不同類型的計(jì)算機(jī) 系統(tǒng),例如服務(wù)器、工作站、臺式計(jì)算機(jī)系統(tǒng)、游戲系統(tǒng)、嵌入式計(jì)算機(jī) 系統(tǒng)、刀片服務(wù)器等,用于其它實(shí)施例。
還可以將實(shí)施例的元件提供作為制造產(chǎn)品,其包括用于存儲機(jī)器可執(zhí) 行指令的機(jī)器可讀介質(zhì)。該機(jī)器可讀介質(zhì)可以包括但不局限于閃存、光盤、 壓縮盤只讀存儲器(CD-ROM)、數(shù)字多媒體/視頻盤片(DVD) ROM、隨 機(jī)存取存儲器(RAM)、可擦寫可編程只讀存儲器(EPROM)、電可擦寫可 編程只讀存儲器(EEPROM)、磁或光卡、傳播介質(zhì)或適于存儲電子指令的 其它類型的機(jī)器可讀介質(zhì)。例如,可以作為計(jì)算機(jī)程序來下載所描述的實(shí) 施例,所述計(jì)算機(jī)程序可以經(jīng)由通信鏈路(例如,調(diào)制解調(diào)器或網(wǎng)絡(luò)連接), 以包含在載波或其它傳播介質(zhì)中的數(shù)據(jù)信號的方式,從遠(yuǎn)程計(jì)算機(jī)(例如, 服務(wù)器)傳送到請求計(jì)算機(jī)(例如,客戶端)。
應(yīng)該注意到,本說明書中提及的"一個(gè)實(shí)施例"或"實(shí)施例"表示結(jié) 合該實(shí)施例描述的特定特征、結(jié)構(gòu)或特性被包括在本發(fā)明的至少一個(gè)實(shí)施 例中。因此,應(yīng)該強(qiáng)調(diào)并注意到,在本說明書的不同部分中,兩次或更多次提及的"實(shí)施例"或"一個(gè)實(shí)施例"或"可選實(shí)施例"不需要都指同一 實(shí)施例。此外,所述特定特征、結(jié)構(gòu)或特性可以適當(dāng)?shù)亟M合到一個(gè)或多個(gè) 實(shí)施例中。
在對不同實(shí)施例的以上詳細(xì)描述中,對形成說明書一部分的附圖進(jìn)行 了參照,在所述附圖中以示例而非限定的方式示出了可以實(shí)施本發(fā)明的特 定實(shí)施例。在附圖中,相同的標(biāo)號描述了在若干視圖中基本相同的部件。 對所示實(shí)施例的進(jìn)行了足夠詳細(xì)的描述,以使本領(lǐng)域技術(shù)人員能夠?qū)嵤┍?文所公開的內(nèi)容??梢岳闷渌鼘?shí)施例或?qū)С銎渌鼘?shí)施例,例如在不脫離 本公開文件范圍的情況下,可以實(shí)現(xiàn)結(jié)構(gòu)或邏輯替代或改變。因此,詳細(xì) 描述并不具有限定意義,不同實(shí)施例的范圍僅由所附權(quán)利要求書和權(quán)利要 求書所享有的等效方案的全部范圍來限定。
已經(jīng)公開了多個(gè)實(shí)施例和最佳方式,在仍屬于由所附權(quán)利要求書限定 的實(shí)施例范圍內(nèi)的情況下,可以針對所公開的實(shí)施例實(shí)現(xiàn)修改和變化。
權(quán)利要求
1、一種方法,包括檢測具有全局范圍的第一對象的指針更新,所述指針更新用于將所述第一對象的鏈接更新為指向第二對象;發(fā)出單個(gè)指令,以斷言與所述第二對象關(guān)聯(lián)的范圍屬性將所述第二對象的范圍標(biāo)識為全局;以及如果所述單個(gè)指令檢測出與所述第二對象關(guān)聯(lián)的所述范圍屬性將所述第二對象的范圍標(biāo)識為局部,則調(diào)用處理程序例程,以驗(yàn)證所述第二對象的范圍為局部。
2、 如權(quán)利要求l所述的方法,其中,在檢測步驟之前,所述方法進(jìn)一 步包括對由應(yīng)用程序創(chuàng)建的每個(gè)對象的對象描述符進(jìn)行編碼,以將每個(gè)對象 各自的范圍標(biāo)識為局部和全局之一。
3、 如權(quán)利要求l所述的方法,其中,在檢測步驟之前,所述方法進(jìn)一 步包括將范圍屬性位與高速緩存的每個(gè)高速緩存行相關(guān)聯(lián); 將由應(yīng)用程序創(chuàng)建的每個(gè)對象映射到內(nèi)存;以及當(dāng)每個(gè)對象各自被加載到所述高速緩存中時(shí),將范圍屬性位設(shè)置為局 部和全局之一。
4、 如權(quán)利要求3所述的方法,其中,映射步驟進(jìn)一步包括將由應(yīng)用程序創(chuàng)建的每個(gè)對象與所述對象各自的起始高速緩存行相關(guān) 聯(lián),以便根據(jù)每個(gè)對象各自的起始高速緩存行確定每個(gè)對象各自的范圍屬 性位。
5、 如權(quán)利要求1所述的方法,其中,發(fā)出所述指令的步驟進(jìn)一步包括:發(fā)出LOAD AND CHECK指令,以驗(yàn)證所述第二對象的起始高速緩存行的范圍屬性位將所述第二對象的范圍標(biāo)識為局部;以及如果所述第二對象的起始高速緩存行的范圍屬性位指示所述第二對象的范圍為局部,則利用所述LOAD—AND_CHECK指令調(diào)用所述處理程序例 程。
6、 如權(quán)利要求l所述的方法,其中,調(diào)用所述處理程序例程的步驟進(jìn) 一步包括讀取所述第二對象的對象描述符;比較所述局部對象描述符的范圍屬性,以確定所述局部對象描述符的 范圍屬性是否指示所述第二對象的范圍為局部;以及如果由所述第二對象的對象描述符所指示的所述范圍屬性指示所述第 二對象的范圍為局部,則將所述第二對象從局部對象轉(zhuǎn)換為全局對象。
7、 如權(quán)利要求6所述的方法,進(jìn)一步包括 標(biāo)識從所述第二對象可達(dá)的每個(gè)對象;以及 將從所述第二對象可達(dá)的每個(gè)對象轉(zhuǎn)換為全局對象。
8、 如權(quán)利要求6所述的方法,其中,轉(zhuǎn)換每個(gè)對象的步驟進(jìn)一步包括 對每個(gè)對象的對象描述符進(jìn)行編碼,以將每個(gè)對象各自的范圍標(biāo)識為局部和全局之一;將從所述第二對象可達(dá)的每個(gè)對象的范圍屬性位設(shè)置為全局。
9、 如權(quán)利要求1所述的方法,進(jìn)一步包括 將所述第一對象的指針更新為指向所述第二對象。
10、 一種具有機(jī)器可訪問介質(zhì)的制造產(chǎn)品,所述介質(zhì)包括相關(guān)聯(lián)的數(shù) 據(jù),其中,當(dāng)該數(shù)據(jù)被訪問時(shí),導(dǎo)致執(zhí)行以下操作發(fā)出單個(gè)指令,以斷言范圍屬性將目標(biāo)對象的范圍標(biāo)識為全局,其中所述范圍屬性與來自全局對象的所標(biāo)識指針更新的所述目標(biāo)對象相關(guān)聯(lián); 如果所述單個(gè)指令檢測出與所述目標(biāo)對象關(guān)聯(lián)的范圍屬性將所述目標(biāo)對象的范圍標(biāo)識為局部,則調(diào)用處理程序例程,以驗(yàn)證所述目標(biāo)對象的范圍為局部;以及如果所述目標(biāo)對象的范圍被驗(yàn)證為局部,則對所述目標(biāo)對象的對象描 述符進(jìn)行編碼,以將所述目標(biāo)對象的范圍標(biāo)識為全局。
11、如權(quán)利要求ll所述的制造產(chǎn)品,其中,所述機(jī)器可訪問介質(zhì)還包 括相關(guān)聯(lián)的數(shù)據(jù),當(dāng)該數(shù)據(jù)被訪問時(shí),進(jìn)一步導(dǎo)致所述機(jī)器執(zhí)行以下操作: 維護(hù)由應(yīng)用程序生成的包含所有局部對象的對象列表; 檢測從高速緩存中對高速緩存行的逐出;査詢所述對象列表,以確定所逐出的高速緩存行是否是至少一個(gè)所逐 出局部對象的起始高速緩存行;以及如果所逐出的高速緩存行是所逐出局部對象的起始高速緩存行,則在 高速緩存內(nèi)重新加載所述高速緩存行。
12、 如權(quán)利要求ll所述的制造產(chǎn)品,其中,所述機(jī)器可訪問介質(zhì)還包 括相關(guān)聯(lián)的數(shù)據(jù),當(dāng)所述數(shù)據(jù)被訪問時(shí),進(jìn)一步導(dǎo)致所述機(jī)器執(zhí)行以下操 作標(biāo)識被初始加載到高速緩存中的所有對象,以將每個(gè)所標(biāo)識對象各自 的屬性位設(shè)置為默認(rèn)的局部范圍;以及如果所述處理程序例程檢測出目標(biāo)對象的對象描述符將所述目標(biāo)對象 標(biāo)識為具有局部范圍,則更新所述目標(biāo)對象的范圍屬性值。
13、 如權(quán)利要求10所述的制造產(chǎn)品,其中,所述機(jī)器可訪問介質(zhì)還包 括相關(guān)聯(lián)的數(shù)據(jù),當(dāng)所述數(shù)據(jù)被訪問時(shí),進(jìn)一步導(dǎo)致所述機(jī)器執(zhí)行以下操作利用所述單個(gè)指令,將所述單個(gè)指令的目標(biāo)地址與至少一個(gè)預(yù)定地址區(qū)域進(jìn)行比較;如果所述目標(biāo)地址位于所述預(yù)定地址區(qū)域內(nèi),則確定所述預(yù)定地址區(qū) 域的屬性位值;以及將所述預(yù)定區(qū)域的范圍屬性與預(yù)定局部范圍值進(jìn)行比較。
14、 如權(quán)利要求IO所述的制造產(chǎn)品,其中,所述機(jī)器可訪問介質(zhì)還包 括相關(guān)聯(lián)的數(shù)據(jù),當(dāng)所述數(shù)據(jù)被訪問時(shí),進(jìn)一步導(dǎo)致所述機(jī)器執(zhí)行以下操 作..限制所有局部對象在預(yù)定地址區(qū)域內(nèi)的創(chuàng)建;以及 提供為所述區(qū)域設(shè)置的基本屬性位。
15、 如權(quán)利要求IO所述的制造產(chǎn)品,其中,所述機(jī)器可訪問介質(zhì)還包 括相關(guān)聯(lián)的數(shù)據(jù),當(dāng)所述數(shù)據(jù)被訪問時(shí),進(jìn)一步導(dǎo)致所述機(jī)器執(zhí)行以下操 作如果所述處理程序例程檢測出所述目標(biāo)對象的對象標(biāo)識符將所述目標(biāo) 對象標(biāo)識為具有局部范圍,則更新所述目標(biāo)對象的范圍屬性值;以及 將所述全局對象的指針更新為指向所述目標(biāo)對象。
16、 一種系統(tǒng),包括 主機(jī)平臺;以及可控運(yùn)行時(shí)環(huán)境(MRTE),所述MRTE包括寫屏障邏輯,用于發(fā)出 單個(gè)指令,以斷言范圍屬性將目標(biāo)對象的范圍標(biāo)識為全局,其中所述范圍 屬性與來自全局對象的指針更新的所述目標(biāo)對象相關(guān)聯(lián);以及如果與所述 目標(biāo)對象關(guān)聯(lián)的所述范圍屬性將所述目標(biāo)對象的范圍標(biāo)識為局部,則調(diào)用 處理程序例程,以驗(yàn)證所述目標(biāo)對象的范圍為局部。
17、 如權(quán)利要求16所述的系統(tǒng),進(jìn)一步包括虛擬機(jī)監(jiān)視器(VMM),用于加載虛擬機(jī)(VM)和全局垃圾收集器。
18、 如權(quán)利要求16所述的系統(tǒng),所述主機(jī)平臺包括 系統(tǒng)內(nèi)存,其耦合到互聯(lián)網(wǎng)絡(luò);以及單芯片多處理器,其耦合到所述互聯(lián)網(wǎng)絡(luò),所述單芯片多處理器包括 多個(gè)處理器內(nèi)核,其中,每個(gè)處理器內(nèi)核都支持VMM,所述VMM用于加 載運(yùn)行時(shí)存儲管理器和全局垃圾收集器。
19、 如權(quán)利要求16所述的系統(tǒng),其中,所述主機(jī)平臺包括高速緩存, 其包括對應(yīng)于所述高速緩存內(nèi)每個(gè)高速緩存行的至少一個(gè)范圍屬性位。
20、 如權(quán)利要求16所述的系統(tǒng),其中,所述寫屏障邏輯進(jìn)一步用于-將范圍屬性位與所述高速緩存的每個(gè)高速緩存行相關(guān)聯(lián);將由應(yīng)用程序創(chuàng) 建的每個(gè)對象映射到內(nèi)存塊;以及將被加載到所述高速緩存中的每個(gè)對象 各自的范圍屬性位設(shè)置為局部和全局之一。
全文摘要
描述了一種用于在可控運(yùn)行時(shí)環(huán)境中進(jìn)行基于硬件的動態(tài)逸出檢測的方法和裝置。在一個(gè)實(shí)施例中,所述方法包括檢測具有全局范圍的第一對象的指針更新。在一個(gè)實(shí)施例中,發(fā)出單個(gè)指令,以斷言與指針更新的目標(biāo)對象關(guān)聯(lián)的范圍屬性標(biāo)識全局范圍。如果與第二對象關(guān)聯(lián)的范圍屬性將第二對象的范圍標(biāo)識為局部,則所述單個(gè)指令返回失敗。驗(yàn)證可以包括讀取第二對象的對象描述符,以確定對象描述符的范圍屬性是否指示第二對象的范圍為局部。在一個(gè)實(shí)施例中,一旦已經(jīng)驗(yàn)證,就將第二對象和從第二對象可達(dá)的每個(gè)對象轉(zhuǎn)換為全局對象。描述并要求保護(hù)了其它實(shí)施例。
文檔編號G06F12/02GK101322106SQ200680045018
公開日2008年12月10日 申請日期2006年12月18日 優(yōu)先權(quán)日2005年12月30日
發(fā)明者A·C·布雷西, H·王, Q·A·雅克布森, S·斯里尼瓦斯 申請人:英特爾公司