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

一種處理器結(jié)構(gòu)的制作方法

文檔序號:6531664閱讀:281來源:國知局
專利名稱:一種處理器結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及在權(quán)利要求1的前敘部分公開的一類處理器結(jié)構(gòu)。特別說,本發(fā)明特別適于但不限于執(zhí)行功能程序。
程序開發(fā)費(fèi)用很高。如果程序可以用功能語言制造的話,則這些費(fèi)用有時可以減少,因為對一個用戶來說很難使用以常規(guī)語言編程的機(jī)器-它需要許多知識-和因為其復(fù)雜性,程序員可能引入隱藏的錯誤。
編程語言的發(fā)展第一個電子計算機(jī)的開發(fā)開始了適合于幾種這類計算機(jī)的編程語言的開發(fā),諸如FORTRAN,COBOL,Algol,BASIC,Pascal。這些語言被稱為強(qiáng)制語言,下面也稱為常規(guī)語言,主要因為一個事實,即它們通常給出一系列要由常規(guī)計算機(jī)順序執(zhí)行的命令或指令組成的程序,常規(guī)計算機(jī)亦即根據(jù)John von Neumann開發(fā)的原理設(shè)計的計算機(jī)。強(qiáng)制類程序變得日益復(fù)雜并常常包含許多錯誤,難讀,難理解,和特別難修改。
這些強(qiáng)制語言的日益增加的不適導(dǎo)致另一系列語言,稱為功能語言的開發(fā)LISP,ISWIM,Scheme(LISP的方言(dialect)),ML,Hope,SASL,等等。在這些語言開發(fā)后面的驅(qū)動力是概念的簡單性;沒有特別的機(jī)器影響的設(shè)計。功能編程語言有幾種特性,它們消除了更為常規(guī)的編程語言的缺點(diǎn)。
為了另外的信息和理解,我們引用教科書“使用標(biāo)準(zhǔn)ML的功能編程”,ke Wikstrm著,1987年由Prentice出版社出版。
用功能語言寫的程序可以被看作是對象特性的一組定義和計算規(guī)則。定義是說明部分,計算規(guī)則是在執(zhí)行期間計算機(jī)使用的操作部分。功能語言提供對計算機(jī)的一個更高級接口,這使它可能為程序員從與計算機(jī)有關(guān)的細(xì)節(jié)中摘出。作為一個積極的效果,功能程序常常比常規(guī)強(qiáng)制程序更短和更容易理解。
當(dāng)今,功能語言作為在常規(guī)計算機(jī)上的虛擬機(jī)實現(xiàn)。這使用編譯程序和解釋程序?qū)崿F(xiàn)。這意味著執(zhí)行一個程序,它解釋程序指令。每一程序指令導(dǎo)致執(zhí)行一些機(jī)器指令。因此執(zhí)行慢。
顯然,功能程序方法的一些好處由下述事實打了折扣,即實際上市場上沒有有用的專門硬件用于以有效的方式存儲和執(zhí)行功能程序的處理。一些適于執(zhí)行功能編程語言的處理器,即所謂的FFP機(jī)器,在1988年出版的教科書“高級語言計算機(jī)結(jié)構(gòu)”(ISBN 0,88175-1342-2)中的第11和12章討論,并已不時構(gòu)建和制造。例如專用Lisp工作站在八十年代中期提供。Inmos有限責(zé)任公司生產(chǎn)的用于內(nèi)置系統(tǒng)的處理器的晶片機(jī)在八十年代中期問世并仍在市場上。
一種特別類型的功能語言是Erlang,它由申請人為實時應(yīng)用開發(fā)。不管功能程序在von Neumann類型的計算機(jī)上執(zhí)行慢的缺點(diǎn),比強(qiáng)制語言慢得多,但是Erlang的使用日漸增加。然而,安裝有Erlang的計算機(jī)的容量為某些應(yīng)用不夠。Erlang程序作為一些通信進(jìn)程也稱為進(jìn)程而建立。在不同進(jìn)程的執(zhí)行之間常常有一個開關(guān)。這一開關(guān)是非生產(chǎn)性的,應(yīng)該盡可能快。目前,它在所謂的“實時系統(tǒng)”中用軟件制作。
因為在常規(guī)計算機(jī)上提供的用功能語言諸如Erlang寫的數(shù)據(jù)程序非常消耗功率,對許多應(yīng)用太多,因此需要提供一個具有較低功耗的硬件。在大多數(shù)產(chǎn)品中低功耗是必需的。在將來對低功耗的要求會日益增加。高功耗阻礙了處理器速度的進(jìn)一步改進(jìn)。
本發(fā)明的一個目的是提供一個微處理器,它適于執(zhí)行以具有順序指令流的語言例如Erlang寫的程序或至少部分程序。
本發(fā)明的另一個目的是提供一個在實時操作系統(tǒng)內(nèi)執(zhí)行功能語言的協(xié)處理器。一個或幾個這一類型的協(xié)處理器應(yīng)該能夠處理要求大容量的進(jìn)程。
本發(fā)明的再一個目的是提供一個專用于Erlang的處理器。
本發(fā)明的再一個目的是提供一個在無線便攜設(shè)備中適于功能語言的處理器。給在無線便攜設(shè)備中的處理器提供常常需要改變的軟件(SW)內(nèi)容。在這種場合,適于處理功能語言諸如Erlang的處理器應(yīng)該給出很大優(yōu)點(diǎn)。
本發(fā)明還有一個目的是提供一個處理器,它適于功能語言,具有比當(dāng)今普通的較少存儲器訪問。這意味著需要高指令密度。
本發(fā)明的另一個目的是提供一種設(shè)備,它能夠處理以軟件實現(xiàn)的許多功能而具有低的或合理的功耗,因此提供大量功能對低的功耗。
本發(fā)明的再一個目的是為無用信息的收集和在處理器中的進(jìn)程切換提供一種專用硬件支持以便改善執(zhí)行性能和降低功耗。這種機(jī)構(gòu)通常在“實時系統(tǒng)”中以軟件實現(xiàn)。
本發(fā)明涉及一種處理器結(jié)構(gòu),它適于以順序指令流操作和通過使用表或元組或簡單類型處理數(shù)據(jù)的程序語言,包括一個指令保持設(shè)備,一個存儲數(shù)據(jù)對象的數(shù)據(jù)存儲器設(shè)備,和執(zhí)行設(shè)備。上面提到的對象可以通過為處理對由捆綁引用的數(shù)據(jù)對象的引用提供設(shè)備而解決,和包括依賴從指令保持設(shè)備來的一個實際指令增量對數(shù)據(jù)對象的引用計數(shù)和減量對數(shù)據(jù)對象的引用計數(shù)的設(shè)備。
可以在用于處理暫時存儲數(shù)據(jù)的設(shè)備中提供存儲設(shè)備和保持對所述暫時存儲器的捆綁的注意(notice)。當(dāng)注意保持設(shè)備檢測到對一個對象的零引用產(chǎn)生時,意味著這一對象不再需要,它優(yōu)選使為該對象的存儲器槽作為一個空閑的存儲器槽可用。處理暫時存儲數(shù)據(jù)的設(shè)備優(yōu)選包括參數(shù)存儲器設(shè)備,它具有為保持對存儲的值的捆綁的注意的設(shè)備,和具有為存儲所述數(shù)據(jù)值的設(shè)備。
值存儲設(shè)備可以存儲為供給到參數(shù)存儲器的值的值和類型信息。這些值作為數(shù)據(jù)對象的一部分,于是具有對參數(shù)的捆綁。參數(shù)存儲器然后使用參數(shù)和使用為暫時存儲器的參數(shù)在函數(shù)之間傳輸值。參數(shù)存儲器可以在計算前用存儲的實際值置換從指令存儲器設(shè)備中取的指令中的參數(shù)引用??梢栽趨?shù)存儲器中提供設(shè)備用于存儲和管理為這些參數(shù)的環(huán)境信息,這里環(huán)境決定哪些參數(shù)是當(dāng)前有效的參數(shù)??梢栽趨?shù)存儲器中為參數(shù)和環(huán)境提供用于存儲和管理信息的設(shè)備,這里供給參數(shù)存儲器的進(jìn)程信息用于決定哪些環(huán)境和哪些參數(shù)是當(dāng)前有效的。
可以提供一個進(jìn)程標(biāo)識寄存器,用于標(biāo)識當(dāng)前執(zhí)行的進(jìn)程,和一個環(huán)境標(biāo)識寄存器,用于標(biāo)識當(dāng)前執(zhí)行的環(huán)境。優(yōu)選保持至少一個要被執(zhí)行的進(jìn)程的優(yōu)先級隊列的至少頂部可讀。至少下一要執(zhí)行的進(jìn)程的進(jìn)程說明的一部分在參數(shù)存儲器設(shè)備中保持可讀。為建立一個進(jìn)程開關(guān)●在參數(shù)存儲器中建立一個新環(huán)境,至少程序計數(shù)器存儲在所述新環(huán)境中,
●在當(dāng)前進(jìn)程的進(jìn)程說明中存儲所述新環(huán)境值,所述進(jìn)程說明可以存儲在數(shù)據(jù)存儲器中,●恢復(fù)新進(jìn)程的環(huán)境值,●設(shè)定該新進(jìn)程為當(dāng)前進(jìn)程,●至少恢復(fù)程序計數(shù)器。
指令優(yōu)選只以一種格式提供,這里每一指令由不同數(shù)目的子指令組成。每一子指令依次只具有一種同樣的指令格式,包括一個第一部分和一個第二部分,第一部分決定要采取的動作和第二部分提供在動作中要使用的值。
本發(fā)明可以適于執(zhí)行功能語言。于是建立一個指令集,它包括為函數(shù)調(diào)用、函數(shù)返回、在函數(shù)之間傳輸參數(shù)的專用指令。于是還可以建立一個指令集,它包括為增量和減量存儲器引用的專用指令。上面公開的處理器指令可以適于用一種功能語言寫的計算機(jī)程序的進(jìn)程部分。
這樣,本發(fā)明涉及這樣一種處理器結(jié)構(gòu),它適于以順序指令流操作和通過使用簡單的值和表和動態(tài)分配的數(shù)組處理數(shù)據(jù)的程序語言,包括一個指令保持設(shè)備,一個用于存儲數(shù)據(jù)對象的數(shù)據(jù)存儲器,和執(zhí)行設(shè)備。本發(fā)明的基本特征在于,依賴于指令保持設(shè)備中的一個實際指令處理簡單值和引用數(shù)據(jù)對象,所述依賴稱為捆綁。還有依賴于在指令設(shè)備中的一個實際指令和依賴于存儲對所述數(shù)據(jù)對象的引用的存儲設(shè)備增量對數(shù)據(jù)對象的引用計數(shù)和減量對數(shù)據(jù)對象的引用計數(shù)的設(shè)備。本發(fā)明可以包括為存儲簡單數(shù)據(jù)和對在設(shè)備中的數(shù)據(jù)對象的引用的設(shè)備,所述存儲的數(shù)據(jù)和對數(shù)據(jù)對象的引用通過標(biāo)識符由指令設(shè)備中的指令引用??梢蕴峁┐鎯υO(shè)備,用于存儲簡單的數(shù)據(jù)和對數(shù)據(jù)對象的引用。存儲值的設(shè)備可以包括參數(shù)存儲器設(shè)備,它有保持注意對存儲的值的捆絆的設(shè)備,和具有為存儲所述數(shù)據(jù)值的存儲設(shè)備??梢蕴峁┻@一存儲設(shè)備來處理值的暫時存儲,這里存儲的值至少包括類型信息和數(shù)字信息,類型信息表征數(shù)字信息。
可以使用參數(shù)存儲器依賴指令設(shè)備中的一個實際指令傳輸、存儲函數(shù)參量諸如存儲在參數(shù)存儲器中的參量值,然后捆綁到在指令中的一定的標(biāo)識符。可以依賴在一個實際指令中的所述標(biāo)識符從參數(shù)存儲器中讀這些值??梢栽趨?shù)存儲器中提供用于存儲和管理為存儲的值的范圍信息和指定的環(huán)境的設(shè)備,這里范圍決定哪些值當(dāng)前有效和合格從存儲器中讀出??梢栽趨?shù)存儲器中提供用于存儲和管理為范圍和值的信息的設(shè)備,這里使用該設(shè)備來存儲和管理進(jìn)程信息,進(jìn)程信息決定哪些范圍和值當(dāng)前有效和合格從存儲器中讀出??梢蕴峁┻M(jìn)程標(biāo)識符寄存器用于標(biāo)識當(dāng)前執(zhí)行的進(jìn)程。也可以提供范圍標(biāo)識符寄存器用于標(biāo)識當(dāng)前有效的范圍。至少保持要被執(zhí)行的進(jìn)程的一個優(yōu)先級隊列的頂部可用于讀,至少保持下一要執(zhí)行的進(jìn)程的部分進(jìn)程說明可用于讀。為建立一個進(jìn)程開關(guān),優(yōu)選●建立一個新范圍,和使用所述新范圍在參數(shù)存儲器中至少存儲程序計數(shù)器;●新范圍值存儲在當(dāng)前進(jìn)程的進(jìn)程說明中,所述進(jìn)程說明可以存儲在數(shù)據(jù)存儲器中;●為切換到進(jìn)程的范圍值從所述進(jìn)程的進(jìn)程說明中恢復(fù);●切換到設(shè)定為當(dāng)前進(jìn)程的進(jìn)程;●至少從參數(shù)存儲器中讀程序計數(shù)器并恢復(fù)。
本發(fā)明還涉及一種進(jìn)程結(jié)構(gòu),其特征在于指令只有一種指令格式,這里,每一指令包括不同數(shù)目的子指令,每一子指令依次只具有同樣的一種格式,包括第一和第二部分,第一部分決定要采取的動作,第二部分提供在該動作中使用的值。該進(jìn)程結(jié)構(gòu)優(yōu)選適于執(zhí)行使用功能和動態(tài)存儲器分配的語言。指令集的特征包括為建立函數(shù)調(diào)用和在同一指令中傳輸函數(shù)參量的專用指令;為建立從函數(shù)的返回和在同一指令內(nèi)傳輸函數(shù)結(jié)果的專用指令。
指令集可以包括為增量或減量對存儲在數(shù)據(jù)存儲器中的數(shù)據(jù)對象的引用號碼的子指令,這里,所述子指令說明表示捆綁到參數(shù)存儲器的標(biāo)識符。參數(shù)存儲器可以依次存儲對由所述捆綁引用的實際數(shù)據(jù)對象的存儲器引用。參數(shù)存儲器存儲使用的管理是一個自治的進(jìn)程,它能從參數(shù)存儲器讀出值并將這些值存儲到數(shù)據(jù)存儲器中。然后可以釋放參數(shù)存儲器中的存儲位置供使用,還可以從數(shù)據(jù)存儲器讀回這些值到參數(shù)存儲器和為所述值恢復(fù)信息。當(dāng)在參數(shù)存儲器中的進(jìn)程大于一個指定的極限值時可以把屬于一個選擇的進(jìn)程的值移動到數(shù)據(jù)存儲器。當(dāng)在參數(shù)存儲器中為一個進(jìn)程的范圍數(shù)目大于一個指定的極限時,屬于一個選擇的范圍的值可以被移動到數(shù)據(jù)存儲器。當(dāng)下一要被執(zhí)行的進(jìn)程沒有在參數(shù)存儲器中的值但是具有移動到數(shù)據(jù)存儲器的這種值時,至少一些這樣的值可以從數(shù)據(jù)存儲器恢復(fù)到參數(shù)存儲器中。當(dāng)在參數(shù)存儲器中為當(dāng)前進(jìn)程的范圍數(shù)目小于一個指定的極限時,為當(dāng)前進(jìn)程的值被移動到數(shù)據(jù)存儲器,至少一些這樣的值可以從數(shù)據(jù)存儲器移動并恢復(fù)到參數(shù)存儲器。
設(shè)計這種處理器結(jié)構(gòu)為下述場合執(zhí)行得特別好●以功能語言組成控制結(jié)構(gòu)的“功能應(yīng)用”。
●進(jìn)程開關(guān),下面稱為環(huán)境(context)開關(guān)(為進(jìn)程的其它表述是任務(wù)或線程。在剩余的文字中使用表述進(jìn)程,雖然應(yīng)該理解,也可以使用任務(wù)或線程)。通常,遠(yuǎn)程通信應(yīng)用使用大量進(jìn)程實現(xiàn)。能夠在這些進(jìn)程之間快速切換,以便不損失性能是必需的。
●在進(jìn)程之間的消息傳送。
●存儲器管理,包括無用信息的收集。
功能語言把存儲器管理留給運(yùn)行時間系統(tǒng)。處理存儲器占用處理器時間,通常被視為是一個問題。當(dāng)使用例如用Erlang提供的本發(fā)明時,這在處理器中用專用單元實現(xiàn),對有用的計算很少干擾。
根據(jù)本發(fā)明的處理器以類RISC方式執(zhí)行指令,亦即以順序指令流方式,容易形成管線。這樣,根據(jù)本發(fā)明的處理器不是一個精簡機(jī)。它有一個簡單的組合指令解碼,有效執(zhí)行函數(shù)調(diào)用,支持建立和操作表和元組,支持快速環(huán)境切換,和高代碼密度。這使得功耗在低的和經(jīng)濟(jì)的水平,避免需要昂貴的冷卻系統(tǒng)。
為更完整地理解本發(fā)明及其另外的目的和優(yōu)點(diǎn),現(xiàn)在結(jié)合附圖引用下面的說明,附圖中

