專利名稱::多線程處理器系統(tǒng)中的線程切換控制的制作方法
技術領域:
:本發(fā)明涉及下列美國專利申請,這些申請的主題在此被納入作為參考(1)美國專利申請,題為“在多線程處理器中選擇線程切換事件的方法和裝置”,系列號08/958,716,于1997年10月23日遞交,與本申請同時遞交;(2)美國專利申請,題為“在多線程處理器中保證前進的裝置和方法”,系列號08/956,875,于1997年10月23日遞交,與本申請同時遞交;(3)美國專利申請,題為“在多線程處理器中改變線程優(yōu)先級”,系列號08/958,718,于1997年10月23日遞交,與本申請同時遞交;(4)美國專利申請,題為“在多線程處理器中強行線程切換的方法和裝置”,系列號08/956,577,于1997年10月23日遞交,與本申請同時遞交,(5)美國專利申請,題為“在多線程處理器中后臺完成指令及相關的取請求”,系列號773,572,于1996年12月27日遞交;(6)美國專利申請,題為“多入口全相關過渡高速緩存”,系列號761,378,于1996年12月9日遞交;(7)美國專利申請,題為“對從命令源到命令容納點的命令設定優(yōu)先級和路由的方法和裝置”,系列號761,380,于1996年12月9日受理;(8)美國專利申請,題為“命令追蹤處理過程的方法和裝置”,系列號761,379,于1996年12月9日遞交;(9)美國專利申請,題為“通過減小存儲器訪問等待延遲以增強數據處理系統(tǒng)中多線程操作的方法和系統(tǒng)”,系列號473,692,于1995年6月7日遞交;(10)美國專利5,778,243號,題為“存儲器的多線程單元”,1998年7月7日發(fā)布。一般而言,本發(fā)明涉及用于計算機數據處理系統(tǒng)的一種改進的方法和裝置,具體而言,本發(fā)明涉及在處理器硬件中實現(xiàn)的一種改進的高性能多線程計算機數據處理系統(tǒng)和方法?,F(xiàn)代計算機的基本結構包括與外部世界進行信息通信的外圍裝置;這些外圍裝置可以是鍵盤、監(jiān)視器、磁帶驅動器、與網絡連接的通信線路等。在計算機的基本結構中還包括從外部世界接收這種信息,處理這種信息及向外部世界發(fā)布這種信息所必須的硬件,包括總線(bus)、存儲器單元、輸入/輸出(I/O)控制器、存儲裝置、以及至少一個中央處理單元(CPU)等。CPU是系統(tǒng)的大腦。它執(zhí)行包括計算機程序的指令,指揮其他系統(tǒng)部件的操作。從計算機硬件的角度看,大多數系統(tǒng)以基本相同的方式操作。處理器實際上是快速完成非常簡單的操作,如算術和邏輯比較以及從一地到另一地移動數據。指揮計算機完成大量這種簡單操作的程序給人一種錯覺,似乎計算機在做復雜的事情。用戶感覺到的計算機系統(tǒng)的新的或改善的能力實際上都可能是機器完成同樣的簡單操作,但快得多。所以,對計算機系統(tǒng)的不斷改進需要使這些系統(tǒng)比以往更快。對計算機系統(tǒng)總速度的一種度量,也稱作通過量,是由每單位時間完成的運算次數來度量的。從概念上講,對系統(tǒng)速度的所有可能的改進中最簡單的是提高各組成部分的時鐘速度,特別是處理器的時鐘速度。于是,如果每個部件以兩倍速度運行而工作方式完全不變,則系統(tǒng)將在一半時間內完成給定任務。多年以前由分離元件構成的計算機處理器通過縮小尺寸和減少元件數量使其運行速度顯著加快;最終使整個處理器作為一個集成電路組裝到單個芯片上。這種尺寸減小使有可能提高處理器的時鐘速度,從而提高系統(tǒng)速度。盡管由集成電路得到了速度的巨大改進,但仍然存在對更快計算機系統(tǒng)的需求。硬件設計者們通過更大規(guī)模的集成和其他技術、進一步減小電路尺寸,已能進一步改善速度。然而,設計者們認為,物理尺寸的減小不能無限地繼續(xù)下去,而且繼續(xù)提高處理器時鐘速度也是有限的。所以,為進一步改善計算機系統(tǒng)的總體速度,其注意力已指向其他途徑。不改變時鐘速度,利用多處理器仍能改善系統(tǒng)速度。組裝在集成電路芯片上的單個處理器成本適中,使得使用多處理器成為實際可行的。使用從屬處理器,通過把工作從CPU卸載到從屬處理器,相當大地改善了系統(tǒng)速度。例如,從屬處理器常規(guī)地執(zhí)行重復的和單一專用目的的程序,例如輸入/輸出裝置通信和控制。還可能把多個CPU放入單一計算機系統(tǒng),典型情況是同時服務于多用戶的基于主機的系統(tǒng)。每個不同的CPU能代表不同的用戶單獨執(zhí)行不同的任務,從而提高系統(tǒng)同時執(zhí)行多個任務的總體速度。然而,要改善單個任務(例如一個應用系統(tǒng))的執(zhí)行速度則困難得多。在多個CPU當中協(xié)調各功能的執(zhí)行和發(fā)送結果,這是一個需要技巧的事。對于從屬I/O處理器,這不那么困難,因為功能是預先確定的和有限的,然而對于執(zhí)行通用應用程序的多CPU,要協(xié)調各功能則困難得多,部分原因是設計者們事先不知道程序的詳細情況。大多數應用程序遵循由處理器完成的單一路徑或步驟流程。但有時可能打破這一單一路徑,變成多個平行的路徑,這樣做的通用性應用還處于研究之中。一般地說,把一個長的任務分配成較短的任務讓多處理器平行處理是由根據每個具體情況來編寫代碼的軟件工程師完成的。這種專門特定方案對于執(zhí)行那些不一定會重復或不一定可預測的商業(yè)事務是特別有問題的。這樣,盡管多處理器能改善總體系統(tǒng)性能,但仍有許多理由要改善單個CPU的速度。如果CPU時鐘速度是給定的,但通過增加每個時鐘周期的平均運算次數,仍能進一步提高CPU速度,即增加每秒執(zhí)行的運算次數。高性能單芯片微處理器的一般結構是簡化指令集計算機(RISC)結構,其特點是一個快速執(zhí)行的常用指令小型簡化集合,即前面提到的那些快速完成的簡單運算。隨著半導體技術的進步,RISC結構的目標已經是開發(fā)能在每個機器時鐘周期執(zhí)行一個或多個指令的處理器。增加每個時鐘周期執(zhí)行的平均運算次數的另一途徑是修改CPU內部的硬件。這一通過量度量,即每條指令的時鐘周期數,通常用于表征高性能處理器的結構的性能。指令流水線和高速緩存存儲器是能實現(xiàn)這一點的計算機結構特征。流水線指令執(zhí)行允許在完成先前發(fā)出的指令之前開始執(zhí)行其后的指令。高速緩存存儲器存儲經常使用的以及靠近存儲器的其他數據,并在大多數情況下允許指令繼續(xù)執(zhí)行而無需等待主存儲器的完全訪問時間。利用向前看硬件找出要平行執(zhí)行的指令,從而多執(zhí)行單元也已表現(xiàn)出某些改進。在超標量(superscalar)計算機和甚長指令字(VLIW)計算機中能進一步提高傳統(tǒng)RISC處理器的性能,這兩種計算機在每個處理器周期平行地執(zhí)行多于1條指令。在這種結構中提供了多功能單元或多執(zhí)行單元以平行地運行多個流水線。在超標量結構中,指令可以按順序完成和不按順序完成。按順序完成的意思是在其前面已安排的所有指令已經完成之前沒有任何指令能完成。不按順序完成的意思是允許在其前面的所有指令完成之前來完成該指令,只要能滿足預先定義的規(guī)則即可。為了在超標量系統(tǒng)中按順序和不按順序完成指令,在某些環(huán)境下流水線將停止。如果一條指令依賴于先前分配的未完成指令的結果,則會造成流水線停止。例如,一些指令所依賴的加載/存儲指令中所需數據未在高速緩存中,即高速緩存缺失(miss),則在高速緩存中能得到數據之前便不能完成這些指令。在高速緩存中保持為繼續(xù)執(zhí)行所需的數據,并維持高命中率,即對數據的請求次數與在高速緩存中準備好可用數據的次數之比,對于特別是涉及大數據結構的計算而言,可不是小事。高速緩存缺失能造成流水線停止達幾個周期,而且如果在大部分時間里不能得到數據,則存儲器等待時間總量將是嚴重的。雖然主存儲器所用存儲器裝置的速度在變得更快,但這種存儲器芯片和高端處理器之間的這種速度差距都不斷增大。于是,在當前的高端處理器設計中有大量執(zhí)行時間量花費在等待解決高速緩存缺失,而這些存儲器訪問延遲用去了處理器執(zhí)行時間中越來越多的部分。改進CPU內硬件效率的又一種技術是把處理任務分配成可獨立執(zhí)行的指令序列,稱作線程(thread)。這一技術涉及把一較大任務分配成較小的任務而由不同的處理器執(zhí)行,唯其其中這些線程是由同一處理器執(zhí)行。于是,當由于多種理由中的任何一個使CPU不能繼續(xù)處理或執(zhí)行這些線程之一時,該CPU便切換到去執(zhí)行另一線程。在計算機結構領域中定義的術語“多線程(multithreading)”不同于該術語在軟件方面的應用,在軟件使用中該術語的意思是一個任務分成多個相關線程。在結構定義中,線程可以是獨立的。所以,“硬件多線程”常用于區(qū)分該術語的兩種應用。在本發(fā)明的范圍內,術語“多線程”的意思就是承受存儲器等待時間的硬件多線程。當對當前線程檢測到流水線停止條件時,多線程允許處理器的流水線在不同的線程上作有用的工作。多線程還允許在檢測到當前線程的停止條件時讓實現(xiàn)非流水線結構的處理器為一單獨的線程去做有用的工作。有兩種基本的多線程形式。一種傳統(tǒng)的形式是在處理器中保持N個線程或狀態(tài),并在逐個周期的基礎上使這些線程相互交錯。這要消除所有流水線的依賴關系,因為在單一線程中的指令是彼此分離的。多線程的另一種形式,即本發(fā)明中要考慮的一種形式,是對某些長等待時間事件交錯其線程。多線程的傳統(tǒng)形式涉及對每個線程復制處理器寄存器。例如,以商品名PowerPCTM售出的實現(xiàn)該結構的處理器,為實現(xiàn)多線程,處理器必須維持N個狀態(tài)以運行N個線程。于是下列寄存器被復制N次通用寄存器、浮點寄存器、條件(condition)寄存器、浮點狀態(tài)和控制寄存器、計數寄存器、鏈路寄存器、異常寄存器、保存/恢復寄存器、以及專用寄存器。再有,特殊的緩存器,如段后備緩存器,可被復制或每個入口可以用線程號作標記,如果不如此做,則可在每次線程切換時清倉。還有,一些分支預測機制,例如相關寄存器和返回堆棧,也應被復制。幸運的是,不需要復制處理器的某些更大的功能,例如一級指令高速緩存(L1I-高速緩存)、一級數據高速緩存(L1D-高速緩存)、指令緩存器、存儲隊列、指令調度器、功能或執(zhí)行單元、流水線、翻譯后備緩存器(TLB)、以及分支歷史表。當一個線程遇到延遲時,處理器迅速切換到另一線程。這一線程的執(zhí)行復蓋了在第一線程上的存儲器延遲。現(xiàn)有的多線程技術在一高速緩存缺失或一存儲器查訪上描述切換線程。在“Sparcle大規(guī)模多處理器的一種變革性設計”(Agarwal等,IEEE微(Micro)卷13、No.3,pp48-60,1993年6月)中回顧了這一技術的主要實例。如在RISC體系結構中應用的那樣,通常用于支持功能調用的多寄存器集被修改成用于維持多線程。8個重疊的寄存器窗口被修改成4個不重疊的寄存器集,其中每個寄存器集是為捕獲和消息處理所作的保留。這一系統(tǒng)揭示出一個線程切換,它發(fā)生在每次遠程存儲器請求中所造成的一級高速緩存缺失時。盡管這一系統(tǒng)代表了技術上的一種進步,但現(xiàn)代處理器設計經常利用附加在處理器上的多級高速緩存和高速存儲器。該處理器系統(tǒng)利用某種公知的算法以確定每級高速緩存內將加載的主存儲器的那個部分,這樣,每當發(fā)生存儲器訪問時,如果它不在第一級高速緩存中,則處理器必須試圖從第二級或更高級高速緩存中得到那個存儲器訪問內容。這樣,本發(fā)明的一個目標是提供一種改進的數據處理系統(tǒng),它能利用多線程數據處理系統(tǒng)中實現(xiàn)的硬件邏輯和寄存器在一多級高速緩存系統(tǒng)中減小由于存儲器等待時間造成的延遲。本發(fā)明通過提供一個能在兩個指令線程之間切換執(zhí)行的多線程處理器和在帶有可選的對線程切換條件進行軟件改寫的硬件寄存器中實現(xiàn)的線程切換邏輯來實現(xiàn)這一目標。處理各種指令線程的各種狀態(tài)允許優(yōu)化處理器在各線程當中的使用。當處理器為第一線程從各種存儲器部件,例如第一線程的高速緩存、存儲器、外部I/O、直接存取存儲器,檢索必要的數據和/或指令時,允許該處理器去執(zhí)行第二指令線程從而提高對處理器的利用程度,否則它會是空閑的。線程線換的條件對于每個線程可以是不同的,或者可以通過利用一個軟件線程控制管理器在處理過程中改變線程切換條件。當第一線程具有要求大量周期來完成的等待時間事件例如高速緩存缺失時,可處理第二線程,在此期間第二線程可能遇到在同一或不同高速緩存級上的高速緩存缺失,但它可在短得多的時間內完成。通過本發(fā)明實現(xiàn)一個前進計數寄存器和允許一個可編程最大線程切換次數的方法(在超過此最大次數之后處理器停止切換線程直至一個線程能夠執(zhí)行),可以避免翻來復去地重復,其中每個線程被鎖在切換線程的一個重復周期中而沒有任何指令在執(zhí)行的情況。前進寄存器及其閾值監(jiān)視在沒有指令執(zhí)行的情況下已發(fā)生的線程切換次數,并當這個次數等于閾值時便不再發(fā)生線程切換,直至一條指令被執(zhí)行。前進計數寄存器的一個附加優(yōu)點是能對某些等待時間的事件定制寄存器和閾值,例如一個閾值用于像訪問外部計算機網絡那樣的等待時間很長的事件;而另一個前進閾值用于像高速緩存缺失那樣的等待時間較短的事件。在等待由一線程切換超時寄存器中指定的周期數之后迫使一線程切換可以防止對一線程的計算機處理在一個超常的時間段內處于不活動狀態(tài)。計算機處理系統(tǒng)不會由于急用共享資源而遭到掛起。實現(xiàn)了在線程之間公平分配處理器周期,而且限定了對外部中斷及處理器外部其他事件的最大響應等待時間??焖倬€程切換是由硬件寄存器實現(xiàn)的,這些寄存器存儲線程狀態(tài)、線程優(yōu)先級、以及線程切換條件。利用線程切換硬件寄存器能改變處理器中一個或多個線程的優(yōu)先級。來自中斷請求的信號或者軟件指令都能用于修改指示每個線程優(yōu)先級的狀態(tài)寄存器中的位。然后,根據每個線程的優(yōu)先級,可以發(fā)生線程切換,以允許較高優(yōu)先級的線程有更多的處理周期。改變優(yōu)先級的好處在于允許改變線程切換頻率,增加至關重要的任務的執(zhí)行周期數,減小由于線程切換等待時間造成的高優(yōu)先級線程丟失的處理周期數。本發(fā)明的另一方面是一種計算機處理方法,包括把所有線程狀態(tài),該線程是在多線程處理器中執(zhí)行的一個活動線程還是等待執(zhí)行的一個后臺線程,都存儲在相應的硬件寄存器中;在多線程處理器中執(zhí)行至少一個活動線程和改變活動線程的狀態(tài)。改變活動線程的狀態(tài)能使多線程處理器切換到執(zhí)行一個后臺線程。有若干方法去改變多處理組合中任何一個或所有線程的狀態(tài)。當一線程遇到一個等待時間事件而該事件停止了多線程處理器中該線程的執(zhí)行時,該線程的狀態(tài)將改變。當一線程或另一線程的優(yōu)先級被改變時,該線程的狀態(tài)也會改變。作為若干事件之一或其組合的結果,多線程處理器能切換到另一線程。例如,本發(fā)明的方法還包括對至少一個活動線程已執(zhí)行的多處理器周期數進行計數,而當執(zhí)行周期數等于一超時值時,則把執(zhí)行切換到至少一個后臺線程。本發(fā)明方法的能造成多線程處理器切換線程的另一步驟是接收一個外部中斷信號,該信號指示處理器中任何線程已從外部源中接收到數據和/或指令;該外部中斷信號可能改變也可能不改變該中斷信號所屬的那個線程的優(yōu)先級。本發(fā)明的方法還包括除了別的以外,還通過檢驗狀態(tài)變化是否由等待事件引起、確定該等待事件是否為線程切換事件以及確定該線程切換事件是否被啟動,從而確定是否在多線程處理器中任何線程狀態(tài)的變化會使它切換到執(zhí)行至少一個后臺線程。當與該線程切換事件對應的線程切換控制寄存器中的至少一位被啟動時,該線程切換事件便被啟動。雖然在多線程處理器內的一個線程可以改變狀態(tài),但當等待事件不是一個線程切換事件時,或當在線程切換控制器中該線程切換事件未被啟動時,或者當一個優(yōu)先級改變是無關,多線程處理器可能仍不把執(zhí)行切換到另一線程。通過對已發(fā)生的從至少一個活動線程離開的那些線程切換次數計數,把該計數與一計數閾值比較,并在該計數等于計數閾值時發(fā)出信號,并響應于該信號而不切換執(zhí)行,這樣,前進計數也能防止切換線程。本發(fā)明還是一種計算機處理方法,包括把至少一個活動線程的第一狀態(tài)存儲到至少一個硬件寄存器中,和把至少一個后臺線程的第二狀態(tài)存儲在至少一個硬件寄存器中;在多線程處理器中執(zhí)行至少一個活動線程。如果下列條件中的任何一個發(fā)生,則本方法改變活動線程的第一狀態(tài)(i)由于一等待事件使一活動線程的執(zhí)行停止;或(ii)把一活動線程的優(yōu)先級改成等于或低于一后臺線程的優(yōu)先級。然后,本方法通過首先確定該等待事件是否是線程切換事件,然后確定該線程切換事件是否被啟動,由此來確定改變該活動線程的第一狀態(tài)是否會使多線程處理器把執(zhí)行切換到該后臺線程。在下列條件之一的情況下,本方法預見多線程處理器能把執(zhí)行切換到至少一個后臺線程(i)計數該活動線程已執(zhí)行的處理器周期數,并當執(zhí)行周期數等于超時值時把執(zhí)行切換到后臺線程;(ii)收到一個外部中斷信號,然后把執(zhí)行切換到后臺線程;(iii)在線程切換控制寄存器中與線程切換事件對應的至少一位被啟動;或(iv)把后臺線程的優(yōu)先級改變?yōu)榈扔诨蚋哂谠摶顒泳€程的優(yōu)先級。在下列條件之一的情況下,多線程處理器不準把執(zhí)行切換到后臺線程(i)等待事件不是一個線程切換事件;(ii)該線程切換事件未被啟動;或(iii)通過對已發(fā)生的從那個活動線程離開的切換次數計數,然后把該計數與一計數閾值比較,并當該計數等于計數閾值時向線程切換控制寄存器發(fā)信號。本發(fā)明還是一個線程狀態(tài)寄存器,包括用于存儲至少一個活動線程的狀態(tài)和至少一個后臺線程的狀態(tài)的多個位,其中這多個位中有些位指示一個等待事件、是否到每個相應狀態(tài)的過渡會造成把執(zhí)行切換到另一個線程、以及這些線程的優(yōu)先級。本發(fā)明還是一個數據處理系統(tǒng),包括一個帶有多線程處理器的中央處理單元,這個多線程處理器能執(zhí)行至少一個活動線程并存儲至少一個后臺線程的狀態(tài),還包括多個執(zhí)行單元,多個寄存器,多個高速緩存存儲器,一個主存儲器以及一個指令單元;其中執(zhí)行單元、寄存器、存儲器及指令單元在功能上是互連的;所述中央處理單元還包括一個線程切換邏輯單元和一個存儲控制單元,在功能上也與所述多線程處理器相連。該數據處理系統(tǒng)還包括多個外部連接,包括一個總線接口、總線、至少一個輸入/輸出處理器連于至少下述之一磁帶驅動器、數據存儲裝置、計算機網絡、光纖通信、工作站、外部裝置、信息網絡;它們之中任何一個都能通過總線向中央處理單元發(fā)送數據和指令。在本發(fā)明的數據處理系統(tǒng)中,當至少一個活動線程停止執(zhí)行時,該事件及其理由被傳送到存儲控制單元,該存儲控制單元向線程切換邏輯單元發(fā)送一相應的信號,于是線程切換邏輯單元改變這至少一個活動線程的狀態(tài)并確定多線程處理器是否將切換線程并執(zhí)行所述多個后臺線程之一。本發(fā)明還是一個計算機處理系統(tǒng),包括一個多線程處理器單元;一個功能上與多線程處理器相連的線程切換邏輯單元;以及功能上與多線程處理器及線程切換邏輯單元相連的存儲控制單元。存儲控制單元接收用于多線程處理器的數據、指令和輸入,并根據這些數據、指令和輸入向線程切換邏輯單元及多線程處理器發(fā)出信號。作為響應,線程切換邏輯向多線程處理器發(fā)出信號。該存儲控制單元進一步包括過渡高速緩存、與至少一個指令單元相連的至少一個第一多路復用器以向多線程處理器提供指令供執(zhí)行,以及至少一個第二多路復用器向至少一個執(zhí)行單元供給數據。多線程處理器單元包括至少一個數據高速緩存、至少一個存儲器、至少一個指令單元、以及至少一個執(zhí)行單元。線程切換邏輯還包括一個線程狀態(tài)寄存器以及一個線程切換控制寄存器。線程切換邏輯可以還包括前進計數寄存器、線程切換超時寄存器和線程切換管理器。本發(fā)明的計算機處理系統(tǒng)可以還包括一個多線程處理器組合,它具有至少一個能執(zhí)行至少一個活動線程并存儲多個指令線程中的至少一個后臺線程的多線程處理器,本發(fā)明的計算機處理系統(tǒng)可以還包括一個數據高速緩存以向多線程處理器供給數據,至少一個帶有指令高速緩存的指令單元,至少一個存儲器以向高速緩存及多線程處理器供給數據和指令,以及至少一個在其中執(zhí)行數據和指令的執(zhí)行單元。該計算機處理系統(tǒng)進一步包括一個功能上與多線程處理器相連的存儲控制單元,該存儲控制單元包括一個過渡高速緩存,至少一個從過渡高速緩存或指令高速緩存或存儲器向指令單元傳送指令的第一多路復用器,以及至少一個從數據高速緩存或過渡高速緩存或存儲器向至少一個執(zhí)行單元傳送數據的第二多路復用器,至少一個向至少存儲器、高速緩存、多路復用器及執(zhí)行單元提供控制信號的排序器單元。該計算機處理系統(tǒng)還包括一個功能上與多線程處理器及存儲控制單元相連的線程切換邏輯單元,該線程切換邏輯單元還從排序器單元接收信號和向排序器單元發(fā)送信號,該線程切換邏輯單元包括一個線程狀態(tài)寄存器以存儲至少一個活動線程和后臺線程的狀態(tài),以及一個線程切換控制寄存器以存儲和啟動多個線程切換事件。在這種計算機處理系統(tǒng)結構安排中,線程切換邏輯單元從存儲控制單元接收表征多線程處理器中多個線程的信號,并對此作出響應,確定是否把執(zhí)行從多線程處理器中的至少一個活動線程切換出去。本發(fā)明的計算機處理器系統(tǒng)的另一實施例包括處理至少一個活動指令線程的裝置,存儲至少一個活動線程狀態(tài)的裝置,存儲至少一個后臺指令線程狀態(tài)的裝置,改變至少一個活動線程和至少一個后臺線程的狀態(tài)的裝置,以及響應于改變狀態(tài)裝置以切換線程從而使處理裝置處理至少一個后臺線程的裝置。改變至少一個活動線程和至少一個后臺線程的狀態(tài)的裝置包括一個外部硬件中斷信號或一線程切換管理器。改變至少一個活動線程和至少一個后臺線程的狀態(tài)的裝置包括發(fā)送有關處理裝置遇到多個等待事件之一的信號的裝置,該事件使處理裝置停止繼續(xù)處理這至少一個活動線程。切換線程裝置包括使多個等待事件之一能成為線程切換事件的裝置,改變任何線程優(yōu)先級的裝置以及使處理裝置超時的裝置。此外,本發(fā)明還提供不理會切換線程裝置的裝置。簡言之,本發(fā)明還是一個計算機處理器,包括能執(zhí)行多個指令線程中至少一個的多線程處理器,用于存儲這多個指令線程中每個的狀態(tài)的第一組硬件寄存器,以及用于存儲多個第一事件的第二組硬件寄存器,一旦這些第一事件發(fā)生,多線程處理器將切換線程的執(zhí)行,其中如果在第二組硬件寄存器中啟動一個第二事件,它改變第一組硬件寄存器中多個指令線程中任何一個的狀態(tài),則計算機處理系統(tǒng)將切換線程。從下面對最佳實施例及附圖的詳細描述,將清楚看出本發(fā)明的其他目標、特性和特征;其結構的相關元件的方法、操作和功能;部件的組合;以及制造的經濟方面,所有這些都構成本發(fā)明的一部分,其中在各圖中相似參考數字標明相應的部件。然而,參考下文中結合附圖閱讀示例性實施例的詳細描述,將會最好地理解發(fā)明本身及其最佳使用方式,以及其他目標和優(yōu)點,其中,圖1是能實現(xiàn)其中描述的發(fā)明的計算機系統(tǒng)方框圖。圖2顯示根據本發(fā)明的多線程數據處理系統(tǒng)的高層次方框圖。圖3顯示圖2的存儲控制單元的方框圖。圖4顯示圖2的線程切換邏輯、存儲控制單元及指令單元的方框圖。圖5顯示當線程遇到圖4所示不同線程切換事件時該線程狀態(tài)的變化。圖6是本發(fā)明的前進計數的流程圖?,F(xiàn)在參考附圖,具體參考圖1,圖中描述了計算機數據處理系統(tǒng)10的高極方框圖,該系統(tǒng)可用于實現(xiàn)本發(fā)明的方法和系統(tǒng)。能利用本發(fā)明的計算機數據處理系統(tǒng)10的主要硬件及相互連接示于圖1。用于處理指令的中央處理單元(CPU)100與高速緩存120、130及150相連。指令高速緩存150存儲供CPU100執(zhí)行的指令。數據高速緩存120存儲CPU100所用數據,而高速緩存130能存儲由CPU100使用的數據和指令二者,例如高速緩存130能是一個L2高速緩存。高速緩存與主存儲器140中的隨機存取存儲器通信。CPU100和主存儲器140還經由總線接口152與系統(tǒng)總線155通信。各種輸入/輸出處理器(IOP)160-168附加在系統(tǒng)總線155上并支持與各種存儲裝置及輸入/輸出(I/O)裝置通信,例如直接存取存儲裝置(DASD)170、帶驅動器172、遠程通信線路174、工作站176、及打印機178。應該理解,圖1是要在高一級上描述計算機數據處理系統(tǒng)10的代表性組成部件,這些組成部件的數量和類型可以變化。在CPU100內部,處理器核110包括專門化的功能單元,它們每個完成基本的操作,如對指令排序、執(zhí)行涉及整數的運算、執(zhí)行涉及實數的運算、在可編址存儲器和邏輯寄存器陣列之間傳送數值。圖2顯示處在計算機數據處理系統(tǒng)10的其他組成部件環(huán)境中的處理器核110的細節(jié)。在一個最佳實施例中,數據處理系統(tǒng)10的處理器核110是一個單個集成電路、構成流水線的超標量微處理器,它可利用任何計算機結構實現(xiàn),如以商品名PowerPCTM出售的RISC處理器系列;例如由IBM出售的PowerPCTM604微處理器芯片。如下文中要討論的那樣,數據處理系統(tǒng)10最好包括各種單元、寄存器、緩存器、存儲器及其他部分,它們都最好由集成電路構成。應該理解,在圖中各數據路徑已被簡化;在實際上,有許多單獨的和平行的數據路徑進出各部件。此外,與其中描述的發(fā)明關系不密切的各種部件已被略去,但應該理解,處理器含有額外的單元用于額外的功能。數據處理系統(tǒng)10可根據簡化指令集計算(RISC)技術或其他計算技術進行操作。如圖2中表現(xiàn)的那樣,數據處理系統(tǒng)10最好包括處理器核110、一級數據高速緩存L1D-高速緩存120、二級L2高速緩存130、過渡高速緩存210、主存儲器140、以及一級指令高速緩存L1I-高速緩存150,所有這些都利用各種總線連接在操作上與存儲控制單元200相連。如圖1中所示,存儲控制單元200包括用于互連L1D-高速緩存120和L2高速緩存130的過渡高速緩存210、主存儲器140、以及多個執(zhí)行單元。L1D-高速緩存120和L1I-高速緩存150最好作為處理器100的一部分在芯片上提供,而主存儲器140和L2高速緩存130可在芯片外提供。存儲器系統(tǒng)140準備用于代表隨機存取主存儲器(它可以在處理器核100內部,也可以不在)以及在處理器核100外部的其他數據緩存器和高速緩存(如果有的話),以及其他外部存儲器,例如DASD170、帶驅動器172及工作站176,如圖1中所示。L2高速緩存130最好是比主存儲器140速度更高的存儲器系統(tǒng),通過把選定的數據存儲在L2高速緩存130中,能將由于訪問主存儲器140而發(fā)生的存儲器等待時間減至最小。如圖1所示,L2高速緩存130和主存儲器140經由存儲控制單元200直接連至L1I-高速緩存150和指令單元220二者。如圖2所示,來自L1I-高速緩存150的指令最好輸出到指令單元220,根據本發(fā)明的方法和系統(tǒng),指令單元220控制由各種子處理單元(如分支單元260、定點單元270、存儲控制單元200、浮點單元280以及其他單元)執(zhí)行多個線程,這些單元由數據處理系統(tǒng)10的結構指定。除了圖2中描述的各種執(zhí)行單元外,本領域技術人員會理解,現(xiàn)代超標量微處理器系統(tǒng)常常包括每個這種執(zhí)行單元的多種版本,可以增加它們而不離開本發(fā)明的實質和范圍。這些單元大多數將有來自各種寄存器(如通用寄存器GPR272、浮點寄存器FPR282)的操作數信息,作為輸入源。此外,可以利用多個專用寄存器SPR274。如圖2所示,存儲控制單元200和過渡高速緩存210直接與通用寄存器272及浮點寄存器282相連。通用寄存器272與專用寄存器274相連。在只有這個多線程處理器100才有的各功能硬件單元當中,是線程切換邏輯400和過渡高速緩存210。線程切換邏輯400含有各種寄存器,它們確定哪個線程將是活動的或執(zhí)行的線程。線程切換邏輯400在操作上與存儲控制單元200、執(zhí)行單元260、270和280、以及指令單元220相連。在存儲控制單元200內部的過渡高速緩存210必須能實現(xiàn)多線程。存儲控制單元200和過渡高速緩存210最好允許每線程至少一個未完成的數據請求。這樣,當第一線程響應于例如L1D-高速緩存缺失的發(fā)生而被掛起時,第二線程將能訪問L1D-高速緩存以得到那里存在的數據。如果這第二線程也造成L1D-高速緩存缺失,則將發(fā)出另一個數據請求,這樣在存儲控制單元200和過渡高速緩存210中必須保持多個數據請求。過渡緩存210最好是遞交美國專利申請系列號08/761,378的過渡高速緩存,該申請于1996年12月9日遞交,題為“多入口全相關過渡高速緩存”,其中作為參考引入。存儲控制單元200、執(zhí)行單元260、270和280以及指令單元220都在操作上與線程切換邏輯400相連。由它確定要執(zhí)行哪個線程。如圖2所示,在存儲控制單元200和指令單元220之間提供了總線205,用于例如把數據請求傳送給存儲控制單元200和把L2高速緩存130缺失傳送給指令單元220。再有,提供了一個翻譯后備緩存器TLB250,它含有虛擬到實際地址映射。雖然在本發(fā)明中未予說明,但可以提供各種附加的高級存儲器映射緩存器,如段后備緩存器,它的工作方式與翻譯后備緩存器250相同。圖3更詳細地顯示存儲控制單元200,如它的名稱表明的那樣,這一單元控制從各種存儲單元輸入和輸出的數據和指令,它們包括各種高速緩存、緩存器以及主存儲器。如圖3所示,存儲控制單元200包括過渡高速緩存210,它在功能上與L1D-高速緩存120、多路復用器360、L2高速緩存130以及主存儲器140相連。再有,過渡高速緩存210從排序器350接收控制信號。排序器350包括多個排序器,最好是3個,用于處理指令和/或數據的取請求。排序器350還向過渡高速緩存210及L2高速緩存130輸出控制信號,并對主存儲器140收、發(fā)控制信號。圖3所示存儲控制單元200中的多路復用器360從L1D-高速緩存120、過渡高速緩存210、L2高速緩存130及主存儲器140接收數據,如果數據是要存儲到存儲器的話,則還從執(zhí)行單元270和280接收數據。多路復用器360對來自這些源的數據進行選擇,并響應于一個從排序器350收到的選擇控制信號,把數據輸出到L1D-高速緩存120或執(zhí)行單元。再有,如圖3所示,排序器350輸出一個選擇信號去控制第二多路復用器370。多路復用器370根據從排序器350收到的這個選擇信號,把來自L2高速緩存130或主存儲器140的數據輸出到L1I-高速緩存150或指令單元220。在產生上文討論的控制和選擇信號時,排序器350訪問和更新L1D-高速緩存120的L1目錄320及L2高速緩存130的L2目錄。關于其中描述的處理器的多線程能力,存儲控制單元200的排序器350還向線程切換邏輯400輸出信號,這些信號指出數據和指令請求的狀態(tài)。于是,來自高速緩存120、130和150、主存儲器140以及過渡后備緩存器250的反饋被送到排序器350,然后傳送到線程切換邏輯400,它可以造成線程切換,如下文討論的那樣。請注意,如果在任何裝置中發(fā)生能在多線程處理器中造成線程切換的事件,則它在操作上與線程切換邏輯400相連。圖4是線程切換邏輯硬件400的邏輯表示和方框圖,該硬件400確定是否一個線程將被切換,如果是,是哪個線程。存儲控制單元200和指令單元220與線程切換邏輯400互連。線程切換邏輯400最好容納在指令單元220中,但如果有許多線程,則線程切換邏輯400的復雜性會增加,因此該邏輯對指令單元220而言是外部的。為易于解釋,圖示的線程切換邏輯400對指令單元220是外部的。在本實施例中會造成一個線程被切換的事件在線470、472、474、476、478、480、482、484及486上從存儲控制單元200的排序器350向線程切換邏輯400傳送。其他等待事件能引起線程切換;這個清單不想全包括;相反,它只是表示如何能實現(xiàn)線程切換。由第一線程T0或第二線程T1請求一個未在指令單元220中的指令,則造成一個能引起線程切換的事件,在圖4中分別由470和472表示。線474指示何時活動線程(不論是T0還是T1)遇到一個L1D-高速緩存缺失120。L2高速緩存130對于線程T0或T1的高速緩存缺失分別由線476和478表示。當為T0線程或為T1線程返回數據時線480和482分別被激活。翻譯后備緩存器缺失和完成表游動(tablewalk)分別由線484和486指示。這些事件都被饋送到線程切換邏輯400,更具體地說是饋送到線程狀態(tài)寄存器440和線程切換控制器450。線程切換邏輯400對每個線程有一個線程狀態(tài)寄存器。在其中描述的實施例中表現(xiàn)出兩個線程,所以有T0狀態(tài)寄存器442用于第一線程T0和T1狀態(tài)寄存器444用于第二線程T1,其中將對它們進行描述。線程切換邏輯400包括線程切換控制寄存器410,它控制哪些事件將造成線程切換。例如,線程切換控制寄存器410能鎖住會引起狀態(tài)變化的事件,使線程切換控制器450看不到這些事件,從而使一線程不會由于被鎖住事件的結果而被切換。線程切換控制寄存器410是題為“在多線程處理器中選擇線程切換事件的方法和裝置”的美國專利申請的主題,該申請的系列號是08/958,716,1997年10月23日遞交,與本申請同時遞交,其中作為參考引入。前進計數寄存器420用于防止翻來復去地重復,它可以包括在線程切換控制寄存器410中。前進計數寄存器420是題為“在多線程處理器中保證前進的裝置和方法”的美國專利申請的主題,該申請的系列號是08/956,875,1997年10月23日遞交,與本申請同時遞交,其中作為參考引入。線程切換超時寄存器430是題為“在多線程處理器中迫使線程切換的方法和裝置”的美國專利申請的主題,該申請的系列號是08/956,577,1997年10月23日遞交,與本申請同時遞交,其中作為參考引入。線程切換超時寄存器430分配公平性和實際鎖定(livelock)事項。再有,利用軟件460能改變線程優(yōu)先級,這是題為“在多線程處理器中改變線程優(yōu)先級”的美國專利申請的主題,該申請系列號是08/958,718,1997年10月23日受理,與本申請同時受理,其中作為參考引入。最后,但不限于此,線程切換控制器450包括無數個邏輯門,它們代表了所有邏輯的終極,這些邏輯實際確定是否一個線程被切換,哪個線程以及在什么環(huán)境下被切換。將進一步詳細給出這些邏輯部件及其功能。線程狀態(tài)寄存器線程狀態(tài)寄存器440包括每個線程的一個狀態(tài)寄存器,如其名稱所表明的那樣,它存儲相應線程的狀態(tài);在這一情況中是T0線程狀態(tài)寄存器442和T1線程狀態(tài)寄存器444。對于具體的結構和線程切換優(yōu)先級方案,可以定制位數和特定位的位置以描述每個線程的狀態(tài)。在下表中列出對具有兩個線程的多線程處理器在其線程狀態(tài)寄存器442和444中各位的分配。線程狀態(tài)寄存器位分配(0)指令/數據0=指令1=數據(12)缺失類型排序器00=無缺失01=翻譯后備緩存器缺失(檢驗位0判定I/D)10=L1高速緩存缺失11=L2高速緩存缺失(3)過渡0=到當前狀態(tài)的過渡不造成線程切換1=到當前狀態(tài)的過渡造成線程切換(47)保留(8)0=加載1=存儲(914)保留(1517)前進計數器111=復位(在這一線程中指令已完成)000=該線程W/0指令第一次執(zhí)行完成001=該線程W/0指令第二次執(zhí)行完成010=該線程W/0指令第三次執(zhí)行完成011=該線程W/0指令第四次執(zhí)行完成100=該線程W/0指令第五次執(zhí)行完成(1819)優(yōu)先級(可由軟件設置)00=中等01=低10=高11=<非法>(2031)保留(3263)保留,如果是64位實現(xiàn)的話在其中描述的實施例中,位0標識缺失還是處理器停止執(zhí)行的理由是一個加載指令請求或者加載或存儲數據請求的結果。位1和2指示所請求的信息能否得到,如果如此,是從哪個硬件,即所翻譯的數據或指令地址是否不在翻譯后備緩存器250中,或者數據或指令本身不在L1D-高速緩存120或L2高速緩存130中,在圖5的描述中將進一步解釋。位3指示是否一線程狀態(tài)的改變會造成線程切換。一個線程可以改變其狀態(tài)而不造成線程切換。例如,如果當線程T1遇到一個L1高速緩存缺失時發(fā)生了線程切換,那么如果線程T1遇到一個L2高速緩存缺失則將不會有線程切換,因為該線程已由于L1高速緩存缺失而切換了。然而,T1的狀態(tài)仍然改變。另一種情況是,如果通過選擇,線程切換邏輯400被配置或編程,使得在L1高速緩存缺失時不切換,那么當一線程確實遇到L1高速緩存缺失時,即使該線程改變其狀態(tài),將沒有線程切換。線程狀態(tài)寄存器442和444的位8被分配為特定線程請求的信息是要加載到處理器核中還是從處理器核中存儲到高速緩存或主存儲器中。位15至17被分配為防止翻來復去的重復,下文中將參考前進計數寄存器420加以討論。位18和19能在硬件中設定,或能由軟件設定,以指示線程優(yōu)先級。圖5代表本實施例中由數據處理系統(tǒng)10處理的一個線程的4種狀態(tài),這些狀態(tài)存儲在線程狀態(tài)寄存器440中,位的位置是12。狀態(tài)00代表“準備好”狀態(tài),即該線程已準備好供處理,因為所需要的所有數據和指令都能得到;狀態(tài)10代表這樣的線程狀態(tài),其中在處理器內該線程的執(zhí)行被停止,因為該線程在等待或者數據返回到L1D-高速緩存120中或者指令返回到L1I-高速緩存150中;狀態(tài)11代表該線程在等待數據返回到L2高速緩存130;狀態(tài)01表明在翻譯后備緩存器250上有一缺失,即虛擬地址錯或不可用,稱作“表游走(tablewalk)”。在圖5中還顯示出線程狀態(tài)的層次結構,其中狀態(tài)00指示該線程已準備好供執(zhí)行,具有最高優(yōu)先級。短等待時間的事件最好賦予較高優(yōu)先級。圖5還顯示了當從各種源提取數據時狀態(tài)的變化。正常的無中斷地執(zhí)行線程T0在塊510中表示為狀態(tài)00。如果發(fā)生L1D-高速緩存或I-高速緩存缺失,則線程狀態(tài)變?yōu)闋顟B(tài)10,如在塊512中表示的,遵循分別在線474(圖4)上由存儲器控制單元200發(fā)出的信號和在線470(圖4)上由指令單元200發(fā)出的信號。如果所需的數據或指令在L2高速緩存130中并被提取,則在塊510恢復T0的正常執(zhí)行。類似地,圖5的塊514代表L2高速緩存缺失,它把T0或T1線程的狀態(tài)改變?yōu)闋顟B(tài)11,此時存儲控制單元200在線476或478(圖4)上通知這一缺失。當如線480和482(圖4)上所指示的那樣,從主存儲器140中取出指令或數據到L2高速緩存中,并將其加載到處理器核100,則在塊510,狀態(tài)再變回到狀態(tài)00。當所請求信息的虛擬地址在翻譯后備緩存器250中不可用時,存儲控制單元200在線484(圖4)上與線程寄存器440通信,如塊516所示,作為TLB缺失或狀態(tài)01。當該地址變?yōu)榭捎玫幕蛘呷绻嬖谝粋€由存儲控制單元200在線486(圖4)上通告的數據存儲中斷指令,則該線程的狀態(tài)返回到狀態(tài)00,意思是已準備好供執(zhí)行。狀態(tài)數和每個狀態(tài)代表什么,可由計算機結構自由選定。例如,如果一線程有多個L1高速緩存缺失,例如L1I-高速緩存缺失和L1D-高速緩存缺失二者,則可對每個高速緩存類型賦予單獨的狀態(tài)。另一種作法是可以賦予單個線程狀態(tài)來代表不只一個事件或事件發(fā)生。給出了一個線程切換算法的實例,它針對有相等優(yōu)先級的兩個線程,用于確定是否要切換線程。能根據本發(fā)明的原理擴展和修改該算法,從而適用于更多的線程和線程切換條件。線程狀態(tài)寄存器440(圖4)中存儲的每個線程的狀態(tài)與線程切換算法給出的每個線程優(yōu)先級二者之間的相互作用在每個周期要動態(tài)地被詢問。如果活動線程T0有一個L1缺失,則該算法將使線程切換到休眠的線程T1,除非休眠線程T1在等待一個L2缺失的解決。如果未曾發(fā)生切換而且活動線程T0的L1高速緩存缺失轉變成了L2高速緩存缺失,則該算法指示處理器切換到休眠線程T1而不管T1的狀態(tài)如何。如果這兩個線程都在等待一個L2高速緩存缺失的解決,則首先使L2缺失得到解決的那個線程成為活動線程。在每個切換決定時刻,在大多數情況下采取的行動是最佳化的,造成最好的性能。請注意,由L2高速緩存缺失造成的線程切換以其他線程的狀態(tài)為條件,如果不是這樣,則額外的線程切換就會發(fā)生,造成性能降低。線程切換控制寄存器在任何多線程處理器中,都存在與切換線程相關聯(lián)的等待時間和性能代價。在其中描述的最佳實施例中的多線程處理器中,這種等待時間包括使當前線程完成到它能被中斷并在其后被調用時能正確地重新啟動的那一點所需要的時間,把針對該線程的硬件設施從當前線程的狀態(tài)切換到新線程的狀態(tài)所需要的時間,以及重新啟動新線程和開始其執(zhí)行所需要的時間。以本發(fā)明可操作的針對線程的硬件設施最好包括前面描述的線程狀態(tài)寄存器和在美國專利5,778,243號中描述的存儲器單元,該專利題為“存儲器的多線程單元”,其中作為參考引入。為了在一個“粗粒的”多線程數據處理系統(tǒng)中實現(xiàn)最佳性能,與通常的單線程方式相反,在多線程方式中產生線程切換的事件的等待時間必須大于與切換線程相關聯(lián)的性能損失。用于產生線程切換的事件的等待時間依賴于硬件和軟件二者。例如,在多線程處理器中特別的硬件考慮包括實現(xiàn)處理器芯片外部L2高速緩存所用外部SRAM的速度。在L2高速緩存中的快SRAM減小L1缺失的平均等待時間,而較慢的SRAMS增加L1缺失的平均等待時間。這樣,如果在外部L2高速緩存數據訪問等待時間大于線程切換代價的硬件中把一個線程切換事件定義為一個L1高速緩存缺失,則性能得到增強。作為特定軟件代碼特性如何影響線程切換事件等待時間的一例,考慮代碼的L2高速緩存命中與缺失之比,即在L2高速緩存中能準確得到數據的次數與由于數據不在L2高速緩存中而必須從主存儲器中提取數據的次數之比。L2命中與缺失之比高則減小L2高速緩存缺失的平均等待時間,因為L1高速緩存缺失很少會造成更長的L2缺失等待時間。L2命中與缺失之比低則增加L1缺失的平均等待時間,因為更多的L1缺失造成更長等待時間的L2缺失。這樣,如果執(zhí)行代碼的L2命中與缺失之比高,則一個L1高速緩存缺失可不作為線程切換事件,因為L2高速緩存數據訪問等待時間小于線程切換代價。當執(zhí)行的軟件代碼具有低L2命中與缺失之比時,L1高速緩存缺失將被啟動為線程切換事件,因為L1高速緩存缺失多半能導致更長等待時間的L2高速緩存缺失。某些類型的等待事件是不容易被檢測到的。例如,在某些系統(tǒng)中,當發(fā)生一高速緩存缺失時L2高速緩存向指令單元輸出一個信號。然而,其他L2高速緩存不輸出這種信號,例如,如果L2高速緩存控制器在處理器以外的單獨芯片上,于是處理器不能容易地確定一個狀態(tài)變化。在這些結構中,該處理器可對每個待決L1高速緩存缺失有一個周期計數器。如果在預定周期數之后缺失數據尚未從L2高速緩存返回,則處理器的行動猶如已發(fā)生了一個L2高速緩存缺失并相應地改變線程狀態(tài)。這一算法可應用于有不只一種獨特等待時間類型的其他場合。只作為一例,對于一個處理器中的L2高速緩存缺失,從主存儲器取得數據的等待時間可能顯著地不同于從另一處理器取得數據的等待時間。在線程狀態(tài)寄存器中可對這兩種事件賦予不同的狀態(tài)。如果沒有信號去區(qū)分這些狀態(tài),則可用一計數器去確定在它遇到L2高速緩存缺失之后該線程應為哪一狀態(tài)。線程切換控制寄存器410是一個軟件可編程的寄存器,它選擇事件以確定線程切換,并對每個定義的線程切換控制事件有一個單獨的啟動位。雖然其中描述的實施例未對每個線程實施單獨的線程切換控制寄存器410,但能對每個線程實施單獨的線程切換控制寄存器410,從而以更多的硬件和復雜性為代價提供更大的靈活性和更高的性能。再有,在一個線程切換控制寄存器中的線程切換控制事件不需要與任何其他線程切換控制寄存器中的線程切換控制事件完全相同。線程切換控制寄存器410能由服務處理器以軟件寫入,例如在美國專利5,079,725號中說明的動態(tài)掃描通信接口,該專利題為“與掃描設計系統(tǒng)和掃描測試技術一起使用的芯片識別方法”,或者由處理器本身用軟件系統(tǒng)代碼寫入。線程切換控制器450使用線程切換控制寄存器410的內容去使能允許或不允許產生一個線程切換。在寄存器410中的值1使與該位關聯(lián)的線程切換控制事件能產生一個線程切換。在線程切換控制寄存器410中的值零不允許與該位關聯(lián)的線程切換控制事件產生一個線程切換。當然,在執(zhí)行線程過程中的一條指令能使那個特定線程或其他線程的任何一個或全部線程切換條件變?yōu)椤安荒堋?。下表顯示線程切換事件和它們在寄存器410中的使能位之間的關聯(lián)。線程切換控制寄存器位賦值(0)L1數據高速緩存取缺失時切換(1)L1數據高速緩存存儲缺失時切換(2)L1指令高速緩存缺失時切換(3)指令TLB缺失時切換(4)L2高速緩存取缺失時切換(5)L2高速緩存存儲缺失時切換(6)L2指令高速緩存缺失時切換(7)數據TLB/段后備緩存器缺失時切換(8)L2高速緩存缺失而且休眠線程無L2高速緩存缺失時切換(9)當達到線程切換超時值時切換(10)當L2高速緩存數據返回時切換(11)IO外部訪問時切換(12)雙X存儲兩個中第一缺失(*)時切換(13)雙X存儲兩個中第二個缺失(*)時切換(14)存儲多重/串任何訪問缺失時切換(15)加載多重/串任何訪問缺失時切換(16)保留(17)雙X加載兩個中第一個缺失(*)時切換(18)雙X加載兩個中第二個缺失(*)時切換(19)如果機器狀態(tài)寄存器(問題狀態(tài))位,msr(pr)=1則當“或”1,1,1指令時切換。允許軟件優(yōu)先級變化不依賴于msr(pr)。如果位19為1,“或”1,1,1指令設為低優(yōu)先級。如果位19為0,在“或”1,1,1指令被執(zhí)行時,只有當msr(pr)=0時優(yōu)先級才設為低優(yōu)先級。見下文要討論的“以軟件改變?yōu)閮?yōu)先級”。(20)保留(21)線程切換優(yōu)先級使能(2229)保留(3031)前進計數(3263)在64位寄存器實現(xiàn)中保留(*)雙X加載/存儲是指加載或存儲一個基本半字、字或雙字,它們穿過一個雙字邊界。在本文范圍內的雙X加載/存儲不是加載或存儲多個字或字串。線程切換超時寄存器如前文討論的那樣,粗粒多線程處理器依靠長等待時間的事件去觸發(fā)線程切換。有時在執(zhí)行過程中在一多處理器環(huán)境中的一個處理器或在一多線程結構中的一個后臺線程有一資源的所有權,該資源只能有單一所有者,而另一處理器或活動線程需要訪問該資源,然后它才能前進。實例包括更新存儲器頁面表或從任務分配器得到一任務。該活動線程不能得到對該資源的所有權時不造成線程切換事件,盡管如此,線程在一個循環(huán)中繞圈,不能做有用的工作。在這種情況中,握有資源的后臺線程不能得到對處理器的訪問以釋放資源,因為它從未遇到一個線程切換事件,因而不能成為活動線程。在各線程當中分配處理周期是另一個關心的問題;如果與在同一處理器中其他線程上運行的軟件代碼相比,在一個線程上運行的軟件代碼很少遇到長等待時間的切換事件。那么該線程得到的處理周期便多于它的公平分享的處理周期。而可能超過最大可接受時間的另一種過度延遲是在一有限時間段內等待服務于一外部中斷或在處理器外部的某些其他事件的一個不活動線程的等待時間。這樣,如果沒有有用的處理要完成以防止系統(tǒng)掛起的話,最好在某一時間之后迫使一線程切換到休眠線程。在一時間段之后迫使一線程切換的邏輯是線程切換超時寄存器430(圖4),一個減量器,以及一個減量器寄存器用于保持被減量的值。該線程切換超時寄存器430保持線程切換超時值。在本實施例中使用的線程切換超時寄存器430的實現(xiàn)示于下表線程切換超時寄存器位(021)保留(2231)線程切換超時值其中描述的本發(fā)明實施例不對每個線程實現(xiàn)一個單獨的線程切換超時寄存器430,當然可以那樣做以提供更大的靈活性。類似地,如果有多個線程,每個線程不需要有相同的線程切換超時值。每次發(fā)生線程切換時,由硬件把線程切換超時值從線程切換超時寄存器430加載到減量寄存器中。減量寄存器每周期減量一次,直至減量寄存器值等于零為止,然后一個信號發(fā)送到線程切換控制器450,它迫使產生一個線程切換,除非沒有任何其他線程準備好處理指令。例如,如果系統(tǒng)中所有其他線程由于高速緩存缺失而在等待因而沒有準備好去執(zhí)行指令,則線程切換控制器450不迫使產生一個線程切換。如果當減量寄存器中之值達到零時沒有其他線程準備好處理指令,則被減量的值凍結在零直至另一線程準備好處理指令,在這一點上便發(fā)生一個線程切換,減量寄存器重新加載那個線程的線程切換超時值。類似地,減量寄存器也能同樣容易地命名為增量寄存器,當一線程在執(zhí)行時,該寄存器可增量至某一預先確定值,此時將迫使產生線程切換。線程切換超時寄存器430可如前述由一服務處理器寫入,或由處理器本身用軟件代碼寫入。可根據特定的硬件配置和/或特定的軟件代碼來專門確定加載到線程切換超時寄存器430中的線程切換超時值,從而使不必要的線程切換造成的周期浪費達到最小。當活動線程等待由另一線程掌握的資源時,或者如果一個外部中斷290或處理器外部的其他事件的響應等待時間太長,則線性切換超時寄存器430中的值太高會造成性能下降。如果一個線程遇到的線程切換事件次數高而其他線程不是,則太高的超時值還會防礙公平性。推薦的線程切換超時值為長于最頻繁的最長等待時間事件(例如訪問主存儲器)的2倍至若干倍。在等待由線程切換超時寄存器430中指定的周期數之后迫使產生一個線程切換,這防止了系統(tǒng)由于爭奪共享資源而掛起,堅持了線程間處理器周期分配的公平性,并限制了對外部中斷及處理器外部其他事件的響應等待時間。前進保證在某些情況下,例如當一個單一指令產生多個高速緩存訪問和/或多個高速緩存缺失時,每次發(fā)出線程切換和新線程變?yōu)榛顒泳€程時必須至少有一個指令被執(zhí)行的限制太強了。例如,一個取指令可能引起L1I-高速緩存150缺失,如果所請求的指令不在該高速緩存中的話;但當指令返回時,所請求的數據可能在L1D-高速緩存120中得不到。類似地,翻譯后備緩存器250中的缺失也能造成數據高速緩存缺失。因此,如果嚴格地強迫向前進,則在其后訪問時的缺失不會造成線程切換。第二個問題是某些高速緩存缺失可能需要大量周期去完成,在此期間可能有另一線程在同一高速緩存級別上遇到高速緩存缺失,而這一缺失能在短得多的時間內完成。如果在返回第一線程時強迫嚴格的前進,則處理器便不能切換到有較短高速緩存缺失的線程。翻來復去重復即在那種情況下每個線程被鎖在切換線程重復周期中而沒有執(zhí)行任何指令,為了補救這一問題,存在一個前進計數寄存器420(圖4),它允許達到可編程的最大線程切換次數,稱作前進閾值值。在最大線程切換次數之后,一條指令必須被完成,然后才能再發(fā)生切換。這樣,防止了翻來復去的重復。前進計數寄存器420實際上可以是線程切換控制寄存器410中的3031位,或該處理器的軟件可編程前進閾值寄存器。前進計數邏輯使用線程狀態(tài)寄存器442、444的位1517,它們指示線程的狀態(tài)并被分配一個線程在沒有指令執(zhí)行的情況下已遇到的線程切換數。于是,這些位最好包括前進計數器。當一線程改變狀態(tài)而啟動線程切換算法時,如果在該活動線程中已完成了至少一個指令,則該活動線程的前進計數器復位,而線程切換算法繼續(xù)比較處理器中各線程之間的線程狀態(tài)。如果沒有完成任何指令,則在活動線程的線程狀態(tài)寄存器中的前進計數器值與前進閾值比較。如果計數器值不等于閾值,由線程切換算法繼續(xù)評估處理器中各線程的線程狀態(tài)。然后,如果發(fā)生線程切換,則前進計數器增量。然而,如果計數器值或狀態(tài)等于閾值,則在能執(zhí)行一條指令之前將不發(fā)生線程切換,即直到發(fā)生前進時才會發(fā)生線程切換。請注意,如果閾值寄存器有零值,則在切換到另一線之前在該活動線程內必須完成至少一條指令。如果每次線程切換需要3個處理器周期,而且如果存在兩個線程,而且如果線程切換邏輯被編程為5次嘗試之后停止嘗試切換線程,則處理器將在30個周期內翻來復去地重復。本領域技術人員會理解,在一方面由于沒有前進而禁止線程切換和另一方面由于已超過超時計數而迫使線程切換這二者之間存在潛在的沖突。這種沖突能根據結構和軟件容易地解決。圖6是線程切換邏輯400的前進計數特性的流程圖,這防止翻來復去重復。在塊610,在從屬于線程T0的線程狀態(tài)寄存器442中的位1517被復位為狀態(tài)111。在塊620試圖執(zhí)行這一線程,于是狀態(tài)變?yōu)?00。如果對線程T0成功地執(zhí)行了一條指令,則線程T0的狀態(tài)變回為111并保持此狀態(tài)。然而,如果線程T0不能執(zhí)行一條指令,則線程T1發(fā)生線程切換,或者切換到另一后臺線程,如果在處理器結構中允許兩個以上線程的話。當發(fā)生離開T1或其他后臺線程的線程切換并使執(zhí)行返回到線程T0時,則發(fā)生執(zhí)行線程T0的第二次嘗試,于是線程T0的狀態(tài)在塊630變?yōu)?01。如果線程T0遇到線程切換事件,則處理器的控制再次從線程T0切換到另一線程。類似地,每當發(fā)生離開另一線程(例如T1)返回線程T0的線程切換,則在這第3次嘗試執(zhí)行T0時T0的狀態(tài)變?yōu)?10(塊640);在第4次嘗試執(zhí)行T0時變?yōu)?11(塊650),并在第5次嘗試執(zhí)行T0時變?yōu)闋顟B(tài)100(塊660)。在這一實現(xiàn)中,有5次試圖切換到線程T0。在第5次嘗試之后,或每當線程狀態(tài)寄存器(TSR)442中位1517的值等于線程切換控制寄存器(TSC)410中位3031之值加1的時候,即每當TSC(3031)+1=TSR(1517)時,則不會發(fā)生從線程T0離開的線程切換??梢岳斫?,5次嘗試是一個任意數;由于不成功執(zhí)行而允許切換的最大次數,即前進閾值,是可編程的,而且在某些結構中可能認為5次切換太多,而在另一些結構中5次又太少。不管怎樣,在無指令執(zhí)行的情況下試圖切換到一線程的次數必須與一閾值比較,而且一旦已達到那一閾值值,則不會再發(fā)生離開那個線程的線程切換,其中處理器將等待直至與那個線性關聯(lián)的等待時間被化解為止。在其中描述的實施例中,由線程狀態(tài)寄存器442的位1517代表的線程狀態(tài)與線程切換控制寄存器410中的位3031比較。對于有特別長等待時間的特殊事件,如與輸入/輸出裝置的相互作用,進行特殊處理以防止由前進邏輯過早地鎖住線程切換,從而改善了處理器性能。處置這些特別長等待時間事件的一種方式是鎖住前進計數器增量,或者忽略前進計數器與閾值比較的輸出信號,如果數據尚未返回的話。處理特別長等待時間事件的另一方式是對這些特殊事件使用單獨的更長的前進計數。分配給處理器的所有軟件線程的線程狀態(tài)最好如所描述的那樣保持在圖4中的線性狀態(tài)寄存器442和444中。在單一處理器中在一個時刻一個線程執(zhí)行它的指令而其他線程在休眠。當相對于前進寄存器420、線程切換控制寄存器410或線性切換超時寄存器430而言,該活動線程遇到了一個長等待時間事件,則執(zhí)行從活動線程切換到一個休眠線程。與哪個線程是活動線程無關,這些硬件寄存器使用的條件在執(zhí)行過程中不發(fā)生動態(tài)變化。由線程切換管理器靈活地改變線程切換條件改善了系統(tǒng)的總體性能。一個軟件線程切換管理器能改變線程切換頻率,增大至關重要任務可得到的執(zhí)行周期數和減小由于線程切換等待時間造成的總周期損失。線程切換管理器或者可在編譯時或者可在執(zhí)行過程中由操作系統(tǒng)編程,例如,一個閉鎖循環(huán)能改變線程切換頻率;或者由于處在較低優(yōu)先級的休眠線程在等待一個外部中斷或否則已準備好,則可以把一操作系統(tǒng)任務分配。不允許或降低離開一活動線程的線程切換,從而使當前指令流的性能不受進出于它的切換所造成的等待時間的影響,這可能是有利的。另一種作法是,通過基本上降低其優(yōu)先級,一個線程能放棄一些或全部它的執(zhí)行周期,結果降低了進入它的切換頻率或增加了離開該線程的切換頻率,以增強系統(tǒng)的總體性能。線程切換管理器還能無條件地迫使或禁止一線程切換,或者影響下一次選擇哪個線程去執(zhí)行。多優(yōu)先級線程切換方案對每個線程賦予一個優(yōu)先級值,以使引起切換的條件定量化。還可能希望在某些情況下有由硬件改變線程優(yōu)先級。例如,一個低優(yōu)先級線程可能在等待某一事件,而當該事件發(fā)生時,該硬件能提高該線程的的優(yōu)先級以影響該線程對該事件(例如一個外部中斷290)的響應時間。各線程間的相對優(yōu)先級或某一線程的優(yōu)先級將影響對這一事件的處理。線程的優(yōu)先級可由硬件響應于一個事件來調節(jié),或由線程切換管理器軟件使用一個或多個指令來調節(jié)。線程切換管理器改變硬件線程切換邏輯完成的行動,以有效地改變線程的相對優(yōu)先級。對于其中描述的有兩線程的實施例使用了3個優(yōu)先級,這3個優(yōu)先級足以區(qū)分線程以允許對性能調優(yōu)而不會使系統(tǒng)性能變壞。利用3個優(yōu)先級,兩個線程能有相等的中等優(yōu)先級狀態(tài),對兩個線程選擇3個優(yōu)先級這種做法不想成為一種限制。在某些結構中,一個“正常”狀態(tài)可能是有一個線程的優(yōu)先級總是高于其他線程。在本發(fā)明的范圍內想要復蓋多于兩個執(zhí)行線程,具有一個或多個優(yōu)先級,它們可在硬件中設定或由軟件編程。每個線程的3個優(yōu)先級是高、中、低。當線程T0的優(yōu)先級與線程T1的優(yōu)先級相同時,這對線程切換邏輯無影響。兩個線程都有相等的優(yōu)先級,則哪一個也沒有優(yōu)先的執(zhí)行時間。當線程T0的優(yōu)先級大于線程T1的優(yōu)先級時,對某些線程切換事件,即所有L1高速緩存缺失(即數據加載、數據存儲和指令取),便不能由T0切換到T1,因為L1高速緩存缺失的解決要比其他條件(例如L2缺失和翻譯)快得多??赡苁谷魏尉€程切換事件失效,從而給予線程T0以更好的機會,以比線程T1接受更多的執(zhí)行周期,這允許線程T0繼續(xù)執(zhí)行,只要它不浪費過多的執(zhí)行周期數。然而,如果線程T0遇到一個較長的執(zhí)行等待時間,例如一個L2高速緩存缺失或從計算機系統(tǒng)外部的源提取數據,則處理器仍將放棄對線程T1的控制。從線程T1到T0的線程切換不受影響,除非當休眠線程T0準備好而在這種情況中線程T0優(yōu)先于線程T1時發(fā)生切換。當由于一L2高速緩存缺失或翻譯請求使線程T0被切換開,而當線程T1在執(zhí)行時這一條件在后臺得以解決,這時預計會發(fā)生這種情況。線程T0的優(yōu)先級低于線程T1的情況類似于上述情況,只是指定的線程相反。有幾種不同的可能途徑去實現(xiàn)通過改變線程優(yōu)先級來管理線程切換。對處理器結構可以增加新指令。有所希望的行動的那些有副作用的現(xiàn)存處理器指令也能使用。對在允許軟件控制的各種方法當中進行選擇有影響的各因素當中有(a)重新定義結構以包括新指令的容易程度和結構改變對現(xiàn)有處理器的影響;(b)在不同版本處理器上運行同一軟件的需要;(c)在使用新的專用指令與重用現(xiàn)有指令并確定造成的副作用二者之間作性能權衡;(d)所希望的軟件控制水平,例如能否由某些現(xiàn)有指令的每次執(zhí)行(例如特殊的加載或存儲)造成這種作用,或者是否需要通過向指令流中增加指令來增加控制以特別造成這種作用。其中描述的結構最好利用未用過的指令,它的值不改變處理器中納入結構的通用寄存器;這一特性對于把多線程能力改進到一個處理器結構中是至關重要的。否則可對特殊指令編碼。這個指令是一個“優(yōu)選的空操作”“或0,0,0”,然而,其他指令能有效地用作空操作??詹僮?no-op或nop)是這樣一條指令,它的執(zhí)行使計算機進入下一個要執(zhí)行的指令而不完成任何操作。在一個最佳結構實施例中,通過使用不同版本的“或”指令,“或0,0,0”或“1,1,1”或任何現(xiàn)有的能把額外的優(yōu)先權切換意義加到它上面以改變線程優(yōu)先級的指令,這同一指令流可在一處理器上執(zhí)行而不產生壞作用,例如非法指令中斷。當試圖執(zhí)行一個非法指令,或不由本實現(xiàn)提供的保留指令或可選指令時,便會產生非法指令中斷。一個擴展利用機器狀態(tài)寄存器的狀態(tài)去改變這些指令的意義。例如,可能不希望允許用戶對部分或全部這些線程優(yōu)先級指令進行編碼并訪問它們提供的功能。它們提供的特殊功能可能被規(guī)定為只在某些執(zhí)行方式中發(fā)生,而在其他方式中它們沒有作用而且將作為一個“空操作”正常執(zhí)行。一種可能的實現(xiàn),利用雙線程的多線程處理器,使用3個優(yōu)先級切換指令,這些指令成為執(zhí)行軟件本身的一部分,以改變本身的優(yōu)先級tsop1“或1,1,1”-切換到休眠線程tsop2“或1,1,1”-置活動線程于低優(yōu)先級-切換到休眠線程-注意只在特權模式下有效,除非TSC〔19〕=1Tsop3“或2,2,2”-置活動線程于中等優(yōu)先級Tsop4“或3,3,3”-置活動線程于高優(yōu)先級-注意只在特權模式下有效優(yōu)先級切換指令tsop1和tsop2可為同一指令,如在其中實現(xiàn)為“或1,1,1”,但它們也可以各為單獨的指令。如其中描述的那樣,這些指令與線程切換控制寄存器410的19和21位以及機器狀態(tài)寄存器的問題/特權位相互作用。如果線程切換控制寄存器410的位21位有值1,則線程切換管理器能把它的線程優(yōu)先級置為線程狀態(tài)寄存器中位1819中代表的3個優(yōu)先級之一。如果線程切換控制寄存器410的位19有值0,則指令tsop2的線程切換與線程優(yōu)先級設置由機器狀態(tài)寄存器的問題/特權位控制。另一方面,如果線程切換控制寄存器410的位19有值1,或者如果機器狀態(tài)寄存器的問題/特權位有值0而且在代碼中出現(xiàn)指令“或1,1,1”,則該活動線程的優(yōu)先級設為低而且執(zhí)行立即切換到休眠或后臺線程,如果該休眠線程被允許的話。指令“或2,2,2”置活動線程的優(yōu)先級于中等,不管機器狀態(tài)寄存器的問題/特權位的值如何。而當機器狀態(tài)寄存器的問題/特權位有值0時,指令“或3,3,3”置活動線程的優(yōu)先級于高。如果線程切換控制寄存器320的位21為零,則兩個線程的優(yōu)先級都置于中等,而且“或X,X,X,”指令時優(yōu)先級的作用被鎖住。如果一個外部中斷請求有效,而且如果相應線程的優(yōu)先級為低,則把該線程的優(yōu)先級置于中等。被線程優(yōu)先級改變的事件是(1)由于L1D-高速緩存加載數據缺失而切換;(2)由于L1D-高速緩存存儲數據缺失而切換;(3)由于L1I-高速緩存指令取缺失而切換;(4)如果休眠線程處于準備好狀態(tài)而切換。此外,外部中斷生效可能改變相應線程的優(yōu)先級。下表顯示優(yōu)先級對引起線程切換的條件的影響。在第3和第4列中的簡單的TSC條目的意思是利用線程切換控制(TSC)寄存器410中提出的條件去啟動一次線程切換。把TSC〔02〕條目作為0對待的意思是線程切換控制寄存器410的位02被看作是對那個線程這些位的值猶如零,而線程切換控制寄存器410中的其他位按原樣定義引起線程切換的條件。在第4列中的短語“當線程T0準備好時”的意思是一旦線程T0不再等待使它切換出去的缺失事件時便發(fā)生到線程T0的切換。在第3列中的短語“當線程T1準備好時”的意思是一旦線程T1不再等待使它切換出去的缺失事件時便發(fā)生到線程T1的切換。如果這缺失事件是一個線程切換超時,則不保證在一較高優(yōu)先級線程切換回來之前較低優(yōu)先級事件能完成一條指令。建議給予做無產出工作的線程以低優(yōu)先級以避免損失性能,即使在閑循環(huán)中的每條指令引起線程切換也如此。然而,仍然重要的是,如果一個設在低先級的線程請求一外部中斷290,則應允許硬件改變線程優(yōu)先級。在這種情況下,該線程被提高到中等優(yōu)先級以允許更快地響應中斷。這允許一個等待外部事件的線程把它本身設為低優(yōu)先級,它將停留在那里直至該事件被通知出去。盡管已聯(lián)系當前認為最實際的和最佳的實施例描述了本發(fā)明,但應該理解,本發(fā)明不限于所說明的實施例,而是相反,本發(fā)明要復蓋在所附各權利要求的實質和范圍內包括的各種修改和等價安排。權利要求1.一種計算機處理方法,包括把至少一個活動線程的第一狀態(tài)存儲到至少一個硬件寄存器中;在多線程處理器中執(zhí)行這至少一個活動線程;以及改變這至少一個活動線程的第一狀態(tài)。2.權利要求1的方法,還包括把至少一個后臺線程的第二狀態(tài)存儲到至少一個硬件寄存器中;判定這至少一個活動線程的第一狀態(tài)的改變是否引起多線程處理器把執(zhí)行切換到這至少一個后臺線程。3.權利要求1或2的方法,其中改變至少一個活動線程第一狀態(tài)的步驟包括描述一個活動線程等待時間事件,它停止多線程處理器的執(zhí)行。4.權利要求1或2的方法,其中改變至少一個活動線程第一狀態(tài)的步驟包括改變該活動線程的優(yōu)先級。5.權利要求1至4中任何一個的方法,還包括把執(zhí)行切換到這至少一個后臺線程。6.權利要求1至5中任何一個的方法,還包括對這至少一個活動線程已執(zhí)行的處理器周期數計數并當該執(zhí)行周期數等于一個超時值時把執(zhí)行切換到這至少一個后臺線程。7.權利要求1至6中任何一個的方法,還包括接收一個外部中斷信號,于是把執(zhí)行切換到這至少一個后臺線程。8.權利要求2至7中任何一個的方法,其中判定這至少一個活動線程的第一狀態(tài)的改變是否使多線程處理器把執(zhí)行切換到這至少一個后臺線程的步驟還包括檢驗第一狀態(tài)的改變是否由一活動線程等待時間事件造成的;判定這等待時間事件是否是一個線程切換事件;以及判定該線程切換事件是否是被允許的。9.權利要求8的方法,其中當線程切換控制寄存器中與該線程切換事件對應的至少一位為使能位時該線程切換事件便被允許。10.權利要求2至9中任何一個的方法,其中判定這至少一個活動線程第一狀態(tài)的改變是否使多線程處理器把執(zhí)行切換到這至少一個后臺線程的步驟還包括改變這至少一個活動線程的優(yōu)先級,使其等于或低于這至少一個后臺線程的優(yōu)先級。11.權利要求2至10中任何一個的方法,還包括改變這至少一個后臺線程的優(yōu)先級,使其等于或高于這至少一個活動線程的優(yōu)先級;以及判定改變這至少一個后臺線程的第二狀態(tài)是否使多線程處理器把執(zhí)行切換到這至少一個后臺線程。12.權利要求11的方法,還包括把執(zhí)行切換到這至少一個后臺線程。13.權利要求11的方法,還包括不把執(zhí)行切換到這至少一個后臺線程。14.權利要求2、3或4中任何一個的方法,還包括不把執(zhí)行切換到這至少一個后臺線程。15.權利要求2至7、10、11、13或14中任何一個的方法,其中判確定這至少一個活動線程第一狀態(tài)的改變是否使多線程處理器把執(zhí)行切換到這至少一個后臺線程的步驟還包括檢驗第一狀態(tài)的改變是否由于一等待時間事件的結果;判定該等待時間事件是否是一個線程切換事件;以及判定該線程切換事件不被允許。16.權利要求2、3、4、8、9、10、11、13或14中任何一個的方法,還包括對已經發(fā)生的離開這至少一個活動線的線程切換次數計數;把該次數與一計數閾值比較;當該次數等于計數閾值時發(fā)出信號,并響應于這一信號而不對執(zhí)行進行切換。17.權利要求2至16中任何一個的方法,其中判定這至少一個活動線程第一狀態(tài)的改變是否使多線程處理器把執(zhí)行切換到這至少一個后臺線程的步驟還包括把這至少一個活動線程的第一狀態(tài)與這至少一個后臺線程的第二狀態(tài)相比較;以及選擇有最低預期持續(xù)時間的等待時間事件的線程供多線程處理器中執(zhí)行。18.權利要求17的方法,還包括當第二狀態(tài)為準備好或后臺線程在等待一個后臺等待時間事件的預期持續(xù)時間等于或短于活動線程等待時間事件時,把執(zhí)行切換到這至少一個后臺線程。19.權利要求3至18中任何一個的方法,其中活動線程等待時間事件是一個L2高速緩存缺失或一個表后備緩存器缺失,而后臺等待時間事件是一個L1高速緩存缺失。20.權利要求3至12或15至19中任何一個的方法,還包括改變這至少一個后臺線程的第二狀態(tài);當活動線程等待時間事件的預期持續(xù)時間長于一后臺等待時間事件時,或當這至少一個后臺線程的第二狀態(tài)為準備好時,把執(zhí)行切換到這至少一個后臺線程。21.一種計算機處理方法,包括把至少一個活動線程的第一狀態(tài)存儲到至少一個硬件寄存器中;把至少一個后臺線程的第二狀態(tài)存儲到至少一個硬件寄存器中;在多線程處理器中執(zhí)行這至少一個活動線程;如果下述條件中任何一個發(fā)生則改變這至少一個活動線程的第一狀態(tài)由于一等待時間事件使這至少一個活動線程的執(zhí)行停止;把這至少一個活動線程的優(yōu)先級改變?yōu)榈扔诨虻陀谶@至少一個后臺線程的優(yōu)先級;通過判定是否該等待時間事件是一個線程切換事件;以及判定是否該線程切換事件被允許。來判定改變這至少一個活動線程的第一狀態(tài)是否使多線程處理器把執(zhí)行切換到這至少一個后臺線程;在下列條件之一的情況下把執(zhí)行切換到這至少一個后臺線程對這至少一個活動線程已執(zhí)行的處理器周期數計數并當該執(zhí)行周期數等于一超時值時,把執(zhí)行切換到這至少一個后臺線程;收到一個外部中斷信號,于是把執(zhí)行切換到這至少一個后臺線程;在一線程切換控制寄存器中與該線程切換事件對應的至少一位是有效的;把這至少一個后臺線程的優(yōu)先級改為等于或高于這至少一個活動線程優(yōu)先級;在下列條件之一的情況下不把執(zhí)行切換到這至少一個后臺線程確定該等待時間事件不是一個線程切換事件;確定該線程切換事件不是一個有效事件;對已發(fā)生的離開這至少一個活動線程的線程切換次數計數,并把該次數與一計數閾值比較,并當該計數等于計數閾值時向線程切換控制寄存器發(fā)信號。22.一個線程狀態(tài)寄存器(440),包括多位用于存儲至少一個活動線程的狀態(tài)和至少一個后臺線程的狀態(tài)。23.權利要求22的線程狀態(tài)寄存器,其中這多個位中的一些位指示一個等待時間事件,是否向每個有關狀態(tài)的過渡造成把執(zhí)行切換到另一線程,以及這些線程的優(yōu)先級。24.一個數據處理系統(tǒng)(10),包括中央處理單元(100),包括一多線程處理器(110)能執(zhí)行至少一個活動線程并存儲至少一個后臺線程的狀態(tài),還包括多個執(zhí)行單元(260、270、280)、多個寄存器(272、274、284)、多個高速緩存存儲器(120、130、150)、主存儲器(140)、以及指令單元(220);其中執(zhí)行單元、寄存器、存儲器、及指令單元在功能上是互連的;所述中央處理單元還包括線程切換邏輯單元(400)和存儲控制單元(200),它們也在功能上與所述多線程處理器相連;多個外部連接,包括總線接口(152)、總線(155)、至少一個輸入/輸出處理器(160)與下述中至少一個相連帶驅動器(172)、數據存儲裝置(170)、計算機網絡(166)、光纖通信(174)、工作站(176)、外圍裝置(178)、信息網絡(174);它們任何一個都能經由總線向中央處理單元傳送數據和指令;其中當這至少一個活動線程停止執(zhí)行時,該事件及其理由以及其他數據和指令傳送到存儲控制單元,該存儲控制單元把相應的信號發(fā)送到線程切換邏輯單元和多線程處理器,而線程切換邏輯單元改變這至少一個活動線程的狀態(tài)并判定多線程處理器是否將切換線程并執(zhí)行所述多個后臺線程之一。25.權利要求24的計算機處理系統(tǒng),其中該多線程處理器單元還包括至少一個數據高速緩存;至少一個存儲器;至少一個指令單元;以及至少一個執(zhí)行單元。26.權利要求24或25的計算機處理系統(tǒng),其中存儲控制單元(200)還包括過渡高速緩存(210);至少一個第一多路復用器(370)與這至少一個指令單元相連以提供指令供多線程處理器單元執(zhí)行;至少一個第二多路復用器(360)向這至少一個執(zhí)行單元供給數據。27.權利要求24至26中任何一個的計算機處理系統(tǒng),其中該線程切換邏輯還包括線程狀態(tài)寄存器(440);以及線程切換控制寄存器(410)。28.權利要求24至27中任何一個的計算機處理系統(tǒng),其中線程切換邏輯還包括前進計數寄存器(420);線程切換超時寄存器(430);以及線程切換管理器。29.一個計算機處理器系統(tǒng),包括處理至少一個活動指令線程的裝置;存儲這至少一個活動線程狀態(tài)的裝置;存儲至少一個后臺指令線程狀態(tài)的裝置;改變這至少一個活動線程和這至少一個后臺線程的狀態(tài)的裝置;響應改狀態(tài)裝置,切換線程從而使處理裝置處理這至少一個后臺線程的裝置。30.權利要求29的計算機處理器系統(tǒng),其中改變這至少一個活動線程和這至少一個后臺線程狀態(tài)的裝置包括一個外部硬件中斷信號;一個線程切換管理器;當處理裝置遇到多個等待時間事件之一時發(fā)信號的裝置,該事件使處理單元停止繼續(xù)處理這至少一個活動線程。31.權利要求29或30的計算機器系統(tǒng),其中切換線程的裝置包括使多個等待時間事件之一成為線程切換事件的裝置;改變任何線程優(yōu)先級的裝置;使處理裝置超時的裝置;比較每個線程的狀態(tài)并選擇這樣的線程的裝置,該線程具有多個等待時間事件,而其中一個事件的預期等待時間最短。32.權利要求29至31中任何一個的計算機處理器系統(tǒng),還包括不考慮切換線程裝置的裝置。33.一個計算機處理器,包括一個多線程處理器,能執(zhí)行多個指令線程中的至少一個;第一組硬件寄存器,用于存儲多個指令線程中每個的狀態(tài);第二組硬件寄存器,用于存儲多個第一事件,一旦它們發(fā)生則多線程處理器將切換線程執(zhí)行;其中如果改變第一組硬件寄存器中任何指令線程狀態(tài)的第二事件在第二組硬件寄存器中為有效的話,則該計算機處理系統(tǒng)能切換線程。全文摘要在數據處理系統(tǒng)中完成計算機處理操作的系統(tǒng)和方法包括多線程處理器(110)和線程切換邏輯(400)。該多線程處理器(110)能在兩個或更多個能獨立執(zhí)行的指令線程之間切換。每個線程根據其執(zhí)行狀態(tài)在線程狀態(tài)寄存器(440)中有相應的狀態(tài)。該線程切換邏輯含有一線程邏輯控制寄存器(410)存儲能引發(fā)線程切換的條件。一旦發(fā)生線程切換事件,則動態(tài)地詢問所有線程的狀態(tài)和優(yōu)先級,以確定哪個線程應為執(zhí)行處理器的活動線程。線程切換邏輯有一超時寄存器(430),當活動線程在多線程處理器中的執(zhí)行超過一可編程時間段時,該超時寄存器迫使發(fā)生線程切換。線程切換邏輯還有一個前進計數寄存器(420)以防止多線程處理器中在線程之間進行反復的無產出的線程切換。線程切換邏輯還響應于一線程切換管理器(460),它能改變不同線程的優(yōu)先級,從而更換線程切換事件。文檔編號G06F9/46GK1276887SQ98810345公開日2000年12月13日申請日期1998年10月14日優(yōu)先權日1997年10月23日發(fā)明者約翰·M·博克哈根,理查德·J·??嗣穪?威廉·T·弗林,謝爾登·B·萊文斯坦,安德魯·H·沃特靈申請人:國際商業(yè)機器公司