国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于準(zhǔn)確的指針識(shí)別的處理器體系結(jié)構(gòu)的制作方法

      文檔序號(hào):6488386閱讀:197來(lái)源:國(guó)知局
      專(zhuān)利名稱(chēng):用于準(zhǔn)確的指針識(shí)別的處理器體系結(jié)構(gòu)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種處理器體系結(jié)構(gòu),其中,通過(guò)指向?qū)ο蟮闹羔榿?lái)訪問(wèn)存儲(chǔ)器。
      控制軟件的復(fù)雜性是軟件開(kāi)發(fā)中的最大需求。只有當(dāng)軟件被分解成易于理解的和可控制的模塊并被抽象描述的時(shí)候,才能實(shí)現(xiàn)高質(zhì)量和可靠的系統(tǒng)。為了實(shí)現(xiàn)這個(gè)目標(biāo),已使用了多年面向?qū)ο蟮木幊陶Z(yǔ)言。
      面向?qū)ο缶幊陶Z(yǔ)言的實(shí)現(xiàn)中的一個(gè)主要問(wèn)題是動(dòng)態(tài)存儲(chǔ)器管理。一些面向?qū)ο笳Z(yǔ)言,比如C++,仍然基于人工的存儲(chǔ)器管理,即,可以由程序員來(lái)請(qǐng)求存儲(chǔ)器,同樣,可以由程序員來(lái)釋放存儲(chǔ)器。然而,這個(gè)方法存在弊端,由于必須在系統(tǒng)設(shè)計(jì)階段執(zhí)行存儲(chǔ)器管理,因此,難以針對(duì)問(wèn)題對(duì)系統(tǒng)進(jìn)行自然建模。此外,對(duì)存儲(chǔ)器進(jìn)行人工釋放是導(dǎo)致整個(gè)程序類(lèi)錯(cuò)誤的原因。例如,如果一個(gè)存儲(chǔ)區(qū)域被釋放,但是仍然存在對(duì)這些存儲(chǔ)區(qū)域的引用,則在以后的程序執(zhí)行中,這可能會(huì)導(dǎo)致災(zāi)難性的后果。在這種情況下尤其嚴(yán)重的是,由仍然存在指向已經(jīng)被釋放了的存儲(chǔ)區(qū)域的指針(虛引用,dangling references)所引起的錯(cuò)誤的后果是隨許多因素而變化的,因此,很難被再現(xiàn),并且只能被困難地定位。因?yàn)檫@些原因,幾乎所有的現(xiàn)代編程語(yǔ)言,比如Java,都是基于具有自動(dòng)垃圾回收的動(dòng)態(tài)存儲(chǔ)器管理的。在擁有這種動(dòng)態(tài)存儲(chǔ)器管理的系統(tǒng)中,返還存儲(chǔ)區(qū)域不是程序的任務(wù)。作為替代,僅當(dāng)確保存儲(chǔ)區(qū)域不再被程序引用時(shí),由垃圾回收器自動(dòng)地釋放所述存儲(chǔ)區(qū)域?;谶@個(gè)原理,不會(huì)再出現(xiàn)“虛引用”的情況。此外,通過(guò)使用該技術(shù),提高了程序員的生產(chǎn)率,因?yàn)樗麄儸F(xiàn)在可以集中精力解決實(shí)際的問(wèn)題。另外,制備的軟件具有更高的質(zhì)量,因?yàn)樵诰哂袆?dòng)態(tài)存儲(chǔ)器管理的系統(tǒng)中產(chǎn)生隱蔽的程序錯(cuò)誤的可能性比在具有人工存儲(chǔ)器管理的系統(tǒng)中要低。
      背景技術(shù)
      有很多用于自動(dòng)釋放動(dòng)態(tài)創(chuàng)建的存儲(chǔ)區(qū)域的算法,其中基于引用計(jì)數(shù)(reference counting)、拷貝(copying)、及標(biāo)記清掃(mark sweep)回收原理的算法是本領(lǐng)域技術(shù)人員所熟知的。對(duì)于這些算法的概述可參考R.Jones,R.Lins的“Garbage Collection.Algorithms For AutomaticDynamic Memory Management”(John Wiley&amp;Sons,1996)。
      這些算法的簡(jiǎn)單實(shí)現(xiàn)在整個(gè)垃圾回收周期中斷應(yīng)用程序。通常,在程序的執(zhí)行中,它們會(huì)導(dǎo)致長(zhǎng)時(shí)間的以及不可預(yù)測(cè)的停止,因此,不適用于交互式系統(tǒng)或者實(shí)時(shí)環(huán)境。
      漸進(jìn)式(incremental)和并發(fā)(concurrent)方法允許程序在垃圾回收周期中連續(xù)執(zhí)行。然而,它們需要在應(yīng)用程序和垃圾回收器之間進(jìn)行同步。軟件中這種同步的開(kāi)銷(xiāo)是非常大的,然而,依賴(lài)于所使用的方法,為了確定相關(guān)聯(lián)的對(duì)象是否已經(jīng)被垃圾回收器處理,在每個(gè)指針加載前(read barrier,讀取屏障)或者在每個(gè)指針存儲(chǔ)前(writebarrier,寫(xiě)入屏障)必須結(jié)合一個(gè)短的代碼序列。
      因?yàn)橛衫厥掌鲗?dǎo)致的暫停在很多情況下非常的短暫以至于不能被用戶(hù)記錄,所以很多漸進(jìn)式方法被描述為“具有實(shí)時(shí)能力”。然而,嚴(yán)格的實(shí)時(shí)能力需要為系統(tǒng)的響應(yīng)時(shí)間保證一個(gè)不變的上限。因?yàn)榛谲浖姆椒ㄍǔR蕾?lài)于不可中斷的操作,比如,檢查根集(寄存器和堆棧)的所有指針,或者處理整個(gè)對(duì)象的操作,他們不能滿(mǎn)足嚴(yán)格的實(shí)時(shí)需求。已知多種在沒(méi)有無(wú)限持續(xù)時(shí)間不可分操作的情況下進(jìn)行管理的軟件解決方案,但是這些解決方案在計(jì)算時(shí)間和存儲(chǔ)器的開(kāi)銷(xiāo)方面非常大。
      用于自動(dòng)垃圾回收的所有技術(shù)中的一個(gè)基本問(wèn)題是發(fā)現(xiàn)和識(shí)別指針。如果不能將指針與非指針明確地區(qū)分,則僅能執(zhí)行一種穩(wěn)妥的垃圾回收。這意味著,能夠表示指針的每個(gè)位模式都必須被視為一個(gè)指針以避免釋放仍在使用中的存儲(chǔ)器。因此,不能在穩(wěn)妥的垃圾回收中使用用于移動(dòng)對(duì)象并更新指針的壓縮方法。然而,在沒(méi)有壓縮方法的情況下,存儲(chǔ)器變得零碎。
      為了避免這些問(wèn)題以及執(zhí)行準(zhǔn)確的垃圾回收,在對(duì)指針的搜索和識(shí)別中花費(fèi)了更大的開(kāi)銷(xiāo)。在許多面向?qū)ο笳Z(yǔ)言中,通過(guò)類(lèi)型描述符來(lái)識(shí)別指針和對(duì)象,該類(lèi)型描述符被包含在每個(gè)對(duì)象中。然而,特別是在與優(yōu)化編譯器相結(jié)合的時(shí)候,更難于在程序堆棧和進(jìn)程寄存器中定位指針。可以維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu),其中指示了當(dāng)前包含指針的堆棧位置和處理器寄存器,但是在程序執(zhí)行期間實(shí)現(xiàn)這種類(lèi)型的數(shù)據(jù)結(jié)構(gòu)的開(kāi)銷(xiāo)非常大。因此,大多數(shù)基于軟件的方法使用由編譯器產(chǎn)生的表,該表描述了在程序堆棧和寄存器中的指針的位置。對(duì)于可以執(zhí)行垃圾回收的每個(gè)程序點(diǎn),準(zhǔn)備了一組這種類(lèi)型的表。然而,這種技術(shù)的實(shí)現(xiàn)導(dǎo)致了程序代碼的過(guò)度膨脹。此外,實(shí)時(shí)系統(tǒng)必須確保被掛起的線程在有限的時(shí)間跨度內(nèi)到達(dá)下一個(gè)這種類(lèi)型的程序點(diǎn)。
      因此,使用現(xiàn)有的、主要使用了軟件方式的自動(dòng)垃圾回收的系統(tǒng)必須克服許多的問(wèn)題。這是因?yàn)?,首先,軟件必須模擬底層硬件不能提供的功能。如果處理器自身能夠以硬件方式全部或部分地執(zhí)行自動(dòng)垃圾回收,則可以克服許多有關(guān)效率和實(shí)時(shí)能力的問(wèn)題。然而,為此目的,處理器能夠識(shí)別指針是完全有必要的。
      下面,僅描述許多已知的體系結(jié)構(gòu)中的二個(gè)作為示例,其支持準(zhǔn)確的指針識(shí)別和/或自動(dòng)垃圾回收,對(duì)于所述示例,本發(fā)明的主題是重要的。
      因此,自1966年起就已知使用權(quán)能(capabilities)代替直接指針以便進(jìn)行存儲(chǔ)器尋址的體系結(jié)構(gòu)。權(quán)能包括關(guān)于對(duì)象的訪問(wèn)授權(quán)和識(shí)別的聲明。它們不包括對(duì)象的物理地址,但是包括對(duì)描述對(duì)象的位置、大小和屬性的描述符的引用。Intel iAPX432是具有這種類(lèi)型體系結(jié)構(gòu)的處理器的一個(gè)例子,例如在H.M.Levy的“Capability-Based ComputerSystem”(Digital Press,1984,第159-186頁(yè))中所說(shuō)明的。在這種體系結(jié)構(gòu)中,通過(guò)兩級(jí)映射處理將權(quán)能與相應(yīng)的對(duì)象相關(guān)聯(lián)。對(duì)于每個(gè)對(duì)象在對(duì)象表中存在唯一的條目,其描述了對(duì)象的位置,大小和狀態(tài)。每個(gè)對(duì)象包括二個(gè)區(qū)域數(shù)據(jù)區(qū)域和用于權(quán)能的區(qū)域。通過(guò)這種能夠進(jìn)行準(zhǔn)確的權(quán)能識(shí)別。
      由于缺少寄存器組并且由于通過(guò)權(quán)能和對(duì)象描述符對(duì)對(duì)象進(jìn)行雙重間接尋址,iAPX432是非常沒(méi)有效率的。此外,它本身不能執(zhí)行自動(dòng)垃圾回收。垃圾回收必須通過(guò)軟件來(lái)執(zhí)行并且不具有實(shí)時(shí)能力。
      所有已知的用于識(shí)別直接指針的方法都使用每個(gè)存儲(chǔ)字中的專(zhuān)用識(shí)別位(標(biāo)記)來(lái)區(qū)分指針和非指針。一個(gè)例子是在US 5560003A中描述的用于實(shí)時(shí)的漸進(jìn)式垃圾回收的系統(tǒng)和硬件模塊,該系統(tǒng)和硬件模塊包括二個(gè)存儲(chǔ)體和一個(gè)執(zhí)行垃圾回收的本地處理器。每個(gè)存儲(chǔ)體由對(duì)象空間管理器支持,該對(duì)象空間管理器依據(jù)每個(gè)存儲(chǔ)器訪問(wèn)將地址映射到相應(yīng)對(duì)象的起始地址。因?yàn)樗膹?fù)雜性,該對(duì)象空間管理器必須被實(shí)現(xiàn)為單獨(dú)的ASIC,其占據(jù)了與存儲(chǔ)器本身類(lèi)似的芯片區(qū)域。這種類(lèi)型的系統(tǒng)是非常昂貴的。此外,利用識(shí)別位的指針識(shí)別導(dǎo)致在所需的計(jì)算時(shí)間和存儲(chǔ)器方面的額外開(kāi)銷(xiāo)。
      因?yàn)樵谇度胧较到y(tǒng)中的軟件的復(fù)雜性的持續(xù)增長(zhǎng),多年來(lái)采取了許多措施來(lái)將自動(dòng)垃圾回收的優(yōu)點(diǎn)用于這一經(jīng)濟(jì)上重要的領(lǐng)域。在現(xiàn)代信息技術(shù)的這一領(lǐng)域中可以精確地實(shí)現(xiàn)最大的片數(shù)。因?yàn)橥ㄟ^(guò)持續(xù)的創(chuàng)新,產(chǎn)品的周期變得越來(lái)越短,所以對(duì)用于現(xiàn)代的面向?qū)ο笳Z(yǔ)言的嵌入式系統(tǒng)的平臺(tái)的強(qiáng)壯性和實(shí)時(shí)能力的需求也在持續(xù)增長(zhǎng)。然而,在很多情況下,在這些應(yīng)用中,自動(dòng)垃圾回收仍然被認(rèn)為是非常奢侈的,盡管自動(dòng)垃圾回收有無(wú)可置辯的優(yōu)點(diǎn),也負(fù)擔(dān)不起。
      從相關(guān)技術(shù)出發(fā),本發(fā)明的目的是說(shuō)明一種用于基于對(duì)象的和面向?qū)ο蟮某绦虻奶幚砥黧w系結(jié)構(gòu),該處理器體系結(jié)構(gòu)允許有一定成本效益的準(zhǔn)確的指針識(shí)別,因此使得能實(shí)現(xiàn)一種有效的和具有實(shí)時(shí)能力的、可以被全部或部分實(shí)現(xiàn)為硬件的自動(dòng)垃圾回收。

      發(fā)明內(nèi)容
      通過(guò)根據(jù)權(quán)利要求1所述的處理器體系結(jié)構(gòu)實(shí)現(xiàn)所述目的。處理器體系結(jié)構(gòu)的優(yōu)選實(shí)施例是從屬權(quán)利要求的主題,或者可以從下面的說(shuō)明和典型的實(shí)施例中推導(dǎo)出來(lái)。
      在本專(zhuān)利應(yīng)用領(lǐng)域內(nèi),術(shù)語(yǔ)“字”被理解為數(shù)據(jù)單元,可以使用單個(gè)處理器指令從存儲(chǔ)器中加載其或者將其存儲(chǔ)在存儲(chǔ)器中。對(duì)象被理解為存儲(chǔ)字的連續(xù)集合,其中每個(gè)字唯一地與一個(gè)單獨(dú)的對(duì)象相關(guān)聯(lián)。指針被理解為指向一個(gè)對(duì)象的字。術(shù)語(yǔ)“空”(null)表示一個(gè)不變的預(yù)定的指針值,使用其以便不指向任何對(duì)象。
      在用于基于對(duì)象的和面向?qū)ο蟮某绦虻谋咎幚砥黧w系結(jié)構(gòu)中,唯一地通過(guò)直接指向?qū)ο蟮闹羔榿?lái)訪問(wèn)存儲(chǔ)器。對(duì)象被唯一地存儲(chǔ)在連續(xù)的存儲(chǔ)器區(qū)域中,即,被兩個(gè)對(duì)象占用的存儲(chǔ)器區(qū)域不能重疊。在每個(gè)對(duì)象中,將指針和數(shù)據(jù)彼此分離地分別存儲(chǔ)在指針區(qū)域和數(shù)據(jù)區(qū)域中。此外,關(guān)于指針區(qū)域的長(zhǎng)度信息和關(guān)于數(shù)據(jù)區(qū)域的長(zhǎng)度信息被存儲(chǔ)在每個(gè)對(duì)象中。下面將長(zhǎng)度信息稱(chēng)作屬性。利用屬性,可以在任意時(shí)間確定對(duì)象的大小以及統(tǒng)一地為對(duì)象中的指針和數(shù)據(jù)定界。
      本處理器體系結(jié)構(gòu)提供了單獨(dú)的指針寄存器組和數(shù)據(jù)寄存器組。在這種情況下,指針寄存器被唯一地用于使用對(duì)象的操作,例如,用于存儲(chǔ)器訪問(wèn),并且不用于其它的任務(wù)。因此,特別地,保證了不可以將任意的值寫(xiě)入指針寄存器,并且不可以使用指針寄存器來(lái)執(zhí)行算術(shù)操作。
      在對(duì)象的指針區(qū)域和指針寄存器中的指針直接包含存儲(chǔ)器中的對(duì)象的地址。
      使用本基于對(duì)象的處理器體系結(jié)構(gòu),以這種方式實(shí)現(xiàn)了指針和非指針(數(shù)據(jù))之間的嚴(yán)格分離,從而使得能夠在不需要識(shí)別位的情況下就可以進(jìn)行準(zhǔn)確的指針識(shí)別。通過(guò)這種由硬件確保的、準(zhǔn)確識(shí)別處理器寄存器和存儲(chǔ)器中的指針的能力,可以全部或者部分地在硬件中實(shí)現(xiàn)的自動(dòng)垃圾回收可以在處理器級(jí)別上集成?;诖?,能夠特別有效地實(shí)現(xiàn)具有自動(dòng)垃圾回收功能的實(shí)時(shí)系統(tǒng)。因此,對(duì)于垃圾回收算法本身以及對(duì)于處理器和垃圾回收器之間所需的同步,都不需要必須在處理器上執(zhí)行軟件。處理器僅必須為垃圾回收器提供一部分存儲(chǔ)器帶寬。
      該體系結(jié)構(gòu)的另一個(gè)優(yōu)點(diǎn)是在不需要編譯器和/或運(yùn)行時(shí)間系統(tǒng)的合作的情況下進(jìn)行垃圾回收管理,因此,可以健壯地實(shí)現(xiàn)。
      相比較于處理器本身的費(fèi)用而言,用于實(shí)現(xiàn)垃圾回收的硬件費(fèi)用相對(duì)較低。因此,可以以與制造典型的微處理器或微控制器同樣的成本效率來(lái)制造這種處理器。
      在本處理器體系結(jié)構(gòu)中,最好由處理器來(lái)保證被識(shí)別為指針的每個(gè)字或者包括現(xiàn)存對(duì)象的地址或者為空。在這個(gè)優(yōu)選實(shí)施例中,由處理器體系結(jié)構(gòu)保持固定的規(guī)則(system invariants,系統(tǒng)不變量),即,可以識(shí)別每個(gè)存儲(chǔ)字或者寄存器是否是一個(gè)指針,以及每個(gè)指針的值或者為空,或者包含現(xiàn)存對(duì)象的地址。通過(guò)維持這些系統(tǒng)不變量,可以在每個(gè)時(shí)鐘周期,在系統(tǒng)中進(jìn)行指針的準(zhǔn)確識(shí)別。
      最好,由一個(gè)專(zhuān)門(mén)的對(duì)象創(chuàng)建指令創(chuàng)建新對(duì)象,其中待創(chuàng)建對(duì)象的屬性被作為參數(shù)傳遞到該指令。該對(duì)象創(chuàng)建指令在可以訪問(wèn)對(duì)象前,使用空值初始化指針區(qū)域中的所有指針。通過(guò)該方式不違反系統(tǒng)不變量。
      在對(duì)于嚴(yán)格實(shí)時(shí)需求的改進(jìn)中,對(duì)象創(chuàng)建指令被實(shí)現(xiàn)為可中斷。如果對(duì)象創(chuàng)建指令被中斷,則以下述方式創(chuàng)建未完全初始化的對(duì)象,即,被中斷的對(duì)象創(chuàng)建指令可以在后面的一個(gè)時(shí)間點(diǎn)被恢復(fù)執(zhí)行。由處理器唯一地識(shí)別未完全初始化的對(duì)象。
      優(yōu)選的,該處理器體系結(jié)構(gòu)支持常量對(duì)象,該常量對(duì)象甚至在程序執(zhí)行前就作為部分只讀存儲(chǔ)器區(qū)域而存在。由處理器唯一地識(shí)別常量對(duì)象指針。
      在本處理器體系結(jié)構(gòu)中,最好,以已知的方式為程序堆棧保留一個(gè)存儲(chǔ)器區(qū)域。為此,將程序堆棧劃分為指針堆棧區(qū)域和數(shù)據(jù)堆棧區(qū)域,由堆棧索引指定在各個(gè)情況中未被堆棧占用的第一個(gè)位置,在各個(gè)情況中,在保留的時(shí)間寄存器中管理堆棧索引。
      如果使用了多個(gè)堆棧,則最好將當(dāng)前非活動(dòng)的堆棧的堆棧索引作為一個(gè)屬性存儲(chǔ)在相關(guān)聯(lián)的堆棧對(duì)象中。此外,最好將所述堆棧對(duì)象存儲(chǔ)為不在堆頂而在由操作系統(tǒng)管理的靜態(tài)存儲(chǔ)區(qū)域中的靜態(tài)對(duì)象,并且以特殊的方式識(shí)別指向這類(lèi)對(duì)象的指針(靜態(tài)指針)。
      為了有效實(shí)現(xiàn)處理器體系結(jié)構(gòu),最好每個(gè)指針寄存器都附帶有屬性寄存器,在屬性寄存器中存儲(chǔ)對(duì)象屬性,該對(duì)象屬性屬于由相應(yīng)指針寄存器中的指針?biāo)赶虻膶?duì)象。在這個(gè)實(shí)施例中,提供了一個(gè)用于加載屬性的附加的流水線級(jí)。此外,最好在該流水線級(jí)中使用加速訪問(wèn)的屬性緩存器(cache)。
      在實(shí)現(xiàn)本處理器體系結(jié)構(gòu)時(shí),可以根據(jù)相關(guān)技術(shù)來(lái)實(shí)現(xiàn)程序執(zhí)行和典型優(yōu)化所需的所有其它流水線級(jí)和功能單元,例如,指令和數(shù)據(jù)緩存器,或者用于分支預(yù)測(cè)的單元。
      附圖簡(jiǎn)述下面結(jié)合附圖,基于典型實(shí)施例對(duì)根據(jù)本發(fā)明的處理器體系結(jié)構(gòu)進(jìn)行更加詳細(xì)的說(shuō)明。


      圖1示意性地顯示了本發(fā)明處理器體系結(jié)構(gòu)的寄存器模型;圖2示意性地顯示了本發(fā)明處理器體系結(jié)構(gòu)的對(duì)象模型;圖3示意性地顯示了作為堆棧對(duì)象的程序堆棧的實(shí)現(xiàn);圖4顯示了對(duì)指針相關(guān)指令進(jìn)行分類(lèi)的表;圖5顯示了用于本發(fā)明處理器體系結(jié)構(gòu)的對(duì)象布局的實(shí)現(xiàn)的例子;圖6示意性地顯示了具有屬性的指針寄存器;圖7示意性地顯示了用于本發(fā)明處理器體系結(jié)構(gòu)的流水線的實(shí)現(xiàn)的例子(簡(jiǎn)要的說(shuō)明);圖8示意性地顯示了指針相關(guān)指令到根據(jù)圖7的流水線的級(jí)的分解;以及圖9顯示了本發(fā)明設(shè)備的實(shí)例的示意性說(shuō)明。
      具體實(shí)施例方式
      下面,描述根據(jù)本發(fā)明的處理器體系結(jié)構(gòu)的一個(gè)實(shí)施例的例子,其首先基于在不使用識(shí)別位(標(biāo)記)的情況下實(shí)現(xiàn)精確指針識(shí)別的目的,其基于可以高效實(shí)現(xiàn)的通用RISC指令集,并且不需要執(zhí)行時(shí)間超過(guò)多個(gè)時(shí)鐘周期的不可分操作。
      所描述的處理器體系結(jié)構(gòu)保證系統(tǒng)不變量,即1.可以識(shí)別每個(gè)存儲(chǔ)字或寄存器是否表示指針,以及2.每個(gè)指針值或者為空,或者唯一地與現(xiàn)存的對(duì)象相關(guān)聯(lián)。
      如圖1所示,本處理器體系結(jié)構(gòu)提供分離的數(shù)據(jù)和指針寄存器組。在圖中右邊所示的數(shù)據(jù)寄存器被用作多用途寄存器,而在左邊所示的指針寄存器用于訪問(wèn)存儲(chǔ)器中的對(duì)象。Np表示指針寄存器的數(shù)目,Nd表示數(shù)據(jù)寄存器的數(shù)目。為了實(shí)現(xiàn)系統(tǒng)不變量,必須確保在指針寄存器中不能夠?qū)懭我庵担T如將數(shù)據(jù)寄存器中的值拷貝到指針寄存器中,或者使用指針寄存器執(zhí)行算術(shù)運(yùn)算。
      本處理器體系結(jié)構(gòu)中的存儲(chǔ)器模型是基于對(duì)象的。每個(gè)對(duì)象由數(shù)據(jù)區(qū)域和指針區(qū)域組成,其中數(shù)據(jù)區(qū)域與指針區(qū)域是嚴(yán)格分離的。圖2顯示了在對(duì)象的指針區(qū)域(圖的左邊部分)具有相應(yīng)的指針字并在對(duì)象的數(shù)據(jù)區(qū)域(圖的右邊部分)具有相應(yīng)的數(shù)據(jù)字的該類(lèi)型對(duì)象的示意性結(jié)構(gòu)。使用δ屬性(δ>0)描述數(shù)據(jù)區(qū)域中的數(shù)據(jù)字的數(shù)目,使用π屬性描述(π>0)描述指針區(qū)域中的指針的數(shù)目。當(dāng)對(duì)象被產(chǎn)生時(shí),由屬性所描述的對(duì)象的大小是固定的,并且之后不能改變。屬性是對(duì)象的一部分并被存儲(chǔ)在單獨(dú)的屬性區(qū)域中。
      用于本處理器體系結(jié)構(gòu)的指令集的特殊部分僅包括與指針相關(guān)的指令,包括加載和存儲(chǔ)指令。其它指令的實(shí)施例,例如算術(shù)指令和用于程序控制的指令,這些指令的選擇可以獨(dú)立于描述的體系結(jié)構(gòu),其不屬于本發(fā)明的一部分。
      所述的體系結(jié)構(gòu)的指令集具有一個(gè)專(zhuān)門(mén)的對(duì)象創(chuàng)建指令,該指令用于產(chǎn)生一個(gè)新的對(duì)象和指向該對(duì)象的指針。對(duì)象創(chuàng)建指令(分配對(duì)象)接收作為參數(shù)的待創(chuàng)建對(duì)象的π和δ屬性值,并且將新近創(chuàng)建的對(duì)象的指針存儲(chǔ)到指針寄存器。在對(duì)象的指針被程序可見(jiàn)前,被創(chuàng)建對(duì)象的指針區(qū)域中的每個(gè)指針值被初始化為空。不存在用于清除對(duì)象的指令。對(duì)象僅僅可以被處理器級(jí)上的自動(dòng)垃圾回收清除。
      使用加載和存儲(chǔ)指令來(lái)訪問(wèn)對(duì)象內(nèi)的字。處理器體系結(jié)構(gòu)提供用于訪問(wèn)指針值和數(shù)據(jù)字的不同的加載和存儲(chǔ)指令?!凹虞d數(shù)據(jù)”和“存儲(chǔ)數(shù)據(jù)”指令只在對(duì)象的數(shù)據(jù)區(qū)域和數(shù)據(jù)寄存器之間移動(dòng)數(shù)據(jù)字?!凹虞d指針”和“存儲(chǔ)指針”指令只在對(duì)象的指針區(qū)域和指針寄存器之間移動(dòng)指針。加載和存儲(chǔ)指令利用包含對(duì)象指針的指針寄存器和正整數(shù)索引來(lái)識(shí)別存儲(chǔ)字。為了計(jì)算索引(類(lèi)似于傳統(tǒng)體系結(jié)構(gòu)的尋址模式),可以使用不同的“索引模式”,例如,使用數(shù)據(jù)寄存器,常量偏移,和比例因子。
      每當(dāng)訪問(wèn)對(duì)象時(shí),必須執(zhí)行范圍檢查以確保不會(huì)對(duì)特定的引用對(duì)象之外的字進(jìn)行訪問(wèn)。這種訪問(wèn)可能會(huì)有災(zāi)難性的后果,并違反系統(tǒng)不變量。因此,在跳躍違反(bounce violation)的情況中,終止存儲(chǔ)器訪問(wèn),起動(dòng)相應(yīng)的異常處理程序?;陬?lèi)似的原因,中止試圖解引用(dereference)空指針的指令。
      對(duì)象的屬性可以由兩個(gè)“讀屬性”指令進(jìn)行查詢(xún)。
      與多個(gè)典型地用于數(shù)據(jù)寄存器的操作的“寄存器到寄存器”指令相對(duì)照,本體系結(jié)構(gòu)定義了兩個(gè)用于指針相關(guān)的“寄存器到寄存器”指令的嚴(yán)格受限集合?!翱截愔羔槨敝噶顚⒁粋€(gè)指針寄存器中的內(nèi)容拷貝到另外一個(gè)指針寄存器中,而“比較指針”指令檢查是否兩個(gè)指針都指向相同的對(duì)象。
      圖4顯示了由本處理器體系結(jié)構(gòu)定義的與指針相關(guān)的指令的概要,并且關(guān)于它們是否讀、寫(xiě)、或者解引用指針寄存器而對(duì)它們進(jìn)行分類(lèi)。在每種情況下被讀、寫(xiě)或者解引用的寄存器用粗體打印。
      因?yàn)槌绦蚨褩5姆墙Y(jié)構(gòu)化和高度動(dòng)態(tài)的特性,這些表示關(guān)于在自動(dòng)垃圾回收范圍內(nèi)的指針識(shí)別的最大需求中的一個(gè)。在本處理器體系結(jié)構(gòu)中,程序堆棧被視作一個(gè)堆棧對(duì)象,其類(lèi)似于任何對(duì)象,具有數(shù)據(jù)區(qū)域和指針區(qū)域,因此可以被視為兩個(gè)單獨(dú)的堆棧。為了保持堆棧對(duì)象上的指針保留指針寄存器。為了將相應(yīng)的區(qū)域劃分為實(shí)際的堆棧區(qū)域和當(dāng)前未被占用的區(qū)域,在兩個(gè)堆棧區(qū)域中的任何一個(gè)使用堆棧索引。本例子中的堆棧索引與第一個(gè)未被占用的存儲(chǔ)器位置相關(guān)聯(lián)。堆棧索引“0”代表一個(gè)空的堆棧。兩個(gè)堆棧索引被標(biāo)識(shí)為數(shù)據(jù)堆棧索引(dsix)和指針堆棧索引(psix)。這些索引中的每一個(gè)被保存在為此用途保留的專(zhuān)門(mén)的數(shù)據(jù)寄存器中。
      如果堆棧對(duì)象被作為一個(gè)典型的對(duì)象來(lái)對(duì)待,則系統(tǒng)不能區(qū)分指針是屬于當(dāng)前被占用的指針堆棧,還是屬于指針堆棧區(qū)域中未被占用的部分。因?yàn)橹羔樁褩^(qū)域中的每個(gè)字都被識(shí)別為一個(gè)指針,所以指針堆棧區(qū)域中的未使用區(qū)域可以包括許多引用不再需要的對(duì)象的指針。因?yàn)檫@些對(duì)象的指針仍然存在,所以垃圾回收器不能釋放這些對(duì)象。對(duì)這種對(duì)象的一個(gè)可能的解決方案是,當(dāng)相應(yīng)的指針從堆棧中移除的時(shí)候,用空值重寫(xiě)每個(gè)指針值。然而,特別是如果多個(gè)指針將從堆棧中刪除,這將導(dǎo)致不希望有的開(kāi)銷(xiāo),例如,在子程序結(jié)束時(shí),在取消堆棧塊的分配時(shí),通常就是這樣。
      對(duì)于這里描述的處理器體系結(jié)構(gòu)的優(yōu)選實(shí)例的實(shí)例,選擇考慮堆棧的動(dòng)態(tài)大小的對(duì)象的實(shí)現(xiàn)。為此,如圖3所示,由兩個(gè)屬性對(duì)來(lái)描述堆棧對(duì)象,其中的一對(duì)(π,δ)規(guī)定當(dāng)前的堆棧大小,第二對(duì)(∏,Δ)規(guī)定了最大的堆棧大小。這種情況中,π屬性與指針堆棧索引psix的值相對(duì)應(yīng),δ屬性與數(shù)據(jù)堆棧索引dsix的值相對(duì)應(yīng)。系統(tǒng)寄存器中保存用戶(hù)程序不可見(jiàn)的堆棧屬性∏和Δ。對(duì)于指針識(shí)別和系統(tǒng)不變量,僅具有小于∏的索引的指針被視為指針。
      有標(biāo)準(zhǔn)的加載和存儲(chǔ)指令對(duì)堆棧中的存儲(chǔ)字進(jìn)行尋址。通過(guò)使用標(biāo)準(zhǔn)的算術(shù)指令減少相應(yīng)的堆棧索引的值以將字從堆棧中刪除。為了保持系統(tǒng)不變量,提供一個(gè)專(zhuān)用的指令將指針壓入指針堆棧中,該指令可以不可中斷地在指針堆棧區(qū)域的第一個(gè)未被占用的存儲(chǔ)器位置上存儲(chǔ)指針并且增加指針堆棧索引。這是唯一的被允許增加指針堆棧索引的指令。
      在到此為止所描述的處理器體系結(jié)構(gòu)中,可以唯一地經(jīng)由指針來(lái)訪問(wèn)存儲(chǔ)器,并且創(chuàng)建指針的唯一可能性是利用對(duì)象創(chuàng)建指令來(lái)創(chuàng)建新的對(duì)象。然而,還能夠訪問(wèn)常量數(shù)據(jù),該常量數(shù)據(jù)甚至在程序起動(dòng)之前就作為程序代碼的一部分而存在。這樣的常量數(shù)據(jù)的例子是由編譯器生成的常量鏈接列表或者結(jié)構(gòu),例如,分支表或者類(lèi)型描述符。
      因而,在處理器體系結(jié)構(gòu)的優(yōu)選實(shí)施例的本例子中引入了常量對(duì)象。常量對(duì)象是不可改變的對(duì)象,其作為程序代碼的一部分存儲(chǔ),或者存儲(chǔ)在為常量對(duì)象保留的專(zhuān)門(mén)區(qū)域中。一個(gè)專(zhuān)門(mén)的“創(chuàng)建常量指針”指令被用于創(chuàng)建常量對(duì)象指針,以下被稱(chēng)作常量指針。經(jīng)由常量指針而進(jìn)行的存儲(chǔ)器訪問(wèn)被限制于讀訪問(wèn),并且常量對(duì)象的指針區(qū)域僅僅可以包含常量指針或者空指針。通過(guò)屬性來(lái)區(qū)分常量對(duì)象和普通對(duì)象,屬性用于區(qū)分特殊類(lèi)型的對(duì)象。
      在許多系統(tǒng)中,多個(gè)單獨(dú)的程序堆棧被用于不同類(lèi)型的操作,例如用戶(hù)模式和操作系統(tǒng)模式。此外,具有多個(gè)并發(fā)執(zhí)行線程的系統(tǒng)(多線程系統(tǒng))需要用于每個(gè)執(zhí)行線程的單獨(dú)的程序堆棧。所有的這些堆棧典型地由操作系統(tǒng)進(jìn)行管理,并且不位于由垃圾回收監(jiān)控的存儲(chǔ)器區(qū)域(堆)中。
      為了允許操作系統(tǒng)管理堆存儲(chǔ)區(qū)域以外的存儲(chǔ)區(qū)域,提供靜態(tài)對(duì)象。靜態(tài)對(duì)象僅僅在操作系統(tǒng)模式下被創(chuàng)建,并且位于專(zhuān)門(mén)用于此用途的存儲(chǔ)區(qū)域中。也可以通過(guò)屬性識(shí)別靜態(tài)對(duì)象。靜態(tài)對(duì)象指針(靜態(tài)指針)對(duì)用戶(hù)程序來(lái)說(shuō)是不可見(jiàn)的。
      為了保持系統(tǒng)不變量,在相關(guān)的對(duì)象創(chuàng)建指令被終止前,在最新產(chǎn)生的對(duì)象中的每個(gè)指針必須使用空值進(jìn)行初始化。因此,對(duì)象創(chuàng)建指令的執(zhí)行時(shí)間不是被小的時(shí)間常量限制的。這對(duì)于嚴(yán)格的實(shí)時(shí)應(yīng)用程序來(lái)說(shuō),是不可接受的。
      為了將對(duì)象創(chuàng)建指令實(shí)現(xiàn)為可中斷的,將未初始化的(更準(zhǔn)確地講是未完全初始化的)對(duì)象引入所描述的處理器體系結(jié)構(gòu)的優(yōu)選實(shí)施例。僅當(dāng)對(duì)象創(chuàng)建指令在完成前被中斷時(shí)創(chuàng)建未初始化的對(duì)象。指向未初始化對(duì)象的指針僅僅在操作系統(tǒng)模式下可見(jiàn),并且不會(huì)被解引用。與靜態(tài)對(duì)象和常量對(duì)象類(lèi)似,由屬性識(shí)別未初始化的對(duì)象。
      所描述的處理器體系結(jié)構(gòu)的示例性?xún)?yōu)選實(shí)施例支持四種不同類(lèi)型的對(duì)象普通的動(dòng)態(tài)對(duì)象,未初始化的動(dòng)態(tài)對(duì)象,常量對(duì)象,和靜態(tài)對(duì)象。使用屬性來(lái)區(qū)分對(duì)象類(lèi)型并且可以采用四個(gè)值中的一個(gè)(普通的,未初始化的,常量,靜態(tài))。在實(shí)現(xiàn)體系結(jié)構(gòu)時(shí),屬性可以被存儲(chǔ)在指向?qū)ο蟮闹羔樦泻?或者存儲(chǔ)在對(duì)象本身中。
      普通的動(dòng)態(tài)對(duì)象和未初始化的動(dòng)態(tài)對(duì)象位于堆存儲(chǔ)區(qū)域中,靜態(tài)對(duì)象位于靜態(tài)存儲(chǔ)區(qū)域中,常量對(duì)象位于用于程序代碼和/或常量數(shù)據(jù)的存儲(chǔ)區(qū)域中。因?yàn)殪o態(tài)的和未初始化的對(duì)象被限制于操作系統(tǒng)模式,所以它們被識(shí)別為系統(tǒng)對(duì)象。
      基于自動(dòng)垃圾回收的觀點(diǎn),四種類(lèi)型的對(duì)象可以通過(guò)它們?nèi)绾伪粔嚎s垃圾回收器處理來(lái)區(qū)別。必須在典型的動(dòng)態(tài)對(duì)象中搜索指針,并且在壓縮期間被移動(dòng)。必須在靜態(tài)對(duì)象中搜索指針,并且不可以被移動(dòng)。相對(duì)照地,未初始化的對(duì)象必須在壓縮期間被移動(dòng),但是不可以在其中搜索指針,因?yàn)樗鼈儼瑹o(wú)效的指針。最后,垃圾回收器既不可以在常量對(duì)象中搜索指針,也不可以移動(dòng)其。
      接下來(lái)為示例的目的而說(shuō)明推薦的處理器體系結(jié)構(gòu)的可能實(shí)現(xiàn)。假定使用32位的字值用于實(shí)現(xiàn)。存儲(chǔ)器是能夠以字節(jié)尋址的,以便允許在數(shù)據(jù)區(qū)域內(nèi)進(jìn)行字節(jié)和半字訪問(wèn)。字必須被對(duì)齊到可由四整除的地址。
      圖5中示出了存儲(chǔ)器中的對(duì)象的示例性布局。每個(gè)對(duì)象包括數(shù)據(jù)區(qū)域,指針區(qū)域,和屬性區(qū)域。由于效率的原因,對(duì)象被對(duì)齊到可由八整除的地址,因此,在特定情況下,兩個(gè)對(duì)象之間需要填充區(qū)域。對(duì)用戶(hù)程序來(lái)說(shuō)不可見(jiàn)的屬性區(qū)域包括對(duì)象的π和δ屬性。因?yàn)橹С肿止?jié)和半字操作數(shù),本實(shí)現(xiàn)可以輕微地改變?chǔ)泻挺牡亩x,這是由于它們現(xiàn)在描述的是相應(yīng)區(qū)域中的字節(jié)的數(shù)目而不是字的數(shù)目。
      因?yàn)棣斜仨毷?的倍數(shù),用于π屬性的存儲(chǔ)字中仍有兩位沒(méi)有被占用。其可用來(lái)存儲(chǔ)屬性(或者其中的一部分)和/或由垃圾回收器使用。
      指針直接包括對(duì)象的物理存儲(chǔ)器地址。因?yàn)閷?duì)象是根據(jù)雙字對(duì)齊的,所以對(duì)象地址僅僅占用指針字中的29位。剩余的三位被用于存儲(chǔ)屬性(或者其中的一部分)和/或由垃圾回收器使用。
      在訪問(wèn)一個(gè)對(duì)象前,必須先知道對(duì)象的屬性,因?yàn)檫@對(duì)于在訪問(wèn)前的范圍檢查是非常有必要的,并且在根據(jù)圖5的對(duì)象布局的情況中,在進(jìn)行數(shù)據(jù)訪問(wèn)時(shí)用于地址生成。
      因?yàn)槊看卧L問(wèn)對(duì)象前從存儲(chǔ)器中加載屬性都伴隨著較大的開(kāi)銷(xiāo),所以,為每個(gè)指針寄存器提供屬性寄存器,如圖6所示。如果指針寄存器包含一個(gè)非空的值,則相應(yīng)的屬性寄存器包括指針寄存器所指向的對(duì)象的屬性。以這種方式,對(duì)指針寄存器進(jìn)行解引用的開(kāi)銷(xiāo)與在傳統(tǒng)體系結(jié)構(gòu)中生成地址的開(kāi)銷(xiāo)同樣小。范圍檢查本身不涉及性能損失,因?yàn)樗梢耘c地址計(jì)算并行地執(zhí)行。
      然而,屬性寄存器需要一定的代價(jià)當(dāng)必須從存儲(chǔ)器中加載指針的時(shí)候,相關(guān)的屬性必須也被加載到屬性寄存器中。此外,只有當(dāng)結(jié)束指針加載時(shí),才知道存儲(chǔ)器中屬性的位置。
      在RISC體系結(jié)構(gòu)中,通過(guò)在典型的存儲(chǔ)器級(jí)后附加一個(gè)流水線級(jí)可以有效的解決這個(gè)問(wèn)題。這一附加的級(jí)被稱(chēng)為屬性級(jí)并且使用屬性緩存器以便執(zhí)行屬性訪問(wèn),在大多數(shù)情況下沒(méi)有性能損耗。屬性緩存器的結(jié)構(gòu)類(lèi)似于典型的數(shù)據(jù)緩存器。屬性緩存器由指針的頭29位尋址,并且允許在單個(gè)步驟中讀或?qū)懄泻挺膶傩?。其與數(shù)據(jù)緩存器的本質(zhì)上的差別是緩存器線(cache lines)的大小。數(shù)據(jù)緩存器中的緩存器線典型地包括8個(gè)字,而屬性緩存器的線為2字寬并且僅包含單個(gè)對(duì)象的屬性。
      圖7顯示了所實(shí)現(xiàn)的流水線的基本結(jié)構(gòu),圖8顯示了所有指針相關(guān)指令到單個(gè)流水線級(jí)的分解。為了示例性說(shuō)明,描述兩個(gè)最復(fù)雜的指令的處理。
      1.“加載指針”指令在流水線的執(zhí)行級(jí),地址生成單元(AGU)計(jì)算待加載的指針的存儲(chǔ)器地址,并且并行地執(zhí)行由體系結(jié)構(gòu)規(guī)定的運(yùn)行時(shí)間測(cè)試,例如范圍檢查和空指針測(cè)試。在存儲(chǔ)器級(jí)使用所計(jì)算的地址以便從對(duì)象緩存器中讀指針。然后,被加載的指針對(duì)屬性緩存器進(jìn)行尋址以便加載被加載的指針?biāo)赶虻膶?duì)象的屬性。最后,被加載的指針和被加載的屬性一起被寫(xiě)入寄存器組。
      2.對(duì)象創(chuàng)建指令利用兩個(gè)數(shù)據(jù)操作數(shù)來(lái)確定將被生成的對(duì)象的大小,所述操作數(shù)被從解碼級(jí)傳遞到執(zhí)行級(jí)。在執(zhí)行級(jí),指針生成單元(PGU)負(fù)責(zé)創(chuàng)建新對(duì)象的指針。在壓縮垃圾回收器的情況中,PGU僅僅通過(guò)將對(duì)象大小加到輔助寄存器的內(nèi)容上來(lái)簡(jiǎn)單地確定新對(duì)象的起始地址,該輔助的寄存器總是指向用于創(chuàng)建新對(duì)象的堆區(qū)域中最后被占用的字。AGU支持PGU,AGU用于創(chuàng)建指針初始化所需的地址。在具有8個(gè)字的緩存器線的對(duì)象緩存器中,在一個(gè)時(shí)鐘周期內(nèi),可以同時(shí)初始化最多8指針字。以這種方式,如果可以在一個(gè)時(shí)鐘周期內(nèi)計(jì)算出對(duì)象的起始地址,并且如果對(duì)象中的所有指針屬于同一緩存器線,則對(duì)象創(chuàng)建指令能夠沒(méi)有延遲地通過(guò)執(zhí)行級(jí)。如果不是這種情況,則停止流水線直到初始化結(jié)束或者中斷產(chǎn)生。最后,將最新生成的對(duì)象的屬性寫(xiě)入屬性緩存器,將指針連同其屬性寫(xiě)入寄存器組。如果被中斷的對(duì)象創(chuàng)建指令到達(dá)流水線的末端,則被中斷的對(duì)象生成的狀態(tài)被寫(xiě)入系統(tǒng)寄存器中,并且以用于未初始化的對(duì)象的屬性識(shí)別未完全初始化的對(duì)象。當(dāng)中斷程序的執(zhí)行環(huán)境(指令計(jì)數(shù)器,系統(tǒng)寄存器)重新恢復(fù)時(shí),重新恢復(fù)初始化。
      基于功能原型證明了所提出的體系結(jié)構(gòu)的功能性能。在這個(gè)原型中,垃圾回收器被實(shí)現(xiàn)為微程序控制的協(xié)處理器,該微程序控制的協(xié)處理器緊密地與主處理器的流水線一同工作。在處理器和協(xié)處理器之間的同步完全以硬件實(shí)現(xiàn)。處理器和用于垃圾回收的協(xié)處理器使用VHDL描述,并且被組合到一起以用于現(xiàn)代的可編程邏輯設(shè)備。此外,存在一個(gè)用于此體系結(jié)構(gòu)的原型的Java編譯器和Java標(biāo)準(zhǔn)庫(kù)的子集的實(shí)現(xiàn)。
      圖9顯示了本設(shè)備的實(shí)例的概要說(shuō)明。在這個(gè)例子中,由微程序控制的協(xié)處理器形成垃圾回收器。根據(jù)本發(fā)明的處理器體系結(jié)構(gòu)在主處理器1中實(shí)現(xiàn)。具有用于主處理器1和協(xié)處理器2的多個(gè)分離的端口的存儲(chǔ)器控制器3產(chǎn)生到主存儲(chǔ)器的連接。在主處理器和協(xié)處理器之間的同步發(fā)生在不同的級(jí)別。當(dāng)需要時(shí),垃圾回收器刷新或者清空數(shù)據(jù)和屬性緩存器的線以便確保緩存器的一致性。被集成到處理器流水線中的硬件讀取屏障可以觸發(fā)垃圾回收器中的中斷。垃圾回收器也可以終止主處理器1以便保護(hù)微代碼中的重要區(qū)域。
      權(quán)利要求
      1.一種處理器體系結(jié)構(gòu),其中,經(jīng)由指向?qū)ο蟮闹羔槹l(fā)生對(duì)存儲(chǔ)器的訪問(wèn),其特征在于將指針和數(shù)據(jù)彼此分離地分別存儲(chǔ)在對(duì)象中的指針區(qū)域和數(shù)據(jù)區(qū)域中,所述指針包含它們所指向的對(duì)象的存儲(chǔ)器地址,并且對(duì)象具有屬性,所述屬性存儲(chǔ)在所述對(duì)象自身中并且描述所述指針區(qū)域的長(zhǎng)度和所述數(shù)據(jù)區(qū)域的長(zhǎng)度,以及處理器提供具有分離的數(shù)據(jù)和指針寄存器的寄存器組,其中所述指針寄存器被用于訪問(wèn)存儲(chǔ)器中的對(duì)象。
      2.如權(quán)利要求1所述的處理器體系結(jié)構(gòu),其特征在于處理器保證每個(gè)指針僅包含預(yù)定的空值或現(xiàn)存對(duì)象的存儲(chǔ)器地址。
      3.如權(quán)利要求1或2所述的處理器體系結(jié)構(gòu),其特征在于使用具有分別用于數(shù)據(jù)和指針操作的指令的指令集。
      4.如權(quán)利要求1至3中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于指針的加載和存儲(chǔ)操作僅僅將指針從對(duì)象的指針區(qū)域加載到指針寄存器中和/或?qū)⒅羔樇拇嫫髦械膬?nèi)容存儲(chǔ)到對(duì)象的指針區(qū)域,以及數(shù)據(jù)的加載和存儲(chǔ)操作僅僅將數(shù)據(jù)從對(duì)象的數(shù)據(jù)區(qū)域加載到數(shù)據(jù)寄存器中和/或?qū)?shù)據(jù)寄存器中的內(nèi)容存儲(chǔ)到對(duì)象的數(shù)據(jù)區(qū)域中。
      5.如權(quán)利要求1至4中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于使用具有對(duì)象創(chuàng)建指令的指令集,所述對(duì)象創(chuàng)建指令在可以訪問(wèn)被創(chuàng)建的對(duì)象之前,使用空值來(lái)初始化所述被創(chuàng)建對(duì)象的指針區(qū)域中的所有指針。
      6.如權(quán)利要求5所述的處理器體系結(jié)構(gòu),其特征在于所述對(duì)象創(chuàng)建指令可以被中斷并且在后面的一個(gè)時(shí)間點(diǎn)被恢復(fù)執(zhí)行。
      7.如權(quán)利要求6所述的處理器體系結(jié)構(gòu),其特征在于在中斷對(duì)象創(chuàng)建指令的情況下,創(chuàng)建未完全初始化的對(duì)象,處理器可以明確地區(qū)分未完全初始化的對(duì)象和完全初始化的對(duì)象。
      8.如權(quán)利要求1至7中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于處理器支持常量對(duì)象,所述常量對(duì)象被保存在單獨(dú)的存儲(chǔ)器區(qū)域中,在程序運(yùn)行時(shí)間僅僅讀取所述存儲(chǔ)器區(qū)域,以及由處理器明確地識(shí)別常量對(duì)象指針。
      9.如權(quán)利要求1至8中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于使用被劃分為指針堆棧區(qū)域和數(shù)據(jù)堆棧區(qū)域的程序堆棧,由堆棧索引來(lái)指示在所述兩個(gè)堆棧區(qū)域中的每一個(gè)中的已被占用部分的長(zhǎng)度,該堆棧索引在為該用途而保留的數(shù)據(jù)寄存器中被管理。
      10.如權(quán)利要求9所述的處理器體系結(jié)構(gòu),其特征在于一個(gè)指令被用于將指針壓入指針堆棧,該指令以不可中斷的方式將相應(yīng)的指針存儲(chǔ)到指針堆棧并且還增加該指針堆棧索引。
      11.如權(quán)利要求1至10中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于處理器支持保存在單獨(dú)存儲(chǔ)器區(qū)域中的靜態(tài)對(duì)象,所述單獨(dú)存儲(chǔ)器區(qū)域由操作系統(tǒng)進(jìn)行管理,以及處理器可以明確地識(shí)別靜態(tài)對(duì)象指針。
      12.如權(quán)利要求9結(jié)合權(quán)利要求11所述的處理器體系結(jié)構(gòu),或者如權(quán)利要求10結(jié)合權(quán)利要求11所述的處理器體系結(jié)構(gòu),其特征在于靜態(tài)對(duì)象被用于程序堆棧,以及包含在對(duì)象中的屬性描述了在非活動(dòng)程序堆棧的情況中,堆棧區(qū)域的實(shí)際被占用部分的長(zhǎng)度。
      13.如權(quán)利要求1至12中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于為每個(gè)指針寄存器分配屬性寄存器,將指針寄存器中的指針?biāo)赶虻膶?duì)象的屬性寫(xiě)入相應(yīng)的屬性寄存器。
      14.如權(quán)利要求13所述的處理器體系結(jié)構(gòu),其特征在于具有附加的流水線級(jí)的流水線被用于加載屬性。
      15.如權(quán)利要求13或14所述的處理器體系結(jié)構(gòu),其特征在于使用屬性緩存器。
      16.如權(quán)利要求1至15中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于使用RISC指令集。
      17.如權(quán)利要求1至16中任何一項(xiàng)所述的處理器體系結(jié)構(gòu),其特征在于處理器執(zhí)行自動(dòng)垃圾回收。
      18.一種處理器,在該處理器中實(shí)現(xiàn)根據(jù)上述權(quán)利要求中任何一項(xiàng)所述的處理器體系結(jié)構(gòu)。
      19.一種具有主處理器(1)和協(xié)處理器(2)的設(shè)備,在所述主處理器(1)中實(shí)現(xiàn)根據(jù)權(quán)利要求1至16中的任何一項(xiàng)所述的處理器體系結(jié)構(gòu),所述協(xié)處理器(2)被用于執(zhí)行自動(dòng)垃圾回收并且被緊密地耦合到所述主處理器(1)上以便有效的同步。
      20.將如權(quán)利要求1至17中任何一項(xiàng)所述的處理器體系結(jié)構(gòu)用于嵌入式系統(tǒng)中的應(yīng)用。
      全文摘要
      本發(fā)明涉及一種基于對(duì)象的處理器體系結(jié)構(gòu),該處理器體系結(jié)構(gòu)通過(guò)在存儲(chǔ)器和處理器寄存器中嚴(yán)格地將指針和數(shù)據(jù)彼此分離,從而允許準(zhǔn)確的指針識(shí)別。只通過(guò)指向?qū)ο蟮闹羔榿?lái)執(zhí)行對(duì)存儲(chǔ)器的訪問(wèn)。對(duì)象包括用于指針和數(shù)據(jù)的分離的區(qū)域以及用于描述兩個(gè)區(qū)域長(zhǎng)度的屬性區(qū)域。在指針寄存器中的指針和在對(duì)象的指針區(qū)域中的指針都直接包括它們所指向的對(duì)象的地址。所提出的處理器體系結(jié)構(gòu)允許自動(dòng)垃圾回收的集成,其可以完全地或部分地用硬件來(lái)實(shí)現(xiàn)。通過(guò)硬件的支持,可以特別有效地實(shí)現(xiàn)具有實(shí)時(shí)能力的垃圾回收。
      文檔編號(hào)G06F9/312GK1816802SQ200480018836
      公開(kāi)日2006年8月9日 申請(qǐng)日期2004年7月1日 優(yōu)先權(quán)日2003年7月1日
      發(fā)明者馬蒂亞斯·邁爾 申請(qǐng)人:斯圖加特大學(xué)
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1