專利名稱:一種在處理器中執(zhí)行的計(jì)算線程的暫停與解除分配的整合機(jī)制的制作方法
相關(guān)專利申請(qǐng)的交叉參考本專利申請(qǐng)是下列共有的非暫時(shí)美國專利申請(qǐng)的部分繼續(xù)申請(qǐng)(CIP),這些美國臨時(shí)專利申請(qǐng)包含在此供參考美國專利申請(qǐng)?zhí)?0/684,350(MIPS.0188-01-US),申請(qǐng)日2003年10月10日,其標(biāo)題為“確保在一多線程處理器上的程序執(zhí)行的服務(wù)品質(zhì)的機(jī)制”;以及美國專利申請(qǐng)?zhí)?0/684,348(MIPS.0189-00-US),申請(qǐng)日2003年10月10日,其標(biāo)題為“在一處理器中計(jì)算線程的暫停和解除分配的整合機(jī)制”。
上述共有的非臨時(shí)美國專利申請(qǐng),是主張以下美國臨時(shí)專利申請(qǐng)的權(quán)利,這些美國臨時(shí)專利申請(qǐng)包含在此供參考美國臨時(shí)專利申請(qǐng)No.60/499,180(MIPS.0188-00-US),申請(qǐng)日2003年8月28日,其標(biāo)題為“多線程應(yīng)用的特別擴(kuò)充”;美國臨時(shí)專利申請(qǐng)No.60/502,358(MIPS.0188-02-US),申請(qǐng)日2003年9月12日,其標(biāo)題為“對(duì)在一處理器架構(gòu)的多線程應(yīng)用的特別擴(kuò)充”;以及美國臨時(shí)專利申請(qǐng)No.60/502,359(MIPS.0188-03-US),申請(qǐng)日2003年9月12日,其標(biāo)題為“對(duì)在一處理器架構(gòu)的多線程應(yīng)用的特別擴(kuò)充”。
本專利申請(qǐng)亦是與下列非臨時(shí)美國專利專利申請(qǐng)相關(guān)并同時(shí)遞交,這些美國臨時(shí)專利申請(qǐng)包含在此供參考(MIPS.0192-00-US),申請(qǐng)日2004年8月27日,其標(biāo)題為“在一多線程的微處理器中同時(shí)指令串流的初始化的裝置、方法及指令”;(MIPS.0193-00-US),申請(qǐng)日2004年8月27日,其標(biāo)題為“虛擬處理器資源的動(dòng)態(tài)組態(tài)機(jī)制”;以及(MIPS.0194-00-US),申請(qǐng)日2004年8月27日,其標(biāo)題為“在一多線程的微處理器中多計(jì)算上下文的軟件管理的裝置、方法及指令”。
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字處理器的領(lǐng)域(例如,微處理器、數(shù)字信號(hào)處理器、微控制器等等),其中,特別是有關(guān)于涉及在一處理器當(dāng)中管理數(shù)個(gè)線程(thread)的執(zhí)行的裝置與方法。
背景技術(shù):
在數(shù)字計(jì)算的領(lǐng)域,計(jì)算能力的發(fā)展歷史包括在各方面都有持續(xù)的進(jìn)步。持續(xù)的進(jìn)步表現(xiàn)在處理器的裝置密度、影響運(yùn)算速度的線路互連的技術(shù)、容錯(cuò)能力、使用更高速的時(shí)鐘信號(hào)或者更多其它改進(jìn)。另一個(gè)影響整體計(jì)算能力的研究領(lǐng)域?yàn)槠叫刑幚恚ǘ鄠€(gè)不同的處理器的平行的運(yùn)算。
平行處理的概念包括在多個(gè)不同的處理器中共享任務(wù)的能力,但是也包括數(shù)個(gè)程序同時(shí)在一個(gè)處理器上執(zhí)行的方案。此方案一般被稱為多線程(multithreading)。
接下來將介紹多線程的概念當(dāng)一個(gè)處理器操作頻率逐漸加快,要隱藏在計(jì)算機(jī)系統(tǒng)運(yùn)算當(dāng)中固有的等待時(shí)間(latency)也變得愈困難。一個(gè)高端處理器如果在一個(gè)應(yīng)用中在其數(shù)據(jù)高速緩存中錯(cuò)失了百分之一的指令,可能導(dǎo)致大概百分的五十的時(shí)間停頓,如果它對(duì)于芯片外部RAM有五十個(gè)周期的等待時(shí)間的話。如果當(dāng)該處理器在高速緩存錯(cuò)失期間被停頓時(shí),指向一個(gè)不同應(yīng)用程序的指令可以被執(zhí)行的話,該處理器的性能可以因此被改善并且一部份或者全部存儲(chǔ)器的等待時(shí)間可被有效地隱藏。舉例來說,圖1A顯示了遇到高速緩存錯(cuò)失而停頓的單一個(gè)指令串流(stream)101。支持機(jī)器僅可一次執(zhí)行單一個(gè)線程(thread)或任務(wù)(task)。相反的,圖1B顯示了當(dāng)指令串流101停頓時(shí)可被執(zhí)行的指令串流102。在這種情況當(dāng)中,該支持機(jī)器可以同時(shí)支持兩個(gè)線程,也因此更有效地利用其資源。
更一般的說,各個(gè)單獨(dú)的計(jì)算機(jī)指令都具有特定的語法,使得不同種類的指令可以要求不同的資源去執(zhí)行期望的運(yùn)算。整數(shù)的加載并沒有完全使用到浮點(diǎn)單元的邏輯或寄存器,任何除了寄存器移位的外的運(yùn)算,皆需要使用到加載與儲(chǔ)存單元的資源。沒有一個(gè)單一指令耗費(fèi)全部處理器的資源,而且當(dāng)為了追求更高性能的設(shè)計(jì),而因此加入了更多的流水線化階段與并行計(jì)算功能單元后,會(huì)進(jìn)而降低平均指令使用全部處理器資源的比例。
多線程的發(fā)展有一大部分,是源自于當(dāng)一單一序列的程序基本上不能有效率地完全使用到處理器的全部資源時(shí),該處理器就應(yīng)該能夠共享程序執(zhí)行的多個(gè)線程當(dāng)中的資源的一部分。這種結(jié)果并不一定導(dǎo)致任何特殊的程序可被較快速地執(zhí)行,事實(shí)上,某些多線程的方案,實(shí)質(zhì)上會(huì)使降低單一線程程序執(zhí)行的性能。然而,這卻可使一群且同時(shí)的指令串流,在更短的時(shí)間和(或)使用更少的處理器中運(yùn)行。這個(gè)概念可用圖2A與圖2B來說明,其中,各自顯示了單一線程處理器210與雙線程處理器250。該處理器210支持單一線程212,其被示出利用一加載/儲(chǔ)存單元214。假設(shè)當(dāng)訪問高速緩存216時(shí),發(fā)生一個(gè)錯(cuò)失,那么該處理器210便會(huì)進(jìn)入停頓(根據(jù)圖1A所描述),直到該錯(cuò)失數(shù)據(jù)被修正。在這個(gè)過程當(dāng)中,乘法器/除法器單元218始終處于閑置狀態(tài),而且沒有被有效使用。然而,該處理器250支持兩個(gè)線程即212與262。因此,若是該線程212停頓了,處理器250仍然可同時(shí)地利用線程262且乘法器/除法器單元218因而更有效地利用了其資源(根據(jù)圖1B所描述)。
然而,在單一處理器上的多線程可提供超出提高的多任務(wù)通量的好處。捆綁多個(gè)程序線程在關(guān)鍵性的事件上,可以減低事件響應(yīng)時(shí)間,而且在原則上可在單一應(yīng)用程序中利用線程級(jí)的平行處理。
目前已經(jīng)提出多種多線程處理。其中之一為交錯(cuò)多線程,也就是時(shí)分多路復(fù)用(TDM)方案,該方案在每個(gè)發(fā)出的指令上自一線程切換至另一個(gè)線程。該方案在調(diào)度中有一定程度的“公平原則”,但是為了靜態(tài)分配多個(gè)發(fā)出位置至多個(gè)線程,一般會(huì)限制單一程序線程的性能。動(dòng)態(tài)交錯(cuò)的方式可以改良這個(gè)問題,但是實(shí)現(xiàn)起來更加復(fù)雜。
另一個(gè)多線程的方案是阻擋式(block)多線程,其從一個(gè)單一程序線程持續(xù)地發(fā)出連續(xù)的多個(gè)指令,直到某些規(guī)定的阻擋事件,例如一個(gè)高速緩存數(shù)據(jù)錯(cuò)失或者一個(gè)重放抑制,導(dǎo)致該線程被暫停而另一個(gè)線程被激活。因?yàn)樽钃跏蕉嗑€程變換線程的頻率較低,所以其實(shí)現(xiàn)方式可以被簡(jiǎn)化。在另一方面,阻擋的動(dòng)作在調(diào)度線程上比較不具有“公平原則”。如果單一個(gè)線程非常幸運(yùn)地在高速緩存中發(fā)現(xiàn)其所有的數(shù)據(jù),則其可很長(zhǎng)一段時(shí)間地壟斷整個(gè)處理器。一種結(jié)合了阻擋式與交錯(cuò)式的多線程的混合調(diào)度方案,也常被使用與研究。
仍然有另一種多線程的形式是一在超級(jí)標(biāo)量處理器上實(shí)現(xiàn)的同時(shí)(simultaneous)多線程。在同步多線程中,可同時(shí)發(fā)出來自不同線程的多個(gè)指令。以一例子來說明,一個(gè)超級(jí)標(biāo)量精簡(jiǎn)指令集計(jì)算機(jī)(RISC),每周期發(fā)出兩個(gè)指令,和一個(gè)同時(shí)多線程超級(jí)標(biāo)量流水線,從該兩個(gè)中的任一線程每周期發(fā)出至多兩個(gè)指令。那些依賴或停頓防止處理器被單個(gè)程序線程完全占用的周期可被另一線程的發(fā)出指令所填補(bǔ)。
同時(shí)多線程也因此成為一個(gè)非常有用的技術(shù),用以恢復(fù)在超級(jí)標(biāo)量流水線中的低效率。但這也不可諱言地被認(rèn)為是最復(fù)雜的多線程系統(tǒng),因?yàn)樵谝唤o定周期上多于一個(gè)以上的線程可以是有效的,會(huì)使得存儲(chǔ)器存取的保護(hù)的實(shí)現(xiàn)更加地復(fù)雜等等。另外一個(gè)值得注意的一點(diǎn),在一給定工作負(fù)載上的中央處理器(CPU)上流水線化越好,越會(huì)降低其多線程實(shí)現(xiàn)的效率的潛在效益。
多線程與多處理是非常相關(guān)的。事實(shí)上,一般認(rèn)為其中的差異只有一點(diǎn)不同也就是多處理器僅共享存儲(chǔ)器與/或線路連接性,而多線程處理器除了共享存儲(chǔ)器與/或線路連接性,還共享指令提取與發(fā)出邏輯,及其它可能有關(guān)的處理器資源。在單一多線程處理器當(dāng)中,各種的線程互相競(jìng)爭(zhēng)發(fā)出區(qū)間與其它資源,也會(huì)限定了平行處理。某些多執(zhí)行線程編程與架構(gòu)模型假定新的線程會(huì)被分配到不同的處理器,以完全平行執(zhí)行。
在本專利申請(qǐng)遞交時(shí),現(xiàn)有技術(shù)中可用的多線程解決方案有幾種不同的問題。其中之一即為實(shí)時(shí)線程的處理。典型地,實(shí)時(shí)多媒體算法在特定的處理器/數(shù)字信號(hào)處理器(DSP)上運(yùn)行,以保證服務(wù)品質(zhì)(QoS)與響應(yīng)時(shí)間,且并不包括在多線程方案中待被共享的線程的混合中,因?yàn)闊o法容易地保證實(shí)時(shí)軟件可被及時(shí)地執(zhí)行。
非常清楚的是,在該方面需要一個(gè)方案與機(jī)制,其允許一個(gè)或多個(gè)實(shí)時(shí)線程或虛擬處理器被保證在多線程處理器上指令發(fā)出區(qū)間的一特定部分,具有一特定的指令間的間隔,使得計(jì)算帶寬與響應(yīng)時(shí)間能被良好地定義。如果可用這樣的機(jī)制,則具有嚴(yán)格的服務(wù)品質(zhì)(QoS)要求的線程可被包括于此多線程混合中。另外,在此系統(tǒng)中的實(shí)時(shí)線程(例如與DSP相關(guān)的線程),可以或多或少地避免中斷,去除執(zhí)行時(shí)間變化的重要源。這種技術(shù)在接受DSP加強(qiáng)的RISC處理器與核心作為一般在消費(fèi)性多媒體應(yīng)用上使用分離的RISC與DSP核心的替代方案是關(guān)鍵的。
另一個(gè)在本專利申請(qǐng)遞交時(shí),現(xiàn)有技術(shù)的多線程方案的;另一個(gè)問題是在處理器中產(chǎn)出與消滅有效線程。為了支持相對(duì)性細(xì)質(zhì)構(gòu)造的多線程,會(huì)期望以最小的可能開銷產(chǎn)生與消滅程序執(zhí)行的平行線程,并且至少在一般的情況下不會(huì)有需要的操作系統(tǒng)的干涉。在此方面,清楚地需要的是一些種類的如FORK(派生)與JOIN(線程終止)指令。另一個(gè)存在于多線程處理器中的問題,是調(diào)度策略使一個(gè)線程持續(xù)運(yùn)行直到被另一些資源阻擋為止,以及一個(gè)沒有被任何資源阻擋的線程仍然放棄該處理器至其它的線程。在此方面清楚地需要的是有區(qū)別的PAUSE(暫停)或YIELD(產(chǎn)出)指令。再者,微處理器指令組的操作碼空間是一有價(jià)值的架構(gòu)資源,其尤其在RISC指令組中可能被限定;因此,需要的是一種結(jié)合FORK JOIN以及YIELD類型的指令的其中兩者或更多為一單一指令解碼,以節(jié)省操作碼空間的方法。
發(fā)明內(nèi)容在一方面,本發(fā)明提供一種在被配置成執(zhí)行同時(shí)多個(gè)程序線程的一微處理器上執(zhí)行的一產(chǎn)出指令。此指令包含一操作碼,指示該處理器暫停一線程的執(zhí)行。此產(chǎn)出指令是在此線程中的一指令。此指令還包含一指定一寄存器的操作數(shù)。若此寄存器包含一第一預(yù)定值,則微處理器終止此線程的執(zhí)行。若此寄存器包含一第二預(yù)定值,則微處理器無條件地重新調(diào)度此線程的執(zhí)行。若此寄存器包含在一組預(yù)定值內(nèi)的一數(shù)值,則微處理器有條件地重新調(diào)度此線程的執(zhí)行。此組預(yù)定值不包含第一及第二預(yù)定值。
在另一方面,本發(fā)明提供一微處理器,用于執(zhí)行指示該微處理器選擇性調(diào)度或終止一程序線程的執(zhí)行的一指令,該程序線程包含其指令。此微處理器包含一寄存器,用于儲(chǔ)存此指令的一操作數(shù),以及一調(diào)度器,其被連接至該寄存器。若此操作數(shù)為一第一預(yù)定值,則此調(diào)度器終止此線程的執(zhí)行,而若此操作數(shù)為一第二預(yù)定值,則此調(diào)度器調(diào)度此線程的執(zhí)行。
在又一方面,本發(fā)明提供一種接收事件信號(hào)的微處理器中選擇性暫?;蚪K止一程序線程的執(zhí)行的方法。此方法包含發(fā)布在此程序線程中的一指令。此指令規(guī)定一操作數(shù),該操作數(shù)規(guī)定一第一預(yù)定值、一第二預(yù)定值或一組預(yù)定值中的一數(shù)值,其組預(yù)定值不包含第一及第二預(yù)定值。若此操作數(shù)是在此組預(yù)定值內(nèi),則該操作數(shù)規(guī)定一或多個(gè)事件信號(hào)。本方法還包括,若此操作數(shù)是第一預(yù)定值,則終止此線程的執(zhí)行。本方法還包括,若此操作數(shù)是第二預(yù)定值,則無條件地重新調(diào)度此線程的執(zhí)行。本方法還包括,若此操作數(shù)是在該組預(yù)定值中,則暫停此線程的執(zhí)行,直到操作數(shù)所指定的事件信號(hào)中的一或多個(gè)事件信號(hào)中的至少一信號(hào)為真。
在另一方面,本發(fā)明提供一種處理系統(tǒng)。此處理系統(tǒng)包含多個(gè)信號(hào)源以及一微處理器,其被連接以接收多個(gè)信號(hào)源所產(chǎn)生的多個(gè)信號(hào)。微處理器執(zhí)行一程序線程中的一指令。若此指令的一操作數(shù)是一第一預(yù)定值,則微處理器終止此線程的執(zhí)行。否則,根據(jù)此操作數(shù)所規(guī)定的多個(gè)信號(hào)中一或多個(gè)信號(hào)的狀況,重排調(diào)度此線程的執(zhí)行。
在另一方面,本發(fā)明提供一種計(jì)算機(jī)程序產(chǎn)品,與一計(jì)算裝置一同使用。計(jì)算機(jī)程序產(chǎn)品包含一計(jì)算機(jī)可使用媒體,其具有包含在該媒體中的計(jì)算機(jī)可讀取程序代碼,用于使執(zhí)行指示一微處理器的指令的該微處理器選擇性調(diào)度或終止一程序線程的執(zhí)行,該程序線程包含此指令。計(jì)算機(jī)可讀取程序代碼包含用于提供一寄存器的第一程序代碼,此寄存器儲(chǔ)存此指令的一操作數(shù)。計(jì)算機(jī)可讀取程序代碼亦包含提供一調(diào)度器的第二程序代碼,其被連接該寄存器,若操作數(shù)是一第一預(yù)定值,則終止線程的執(zhí)行,而若操作數(shù)是一第二預(yù)定值,則調(diào)度線程的執(zhí)行。
在又一方面,本發(fā)明提供一種包含在一傳輸媒體中的一計(jì)算機(jī)數(shù)據(jù)信號(hào),其包含一計(jì)算機(jī)可讀取程序代碼,用于使執(zhí)行指令一微處理器的一指令的該微處理器選擇性調(diào)度或終止一程序線程的執(zhí)行,該程序線程包含此指令。該程序代碼包含第一程序代碼,用于提供儲(chǔ)存此指令的一操作數(shù)的一寄存器。此程序代碼還包含第二程序代碼,用于提供一調(diào)度器,該調(diào)度器與寄存器連接,若操作數(shù)是一第一預(yù)定值,則終止線程的執(zhí)行,而若操作數(shù)是一第二預(yù)定值,則調(diào)度線程的執(zhí)行。
YIELD指令的一優(yōu)勢(shì),是提供一種使一程序以非常小的開銷將該處理器的執(zhí)行讓給另一程序線程的方法,典型地以RISC方式的一單一時(shí)鐘周期,且在一般情況無需操作系統(tǒng)的介入。因此,舉例而言,一嵌入式系統(tǒng)可將中斷服務(wù)例程轉(zhuǎn)變?yōu)榘籝IELD指令的不同線程,以暫停線程,直到中斷源表明一事件,此時(shí)此線程已被重新調(diào)度,從而實(shí)現(xiàn)近乎零開銷的中斷服務(wù)。優(yōu)勢(shì)地,YIELD指令將有效暫停程序線程執(zhí)行及一程序線程的終止整合為一單一指令,從而節(jié)省了在指令組內(nèi)的珍貴的操作碼空間。最后,本YIELD指令根據(jù)一輸入操作數(shù)的值,提供一條件地中止線程的手段給其指令,使多線程碼得以更精簡(jiǎn),且更有效地執(zhí)行于一微處理器流水線中。
圖1A是一示意圖,顯示被一高速緩存數(shù)據(jù)錯(cuò)失的事件停頓的單一指令串流;圖1B是一示意圖,顯示當(dāng)該如圖1A的串流被停頓時(shí)可被執(zhí)行的一指令串流;圖2A是一示意圖,顯示一單一線程處理器;圖2B是一示意圖,顯示一雙線程處理器250;圖3是一示意圖,描述了根據(jù)本發(fā)明的一實(shí)施例中,支持一第一與第二VPE的處理器;圖4是一示意圖,描述了根據(jù)本發(fā)明的一實(shí)施例中,支持一單一VPE的處理器,該VPE進(jìn)而支持三個(gè)線程;圖5顯示了根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)FORK指令的格式;圖6顯示了根據(jù)本發(fā)明的一第一實(shí)施例中,一個(gè)YIELD指令的格式;
圖7是一表格顯示了一個(gè)用于GPRrs的十六位的限定(qualifier)屏蔽;圖8顯示了根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)MFTR指令的格式;圖9是一表格,說明了根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)MFTR指令的字段;圖10顯示了根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)MTTR指令的格式;圖11是一表格,說明了根據(jù)本發(fā)明的一實(shí)施例中,該MTTR指令的u及sel位;圖12顯示了根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)EMT指令的格式;圖13顯示了根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)DMT指令的格式;圖14顯示了根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)ECONF指令的格式;圖15是根據(jù)本發(fā)明的一實(shí)施例中,一系統(tǒng)共處理器專屬資源的表格;圖16是根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)ThreadControl寄存器的布局;圖17是根據(jù)本發(fā)明的一實(shí)施例中,定義一個(gè)ThreadControl寄存器各字段的表格;圖18是根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)ThreadStatus寄存器的布局;圖19是根據(jù)本發(fā)明的一實(shí)施例中,定義一個(gè)ThreadStatus寄存器的各字段的表格;圖20是根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)ThreadContext寄存器的布局;圖21是根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)ThreadConfig寄存器的布局;圖22是根據(jù)本發(fā)明的一實(shí)施例中,定義該ThreadConfig寄存器段的表格;圖23是根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)ThreadSchedule寄存器的布局;圖24是根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)VPESchedule寄存器的布局;圖25是根據(jù)本發(fā)明的一實(shí)施例中,一個(gè)Cnfig4寄存器的布局;圖26是根據(jù)本發(fā)明的一實(shí)施例中,定義該Cnfig4寄存器的各字段的表格;圖27是一表格,定義了線程異常所需的Cause寄存器的ExcCode值圖28是一表格,定義了ITC指示符;圖29是一表格,定義了Config3寄存器的各字段;圖30是一表格,描述了在每個(gè)VPE上下文的VPE禁止位;圖31是一表格,描述了ITC儲(chǔ)存行為圖32是一示意圖,描述了根據(jù)本發(fā)明的一實(shí)施例中的YIELD功能的操作;圖33是一示意圖,描述了根據(jù)本發(fā)明的一實(shí)施例的一個(gè)運(yùn)算系統(tǒng);圖34是一示意圖,描述了根據(jù)本發(fā)明的一實(shí)施例中,在一處理器中使用VPE和在一VPE中使用線程來實(shí)施調(diào)度;圖35是一方框圖,描述根據(jù)本發(fā)明的另一實(shí)施例,YIELD指令的格式;圖36是描述根據(jù)本發(fā)明圖35的另一實(shí)施例,執(zhí)行圖35的YIELD指令的一處理器核心的方框圖;圖37是一方框圖,描述圖36的YQMask寄存器的格式;圖38是一流程圖,描述根據(jù)本發(fā)明圖35的另一實(shí)施例中,圖36的處理器核心執(zhí)行圖35的YIELD指令的操作;圖39是一方框圖,描述根據(jù)本發(fā)明圖35的另一實(shí)施例的如圖33的處理系統(tǒng)的一處理系統(tǒng),其包含執(zhí)行一YIELD指令的圖36的處理器核心;以及圖40是一方框圖,描述根據(jù)本發(fā)明的另一實(shí)施例中,圖35的YIELD指令的rs寄存器的語義。
具體實(shí)施方式在本發(fā)明的一實(shí)施例中,一處理器架構(gòu)包括一指令集,而該指令集包含多個(gè)特征、多個(gè)功能與多個(gè)指令,能夠?qū)崿F(xiàn)在一處理器上的多線程操作。本發(fā)明并不止限于任何特定的處理器架構(gòu)與指令集,而為了例示的目的,公知的MIPS技術(shù)、指令集和處理器技術(shù)(總言之,為“MIPS技術(shù)”)被參考。并且加上本發(fā)明所詳細(xì)描述的實(shí)施例也可歸類為MIPS技術(shù)。更多有關(guān)MIPS技術(shù)的信息(包括以下所參照到的文件)可以從MIPS科技公司(MIPS ttechnology,Inc.)(位于Mountain View,California)取得,而其網(wǎng)站位于www.mips.com(公司網(wǎng)站)。
在此所示用的術(shù)語“處理器”與“數(shù)字處理器”其意義包含任何可程序化的裝置(舉例來說,微處理器、微控制器、數(shù)字信號(hào)處理器、中央處理單元、處理器核心等等),包含在硬件方面(例如,特殊應(yīng)用硅芯片、可程序編輯門陣列(FPGA)等等),在軟件方面(例如,硬件描述語言、C語言、C+語言等等)或任何其組成(或其組合)。
在此所示用的術(shù)語“線程”與“程序線程”在本文中代表相同的意義。一線程是一序列的計(jì)算機(jī)指令以及與這些指令的執(zhí)行相關(guān)聯(lián)的處理器狀態(tài)改變的相關(guān)序列。該指令的序列通常但非必要包含一或多個(gè)程序控制指令(如一分支指令)。因此,這些指令可能具有或可能不具有連續(xù)性的存儲(chǔ)器地址。該指令的序列是出自一單一程序。
概要描述在本發(fā)明的實(shí)施例中,為了描述的目的,“線程上下文”基本上是指為了描述在一處理器中的一指令串流執(zhí)行的狀態(tài)所需的一處理器狀態(tài)的集合。所謂的狀態(tài)基本上反映了處理器寄存器的內(nèi)容。舉例來說,在一個(gè)與工業(yè)規(guī)格MIPS32且/或MIPS64指令集架構(gòu)兼容的處理器(一“MIPS處理器”),線程上下文是由通用寄存器(GPRs)、高低(Hi/Lo)乘法器結(jié)果寄存器、一程序計(jì)數(shù)器(PC)的一些表示與一些相關(guān)的專屬系統(tǒng)控制狀態(tài)的寄存器組成。系統(tǒng)控制狀態(tài)被保存于MIPS處理器中通常稱為共處理器零(“CP0”)的部份,并且大部分是被系統(tǒng)控制寄存器與(當(dāng)被使用時(shí))轉(zhuǎn)換后備緩沖器(Translation Lookaside Buffer,“TLB”)所維護(hù)。相反的,“處理器上下文”是一個(gè)更大的處理器狀態(tài)集合,其包含至少一個(gè)線程上下文。再參照之前提到的MIPS處理器,此情況下的一個(gè)處理器上下文包含至少一個(gè)線程上下文(如前述)、以及CP0和描述公知的MIPS32或MIPS64專屬資源架構(gòu)(“PRA”)所需的系統(tǒng)狀態(tài)。(簡(jiǎn)單的說,PRA是一有關(guān)環(huán)境與能力的集合,而一個(gè)指令集架構(gòu)而根據(jù)此集合進(jìn)行工作。該P(yáng)RA提供操作系統(tǒng)管理處理器的各資源所需要的機(jī)制,例如,虛擬存儲(chǔ)器、高速緩存、異常與使用者上下文)。
根據(jù)本發(fā)明的一實(shí)施例,到一指令集架構(gòu)與PRA的一多線程特殊應(yīng)用擴(kuò)充(“Multithreading ASE”)允許在一給定處理器中具有兩個(gè)不同,但并不一定互相排斥的多線程能力。首先,一個(gè)單一處理器可以包含一定數(shù)目的處理器上下文,而每個(gè)皆可通過共享處理器中的某些資源以及支持一指令集架構(gòu),而作為一獨(dú)立的處理元件進(jìn)行工作。這些獨(dú)立的處理元件在此是指虛擬處理元件(“VPEs”)。對(duì)軟件而言,一個(gè)N VPE處理器看起來很像N個(gè)路徑對(duì)稱的多處理器(“SMP”)。這允許了現(xiàn)存的具SMP功能的操作系統(tǒng)可以管理VPE集合,該VPE集合顯然共享處理器的執(zhí)行單元。
圖3用一單一處理器301描述了該能力,該處理器301支持一第一VPE(“VPE0”),其包含寄存器狀態(tài)零302與系統(tǒng)共處理器狀態(tài)零304。處理器301也支持一第二VPE(“VPE1),而其包含寄存器狀態(tài)一306與系統(tǒng)共處理器狀態(tài)一308。被VPE0與VPE1所共享的處理器301的那些部份包括提取、解碼與執(zhí)行流水線,及高速緩存310。可與SMP兼容的操作系統(tǒng)320被示出在該處理器301上運(yùn)行,并支持VPE0與VPE1。軟件進(jìn)程A 322與進(jìn)程C 326被示出分別運(yùn)行于VPE0與VPE1上,如同它們?cè)趦蓚€(gè)不同的處理器上運(yùn)行。進(jìn)程B 324被排隊(duì),而可以在VPE0或VPE1上運(yùn)行。
第二個(gè)被多線程ASE所允許的能力為每個(gè)處理器或VPE可以在基本的架構(gòu)所需的單一線程上下文外,再含有某些數(shù)目的線程上下文。多線程VPEs需要明確的操作系統(tǒng)支持,并且通過該支持,它們提供一個(gè)簡(jiǎn)易、細(xì)質(zhì)多線程程序化模型,其中在典型情況下線程被產(chǎn)生與消滅,而沒有操作系統(tǒng)干預(yù),并且其中響應(yīng)外部的狀況(例如,事件等等),系統(tǒng)服務(wù)線程可被排定,具有零中斷等待時(shí)間。
圖4使用處理器401描述這第二個(gè)能力,該處理器401支持單一VPE,該VPE包含寄存器狀態(tài)402、404與406(支持三個(gè)線程422)與系統(tǒng)共處理器狀態(tài)408。與圖3不同的是,在這個(gè)例子中三個(gè)線程是在位于單一VPE上的單一應(yīng)用地址空間,該地址空間共享CP0資源(以及硬件資源)。另外,圖4也描述了一專用多線程操作系統(tǒng)420。在此例中,多線程VPE正在處理來自一個(gè)寬頻網(wǎng)絡(luò)450的數(shù)據(jù)包,而此數(shù)據(jù)包負(fù)載分布于整組的先進(jìn)先出緩沖器(FIFO)452(在多線程VPE的輸入/輸出存儲(chǔ)器空間中,各FIFO有不同的地址)??刂茟?yīng)用程序產(chǎn)生了足夠多的線程,當(dāng)上FIFO進(jìn)行服務(wù)時(shí),且放置每一線程在讀取FIFO的緊密循環(huán)中。
一個(gè)線程上下文可以是四種狀態(tài)之一。其可以是空閑(free)、激活(activated)、停止(halted)或線連(wired)。一個(gè)空閑的線程上下文不具有有效的上下文,且不能被調(diào)度為發(fā)出指令。一個(gè)激活的線程上下文可以根據(jù)實(shí)施的策略來調(diào)度,而從程序計(jì)數(shù)器提取與發(fā)出指令。一個(gè)停止的線程上下文可以具有有效的上下文,但被禁止提取與發(fā)出的指令。一個(gè)線連的線程上下文已被指定用作為陰影寄存器(ShadowRegister)儲(chǔ)存器,也就是說是被保留用于一異常處理程序的互斥使用,以避免儲(chǔ)存與恢復(fù)處理程序中的寄存器上下文的開銷。一個(gè)空閑的線程上下文不可以是激活、停止或線連的。只有激活的線程上下文可以被調(diào)度。只有空閑的線程上下文可以被分配以產(chǎn)生新的線程。
為了允許協(xié)同線程的細(xì)質(zhì)同步,一個(gè)線程間通信(“ITC”)的存儲(chǔ)空間會(huì)產(chǎn)生于虛擬存儲(chǔ)器中,并且有空的(empty)/滿的(full)位語義,允許線程在加載或儲(chǔ)存時(shí)被阻擋,直到其它線程產(chǎn)生或消耗數(shù)據(jù)。
在一般情況下,線程產(chǎn)生/消滅,與同步能力功能沒有操作系統(tǒng)干預(yù),但是他們所操控的資源可經(jīng)操作系統(tǒng)是全部虛擬化。這允許具有比在一VPE上的線程上下文有更多的虛擬線程的多線程程序的執(zhí)行,并允許線程的移動(dòng)以平衡多處理器系統(tǒng)中的負(fù)載。
以其執(zhí)行中的任何特定點(diǎn),一個(gè)線程是附著在一個(gè)特定VPE上的特定線程上下文。VPE的線程上下文集的標(biāo)記在該點(diǎn)的發(fā)生時(shí)間提供了一個(gè)唯一的標(biāo)識(shí)符。但是上下文的切換與移動(dòng)能夠使單一序列的線程的執(zhí)行以有一系列的不同的線程標(biāo)記,例如是在一系列不同的VPE。
在一特殊處理器的重置配置狀態(tài)中,線程上下文、TLB項(xiàng)目及其它資源動(dòng)態(tài)地與在同一處理器上的數(shù)個(gè)VPE結(jié)合。每一個(gè)VPE項(xiàng)目如同其在一個(gè)不相同的處理器般準(zhǔn)確地輸入其重置向量。
多線程的執(zhí)行與導(dǎo)常模型多線程ASE并沒有對(duì)平行線程與VPE的執(zhí)行強(qiáng)加任何特殊的實(shí)現(xiàn)方式或調(diào)度的模型。調(diào)度可以是循環(huán)式的、時(shí)間分隔至任一粒度、或同時(shí)的。然而,實(shí)現(xiàn)方式必須不允許一個(gè)阻擋線程去獨(dú)占任何共享的處理器資源,而使得硬件運(yùn)行陷入僵局。
在一MIPS處理器中,在一單一VPE上的多個(gè)線程執(zhí)行皆共享同一系統(tǒng)共處理器(CP0),同一TLB與同一虛擬地址空間。每一個(gè)線程有一個(gè)獨(dú)立的核心/管理者/使用者狀態(tài),用于指令解碼和存儲(chǔ)器存取。當(dāng)一個(gè)異常發(fā)生時(shí),除了執(zhí)行該異常之外,所有的線程都被停止或暫停,直到狀態(tài)字的EXL與ERL位被清除?;蛘撸贓JTAG Debug(除錯(cuò))異常的情形下,該Debug狀態(tài)被退出。該狀態(tài)字置于位于CP0中的狀態(tài)寄存器中。有關(guān)該EXL與ERL位還有EJTAG除錯(cuò)異常的細(xì)節(jié)可以從下列的兩個(gè)出版物獲得,該兩出版物可以從MIPS科技公司取得,并被結(jié)合在此作為參考MIPS32TMArchitecture for Programmers Volumn IIIThe MIPS32TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)與MIPS64TMArchitecture for Programmers Volume IIIThe MIPS64TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)。因?yàn)閳?zhí)行一個(gè)指令串流而引起的同步異常的異常處理程序,例如TLB遺失與浮點(diǎn)異常,都是由討論中的執(zhí)行該指令串流的該線程所執(zhí)行。當(dāng)一個(gè)未被屏蔽的異步異常,例如一個(gè)中斷,被提升至一個(gè)VPE時(shí),它的實(shí)行即與哪個(gè)線程執(zhí)行了該異常處理程序相關(guān)。
每一個(gè)異常都與一個(gè)線程上下文有關(guān),即使陰影寄存器集合被使用來運(yùn)行異常處理程序。這個(gè)相關(guān)的線程上下文是被異常處理程序執(zhí)行的RDPGPR與WRPGPR指令的目標(biāo)。有關(guān)RDPGPR與WRPGPR指令(用來獲取陰影寄存器)的細(xì)節(jié),皆可以從MIPS科技公司取得的兩出版物中獲得,該兩出版物被結(jié)合在此作為參考MIPS32TMArchitecture forProgrammers Volume IIThe MIPS32TMInstruction Set,Rev.2.00,MIPS科技公司(2003)與MIPS64TMArchitecture for Programmers VolumnIIIThe MIPS64TMInstruction Set,Rev.2.00,MIPS科技公司(2003)。
該多線程ASE包含了兩個(gè)異常狀況。第一個(gè)即是一線程未取得狀況,其中一個(gè)線程分配要求不能被滿足的。第二個(gè)為線程下溢狀況,其中一個(gè)線程的終止與解除分配沒有留下在一VPE上分配的線索。這兩種異常狀況都被映像至一單個(gè)新的線程異常。當(dāng)該異常發(fā)生時(shí),他們可以根據(jù)CPO寄存器位而被區(qū)分。
指令在一實(shí)施例中,多線程ASE包含七個(gè)指令。FORK與YIELD指令控制線程分配、解除分配與調(diào)度,如果被實(shí)現(xiàn)與啟動(dòng)的話,在全部的執(zhí)行模式中可獲得。MFTR與MTTR指令是系統(tǒng)共處理器(Cop0)指令,可用于管理線程狀態(tài)的特許系統(tǒng)軟件。一個(gè)新的EMT指令與一個(gè)新的DMT指令是特許Cop0指令,用來啟動(dòng)與禁止一個(gè)VPE的多線程操作。最后,一個(gè)ECONF指令是特許的Cop0指令,以退出一個(gè)特殊處理器配置狀態(tài)與重新初始化該處理器。
FORK(派生)-分配與調(diào)度一個(gè)新的線程FORK指令可以使一個(gè)空閑線程上下文被分配與啟動(dòng)。它的格式500如圖5所示。FORK指令從字段中標(biāo)識(shí)的GPRs取兩個(gè)操作值502(rs)與504(rt)。GPR rs的內(nèi)容被用作為新線程的開始提取與執(zhí)行地址。GPRrt的內(nèi)容是一個(gè)待被傳送至該新線程的GPR中的值。通過CPO的ThreadConfig寄存器的FORKTarget字段的值確定目的地GPR,其被示于圖21中,并于稍后會(huì)加以描述。新線程的核心/管理者/使用者狀態(tài)是被設(shè)定于FORK處理的線程中的狀態(tài)如果沒有空閑線程上下文可供該FORK指令使用,則會(huì)為此FORK指令產(chǎn)生一個(gè)線程異常。
YIELD(產(chǎn)出)-取消調(diào)度與有條件的解除分配(deallocation )一線程(第一實(shí)施例)YIELD指令使得當(dāng)前的線程被選擇性地取消調(diào)度。在一第一實(shí)施例中,一YIELD指令600的格式如圖6所示,而圖32中的流程圖3200描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)操作,使用圖6的YIELD指令的功能。YIELD指令3500的一第二實(shí)施例以下參照?qǐng)D35至圖40進(jìn)行描述。
舉例而言,YIELD指令600在字段602(rs)中標(biāo)識(shí)的GPR中取一單個(gè)操作值。在一實(shí)施例中使用了一個(gè)GPR,但是在替換性實(shí)施例中,其操作值可以從實(shí)質(zhì)上任何可由系統(tǒng)訪問的數(shù)據(jù)儲(chǔ)存裝置(例如,非GPR寄存器、存儲(chǔ)器等等)被儲(chǔ)存或取得。在一實(shí)施例中,GPR rs的內(nèi)容可以被認(rèn)為是發(fā)出線程應(yīng)被重新調(diào)度的情況的描述符。如果該GPR rs的內(nèi)容是零(即該操作數(shù)的值為零),如圖32的步驟3202所示,則該線程并不會(huì)被重新調(diào)度,而是會(huì)被解除分配(即終止或永久地停止更進(jìn)一步的執(zhí)行),如同步驟3204所示,還有與其相關(guān)的線程上下文儲(chǔ)存(即上述標(biāo)識(shí)出保存狀態(tài)的寄存器)通過一些其它線程所發(fā)布的隨后的FORK指令被空閑出來用于分配。如果該GPR rs的最低有效位被設(shè)定(即,rs0=1),則該線程馬上會(huì)被重新調(diào)度,如圖32的步驟3206所示,并且如果沒有其它可被執(zhí)行的線程被優(yōu)先取得,則即刻繼續(xù)執(zhí)行。在此一實(shí)施例中,該GPR rs的內(nèi)容是被視為十五位限定屏蔽,其描述在圖7的表格700中(即編碼許多狀況的一位向量)。
請(qǐng)參照表格700,GPR rs的位15至位10指示了呈現(xiàn)給處理器的硬件中斷信號(hào),位9至位8指示了處理器所產(chǎn)生的軟件中斷信號(hào),位7至位6指示了MIPS架構(gòu)中Load Linked(負(fù)載連接)與Store Conditional(存儲(chǔ)狀況)同步運(yùn)算基元,還有位5至位2指示了呈現(xiàn)給處理器的非中斷外部信號(hào)。
假設(shè)GPR rs的內(nèi)容是偶數(shù)的(even)(即位0未被設(shè)定),且GPR rs的限定屏蔽中任何其他位被設(shè)定(步驟3208),則該線程即會(huì)被暫停,直到滿足至少一對(duì)應(yīng)的狀態(tài)。如果且當(dāng)此情形發(fā)生時(shí),該線程即會(huì)被重新調(diào)度(步驟3210),并且重新開始執(zhí)行YIELD指令600之后的指令。這個(gè)啟動(dòng)并不會(huì)受CP0.Status.IMn中斷屏蔽位的影響,因此至多有被位15至10與位5至2(如圖7所示)編碼的十種外部狀況(例如,事件等等)與四個(gè)被位9至6編碼的軟件狀況(如圖7所示),在目前的實(shí)施例當(dāng)中被用來啟動(dòng)獨(dú)立的線程以響應(yīng)外部信號(hào),而在處理器不需去引起一個(gè)異常。在這個(gè)特別的例子中,有六個(gè)硬件中斷與四個(gè)非中斷信號(hào),再加上兩個(gè)軟件中斷與兩個(gè)非中斷信號(hào),及專用于總共十五種的狀況的單個(gè)專用重新調(diào)度功能(即rs0)。(該CP0.Status.iMn中斷屏蔽位是在CP0狀態(tài)寄存器中的一個(gè)八位的集合,其可被選擇性地屏蔽八個(gè)到MIPS處理器的中斷輸入。如果一個(gè)IM位被設(shè)定,則相關(guān)聯(lián)的中斷輸入就不會(huì)引起斷言時(shí)的處理器的異常事件。)在EIC的中斷模式中,IP2至IP7位編碼最高優(yōu)先權(quán)啟動(dòng)的中斷,而不是表示了一個(gè)正交指示的向量。當(dāng)處理器正在使用EIC中斷模式時(shí),在一個(gè)YIELD指令600中,與位IP2至IP7相關(guān)的GPR rs的位因此不再被使用以在一個(gè)特殊的外部事件上去重新啟動(dòng)線程調(diào)度。在EIC模式中,只有與系統(tǒng)相關(guān)連的外部事件指示(即,在本實(shí)施例中的GPR rs的位5至2)可以被使用為YIELD的限定器。EIC的中斷模式與IP2至IP7位已被更進(jìn)一步的描述于下列的出版物,它們?cè)偕衔闹幸驯恢赋霾⒔Y(jié)合進(jìn)來MIPS32TMArchitecture for Programmers Volume IIITheMIPS32TMPrivileged Resource Architecture,與MIPS64TMArchitecturefor Programmers Volume IIIThe MIPS64TMPrivileged ResourceArchitecture。
如果YIELD 600d1執(zhí)行導(dǎo)致處理器或VPE上最后分配的線程的解除分配,具有一個(gè)在CP0的ThreadStatus寄存器中的下溢指示的線程異常(示出在圖18中且在稍后會(huì)加以說明)就會(huì)在YIELD指令600上產(chǎn)生。
上述的實(shí)施例使用了YIELD指令600中GPR rs所包含的操作數(shù)作為線程調(diào)度的參數(shù)。在該情況中,這個(gè)參數(shù)被視作為正交指示的15位向量(參照?qǐng)D7,位1與15被保留因此在此實(shí)施例中只有15個(gè)編碼的狀況)。此實(shí)施例也將此參數(shù)視為一個(gè)規(guī)定的值(即,去決定是否一個(gè)給定的線程應(yīng)該被解除分配,參閱圖32的步驟3202)。然而,此參數(shù)的特性可以被改變,以適合該指令的各種不同實(shí)施例。例如,不同于只依賴最小有效位(即rs0)去決定是否一個(gè)線程可立即地重調(diào)度,該參數(shù)本身的值(例如,兩個(gè)補(bǔ)碼格式中的負(fù)1{-1}的值)可以被使用來決定一個(gè)線程是不是應(yīng)該被重調(diào)度,而無須附加的等待時(shí)間(即重新排隊(duì)用于調(diào)度)。
在該指令其他的實(shí)施例中可以視該線程調(diào)度參數(shù)為包含一個(gè)或多個(gè)多位值的字段,使得一個(gè)線程可以指定它將在出自一個(gè)大的(例如32位或更大)事件名稱空間的單個(gè)事件上產(chǎn)生。在這樣的實(shí)施例中,至少與一目標(biāo)事件有關(guān)的位可以通過對(duì)象YIELD指令600所訪問。當(dāng)然,更多的位字段都可被傳送至該指令(與更多的事件相關(guān))而成為另一期望的特定實(shí)施例。
還有更多的YIELD指令600的實(shí)施例可包括有該指令訪問的線程調(diào)度參數(shù)內(nèi)的值字段與前述位量的組合值字段的組合或其他應(yīng)用特定的變更與加強(qiáng),以(例如)滿足特定的實(shí)現(xiàn)需求。YIELD指令600的替換性實(shí)施例可以用任何已知的方法訪問如前述的一個(gè)線程調(diào)度參數(shù),例如從一個(gè)GPR(如圖6所示)或從任意其它的數(shù)據(jù)儲(chǔ)存裝置(包含存儲(chǔ)器)且作為該指令本身中的立即值。
MFTR-自線程寄存器移動(dòng)MFTR指令是一個(gè)特許的(Cop0)指令,可允許一個(gè)執(zhí)行一線程的操作系統(tǒng)訪問一個(gè)不同的線程上下文。其格式800被示于圖8。
待被訪問的線程的上下文是通過CPO的ThreadControl寄存器的AlternateThread字段的值被確定的,其顯示于圖16并且會(huì)在稍后描述。在選定的線程上下文中待被讀取的寄存器是通過字段802中標(biāo)識(shí)的rt操作數(shù)寄存器的值,還有各自位于字段804與806中的MFTR指令的u與sel位被確定,并且依據(jù)在圖9所顯示的表格900被解釋。結(jié)果值被寫入于目標(biāo)寄存器rd中,在字段808中被標(biāo)識(shí)。
MTTR-移動(dòng)到線程寄存器MTTR指令與MFTR指令相反。其為一特許Cop0指令,其將一寄存器的值從目前線程的線程上下文復(fù)制至另一線程上下文中的一個(gè)寄存器。其格式1000顯示于圖10。
待被訪問的線程的上下文是通過CP0的ThreadControl寄存器的AlternateThread字段的值被確定的,其顯示于圖16并且會(huì)在稍后描述。在選定的線程上下文中待被寫的該寄存器通過字段1002標(biāo)識(shí)的rd操作數(shù)寄存器中的值,還有各自字段1004與1006中的MTTR指令的u與sel位被確定,并且依據(jù)在圖11所顯示的表格1100被解釋(其編碼與MFTR相同)。字段1008中標(biāo)識(shí)的的寄存器rt中的值被復(fù)制于選定寄存器。
EMT-啟動(dòng)多線程EMT指令為一特許的Cop0指令,其通過設(shè)定CPO的ThreadControl(線程控制)寄存器的TE位來啟動(dòng)多線程的同時(shí)執(zhí)行,其顯示于圖16并且會(huì)在稍后描述。其格式1200顯示于圖12。包含在該EMT執(zhí)行之前的該被啟動(dòng)的線程(TE)位值的該ThreadControl寄存器的值會(huì)被傳回寄存器rt。
DMT-禁止多線程DMT指令為一特許的Cop0指令,其通過清除CPO的ThreadControl寄存器的TE位來禁止多線程的同時(shí)執(zhí)行,其顯示于圖16并且會(huì)在稍后描述。其格式1300顯示于圖13。
除了發(fā)出該DMT指令的線程之外的所有的線程都被禁止進(jìn)一步指令獲取與執(zhí)行。這與每線程(per-thread)暫停狀態(tài)無關(guān)。包含該DMT執(zhí)行的該被啟動(dòng)的線程(TE)位值的該ThreadControl寄存器的值會(huì)被傳回寄存器rt。
ECONF-結(jié)束處理器配置ECONF指令為一特許的Cop0指令,其傳送VPE配置結(jié)束的信號(hào)并啟動(dòng)多VPE的執(zhí)行。其格式1400顯示于圖14。
當(dāng)執(zhí)行一個(gè)ECONF指令時(shí),該Config3寄存器的VPC位(稍后描述)即被清除,同一寄存器的MVP位在其當(dāng)前值變成只讀,且處理器的所有VPE,包含一個(gè)正在執(zhí)行ECNOF的VPE,皆獲得一個(gè)Reset(重置)的異常。ECONF指令并不包含在Multithreading ASE(多線程ASE)的圖35-40的替換性實(shí)施例中。
特許的資源圖15的表格1500列出了與多線程ASE相關(guān)的系統(tǒng)共處理器特許的資源。除了指示的外,以下標(biāo)識(shí)的新的或是變更過的共處理器零(Coprocessor0,CP0)象常規(guī)的共處理器零(即在MIPS處理器)的系統(tǒng)控制寄存器一樣是可存取的(即寫入與讀出)。
新的特許的資源(A)ThreadControl(線程控制)寄存器(Coprocessor0 Register7,Select1)該ThreadControl寄存器是在每個(gè)VPE中被例示為系統(tǒng)共處理器的一個(gè)部分。其布局1600顯示于圖16。該ThreadControl寄存器字段可根據(jù)圖17的表格1700來定義。
(B)ThreadStatus(線程狀態(tài))寄存器(Coprocessor0 Register12,Select4)該ThreadStatus寄存器在每個(gè)線程上下文被例示。每一個(gè)線程皆有ThreadStatus其自己的備份,并且特許的代碼可以經(jīng)過MFTR與MTTR的指令來訪問其它線程的ThreadStatus。其布局1800顯示于圖18。該ThreadStatus寄存器字段在圖19的表格1900中被定義。
將一個(gè)1寫至一個(gè)激活的線程的Halted(停止)位,會(huì)使得該激活的線程停止提取指令,并且設(shè)定其內(nèi)部的重新開始PC到下一個(gè)發(fā)出的指令。將一個(gè)0寫至一個(gè)激活的線程的Halted(停止)位,會(huì)使得該線程被調(diào)度從內(nèi)部重新開始PC地址讀取并執(zhí)行。在未被激活的線程的激活位或是停止位任一中的1防止該線程通過一個(gè)FORK指令被分配和激活。
(C)ThreadContext(線程上下文)寄存器(Coprocessor0 Register4,Select1)該ThreadContext寄存器2000在每個(gè)線程上下文被例示,并且如圖20所示,具有與處理器GPR是相同的寬度。這純粹是一個(gè)軟件讀/寫寄存器,可被操作系統(tǒng)用作為線程特定的存儲(chǔ)器,例如一個(gè)線程上下文保存區(qū)域的指針。
(D)ThreadConfig(線程配置)寄存器(Coprocessor0 Register6,Select1)該ThreadConfig寄存器在每個(gè)處理器或VPE被例示。其布局2100顯示于圖21。該寄存器ThreadConfig的字段在圖22的表格2200中被定義。
寄存器ThreadConfig的字段WiredThread允許在一個(gè)VPE上可用的線程上下文集合在陰影寄存器集合與平行執(zhí)行線程之間被劃分。線程帶有少于該WireThread寄存器值的索引的線程上下文可利用作為陰影寄存器集合。
(E)ThreadSchedule(線程線程)寄存器(Coprocessor0 Register6,Select2)寄存器ThreadSchedule是任選的,但是當(dāng)被實(shí)現(xiàn)時(shí),是在每個(gè)線程被實(shí)現(xiàn)的。其布局2300顯示于圖23。調(diào)度向量(如圖示,在一實(shí)施例中為32位寬)為一個(gè)為相關(guān)線程的所要求的發(fā)布帶寬調(diào)度的描述。在此實(shí)施例中,每一個(gè)位代表了該處理器或VPE的發(fā)布帶寬的1/32,并且每一個(gè)位位置代表了在一32區(qū)間調(diào)度周期中的一相異區(qū)間。
如果在一線程的ThreadSchedule寄存器中的一位被設(shè)定,那么該線程即被保證在相關(guān)的處理器或VPE上可能的,每32個(gè)可能連續(xù)發(fā)出的一相對(duì)應(yīng)發(fā)出區(qū)間的可用性。當(dāng)在相同處理器或VPE上的其它某些線程具有一樣的ThreadSchedule位集合時(shí),在線程的ThreadSchedule寄存器的一位寫入一個(gè)1,會(huì)產(chǎn)生一個(gè)線程異常。雖然在一實(shí)施例中,寄存器ThreadSchedule的寬為32位,在用于其它的實(shí)施例中,仍然有其它的寬度可以取代(例如增大寬度或是減少寬度)。
(F)VPESchedule(VPE調(diào)度)寄存器(Coprocessor0 Register6,Select3)寄存器VPESchedule是任選的,且在每個(gè)VPE被例示。它只有當(dāng)寄存器Config3的MVP位被設(shè)定時(shí),才是可寫的(請(qǐng)參見圖29)。其格式2400顯示于圖24。
調(diào)度向量(如圖示,在一實(shí)施例中其寬度為32位)為一個(gè)用于相關(guān)VPE的所要求的發(fā)出帶寬調(diào)度的描述。在此實(shí)施例中,每一個(gè)位代表了一多VPE處理器的發(fā)出總帶寬的1/32,并且每一個(gè)位位置代表了一個(gè)32個(gè)區(qū)間調(diào)度周期中的一相異區(qū)間。
如果VPE的VPESchedule寄存器中的一位被設(shè)定,那么該線程即保證了在該處理器上可能每32個(gè)可能連續(xù)發(fā)出的一對(duì)應(yīng)發(fā)出區(qū)間的可用性。當(dāng)某些其它的VPE具有一樣的VPESchedule寄存器位集合時(shí),在VPE的VPESchedule寄存器中的一位寫入一個(gè)1,會(huì)產(chǎn)生一個(gè)線程異常。
依據(jù)處理器目前缺省線程調(diào)度策略(例如循環(huán)式等),未被任何的線程特別排定的發(fā)出區(qū)間可自由地被分配給任何可運(yùn)行的VPE/線程。
寄存器VPESchedule與ThreadSchedule創(chuàng)建了一個(gè)發(fā)布帶寬分配的架構(gòu)。寄存器VPESchedule寄存器的集合指定了對(duì)于VPE的帶寬為在一個(gè)處理器或核心的全部可取得的一部份,同時(shí)寄存器ThreadSchedule指定對(duì)于線程的帶寬為一個(gè)包含這些線程的VPE可取得的一部份。
雖然在一實(shí)施例中,寄存器VPESchedule的寬為32位,但在其它的實(shí)施例中被使用時(shí),可嘗試改變?cè)搶挾?例如增大或是減小)。
(G)Config4寄存器(Coprocessor0 Register16,Select4)寄存器Config4是對(duì)于每一個(gè)處理器被例示的。其包含了對(duì)于動(dòng)態(tài)多VPE處理器配置所需的配置信息。如果處理器并不處于一個(gè)VPE配置狀態(tài)(即該寄存器Config3的VMC位被設(shè)定),則除了M(連續(xù))字段的所有字段值與實(shí)施有關(guān),且可能不可預(yù)測(cè)的。其布局2500描述于圖25。寄存器Config4字段被定義為如圖26的表格2600中所示。在某些實(shí)施例中,有用于Config3寄存器的位VMC,其可以是一個(gè)被事先保留/未指定的位。
現(xiàn)有特許資源架構(gòu)的變更該多線程ASE修改了當(dāng)前MIPS32與MIPS64 PRA的某些元件。
(A)狀態(tài)寄存器(Status Register)狀態(tài)寄存器的CU位在多線程配置中具有一些額外的意義。設(shè)定CU位的動(dòng)作將一個(gè)共處理器上下文與和該CU位有關(guān)的線程結(jié)合的請(qǐng)求。如果一個(gè)共處理器上下文可用,則它就會(huì)與該線程結(jié)合,使該線程所發(fā)出的指令能傳向共處理器,并且該CU位會(huì)保留寫入該位的1值。如果沒有一個(gè)共處理器上下文可用,該CU位讀回為0。寫入一個(gè)0至一設(shè)定的CU位,會(huì)導(dǎo)致任何相關(guān)的共處理器被解除分配。
(B)原因寄存器(Cause Register)有一個(gè)被要求用于線程異常的新的原因寄存器ExcCode值,如圖27所示。
(C)低進(jìn)入寄存器(EntryLo Register)一個(gè)先前被保留的高速緩存屬性變成該ITC指示符,如圖28所示。
(D)配置3寄存器(Config3 Register)有新的Config3寄存器的字段被定義表示多線程ASE與多個(gè)線程上下文的可用性,如圖29的表格2900所示。
(E)E基準(zhǔn)(Ebase)Ebase寄存器的先前保留的位30變成在每個(gè)VPE上下文的一個(gè)VPE的禁止位,如圖30所示。
(F)SRSCtl先前預(yù)設(shè)的HSS字段現(xiàn)在生成為該ThreadConfig WiredThread字段的一個(gè)功能(function)。
沒有FORK的線程分配與初始化在一實(shí)施例中,一個(gè)操作系統(tǒng)產(chǎn)生一個(gè)線程“by hand(用手)”的程序如下1、執(zhí)行一個(gè)DMT,以停止其它線程的執(zhí)行或是可能的FORK指令執(zhí)行。
2、通過設(shè)定ThreadControl(線程控制)寄存器的AlternateThread(替換線程)字段至連續(xù)值,,并且用MFTR指令來讀取寄存器ThreadStatus來標(biāo)識(shí)一可用的Thread Context(線程上下文)。一個(gè)空閑韻線程沒有其ThreadStatus(線程狀態(tài))寄存器的Halted(停止)或Activated(激活)位。
3、設(shè)定該選定線程的ThreadStatus(線程狀態(tài))寄存器的Halted(停止)位,以避免其被其它線程配置。
4、執(zhí)行一個(gè)EMT指令去重新啟動(dòng)多線程。
5、使用MTTR指令并使其字段u設(shè)至1,以復(fù)制任何期望的GPR進(jìn)入選定的線程上下文。
6、使用MTTR指令并使其字段u與字段sel設(shè)為0及rt字段設(shè)為14(EPC),以將期望的開始執(zhí)行地址寫入線程內(nèi)部重開始地址寄存器中。
7、使用MTTR指令而將Halted位為零和Activated位為1的值寫至選定的寄存器ThreadStatus寄存器。
該新分配的線程然后可被調(diào)度。如果EXL或ERL在程序期間被設(shè)定,可以跳過那些執(zhí)行DMT、設(shè)定新線程的Halted位與執(zhí)行EMT的步驟,如同他們隱含地禁止多線程的執(zhí)行。
沒有YIELD的線程終止與解除分配在本發(fā)明的一實(shí)施例中,一個(gè)操作系統(tǒng)用來終止當(dāng)前的線程的程序?yàn)?、如果操作系統(tǒng)不支持一個(gè)線程下溢狀態(tài)下的一個(gè)線程異常,則使用指令MFTR來掃描該組ThreadStatus寄存器,以驗(yàn)證在處理器上有另一個(gè)可運(yùn)行的線程,相反,如果沒有,就對(duì)該程序發(fā)出錯(cuò)誤的信號(hào)。
2、寫入任何重要的GPR寄存器值至存儲(chǔ)器。
3、設(shè)定寄存器Status/ThreadStatus(狀態(tài)/線程狀態(tài))中的核心模式。
4、當(dāng)目前的線程維持在一個(gè)特許狀態(tài)時(shí),清除EXL/ERL以允許其它線程被調(diào)度。
5、使用一個(gè)標(biāo)準(zhǔn)的MTC0指令來將Halted與Activated位為零的值寫入ThreadStatus寄存器。
該正常的程序用于一線索以這種方式終止其自己。在一個(gè)特許模式中運(yùn)行的一個(gè)線程也可以使用MTTR指令來終止另一個(gè)線程,只不過,會(huì)有一個(gè)額外的問題產(chǎn)生,操作系統(tǒng)需要決定那個(gè)線程上下文應(yīng)被解除分配和在那個(gè)時(shí)間點(diǎn)該線程的計(jì)算的狀態(tài)是穩(wěn)定的。
線程間的通訊儲(chǔ)存(Ihter-Thread Communication Storage)線程間的通訊(ITC)儲(chǔ)存是一個(gè)任選的能力,其可以提供用于細(xì)質(zhì)多線程的Load-Linked/Storage-Conditional(加載-連接/存儲(chǔ)-狀況)。這個(gè)ITC對(duì)于指令集架構(gòu)是不可見的,因其通過加載與儲(chǔ)存而被操作,但是對(duì)于特許資源架構(gòu)是可見的,且它需要明顯微架構(gòu)支持。
參照虛擬存儲(chǔ)器頁,其TLB項(xiàng)目被標(biāo)記為對(duì)一個(gè)有特殊屬性的儲(chǔ)存的ITC儲(chǔ)存解決。每一個(gè)頁面映像一組1-128的64位存儲(chǔ)位置,其中每一個(gè)位置都有一個(gè)與其相關(guān)的狀態(tài)Empty/Full(空/滿)位,并且可以使用標(biāo)準(zhǔn)加載與儲(chǔ)存指令,以四種方法之一比訪問。該訪問模式是被編碼在該產(chǎn)生的虛擬地址的最小有效(且未被轉(zhuǎn)換)位種,如圖31的表格3100所示。
每一個(gè)儲(chǔ)存位置可以用C語言的結(jié)構(gòu)來描述struct{unit64 ef_sync_location;unit64 force_ef_location;unit64 bypass_location;unit64 ef_state;}ITC_location;其中,全部四個(gè)位置都參照下面存儲(chǔ)的同樣64位。同樣的Empty/Full協(xié)議在每一訪問的基礎(chǔ)上被強(qiáng)加,對(duì)該儲(chǔ)存的參考可有少于64位的訪問類型(例如,LW,LH,LB)。
Empty(空)與Full(滿)位是不相同的,因此去耦合的多項(xiàng)目數(shù)據(jù)緩沖器,例如FIFO,可以被映像至ITC存儲(chǔ)器中。
ITC存儲(chǔ)器可通過從/至通用存儲(chǔ)器復(fù)制{bypass_location,ef_state}而被,或者可以用復(fù)保留和恢復(fù)。嚴(yán)格地說,當(dāng)64位的bypass_location必須被保留時(shí),只有ef_state的最小有效位需被操作。在多項(xiàng)數(shù)據(jù)緩沖器的情況下,必須讀取每一個(gè)位置,直到Empty基于備份把所有的緩沖器都讀出。
每4K頁的位置數(shù)目與每一個(gè)VPE的ITC頁的數(shù)目都是VPE或處理器的配置參數(shù)。
ITC儲(chǔ)存的“物理地址空間”可全局跨越多處理器系統(tǒng)中的所有的VPE與處理器,以使一個(gè)線程便可以自一個(gè)其在上執(zhí)行的VPE同步到另一個(gè)不同的VPE的位置上。全局ITC儲(chǔ)存地址可以從每一個(gè)VPE的EBase寄存器的CPUNum字段導(dǎo)出。該CPUNum的10個(gè)位對(duì)應(yīng)到另外ITC儲(chǔ)存地址的10個(gè)有效位。為單處理器的應(yīng)用所設(shè)計(jì)的處理器或核心不需要輸出一個(gè)物理接口至ITC儲(chǔ)存,并且可以將其視為一個(gè)處理器內(nèi)部的資源。
VPE處理器一個(gè)核心或處理器可以實(shí)現(xiàn)多個(gè)共享資源的VPE,如同是功能性單元。每一個(gè)VPE都可以看到自己的MIPS32與MIPS64的例示和特許資源架構(gòu)。每一個(gè)都可以看到自己的寄存器文件或線程上下文陣列,并且也可看到自己的CP0系統(tǒng)共處理器和自己的TLB狀態(tài)。對(duì)于來自2-CPU高速緩存相干SMP多處理器的軟件而言,在同一個(gè)處理器上的兩個(gè)VPE是無法分辨的。
在處理器上的每一個(gè)VPE都可以看到CPO的寄存器Ebase的CPUNum字段中的一個(gè)不同值。
處理器架構(gòu)性資源,例如線程上下文和TLB儲(chǔ)存及共處理器,可以在硬件配置中與VPE結(jié)合,或者在一個(gè)支持所需配置能力的處理器中被動(dòng)態(tài)地配置。
重置與虛擬處理器配置為了能夠反向與MIPS32與MIPS64 PRA兼容,一個(gè)可配置的多線程/多VPE處理器具有在重置時(shí)相同的缺省線程/VPE設(shè)定一樣。一般的情形下都是如此,但是對(duì)于一個(gè)有單一線程上下文的單一VPE卻不一定必須是要如此做。該寄存器Config3的位MVP可以在重置時(shí)被取樣,以決定動(dòng)態(tài)的VPE配置是否是可能的。如果這項(xiàng)能力被忽略,如通過傳統(tǒng)軟件,該處理器將表現(xiàn)為用于缺省配置的每個(gè)說明書。
如果該MVP位被設(shè)定,則寄存器Config3的虛擬處理器配置VPC(虛擬處理器配置)位就可以被軟件設(shè)定。這可以使得處理器進(jìn)入一個(gè)配置狀態(tài),也就是寄存器Config4的內(nèi)容可以被讀出,以決定可用的VPE上下文、線程上下文、TLB項(xiàng)目和共處理器的數(shù)目,和變?yōu)榭蓪懙呐渲眉拇嫫鞯闹蛔x“預(yù)設(shè)”字段。有一些限定可以被強(qiáng)加于配置狀態(tài)指令串流,例如它們可以被禁止使用高速緩存或是TLB映射的存儲(chǔ)器地址。
在配置狀態(tài)中,可配置的VPE的全部數(shù)目都被編碼于該寄存器Config4的字段PVPE中。通過將其索引寫入寄存器EBase的CPUNum字段,每一個(gè)VPE都可被選擇。對(duì)于被選擇的VPE,下列的寄存器字段都可通過寫至它們而可能地被設(shè)定。
·Config1.MMU_Size·Config1.FP·Config1.MX·Config1.C2·Config3.Nthreads
·Config3.NITC_Pages·Config3.NITC_Plocs·Config3.MVP·VPESchedule并不是所有上述所提到的配置參數(shù)都需要是可配置的。舉例來說,每一個(gè)頁的ITC位置的數(shù)目可以是固定的,即使該每一個(gè)VPE的ITC頁是可配置的,或是它們兩個(gè)參數(shù)都可以被固定,浮點(diǎn)運(yùn)算單元(FPU)皆可以對(duì)于每個(gè)VPE被預(yù)先分配及硬連線。
共處理器作為離散單元被分配至VPE。該共處理器可被多線程化的程度應(yīng)經(jīng)由共處理器特定的控制與狀態(tài)寄存器被指示或被控制。
通過清除該寄存器EBase的VPI禁止位,一個(gè)VPE可以被啟動(dòng)而用于配置后的執(zhí)行。
通過發(fā)出一個(gè)ECONF指令,該配置狀態(tài)被退出。這個(gè)指令可以使得所有不被禁止的VPE取得一個(gè)重置異常,并且開始同時(shí)執(zhí)行。如果寄存器Config3的MVP位在配置期間被清除,而且通過一個(gè)ECONF指令被鎖存至零,則該VPC位就不再被設(shè)定,而且該處理器配置就會(huì)被有效的凍結(jié),直到下一個(gè)處理器重置。如果MVP保持設(shè)定,通過再次設(shè)定該VPC位,可以使一個(gè)操作系統(tǒng)再次進(jìn)入該配置模式。對(duì)于重新進(jìn)入配置模式的一運(yùn)行VPE的結(jié)果可能是不可預(yù)測(cè)的。
多線程處理器的服務(wù)品質(zhì)調(diào)度到目前為止的說明,是描述一個(gè)MIPS兼容系統(tǒng)的應(yīng)用特定擴(kuò)充,以實(shí)現(xiàn)多線程。如前面所述,所述的MIPS實(shí)現(xiàn)是示例性的,并不是限制性的。所描述的功能與機(jī)制可以應(yīng)用于除MIPS系統(tǒng)之外的其他方面。
有關(guān)寄存器ThreadSchedule(圖23)與寄存器VPESchedule(圖24)的上述討論中提出了一個(gè)問題,即用于實(shí)時(shí)和近乎實(shí)時(shí)線程的多線程中的特殊服務(wù)遇到的問題。本說明已經(jīng)盡力將此部分說明的更清楚;也更清楚的說明了以線程級(jí)服務(wù)品質(zhì)(“QoS”)解決的特殊擴(kuò)充。
背景被設(shè)計(jì)用于傳輸多媒體數(shù)據(jù)的網(wǎng)絡(luò)都會(huì)牽涉到服務(wù)品質(zhì)(“QoS”)的概念,來描述使用不同策略來處理在網(wǎng)絡(luò)中不同的數(shù)據(jù)串流的需要。以語音連接為例,其是相對(duì)的不對(duì)于帶寬有一定的要求,但是卻不能忍受幾十毫秒的等待時(shí)間。在寬帶的多媒體網(wǎng)絡(luò)中,QoS協(xié)議可以保證在時(shí)間為關(guān)鍵要素的傳輸中,能取得特別的處理且優(yōu)先權(quán)是需要的以確保及時(shí)傳輸。
產(chǎn)生以在單一芯片上結(jié)合“RISC”與“DSP”的程序執(zhí)行的主要反對(duì)理由之一,是在組合的一個(gè)多任務(wù)的環(huán)境中,要去保證DSP程序代碼的嚴(yán)格實(shí)時(shí)執(zhí)行是非常困難的。該DSP應(yīng)用可被視為具有對(duì)處理器帶寬中的“QoS”要求。
多線程與QoS有許多方式可以調(diào)度來自多線程的指令的發(fā)出。當(dāng)阻擋式的調(diào)度器在每當(dāng)一個(gè)高速緩存錯(cuò)失或其它重大停頓發(fā)生時(shí)改變線程時(shí),交錯(cuò)式的調(diào)度器可以在每個(gè)周期改變線程。以上詳細(xì)描述的多線程ASE提供了一個(gè)框架用于試圖避免對(duì)一個(gè)特殊線程調(diào)度機(jī)制或策略有任何依賴的顯然多線程化的處理器。然而,該調(diào)度策略可能有重大的影響,基于該影響,對(duì)于線程的執(zhí)行,QoS保證是可能的。
如果對(duì)于實(shí)時(shí)DSP程序代碼能夠作出QoS保證,一個(gè)DSP擴(kuò)充的RISC會(huì)變得明顯地更加有用。在該處理器上實(shí)現(xiàn)多線程,以使DSP程序代碼在不同的線程中運(yùn)行,也有可能是在不同的虛擬處理器上,并且該DSP線程的硬件調(diào)度能可被程序化地決定以提供確保得QoS,邏輯地去除對(duì)接受DSP-加強(qiáng)得RISC領(lǐng)域得關(guān)鍵障礙。
QoS線程調(diào)度算法服務(wù)品質(zhì)線程調(diào)度可以寬松地被定義為一組調(diào)度機(jī)制和策略,它們?cè)试S一編程器或系統(tǒng)體系對(duì)于一特定區(qū)間代碼的執(zhí)行時(shí)間作出置信的、預(yù)測(cè)性的陳述。一般來說,這些陳述都有“此程序代碼將在不多于Nmax且不少于Nmin周期中執(zhí)行”的形式。在許多情況下,只有Nmax數(shù)字是實(shí)際結(jié)論的數(shù)字,但是在某些應(yīng)用中,在調(diào)度之前運(yùn)行也會(huì)造成問題,所以Nmin也應(yīng)該被仔細(xì)的考慮。Nmax數(shù)字與Nmin數(shù)字之間的范圍越小則整個(gè)系統(tǒng)的行為就更能精確地被預(yù)測(cè)。
簡(jiǎn)單的優(yōu)先權(quán)方案已被建議用于提供一些水平的QoS給多線程發(fā)出調(diào)度的一個(gè)簡(jiǎn)單的模型是簡(jiǎn)單地將最大優(yōu)先權(quán)指定給單個(gè)被指定的實(shí)時(shí)線程,因此當(dāng)該線程為可運(yùn)行的,則它總被選定來發(fā)出指令。這種方式可以提供一個(gè)Nmin的最小的值,或許也可提供一個(gè)Nmax的可能的最小值用于該指定的線程,但是仍然會(huì)有一些不太好的后果。
首先,在該方案中只有單一個(gè)線程可以有任何QoS保證。該算法表示了用于在一個(gè)不同于指定的實(shí)時(shí)線程的線程中的任意程序代碼的Nmax會(huì)有效地變?yōu)榉窍拗?。其次,?dāng)用于指定的線程內(nèi)的程序代碼塊的Nmin數(shù)目被最小化的時(shí)候,則異常就必須被因子分解入該模型。如果通過該指定的線程取得這些異常,則該Nmax值就會(huì)變得更復(fù)雜,并且在某種情形下,是不可能去進(jìn)行確定。如果通過除該指定的線程之外的線程取得這些異常,則該Nmax的值就會(huì)被嚴(yán)格地用于該被指定的線程中的代碼,但是該處理器的中斷響應(yīng)時(shí)間變成非限制的。
該優(yōu)先權(quán)方案也許在某些情形下是有用的,并且在硬件的實(shí)現(xiàn)中也有實(shí)際的優(yōu)點(diǎn),但是它們?nèi)匀粵]有提供一個(gè)通用的QoS調(diào)度的解決方法。
基于保留的方案另一個(gè)更強(qiáng)大的且獨(dú)特的線程調(diào)度模型是基于保留發(fā)布區(qū)間(issueslot)。在該方案中,其硬件調(diào)度機(jī)制允許了一個(gè)或多個(gè)線程可被指定各M個(gè)連續(xù)發(fā)布區(qū)間中的N個(gè)發(fā)布區(qū)間。此方案并沒有提供用于在一個(gè)不具中斷的環(huán)境中的一段實(shí)時(shí)程序代碼片段的優(yōu)先權(quán)方案一般低的Nmin值,可是卻擁有了其它的優(yōu)點(diǎn)。
多于一個(gè)的線程可以具有保證的QoS。
即使中斷被限制于其它除了具有最高優(yōu)先權(quán)之外的線程,但中斷等待時(shí)間可被限定。這樣可以允許用于實(shí)時(shí)程序代碼區(qū)塊的Nmax中的減少。
一個(gè)保留調(diào)度的簡(jiǎn)單形式指定每第N個(gè)發(fā)布區(qū)間到一個(gè)實(shí)時(shí)線程。由于在1與2之間并沒有N的中間值,因此表示了在一個(gè)多線程環(huán)境中的實(shí)時(shí)線程可以取得最多50%的處理器的發(fā)布區(qū)間。當(dāng)一個(gè)實(shí)時(shí)任務(wù)消耗了多于50%的嵌入式處理器的帶寬時(shí),這種可以允許更有彈性的發(fā)布帶寬的指定方案是非常期望的。
具有QoS的混合式線程調(diào)度之前所述的多線程系統(tǒng)采用仔細(xì)的中性調(diào)度策略,但是還可以被擴(kuò)充以允許一個(gè)混合式調(diào)度模型。在此模型中,實(shí)時(shí)線程可以被給予線程發(fā)布區(qū)間某部份的固定的調(diào)度,并且具有由與實(shí)現(xiàn)方式相關(guān)的缺省調(diào)度方案所指定的剩余的區(qū)間。
結(jié)合線程至發(fā)布區(qū)間在一處理器中,各指令是被快速地順序地發(fā)出。在一個(gè)多線程的環(huán)境當(dāng)中,通過陳述在一個(gè)給定的固定的發(fā)布區(qū)間數(shù)目中每個(gè)線程發(fā)出的區(qū)間數(shù)目的比例,可以計(jì)算出每個(gè)線程消耗的帶寬。相反的,本發(fā)明人認(rèn)識(shí)到可以任意地聲明一固定數(shù)目的區(qū)間,并斷言一種限定該處理器以保留用于特定的線程的該固定數(shù)目中的某些數(shù)目的區(qū)間。然后可指定對(duì)于一實(shí)時(shí)線程被保證的一固定部分的帶寬。
很清楚地,對(duì)于多于一個(gè)的實(shí)時(shí)線程,可以指定成比例的區(qū)間,并且在此方案將操作的粒性通過該比例被作出的發(fā)布區(qū)間的固定數(shù)目而被限定。舉例來說,如果32個(gè)區(qū)間被選定了,則任意一個(gè)特定的線程可以被保證具有從1/32至32/32的帶寬。
可能地,用于將固定的發(fā)出帶寬指定給線程的最普通的模型是將每一個(gè)線程與一對(duì)整數(shù){N,D}相關(guān)連,該對(duì)整數(shù)形成了指定給該線索的發(fā)出時(shí)間段的一分?jǐn)?shù)的分子與分母,例如是1/2、4/5。如果該該允許的整數(shù)的范圍夠大的話,則允許對(duì)線程優(yōu)先權(quán)指定的幾乎任意地作細(xì)質(zhì)性的調(diào)變,但是如此做的話還是會(huì)有一些實(shí)質(zhì)上的缺點(diǎn)。其中一個(gè)問題,是將一個(gè)很大的配對(duì)集合,{{N0,D0},{N1,D1},…{Nn,Dn}}轉(zhuǎn)換為一發(fā)布調(diào)度的硬件邏輯并非是普通的,且導(dǎo)致多于100%的區(qū)間被指定的錯(cuò)誤情況無法非常容易的被偵測(cè)到。另一個(gè)就是,雖然此方案長(zhǎng)遠(yuǎn)的來說指定一線程被規(guī)定有N/D部分的發(fā)布區(qū)間,其不一定允許對(duì)哪些發(fā)出區(qū)間將被指定給在一較短子集碼片斷,作出任何聲明。
因此,在本發(fā)明的一實(shí)施例中,替代一整數(shù)對(duì),將一個(gè)表示有這些調(diào)度區(qū)間將被分配給該線程的位向量與每一個(gè)需要實(shí)時(shí)帶寬的QoS的各線程相關(guān)聯(lián)。在該實(shí)施例,該向量被系統(tǒng)軟件可視為前述寄存器ThreadSchedule(圖23)的內(nèi)容。雖然該ThreadSchedule寄存器包含32位寬的調(diào)度“屏蔽”,但是該屏蔽的位數(shù)在別的實(shí)施例當(dāng)中可以更大或更小。一個(gè)具有32位寬度的線程調(diào)度屏蔽允許一個(gè)線程被指定是從1/32至32/32的該處理器的帶寬,也可進(jìn)一步的對(duì)于特定的發(fā)出線程給予特定發(fā)出帶寬。假定一個(gè)32位屏蔽,一個(gè)值0xaaaaaaaa將每隔一個(gè)的區(qū)間指定給該線程。一個(gè)0x0000ffff的值也可將50%的的發(fā)布帶寬指定給該線程,但有從16個(gè)連續(xù)區(qū)間的部分的方式。指定一個(gè)0xeeeeeeee的值到線程X,并且指定一個(gè)0x01010101的值至線程Y,將每四個(gè)周期中的三個(gè)(32個(gè)中的24個(gè))給予線索X并將每八個(gè)周期中的一個(gè)(32個(gè)中的4個(gè))給予線索Y,并且留下一32周期的組中剩下的4個(gè)周期通過其它者,可能較少確定性的硬件算法被指定給其他線程。更進(jìn)一步的說,可知一個(gè)線程X可以有每四個(gè)周期中的三個(gè)周期,且該線程Y在連續(xù)指令之間不會(huì)具有超過八個(gè)周期的間隙。
在此實(shí)施例中的調(diào)度沖突可以很簡(jiǎn)單地偵測(cè)到,其中位不會(huì)被設(shè)定給多于一個(gè)線程的該寄存器ThreadSchedule中。也就是說,如果一個(gè)特定的位設(shè)定用于一個(gè)線程,那該位對(duì)于該發(fā)出屏蔽被指定給的所有其他線程就必須是零值。因此,如果有任何的沖突,都可以被輕易地偵測(cè)到。
該用于實(shí)時(shí)線程的發(fā)出邏輯是相對(duì)的簡(jiǎn)單直接每一個(gè)發(fā)布機(jī)會(huì)被相關(guān)連至一個(gè)模32索引,其會(huì)被傳送給所有已經(jīng)準(zhǔn)備的線程,并且該線程至多有一個(gè)會(huì)被指定到該相關(guān)連的發(fā)布區(qū)間。如果有一個(gè)事件觸發(fā)該區(qū)間,則該相關(guān)的線程就會(huì)發(fā)布下一個(gè)指令。如果沒有任何線程擁有該區(qū)間,則該處理器會(huì)選擇一個(gè)可運(yùn)行的非實(shí)時(shí)線程。
寄存器ThreadSchedule的實(shí)現(xiàn)如果是少于32位的話,可以減少每個(gè)線程的儲(chǔ)存與邏輯的大小,但卻會(huì)同時(shí)地減少調(diào)度的彈性。原則上,該寄存器可以擴(kuò)充至64位,或甚至被實(shí)現(xiàn)(例如在一個(gè)MIPS處理器的情形)為在MIPS3 CPO寄存器空間中以選擇值遞增的一系列寄存器,以提供更長(zhǎng)的調(diào)度向量。
免除線程的中斷服務(wù)如前所述,中斷服務(wù)可以在取得異常的線程的執(zhí)行時(shí)間中引入巨大的可變性。因此,期望使要求嚴(yán)格的QoS保證的線程能夠免除該中斷服務(wù)。這在每一個(gè)線程給予一個(gè)單一位的實(shí)施例中被實(shí)現(xiàn),其對(duì)于操作系統(tǒng)是可以看見的,用來使任何產(chǎn)生的異步異常被延遲,直到調(diào)度一個(gè)非免除的線程(例如寄存器ThreadStatus的位IXMT,請(qǐng)參考圖18與圖19)。這樣會(huì)增加中斷的等待時(shí)間,仍然到通過該寄存器ThreadSchedule的值的選擇而可限制和控制的程度。如果中斷處理程序執(zhí)行只發(fā)生在那些沒有被指定到免除實(shí)時(shí)QoS線程的發(fā)布區(qū)間期間,則該中斷服務(wù)對(duì)于該實(shí)時(shí)程序代碼的執(zhí)行時(shí)間就沒有任何第一級(jí)的影響。
對(duì)線程與虛擬處理元件的在發(fā)布區(qū)間分配之前所描述的多線程ASE描述了一個(gè)線程資源的架構(gòu)分配,其中某些數(shù)目的虛擬處理元件各自具有一些數(shù)目的線程當(dāng)每一個(gè)VPE具有CPO的實(shí)現(xiàn)與特許資源架構(gòu)(當(dāng)在一MIPS處理器上被配置)時(shí),在一VPE上運(yùn)行的操作系統(tǒng)軟件(“OS”)就不可能可以直接知道和控制在另一VPE上所要求的發(fā)布區(qū)間。因此每一VPE的發(fā)布區(qū)間的命名空間即關(guān)連到該VPE,也就是形成了一個(gè)發(fā)布區(qū)間分配的架構(gòu)。
圖34為一調(diào)度電路3400的方框圖,其描述了此線程資源的架構(gòu)分配。處理器調(diào)度器3402(即該主處理器的全部調(diào)度邏輯)經(jīng)一“區(qū)間選擇”信號(hào)3403,傳遞一個(gè)發(fā)布區(qū)間號(hào)碼至位于該主處理器中全部VPE中的全部VPESchedule(VPE調(diào)度)寄存器。信號(hào)3403對(duì)應(yīng)于該寄存器VPESchedule中的一位的位置(在本實(shí)施例中即為該三十二個(gè)位置中的一個(gè))。調(diào)度器3402重復(fù)地循環(huán)該信號(hào)3403通過這樣的位的位置,在每個(gè)發(fā)生的發(fā)布區(qū)間時(shí)移至一個(gè)增加的位置,并且當(dāng)?shù)竭_(dá)了最大有效位位置時(shí)(即在此實(shí)施例中是第三十一位)再重置到最小有效位位置(即零)。
參照?qǐng)D34,以此圖為例,位的位置1(即“區(qū)間1”)是經(jīng)由信號(hào)3403傳遞至該主處理器內(nèi)全部的寄存器VPESchedule,即寄存器3414和3416。任何具有對(duì)應(yīng)位“設(shè)置”(即保持一邏輯1)的寄存器VPESchedule將此情況通知給具有“VPE發(fā)布請(qǐng)求”信號(hào)的該處理器調(diào)度器。作出響應(yīng),該調(diào)度器就會(huì)用一個(gè)“VPE發(fā)布允許”的信號(hào)來允許該VPE使用目前的發(fā)布區(qū)間。再參照?qǐng)D34,(VPE0中的)寄存器VPESchedule 3414有一個(gè)設(shè)定的位的位置1,而因此發(fā)出了一個(gè)VPE發(fā)布要求信號(hào)3415至該處理器調(diào)度器3402,該處理器調(diào)度器3402以VPE發(fā)布允許信號(hào)3405表示回應(yīng)。
當(dāng)一個(gè)VPE被允許一發(fā)布時(shí),在VPE級(jí)上采用相類似的邏輯。再參照?qǐng)D34,VPE調(diào)度器3412(即VPE0的調(diào)度邏輯)響應(yīng)于該信號(hào)3405,經(jīng)由區(qū)間選擇信號(hào)3405提供了一個(gè)發(fā)布區(qū)間號(hào)碼給在該VPE內(nèi)的全部ThreadSchedule寄存器。這些寄存器ThreadSchedule每一個(gè)都關(guān)連至一個(gè)被該相關(guān)的VPE所支持的線程。信號(hào)3413對(duì)應(yīng)于該寄存器ThreadSchedule中的一個(gè)位位置(在本實(shí)施例中可以是三十二個(gè)位置中的一個(gè))。調(diào)度器3412重復(fù)地循環(huán)該信號(hào)3413通過這些位置,在每個(gè)發(fā)布區(qū)間發(fā)生是提高該位置,并且當(dāng)?shù)竭_(dá)了最大有效位位置后(在此較佳實(shí)施例中是第三十一位),再重置到最小有效位位置(即零)。該區(qū)間號(hào)碼與在該VPESchedule級(jí)所使用的區(qū)間號(hào)碼無關(guān)。
請(qǐng)參照?qǐng)D34并以其為例,位位置0(即“區(qū)間0”)是經(jīng)由信號(hào)3413傳輸至在該目標(biāo)VPE內(nèi)的全部寄存器ThreadSchedule,也就是寄存器3418與3420。任何在其寄存器ThreadSchedule的選定位置有一設(shè)定位的線程向該VPE調(diào)度器指出該情況,且表示該線程被允許使用目前的區(qū)間。參照?qǐng)D34,(線程0的)寄存器ThreadSchedule3418具有設(shè)定的位位置0,并且也因此傳送線程發(fā)布要求信號(hào)3419至該VPE調(diào)度器3412,而該VPE調(diào)度器3412以一個(gè)線程發(fā)布允許信號(hào)3417作為回應(yīng)(所以允許線程0可以使用目前的發(fā)布區(qū)間)。在沒有VPE調(diào)度器位被設(shè)定用于被指示的區(qū)間,或是沒有ThreadSchedule位被設(shè)定用于被指示的區(qū)間的周期上,則該處理器或是VPE調(diào)度器就會(huì)根據(jù)一些其它缺省調(diào)度算法來允許下一個(gè)發(fā)布。
根據(jù)上述,在一實(shí)施例當(dāng)中,每一個(gè)VPE,以圖34的VPE0(3406)與VPE1(3404)為例,都被指定一個(gè)寄存器VPESchedule(其格式顯示于圖24中),其允許某些區(qū)間,這些空間以其寄存器內(nèi)容的長(zhǎng)度的模數(shù)來計(jì)算,可以被確定地指定到該VPE。圖34的寄存器VPESchedule為VPE0的寄存器3414與VPE1的寄存器3416。其它沒有被指定到任何VPE的發(fā)布區(qū)間通過實(shí)現(xiàn)特定分配策略被指定。
另外根據(jù)前面所描述,被指定給一個(gè)VPE中的線程的區(qū)間是從給予該VPE的分配被指定的。例如,如果一個(gè)處理器有兩個(gè)配置的VPE,如圖34所示,一個(gè)VPE具有包含0xaaaaaaaa的值的寄存器VPESchedule,且另一個(gè)VPE具有包含0x55555555的寄存器VPESchedule,則該發(fā)布區(qū)間就會(huì)在這兩個(gè)VPE之間被交替。如果在這些VPE其中之一的一線程有一個(gè)包含0x55555555的寄存器ThreadSchedule,則其會(huì)取得包含它的VPE的每隔一個(gè)的發(fā)布區(qū)間,或者是說在整個(gè)處理器的每隔三個(gè)的發(fā)布區(qū)間。
因此,該與每一個(gè)VPE相關(guān)的寄存器VPESchedule的值決定了哪些正在處理的區(qū)間會(huì)分配給各VPE。特定的線程會(huì)被指定到每一個(gè)VPE,例如是顯示在VPE0中的線程0與線程1。其它沒有顯示的線程也類似地被指定給VPE1。有與每個(gè)線程相關(guān)連的寄存器ThreadSchedule,例如用于線程0的寄存器3418與用于線程1的寄存器3420。該寄存器ThreadSchedule的值決定了被指定到一個(gè)VPE的每個(gè)線程的正在處理的區(qū)間的分配。
調(diào)度器3402與3412可以用簡(jiǎn)單的組合邏輯來構(gòu)成,以實(shí)現(xiàn)上述功能,并且建構(gòu)這些調(diào)度器,通過之前的描述當(dāng)中并不需要復(fù)雜的實(shí)驗(yàn)就能夠由本領(lǐng)域的熟練技術(shù)人員來實(shí)現(xiàn)。例如可使用一些已知方法,例如是用組合邏輯、可編程邏輯、軟件等等來構(gòu)成以實(shí)現(xiàn)所需要的功能。圖33描述了用一個(gè)通用形式的計(jì)算機(jī)系統(tǒng)3300,本發(fā)明的許多實(shí)施例可以通過該計(jì)算機(jī)系統(tǒng)來實(shí)施。該系統(tǒng)包含了一個(gè)處理器3302,其配置有所需的解碼與執(zhí)行邏輯(這對(duì)本領(lǐng)域的熟練技術(shù)人員而言是顯見的),以支持一個(gè)或多個(gè)上述所提過的指令(即FORK、YIELD、MFTR、MTTR、EMT、DMT與ECONF)。在一實(shí)施例當(dāng)中,核心3302還包括了如圖34所顯示的調(diào)度電路3400,并且也代表了如上述的“主處理器”。系統(tǒng)3300還包括了一個(gè)系統(tǒng)接口控制器3304,其可以雙向地與該處理器溝通;還有可被該系統(tǒng)接口控制器所訪問的隨機(jī)存取存儲(chǔ)器(RAM)3316與只讀存儲(chǔ)器(ROM)3314;更有三個(gè)輸入/輸出裝置3306、3308與3310,其由一個(gè)總線3312與該系統(tǒng)接口控制器通信。雖然該裝置的應(yīng)用與程序代碼都已經(jīng)在這里被詳細(xì)描述,該系統(tǒng)3300仍可以作為一個(gè)多線程系統(tǒng)進(jìn)行工作。顯然本領(lǐng)域的熟練技術(shù)人員可以對(duì)圖33的普通形式作出許多修改。舉例來說,該總線3312可以有許多的形式來實(shí)現(xiàn),并且在某些實(shí)施例當(dāng)中可以是單片總線。同樣的該輸入/輸出裝置的數(shù)目也只是示例性的,實(shí)質(zhì)上是可以在不同的系統(tǒng)上有不同的數(shù)目。更進(jìn)一步言,雖然在圖中只有元件3306發(fā)出了一個(gè)中斷要求,很明顯地其它的裝置也可以發(fā)出中斷要求。
更進(jìn)一步的改善到目前為止,所描述的實(shí)施例用于32位的寄存器ThreadSchedule與VPESchedule,并不允許完全奇數(shù)分?jǐn)?shù)的帶寬的分配。期望只分配三分的一的所有發(fā)布區(qū)間至一個(gè)給定的線程的編程器不得不接近10/32或11/32。在一個(gè)實(shí)施例中,一個(gè)更進(jìn)一步的可程序屏蔽或長(zhǎng)度寄存器允許編程器去規(guī)定位于寄存器ThreadSchedule和(或)寄存器VPESchedule中的位的一個(gè)子集重新開始該序列前由該發(fā)布邏輯所使用。在所提出的例子當(dāng)中,該編程器僅規(guī)定了30個(gè)位是有效的,并且以0x24924924來編程適當(dāng)?shù)募拇嫫鱒PESchedule及/或寄存器ThreadSchedule。YIELD(產(chǎn)出)—取消調(diào)度以及有條件地解除分配一線程(第二實(shí)施例)參考圖35,一方框圖顯示本發(fā)明另一實(shí)施例中YIELD指令3500的格式。圖35的YIELD指令3500類似于圖6的指令600;然而,圖35的YIELD指令3500有兩個(gè)不同之處。第一,rs字段3502所規(guī)定的在寄存器中所儲(chǔ)存的值的含義有些不同,如下述。第二,圖35的YIELD指令3500亦包含一第二操作數(shù)字段rd 3504。在圖35的實(shí)施例中,rd操作數(shù)字段3504包含YIELD指令3500的位11到15。rd操作數(shù)字段3504規(guī)定了一目的地寄存器(如6PR),其接收YIELD指令3500完成時(shí)的一結(jié)果值,如下述。
參考圖36,顯示本發(fā)明圖35的另一實(shí)施例中,執(zhí)行YIELD指令3500的一處理器核心3302的方框圖。圖36的處理器核心3302類似于圖33的系統(tǒng)3300的處理器核心3302。處理器核心3302包含圖34的一調(diào)度器3400。處理器核心3302亦包含由圖35的rs字段3502所規(guī)定的一寄存器rs 3602、由圖35的rd字段3504所規(guī)定的一寄存器rd 3604、一寄存器YQMask 3606、一三十一個(gè)二輸入與門單元3608以及控制邏輯3612。
處理器核心3302接收三十一個(gè)YIELD限定(qualifier)(YQ)輸入3614,以YQ0到Y(jié)Q30表示。YQ輸入3614可接收處理器核心3302以外的電路所產(chǎn)生的信號(hào),其包含但不限于I/O裝置(例如圖33的I/O裝置3306)所產(chǎn)生的中斷信號(hào)。YQ輸入3614亦接收處理器核心3302內(nèi)部所產(chǎn)生的信號(hào),其包含但不限于軟件中斷信號(hào)以及高速緩存遺失信號(hào)。再者,YQ輸入3614可接收處理器核心3302外部及內(nèi)部所產(chǎn)生的信號(hào)的結(jié)合。在一實(shí)施例中,一信號(hào)源可與一YQ輸入3614及處理器核心3302的一中斷輸入兩者連接。在另一實(shí)施例中,一或多個(gè)YQ輸入3614可能不與一信號(hào)源連接,而是與適當(dāng)?shù)囊贿壿?或0值連接。
參考圖37,一方框圖顯示圖36的寄存器YQMask 3606的格式。寄存器YQMask 3606是一三十二位寄存器。位31為零。位0至30包含一屏蔽字段3702。屏蔽字段3702是可由軟件(例如操作系統(tǒng))編程的一位向量,其規(guī)定哪一個(gè)YQ輸入3614可用作為重新調(diào)度發(fā)布YIELD指令3500的線程的狀況。具體而言,若一YIELD指令3500規(guī)定在寄存器YQMask 3606中沒有規(guī)定的一YQ輸入3614,則處理器核心3302產(chǎn)生一異常,如下述。在一實(shí)施例中,寄存器YQMask 3606是逐VPE被定義的。
參考圖36,每一與門3608在其一輸入上接收一相對(duì)應(yīng)的YQ輸入3614。每一與門3608在其的其它輸入上接收儲(chǔ)存于寄存器YQMask 3606中三十一位向量中的一對(duì)應(yīng)的位。與門3608的三十一個(gè)輸出位被提供作為一位向量以在YIELD指令3500完成時(shí),儲(chǔ)存于rd寄存器3604中。寄存器rd 3604結(jié)果值在體系上被定義具有與YQ輸入3614相同的字節(jié)組織及位置,如圖37所示。
寄存器rs 3602儲(chǔ)存應(yīng)重新調(diào)度發(fā)布YIELD指令3500的線程的情況的描述符,已如前述。更具體而言,若其包含一正值,則寄存器rs 3602會(huì)規(guī)定YQ輸入3614的一位向量。當(dāng)在rs 3602位向量中規(guī)定的YQ輸入3614之一為真時(shí),處理器核心3302會(huì)重新調(diào)度該線程。
控制邏輯3612接收YQ輸入3614、寄存器YQMask 3606的內(nèi)容以及寄存器rs 3602的內(nèi)容??刂七壿?612可包含但不限于結(jié)合型或序列型邏輯、可編程邏輯、軟件及其類似者,被配置以執(zhí)行在此所描述的功能??刂七壿?612產(chǎn)生一異常信號(hào)3622、一終止線程信號(hào)3624、一暫停線程信號(hào)3626以及一重調(diào)度線程信號(hào)3628,所有這些信號(hào)被提供給調(diào)度器3400。在一實(shí)施例中,控制邏輯3612及調(diào)度器3400可被整合為一。
異常信號(hào)3622表示YIELD指令3500已產(chǎn)生一異常。在一實(shí)施例中,若寄存器rs 3602位向量值規(guī)定一YQ輸入3614,其在寄存器YQMask 3606中的對(duì)應(yīng)位是空白(clear),則YIELD指令3500產(chǎn)生一異常。在一實(shí)施例中,若YIELD指令3500規(guī)定線程將被終止(即通過一零寄存器rs3602值),但發(fā)布YIELD指令3500的線程不是一動(dòng)態(tài)可分配的線程(即線程是一線連的線程),則YIELD指令3500產(chǎn)生一異常。在一實(shí)施例中,若YIELD指令3500規(guī)定該線程將被終止(即經(jīng)過一零寄存器rs 3602值),但沒有其它線程可供重新調(diào)度,則YIELD指令3500產(chǎn)生一異常。
終止信號(hào)3624表示發(fā)布YIELD指令3500的線程應(yīng)被終止或解除分配。處理器核心3302是通過停止從線程獲取及發(fā)布指令,以終止或解除分配一線程。再者,處理器核心3302會(huì)釋放先前分配用于該線程執(zhí)行的硬件狀態(tài)或資源,即線程上下文,其中該線程被釋放的硬件狀態(tài)可供另一線索分配。在一實(shí)施例中,硬件資源可包含但不限于一程序計(jì)數(shù)器寄存器、一組通用寄存器、乘法結(jié)果寄存器及/或一或多個(gè)特許系統(tǒng)共處理器資源,包含但不限于圖15中所示的寄存器的某些部分。
暫停信號(hào)3626表示發(fā)布YIELD指令3500的線程將被暫?;蜃钃?。處理器核心3302通過停止獲取及發(fā)布來自該線程的指令,來暫?;蜃钃跻痪€程。
重新調(diào)度信號(hào)3628表示發(fā)布YIELD指令的線程將被重新調(diào)度。處理器核心3302根據(jù)線程調(diào)度策略,通過指定可供執(zhí)行的線程,來重新調(diào)度一線程。意即,處理器核心3302將該線程加入目前準(zhǔn)備用于執(zhí)行的線程清單中,使得當(dāng)調(diào)度器3400如此規(guī)定時(shí),處理器核心3302將開始從線程的程序計(jì)數(shù)器獲取并發(fā)布指令。
參考圖38,一流程圖顯示根據(jù)本發(fā)明的圖36的處理器核心3302的操作,以執(zhí)行圖35的另一實(shí)施例的YIELD指令3500。流程開始于決定方塊3802。
在決定方塊3802,圖36的控制邏輯3612檢查寄存器rs 3602,以決定其數(shù)值是否為零。若是,則流程進(jìn)行到方塊3804;否則,流程進(jìn)行到?jīng)Q定方塊3806。
在方塊3804,控制邏輯3612在圖36的終止信號(hào)3624產(chǎn)生一真值,導(dǎo)致該線程被終止。意即,不重調(diào)度此線程,該線程的上下文被解除分配。并釋放用于由隨后FORK指令300進(jìn)行分配。在一實(shí)施例中,若YIELD指令3500導(dǎo)致該線程被終止,且沒有其它的線程可供調(diào)度,則處理器核心3302會(huì)產(chǎn)生一異常。在一實(shí)施例中,若處理器核心3302終止該線程,則無數(shù)值返回到寄存器rd 3604。流程在方塊3804結(jié)束。
在決定方塊3806,控制邏輯3612檢查寄存器rs 3602,以決定其數(shù)值是否為負(fù)一(-1)。若是,則流程進(jìn)行至方塊3818;否則,流程進(jìn)行到方塊3808。
在方塊3808,控制邏輯3612將儲(chǔ)存于寄存器rs 3602的位向量與儲(chǔ)存于寄存器YQMask 3606的位向量作比較。在一實(shí)施例中,除了寄存器rs-1以外的rs寄存器3602的負(fù)值會(huì)被保留;因此,在方塊3808,已知儲(chǔ)存于寄存器rs 3602的數(shù)值是正值。流程進(jìn)行到?jīng)Q定方塊3812。
在決定方塊3812,控制邏輯3612決定設(shè)定于寄存器rs 3602的位0到30的任何一位,是否在寄存器YQMask 3606中具有一對(duì)應(yīng)位是空值。若是,則流程進(jìn)行至方塊3814;否則,流程進(jìn)行至決定方塊3816。
在方塊3814,控制邏輯3612在異常信號(hào)3622上產(chǎn)生一真值,以表示線程規(guī)定一無效YQ輸入3614。流程在方塊3814結(jié)束。
在決定方塊3816,控制邏輯3612檢查YQ輸入3614,以決定寄存器rs 3602上的一組位所規(guī)定的所有YQ輸入3614是否為假。若是,則流程回到?jīng)Q定方塊3816,控制邏輯3612繼續(xù)在暫停信號(hào)3626上產(chǎn)生一真值,以使線程維持暫停狀態(tài),直到寄存器rs 3602中的一組位所規(guī)定的YQ輸入3614之一為真。否則,流程進(jìn)行到方塊3818。
在方塊3818,控制邏輯3612在圖36的重新調(diào)度信號(hào)3628上產(chǎn)生一真值,導(dǎo)致調(diào)度器3400重新調(diào)度該線程。意即,該線程在下一個(gè)機(jī)會(huì)有資格進(jìn)行調(diào)度,但會(huì)要求調(diào)度器3400并放棄用于其他線程的處理器核心3302,根據(jù)調(diào)度器3400的調(diào)度策略,該其它線程應(yīng)首先執(zhí)行。流程進(jìn)行至方塊3822。
在方塊3822,處理器核心3302將由寄存器YQMask 3606值屏蔽的YQ輸入3614的信號(hào)值(即圖36的與門的輸出),儲(chǔ)存在寄存器rd 3604。在一實(shí)施例中,在處理器核心3302重新試YIELD指令3500的時(shí)候,YQ輸入3614信號(hào)值被取樣。流程在方塊3822結(jié)束。
在一實(shí)施例中,處理器核心3302不在包含YIELD指令3500的線程中發(fā)布指令,直到在方塊3818重新調(diào)度線程后,調(diào)度器3400開始執(zhí)行其線程為止。
雖然圖35-40描述一實(shí)施例,其中對(duì)YIELD指令3500的輸入操作數(shù)是提供于一通用寄存器(即寄存器rs 3602),但在其它實(shí)施例中,可通過其它方式提供輸入操作數(shù),例如通過一存儲(chǔ)器或通過一非通用寄存器。舉例而言,雖然實(shí)施例已描述處理器3302是一基于寄存器的處理器,但其它實(shí)施例亦可使用一基于堆棧的處理器,例如被配置以有效地執(zhí)行Java虛擬機(jī)器碼的處理器。在這樣的實(shí)施例中,YIELD指令3500的輸入操作數(shù)可規(guī)定于存儲(chǔ)器中的操作數(shù)棧,以取代在寄存器中。舉例而言,每一線程上下文可包含一棧指針寄存器,YIELD指令3500的一字段可將與堆棧指針寄存器相關(guān)聯(lián)的YIELD輸入操作數(shù)的一偏移規(guī)定在堆棧存儲(chǔ)器中,以取代規(guī)定處理器的暫存空間中的一寄存器。類似地YIELD指令3500返回值可返回給一操作數(shù)棧,以取代返回給一寄存器。
如前述,本發(fā)明的YIELD指令3500有利地提供用于根據(jù)rs 3602輸入操作數(shù)的數(shù)值,有條件地終止線程的方法。在一平行或多線程的計(jì)算中,執(zhí)行一線程的終止條件可在運(yùn)行時(shí)間被計(jì)算。舉例而言,一回路(loop)可測(cè)試欲滿足的一組條件,并根據(jù)此測(cè)試,選擇性地終止此回路。目前YIELD指令3500允許線程執(zhí)行在寄存器rs 3602中產(chǎn)生零或負(fù)一的值的計(jì)算接著線程執(zhí)行一YIELD指令3500在寄存器rs 3602值上,以終止(數(shù)值為零)或繼續(xù)(數(shù)值為負(fù)一),并分支回到回路的頂部。雖然以附加的比較及分支指令亦可達(dá)到相類似效果,但基于當(dāng)前狀況值的YIELD指令3500使多線程碼更為精簡(jiǎn),并更為有效地在微處理器100的流水線中執(zhí)行。
如前述,通過程序化寄存器YQMask 3606,并以一特定方式使用寄存器rd 3604返回值,一程序可執(zhí)行一阻擋YIELD指令3500的操作兩個(gè)潛在有用的仿真。
首先,即使待連接到Y(jié)Q輸入3614的信號(hào)的硬件來源并不存在,但是一操作系統(tǒng)仍可仿真在一特定YQ輸入3614上阻擋的YIELD指令3500的操作,而不用改變應(yīng)用程序。在開發(fā)硬件信號(hào)源或在原型開發(fā)期間,此仿真對(duì)測(cè)試應(yīng)用程序是有用的。操作系統(tǒng)可編程寄存器YQMask 3606,以清除對(duì)應(yīng)不存在的YQ輸入3614的位使得在寄存器3602中具有對(duì)應(yīng)位的一YIELD rd,rs 3500導(dǎo)致一異常。響應(yīng)此異常,操作系統(tǒng)會(huì)暫停此線程,直到適合仿真「虛擬」YQ輸入3614為真。在此時(shí)刻,操作系統(tǒng)會(huì)將YIELD指令3500的rd字段3504解碼,以決定哪一寄存器被選為寄存器rd 3604、寫入一適當(dāng)?shù)闹抵良拇嫫鱮d 3604、推進(jìn)線程的程序計(jì)數(shù)器至緊接在YIELD指令3500之后的指令、并重新開始線程的執(zhí)行。對(duì)應(yīng)用程序而言,看起來YIELD指令3500好象被阻擋、等待、并重新調(diào)度,以響應(yīng)規(guī)定的YQ輸入6314上的一真值。再者,當(dāng)從一處理器核心3302將線程移到另一個(gè)處理器核心(例如在多個(gè)處理器核心3302之間執(zhí)行負(fù)載平衡)時(shí),操作系統(tǒng)可使用寄存器YQMask 3606以確保程序作業(yè)。
第二,通過阻擋一YIELD指令3500的執(zhí)行,直到寄存器rs 3602所規(guī)定的一組YQ輸入3614為真值,一應(yīng)用程序可清楚地在軟件中仿真處理器核心3302在硬件中執(zhí)行的作業(yè)。軟件仿真是類似對(duì)于一中斷的程序輪詢(polling),而非以允許硬件移轉(zhuǎn)執(zhí)行至中斷服務(wù)例程來響應(yīng)一中斷請(qǐng)求。在正常情況下(即非仿真的情況),假設(shè)寄存器YQMask 3606具有一或多個(gè)位及一YIELD rd,rs 3500會(huì)在rs寄存器3602中的對(duì)應(yīng)位被設(shè)定時(shí)被執(zhí)行。處理器核心3302將會(huì)暫停發(fā)布YIELD指令3500的線程,直到所規(guī)定的YQ輸入3614之一是真。為了仿真此作業(yè),一程序儲(chǔ)存一位向量在寄存器YQMask 3606,規(guī)定所討論的YQ輸入3614組。此程序發(fā)布一YIELD rd,其中寄存器rs 3602的數(shù)值是-1的rs3500導(dǎo)致線程被重新調(diào)度而不被阻擋。當(dāng)完成YIELD指令3500時(shí),寄存器rd 3604中的返回值將會(huì)包含規(guī)定于寄存器YQMask 3606中的YQ輸入3614信號(hào)值。應(yīng)用程序接著測(cè)試返回值,若為零,則環(huán)路回到Y(jié)IELD指令3500,直到返回值不為零。因此,規(guī)定一寄存器rs 3602值為-1的YIELD指令3500,會(huì)成為輪詢或取樣原本處理器核心3302硬件會(huì)使用的YQ輸入3614,以阻擋發(fā)布YIELD指令3500的線程的執(zhí)行的方法。需要知道的是程序線程的執(zhí)行仍會(huì)根據(jù)所規(guī)定的實(shí)際YQ輸入3614而受到控制;然而,線程的硬件阻擋會(huì)由程序本身,而非處理器核心3302進(jìn)行仿真。
參考圖39,一方框圖顯示一處理系統(tǒng)3300(例如圖33的處理系統(tǒng)3300),其包含圖36的處理器核心3302,用于根據(jù)本發(fā)明的圖35的另一實(shí)施例執(zhí)行一YIELD指令3500。系統(tǒng)3300包含信號(hào)源3908,其產(chǎn)生信號(hào)3912,例如但不限于圖33的I/O裝置3306所產(chǎn)生的中斷請(qǐng)求信號(hào)。
系統(tǒng)3300還包含一YQ輸入管理單元3902。YQ輸入管理單元3902包含31個(gè)YQ映像寄存器3906,控制對(duì)應(yīng)的多路復(fù)用器3904。圖39的實(shí)施例顯示三個(gè)YQ映像寄存器3906,標(biāo)示為YQ映像寄存器03906、YQ映像寄存器1 3906以及YQ映像寄存器30 3906,其對(duì)應(yīng)的多路復(fù)用器3904輸出被分別與YQ輸入0 3614、YQ輸入1 3614以及YQ輸入30 3614連接。每一多路復(fù)用器3904接收來自信號(hào)源3908的所有信號(hào)3912,并根據(jù)其對(duì)應(yīng)的YQ映像寄存器3906所提供的一選擇輸入,選擇信號(hào)3912之一提供給其對(duì)應(yīng)的YQ輸入3614。在一實(shí)施例中,YQ映像寄存器3906通過在處理器核心3302上執(zhí)行的一程序是可編程的。在一實(shí)施例中,YQ輸入管理單元3902被包含在處理器核心3302中,而非在處理器核心3302的外部。在另一實(shí)施例中,YQ輸入管理單元3902被包含在處理器核心3302的一共處理器中。
參考圖40,一方框圖顯示根據(jù)本發(fā)明的圖35的另一實(shí)施例的一替換實(shí)施例中,圖35的YIELD指令3500的rs字段3502中所規(guī)定的寄存器rs 3602的語義。圖40的實(shí)施例是適用于一處理器核心3302中,該處理器核心3302僅接收四個(gè)圖36的YQ輸入3614,而非31個(gè)。此四個(gè)YQ輸入3614是根據(jù)被編程到類似圖39的YQ輸入管理單元之一YQ輸入管理單元3902中的數(shù)值而被選擇。在一實(shí)施例中,YQ輸入管理單元3902被包含在處理器核心3302的一共處理器中。在一實(shí)施例中,每一線程上下文包含一YQ輸入管理單元3902。
寄存器rs 3602是分為八個(gè)四位的字段。其中四個(gè)字段是反屏蔽字段,標(biāo)示為INV3、INV2、INV1以及INV0。四個(gè)字段是與啟動(dòng)(AND-enabling)項(xiàng)字段,標(biāo)示為AND3、AND2、AND1以及AND0。圖40中所顯示的表格描述每一個(gè)字段。
控制邏輯3612包含根據(jù)寄存器rs 3602值,執(zhí)行以下YQ輸入3614操控的電路。四個(gè)YQ輸入3614值會(huì)被帶到四組獨(dú)立的XOR門組,該四個(gè)YQ輸入3614值對(duì)信號(hào)3912的映像由YQ輸入管理單元3902所控制,而位于對(duì)應(yīng)INVx字段的位被反轉(zhuǎn)以建立一調(diào)節(jié)的(conditioned)高有效值組。一獨(dú)立的n路AND(與)單元提供給四個(gè)調(diào)節(jié)的限定中的每一者,其中由相關(guān)的ANDx字段所選擇的該組位是與一隱式1與在一起(即若僅設(shè)定有一ANDx位,則輸出追蹤對(duì)應(yīng)的輸入)以產(chǎn)生四個(gè)選通的限定中的一個(gè)。四個(gè)選通的限定然后被OR(或)在一起。若結(jié)果不為零,則控制邏輯3612在重調(diào)度信號(hào)3628上產(chǎn)生一真值,以重新調(diào)度此線程。
在一實(shí)施例中,儲(chǔ)存于寄存器rd 3604中的返回值,是四個(gè)選通的限定值的一向量。在一實(shí)施例中,返回值會(huì)儲(chǔ)存于寄存器rd 3604的最低有效位中。在另一實(shí)施例中,返回值會(huì)向左移兩個(gè)位,以產(chǎn)生一地址偏移,根據(jù)重新調(diào)度的原因,實(shí)現(xiàn)一軟件切換。
如同在圖35的實(shí)施例中,一零寄存器rs 3602值會(huì)導(dǎo)致線程被終止。然而,為了以-1達(dá)到圖35中所規(guī)定的線程的無條件式重調(diào)度,寄存器rs 3602是以利用INV及AND屏蔽值被編程以產(chǎn)生用于4個(gè)YQ輸入3614的任何“A”輸出的(A)|(-A)。
雖然各實(shí)施例已描述31個(gè)YQ輸入3614被提供以及一32位的架構(gòu)被說明,但在此所描述的YIELD指令3500并不限于這些實(shí)施例,而是可增加或減少輸入的數(shù)目及寄存器的大小。
在此所描述的多線程ASE自然可以硬件實(shí)施(例如在一中央處理單元“CPU”、微處理器、微控制器、數(shù)字信號(hào)處理器、處理器核心、單片系統(tǒng)“SOC”、或其它可編程裝置中或與其連接)。再者,多線程ASE可以配置于存儲(chǔ)該軟件的例如一計(jì)算機(jī)可使用(例如可讀取)媒體中的軟件(例如計(jì)算機(jī)可讀取程序代碼、程序代碼、或以任何形式存在的指令及/或數(shù)據(jù),如來源、對(duì)象或機(jī)器語言)來實(shí)現(xiàn)。此軟件實(shí)現(xiàn)在此所描述的裝置及過程的功能、制造、模塊化、仿真、描述及/或測(cè)試。舉例而言,此可通過一般編程語言(如C、C++)、GDSII數(shù)據(jù)庫、包含Verilog HDL、VHDL、AHDL(Altera HDL)的硬件描述語言(HDL)等等、或其它可使用的程序、數(shù)據(jù)庫及/或電路(即圖型)捕獲工具的使用而實(shí)現(xiàn)。此軟件可配置于任何已知計(jì)算機(jī)可使用的媒體,例如半導(dǎo)體、磁盤、光盤(例如CD-ROM、DVD-ROM等)且作為包含于一計(jì)算機(jī)可使用(例如可讀取)的傳輸媒體(例如載波或任何其它媒體,包括基于數(shù)字、光學(xué)或模擬的媒體)中的計(jì)算機(jī)數(shù)據(jù)信號(hào)。這樣,軟件可通過通訊網(wǎng)絡(luò)(包含網(wǎng)際網(wǎng)絡(luò)及內(nèi)部網(wǎng)絡(luò))被傳輸。
以軟件體現(xiàn)的一多線程ASE可被包含于一半導(dǎo)體知識(shí)產(chǎn)權(quán)核心,例如一處理器核心(例如以HDL體現(xiàn)的),并在集成電路的制做中被轉(zhuǎn)換為硬件。再者,在此所描述的多線程ASE亦可以一硬件及軟件的結(jié)合實(shí)施。
本領(lǐng)域的熟練技術(shù)人員顯然了解在此所描述的實(shí)施例可做許多的變化,而不偏離本發(fā)明的精神及范圍。舉例而言,使用MIPS處理器、架構(gòu)及技術(shù)描述的實(shí)施例被說明為特定實(shí)施例。在許多實(shí)施例中本發(fā)明可更廣泛地應(yīng)用,且并不限定在這些范例。再者,本領(lǐng)域的熟練技術(shù)人員可找到不同的方法,將上述的功能已不同的方式編程實(shí)現(xiàn),這些方法皆應(yīng)包含于本發(fā)明的范圍內(nèi)。在相對(duì)QoS的教示中,寄存器ThreadSchedule及VPESchedul3的內(nèi)容并不受長(zhǎng)度的限定,且許多改變可包含于本發(fā)明的精神及范圍。
因此,本發(fā)明僅限定于以下的權(quán)利要求書的范圍。
最后,本領(lǐng)域的熟練技術(shù)人員當(dāng)知其可以容易地使用所述的概念及具體實(shí)施例作為設(shè)計(jì)或修改其它結(jié)構(gòu)以實(shí)施相同發(fā)明目的的基礎(chǔ),而不偏離下述權(quán)利要求所界定本發(fā)明的范圍及精神。
權(quán)利要求
1.一種在被配置成執(zhí)行并行程序線程的一微處理器上執(zhí)行的產(chǎn)出指令,所述指令包含一操作碼,用于指令所述微處理器暫停一線程的執(zhí)行,其中所述產(chǎn)出指令是所述線程中的一指令;以及一操作數(shù),其中若所述操作數(shù)是一第一預(yù)定值,則所述微處理器終止所述線程的執(zhí)行,其中若所述操作數(shù)是一第二預(yù)定值,則所述微處理器無條件地重新調(diào)度所述線程的執(zhí)行。
2.根據(jù)權(quán)利要求1所述的指令,其中所述操作數(shù)是儲(chǔ)存于所述微處理器的一寄存器中。
3.根據(jù)權(quán)利要求1所述的指令,其中所述寄存器是所述指令所規(guī)定的多個(gè)通用寄存器中的一個(gè)。
4.根據(jù)權(quán)利要求1所述的指令,其中所述操作數(shù)是儲(chǔ)存于一堆棧存儲(chǔ)器中。
5.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器重新調(diào)度所述線程的執(zhí)行,包含按照一線程調(diào)度策略,所述處理器指定適合執(zhí)行的所述線程。
6.根據(jù)權(quán)利要求1所述的指令,其中如果所述操作數(shù)是在一組預(yù)定值內(nèi)的一個(gè)值,則所述處理器有條件地重新調(diào)度所述線程的執(zhí)行,其中所述組預(yù)定值排除所述第一及第二預(yù)定值。
7.根據(jù)權(quán)利要求6所述的指令,其中所述微處理器有條件地重新調(diào)度所述線程的執(zhí)行,包含所述微處理器僅在所述操作數(shù)所規(guī)定的一條件被滿足后,按照一線程調(diào)度策略,指定適合執(zhí)行的所述線程。
8.根據(jù)權(quán)利要求7所述的指令,其中所述操作數(shù)規(guī)定多個(gè)限定輸入中的一或多個(gè)限定輸入,其中如果所述多個(gè)限定輸入中的所述一或多個(gè)限定輸入中的至少一個(gè)為真,則所述條件被滿足。
9.根據(jù)權(quán)利要求8所述的指令,還包括一第二操作數(shù),用于接收所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)所述指令而取樣的所述多個(gè)限定輸入的一狀態(tài)。
10.根據(jù)權(quán)利要求9所述的指令,其中所述結(jié)果值包含一位向量。
11.根據(jù)權(quán)利要求8所述的指令,其中如果所述操作數(shù)規(guī)定了所述微處理器所接收的在該微處理器的可編程屏蔽寄存器中未被規(guī)定的所述多個(gè)限定輸入中的一或多個(gè)限定輸入,則所述微處理器產(chǎn)生所述產(chǎn)出指令的一異常。
12.根據(jù)權(quán)利要求6所述的指令,其中所述組預(yù)定值包含正整數(shù)。
13.根據(jù)權(quán)利要求1所述的指令,還包括一第二操作數(shù),用于接收所述指令的一結(jié)果值。
14.根據(jù)權(quán)利要求13所述的指令,其中所述第二操作數(shù)儲(chǔ)存于所述微處理器的一寄存器中。
15.根據(jù)權(quán)利要求14所述的指令,其中所述寄存器是所述指令所規(guī)定的多個(gè)通用寄存器中的一個(gè)。
16.根據(jù)權(quán)利要求1所述的指令,其中所述第二操作數(shù)儲(chǔ)存于一堆棧存儲(chǔ)器中。
17.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器暫停所述線程的執(zhí)行,包含所述微處理器停止獲取以及發(fā)出所述線程中的指令。
18.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器終止所述線程的執(zhí)行,包含所述微處理器終止獲取以及發(fā)出所述線程中的指令。
19.根據(jù)權(quán)利要求1所述的指令,其中所述微處理器終止所述線程的執(zhí)行,包含所述微處理器將先前為所述線程的執(zhí)行所分配的硬件資源釋放,使得所述被釋放的硬件資源可用于另一線程的分配。
20.根據(jù)權(quán)利要求19所述的指令,其中所述硬件資源包含一程序計(jì)數(shù)寄存器。
21.根據(jù)權(quán)利要求19所述的指令,其中所述硬件資源包含一組通用寄存器。
22.根據(jù)權(quán)利要求1所述的指令,其中所述第一預(yù)定值是零(0)。
23.根據(jù)權(quán)利要求1所述的指令,其中所述第二預(yù)定值是負(fù)1(-1)。
24.根據(jù)權(quán)利要求1所述的指令,其中所述線程包含一序列程序指令。
25.根據(jù)權(quán)利要求24所述的指令,其中所述線程還包括所述微處理器的一序態(tài)改變序列,該狀態(tài)改變序列與所述程序指令序列的執(zhí)行相關(guān)聯(lián)。
26.一種用于執(zhí)行一指令的微處理器,所述指令指示所述微處理器選擇性地調(diào)度或終止包含所述指令的一程序線程的執(zhí)行,所述微處理器包含一操作數(shù);以及一調(diào)度器,被連接以接收所述操作數(shù),用于如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,以及用于如果所述操作數(shù)是一第二預(yù)定值,則調(diào)度所述線程的執(zhí)行。
27.根據(jù)權(quán)利要求26所述的微處理器,還包括一寄存器,用于儲(chǔ)存所述指令的所述操作數(shù)。
28.根據(jù)權(quán)利要求27所述的微處理器,其中所述寄存器包含所述指令所規(guī)定的一通用寄存器。
29.根據(jù)權(quán)利要求26所述的微處理器,還包括多個(gè)輸入,與所述調(diào)度器連接,用于指示對(duì)應(yīng)的多個(gè)事件;其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的一組預(yù)定值中,則所述操作數(shù)是規(guī)定所述多個(gè)輸入中的一或多個(gè)輸入的一位向量。
30.根據(jù)權(quán)利要求29所述的微處理器,其中如果所述操作數(shù)是在所述一組預(yù)定值中,則所述調(diào)度器暫停所述線程的執(zhí)行,直到所述位向量所規(guī)定的所述多個(gè)輸入中的所述一或多個(gè)輸入中的至少一輸入為真。
31.根據(jù)權(quán)利要求29所述的微處理器,其中所述多個(gè)輸入中的至少一個(gè)輸入接收在所述微處理器的外部產(chǎn)生的一信號(hào)。
32.根據(jù)權(quán)利要求29所述的微處理器,其中所述多個(gè)輸入中的至少一個(gè)輸入接收在所述微處理器的內(nèi)部產(chǎn)生的一信號(hào)。
33.根據(jù)權(quán)利要求29所述的微處理器,還包括一屏蔽寄存器,與所述調(diào)度器連接,用于儲(chǔ)存規(guī)定所述多個(gè)輸入中的一或多個(gè)輸入的一值。
34.根據(jù)權(quán)利要求33所述的微處理器,其中如果所述操作數(shù)是在所述一組預(yù)定值中,則如果所述操作數(shù)規(guī)定了所述屏蔽寄存器值未規(guī)定的所述多個(gè)輸入的一或多個(gè)輸入,則所述微處理器產(chǎn)生所述指令的一異常。
35.根據(jù)權(quán)利要求33所述的微處理器,還包括一第二寄存器,與所述多個(gè)輸入及所述屏蔽寄存器連接,用于儲(chǔ)存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)所述指令被取樣并由所述屏蔽寄存器值所限定的所述多個(gè)輸入的狀態(tài)。
36.根據(jù)權(quán)利要求29所述的微處理器,還包括一第二寄存器,與所述多個(gè)輸入連接,用于儲(chǔ)存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)于所述指令被取樣的所述多個(gè)輸入的一狀態(tài)。
37.根據(jù)權(quán)利要求26所述的微處理器,其中所述第一預(yù)定值是零(0)以及所述第二預(yù)定值是負(fù)一(-1)。
38.一種在一微處理器中選擇性暫停或終止一線程的執(zhí)行的方法,包含發(fā)出所述線程中的一指令,所述指令規(guī)定了一操作數(shù);如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行;以及如果所述操作數(shù)是一第二預(yù)定值,則無條件地重調(diào)度所述線程的執(zhí)行,其中所述第一預(yù)定值不同于所述第二預(yù)定值。
39.根據(jù)權(quán)利要求38所述的方法,其中所述微處理器被配置成監(jiān)視事件信號(hào),其中如果所述操作數(shù)是在一組預(yù)定值內(nèi),則所述操作數(shù)規(guī)定這些事件信號(hào)中的一或多個(gè)信號(hào),所述方法還包括如果所述操作數(shù)在該組預(yù)定值內(nèi),則暫停所述線程的執(zhí)行,直到所述操作數(shù)所規(guī)定的這些事件信號(hào)中的一或多個(gè)信號(hào)中的至少一信號(hào)為真。
40.根據(jù)權(quán)利要求39所述的方法,還包括在所述發(fā)出之后,取樣所述一或多個(gè)事件信號(hào)的一值;以及儲(chǔ)存所述取樣的值作為所述指令的一結(jié)果值。
41.根據(jù)權(quán)利要求40所述的方法,其中所述儲(chǔ)存所述取樣的值包含儲(chǔ)存所述取樣值在所述指令所規(guī)定的一結(jié)果寄存器中。
42.根據(jù)權(quán)利要求39所述的方法,還包括決定是否由所述操作數(shù)所規(guī)定的所述一或多個(gè)事件信號(hào)的全部也在所述微處理器的一屏蔽寄存器中被規(guī)定;若在所述屏蔽寄存器中,并非所有所述操作數(shù)所規(guī)定的所述事件信號(hào)的所述一或多個(gè)事件信號(hào)的全部皆被激活,則產(chǎn)生所述指令的一異常。
43.根據(jù)權(quán)利要求39所述的方法,還包括一旦所述操作數(shù)所規(guī)定的所述一或多個(gè)事件信號(hào)中的至少一個(gè)事件信號(hào)為真,則重新調(diào)度所述線程的執(zhí)行。
44.根據(jù)權(quán)利要求39所述的方法,其中所述第一預(yù)定值是零(0),其中所述第二預(yù)定值是負(fù)1(-1),以及其中所述一組預(yù)定值包括正整數(shù)。
45.根據(jù)權(quán)利要求38所述的方法,還包括如果所述操作數(shù)是所述第一預(yù)定值,則釋放先前分配給該線程的該線程上下文,用于由一新線程隨后使用。
46.根據(jù)權(quán)利要求38所述的方法,其中所述第一預(yù)定值是零(0),其中所述第二預(yù)定值是負(fù)1(-1)。
47.一種處理系統(tǒng),包含多個(gè)信號(hào)源;以及一微處理器,連接以接收由所述多個(gè)信號(hào)源所產(chǎn)生的多個(gè)信號(hào),所述微處理器被配置成執(zhí)行一程序線程內(nèi)的一指令,以及若所述指令的一操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,否則根據(jù)由所述操作數(shù)所規(guī)定的所述多個(gè)信號(hào)中的一或多個(gè)信號(hào)的條件,重調(diào)度所述線程的執(zhí)行。
48.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中如果所述操作數(shù)是一第二預(yù)定值,則所述微處理器被配置成無條件地重調(diào)度所述線程的執(zhí)行。
49.根據(jù)權(quán)利要求48所述的處理系統(tǒng),其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的所述組預(yù)定值內(nèi),則所述微處理器被配置成根據(jù)所述操作數(shù)所規(guī)定的所述多個(gè)信號(hào)中的一或多個(gè)信號(hào)的條件,有條件地重新調(diào)度所述線程的執(zhí)行。
50.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述多個(gè)信號(hào)源的至少一信號(hào)源包含一輸入/輸出裝置。
51.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述指令返回指示所述多個(gè)信號(hào)的一值的一操作數(shù),。
52.根據(jù)權(quán)利要求47所述的處理系統(tǒng),還包括多個(gè)寄存器,連接于所述多個(gè)信號(hào)源及所述微處理器之間,用于將所述多個(gè)信號(hào)源映射至所述微處理器的多個(gè)輸入。
53.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述微處理器還包括多個(gè)寄存器,被連接以接收所述多個(gè)信號(hào),用于將所述多個(gè)信號(hào)映射至多個(gè)限定輸入,其中所述操作數(shù)規(guī)定由所述微處理器在所述限定輸入上所執(zhí)行的一布爾函數(shù),以確定用于有條件地重新調(diào)度所述線程的執(zhí)行的條件。
54.根據(jù)權(quán)利要求47所述的處理系統(tǒng),其中所述微處理器還包括一寄存器,被連接以儲(chǔ)存所述操作數(shù)。
55.根據(jù)權(quán)利要求47所述的處理系統(tǒng),還包括一存儲(chǔ)器,與所述微處理器連接,用于將所述操作數(shù)儲(chǔ)存于所述微處理器所包括的一操作數(shù)棧中。
56.一種計(jì)算機(jī)程序產(chǎn)品,與一計(jì)算裝置一同使用,所述計(jì)算機(jī)程序產(chǎn)品包含一計(jì)算機(jī)可使用媒體,所述媒體包含有計(jì)算機(jī)可讀取程序代碼,用于導(dǎo)致一微處理器執(zhí)行一指令,所述指令指示所述微處理器選擇性地調(diào)度或終止包含所述指令的一程序線程的執(zhí)行,所述計(jì)算機(jī)可讀取程序代碼包含提供所述指令的一操作數(shù)的第一程序代碼;以及提供一調(diào)度器的第二程序代碼,被連接以接收所述操作數(shù),用于如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,以及若所述操作數(shù)是一第二預(yù)定值,則調(diào)度所述線程的執(zhí)行。
57.根據(jù)權(quán)利要求56所述的計(jì)算機(jī)程序產(chǎn)品,其中所述計(jì)算機(jī)可讀取程序代碼還包括用于提供多個(gè)輸入的第三程序代碼,被連接至所述調(diào)度器,用于指示對(duì)應(yīng)的多個(gè)事件,其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的一組預(yù)定值內(nèi),則所述操作數(shù)是規(guī)定所述多個(gè)輸入中的一或多個(gè)輸入的位向量。
58.根據(jù)權(quán)利要求57所述的計(jì)算機(jī)程序產(chǎn)品,其中所述計(jì)算機(jī)可讀取程序代碼還包括提供一屏蔽寄存器的第四程序代碼,被連接至所述調(diào)度器,用于儲(chǔ)存規(guī)定所述多個(gè)輸入中的一或多個(gè)輸入的一值。
59.根據(jù)權(quán)利要求58所述的計(jì)算機(jī)程序產(chǎn)品,其中所述計(jì)算機(jī)可讀取程序代碼還包括用于提供一第二寄存器的第五程序代碼,被連接至所述多個(gè)輸入及所述屏蔽寄存器,用于儲(chǔ)存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)所述指令所取樣且由所述屏蔽寄存器所限定的所述多個(gè)輸入的一狀態(tài)。
60.一種包含于一傳輸媒體內(nèi)的計(jì)算機(jī)數(shù)據(jù)信號(hào),包括計(jì)算機(jī)可讀取程序代碼,用于提供一微處理器執(zhí)行一指令,所述指令指示所述微處理器選擇性地調(diào)度或終止包含所述指令的一程序線程的執(zhí)行,所述程序代碼包含提供一寄存器的第一程序代碼,用于儲(chǔ)存所述指令的一操作數(shù);以及提供一調(diào)度器的第二程序代碼,被連接到所述寄存器,用于如果所述操作數(shù)是一第一預(yù)定值,則終止所述線程的執(zhí)行,以及如果所述操作數(shù)是一第二預(yù)定值,則調(diào)度所述用于執(zhí)行的線程。
61.根據(jù)權(quán)利要求60所述的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中所述計(jì)算機(jī)可讀取程序代碼還包括提供多個(gè)輸入的第三程序代碼,被連接至所述調(diào)度器,用于指示對(duì)應(yīng)的多個(gè)事件,其中如果所述操作數(shù)是在排除所述第一及所述第二預(yù)定值的一組預(yù)定值內(nèi),則所述操作數(shù)是規(guī)定所述多個(gè)輸入中的一或多個(gè)輸入的一位向量。
62.根據(jù)權(quán)利要求61所述的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中所述計(jì)算機(jī)可讀取程序代碼還包括提供一屏蔽寄存器的第四程序代碼,被連接至所述調(diào)度器,用于儲(chǔ)存規(guī)定所述多個(gè)輸入中的一或多個(gè)輸入的一值。
63.根據(jù)權(quán)利要求62所述的計(jì)算機(jī)數(shù)據(jù)信號(hào),其中所述計(jì)算機(jī)可讀取程序代碼還包括提供一第二寄存器的第五程序代碼,被連接到所述多個(gè)輸入及所述屏蔽寄存器,用于儲(chǔ)存所述指令的一結(jié)果值,所述結(jié)果值規(guī)定響應(yīng)于所述指令取樣且由所述屏蔽寄存器值所限定的所述多個(gè)輸入的一狀態(tài)。
全文摘要
本發(fā)明公開一種在一多線程的微處理器中執(zhí)行的一產(chǎn)出(yield)指令。此產(chǎn)出指令包含一操作數(shù)。若操作數(shù)為零,則微處理器終止包含此產(chǎn)出指令的程序線程。若操作數(shù)為-1,則微處理器無條件地重新調(diào)度此程序線程。若操作數(shù)為一正整數(shù),則微處理器視操作數(shù)為一位向量,其規(guī)定一或多個(gè)產(chǎn)出限定輸入,例如中斷信號(hào),并根據(jù)此限定輸入及位向量值,有條件地調(diào)度此程序線程。微處理器還包含一屏蔽寄存器,規(guī)定這些限定輸入的一位向量。若此操作數(shù)規(guī)定并未規(guī)定于一屏蔽寄存器的一限定輸入,則產(chǎn)生此指令的一異常。此指令返回一值,該值規(guī)定由屏蔽寄存器值限定的限定輸入的值。
文檔編號(hào)G06F9/318GK1846194SQ200480024852
公開日2006年10月11日 申請(qǐng)日期2004年8月27日 優(yōu)先權(quán)日2003年8月28日
發(fā)明者凱文·基塞爾 申請(qǐng)人:美普思科技有限公司