圖1表示一個專用處理器結(jié)構(gòu)的第一實施例,用于處理以順序指令流工作的功能語言,例如Erlang。
圖2表示一個指令管線的一個優(yōu)選實施例。
圖3表示在根據(jù)本發(fā)明的處理器中包含的參數(shù)存儲器的內(nèi)部結(jié)構(gòu)的一個實施例。
圖4表示在參數(shù)存儲器中存儲的參數(shù)說明的層次結(jié)構(gòu)。
在根據(jù)本發(fā)明的處理器中的指令集結(jié)構(gòu)(ISA)設(shè)計為緊湊而高效,用于執(zhí)行功能語言特別是為Erlang。然而,本發(fā)明概念也適用于非功能性的其它類型的語言。為ISA的一些設(shè)計目的在下面說明●以類RISC方式執(zhí)行,亦即順序指令流,容易形成管線。
●簡單的指令解碼。
●高效執(zhí)行函數(shù)調(diào)用。
●支持快速環(huán)境切換。
●高代碼密度。
●支持為表和元組的無用信息收集。
優(yōu)選只有一種指令格式。每一指令優(yōu)選由不同數(shù)目的子指令組成,例如3個,每一個子指令具有同樣的格式。第一子指令格式包括一個第一部分,它決定要采取的動作,和一個第二部分,它提供在所采取動作中使用的值。第一子指令可以決定整個指令的解釋,或可以允許其它子指令指示以非常長指令世界(VLIW)方式的并發(fā)獨(dú)立的動作。
現(xiàn)在引用圖1,該圖表示滿足上述特征的根據(jù)本發(fā)明的處理器的主結(jié)構(gòu)的一個實施例。為處理器的程序?qū)懭胍粋€指令存儲器2。程序由給指令存儲器2提供地址的程序計數(shù)器1向前步進(jìn)。
如在圖2中所示,在該實施例中的處理器結(jié)構(gòu)基本上是一個4階段管線,包括取指令階段IF,指令解碼ID,參數(shù)存儲器訪問PMA和執(zhí)行EX,其在下面進(jìn)一步說明。因為存儲可以形成管線的第五存儲階段,因此也可以視為管線的一部分。
回到圖1,要取的指令由程序計數(shù)器1指出。它由指令取出機(jī)構(gòu)IF從指令存儲器2取出。因此,程序計數(shù)器連接到指令存儲器2并把地址供給該存儲器。然后存儲器返回由該地址指向的指令。
取回的指令以編碼形式亦即以編譯為處理器的機(jī)器碼的形式存儲在存儲器2中,然后供給指令解碼器3,后者進(jìn)行指令解碼ID。在解碼階段檢測無條件分支。解碼器3變換指令為一些用作控制字的控制信號。
然后解碼的指令被傳輸?shù)絽?shù)存儲器4階段,用于參數(shù)存儲器訪問PMA。這一參數(shù)存儲器4是為本發(fā)明提供的一種特殊類型的硬件設(shè)備。在這一階段內(nèi),在解碼的指令中的參數(shù)引用用它們存儲在參數(shù)存儲器4中的相應(yīng)的實際值代替,其在下面相對于圖3十分明顯。
這樣,該處理器不用寄存器或堆棧工作。它代之以用參數(shù)操作。參數(shù)是對值的臨時捆綁,這些值臨時存儲到處理器中的參數(shù)存儲器4中。參數(shù)根據(jù)需要分配并在完成功能應(yīng)用后或在遇見顯式指令時釋放。根據(jù)環(huán)境(context)訪問參數(shù)。參數(shù)的最大數(shù)目不由該結(jié)構(gòu)限制,但是依賴于專門的處理器實現(xiàn)。這對于處理功能參量和局部變量/捆綁給出良好和有效的支持。
于是參數(shù)在根據(jù)本發(fā)明的處理器的指令集結(jié)構(gòu)中占據(jù)中心部分,這在下面說明。為函數(shù)的參量和在函數(shù)體內(nèi)進(jìn)行的局部捆綁以及為在函數(shù)調(diào)用時參量的傳輸而使用參數(shù)。
設(shè)計參數(shù)存儲器4提供快速指令執(zhí)行和存儲當(dāng)前捆綁,亦即函數(shù)參數(shù)和局部變量。這意味著參數(shù)傳輸,局部捆綁和函數(shù)結(jié)果不通過主數(shù)據(jù)存儲器5而代之以通過快速參數(shù)存儲器4。
在這一參數(shù)存儲器階段之內(nèi),一定的解碼的指令通過在參數(shù)存儲器4中存儲實際值將建立新的捆綁和對這些值建立參數(shù)捆綁。從解碼的指令或從寄存器提供存儲的值,或從數(shù)據(jù)存儲器5取出。在每一時鐘周期期間可以進(jìn)行存儲和代替其中之一的幾個操作。
在參數(shù)存儲器訪問階段,在指令中的參數(shù)捆綁用實際值代替。參數(shù)存儲器4可以優(yōu)選支持每時鐘周期至少兩個這種置換。在參數(shù)存儲器階段后,一個指令中的參數(shù)捆綁用實際值代替,這里實際值從參數(shù)存儲器取出。
數(shù)據(jù)存儲器處理器6保持?jǐn)?shù)據(jù)存儲器5中的地址的記錄,因為在功能語言中,諸如Erlang,程序不像在強(qiáng)制語言中那樣用地址和指針工作。這種特征隱藏在所謂的運(yùn)行時間過程中,它意味著需要數(shù)據(jù)存儲器處理器6來決定和保持為特別寄存器的地址的記錄,這些寄存器包含為在數(shù)據(jù)存儲器5中存儲的進(jìn)程的數(shù)據(jù)。為存儲的數(shù)據(jù)的地址回送給執(zhí)行單元7。
參數(shù)存儲器4給執(zhí)行指令的執(zhí)行單元7供應(yīng)代替的指令數(shù)據(jù)和代碼字。參數(shù)存儲器4還包括其內(nèi)至少存儲有一個進(jìn)程的當(dāng)前標(biāo)識符id的寄存器,其當(dāng)說明圖3時進(jìn)一步討論。
參數(shù)存儲器4事實上是在數(shù)據(jù)存儲器5中讀寄存器的單元,而連接到參數(shù)存儲器4的執(zhí)行單元7是寫數(shù)據(jù)到寄存器的單元。連接數(shù)據(jù)存儲器處理器6與參數(shù)存儲器4和執(zhí)行單元7兩者協(xié)同操作。
類似語言Erlang,處理器結(jié)構(gòu)基于進(jìn)程。參數(shù)存儲器4中的第一專用寄存器保存當(dāng)前進(jìn)程id,cpr。第二專用寄存器保存當(dāng)前環(huán)境標(biāo)識,env。環(huán)境意味著一系列指令,其內(nèi)一定的參數(shù)引用有效,例如值捆綁的范圍。
圖3表示參數(shù)存儲器4的優(yōu)選的結(jié)構(gòu)。它包括一個進(jìn)程存儲平面10,其內(nèi)存儲當(dāng)前進(jìn)程,process_info(進(jìn)程信息),一個環(huán)境存儲平面,其內(nèi)存儲為該進(jìn)程的環(huán)境的信息,environment_info(環(huán)境信息)。
雖然在指令集中不直接可見,但是使用進(jìn)程保持跟蹤在處理器上執(zhí)行的高級語言中的進(jìn)程(或任務(wù)或線程)。在一個Erlang進(jìn)程和在處理器中的一個進(jìn)程之間有一個對應(yīng)。一個生產(chǎn)(spawn)指令建立一個新進(jìn)程,啟動它的環(huán)境和將其與它的進(jìn)程描述符相關(guān)。另一個指令把一個進(jìn)程推到進(jìn)程隊列上。另一個指令切斷當(dāng)前進(jìn)程并接入進(jìn)程隊列中的第一進(jìn)程以形成新的當(dāng)前進(jìn)程。
在進(jìn)程描述符中至少存儲下面的信息●指向第一消息的指針。
●指向最后消息的指針。
●當(dāng)前環(huán)境(當(dāng)不執(zhí)行時)。
●其它雜類信息,諸如一個表或連接的進(jìn)程。
另外,該結(jié)構(gòu)基于環(huán)境的概念。環(huán)境(env)定義參數(shù)存儲器4中的當(dāng)前捆綁。使用環(huán)境來跟蹤參數(shù)范圍。在函數(shù)調(diào)用的開始建立一個新環(huán)境,env,并成為當(dāng)前環(huán)境。在一個函數(shù)調(diào)用中的參數(shù)捆綁在新環(huán)境中被捆綁。在函數(shù)返回時,當(dāng)前環(huán)境終止,而調(diào)用函數(shù)的環(huán)境恢復(fù)為當(dāng)前環(huán)境,亦即用先前的環(huán)境置換當(dāng)前環(huán)境。在被置換的環(huán)境中的所有參數(shù)捆綁在函數(shù)返回時被清除。
如圖4所示,一個參數(shù)僅在它的環(huán)境中有效。相似地,一個環(huán)境僅在它的進(jìn)程內(nèi)有效。
這樣,當(dāng)提供一個進(jìn)行函數(shù)調(diào)用的指令時,env向上步進(jìn)1。當(dāng)指示回跳的一個指令到來時,env向下步進(jìn)1。
參數(shù)存儲器4還有一個存儲器平面12,例如包括一個寄存器crp,為一個一定的參數(shù)值和在平面13中存儲的類型保存進(jìn)程標(biāo)識。如圖3所示,檢索參數(shù)id、實際環(huán)境env,實際進(jìn)程被傳輸?shù)街荡鎯ζ?3。
參數(shù)存儲器4可以執(zhí)行一些動作。這些動作的例子和它們相應(yīng)的結(jié)果和需要的輸入開列在下面。
讀參數(shù)存儲器4返回在值存儲平面13中存儲的指定的參數(shù)的類型和值。在參數(shù)存儲器4中給存儲平面10、11和12提供參數(shù)id、實際環(huán)境和實際進(jìn)程的信息。
彈出參數(shù)存儲器4返回指定的參數(shù)的值+類型(存儲在存儲平面13內(nèi))。另外,它從參數(shù)存儲器4中去除參數(shù)及其值。在參數(shù)存儲器4中給存儲平面10、11和12提供參數(shù)id、實際環(huán)境和實際進(jìn)程的信息。
設(shè)定參數(shù)存儲器4存儲一個具有指定id的新參數(shù)(在類型和值存儲平面13內(nèi))。在參數(shù)存儲器4中給平面12、11和10提供參數(shù)id、實際環(huán)境、實際進(jìn)程和參數(shù)值的信息。
清理(garb)參數(shù)存儲器從在存儲器中的平面10-13中去除參數(shù)及其值。給參數(shù)存儲器4提供參數(shù)id、實際環(huán)境和實際進(jìn)程的信息。
清理env(garb env)參數(shù)存儲器從平面10-13中去除為指定的環(huán)境值的所有參數(shù)及其值,給參數(shù)存儲器4提供環(huán)境和實際進(jìn)程的信息。
讀操作例如可以以下面的方式工作。圖3中3個最左面的存儲平面10、11、12執(zhí)行一個相關(guān)的檢索。在這3個存儲平面內(nèi)的線輸出命中(line yielding hits)為該線選擇在圖3中最右邊的存儲平面13中存儲的值+類型數(shù)據(jù)。
該功能類似為存儲的功能,除了值+類型數(shù)據(jù)不是被讀而是被存儲。清理和彈出操作丟棄尋址位置中的信息,使其釋放供使用。
這樣,參數(shù)存儲器4用于存儲值和為這些值的類型信息。參數(shù)捆綁到值上,這里使用參數(shù)在函數(shù)之間傳送值并用于臨時存儲。參數(shù)存儲器4可以在計算前用存儲的實際值置換在取出的指令中的參數(shù)引用。
文件中的檢索可以在某種關(guān)聯(lián)進(jìn)程中進(jìn)行。然而,這種檢索也可以以某些其它方式實現(xiàn),例如由諸如進(jìn)程和env使用已公開的(compromised)地址。還可以連接進(jìn)程存儲器到關(guān)聯(lián)存儲器和環(huán)境存儲器11。然后把參數(shù)引用供給參數(shù)存儲器進(jìn)行檢索。輸出一個值。
參數(shù)存儲器4還可以管理為參數(shù)的環(huán)境信息,這里環(huán)境決定哪些是存儲的參數(shù),哪些是當(dāng)前有效的參數(shù)。
參數(shù)存儲器4還可以管理為參數(shù)和環(huán)境的信息,這里進(jìn)程信息決定哪些是存儲的環(huán)境,哪些是當(dāng)前有效的環(huán)境,哪些是存儲的參數(shù),哪些是當(dāng)前有效的參數(shù)。
這意味著使用參數(shù)代替寄存器或堆棧。這導(dǎo)致更有效地處理函數(shù)調(diào)用和局部捆綁。使用依賴環(huán)境(context)的機(jī)構(gòu)尋址參數(shù)。這使得說明的指令集結(jié)構(gòu)獨(dú)立于在一個特別的處理器實現(xiàn)中的參數(shù)存儲器的數(shù)量。
處理器至少管理一個進(jìn)程隊列。可以例如為不同的優(yōu)先級管理幾個隊列。
因為參數(shù)存儲器4具有有限數(shù)目的參數(shù)槽,因此它也許不足以為一個大程序同時保存所有參數(shù)。
如果參數(shù)存儲器4開始達(dá)到它的容量極限,則參數(shù)開始存儲在數(shù)據(jù)存儲器5中,這樣供給參數(shù)存儲器4中的槽。這一動作稱為參數(shù)的換出。相反的動作稱為參數(shù)的換入,是從數(shù)據(jù)存儲器5讀先前存儲的參數(shù),并用當(dāng)前進(jìn)程、環(huán)境和參數(shù)id值恢復(fù)到參數(shù)存儲器4中。
參數(shù)的換入和換出均由處理器自動進(jìn)行,不干擾指令執(zhí)行。
觀察進(jìn)程隊列的頂部。如果在那里發(fā)現(xiàn)一個進(jìn)程(PF),它當(dāng)前不在參數(shù)存儲器4中,則在參數(shù)存儲器4中為一個進(jìn)程(它不是當(dāng)前進(jìn)程)的參數(shù)開始被換出,在發(fā)現(xiàn)的進(jìn)程(PF)的最上面的環(huán)境中的參數(shù)被換入到參數(shù)存儲器。
一定的機(jī)構(gòu)決定哪一個進(jìn)程應(yīng)該使其參數(shù)換出。例如,最近不使用(LRU)可以是用以決定哪一個進(jìn)程被換出的策略。
如果為當(dāng)前進(jìn)程在參數(shù)存儲器中的環(huán)境的數(shù)目開始達(dá)到最大極限,則開始一個動作,把最低環(huán)境的參數(shù)換出到數(shù)據(jù)存儲器。相似地,如果在參數(shù)存儲器中的環(huán)境數(shù)目開始達(dá)到最低極限,則開始一個動作,把存儲在數(shù)據(jù)存儲器中的最高環(huán)境的參數(shù)(如果有的話)換入。
參數(shù)換入和換出機(jī)構(gòu)保證最可能被使用的參數(shù)存儲在參數(shù)存儲器4中。
至于存儲器管理,數(shù)據(jù)存儲器中未用的存儲器槽組織為一個可用存儲器寄存器的表。數(shù)據(jù)存儲器處理器6中一個確定的寄存器(空閑的)指向該表的第一元素。在請求存儲一個元素時,該元素存儲在由提到的專用寄存器(空閑的)指示的存儲器槽中。然后更新寄存器(空閑的)使指向現(xiàn)在實際第一可用存儲器位置,下面稱為存儲器槽,其先前是表中的第二個。在釋放一個使用的存儲器槽時該槽放在可用存儲器槽的表的開始。
如上所述,Erlang通過使用元組和表和簡單類型處理數(shù)據(jù)。這些數(shù)據(jù)由捆綁引用。當(dāng)一個數(shù)據(jù)對象不由一個捆綁引用時,則它不再需要,而可以丟棄。然后它的存儲器槽可以為其它數(shù)據(jù)對象使用。這樣,沒有引用指向的存儲器槽被認(rèn)為可自由使用。這意味著自動的無用信息收集可視為正在進(jìn)行。保持注意這樣的存儲器槽,它們在請求時釋放。
這樣,存儲器管理在這一結(jié)構(gòu)中得到相當(dāng)好的支持,并按照引用計數(shù)的原理執(zhí)行。這意味著一些子指令為數(shù)據(jù)對象分別控制增量的引用和減量的引用。當(dāng)執(zhí)行這樣的子指令時,一個數(shù)據(jù)對象的引用部分以為存儲器管理的單位自動增加或減少。如果發(fā)生零引用并且被檢測到,則它的存儲器槽被釋放而可作為由其它數(shù)據(jù)對象使用的空閑存儲器槽使用。
如上所述,參數(shù)存儲器4的結(jié)構(gòu)是根據(jù)進(jìn)程的,常常需要從一個進(jìn)程切換到另一個進(jìn)程。于是需要進(jìn)行下面的操作。
對于一個環(huán)境開關(guān),當(dāng)前環(huán)境標(biāo)識存儲在一個由進(jìn)程寄存器(cpr)指出的進(jìn)程(或任務(wù))描述符中。其他寄存器可以存儲在參數(shù)存儲器中,如果需要的話。當(dāng)該進(jìn)程被切換回來時,然后可以把寄存器值從參數(shù)存儲器恢復(fù)。這樣,為實現(xiàn)一個環(huán)境開關(guān)所需要的對數(shù)據(jù)存儲器5的唯一訪問是存儲和恢復(fù)該環(huán)境。
為制造一個開關(guān)●捆綁在當(dāng)前工作集中的寄存器的數(shù)據(jù)值到參數(shù)并把它們存儲到參數(shù)存儲器4中。當(dāng)前環(huán)境的值存儲在當(dāng)前進(jìn)程的進(jìn)程說明符中。然后env用作為指向參數(shù)存儲器4中在恢復(fù)時讀應(yīng)該開始的地方的一個關(guān)鍵字。
●讀env和把新進(jìn)程的新“工作集”恢復(fù)到參數(shù)存儲器4中,該新進(jìn)程是從數(shù)據(jù)存儲器5中包括為該新進(jìn)程的環(huán)境的進(jìn)程說明符要切換到的進(jìn)程。
●在實際切換的進(jìn)程被切換出去前恢復(fù)程序計數(shù)器1到下一值。
按照這一方案,對主存儲器5的耗費(fèi)時間的存儲器訪問可以最少,實現(xiàn)了快速環(huán)境切換。
該指令集結(jié)構(gòu)可以例如用于執(zhí)行功能語言,支持具有為下述功能的專用指令的語言函數(shù)調(diào)用、函數(shù)返回、在函數(shù)之間傳輸參量、和進(jìn)程管理。有為建立、讀取、寫和操作在Erlang中發(fā)生的數(shù)據(jù)對象亦即表和元組和簡單類型的特別指令。
指令格式的例子指令=子指令,子指令,子指令子指令=標(biāo)記,值這里標(biāo)記(tag)說明值應(yīng)該如何解釋。例如par,5意味著指定參數(shù)數(shù)目5。它表示該指令的邏輯組織。在一個實際的處理器實現(xiàn)中,所有標(biāo)記可以例如分組在一起。在第一子指令中的標(biāo)記通常說明整個指令應(yīng)該如何解釋。例如如果在第一子指令中的標(biāo)記說明一個二進(jìn)制算術(shù)運(yùn)算,則另外兩個子指令說明操作數(shù),和第一子指令的值說明該算術(shù)運(yùn)算的類型。
可以有這一規(guī)則的例外。在第一存儲器槽中的某些指令確實只使用頭兩個子指令,在這種場合,可以使用第三槽為一個單子指令,亦即可以有一組獨(dú)立的子指令,它們只在一個指令的第三槽中操作。某些獨(dú)立的子指令也可以放在第二槽中。
標(biāo)記/值組合的例子是標(biāo)記,值=fun,fun_number (調(diào)用函數(shù)fun_number)| par,par_number (使用指定的參數(shù))|pop,register_number(從當(dāng)前函數(shù)返回,在指定寄存器中交付結(jié)果)|reg,register_number (使用register_number中的值)|alu,alu_operation(執(zhí)行由alu_operation給出的運(yùn)算)|gar,par_number (釋放由這一參數(shù)使用的空間)|等例子可以在處理器中使用下面的寄存器acc存儲alu運(yùn)算的結(jié)果,cpr存儲當(dāng)前進(jìn)程id,env存儲當(dāng)前環(huán)境,id存儲最后存儲的元素的存儲器地址,res當(dāng)從一個函數(shù)返回時保存一個結(jié)果值,d0保存一個數(shù)據(jù)元素。它的部分可以由d01,d02,d03,d04尋址,這里d01保存元素類型值,d02保存一個數(shù)字值,d03和d04保存包含值類型的指針/整數(shù),free存儲第一空閑存儲器槽。
處理器可以使用下述不可尋址寄存器env-old存儲先前的環(huán)境cnt存儲最后分配的參數(shù)號碼。
如上所述,參數(shù)用于函數(shù)調(diào)用時的參量傳遞和用于局部捆綁。當(dāng)執(zhí)行一個函數(shù)調(diào)用時,參量列在調(diào)用函數(shù)的第二和第三子指令中。參量得到和它們出現(xiàn)一樣的連續(xù)號碼,從在一個新函數(shù)體中的第一子指令開始。
局部捆綁通過下面提到的par或pad指令實現(xiàn),例如(par5,regacc,*.*)捆綁參數(shù)5到當(dāng)前進(jìn)程中的當(dāng)前環(huán)境內(nèi)的寄存器acc中的值。*表示任意元素。
還有為操作對數(shù)據(jù)的引用的特別的指令,亦即用專用指令支持語言來增量或減量對數(shù)據(jù)對象的存儲器引用的號碼。
對于ISA(指令集結(jié)構(gòu))的經(jīng)驗指出指令的相當(dāng)精簡以便實現(xiàn)一個特定的功能。這意味著相應(yīng)較少數(shù)目的存儲器訪問。存儲器訪問要求很多功率。因此,它們的減少降低了系統(tǒng)的功耗。
雖然相對示例實施例說明了本發(fā)明,但是應(yīng)該理解,可以不離開本發(fā)明的范圍進(jìn)行修改。因此,本發(fā)明不應(yīng)該認(rèn)為限制在說明的實施例上,而僅由下面的權(quán)利要求定義,這些權(quán)利要求意在覆蓋所述實施例所有的等價物。如上所述,參數(shù)存儲器4基于處理器。因此,這一類型的設(shè)備甚至可以為使用進(jìn)程(或任務(wù)或線程)處理其它類型語言而非功能語言例如C和C++的計算機(jī)提供。環(huán)境切換也例如為語言ADA提供,因此為環(huán)境切換說明的特征也可以對其它類型語言處理環(huán)境切換有效。上述類型的數(shù)據(jù)管理例如也用現(xiàn)代語言Java實現(xiàn),因此對這種語言也可用。
權(quán)利要求
1.一種處理器結(jié)構(gòu),它適于使用順序指令流操作和通過使用表或元組或簡單類型處理數(shù)據(jù)的程序語言,包括一個指令保持設(shè)備(2,3),一個存儲數(shù)據(jù)對象的數(shù)據(jù)存儲器設(shè)備(5),和執(zhí)行設(shè)備(7),其特征在于,設(shè)備(4,5,6)用于處理由捆綁引用的數(shù)據(jù)對象的引用,和包括設(shè)備(6)來根據(jù)來自指令保持設(shè)備(2,3)中的一個實際指令增量對一個數(shù)據(jù)對象的引用計數(shù)和減量對一個數(shù)據(jù)對象的引用計數(shù)。
2.根據(jù)權(quán)利要求1的處理器結(jié)構(gòu),其特征在于,設(shè)備(4)用于在處理對數(shù)據(jù)對象的引用的設(shè)備(4,5,6)中處理數(shù)據(jù)的臨時存儲;設(shè)備(4)中的存儲設(shè)備(13)用于處理數(shù)據(jù)的臨時存儲,和保持對所述臨時存儲的捆綁的注意。
3.根據(jù)權(quán)利要求2的處理器結(jié)構(gòu),其特征在于,在所述設(shè)備(4,5,6)中的數(shù)據(jù)存儲器處理器(handler)設(shè)備(6)用于處理對數(shù)據(jù)對象的引用,它在檢測到對一個對象的零引用產(chǎn)生、意味著該對象不再需要時使為該對象的存儲器槽可作為空閑存儲器槽使用。
4.根據(jù)前述權(quán)利要求中任何一個權(quán)利要求的處理器結(jié)構(gòu),其特征在于,用于處理數(shù)據(jù)的臨時存儲的設(shè)備包括一個參數(shù)存儲器設(shè)備(4),它具有保持注意對存儲的值的捆綁的設(shè)備(10,11,12),和具有為存儲所述數(shù)據(jù)值的存儲設(shè)備(13)。
5.根據(jù)權(quán)利要求4的處理器結(jié)構(gòu),其特征在于,設(shè)備(4)中為處理數(shù)據(jù)的臨時存儲的所述設(shè)備(13)存儲值和為供給參數(shù)存儲器(4)的值的類型信息,和該值作為數(shù)據(jù)對象的一部分具有對參數(shù)的捆綁,和參數(shù)存儲器(4)使用參數(shù)和使用為臨時存儲的參數(shù)在函數(shù)之間傳送值。
6.根據(jù)權(quán)利要求4或5的處理器結(jié)構(gòu),其特征在于,參數(shù)存儲器(4)在計算前用存儲的實際值代替從指令存儲器設(shè)備(2)中取出的指令中的參數(shù)引用。
7.根據(jù)權(quán)利要求4到6中任何一個權(quán)利要求的處理器結(jié)構(gòu),其特征在于,參數(shù)存儲器(4)中的設(shè)備(11)用于存儲和管理為參數(shù)的環(huán)境信息,這里環(huán)境決定哪一些參數(shù)是當(dāng)前有效的參數(shù)。
8.根據(jù)權(quán)利要求4到7中任何一個權(quán)利要求的處理器結(jié)構(gòu),其特征在于,參數(shù)存儲器(4)中的設(shè)備(10-13)用于存儲和管理為參數(shù)和環(huán)境的信息,這里使用供給參數(shù)存儲器的進(jìn)程信息決定哪一些環(huán)境和哪一些參數(shù)是當(dāng)前有效的。
9.根據(jù)權(quán)利要求4到8中任何一個權(quán)利要求的處理器結(jié)構(gòu),其特征在于,一個進(jìn)程標(biāo)識寄存器用于標(biāo)識當(dāng)前執(zhí)行的進(jìn)程,和一個環(huán)境標(biāo)識寄存器(11)用于標(biāo)識當(dāng)前執(zhí)行的環(huán)境。
10.根據(jù)權(quán)利要求4到9中任何一個權(quán)利要求的處理器結(jié)構(gòu),其特征在于,至少保持要被執(zhí)行的進(jìn)程的一個優(yōu)先級隊列中的至少頂部可用于讀,和至少下一要執(zhí)行的進(jìn)程的進(jìn)程說明符的一部分在參數(shù)存儲器設(shè)備(4)中可用于讀。
11.根據(jù)權(quán)利要求10的處理器結(jié)構(gòu),其特征在于,為建立一個進(jìn)程開關(guān)●在參數(shù)存儲器(4)中建立一個新環(huán)境,和在所述新環(huán)境中至少存儲程序計數(shù)器,●在當(dāng)前進(jìn)程的進(jìn)程說明符中存儲所述新環(huán)境值,所述進(jìn)程說明符可以存儲在數(shù)據(jù)存儲器(5)中,●恢復(fù)該新進(jìn)程的環(huán)境值,●設(shè)定該新進(jìn)程為當(dāng)前進(jìn)程,●至少恢復(fù)程序計數(shù)器。
12.根據(jù)前述權(quán)利要求中任何一個權(quán)利要求的處理器結(jié)構(gòu),其特征在于,指令只具有一種指令格式,這里每一指令包括不同數(shù)目的子指令,每一子指令依次只具有同樣的一種指令格式,包括一個第一部分和一個第二部分,第一部分決定要采取的動作,第二部分提供在該動作中要使用的值。
13.根據(jù)前述權(quán)利要求中任何一個權(quán)利要求、適于執(zhí)行功能語言的處理器結(jié)構(gòu),其特征在于一個指令集,該指令集包括為函數(shù)調(diào)用、函數(shù)返回、在函數(shù)之間傳送參數(shù)的專用指令。
14.根據(jù)權(quán)利要求13的處理器結(jié)構(gòu),其特征在于一個指令集,該指令集包括為增量和減量存儲器引用的專用指令。
15.根據(jù)前述權(quán)利要求中任何一個權(quán)利要求的處理器結(jié)構(gòu),其特征在于,它適于以功能語言寫的計算機(jī)程序的進(jìn)程部分。
全文摘要
一種處理器結(jié)構(gòu)適于以順序指令流操作和通過使用表或元組或簡單類型處理數(shù)據(jù)的程序語言。它包括一個程序保持設(shè)備(1),一個指令保持設(shè)備(2,3),一個用于存儲數(shù)據(jù)對象的數(shù)據(jù)存儲器(5),和執(zhí)行設(shè)備(7)。提供設(shè)備(4,5,6)來處理對由捆綁引用的數(shù)據(jù)對象的引用,和包括設(shè)備(6)來根據(jù)來自指令保持設(shè)備(2,3)的一個實際指令增量對一個數(shù)據(jù)對象的引用計數(shù)和減量對一個數(shù)據(jù)對象的引用計數(shù)。
文檔編號G06F9/30GK1375083SQ00813119
公開日2002年10月16日 申請日期2000年7月14日 優(yōu)先權(quán)日1999年7月21日
發(fā)明者R·特亞恩斯特倫 申請人:艾利森電話股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
海林市| 伊宁市| 洛扎县| 六安市| 和林格尔县| 荆州市| 嘉义市| 商水县| 江华| 东明县| 丰宁| 青浦区| 玉树县| 舒城县| 蓝田县| 西峡县| 和田县| 宁化县| 万州区| 石泉县| 慈溪市| 周口市| 永修县| 徐闻县| 息烽县| 玉树县| 剑川县| 环江| 台东市| 海晏县| 太谷县| 遂昌县| 祁门县| 江都市| 晋江市| 龙游县| 聊城市| 义乌市| 济源市| 德化县| 波密县|