專利名稱:一種在處理器中掛起和釋放執(zhí)行過(guò)程中計(jì)算線程的整體機(jī)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字處理器的領(lǐng)域(例如,微處理器、數(shù)字信號(hào)處理器、微控制器等等),特別是有關(guān)于,涉及在單個(gè)處理器中管理多個(gè)線程的執(zhí)行的裝置與方法。
背景技術(shù):
在數(shù)字計(jì)算的領(lǐng)域,計(jì)算能力的發(fā)展歷史顯示了在各方面都有持續(xù)的進(jìn)步。持續(xù)的進(jìn)步一直在發(fā)生,例如處理器的裝置密度與線路互連的技術(shù),可用于改善運(yùn)算速度、容錯(cuò)能力、使用更高速的時(shí)脈信號(hào)或者更多其它改進(jìn)。另一個(gè)可改善整體計(jì)算能力的研究領(lǐng)域?yàn)椴⑿刑幚恚洳粌H包括使用多個(gè)分開(kāi)的處理器執(zhí)行并行操作。
并行處理的概念包括將任務(wù)分散至多個(gè)分開(kāi)的處理器,但是也包括多個(gè)程序同時(shí)在一個(gè)處理器上執(zhí)行的方案。此方案一般被稱為多線程。
接下來(lái)將介紹多線程的概念隨著處理器操作頻率逐漸加快,要隱藏在計(jì)算機(jī)系統(tǒng)的操作中固有的延遲(latency)也變的越來(lái)越困難。一個(gè)高級(jí)處理器在一個(gè)特定應(yīng)用中其高速數(shù)據(jù)緩存中丟失了百分之一的指令,如果它對(duì)于片外RAM有50個(gè)周期的延遲的話,則可能導(dǎo)致大概百分之五十的時(shí)間停頓。如果當(dāng)該處理器因?yàn)閬G失的高速緩存指令而停頓時(shí),屬于另一個(gè)不同應(yīng)用程序的指令可以被執(zhí)行的話,該處理器的性能可以因此而改善,并且一部份或者全部的跟內(nèi)存有關(guān)的延遲也可有效的被消除。舉例來(lái)說(shuō),圖1A顯示了因?yàn)楦咚倬彺鎭G失而停頓的單個(gè)指令流101。支持該指令運(yùn)作的機(jī)器僅可在一個(gè)時(shí)間內(nèi)執(zhí)行單個(gè)線程或任務(wù)。相反的,圖1B顯示了在指令流101停頓時(shí)指令流102可被執(zhí)行。在這種情況當(dāng)中,該支持機(jī)器可以同時(shí)支持兩個(gè)線程,也因此更有效的使用該機(jī)器所擁有的資源。
更一般的說(shuō),各個(gè)單獨(dú)的計(jì)算機(jī)指令都具有特定的語(yǔ)法,使得不同種類的指令需要不同的資源去執(zhí)行期望的運(yùn)算。整數(shù)負(fù)載沒(méi)有充分使用到整個(gè)浮點(diǎn)運(yùn)算單元的邏輯或寄存器,任何除了寄存器移位之外的運(yùn)算皆需要使用加載/儲(chǔ)存單元的資源。沒(méi)有一個(gè)單一指令使用到全部處理器的資源,而且當(dāng)為了追求更高性能的設(shè)計(jì)而因此加入了更多的管線級(jí)與并行功能單元后,會(huì)進(jìn)而降低平均被所有指令使用而全部消耗的處理器資源的比例。
多線程的發(fā)展一大部分源自于,如果一個(gè)順序程序基本上不能有效率地完全使用處理器的全部資源,該處理器就應(yīng)該能夠?qū)⑦@些資源中的一部分在屬于程序執(zhí)行的多個(gè)線程當(dāng)中進(jìn)行分配。這種方式并不一定導(dǎo)致任何特定程序可被更快速的執(zhí)行,事實(shí)上,一些多線程方案實(shí)質(zhì)上降低了單一線程程序執(zhí)行的性能,然而卻可使一個(gè)并行指令流的集合在更短的時(shí)間內(nèi)和/或使用更少的處理器數(shù)目來(lái)運(yùn)行。這個(gè)概念可用圖2A與圖2B來(lái)說(shuō)明,其中各自顯示了單一線程處理器210與雙線程處理器250。處理器210支持單一線程212,表示為使用加載/儲(chǔ)存單元214。如果當(dāng)存取高速緩存216時(shí)發(fā)生一個(gè)丟失,那么處理器210便會(huì)停頓(根據(jù)圖1A所描述)直到重新獲得該丟失數(shù)據(jù)。在這個(gè)過(guò)程當(dāng)中,乘法器/除法器單元218始終處于閑置狀態(tài)而且沒(méi)有被有效使用。然而,處理器250支持兩個(gè)線程;即212與262。因此,若是線程212發(fā)生停頓,處理器250仍然可以同時(shí)執(zhí)行線程262與乘法器/除法器單元218,因而更有效地利用了所有的資源(根據(jù)圖1B所描述)。
在單一處理器上具有多線程可獲得更佳的多任務(wù)處理能力的好處。然而,捆綁多個(gè)程序線程在關(guān)鍵事件上可以降低事件反應(yīng)時(shí)間,而且線程級(jí)的并行處理在原理上可在單一應(yīng)用程序中被充分利用。
已經(jīng)提出了各種多線程處理方式。其中之一為指令交錯(cuò)多線程(interleaved multithreading),也就是分時(shí)復(fù)用(TDM)方案,對(duì)于每個(gè)發(fā)出的指令從一個(gè)線程切換至另一個(gè)線程。該方案在調(diào)度上有一定程度的“公平性”,但是為了靜態(tài)分配多個(gè)發(fā)起槽(issue slot)至多個(gè)線程,通常會(huì)限制單一程序線程的性能。動(dòng)態(tài)交錯(cuò)的方式可以改良這個(gè)問(wèn)題,但是實(shí)現(xiàn)這個(gè)方式比較復(fù)雜。
另一個(gè)多線程的方案是塊交錯(cuò)多線程(blocked multithreading),其從一個(gè)單一程序線程持續(xù)地發(fā)出連續(xù)多個(gè)指令,直到某個(gè)特定的阻塞事件發(fā)生,例如高速緩存丟失或者重新設(shè)定,舉例來(lái)說(shuō),導(dǎo)致該線程被掛起而另一個(gè)線程被激活。因?yàn)閴K交錯(cuò)多線程變換線程的頻率較小,所以其實(shí)現(xiàn)方式可以是比較簡(jiǎn)單的。另一方面,阻塞的動(dòng)作在調(diào)度線程的過(guò)程中是比較不具有“公平性”。單個(gè)線程可以獨(dú)占整個(gè)處理器很長(zhǎng)一段時(shí)間,如果它非常地幸運(yùn)能在高速緩存中找到它需要的所有數(shù)據(jù)。一種混合調(diào)度方案結(jié)合了塊交錯(cuò)多線程與指令交錯(cuò)多線程的特定,也常被使用與研究。
仍然有另一種多線程的形式為同時(shí)多線程(simultaneousmultithreading),是一種在超標(biāo)量處理器上實(shí)現(xiàn)的方案。在同步多線程中,來(lái)自不同線程的多個(gè)指令可以被同時(shí)發(fā)出。例如,一個(gè)超標(biāo)量精簡(jiǎn)指令集計(jì)算機(jī)(RISC),每周期發(fā)出總共兩個(gè)指令,以及一個(gè)同步多線程的超標(biāo)量管線,每周期從兩個(gè)線程中任一個(gè)發(fā)出總計(jì)兩個(gè)指令。那些單一程序線程所依附或停頓的周期會(huì)導(dǎo)致該處理器不被充分利用,因此在同步多線程中這些周期可被另一線程的發(fā)出指令所填補(bǔ)。
同步多線程也因此成為一個(gè)非常有用的技術(shù),用以解決并恢復(fù)在超標(biāo)量管線中所浪費(fèi)的效率。但也有爭(zhēng)議地被認(rèn)為是最復(fù)雜的多線程系統(tǒng)所使用的方法,因?yàn)樵谝恢芷趦?nèi)激活多于一個(gè)線程,會(huì)使得內(nèi)存存取保護(hù)裝置的實(shí)現(xiàn)更加地復(fù)雜等等。另外一個(gè)值得注意的一點(diǎn),對(duì)于一定的工作量,中央處理器(CPU)操作的管線化越完善,越會(huì)降低其多線程實(shí)現(xiàn)的潛在獲得的效率。
多線程與多重處理實(shí)質(zhì)上是非常相關(guān)的。事實(shí)上,一般可認(rèn)為其中的差異只有一點(diǎn)不同也就是多重處理器只共享內(nèi)存和/或線路連線,而多線程處理器除了共享內(nèi)存和/或線路連線之外,還共享指令提取與發(fā)出邏輯,和其它可能的處理器資源。在單個(gè)多線程處理器當(dāng)中,各個(gè)線程互相競(jìng)爭(zhēng)發(fā)起槽與其它資源,從而限制了并行處理能力。某些多線程程序與架構(gòu)模型假設(shè)了新線程會(huì)被分配到不同的處理器,使得該程序可被有效的并行處理。
在本申請(qǐng)案提出申請(qǐng)時(shí),應(yīng)該已有許多的多線程解決方案,用以解決當(dāng)前領(lǐng)域許多不同的問(wèn)題。其中之一即為實(shí)時(shí)線程的改善方案。一般來(lái)說(shuō),實(shí)時(shí)多媒體算法通常被執(zhí)行于專用處理器/數(shù)字信號(hào)處理器(DSP),用以保證服務(wù)質(zhì)量(QoS)與響應(yīng)時(shí)間,且并不包括將線程混合并共享于多線程方案當(dāng)中,因?yàn)閷?shí)時(shí)軟件并無(wú)法容易地獲得保證該軟件可被適時(shí)地執(zhí)行。
在這方面,非常清楚的必須要有一個(gè)方案與機(jī)制,允許一個(gè)或多個(gè)實(shí)時(shí)線程或虛擬處理器能夠在特定的指令間的間隔保證獲得在多線程處理器中特定比例的指令發(fā)起槽,因而計(jì)算帶寬與響應(yīng)時(shí)間能被清楚的定義。如果這樣的機(jī)制能被使用,則具有嚴(yán)格QoS要求的線程即可被包含在此多線程的混用中。另外,這種系統(tǒng)中的實(shí)時(shí)線程(如DSP相關(guān)的線程),可以或多或少地被避免于遇到中斷而因搬動(dòng)重要資源而變化執(zhí)行的時(shí)間。這種技術(shù)可以在特殊的情況下使用具有DSP加強(qiáng)功能的RISC處理器與內(nèi)核,以取代一般在消費(fèi)性多媒體應(yīng)用上使用分離的RISC與DSP內(nèi)核。
在本申請(qǐng)案提出申請(qǐng)時(shí),當(dāng)前技術(shù)中多線程方案的另一個(gè)問(wèn)題為在處理器中產(chǎn)出與消滅激活的線程。為了支持相對(duì)細(xì)粒度多線程(fine-grained multithreading),期望以可能的最小系統(tǒng)開(kāi)銷(xiāo)產(chǎn)生和消滅程序執(zhí)行過(guò)程的并行線程,并且至少在一般的情況下不會(huì)干擾到必須的操作系統(tǒng)功能。在這個(gè)方面,清楚需要的是一些指令如FORK(線程產(chǎn)生)與JOIN(線程終止)。另一個(gè)存在于多線程處理器中的問(wèn)題為,調(diào)度原則使得一個(gè)線程持續(xù)運(yùn)行直到被另一些資源阻塞,然而一個(gè)沒(méi)有被任何資源阻塞的線程仍然需要使得該處理器切換至其它的線程。所以在這個(gè)方面可以清楚的知道,還有需要PAUSE或YIELD指令。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)基本目的是提供一種適用于細(xì)粒度多線程的健壯系統(tǒng),其中可以利用最小的系統(tǒng)開(kāi)銷(xiāo)來(lái)產(chǎn)生和消滅線程。根據(jù)這個(gè)目的,在根據(jù)本發(fā)明的一個(gè)較佳實(shí)施例中,在一個(gè)能夠支持并執(zhí)行多程序線程的處理器中,提供了一種處理機(jī)制,其包括一個(gè)參數(shù),用于調(diào)度一個(gè)程序線程;和一個(gè)設(shè)置于該程序線程中并且能存取該參數(shù)的指令。當(dāng)該參數(shù)等于第一數(shù)值時(shí),該指令即根據(jù)編碼在該參數(shù)中的一個(gè)或多個(gè)條件來(lái)重新調(diào)度該程序線程。在一個(gè)有關(guān)該機(jī)制的較佳實(shí)施例中,該參數(shù)被保存在一個(gè)數(shù)據(jù)儲(chǔ)存裝置中。并且在另一個(gè)較佳實(shí)施例中,當(dāng)該參數(shù)等于第二數(shù)值時(shí),其中該第二數(shù)值不等于該第一數(shù)值,該指令即釋放該程序線程。在某些實(shí)施例中,該第二數(shù)值為零。
在某些實(shí)施例中,當(dāng)該參數(shù)等于該第二數(shù)值時(shí),其中該第二數(shù)值不等于該第一數(shù)值,該指令即無(wú)條件的重新調(diào)度該程序線程。另外在一些實(shí)施例中,該第二數(shù)值為一奇數(shù)值。在一些其它的較佳實(shí)施例中,該第二數(shù)值為負(fù)1。
在一些較佳實(shí)施例中,該一個(gè)或多個(gè)條件中的一個(gè)條件與將執(zhí)行機(jī)會(huì)讓與其他線程直到一個(gè)條件被滿足的程序線程相關(guān)。另外,在一些實(shí)施例中,該一個(gè)條件被編碼于該參數(shù)中的一個(gè)位向量或位字段中。還有,在一些實(shí)施例中,在該程序線程被重新調(diào)度的情形下,該程序線程的執(zhí)行在該線程當(dāng)中該指令之后繼續(xù)。還有,在其他一些較佳實(shí)施例中,當(dāng)該參數(shù)等于第三數(shù)值時(shí),其中該第三數(shù)值不等于該第一數(shù)值與第二數(shù)值,該指令無(wú)條件地重新調(diào)度該程序線程。
某一些有關(guān)于該機(jī)制的較佳實(shí)施例中,該一個(gè)或多個(gè)條件中的一個(gè)條件為一個(gè)硬件中斷。還有,在一些實(shí)施例中,該一個(gè)或多個(gè)條件中的一個(gè)條件為一個(gè)軟件中斷。還有,在許多實(shí)施例中,當(dāng)該程序線程被重新調(diào)度的情形下,該程序線程的執(zhí)行在該線程中該指令之后的位置繼續(xù)。
根據(jù)本發(fā)明的另一方面,在一個(gè)能夠支持并執(zhí)行多程序線程的處理器中,提供了一種由一個(gè)線程重新調(diào)度執(zhí)行或釋放該線程本身的方法,其包括(a)發(fā)出一個(gè)指令,其能存取一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部分記錄,該部分記錄編碼了與決定該線程是否會(huì)被重新調(diào)度的一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù);和(b)遵循該條件,根據(jù)在該部分記錄中的一個(gè)或多個(gè)參數(shù)重新調(diào)度或釋放該線程。在一個(gè)較佳實(shí)施例中,該記錄被置于一個(gè)通用寄存器(GPR)中。另外,在一個(gè)較佳實(shí)施例中,這些參數(shù)中的一個(gè)參數(shù)與該被釋放的而不是被重新調(diào)度的線程相關(guān)。在一些較佳實(shí)施例中,與該被釋放的線程相關(guān)的該一個(gè)參數(shù)的值為零。
在一些實(shí)施該方法的實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在一些實(shí)施例當(dāng)中,該參數(shù)為任意的奇數(shù)值。在一些實(shí)施例當(dāng)中,該參數(shù)為負(fù)1的二進(jìn)制補(bǔ)碼值。在一些實(shí)施例中,這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其他線程直到一個(gè)特定條件被滿足的實(shí)施例相關(guān)。另外,在另一些實(shí)施例中,該一個(gè)條件被編碼于該記錄中的一個(gè)位向量或是一個(gè)或多個(gè)位字段中。
在許多實(shí)施該方法的實(shí)施例當(dāng)中,在該線程發(fā)出該指令并且被重新調(diào)度的情形下,當(dāng)該一個(gè)或多個(gè)條件被滿足時(shí),該線程的執(zhí)行在線程指令流中該線程發(fā)出的該指令之后的位置繼續(xù)。在一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在其它的一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與該被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。在其它的一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定的條件被滿足的線程相關(guān)。另外,在其它的一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與該被釋放而不是被重新調(diào)度的線程相關(guān),而這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定的條件被滿足的線程相關(guān)。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種能支持與執(zhí)行多個(gè)軟件實(shí)體的數(shù)字處理器,包括一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部分記錄,該部分記錄編碼了與一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù),該一個(gè)或多個(gè)條件決定了當(dāng)一個(gè)線程將執(zhí)行機(jī)會(huì)讓與其它線程時(shí)該線程是否會(huì)被重新調(diào)度。
在該處理器的一些實(shí)施例當(dāng)中,該部分記錄被置于一個(gè)通用寄存器(GPR)中。在一些其它較佳實(shí)施例,這些參數(shù)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān)。在另一些較佳實(shí)施例中,該與被釋放的線程相關(guān)的參數(shù)的值為零。
在該處理器的其他一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在一些實(shí)施例當(dāng)中,該一個(gè)參數(shù)為任意的奇數(shù)值。在另一些實(shí)施例當(dāng)中,該參數(shù)為負(fù)1的二進(jìn)制補(bǔ)碼值。在另一些實(shí)施例中,這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。另外,在一些情況下,該一個(gè)參數(shù)可以被編碼于該記錄中的一個(gè)位向量或是一個(gè)或多個(gè)位字段中。
在該處理器的其他一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與該被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在其它的一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。在其它的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
在其它的一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),而該參數(shù)當(dāng)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
根據(jù)本發(fā)明的另一方面,提供一種能支持與執(zhí)行多個(gè)程序線程的處理系統(tǒng),包括一個(gè)數(shù)字處理器;一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部分記錄,該部分記錄編碼了與決定一個(gè)線程是否會(huì)被重新調(diào)度的一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù);和一個(gè)指令集,其包含一個(gè)指令用以重新調(diào)度和釋放該線程。當(dāng)該線程發(fā)出該指令時(shí),該指令存取該記錄中的該一個(gè)或多個(gè)參數(shù),并且該系統(tǒng)遵循該一個(gè)或多個(gè)條件,根據(jù)該部分記錄中的該一個(gè)或多個(gè)參數(shù),重新調(diào)度和釋放發(fā)出該指令的線程。
在該處理系統(tǒng)的一些較佳實(shí)施例當(dāng)中,該記錄被置于一個(gè)通用寄存器(GPR)中。在一些其它的較佳實(shí)施例,這些參數(shù)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān)。在一些實(shí)施例中,與被釋放的線程相關(guān)的該一個(gè)參數(shù)的值為零。在一些其它的實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在一些實(shí)施例當(dāng)中,該用來(lái)重新調(diào)度的參數(shù)為任意的奇數(shù)值。在其它的一些實(shí)施例當(dāng)中,該用來(lái)重新調(diào)度的參數(shù)為負(fù)1的二進(jìn)制補(bǔ)碼值。
在該系統(tǒng)的一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。另外,在一些實(shí)施例中,該一個(gè)參數(shù)被編碼于該記錄中的一個(gè)位向量或是一個(gè)或多個(gè)位字段中。在該系統(tǒng)的許多實(shí)施例當(dāng)中,在一個(gè)線程發(fā)出該指令并且被有條件地重新調(diào)度的情形下,當(dāng)該一個(gè)或多個(gè)條件被滿足時(shí),該線程的執(zhí)行在該線程指令流中該指令之后的位置繼續(xù)。
在該處理系統(tǒng)的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在其它的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
在其它的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。另外,在其它的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),而該參數(shù)當(dāng)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
另外,根據(jù)本發(fā)明的又一個(gè)方面,提供了一種數(shù)字儲(chǔ)存介質(zhì),其上寫(xiě)入了來(lái)自一個(gè)指令集的指令,用于在一個(gè)數(shù)字處理器上執(zhí)行多個(gè)軟件線程中的各個(gè)軟件線程,該指令集包含了一個(gè)指令,該指令使發(fā)出該指令的線程放棄執(zhí)行,并且存取一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部份記錄中的一個(gè)參數(shù),其中,關(guān)于釋放或重新調(diào)度的條件與該參數(shù)相關(guān),并且遵循該條件,根據(jù)該部份記錄中的該參數(shù)執(zhí)行釋放或重新調(diào)度。
在該介質(zhì)的一些實(shí)施例當(dāng)中,該記錄被置于一個(gè)通用寄存器(GPR)中。在該介質(zhì)的一些其它實(shí)施例中,這些參數(shù)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān)。在一些實(shí)施例中,該與被釋放的線程相關(guān)的參數(shù)的值為零。在該介質(zhì)的一些其它實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在一些實(shí)施例當(dāng)中,該一個(gè)參數(shù)為任意的奇數(shù)值。在另一些實(shí)施例當(dāng)中,該一個(gè)參數(shù)為負(fù)1的二進(jìn)制補(bǔ)碼值。
在該介質(zhì)的另一些實(shí)施例當(dāng)中,這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。在另一些實(shí)施例中,該參數(shù)被編碼于該記錄中的一個(gè)位向量或是一個(gè)或多個(gè)位字段中。在另外一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。在其它的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
在該機(jī)制的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。另外,在該數(shù)字儲(chǔ)存介質(zhì)的一些實(shí)施例當(dāng)中,該參數(shù)當(dāng)中的一個(gè)參數(shù)與被釋放而不是被重新調(diào)度的線程相關(guān),而該參數(shù)當(dāng)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
在該機(jī)制的一些實(shí)施例當(dāng)中,該指令為一個(gè)YIELD指令。還有,在該機(jī)制的一些實(shí)施例當(dāng)中,該部分記錄包括一個(gè)位向量。另外,在該機(jī)制的其他一些實(shí)施例當(dāng)中,該部分記錄包括一個(gè)或多個(gè)多位字段。
在該方法的一些實(shí)施例當(dāng)中,該指令為一個(gè)YIELD指令。還有,在該處理系統(tǒng)的一些實(shí)施例當(dāng)中,該指令為一個(gè)YIELD指令。
在該數(shù)字儲(chǔ)存介質(zhì)的實(shí)施例當(dāng)中,該指令為一個(gè)YIELD指令。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種包含在傳輸介質(zhì)中的計(jì)算機(jī)數(shù)據(jù)信號(hào),包括計(jì)算機(jī)可讀的程序代碼,該程序代碼描述了一個(gè)能夠支持并執(zhí)行多程序線程的處理器,并且包括用于釋放與重新調(diào)度一個(gè)線程的機(jī)制,該程序編碼包括第一程序代碼段,用于描述一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部份記錄,該部分記錄編碼了與決定一個(gè)線程是否會(huì)被重新調(diào)度的一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù);和第二程序代碼段,用于描述能夠存取該記錄中的該一個(gè)或多個(gè)參數(shù)的一條指令,其中,當(dāng)該線程發(fā)出該指令時(shí),該指令存取該記錄中的該一個(gè)或多個(gè)值,并且遵循該一個(gè)或多個(gè)條件,根據(jù)該一個(gè)或多個(gè)值重新調(diào)度或釋放該線程。
根據(jù)本發(fā)明的另一方面,在一個(gè)能夠支持多程序線程的處理器當(dāng)中,提供了一種方法,包括執(zhí)行一個(gè)指令,該指令存取與線程調(diào)度相關(guān)的一個(gè)參數(shù),其中該指令包含在一個(gè)程序線程中;當(dāng)該參數(shù)等于第一數(shù)值時(shí),則根據(jù)該指令釋放該程序線程。在該方法的一些實(shí)施例當(dāng)中,該第一數(shù)值為零。在該方法的另一些實(shí)施例當(dāng)中,該方法還包括一個(gè)步驟當(dāng)該參數(shù)等于第二數(shù)值時(shí),根據(jù)該指令掛起該程序線程的執(zhí)行,其中該第二數(shù)值不等于該第一數(shù)值。在該方法的一些實(shí)施例當(dāng)中,該第二數(shù)值表示,執(zhí)行該程序線程所需要具備的條件并不滿足。
在該方法的一些其它實(shí)施例當(dāng)中,該條件以一個(gè)位向量或值字段的形式被編碼在該參數(shù)之中。在一些其它的實(shí)施例當(dāng)中,當(dāng)該參數(shù)等于第三數(shù)值時(shí),根據(jù)該指令而重新調(diào)度該程序線程,其中該第三數(shù)值不等于該第一數(shù)值與第二數(shù)值。在其他一些實(shí)施例當(dāng)中,該第三數(shù)值為負(fù)1。在另外一些實(shí)施例當(dāng)中,該第三數(shù)值為奇數(shù)值。
根據(jù)本發(fā)明的另一個(gè)方面,在一個(gè)能夠支持多程序線程的處理器當(dāng)中,提供了一個(gè)方法,包括執(zhí)行一條指令,該指令存取與線程調(diào)度相關(guān)的一個(gè)參數(shù),其中該指令包含于一個(gè)程序線程中;當(dāng)該參數(shù)等于第一數(shù)值時(shí),則根據(jù)該指令掛起該程序線程的執(zhí)行。在該方法的一些其它實(shí)施例當(dāng)中,該方法還包含一個(gè)步驟當(dāng)該參數(shù)等于第二數(shù)值時(shí),根據(jù)該指令而重新調(diào)度該程序線程,其中該第二數(shù)值不等于該第一數(shù)值。
根據(jù)本發(fā)明的另一方面,在一個(gè)能夠支持多程序線程的處理器當(dāng)中,提供了一個(gè)方法,包括執(zhí)行一個(gè)指令,該指令存取與線程調(diào)度相關(guān)的一個(gè)參數(shù),其中該指令包含于一個(gè)程序線程中;當(dāng)該參數(shù)等于第一數(shù)值時(shí),則根據(jù)該指令重新調(diào)度該程序線程。在該方法的一些實(shí)施例當(dāng)中,該方法還包括一個(gè)步驟當(dāng)該參數(shù)等于第二數(shù)值時(shí),根據(jù)該指令釋放該程序線程,其中該第二數(shù)值不等于該第一數(shù)值。
本發(fā)明的實(shí)施例將在下文中更加詳細(xì)的描述,在這些實(shí)施例中將第一次提供一種用于細(xì)粒度多線程的真正強(qiáng)壯的系統(tǒng),使得產(chǎn)生與消滅線程所用的系統(tǒng)開(kāi)銷(xiāo)最小化。
圖1A是一個(gè)示意圖,顯示單一指令流由于高速緩存丟失而停頓的情況;圖1B是一個(gè)示意圖,顯示當(dāng)如圖1A的指令流被停頓時(shí)一個(gè)指令流仍然能被執(zhí)行;圖2A是一個(gè)示意圖,顯示單一線程處理器;圖2B是一個(gè)示意圖,顯示雙線程處理器250;圖3是一個(gè)示意圖,描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)處理器支持第一與第二VPE;圖4是一個(gè)示意圖,描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)處理器能夠支持單一VPE,該VPE能進(jìn)一步支持三個(gè)線程;圖5顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)FORK指令的格式;圖6顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)YIELD指令的格式;圖7是一個(gè)表格,顯示了一個(gè)用于GPR rs的十六位的限定掩碼;圖8顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)MFTR指令的格式;圖9是一個(gè)表格,說(shuō)明了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)MFTR指令的字段;圖10顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)MTTR指令的格式;圖11是一個(gè)表格,說(shuō)明了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)MTTR指令u和sel位;圖12顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)EMT指令的格式;圖13顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)DMT指令的格式;圖14顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ECONF指令的格式;圖15是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)系統(tǒng)協(xié)處理器特權(quán)資源的說(shuō)明表格;圖16是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadControl寄存器的架構(gòu);圖17是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadControl寄存器架構(gòu)中各字段的說(shuō)明表格;圖18是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadStatus寄存器的架構(gòu);圖19是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadStatus寄存器架構(gòu)中各字段的說(shuō)明表格;圖20是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadContext寄存器的架構(gòu);圖21是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadConfig寄存器的架構(gòu);圖22是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadConfig寄存器架構(gòu)中各字段的說(shuō)明表格;圖23是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)ThreadSchedule寄存器的架構(gòu);圖24是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)VPESchedule寄存器的架構(gòu);圖25是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)Config4寄存器的架構(gòu);
圖26是根據(jù)本發(fā)明的一個(gè)實(shí)施例中,一個(gè)Config4寄存器架構(gòu)中各字段的說(shuō)明表格;圖27是一個(gè)表格,定義了線程異常所需的Cause寄存器的異常代碼值;圖28是一個(gè)表格,定義了ITC指示符;圖29是一個(gè)表格,定義了Config3寄存器架構(gòu)中的各字段;圖30是一個(gè)表格,描述了每個(gè)VPE上下文的VPE禁止位;圖31是一個(gè)表格,描述了ITC儲(chǔ)存的運(yùn)作方式;圖32是一個(gè)示意圖,描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例中的YIELD功能的操作;圖33是一個(gè)示意圖,描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的一個(gè)計(jì)算機(jī)操作系統(tǒng);圖34是一個(gè)示意圖,描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例中,在一個(gè)處理器中使用VPE和在一個(gè)VPE中使用線程來(lái)實(shí)施調(diào)度。
具體實(shí)施例方式
根據(jù)本發(fā)明的一個(gè)較佳實(shí)施例,一處理器架構(gòu)包括一指令集,而該指令集包含多個(gè)特征、多個(gè)功能與多個(gè)指令,而能夠在一兼容處理器上產(chǎn)生多線程的運(yùn)算。本發(fā)明并不止限于任何特定的處理器架構(gòu)與指令集,而是可以大致歸類為眾所皆知而參照的MIPS架構(gòu),指令集與處理器技術(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ù)字處理器”其意義包含任何可程序化的裝置(舉例來(lái)說(shuō),微處理器、微控制器、數(shù)字信號(hào)處理器、中央處理單元、處理器內(nèi)核等等),包含在硬件方面(例如,專用硅芯片、現(xiàn)場(chǎng)可程序門(mén)陣列(FPGA)等等),在軟件方面(例如,硬件描述語(yǔ)言、C語(yǔ)言、C+語(yǔ)言等等)或任何其組成(或其組合)。
術(shù)語(yǔ)“線程”與“程序線程”在本文中代表相同的意義。
概要描述在本發(fā)明的實(shí)施例中,“線程上下文”是一處理器狀態(tài)的集合,用于描述在一處理器上的一指令流執(zhí)行的狀態(tài)。所說(shuō)的狀態(tài)通常反映在處理器寄存器的內(nèi)容中。舉例來(lái)說(shuō),在一個(gè)與工業(yè)規(guī)格MIPS32和/或MIPS64指令集架構(gòu)兼容的處理器(MIPS處理器)中,線程上下文為由通用寄存器(GPRs),高低(Hi/Lo)乘法結(jié)果寄存器,有程序計(jì)數(shù)器(PC)功能和一些相關(guān)的特權(quán)系統(tǒng)控制狀態(tài)的寄存器組成。系統(tǒng)控制狀態(tài)在MIPS處理器中通常稱作第零協(xié)處理器(CP0)的部分保留,并且一大部分是被系統(tǒng)控制寄存器與翻譯后援緩存器(Translation Lookaside Buffer,TLB)所保存(如果使用了TLB)。相反的,“處理器上下文”是一個(gè)更大的處理器狀態(tài)集合,包含至少一個(gè)線程上下文。再參照之前提到的MIPS處理器為例,一個(gè)處理器上下文包含至少一個(gè)線程上下文(如前述),也就是CP0和必須的系統(tǒng)狀態(tài),用以描述已知的MIPS32與MIPS64專屬資源或特權(quán)資源架構(gòu)(PRA)。(簡(jiǎn)單的說(shuō),PRA是一組有關(guān)一個(gè)指令集架構(gòu)操作時(shí)所依據(jù)的環(huán)境與能力參數(shù)的集合。該P(yáng)RA提供了操作系統(tǒng)所必須的機(jī)制用以管理處理器的資源,例如,虛擬內(nèi)存、高速緩存、異常運(yùn)算與使用者上下文)。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,關(guān)于一指令集架構(gòu)與PRA的一個(gè)特殊應(yīng)用擴(kuò)充的多線程(multithreading application-specific extensions,Multithreading ASE)允許在一處理器中包含兩個(gè)不同,但并不互相排斥的多線程性能。首先,一個(gè)單一處理器可以有一定數(shù)目的處理器上下文,而其中每一個(gè)都透過(guò)共享某些處理器的資源且支持一個(gè)指令集架構(gòu)而作為獨(dú)立的處理單元操作。這些獨(dú)立的處理單元在這里被稱為虛擬處理單元(VPE)。對(duì)軟件而言,具有N個(gè)VPE的處理器被看成是有N個(gè)路徑且對(duì)稱的多處理器(SMP)。這允許已有的具SMP功能的操作系統(tǒng)可以管理VPE集合,也就是透明地共享處理器的執(zhí)行單元。
圖3用一個(gè)單一處理器301描述了相關(guān)的性能,其支持了一個(gè)第一VPE(VPE0),VPE0包含第零寄存器狀態(tài)302與第零系統(tǒng)協(xié)處理器狀態(tài)304。處理器301也支持第二VPE(VPE1),其包含第一寄存器狀態(tài)306與第一系統(tǒng)協(xié)處理器狀態(tài)308。VPE0與VPE1共享處理器301的這些部分,包括取指、譯碼、管線化執(zhí)行和高速緩存310。與SMP兼容的操作系統(tǒng)320被執(zhí)行在該處理器301上,并支持VPE0與VPE1。如圖所示,軟件進(jìn)程A 322與進(jìn)程C 326分別被執(zhí)行于VPE0與VPE1上,如同他們被執(zhí)行于兩個(gè)不同的處理器上。進(jìn)程B 324處于隊(duì)列狀態(tài),而可以在VPE0或VPE1的任一個(gè)上執(zhí)行。
多線程ASE所允許的第二個(gè)能力為,每個(gè)處理器或VPE皆可以在基本架構(gòu)中所需的單一線程上下文之外,再含有某些數(shù)目的線程上下文。多線程VPEs需要特別的操作系統(tǒng)支持,并且在其支持下提供一個(gè)簡(jiǎn)易、細(xì)粒度多線程程序模型,其中線程可以被產(chǎn)生與消滅,使得在一般的情況下不會(huì)干擾操作系統(tǒng),并且系統(tǒng)服務(wù)線程可以響應(yīng)外部條件(例如,事件等等)安排調(diào)度,而沒(méi)有中斷的延遲。
圖4描述了這第二個(gè)能力且使用了處理器401來(lái)支持單一VPE,其包含寄存器狀態(tài)402,404與406(支持三個(gè)線程422)以及系統(tǒng)協(xié)處理器狀態(tài)408。與圖3不同的是,在這個(gè)例子中三個(gè)線程是在單一應(yīng)用地址空間中,且在單一VPE上共享CP0資源(以及硬件資源)。另外也描述了一個(gè)專門(mén)多線程操作系統(tǒng)420。在此范例中,多線程VPE正在處理來(lái)自一個(gè)寬帶網(wǎng)絡(luò)450的數(shù)據(jù)包,而此數(shù)據(jù)包的下載分布于整組的先進(jìn)先出緩沖器(FIFO)452(在多線程VPE的輸入/輸出內(nèi)存空間中每個(gè)FIFO皆有不同的地址)。控制應(yīng)用程序產(chǎn)生了足夠多的線程,與使用的FIFO數(shù)目相同,且將每一線程應(yīng)用于在讀取FIFO的緊湊循環(huán)中。
一個(gè)線程上下文可以是四種狀態(tài)之一。其可以是空閑(free),激活(activated),停止(halted)或連線(wired)。一個(gè)空閑的線程上下文不具有有效的內(nèi)容,且不能被調(diào)度為可發(fā)出指令。一個(gè)激活的線程上下文可以根據(jù)實(shí)施的規(guī)則來(lái)調(diào)度,而從程序計(jì)數(shù)器提取與發(fā)出指令。一個(gè)停止的線程上下文可以具有有效的內(nèi)容,但是不能夠提取與發(fā)出指令。一個(gè)連線的線程上下文可以被指定作為映像寄存器使用,也就是說(shuō)其被保留成專用于異常處理程序,以避免在該異常處理程序中儲(chǔ)存與恢復(fù)存儲(chǔ)器上下文所產(chǎn)生的開(kāi)銷(xiāo)。一個(gè)空閑的線程上下文不可以是激活,停止或連線的。只有激活的線程上下文可以被調(diào)度。只有空閑的線程上下文可以被分配而產(chǎn)生新的線程。
為了允許協(xié)同線程的細(xì)粒度同步,一個(gè)供線程內(nèi)部之間溝通(ITC)的記憶空間在虛擬內(nèi)存中被產(chǎn)生,并且有空(empty)/滿(full)位語(yǔ)法用來(lái)允許線程在加載或儲(chǔ)存時(shí)被阻塞,直到數(shù)據(jù)被其它線程產(chǎn)生或消耗。
線程產(chǎn)生/消滅與同步特性在一般情況下不會(huì)干預(yù)操作系統(tǒng),但是他們所操控的資源可通過(guò)操作系統(tǒng)將之虛擬化。這允許了多線程程序可以利用更多的虛擬線程執(zhí)行,其數(shù)目多于在一個(gè)VPE上的線程上下文數(shù)目,而使得線程的遷移能平衡多處理器系統(tǒng)的負(fù)荷。
再仔細(xì)的從執(zhí)行過(guò)程的某個(gè)點(diǎn)來(lái)看,一個(gè)線程與一個(gè)特定VPE上的一個(gè)特定線程上下文捆綁在一起。VPE的線程上下文組合的索引在該點(diǎn)的發(fā)生時(shí)間提供了一個(gè)唯一的標(biāo)識(shí)符。但是上下文的切換與遷移能夠使單一相繼的線程的執(zhí)行具有一連串不同的線程索引,例如是在一連串不同的VPE上。
在一個(gè)特定的處理器重置調(diào)整狀態(tài)中執(zhí)行線程上下文、TLB項(xiàng)目和其它資源與同一處理器上多個(gè)VPE的動(dòng)態(tài)綁定。每一個(gè)VPE輸入其重置向量,如同它就是一個(gè)獨(dú)立的處理器。
多線程的執(zhí)行和異常模型多線程ASE并沒(méi)有強(qiáng)加任何特殊的實(shí)現(xiàn)方式或調(diào)度模型用于并行線程與VPE的執(zhí)行。調(diào)度方式可以是循環(huán)式的,任意粒度的時(shí)間切割或同時(shí)的。然而沒(méi)有一個(gè)實(shí)現(xiàn)方式允許一個(gè)阻塞的線程獨(dú)占任何共享的處理器資源,然后使得硬件運(yùn)行陷入死鎖。
在一MIPS處理器中,多個(gè)線程執(zhí)行在一個(gè)單一VPE上,并皆共享一樣的系統(tǒng)協(xié)處理器(CP0),一樣的TLB和一樣的虛擬地址空間。每一個(gè)線程有一個(gè)獨(dú)立的內(nèi)核/監(jiān)督者/使用者狀態(tài),用于內(nèi)存訪問(wèn)與指令譯碼。當(dāng)一個(gè)異常發(fā)生時(shí),除了執(zhí)行該異常的線程之外,所有的線程都被停止或掛起,直到狀態(tài)字符串的EXL與ERL位被清除?;蛘?,在EJTAG調(diào)試異常的情形下,退出該調(diào)試狀態(tài)。該狀態(tài)字符串被置于CP0中的狀態(tài)寄存器中。有關(guān)該EXL與ERL位還有EJTAG調(diào)試異常的詳細(xì)資料可以從下列的兩個(gè)出版物獲得,可以從MIPS科技公司取得該出版物,并且其全部?jī)?nèi)容在各種情形下可列為本文的參考文件MIPS32TMArchitecture for Programmers Volumn IIITheMIPS32TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)和MIPS64TMArchitecture for Programmers Volumn IIITheMIPS64TMPrivileged Resource Architecture,Rev.2.00,MIPS科技公司(2003)。
因?yàn)閳?zhí)行一個(gè)指令流而引起的同步異常的異常處理程序,例如TLB的丟失與浮點(diǎn)的異常,都由用于執(zhí)行該指令流的該線程來(lái)執(zhí)行。當(dāng)一個(gè)未被屏蔽的異步異常,例如一個(gè)中斷,被提升至一個(gè)VPE時(shí),它的實(shí)現(xiàn)與執(zhí)行了該異常處理程序的那個(gè)線程相關(guān)。
甚至當(dāng)使用影像寄存器組來(lái)執(zhí)行例外處理程序時(shí),每一個(gè)異常都與一個(gè)線程上下文有關(guān)。這個(gè)相關(guān)的線程上下文是被異常處理程序執(zhí)行的RDPGPR與WRPGPR指令所要處理的目標(biāo)。有關(guān)RDPGPR與WRPGPR指令(用來(lái)訪問(wèn)影像寄存器)的詳細(xì)描述可以從以下兩個(gè)出版物中獲得,可以從MIPS科技公司取得該出版物,并且其全部?jī)?nèi)容在各種情形下可列為本文的參考文件MIPS32TMArchitecture forProgrammers Volumn IIIThe MIPS32TMInstruction Set,Rev.2.00,MIPS科技公司(2003)和MIPS64TMArchitecture for ProgrammersVolumn IIIThe MIPS64TMInstruction Set,Rev.2.00,MIPS科技公司(2003)。
該多線程ASE包含了兩個(gè)異常狀況。第一個(gè)是線程未取得的狀況,其中一個(gè)線程分配要求不能被滿足。第二個(gè)為線程下溢狀況,其中一個(gè)線程的終止與釋放使得沒(méi)有線程被分配于一個(gè)VPE上。這兩種異常狀況都被映射至一個(gè)新的單一線程異常。當(dāng)該異常發(fā)生時(shí),他們可以根據(jù)CP0寄存器的位設(shè)置而被區(qū)分。
指令在一個(gè)較佳的實(shí)施例中,多線程ASE包含七個(gè)指令。FORK與YIELD指令控制線程分配,釋放和調(diào)度,并且可以在被執(zhí)行和使能的全部執(zhí)行模式中取得。MFTR與MTTR指令是系統(tǒng)協(xié)處理器(Cop0)指令,可用于特權(quán)系統(tǒng)軟件來(lái)管理線程狀態(tài)。一個(gè)新的EMT指令與一個(gè)新的DMT指令是特權(quán)的Cop0指令,其用來(lái)激活與禁能一個(gè)VPE的多線程操作。最后,一個(gè)新的ECONF指令是特權(quán)的Cop0指令,用于退出一個(gè)特殊處理器配置狀態(tài)并重新初始化該處理器。
FORK-分配與調(diào)度一個(gè)新的線程FORK指令可以驅(qū)使一個(gè)空閑線程上下文被分配與激活。它的格式500如圖5所示。FORK指令從由字段502(rs)與504(rt)標(biāo)識(shí)的GPR(通用寄存器)取得兩個(gè)操作數(shù)值。GPR rs的內(nèi)容是用來(lái)對(duì)新線程開(kāi)始提取與執(zhí)行的地址。GPR rt的內(nèi)容是一個(gè)值,用來(lái)傳送至新線程的GPR。目的GPR由CP0的ThreadConfig寄存器的ForkTarget字段的值確定,其說(shuō)明位于圖21中,并于稍后會(huì)加以描述。新線程的內(nèi)核/監(jiān)督者/使用者狀態(tài)被設(shè)定于FORK處理的線程中。如果沒(méi)有空閑線程上下文給該FORK指令使用,產(chǎn)生關(guān)于該FORK指令的一個(gè)線程異常。
YIELD-重調(diào)度與有條件的釋放一個(gè)線程YIELD指令使得當(dāng)前的線程被重新調(diào)度。它的格式600如圖6所示,并且圖32中的流程圖3200描述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)操作,來(lái)說(shuō)明YIELD指令的功能。
YIELD指令例如從字段602(rs)中指定的GPR得到一個(gè)單一操作數(shù)值。在一較佳實(shí)施例中使用了一個(gè)GPR,但是在其它的實(shí)施例中,該操作數(shù)值可以在實(shí)質(zhì)上任何可由系統(tǒng)訪問(wèn)的數(shù)據(jù)儲(chǔ)存裝置(例如,非GPR寄存器,內(nèi)存等等)中被儲(chǔ)存或取得。在一實(shí)施例中,GPR rs的內(nèi)容可以被視為是一個(gè)描述符,描述了一個(gè)發(fā)出的線程應(yīng)該被重新調(diào)度的情況。如果該GPR rs的內(nèi)容是零(即該操作數(shù)的值為零),如圖32的步驟3202所示,則該線程并不會(huì)被重調(diào)度,而是會(huì)如同步驟3204所示被釋放(即,終止或永久的停止更進(jìn)一步的執(zhí)行),并且與其相關(guān)的線程上下文的儲(chǔ)存器(即上述提到的用于保存狀態(tài)的寄存器)變成空閑,從而可以被其它線程發(fā)出的接下來(lái)的FORK指令進(jìn)行分配。如果該GPR rs的最低有效位被設(shè)定(即,rs0=1),則如圖32的步驟3206所示該線程馬上被重新調(diào)度,并且如果沒(méi)有其它可執(zhí)行的線程搶先的話,就繼續(xù)執(zhí)行該線程。在該實(shí)施例中,該GPR rs的內(nèi)容被視為15位的限定符掩碼,如圖7中表格700的描述(即,用于編碼各種條件的位向量)。
請(qǐng)參照表格700,寄存器rs的位15至位10表示提供給處理器的硬件中斷信號(hào),位9至位8表示處理器中產(chǎn)生的軟件中斷信號(hào),位7至位6表示MIPS架構(gòu)中最基本地關(guān)聯(lián)加載(Load Linked)和條件存儲(chǔ)(Store Conditional)同步原語(yǔ)的操作,還有位5至位2表示提供給處理器的外部非中斷信號(hào)。
如果GPR rs的內(nèi)容值是一偶數(shù)(即,位0未被設(shè)定),并且GPRrs的限定符掩碼中的任何其他位皆被設(shè)定(步驟3208),則該線程被掛起,直到滿足至少一個(gè)對(duì)應(yīng)條件。如果當(dāng)此情形發(fā)生,該線程就被重新調(diào)度(步驟3210),并且從YIELD之后的指令重新開(kāi)始執(zhí)行。這個(gè)過(guò)程的使能并不會(huì)受CP0.Status.iMn中斷屏蔽位的影響,因此總共有被位15至10和位5至2(如圖7所示)編碼的十個(gè)外部條件(例如,事件等等)以及被位9至6(如圖7所示)編碼的四個(gè)軟件條件,在目前的實(shí)施例中被用來(lái)響應(yīng)外部信號(hào)以使能獨(dú)立的線程,而不需要處理器執(zhí)行異常處理。在這個(gè)特定例子中,有六個(gè)硬件中斷和四個(gè)非中斷信號(hào),再加上兩個(gè)軟件中斷和兩個(gè)非中斷信號(hào),最后再加上一個(gè)專用于重調(diào)度功能的信號(hào)(即rs0),總共對(duì)應(yīng)于十五個(gè)條件。(該CP0.Status.iMn中斷屏蔽位是在CP0 Status寄存器中的一個(gè)八位的集合,其可選擇性地屏蔽MIPS處理器的八個(gè)基本的中斷輸入。如果一個(gè)IM位被設(shè)定,則其它相關(guān)的中斷輸入就不會(huì)引起處理器的異常事件。)在EIC的中斷模式中,位IP2至IP7對(duì)有最高優(yōu)先權(quán)的中斷進(jìn)行編碼,而不只是表示了一個(gè)有正交指示的向量。當(dāng)處理器使用EIC的中斷模式時(shí),在一個(gè)YIELD指令中與位IP2至IP7相關(guān)聯(lián)的GPR rs的位因此不再能夠被用于針對(duì)一個(gè)特定外部事件去重新使能一個(gè)線程。在EIC的中斷模式中,只有與系統(tǒng)相關(guān)連的外部事件指示符(例如,在本實(shí)施例中,是GPR rs的位5至2)可以被用作YIELD的限定符。EIC的中斷模式與位IP2至IP7已被更進(jìn)一步地描述于下列的出版物,上文中已經(jīng)指出并引用了該出版物的整個(gè)內(nèi)容MIPS32TMArchitecture for Programmers Volumn IIIThe MIPS32TMPrivilegedResource Architecture,與MIPS64TMArchitecture for ProgrammersVolumn IIIThe MIPS64TMPrivileged Resource Architecture。
如果執(zhí)行YIELD的結(jié)果是對(duì)于處理器或VPE上最近分配的線程的釋放,則關(guān)于該YIELD指令產(chǎn)生一個(gè)線程異常,具有在CP0的ThreadStatus寄存器中的下溢指示(如圖18所示且在稍后會(huì)加以說(shuō)明)。
上述實(shí)施例使用了YIELD指令的GPR rs中所包含的操作數(shù)作為線程調(diào)度的參數(shù)。在該例子中,這個(gè)參數(shù)被看作一個(gè)15位的正交指示的向量(參照?qǐng)D7,位1與15被保留,所以在此較佳實(shí)施例中只有十五個(gè)條件被編碼)。此實(shí)施例也將此參數(shù)當(dāng)成是一個(gè)指定的值(即,用于決定是否一個(gè)給定的線程應(yīng)該被釋放,參考圖32的步驟3202)。然而,這樣一個(gè)參數(shù)的特性可以被改變,以適合各種不同指令的實(shí)施例。例如,不是依靠最低有效位(即rs0)來(lái)決定是否一個(gè)線程可被立即重新調(diào)度,而是使用該參數(shù)本身的值(例如,二進(jìn)制補(bǔ)碼形式的負(fù)一{-1})來(lái)決定一個(gè)線程是不是應(yīng)該被立即重新調(diào)度(即,用于調(diào)度的重新排隊(duì))。
在該指令的其他實(shí)施例中,可以將這樣的線程調(diào)度參數(shù)看作包含一個(gè)或多個(gè)多位值的字段,以使得一個(gè)線程可以確定,它將關(guān)于一個(gè)大的時(shí)間名空間(例如,32位或更大)中的一個(gè)單一事件而產(chǎn)生。在這樣的實(shí)施例中,至少與該目標(biāo)事件有關(guān)的位可以被當(dāng)前YIELD指令訪問(wèn)。當(dāng)然,如一特定實(shí)施例所期望的,更多的位字段可被傳送至該指令(與更多的事件相關(guān)聯(lián))。
該YIELD指令的其他實(shí)施例,在由該指令訪問(wèn)的一個(gè)線程調(diào)度參數(shù)中可以包含前述位向量與值字段的組合,或其它具體應(yīng)用的改進(jìn)和提高,(例如)以滿足特定實(shí)現(xiàn)的需要。YIELD指令的可選實(shí)施例可以用任何已知方法訪問(wèn)如前所述的一個(gè)線程調(diào)度的參數(shù),例如,從一個(gè)GPR(如圖6所示),從任意其它的數(shù)據(jù)存儲(chǔ)裝置(包含內(nèi)存)以及作為該指令本身中的立即值。
MFTR-從線程寄存器移動(dòng)MFTR指令是一個(gè)特權(quán)(Cop0)指令,可允許一個(gè)操作系統(tǒng)執(zhí)行一個(gè)線程來(lái)訪問(wèn)另一個(gè)不同的線程上下文。其格式800被描述于圖8。
要被訪問(wèn)的線程上下文由CP0的ThreadControl寄存器的AlternateThread字段的值確定,該字段如圖16所示并且會(huì)在稍后描述。在選定的線程上下文中,要被讀取的寄存器由字段802標(biāo)定的rt操作數(shù)寄存器的值,和分別位于該MFTR指令的字段804與806中的u與sel位來(lái)確定,并且依據(jù)圖9所示的表格900進(jìn)行說(shuō)明。產(chǎn)生的值被寫(xiě)入由字段808標(biāo)定的目的寄存器rd。
MTTR-向線程寄存器移動(dòng)MTTR指令與MFTR指令相反。它是一個(gè)特權(quán)Cop0指令,其將當(dāng)前線程的線程上下文中的寄存器值復(fù)制到另一個(gè)線程上下文的寄存器中。其格式1000如圖10所示。
要被訪問(wèn)的線程上下文由CP0的ThreadControl寄存器的AlternateThread字段的值確定,該字段如圖16所示并且會(huì)在稍后描述。在選定的線程上下文中,要被寫(xiě)入的寄存器由字段1002標(biāo)定的rd操作數(shù)寄存器中的值,結(jié)合分別在該MTTR指令的字段1004與1006中提供的u與sel位來(lái)確定,并且依據(jù)在圖11中所顯示的表格1100進(jìn)行解釋(其編碼相似于MFTR)。由字段1008標(biāo)定的寄存器rt中的值被復(fù)制到選定的寄存器。
EMT-使能多線程EMT指令為特權(quán)Cop0指令,其通過(guò)設(shè)定CP0的ThreadControl寄存器的TE位來(lái)使能多個(gè)線程的并行執(zhí)行,該寄存器如圖16所示并且會(huì)在稍后描述。該指令的格式1200顯示于圖12。包含在該EMT執(zhí)行之前的TE(Thread Enabled)位值的該ThreadControl寄存器的值會(huì)被傳回寄存器rt。
DMT-禁能多線程DMT指令為特權(quán)Cop0指令,其通過(guò)清除CP0的ThreadControl寄存器的TE位來(lái)禁止多線程的并行執(zhí)行,該寄存器如圖16所示并且會(huì)在稍后描述。該指令的格式1300顯示于圖13。
除了發(fā)出該DMT指令的線程之外,所有的線程都被禁止進(jìn)一步的指令提取與執(zhí)行。這與所有線程暫停狀態(tài)是無(wú)關(guān)的。包含該DMT執(zhí)行之前的TE(Thread Enabled)位值的該ThreadControl寄存器的值會(huì)被傳回寄存器rt。
ECONF-結(jié)束處理器的配置ECONF指令為一特權(quán)Cop0指令,其通知VPE配置的結(jié)束,并使能多VPE的執(zhí)行。該指令的格式1400顯示于圖14。
當(dāng)一個(gè)ECONF指令被執(zhí)行時(shí),Config3寄存器的VPC位(稍后描述)即被清除,而該寄存器的MVP位的當(dāng)前值也變成只讀,并且處理器的所有VPE,包含正在執(zhí)行ECNOF的這個(gè)VPE,都產(chǎn)生一個(gè)Reset異常。
特權(quán)資源(Privileged Resource)圖15的表格1500列出了系統(tǒng)協(xié)處理器的與多線程ASE相關(guān)的特權(quán)資源。除了特別的說(shuō)明之外,不管是新的還是修改過(guò)的第零協(xié)處理器(CP0)的如下所述的寄存器都是可訪問(wèn)的(即,寫(xiě)入和讀出),就像傳統(tǒng)的第零協(xié)處理器(即,MIPS處理器)的系統(tǒng)控制寄存器一樣。
新的特權(quán)資源(A)ThreadControl寄存器(CP0寄存器號(hào)碼7,選擇號(hào)碼1)該ThreadControl寄存器是在每個(gè)VPE中作為系統(tǒng)協(xié)處理器的一個(gè)部分。其結(jié)構(gòu)1600顯示于圖16。該ThreadControl寄存器的字段可根據(jù)圖17的表格1700來(lái)設(shè)定。
(B)ThreadStatus寄存器(CP0寄存器號(hào)碼12,選擇號(hào)碼4)該ThreadStatus寄存器存在于每個(gè)線程上下文中。每一個(gè)線程皆有其ThreadStatus的拷貝,并且特權(quán)程序代碼可以通過(guò)MFTR與MTTR指令訪問(wèn)其它線程的ThreadStatus。其結(jié)構(gòu)1800顯示于圖18。該ThreadStatus寄存器的字段可根據(jù)圖19的表格1900來(lái)設(shè)定。
在一個(gè)激活線程的Halted位寫(xiě)入一個(gè)1,會(huì)使得該激活線程停止提取指令,并且將內(nèi)部重啟動(dòng)程序計(jì)數(shù)器(PC)設(shè)定到下一個(gè)發(fā)出的指令。在一個(gè)激活線程的Halted位寫(xiě)入一個(gè)0,使得被調(diào)度的該線程從內(nèi)部重啟動(dòng)程序計(jì)數(shù)器(PC)地址提取和執(zhí)行指令。只要在未被激活的線程的Activated位或是Halted位中有任一為1,則該線程就可避免被一個(gè)FORK指令分配和激活。
(C)ThreadContext寄存器(CP0寄存器號(hào)碼4,選擇號(hào)碼1)該ThreadContext寄存器2000存在于每個(gè)線程上下文中,并且如圖20所示其長(zhǎng)度與處理器的GPR是相同的。這純粹是一個(gè)軟件可讀/寫(xiě)的寄存器,可被操作系統(tǒng)用作特定線程儲(chǔ)存的指針,例如一個(gè)線程上下文保存的區(qū)域。
(D)ThreadConfig寄存器(CP0寄存器號(hào)碼6,選擇號(hào)碼1)該ThreadConfig寄存器存在于每個(gè)處理器或VPE中。其結(jié)構(gòu)2100顯示于圖21中。該ThreadConfig寄存器的字段被定義在圖22的表格2200中。
ThreadConfig寄存器的WiredThread字段允許在一個(gè)VPE上可獲得的線程上下文的集合在影像寄存器集合與并行執(zhí)行線程之間被分割。線程上下文的索引若是小于該WireThread的值,則可從影像寄存器獲得該線程上下文。
(E)ThreadSchedule寄存器(CP0寄存器號(hào)碼6,選擇號(hào)碼2)ThreadSchedule寄存器是選擇性的,但是當(dāng)被實(shí)現(xiàn)時(shí),最好被實(shí)現(xiàn)于每個(gè)線程中。其結(jié)構(gòu)2300顯示于圖23中。
調(diào)度向量(Schedule Vector)(如圖所示,在一較佳實(shí)施例中其寬度為32位)為對(duì)于相關(guān)線程進(jìn)行調(diào)度所要求的發(fā)出帶寬的描述。在此實(shí)施例中,每一位皆代表該處理器或VPE的發(fā)出帶寬的1/32,并且每一位的位置代表了在有32個(gè)時(shí)段的調(diào)度循環(huán)中的一個(gè)明確的時(shí)段。
如果在一個(gè)線程的ThreadSchedule寄存器中設(shè)定了一位,那么該線程即被保證了在相關(guān)的處理器或VPE上每32個(gè)可能的連續(xù)發(fā)出中,可獲得一個(gè)對(duì)應(yīng)的發(fā)出時(shí)段。在ThreadSchedule寄存器的一位上寫(xiě)入一個(gè)1,當(dāng)相同處理器或VPE上的其它線程已經(jīng)具有一樣的ThreadSchedule位設(shè)定時(shí),則將產(chǎn)生線程異常。雖然在這里,ThreadSchedule寄存器的優(yōu)選寬度是32位,但是可以預(yù)料的到,在其它的實(shí)施例中該寬度可以改變(即,增加或減少)。
(F)VPESchedule寄存器(CP0寄存器號(hào)碼6,選擇號(hào)碼3)VPESchedule寄存器是可選擇的,并且優(yōu)選的存在于每個(gè)VPE中。它只有當(dāng)Config3寄存器的MVP位被設(shè)定時(shí)才能被寫(xiě)入(請(qǐng)參考圖29)。其格式2400顯示于圖24。
調(diào)度向量(如圖所示,在一較佳實(shí)施例中其寬度為32位)為對(duì)于相關(guān)VPE進(jìn)行調(diào)度所要求的發(fā)出帶寬的描述。在此實(shí)施例中,每一位皆代表一個(gè)多VPE處理器的發(fā)出總帶寬的1/32,并且每一位的位置代表了在有32個(gè)時(shí)段的調(diào)度循環(huán)中的一個(gè)明確的時(shí)段。
如果VPE的VPESchedule寄存器中的一個(gè)位被設(shè)定,那么該線程即被保證了在相關(guān)處理器上每32個(gè)可能的連續(xù)發(fā)出中,可獲得一個(gè)對(duì)應(yīng)的發(fā)出時(shí)段。在VPE的VPESchedule寄存器的一位上寫(xiě)入一個(gè)1,當(dāng)其它VPE已經(jīng)具有一樣的VPESchedule位設(shè)定時(shí),則將產(chǎn)生線程異常。
依據(jù)處理器目前默認(rèn)的線程調(diào)度原則(例如,循環(huán)法等等),只要發(fā)出時(shí)段未被任何線程特別的排定,其仍然可被自由的分配給任何可執(zhí)行的VPE/線程。
VPESchedule寄存器與ThreadSchedule寄存器創(chuàng)造了一個(gè)發(fā)出帶寬分配的結(jié)構(gòu)。VPESchedule寄存器的設(shè)定指定了對(duì)于VPE的帶寬,其為在一個(gè)處理器或內(nèi)核上全部可取得帶寬的一定比例,而ThreadSchedule寄存器指定了對(duì)于線程的帶寬,其為在一個(gè)包含線程的VPE中可取得全部帶寬的一定比例。
雖然在這里,VPESchedule寄存器的優(yōu)選寬度是32位,但是可以預(yù)期,在其它的實(shí)施例中該寬度可以改變(即,增加或減小)。
(G)Config4寄存器(CP0寄存器號(hào)碼16,選擇號(hào)碼4)寄存器Config4存在于每一個(gè)處理器中。其包含了對(duì)于動(dòng)態(tài)多VPE處理器配置所必須配置信息。如果處理器并不處于VPE配置狀態(tài)(即,Config3寄存器的VMC位被設(shè)定),則除了M(連續(xù))字段之外的所有字段的值都會(huì)成為與實(shí)施方式有關(guān)且是不可預(yù)測(cè)其結(jié)果的。其結(jié)構(gòu)2500描述于圖25。Config4寄存器的字段的定義如圖26的表格2600中所示。在某些實(shí)現(xiàn)方式或?qū)嵤├校珻onfig3寄存器的VMC位可以是一個(gè)被事先保留/不指定的位。
對(duì)于目前存在的特權(quán)資源架構(gòu)的修改該多線程ASE對(duì)于當(dāng)前MIPS32與MIPS64PRA的一些單元做了變更。
(A)Status寄存器Status寄存器中的CU位對(duì)于多線程配置具有一些額外的意義。設(shè)定CU位的動(dòng)作也就是要求將一個(gè)協(xié)處理器上下文與和該CU位關(guān)聯(lián)的線程綁定。如果一個(gè)協(xié)處理器上下文是可用的,則將它與該線程綁定在一起,以使該線程所發(fā)出的指令能傳送到該協(xié)處理器,并且該CU位會(huì)保留寫(xiě)入該位的1。如果沒(méi)有一個(gè)協(xié)處理器上下文是可用的,則該CU位便會(huì)讀回0。寫(xiě)入一個(gè)0去設(shè)定該CU位,會(huì)使得任何相關(guān)聯(lián)的協(xié)處理器被釋放。
(B)Cause寄存器如圖27所示,線程異常需要有一個(gè)新的Cause寄存器的異常代碼值。
(C)EntryLo寄存器如圖28所示,一個(gè)事先被保留的高速緩存標(biāo)志變成ITC指示符。
(D)Config3寄存器如圖29的表格2900中所示,定義了新的Config3寄存器的字段,用來(lái)表示多線程ASE與多個(gè)線程上下文是否可用。
(E)Ebase如圖30所示,Ebase寄存器的一個(gè)事先被保留的位30變成每個(gè)VPE上下文中的一個(gè)VPE的禁止位。
(F)SRSCtl先前預(yù)設(shè)定的HSS字段現(xiàn)在變成了ThreadConfig寄存器的WiredThread字段的一個(gè)功能。
未使用FORK指令的線程分配與初始化在一較佳實(shí)施例中,一個(gè)操作系統(tǒng)“手動(dòng)”產(chǎn)生一個(gè)線程的過(guò)程如下1.執(zhí)行一個(gè)DMT,用以停止其它線程的執(zhí)行或是可能的FORK指令執(zhí)行。
2.通過(guò)將連續(xù)的值設(shè)定在ThreadControl寄存器的AlternateThread字段,并用MFTR指令來(lái)讀取ThreadStatus寄存器,來(lái)識(shí)別一個(gè)可獲得的線程上下文。一個(gè)空閑的線程在其ThreadStatus寄存器中不會(huì)有Halted或Activated位被設(shè)定。
3.設(shè)定選定線程的ThreadStatus寄存器的Halted位,用以避免其被其它線程配置。
4.執(zhí)行一個(gè)EMT指令去重新使能多線程。
5.使用MTTR指令并使其u字段設(shè)定為1,來(lái)復(fù)制任何需要的GPR至選定的線程上下文。
6.使用MTTR指令并使其u和sel字段設(shè)定為0且rt字段設(shè)定為14(EPC),從而寫(xiě)入所需的開(kāi)始執(zhí)行地址至該線程的內(nèi)部重啟動(dòng)地址寄存器中。
7.使用MTTR指令將0和1分別寫(xiě)入選定的ThreadStatus寄存器的Halted位和Activated位。
然后該新分配的線程可以被調(diào)度。如果在該過(guò)程中設(shè)定了EXL或ERL,由于他們隱含了禁止多線程的執(zhí)行,則執(zhí)行DMT,設(shè)定新線程的Halted位和執(zhí)行EMT的這些步驟可以被省略。
未使用YIELD指令的線程的終止和釋放在本發(fā)明的一較佳實(shí)施例中,一個(gè)操作系統(tǒng)用來(lái)終止當(dāng)前線程的過(guò)程如下1.如果操作系統(tǒng)不支持關(guān)于線程下溢狀態(tài)的線程異常,則使用MFTR指令來(lái)掃描ThreadStatus寄存器的設(shè)定,以檢驗(yàn)在處理器上有另一個(gè)可運(yùn)行的線程,相反的如果沒(méi)有,就向程序發(fā)出錯(cuò)誤信號(hào)。
2.寫(xiě)入任何重要的GPR寄存器的值至內(nèi)存。
3.在Status/ThreadStatus寄存器中,設(shè)定內(nèi)核模式(Kernel mode)。
4.當(dāng)目前的線程維持在一個(gè)特權(quán)狀態(tài)時(shí),清除EXL/ERL來(lái)允許其他線程被調(diào)度。
5.使用一個(gè)標(biāo)準(zhǔn)的MTC0指令來(lái)寫(xiě)入0值至ThreadStatus寄存器的Halted與Activated位。
正常的過(guò)程是一個(gè)線程按照這種方式終止自己。在一個(gè)特權(quán)模式當(dāng)中,一個(gè)線程也可以使用MTTR指令來(lái)終止另一個(gè)線程,只不過(guò)會(huì)有額外的問(wèn)題產(chǎn)生,這時(shí)操作系統(tǒng)需要決定應(yīng)該釋放哪個(gè)線程上下文,以及在哪點(diǎn)上該線程的運(yùn)算狀態(tài)是穩(wěn)定的。
線程間通訊的儲(chǔ)存(Inter-Thread Communication Storage)線程間通訊(ITC)的儲(chǔ)存是一個(gè)可選擇的功能,其可以替代用于細(xì)粒度多線程的關(guān)聯(lián)載入/條件存儲(chǔ)同步方法。因?yàn)橥ㄟ^(guò)載入與儲(chǔ)存的動(dòng)作來(lái)操作,所以這個(gè)ITC存儲(chǔ)在指令集架構(gòu)中是不可見(jiàn)的,但是在特權(quán)資源架構(gòu)中,它是可見(jiàn)的,并且需要有效的微架構(gòu)的支持。
參照虛擬內(nèi)存頁(yè)面,其包含有被標(biāo)示為ITC儲(chǔ)存的TLB項(xiàng)目,可以被歸為是一個(gè)有特定屬性的儲(chǔ)存。每一個(gè)頁(yè)面映射至一組1-128個(gè)64位的存儲(chǔ)位置,其中每一個(gè)存儲(chǔ)位置都有一個(gè)與其相關(guān)的Empty/Full位,并且可以使用標(biāo)準(zhǔn)的載入和儲(chǔ)存指令,以四個(gè)方法之一來(lái)訪問(wèn)該存儲(chǔ)位置。該訪問(wèn)模式被編碼在所產(chǎn)生的虛擬地址的最低有效(和未翻譯)位,如圖31的表格3100所示。
因此每一個(gè)儲(chǔ)存位置可以用C語(yǔ)言的結(jié)構(gòu)來(lái)描述struct{unit64 ef_sync_location;unit64 force_ef_location;unit64 bypass_location;unit64 ef_state;}ITC_location;其中,全部四個(gè)位置都參考潛在存儲(chǔ)空間的相同64位。當(dāng)每次訪問(wèn)實(shí)施同樣的Empty/Full協(xié)議時(shí),該儲(chǔ)存的參考可以具有小于64位的訪問(wèn)類型(例如,LW,LH,LB)。
Empty與Full位不相同,因此不相互耦合的多項(xiàng)目數(shù)據(jù)緩沖器,如FIFO,可以被映射至ITC儲(chǔ)存空間。
可以通過(guò)向和從通用儲(chǔ)存器復(fù)制{bypass_location,ef_state}對(duì)的方式來(lái)保存和恢復(fù)ITC的存儲(chǔ)。嚴(yán)格的說(shuō),當(dāng)64位的bypass_location必須被保留時(shí),只有ef_state的最低有效位需要被操控。在多項(xiàng)目的數(shù)據(jù)緩沖器中,每一個(gè)位置必須被讀取直到Empty位,從而通過(guò)拷貝讀出該緩沖器的內(nèi)容。
每4K頁(yè)面的位置數(shù)目與每一個(gè)VPE的ITC頁(yè)面的數(shù)目都是VPE或處理器可以設(shè)定的參數(shù)。
ITC儲(chǔ)存的“物理地址空間”可以是全局的,跨越一個(gè)多處理器系統(tǒng)中的所有VPE和處理器,這樣一個(gè)線程便可以從正在執(zhí)行該線程的一個(gè)VPE同步到另一個(gè)不同VPE的一個(gè)位置上。全局的ITC儲(chǔ)存地址可以從每一個(gè)VPE的EBase寄存器的CPUNum字段上取得。該CPUNum的10個(gè)位對(duì)應(yīng)于ITC儲(chǔ)存地址的10個(gè)有效位。一般為了單處理器的應(yīng)用所設(shè)計(jì)的處理器或內(nèi)核不需要輸出一個(gè)物理接口至ITC儲(chǔ)存,并且可以將其作為一個(gè)處理器內(nèi)部的資源。
多VPE處理器一個(gè)內(nèi)核或處理器可以實(shí)現(xiàn)多個(gè)共享資源的VPE,如共享功能單元。每一個(gè)VPE都可以看到自己的在MIPS32或MIPS64指令中的具體實(shí)施和特權(quán)資源架構(gòu)。每一個(gè)都可以看到自己的寄存器堆或線程上下文陣列,并且也可看到自己的CP0系統(tǒng)協(xié)處理器和自己的TLB狀態(tài)。對(duì)于在具有2-CPU高速緩存相干的SMP多處理器的軟件而言,在同一個(gè)處理器上的兩個(gè)VPE是無(wú)法區(qū)分的。
一個(gè)處理器上的每個(gè)VPE都可以在CP0在Ebase寄存器的CPUNum字段中看到一個(gè)不同的值。
處理器架構(gòu)上的資源,如線程上下文,TLB儲(chǔ)存和協(xié)處理器,可以在硬件式的配置下與VPE綁定,或者可以在一個(gè)支持必須的配置能力的處理器中被動(dòng)態(tài)地配置。
重置與虛擬處理器配置為了能夠反向兼容MIPS32與MIPS64PRA,在重置時(shí),一個(gè)可配置的多線程/多VPE處理器必須具有完全的默認(rèn)線程/VPE配置。一般的情形下都是如此,但是對(duì)于一個(gè)有單一線程上下文的單一VPE卻不一定必須如此。Config3寄存器的MVP位可以在重置時(shí)被取得,用來(lái)決定動(dòng)態(tài)的VPE配置是否是可能的。如果這項(xiàng)能力被忽略,例如在傳統(tǒng)的軟件中,該處理器就會(huì)按照默認(rèn)配置中的每個(gè)具體設(shè)定來(lái)操作。
如果該MVP位被設(shè)定,則寄存器Config3的VPC(虛擬處理器配置)位就可以通過(guò)軟件設(shè)定。這可以使得處理器進(jìn)入一個(gè)設(shè)定狀態(tài),該設(shè)定狀態(tài)下,Config4寄存器的內(nèi)容可以被讀出,用以決定可使用的VPE上下文,線程上下文,TLB項(xiàng)目和協(xié)處理器的數(shù)目,并且可使某些正常情況下只讀的Config寄存器的“預(yù)設(shè)”字段變成可寫(xiě)入??梢詫⒁恍┫拗剖┘釉谂渲脿顟B(tài)指令流上,例如它們可以被禁止使用高速緩存的或是TLB映射的內(nèi)存地址。
在配置狀態(tài)中,可配置的VPE的全部數(shù)目被編碼于Config4寄存器的PVPE字段中。通過(guò)將每個(gè)VPE的索引寫(xiě)入EBase寄存器的CPUNum字段中,可以選擇每一個(gè)VPE。對(duì)于被選擇的VPE,下列的寄存器字段都可通過(guò)寫(xiě)入而被設(shè)定。
·Config1.MMU_Size·Config1.FP·Config1.MX·Config1.C2·Config3.NThreads·Config3.NITC_Pages·Config3.NITC_PLocs·Config3.MVP·VPESchedule
并不是所有上述所提到的設(shè)定參數(shù)都需要是可配置的。舉例來(lái)說(shuō),即使每一個(gè)VPE的ITC頁(yè)面是可配置的,每一個(gè)頁(yè)面的ITC位置的數(shù)目可以是固定的,或者兩個(gè)參數(shù)都可以被固定,對(duì)于每個(gè)VPE,F(xiàn)PU可以被預(yù)先分配或是硬連線的,等等。
協(xié)處理器作為分離的不同單元被分配給VPE。協(xié)處理器可被多線程化的程度應(yīng)該經(jīng)由協(xié)處理器特定的控制和狀態(tài)寄存器被表示和控制。
通過(guò)清除EBase寄存器的VPI禁止位,使能一個(gè)VPE,用于配置之后的執(zhí)行。
通過(guò)發(fā)出一個(gè)ECONF指令可以退出該配置狀態(tài)。這個(gè)指令使得所有未被禁止的VPE取得一個(gè)重置異常,并且開(kāi)始同時(shí)執(zhí)行。如果Config3寄存器的MVP位在配置期間被清除,而且被一個(gè)ECONF指令保持為零,則該VPC位就不能再被設(shè)定,而且該處理器配置就會(huì)被有效的凍結(jié),直到下一個(gè)處理器重置。如果MVP仍然被設(shè)定,則再次設(shè)定該VPC位可以使一個(gè)操作系統(tǒng)再次進(jìn)入配置模式。可是,如果該處理器的一個(gè)運(yùn)行中的VPE重新進(jìn)入配置模式,可能會(huì)有不可預(yù)測(cè)的結(jié)果。
對(duì)于多線程處理器的服務(wù)質(zhì)量調(diào)度到目前為止該說(shuō)明書(shū)描述了一種MIPS兼容系統(tǒng)的具體應(yīng)用擴(kuò)展,用于實(shí)現(xiàn)多線程。如前面所述,所描述的MIPS實(shí)現(xiàn)只是用于列舉描述,而并不用于限制本發(fā)明所包含的范圍。如同之前所描述的功能與機(jī)制可以應(yīng)用于MIPS之外的系統(tǒng)。
在實(shí)時(shí)和近乎實(shí)時(shí)線程的多線程中的特殊服務(wù)的問(wèn)題在背景段落被提出,該問(wèn)題在之前有關(guān)于ThreadSchedule寄存器(圖23)和VPESchedule寄存器(圖24)的說(shuō)明中已經(jīng)簡(jiǎn)單地涉及。本說(shuō)明書(shū)的以下部分將更詳細(xì)地處理該問(wèn)題;也更清楚地說(shuō)明用于具體處理線程級(jí)服務(wù)質(zhì)量(QoS)的特定擴(kuò)充。
背景一般用于傳輸多媒體數(shù)據(jù)的網(wǎng)絡(luò)設(shè)計(jì)都會(huì)牽涉到服務(wù)質(zhì)量(QoS)的概念,用來(lái)描述需要使用不同策略來(lái)處理在網(wǎng)絡(luò)中不同的數(shù)據(jù)流。以語(yǔ)音的傳輸為例,相對(duì)的對(duì)于帶寬的要求不高,但是卻不能忍受幾十毫秒的延遲。在寬帶的多媒體網(wǎng)絡(luò)中,QoS協(xié)議可以保證在時(shí)間為關(guān)鍵要素的傳輸中,能取得任何特別的處理與優(yōu)先權(quán),這是在時(shí)間上能適時(shí)傳輸?shù)谋仨毐WC。
影響在單一芯片上RISC與DSP相組合的程序執(zhí)行的其中一個(gè)主要問(wèn)題是,在一個(gè)組合的多任務(wù)的環(huán)境中,要去保證DSP程序代碼的嚴(yán)格實(shí)時(shí)執(zhí)行是非常困難的。從而該DSP應(yīng)用可被視為,在處理器帶寬中需要一個(gè)QoS條件。
多線程與QoS有許多種方式可以對(duì)來(lái)自多線程的指令發(fā)出進(jìn)行調(diào)度。交錯(cuò)式的調(diào)度器可以在每個(gè)周期改變線程,而塊交錯(cuò)式的調(diào)度器可以在當(dāng)一個(gè)高速緩存丟失或其它嚴(yán)重的停頓發(fā)生時(shí)改變線程。以上詳細(xì)描述的多線程ASE,提供了一個(gè)架構(gòu)給多線程處理器,用于避免對(duì)于一個(gè)特定線程調(diào)度的機(jī)制或策略任何依賴。然而,調(diào)度策略可能對(duì)于Qos為各種線程的執(zhí)行所提供保證的內(nèi)容有重大的影響。
一個(gè)具有DSP擴(kuò)充功能的RISC在Qos能夠保證實(shí)時(shí)DSP程序代碼能夠被執(zhí)行的情形下會(huì)變的更有用處。在該處理器上實(shí)現(xiàn)多線程,使得在一個(gè)獨(dú)立的線程上執(zhí)行DSP程序代碼,甚至也有可能是在一個(gè)獨(dú)立的虛擬處理器上執(zhí)行DSP程序代碼,使得DSP線程的硬件調(diào)度能夠被可編程地確定來(lái)保證QoS,從而理所當(dāng)然的消除了具有DSP加強(qiáng)功能的RISC的一個(gè)主要障礙。
QoS線程調(diào)度算法服務(wù)質(zhì)量線程的調(diào)度可以寬松的被定義為一組調(diào)度機(jī)制和策略,其允許程序員或系統(tǒng)設(shè)計(jì)者對(duì)于一段特定的程序代碼的執(zhí)行時(shí)間可以作出確信的和可預(yù)測(cè)的陳述。一般來(lái)說(shuō),這些陳述的形式為“這段程序代碼將執(zhí)行不多于Nmax且不少于Nmin個(gè)周期”。在許多的情形下,只有Nmax數(shù)字在實(shí)際的執(zhí)行中被考慮,但是在某些應(yīng)用中,程序代碼的運(yùn)行超前于調(diào)度也會(huì)造成問(wèn)題,所以Nmin也應(yīng)該被考量。如果Nmax數(shù)字與Nmin數(shù)字的差距能更小的話,整個(gè)系統(tǒng)的行為也更能精確的被預(yù)測(cè)。
簡(jiǎn)單的優(yōu)先權(quán)方案一種簡(jiǎn)單的模型被提出來(lái),用于在多線程發(fā)出調(diào)度時(shí)提供一定程度的QoS,其為簡(jiǎn)單地將最高優(yōu)先權(quán)分配給一個(gè)指定實(shí)時(shí)線程,因此當(dāng)該線程可執(zhí)行時(shí),總是選擇它來(lái)發(fā)出指令。這種方式可以提供一個(gè)Nmin的最小值,似乎也可提供該指定線程的Nmax的可能的最小值,但是仍然會(huì)有一些不太好的后果。
首先,在該方案中只有一個(gè)線程可以有QoS的保證。該算法暗含了在一個(gè)不同于該指定實(shí)時(shí)線程的線程中,任意程序代碼的Nmax會(huì)變成實(shí)質(zhì)上不受約束。其次,當(dāng)該特定線程內(nèi)的一段程序代碼的Nmin數(shù)被最小化的時(shí)候,則異常就必須被包含在模型當(dāng)中。如果該指定線程產(chǎn)生該異常,則該Nmax的值就會(huì)變的更復(fù)雜,并且在某種情形下是不可能確定的。如果該異常是被該指定線程以外的線程所產(chǎn)生的,則該指定線程中的程序代碼的Nmax就會(huì)受到嚴(yán)格約束,但是該處理器的中斷響應(yīng)時(shí)間變得不受約束。
這種簡(jiǎn)單的優(yōu)先權(quán)方案也許在某些情形下是有用的,并且在硬件的實(shí)現(xiàn)上也有實(shí)際的優(yōu)點(diǎn),但是它們?nèi)匀粵](méi)有提供一個(gè)通用的QoS調(diào)度的解決方案。
基于保留的方案另一個(gè)功能更強(qiáng)大且獨(dú)特的線程調(diào)度模型是基于保留發(fā)出時(shí)段。在這種方案中,硬件調(diào)度機(jī)制允許一個(gè)或多個(gè)線程可被分配得到M個(gè)連續(xù)發(fā)出時(shí)段中的N個(gè)。在一個(gè)沒(méi)有中斷的環(huán)境中,對(duì)于一個(gè)實(shí)時(shí)代碼段,該方案并沒(méi)有提供向優(yōu)先權(quán)方案所提供的低Nmin值,可是卻擁有了其它的優(yōu)點(diǎn)。
·多于一個(gè)的線程可以被保證有QoS。
·即使當(dāng)中斷是與具有最高優(yōu)先權(quán)的線程之外的其他線程綁定的,該中斷延遲也可以是受約束的。這樣可以使實(shí)時(shí)程序代碼區(qū)段有較低的Nmax。
基于保留方案的調(diào)度的一種簡(jiǎn)單形式是,將每第N個(gè)發(fā)出時(shí)段分配給一個(gè)實(shí)時(shí)線程。在1與2之間并沒(méi)有N的中間值,這說(shuō)明在一個(gè)多線程環(huán)境中的實(shí)時(shí)線程可以取得最多50%的處理器的發(fā)出時(shí)段。當(dāng)一個(gè)實(shí)時(shí)任務(wù)需要使用多于50%的嵌入式處理器的帶寬時(shí),十分需要一種方案,其允許更靈活地分配發(fā)出帶寬。
具有QoS的混合線程調(diào)度上述的多線程系統(tǒng)是側(cè)重中立的調(diào)度策略,但是還可以被擴(kuò)充,以允許形成一種混合的線程調(diào)度模型。在這種模型中,實(shí)時(shí)線程可以被給予一定比例的線程發(fā)出時(shí)段的固定調(diào)度,并且用與實(shí)現(xiàn)方式相關(guān)的默認(rèn)調(diào)度方案來(lái)分配剩余的時(shí)段。
綁定線程至發(fā)出時(shí)段處理器中的指令是被快速地順序發(fā)出。在一個(gè)多線程的環(huán)境當(dāng)中,在多數(shù)的線程當(dāng)中,一個(gè)線程可以通過(guò)在一個(gè)給定的時(shí)段數(shù)目中所占用的時(shí)段數(shù)目的比例來(lái)計(jì)算出所使用的帶寬。相反的,本發(fā)明認(rèn)識(shí)到,可以任意的聲明一確定數(shù)目的時(shí)段,并限制該處理器為某特定的線程保留該固定數(shù)目中的一定數(shù)目的時(shí)段。從而可以指定帶寬中的一個(gè)固定部分來(lái)保證一個(gè)實(shí)時(shí)線程。
很清楚地,可以將時(shí)段按比例地分配給多于一個(gè)實(shí)時(shí)線程,并且該方案進(jìn)行操作的粒度受到發(fā)出時(shí)段的該固定數(shù)目的約束,所述比例就是以該固定數(shù)目為基礎(chǔ)得到的。舉例來(lái)說(shuō),如果選擇32個(gè)時(shí)段,則任意一個(gè)特定的線程可以被保證具有帶寬的1/32至32/32。
也許用于將固定發(fā)出帶寬分配給線程的最具一般性的模型是將每個(gè)線程與一對(duì)整數(shù){N,D}關(guān)聯(lián),這對(duì)整數(shù)表示分配給該線程的發(fā)出時(shí)段比例的分子與分母,例如是1/2或4/5。如果所允許的整數(shù)范圍足夠大的話,這樣可以允許對(duì)于線程優(yōu)先權(quán)分配的幾乎任意細(xì)粒度的調(diào)整,但是如此做的話還是會(huì)有一些實(shí)質(zhì)上的缺點(diǎn)。其中一個(gè)問(wèn)題是,要使用一個(gè)硬件邏輯將一個(gè)很大的配對(duì)集合{N0,D0},{N1,D1},…{Nn,Dn}}轉(zhuǎn)換成一個(gè)發(fā)出調(diào)度并不是一件簡(jiǎn)單的事,并且多于100%的時(shí)段被分配這種錯(cuò)誤情況無(wú)法非常容易的被檢測(cè)出來(lái)。另一個(gè)問(wèn)題就是,這種方案允許在相當(dāng)長(zhǎng)的一段時(shí)間上,一個(gè)線程被分配N(xiāo)/D比例的發(fā)出時(shí)段,但是它并不一定允許任意聲明關(guān)于哪個(gè)發(fā)出時(shí)段被分配給一個(gè)較短子程序代碼片段的線程。
因此,在本發(fā)明的一較佳實(shí)施例中,不使用整數(shù)對(duì),而是用一個(gè)位向量與每一個(gè)需要有實(shí)時(shí)帶寬QoS的線程相關(guān)聯(lián),該位向量表示要被分配給該線程的調(diào)度時(shí)段。在該較佳實(shí)施例中,該向量也就是前述ThreadSchedule寄存器(圖23)的內(nèi)容,可以被系統(tǒng)軟件所看到。雖然該ThreadSchedule寄存器具有32位寬的調(diào)度“掩碼”,但是在其他實(shí)施例中該屏蔽當(dāng)中可以具有更長(zhǎng)或更短的位寬度。一個(gè)具有32位寬度的線程調(diào)度掩碼可以允許一個(gè)線程被分配從1/32至32/32的該處理器的發(fā)出帶寬,并且也可進(jìn)一步對(duì)于特定的發(fā)出線程給予特定的發(fā)出帶寬模式。對(duì)于一個(gè)32位的掩碼,值0xaaaaaaaa將每第二個(gè)時(shí)段分配給該線程。值0x0000ffff也可以將50%的發(fā)出帶寬分配給該線程,但是以16個(gè)連續(xù)時(shí)段的塊方式進(jìn)行分配。將值0xeeeeeeee分配給線程X并且將值0x01010101分配給線程Y,從而給予線程X每四個(gè)周期中的三個(gè)(32個(gè)中的24個(gè))和給予線程Y每八個(gè)周期中的一個(gè)(32個(gè)中的4個(gè)),并且將剩下的每一組32個(gè)周期中的4個(gè),被其它可能確定性較低的硬件算法分配給其它線程。更進(jìn)一步的說(shuō),線程X將具有每四個(gè)周期中的三個(gè),并且該線程Y在兩組連續(xù)指令之間具有不超過(guò)八個(gè)周期。
在該實(shí)施例中的調(diào)度沖突可以被很簡(jiǎn)單地檢測(cè)出,因?yàn)闆](méi)有一位將被設(shè)置在多于一個(gè)線程的ThreadSchedule寄存器中。也就是說(shuō),如果為一個(gè)線程設(shè)定了一個(gè)特定的位,那么對(duì)于被分配了發(fā)出掩碼的所有其他線程,該位必須是零值。因此,如果有任何的沖突,都可以被輕易的檢測(cè)出。
實(shí)時(shí)線程的發(fā)出邏輯相對(duì)的簡(jiǎn)單直接每一個(gè)發(fā)出機(jī)會(huì)皆關(guān)聯(lián)至一個(gè)32模數(shù)的索引,該索引會(huì)被傳送給所有就緒的線程,這些就緒線程中的至多一個(gè)會(huì)被分配該關(guān)聯(lián)的發(fā)出時(shí)段。如果得到該時(shí)段,則該相關(guān)聯(lián)的線程就會(huì)發(fā)出它的下一個(gè)指令。如果沒(méi)有任何線程擁有該時(shí)段,則該處理器會(huì)選擇一個(gè)可執(zhí)行的非實(shí)時(shí)線程。
ThreadSchedule寄存器的硬件實(shí)現(xiàn)如果使用少于32位的話,可以減少每個(gè)線程的儲(chǔ)存與邏輯的大小,但卻會(huì)同時(shí)降低調(diào)度的靈活性。原則上,該寄存器可以擴(kuò)充至64位,或甚至被實(shí)現(xiàn)(在MIPS處理器的情況下)為一連串的寄存器,增加了在MIPS32 CP0寄存器空間中的選擇值,從而提供更長(zhǎng)的調(diào)度向量。
使線程免除中斷服務(wù)如前所述,中斷服務(wù)可以使得執(zhí)行該異常程序的線程在執(zhí)行時(shí)間上具有很大的可變性。因此,期望使需要嚴(yán)格QoS保證的線程能夠免除中斷服務(wù)。這里提出了一個(gè)較佳的實(shí)施例,對(duì)于每一個(gè)線程利用一個(gè)單一位,該位對(duì)于操作系統(tǒng)是可以看見(jiàn)的,用來(lái)使任何異步異常延遲,直到一個(gè)非免除的線程被調(diào)度(即,ThreadStatus寄存器的IXMT位,請(qǐng)參考圖18與圖19)。這樣會(huì)增加中斷的延遲,但是通過(guò)ThreadSchedule寄存器的值的選擇,可以將該中斷延遲限制在受約束和可控的程度下。如果中斷處理程序只是執(zhí)行在那些沒(méi)有被分配給可免除的實(shí)時(shí)QoS線程的發(fā)出時(shí)段中,自然地該中斷服務(wù)對(duì)于該實(shí)時(shí)程序代碼的執(zhí)行時(shí)間就沒(méi)有任何優(yōu)先的影響。
線程與虛擬處理單元的發(fā)出時(shí)段分配以上詳細(xì)描述的多線程ASE描述了一種線程資源的有層次的分配,其中一些數(shù)目的VPE(虛擬處理單元)各自具有一些數(shù)目的線程。每一個(gè)VPE具有CP0的硬件實(shí)現(xiàn)和特權(quán)資源架構(gòu)(當(dāng)配置在一MIPS處理器上時(shí)),所以運(yùn)行在其中一個(gè)VPE上的操作系統(tǒng)軟件(OS)不可能直接知道和控制被其它VPE所要求的發(fā)出時(shí)段。因此每一VPE的發(fā)出時(shí)段名稱空間被關(guān)聯(lián)到該VPE,這就形成了一個(gè)發(fā)出時(shí)段分配的層次結(jié)構(gòu)。
圖34為調(diào)度電路3400的方框示意圖,其描述了這種線程資源的層次分配。處理器調(diào)度器3402(即,主處理器的全部調(diào)度邏輯)經(jīng)由“時(shí)段選擇”信號(hào)3403傳遞一個(gè)發(fā)出時(shí)段號(hào)碼至該主處理器內(nèi)的全部VPE中的全部VPESchedule寄存器。信號(hào)3403對(duì)應(yīng)于VPESchedule寄存器內(nèi)一個(gè)位的位置(在本較佳實(shí)施例中,即為三十二個(gè)位置中的一個(gè))。通過(guò)使該位的位置在每個(gè)發(fā)出時(shí)段出現(xiàn)時(shí)移至一個(gè)增加的位置,并且當(dāng)?shù)竭_(dá)了最高有效位位置時(shí)(即,在此較佳實(shí)施例中是第31位)再重置到最低有效位位置(即,第0位),調(diào)度器3402重復(fù)地循環(huán)信號(hào)3403。
再參照?qǐng)D34,以此圖為例,位位置1(即,時(shí)段1)經(jīng)由信號(hào)3403傳遞至該主處理器的全部VPESchedule寄存器,即寄存器3414與3416。在任一個(gè)VPESchedule寄存器中,如果其對(duì)應(yīng)位為“設(shè)定”(即,該位為邏輯1),該寄存器就用一個(gè)“VPE發(fā)出要求”信號(hào)來(lái)通知處理器調(diào)度器。作為響應(yīng),調(diào)度器就會(huì)用一個(gè)“VPE發(fā)出允許”信號(hào)來(lái)允許該VPE使用目前的發(fā)出時(shí)段。再參照?qǐng)D34,(VPE0中的)VPESchedule寄存器3414的位位置1被設(shè)定,因此發(fā)出了一個(gè)VPE發(fā)出要求信號(hào)3415至處理器調(diào)度器3402,然后該處理器調(diào)度器3402也會(huì)響應(yīng)一個(gè)VPE發(fā)出允許信號(hào)3405。
當(dāng)一個(gè)VPE被授予一個(gè)發(fā)出時(shí),他在VPE層次上采用相類似的邏輯。再參照?qǐng)D34,VPE調(diào)度器3412(即VPE0 3406的調(diào)度邏輯)響應(yīng)于信號(hào)3405,而經(jīng)由時(shí)段選擇信號(hào)3413傳遞一個(gè)發(fā)出時(shí)段號(hào)碼給該VPE內(nèi)的全部ThreadSchedule寄存器。這些ThreadSchedule寄存器每一個(gè)都關(guān)聯(lián)至由該相關(guān)VPE所支持的線程。信號(hào)3413對(duì)應(yīng)于ThreadSchedule寄存器中的一個(gè)位位置(在本實(shí)施例中,可以是三十二個(gè)位中的一個(gè))。通過(guò)使位位置在每個(gè)發(fā)出時(shí)段出現(xiàn)時(shí)移至一個(gè)增加的位置,并且當(dāng)?shù)竭_(dá)了最高有效位位置時(shí)(即,在此較佳實(shí)施例中是第31位)再重置到最低有效位位置(即,第0位),調(diào)度器3412重復(fù)地循環(huán)信號(hào)3403。該時(shí)段號(hào)碼獨(dú)立于在VPESchedule層次所使用的時(shí)段號(hào)碼。
請(qǐng)參照?qǐng)D34并以其為例,位位置0(即,“時(shí)段0”)經(jīng)由信號(hào)3413傳遞至在該目標(biāo)VPE內(nèi)的全部ThreadSchedule寄存器,也就是寄存器3418與3420。任一個(gè)線程的ThreadSchedule寄存器的該選定位置的位已被設(shè)定的話,該線程通知VPE調(diào)度器,從而被允許使用目前的發(fā)出時(shí)段。參照?qǐng)D34,(線程0的)ThreadSchedule寄存器3418的位位置0被設(shè)定,因此將線程發(fā)出要求信號(hào)3419發(fā)送至該VPE調(diào)度器3412,而該VPE調(diào)度器也響應(yīng)了一個(gè)線程發(fā)出允許信號(hào)3417(從而允許線程0可以使用目前的發(fā)出時(shí)段)。在一些周期當(dāng)中,如果VPESchedule寄存器中沒(méi)有設(shè)定與指定的時(shí)段對(duì)應(yīng)的位,或是ThreadSchedule寄存器中沒(méi)有設(shè)定與指定的時(shí)段對(duì)應(yīng)的位,則該處理器或VPE調(diào)度器就會(huì)根據(jù)某種其它默認(rèn)調(diào)度算法來(lái)分配下一個(gè)發(fā)出時(shí)段。
根據(jù)之前所述,在一個(gè)較佳實(shí)施例當(dāng)中,每一個(gè)VPE,例如圖34的VPE0(3406)和VPE1(3404),都具有一個(gè)VPESchedule寄存器(其格式顯示于圖24),用來(lái)允許以該寄存器內(nèi)容的長(zhǎng)度為模的特定時(shí)段,可以被確定地分配給該VPE。圖34的VPESchedule寄存器為VPE0的寄存器3414和VPE1的寄存器3416。那些沒(méi)有被分配給任何VPE的發(fā)出時(shí)段,通過(guò)特定實(shí)現(xiàn)方式的分配策略進(jìn)行分配。
另外根據(jù)上文的描述,被分配給在一個(gè)VPE之內(nèi)的線程的時(shí)段是從給予該VPE的時(shí)段中分配的。舉一個(gè)具體例子,如果一個(gè)處理器有兩個(gè)VPE,如圖34所示,其中一個(gè)VPE的VPESchedule寄存器具有0xaaaaaaaa值,而另一個(gè)VPE的VPESchedule寄存器具有0x55555555值,則發(fā)出時(shí)段就會(huì)被交替分配給這兩個(gè)VPE。如果這兩個(gè)VPE之一中的一個(gè)線程的ThreadSchedule寄存器包含0x55555555值,則該線程會(huì)取得包含該線程的VPE的每?jī)蓚€(gè)發(fā)出時(shí)段中的一個(gè),或者是說(shuō)整個(gè)處理器的每四個(gè)發(fā)出時(shí)段中的一個(gè)。
因此,該每一個(gè)VPE相關(guān)的VPESchedule寄存器的值決定了每個(gè)VPE會(huì)得到哪些處理時(shí)段。特定線程被分配給每一個(gè)VPE,例如是VPE0中所示的線程0與線程1。其它沒(méi)有顯示的線程也類似地被分配給VPE1。每個(gè)線程都有一個(gè)關(guān)聯(lián)的ThreadSchedule寄存器,例如線程0的寄存器3418,線程1的寄存器3420。ThreadSchedule寄存器的值決定了一個(gè)VPE中每個(gè)線程的處理時(shí)段的分配。
調(diào)度器3402與3412可以用簡(jiǎn)單的組合邏輯來(lái)實(shí)現(xiàn),以執(zhí)行上述的功能,根據(jù)本發(fā)明的公開(kāi)內(nèi)容,建構(gòu)這些調(diào)度器并不需要復(fù)雜的實(shí)驗(yàn)就能夠由本領(lǐng)域技術(shù)人員來(lái)實(shí)現(xiàn)。例如,調(diào)度器的構(gòu)成也可以使用傳統(tǒng)的方法,如通過(guò)組合邏輯,可程序邏輯,軟件等等,用以得到所描述的功能。
圖33描述了一個(gè)通用形式的計(jì)算機(jī)系統(tǒng)3300,根據(jù)本發(fā)明的各種實(shí)施例可以在該計(jì)算機(jī)系統(tǒng)上實(shí)施。該系統(tǒng)包含了具有必須的譯碼和執(zhí)行邏輯的一個(gè)處理器3302(本領(lǐng)域一般技術(shù)人員對(duì)此應(yīng)該很清楚),用以支持一個(gè)或多個(gè)上述指令(即,F(xiàn)ORK,YIELD,MFTR,MTTR,EMT,DMT和ECONF)。在一個(gè)較佳實(shí)施例當(dāng)中,內(nèi)核3302還包含如圖34所示的調(diào)度電路3400,并且代表上述的“主處理器”。系統(tǒng)3300還包含系統(tǒng)接口控制器3304,可以與該處理器雙向通信;RAM3316和ROM3314,可被系統(tǒng)接口控制器進(jìn)行存取;三個(gè)I/O裝置3306,3308和3310,通過(guò)總線3312與系統(tǒng)接口控制器通信。通過(guò)這里對(duì)裝置和程序代碼應(yīng)用的詳細(xì)描述,系統(tǒng)3300可以作為一個(gè)多線程系統(tǒng)進(jìn)行操作。本領(lǐng)域技術(shù)人員應(yīng)該很清楚,圖33中所示的一般形式可以有很多替代形式。舉例來(lái)說(shuō),總線3312可以有許多的形式來(lái)實(shí)現(xiàn),并且在某些實(shí)施例當(dāng)中可以是一種芯片上的總線。同樣的,I/O裝置的數(shù)目也只是為了描述方便,實(shí)質(zhì)上是可以在不同的系統(tǒng)上做任意的變更。另外,雖然在圖中只有裝置3306發(fā)出了一個(gè)中斷要求,很明顯地其它的裝置也可以發(fā)出中斷要求。
更進(jìn)一步的改善到目前為止,所描述的實(shí)施例中,32位的ThreadSchedule寄存器和VPESchedule寄存器并不允許精確地分配奇數(shù)比例的發(fā)出帶寬。如果一個(gè)程序員期望精確地分配所有發(fā)出時(shí)段的三分之一給一個(gè)指定的線程,他只能近似到10/32或11/32。在一個(gè)實(shí)施例中,一個(gè)具有可程序的掩碼或長(zhǎng)度的寄存器,允許程序員去指定ThreadSchedule寄存器和/或VPESchedule寄存器中的位的子集,在重新開(kāi)始這次序列之前被發(fā)出邏輯使用。在所提出的例子當(dāng)中,該程序員設(shè)定了只有30個(gè)位是有效的,并且將VPESchedule寄存器和/或ThreadSchedule寄存器適當(dāng)?shù)鼐幊虨榫哂兄?x24924924。
本文所描述的多線程ASE當(dāng)然可以實(shí)現(xiàn)在硬件中,例如,在中央處理單元(CPU),微處理器,數(shù)字信號(hào)處理器,處理器內(nèi)核,系統(tǒng)整合芯片(SOC)或其它任何可編程器件內(nèi),或與上述各個(gè)器件連接。另外,該多線程ASE也可以實(shí)現(xiàn)在軟件之中(例如,計(jì)算機(jī)可讀程序代碼,程序代碼,任何形式的指令和/或數(shù)據(jù),如源語(yǔ)言,目標(biāo)語(yǔ)言或機(jī)器語(yǔ)言),該軟件設(shè)置在計(jì)算機(jī)可使用的(例如,可讀的)的介質(zhì)中,該介質(zhì)用來(lái)儲(chǔ)存該軟件。該軟件實(shí)現(xiàn)了這里描述的裝置和過(guò)程的功能,制造,建模,仿真,描述和/或測(cè)試。舉例來(lái)說(shuō),這些可以通過(guò)使用以下工具實(shí)現(xiàn)通用編程語(yǔ)言(比如C語(yǔ)言,C++語(yǔ)言),GDSII數(shù)據(jù)庫(kù),硬件描述語(yǔ)言(HDL),其包含Verilog HDL、VHDL、AHDL(Altera HDL)等等,或者其它可利用的程序,數(shù)據(jù)庫(kù)和/或電路(即原理圖)設(shè)計(jì)工具。這些軟件可以被置于任何已知的計(jì)算機(jī)可使用的介質(zhì),包含半導(dǎo)體,磁盤(pán),光盤(pán)(例如CD-ROM,DVD-ROM等等),或是作為任何計(jì)算機(jī)可使用(例如,可讀取)的傳輸介質(zhì)(例如,載波,包括數(shù)字、光學(xué)的任何其它介質(zhì),或基于模擬的介質(zhì))中所容納的計(jì)算機(jī)數(shù)據(jù)信號(hào)。因此,該軟件可以在包括互聯(lián)網(wǎng)絡(luò)與內(nèi)聯(lián)網(wǎng)絡(luò)的通信網(wǎng)絡(luò)中傳輸。
一個(gè)由軟件實(shí)施的多線程ASE可以被包含在一個(gè)半導(dǎo)體的知識(shí)產(chǎn)權(quán)內(nèi)核內(nèi),如一個(gè)處理器內(nèi)核(例如,以HDL實(shí)現(xiàn)),并且可以在集成電路的生產(chǎn)過(guò)程中被轉(zhuǎn)變成硬件。另外,這里描述的一個(gè)多線程ASE也可以作為硬件與軟件的組合實(shí)現(xiàn)。
對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō),很明顯地可以在不超出本發(fā)明所揭示的精神與范圍的情況下,對(duì)本發(fā)明所揭示的實(shí)施例加以潤(rùn)飾與修改。舉例來(lái)說(shuō),之前所描述的實(shí)施例大多是使用MIPS處理器,架構(gòu)和技術(shù),作為具體例子。本發(fā)明具有各種實(shí)施例,可以被用于更廣的范圍,而不限于這些具體例子。更進(jìn)一步而言,一個(gè)本領(lǐng)域技術(shù)人員可以找到方法對(duì)本發(fā)明所描述的功能性做些微的改變,而這仍然是在本發(fā)明的精神與范圍內(nèi)。在描述QoS時(shí),ThreadSchedule寄存器與VPESchedule寄存器的內(nèi)容不限于所描述的長(zhǎng)度,而且可以在本發(fā)明的精神和范圍內(nèi)作出修改。
因此,實(shí)質(zhì)上只能依照所附權(quán)利要求的范圍來(lái)限定本發(fā)明的范圍。
權(quán)利要求
1.在一個(gè)能夠支持和執(zhí)行多程序線程的處理器中,一種處理的機(jī)制,包括一個(gè)參數(shù),用于調(diào)度一個(gè)程序線程;以及一個(gè)指令,置于該程序線程中,并且能夠存取該參數(shù);其中,當(dāng)該參數(shù)等于第一數(shù)值時(shí),該指令根據(jù)一個(gè)或多個(gè)編碼于該參數(shù)中的條件,重新調(diào)度該程序線程。
2.如權(quán)利要求1所述的機(jī)制,其中該參數(shù)保存在一個(gè)數(shù)據(jù)儲(chǔ)存裝置中。
3.如權(quán)利要求1所述的機(jī)制,其中當(dāng)該參數(shù)等于第二數(shù)值,且該第二數(shù)值不等于該第一數(shù)值時(shí),該指令釋放該程序線程。
4.如權(quán)利要求3所述的機(jī)制,其中該第二數(shù)值為零。
5.如權(quán)利要求1所述的機(jī)制,其中當(dāng)該參數(shù)等于第二數(shù)值,且該第二數(shù)值不等于該第一數(shù)值時(shí),該指令無(wú)條件地重新調(diào)度該程序線程。
6.如權(quán)利要求5所述的機(jī)制,其中該第二數(shù)值為一奇數(shù)。
7.如權(quán)利要求5所述的機(jī)制,其中該第二數(shù)值為負(fù)1。
8.如權(quán)利要求1所述的機(jī)制,其中該一個(gè)或多個(gè)條件中的一個(gè)條件與將執(zhí)行機(jī)會(huì)讓與其它線程直到該一個(gè)條件被滿足為止的該程序線程相關(guān)。
9.如權(quán)利要求8所述的機(jī)制,其中該一個(gè)條件被編碼于該參數(shù)中的位向量或位字段之一中。
10.如權(quán)利要求5所述的機(jī)制,其中,在該程序線程被重新調(diào)度的情形下,該程序線程的執(zhí)行會(huì)在該線程中該指令之后的位置繼續(xù)。
11.如權(quán)利要求3所述的機(jī)制,其中當(dāng)該參數(shù)等于第三數(shù)值,且該第三數(shù)值不等于該第一數(shù)值與該第二數(shù)值時(shí),該指令無(wú)條件地重新調(diào)度該程序線程。
12.如權(quán)利要求1所述的機(jī)制,其中該一個(gè)或多個(gè)條件中的一個(gè)條件為一個(gè)硬件中斷。
13.如權(quán)利要求1所述的機(jī)制,其中該一個(gè)或多個(gè)條件中的一個(gè)條件為一個(gè)軟件中斷。
14.如權(quán)利要求1所述的機(jī)制,其中,在該程序線程被重新調(diào)度的情形下,該程序線程的執(zhí)行會(huì)在該線程中該指令之后的位置繼續(xù)。
15.在一個(gè)能夠支持與執(zhí)行多程序線程的處理器中,一種由一個(gè)線程重新調(diào)度執(zhí)行或釋放該線程本身的方法,包括(a)發(fā)出一個(gè)指令,該指令存取一個(gè)數(shù)據(jù)存儲(chǔ)裝置中的一部分記錄,該部份記錄編碼了與決定該線程是否被重新調(diào)度的一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù);以及(b)根據(jù)在該部分記錄中的該一個(gè)或多個(gè)參數(shù)來(lái)依照該條件重新調(diào)度該線程或釋放該線程。
16.如權(quán)利要求15所述的方法,其中該記錄被置于一個(gè)通用寄存器(GPR)中。
17.如權(quán)利要求15所述的方法,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān)。
18.如權(quán)利要求17所述的方法,其中與該被釋放的線程相關(guān)的該一個(gè)參數(shù)為一零值。
19.如權(quán)利要求15所述的方法,其中這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。
20.如權(quán)利要求19所述的方法,其中該一個(gè)參數(shù)為一任意奇數(shù)值。
21.如權(quán)利要求19所述的方法,其中該一個(gè)參數(shù)為負(fù)1的二進(jìn)制補(bǔ)碼值。
22.如權(quán)利要求15所述的方法,其中這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足為止的該線程相關(guān)。
23.如權(quán)利要求22所述的方法,其中該一個(gè)參數(shù)被編碼于該記錄中的位向量或者一個(gè)或多個(gè)值字段之一中。
24.如權(quán)利要求15所述的方法,其中,在該線程發(fā)出該指令并被重新調(diào)度的情形下,當(dāng)該一個(gè)或多個(gè)條件被滿足時(shí),該線程的執(zhí)行會(huì)在該線程指令流中該線程所發(fā)出的該指令之后的位置繼續(xù)。
25.如權(quán)利要求15所述的方法,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。
26.如權(quán)利要求15所述的方法,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
27.如權(quán)利要求15所述的方法,其中這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
28.如權(quán)利要求15所述的方法,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
29.一種支持與執(zhí)行多個(gè)軟件實(shí)體的數(shù)字處理器,包括一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部分記錄,該部分記錄編碼了與一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù),該一個(gè)或多個(gè)條件決定了當(dāng)一個(gè)線程將執(zhí)行機(jī)會(huì)讓與其它線程時(shí)該線程是否被重新調(diào)度。
30.如權(quán)利要求29所述的數(shù)字處理器,其中該部分記錄被置于一個(gè)通用寄存器(GPR)中。
31.如權(quán)利要求29所述的數(shù)字處理器,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān)。
32.如權(quán)利要求31所述的數(shù)字處理器,其中與該被釋放的線程相關(guān)的該一個(gè)參數(shù)為一零值。
33.如權(quán)利要求29所述的數(shù)字處理器,其中這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。
34.如權(quán)利要求33所述的數(shù)字處理器,其中該一個(gè)參數(shù)的值為一任意奇數(shù)值。
35.如權(quán)利要求33所述的數(shù)字處理器,其中該一個(gè)參數(shù)的值為負(fù)1的二進(jìn)制補(bǔ)碼值。
36.如權(quán)利要求29所述的數(shù)字處理器,其中這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
37.如權(quán)利要求36所述的數(shù)字處理器,其中該一個(gè)參數(shù)被編碼于該記錄中的位向量或是一個(gè)或多個(gè)值字段之一中。
38.如權(quán)利要求29所述的數(shù)字處理器,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與一個(gè)被重新排隊(duì)等待調(diào)度的線程相關(guān)。
39.如權(quán)利要求29所述的數(shù)字處理器,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
40.如權(quán)利要求29所述的數(shù)字處理器,其中這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
41.如權(quán)利要求29所述的數(shù)字處理器,其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
42.一種能夠支持與執(zhí)行多個(gè)程序線程的處理系統(tǒng),包括一個(gè)數(shù)字處理器;一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部分記錄,該部分記錄編碼了與一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù),該一個(gè)或多個(gè)條件決定了一個(gè)線程是否被重新調(diào)度;以及一個(gè)指令集,包含用于重新調(diào)度和釋放該線程的一個(gè)指令;其中當(dāng)該線程發(fā)出該指令時(shí),該指令存取該記錄中的該一個(gè)或多個(gè)參數(shù),并且該系統(tǒng)根據(jù)該部分記錄中的該一個(gè)或多個(gè)參數(shù)來(lái)依照該一個(gè)或多個(gè)條件重新調(diào)度或釋放該發(fā)出指令的線程。
43.如權(quán)利要求42所述的處理系統(tǒng),其中該部分記錄被置于一個(gè)通用寄存器(GPR)中。
44.如權(quán)利要求41所述的處理系統(tǒng),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān)。
45.如權(quán)利要求44所述的處理系統(tǒng),其中與該被釋放的線程相關(guān)的該一個(gè)參數(shù)為一零值。
46.如權(quán)利要求44所述的處理系統(tǒng),其中這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。
47.如權(quán)利要求46所述的處理系統(tǒng),其中該一個(gè)參數(shù)的值為一任意奇數(shù)值。
48.如權(quán)利要求46所述的處理系統(tǒng),其中該一個(gè)參數(shù)的值為負(fù)1的二進(jìn)制補(bǔ)碼值。
49.如權(quán)利要求41所述的處理系統(tǒng),其中這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
50.如權(quán)利要求49所述的處理系統(tǒng),其中該一個(gè)參數(shù)被編碼于該記錄中的位向量或是一個(gè)或多個(gè)值字段之一中。
51.如權(quán)利要求44所述的處理系統(tǒng),其中,在一個(gè)線程發(fā)出該指令并且被有條件地重新調(diào)度的情形下,當(dāng)該一個(gè)或多個(gè)條件被滿足時(shí),該線程的執(zhí)行會(huì)在該線程指令流中該指令之后的位置繼續(xù)。
52.如權(quán)利要求42所述的處理系統(tǒng),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。
53.如權(quán)利要求42所述的處理系統(tǒng),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
54.如權(quán)利要求42所述的處理系統(tǒng),其中這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
55.如權(quán)利要求42所述的處理系統(tǒng),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
56.一種數(shù)字儲(chǔ)存介質(zhì),其上被寫(xiě)入來(lái)自一個(gè)指令集的指令,用于在一個(gè)數(shù)字處理器上執(zhí)行多個(gè)軟件線程中的各個(gè)軟件線程,該指令集包含了一個(gè)指令,用于使發(fā)出指令的線程放棄執(zhí)行,并且存取一個(gè)數(shù)據(jù)儲(chǔ)存裝置中的一部份記錄中的一個(gè)參數(shù),其中,釋放或重新調(diào)度的條件與該參數(shù)相關(guān),并且根據(jù)該部分記錄中的該參數(shù)來(lái)依照該條件進(jìn)行釋放或重新調(diào)度。
57.如權(quán)利要求56所述的數(shù)字儲(chǔ)存介質(zhì),其中該記錄被置于一個(gè)通用寄存器(GPR)中。
58.如權(quán)利要求57所述的數(shù)字儲(chǔ)存介質(zhì),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān)。
59.如權(quán)利要求58所述的數(shù)字儲(chǔ)存介質(zhì),其中該與被釋放的線程相關(guān)的參數(shù)為一零值。
60.如權(quán)利要求56所述的數(shù)字儲(chǔ)存介質(zhì),其中這些參數(shù)當(dāng)中的一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。
61.如權(quán)利要求60所述的數(shù)字儲(chǔ)存介質(zhì),其中該一個(gè)參數(shù)的值為一任意奇數(shù)值。
62.如權(quán)利要求60所述的數(shù)字儲(chǔ)存介質(zhì),其中該一個(gè)參數(shù)的值為負(fù)1的二進(jìn)制補(bǔ)碼值。
63.如權(quán)利要求16所述的數(shù)字儲(chǔ)存介質(zhì),其中這些參數(shù)中的一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足的線程相關(guān)。
64.如權(quán)利要求63所述的數(shù)字儲(chǔ)存介質(zhì),其中該一個(gè)參數(shù)被編碼于該記錄中的位向量或是一個(gè)或多個(gè)位字段之一中。
65.如權(quán)利要求56所述的數(shù)字儲(chǔ)存介質(zhì),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān)。
66.如權(quán)利要求56所述的數(shù)字儲(chǔ)存介質(zhì),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
67.如權(quán)利要求56所述的數(shù)字儲(chǔ)存介質(zhì),其中這些參數(shù)中的一個(gè)參數(shù)與被重新排隊(duì)等待重新調(diào)度的線程相關(guān),并且這些參數(shù)中的另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
68.如權(quán)利要求56所述的數(shù)字儲(chǔ)存介質(zhì),其中這些參數(shù)中的一個(gè)參數(shù)與被釋放的而不是被重新調(diào)度的線程相關(guān),這些參數(shù)中的另一個(gè)參數(shù)與被重新排隊(duì)等待調(diào)度的線程相關(guān),并且這些參數(shù)中的再另一個(gè)參數(shù)與將執(zhí)行機(jī)會(huì)讓與其它線程直到一個(gè)特定條件被滿足相關(guān)。
69.如權(quán)利要求1所述的機(jī)制,其中該指令為一個(gè)YIELD指令。
70.如權(quán)利要求1所述的機(jī)制,其中該部分記錄包括位向量。
71.如權(quán)利要求1所述的機(jī)制,其中該部分記錄包括一個(gè)或多個(gè)多位字段。
72.如權(quán)利要求15所述的方法,其中該指令為一個(gè)YIELD指令。
73.如權(quán)利要求42所述的處理系統(tǒng),其中該指令為一個(gè)YIELD指令。
74.如權(quán)利要求56所述的數(shù)字儲(chǔ)存介質(zhì),其中該指令為一個(gè)YIELD指令。
75.一種包含在傳輸介質(zhì)中的計(jì)算機(jī)數(shù)據(jù)信號(hào),包括計(jì)算機(jī)可讀的程序代碼,其用于描述一個(gè)能夠支持并執(zhí)行多個(gè)程序線程的處理器,并且其包括一種用以釋放和重新調(diào)度一個(gè)線程的機(jī)制,該程序代碼包括第一程序代碼段,用于描述一個(gè)數(shù)據(jù)存儲(chǔ)裝置中的一部分記錄,該部分記錄編碼了與決定一個(gè)線程是否被重新調(diào)度的一個(gè)或多個(gè)條件相關(guān)的一個(gè)或多個(gè)參數(shù);以及第二程序代碼段,用于描述能夠存取該記錄中的該一個(gè)或多個(gè)參數(shù)的一個(gè)指令,其中當(dāng)該線程發(fā)出該指令時(shí),該指令存取該記錄中的一個(gè)或多個(gè)值,并根據(jù)該一個(gè)或多個(gè)值來(lái)依照該一個(gè)或多個(gè)條件重新調(diào)度或釋放該線程。
76.在一個(gè)能夠支持多個(gè)程序線程的處理器中,一種方法,包含執(zhí)行一個(gè)指令,該指令可以存取與線程調(diào)度相關(guān)的一個(gè)參數(shù),其中該指令包含在一個(gè)程序線程中;以及當(dāng)該參數(shù)等于第一數(shù)值時(shí),響應(yīng)于該指令而釋放該程序線程。
77.如權(quán)利要求76所述的方法,其中該第一數(shù)值為零。
78.如權(quán)利要求76所述的方法,還包括當(dāng)該參數(shù)等于第二數(shù)值時(shí),響應(yīng)于該指令而掛起該程序線程的執(zhí)行,其中該第二數(shù)值不等于該第一數(shù)值。
79.如權(quán)利要求78所述的方法,其中該第二數(shù)值表示,執(zhí)行該程序線程所需具備的條件并不滿足。
80.如權(quán)利要求79所述的方法,其中該條件被編碼于該參數(shù)中作為位向量或值字段。
81.如權(quán)利要求78所述的方法,還包括當(dāng)該參數(shù)等于第三數(shù)值時(shí),響應(yīng)于該指令而重新調(diào)度該程序線程,其中該第三數(shù)值不相等于該第一數(shù)值和第二數(shù)值。
82.如權(quán)利要求81所述的方法,其中該第三數(shù)值為負(fù)1。
83.如權(quán)利要求81所述的方法,其中該第三數(shù)值為一個(gè)奇數(shù)值。
84.在一個(gè)能夠支持多個(gè)程序線程的處理器中,一種方法,包括執(zhí)行一個(gè)指令,該指令存取一個(gè)與線程調(diào)度相關(guān)的參數(shù),其中該指令包含于一個(gè)程序線程中;當(dāng)該參數(shù)等于第一數(shù)值時(shí),響應(yīng)于該指令而掛起該程序線程的執(zhí)行。
85.如權(quán)利要求84所述的方法,還包括當(dāng)該參數(shù)等于第二數(shù)值時(shí),響應(yīng)于該指令而重新調(diào)度該程序線程,其中該第二數(shù)值不等于該第一數(shù)值。
86.在一個(gè)能夠支持多個(gè)程序線程的處理器中,一種方法,包括執(zhí)行一個(gè)指令,該指令存取與線程調(diào)度相關(guān)的一個(gè)參數(shù),其中該指令包含于一個(gè)程序線程當(dāng)中;以及當(dāng)該參數(shù)等于第一數(shù)值時(shí),響應(yīng)于該指令而重新調(diào)度該程序線程。
87.如權(quán)利要求86所述的方法,還包括當(dāng)該參數(shù)等于第二數(shù)值時(shí),響應(yīng)于該指令而釋放該程序線程,其中該第二數(shù)值不等于該第一數(shù)值。
全文摘要
一種在能支持和執(zhí)行多個(gè)程序線程的處理器中的處理機(jī)制,包括用于調(diào)度一個(gè)程序線程的參數(shù)和該程序線程中的一個(gè)指令,該指令能夠存取該參數(shù)。當(dāng)該參數(shù)等于第一數(shù)值時(shí),且當(dāng)一個(gè)程序線程發(fā)出該指令時(shí),該指令根據(jù)編碼在該參數(shù)中的一個(gè)或多個(gè)條件而重新調(diào)度該程序線程。
文檔編號(hào)G06F9/30GK1842770SQ200480024800
公開(kāi)日2006年10月4日 申請(qǐng)日期2004年8月26日 優(yōu)先權(quán)日2003年8月28日
發(fā)明者凱文·基塞爾 申請(qǐng)人:美普思科技有限公司