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

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

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

      上下文保存的制作方法

      文檔序號(hào):6481635閱讀:254來(lái)源:國(guó)知局
      專利名稱:上下文保存的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及處理器,特別是可在兩個(gè)或多個(gè)不同執(zhí)行模式,例如標(biāo)量模式和超長(zhǎng)指令字(VLIW)模式之間切換的處理器。
      為了滿足不同處理任務(wù)的需要,已經(jīng)提出提供可在兩個(gè)或多個(gè)不同執(zhí)行模式之間切換的處理器。這種兩個(gè)或多個(gè)執(zhí)行模式可以具有不同的指令集,它們可能是考慮到不同類型的處理任務(wù)而設(shè)計(jì)的。例如,一個(gè)指令集可能設(shè)計(jì)為如通常處理器那樣用于順序執(zhí)行,而另一指令集可能設(shè)計(jì)為允許數(shù)個(gè)指令被并行執(zhí)行。這樣,處理器一般具有至少是第一指令集被支持的第一執(zhí)行模式,以及至少第二指令集被支持的第二模式。這樣的處理器一般通過(guò)執(zhí)行一特定的指令或指令組從一個(gè)執(zhí)行模式轉(zhuǎn)移到另一模式。
      現(xiàn)代處理器通常設(shè)計(jì)為支持多任務(wù),即它們?cè)试S執(zhí)行的幾個(gè)線程在用戶看來(lái)似乎是在同時(shí)被處理。這通常是在操作系統(tǒng)控制下在不同線程之間快速切換處理器的資源而實(shí)現(xiàn)的,以造成線程在同時(shí)處理的假象。這種切換在此稱為上下文切換。只要發(fā)生上下文切換,處理器的寄存器的內(nèi)容,標(biāo)志等(稱為處理器上下文)必須返回當(dāng)新的線程上次被執(zhí)行的時(shí)的狀態(tài)。這是通過(guò)保存當(dāng)前處理器的上下文,即將其保存在存儲(chǔ)器中,并通過(guò)對(duì)新的線程恢復(fù)處理器的上下文,即從存儲(chǔ)器尋回該上下文而作到的。在已知的處理器中,當(dāng)發(fā)生上下文切換時(shí),整個(gè)處理器的上下文被保存和恢復(fù),因?yàn)椴僮飨到y(tǒng)并不知道處理器上下文的哪部分被離去的線程使用,而哪部分將由來(lái)到的線程使用。
      能夠在兩個(gè)或多個(gè)不同執(zhí)行模式之間切換的處理器中,不同模式中處理器上下文的大小可能不同。其結(jié)果可能是,當(dāng)發(fā)生上下文切換時(shí),處理器上下文的一部分不必要地被保存和存儲(chǔ)。
      例如,在能夠支持并行處理的處理器中,處理器的上下文可能很大,因而在每一上下文切換時(shí)可能需要保存和恢復(fù)大量的數(shù)據(jù)。即使處理器并不總是工作在并行處理模式,并行處理模式的處理器上下文在每一上下文切換時(shí)仍將要被保存和恢復(fù)。這可能會(huì)不情愿地消耗大量的處理器時(shí)間,從而降低了任務(wù)能夠被處理的比率。
      本發(fā)明試圖要克服以上問(wèn)題。
      根據(jù)本發(fā)明的第一方面,提供了一種在第一執(zhí)行模式和第二執(zhí)行模式之間可切換的處理器,該處理器在處于第一執(zhí)行模式時(shí)具有第一處理器上下文,并在處于第二執(zhí)行模式時(shí),具有不同于第一處理器上下文的第二處理器上下文,其中該處理器配置為在處理器試圖從一個(gè)執(zhí)行模式改變?yōu)榱硪粓?zhí)行模式時(shí)將產(chǎn)生一個(gè)異常。
      當(dāng)處理器試圖從一個(gè)執(zhí)行模式改變到其它執(zhí)行模式時(shí),通過(guò)產(chǎn)生一個(gè)異常,處理器的操作系統(tǒng)能夠保持對(duì)各執(zhí)行模式正在被使用時(shí)的跟蹤。這能夠允許操作系統(tǒng)進(jìn)行控制使得處理器上下文的哪些部分(包括處理器中存儲(chǔ)單元的內(nèi)容)在哪些時(shí)間被保存。當(dāng)處理器試圖從第一執(zhí)行模式改變到第二執(zhí)行模式時(shí),或當(dāng)處理器試圖從第二執(zhí)行模式改變到第一執(zhí)行模式時(shí),可以產(chǎn)生異常,或者在兩種情形下都可產(chǎn)生異常。
      例如,第二處理器上下文可能大于第一處理器上下文,并當(dāng)處理器試圖從第一執(zhí)行模式改變到第二執(zhí)行模式時(shí),可能產(chǎn)生異常。這可以允許第二處理器上下文只有在絕對(duì)必要時(shí)才被保存,這可以改進(jìn)整個(gè)系統(tǒng)的性能。
      在以上情形下,處理器可以被配置使得當(dāng)這種異常已經(jīng)產(chǎn)生時(shí),保存第二處理器上下文,或者保存第二處理器上下文不同于第一處理器上下文的部分。這可以避免在每一上下文切換時(shí)必須保存第二處理器上下文。取決于實(shí)現(xiàn)方式,當(dāng)這種異常產(chǎn)生時(shí)第二處理器上下文可以被自動(dòng)保存,或者可以確定在該階段是否必須保存第二處理器上下文。例如,如果當(dāng)前線程已是在第二執(zhí)行模式中的最后的線程,那么可能不必保存第二處理器上下文。
      在一定的環(huán)境下,例如兩個(gè)或多個(gè)線程都處于第二執(zhí)行模式中,當(dāng)發(fā)生上下文切換時(shí),則可能必須保存第二處理器上下文。例如,如果處理器隨后切換到第二執(zhí)行模式中的一個(gè)線程,且不是第二執(zhí)行模式中最后的線程,則在該階段可能必須保存第二處理器上下文。這樣,處理器可以配置使得基于時(shí)間共享而執(zhí)行多個(gè)線程,且處理器可被配置使得,當(dāng)處理器切換到第一執(zhí)行模式中的線程時(shí),或者當(dāng)處理器切換到原來(lái)是第二執(zhí)行模式中的最后線程的線程時(shí),只保存第一處理器的上下文。這時(shí)處理器可以被配置為使得,當(dāng)處理器后來(lái)要進(jìn)入第二執(zhí)行模式以執(zhí)行不同于第二執(zhí)行模式中上一個(gè)線程的一個(gè)線程時(shí),第二處理器上下文,或者第二處理器上下文不同于第一處理器上下文的部分被保存。
      為了限制第二處理器上下文被保存和恢復(fù)的次數(shù),可以限制可能在第二執(zhí)行模式中的線程數(shù)。這樣,處理器可以配置為使得基于時(shí)間共享執(zhí)行多個(gè)線程,且在任何一時(shí)間可能處于第二執(zhí)行模式中的線程數(shù)可能小于任何一時(shí)間處理器上活動(dòng)的線程總數(shù)。這可以改進(jìn)總的系統(tǒng)性能。
      為了實(shí)現(xiàn)以上技術(shù),處理器可以這樣配置,使得當(dāng)已經(jīng)產(chǎn)生異常時(shí),進(jìn)行檢驗(yàn)以判斷引起異常的線程是否被允許進(jìn)入第二執(zhí)行模式。例如,只有一定的預(yù)定的線程可被允許在第二執(zhí)行模式中執(zhí)行,且這種檢驗(yàn)可以包括判斷引起異常的線程是否被阻擋在第二執(zhí)行模式之外。
      在另一例子中,處理器操作系統(tǒng)在任何一時(shí)間只允許有限數(shù)目的線程處于第二執(zhí)行模式。這樣,檢驗(yàn)可以包括判斷預(yù)定數(shù)目的其它線程是否已經(jīng)處于第二執(zhí)行模式。該預(yù)定數(shù)目可以大于或等于一。如果多于預(yù)定數(shù)目的線程已經(jīng)處于第二執(zhí)行模式,則處理器可以被配置為防止引起異常的線程進(jìn)入第二執(zhí)行模式,例如,通過(guò)終止該線程,或通過(guò)在第一執(zhí)行模式中繼續(xù)該線程的執(zhí)行,或通過(guò)使該線程的執(zhí)行暫停直到少于預(yù)定數(shù)目的其它線程處于第二執(zhí)行模式。
      這樣,處理器可以這樣配置,使得如果預(yù)定數(shù)目的其它線程已經(jīng)處于第二執(zhí)行模式,則引起異常的線程的執(zhí)行被暫停直到處于第二執(zhí)行模式的其它線程的數(shù)目小于預(yù)定數(shù)目。當(dāng)一個(gè)線程試圖從第二執(zhí)行模式改變?yōu)榈谝粓?zhí)行模式時(shí),可能產(chǎn)生異常,于是知道(例如通過(guò)操作系統(tǒng))何時(shí)線程已經(jīng)停止在第二執(zhí)行模式中執(zhí)行。
      處理器最好配置為使得當(dāng)處于第一執(zhí)行模式時(shí)執(zhí)行第一指令集,并當(dāng)處于第二執(zhí)行模式時(shí)執(zhí)行第二指令集。第二指令集可以能夠比第一指令集訪問(wèn)處理器中更大數(shù)目的存儲(chǔ)單元(諸如寄存器)。
      處理器最好能夠在管理模式和用戶模式之間切換,與管理模式相比用戶模式具有對(duì)處理器資源受限制的訪問(wèn),并當(dāng)所述異常產(chǎn)生時(shí),處理器從用戶模式轉(zhuǎn)移到管理模式。這時(shí)可以提供在管理模式下執(zhí)行的異常處理程序部分以處理異常。異常處理程序部分可以是操作系統(tǒng)的一部分。
      處理器可以包括至少一個(gè)執(zhí)行單元和多個(gè)存儲(chǔ)單元,且第一處理器上下文可以包括在第一執(zhí)行模式中可訪問(wèn)的存儲(chǔ)單元的內(nèi)容,且第二處理器上下文可以包括執(zhí)行的第二模式中可訪問(wèn)的存儲(chǔ)單元的內(nèi)容。在兩個(gè)處理器上下文之間可以有交叉;例如,第二處理器上下文可以包含某些或全部第一處理器上下文。
      處理器可以包括多個(gè)計(jì)算單元用于并行執(zhí)行指令,每一計(jì)算單元具有至少一個(gè)執(zhí)行單元和執(zhí)行單元可訪問(wèn)的至少一個(gè)存儲(chǔ)單元。在第一執(zhí)行模式下第一數(shù)目的計(jì)算單元可以執(zhí)行指令,并在第二執(zhí)行模式下第二數(shù)目的計(jì)算單元可以執(zhí)行指令。這第一和第二數(shù)目可以彼此不同;例如,第一數(shù)目可能至少是一,而第二數(shù)目可能大于第一數(shù)目。另外,第一和第二數(shù)目可以相同,且第一執(zhí)行模式下可訪問(wèn)的存儲(chǔ)單元數(shù)目可以不同于第二執(zhí)行模式下可訪問(wèn)的存儲(chǔ)單元數(shù)目。
      在一個(gè)例子中,第一執(zhí)行模式是標(biāo)量模式,第二執(zhí)行模式是并行模式,諸如VLIW模式。在另一例子中,第一和第二執(zhí)行模式都是標(biāo)量模式,或都是并行模式,且在兩種模式下可訪問(wèn)不同數(shù)目的處理器存儲(chǔ)單元。兩個(gè)執(zhí)行模式可以具有交叉功能;例如,一個(gè)執(zhí)行模式的指令集可能包含其它執(zhí)行模式的指令集的某些或全部指令。
      本發(fā)明的一個(gè)重要方面在于兩個(gè)處理器上下文較大者在每一上下文切換時(shí)不是必須被保存。例如,如果第二處理器上下文大于第一處理器上下文,則如果新的線程處于第二執(zhí)行模式且不是處于第二執(zhí)行模式中的最后的線程,在上下文切換時(shí)一般只需保存第二處理器上下文(或第二處理器上下文不同于第一處理器上下文的部分)。否則,只需保存第一處理器上下文。這樣,根據(jù)本發(fā)明的第二方面,提供了可在第一執(zhí)行模式和第二執(zhí)行模式之間切換的處理器,該處理器當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,并當(dāng)處于第二執(zhí)行模式時(shí)具有大于第一處理器上下文的第二處理器上下文,其中處理器被配置為基于時(shí)間共享而執(zhí)行多個(gè)線程,并且處理器被這樣配置,使得當(dāng)處理器切換到處于第一執(zhí)行模式的線程時(shí),或當(dāng)處理器切換到原來(lái)是第二執(zhí)行模式的最后線程的線程時(shí),只保存第一處理器上下文。
      當(dāng)處理器接下來(lái)要進(jìn)入第二執(zhí)行模式以執(zhí)行另一線程時(shí),最好保存第二處理器上下文或第二處理器上下文不同于第一處理器上下文的部分。處理器可以這樣配置,使得任何一時(shí)間可處于第二執(zhí)行模式的線程數(shù),小于任何一時(shí)間處理器上可能活動(dòng)的線程總數(shù)。第一執(zhí)行模式可以是一標(biāo)量模式,而第二執(zhí)行模式可以是一并行模式,諸如VLIW模式。
      本發(fā)明的另一重要方面在于,為了限制處理器上下文必須被保存和恢復(fù)的次數(shù),任何一時(shí)間處于具有最大上下文的執(zhí)行模式中的線程總數(shù)有限制。這樣,根據(jù)本發(fā)明的第三方面,提供了可在第一執(zhí)行模式和第二執(zhí)行模式之間切換的一種處理器,該處理器當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,并當(dāng)處于第二執(zhí)行模式時(shí)具有大于第一處理器上下文的第二處理器上下文,其中處理器被配置為基于時(shí)間共享而執(zhí)行多個(gè)線程,并且處理器被這樣配置,使得在任何一時(shí)間處于第二執(zhí)行模式的線程數(shù)小于任何一時(shí)間處理器上可以活動(dòng)的線程總數(shù)。
      該處理器可以這樣配置,使得當(dāng)線程試圖進(jìn)入第二執(zhí)行模式時(shí),要進(jìn)行檢驗(yàn)以判斷是否允許該線程進(jìn)入第二執(zhí)行模式。例如,檢驗(yàn)可以包括判斷該線程是否是被阻擋進(jìn)入第二執(zhí)行模式的線程,或檢驗(yàn)可以包括判斷預(yù)定數(shù)目的其它線程是否已經(jīng)處于第二執(zhí)行模式。在后者的情形下,處理器可這樣配置,使得如果預(yù)定數(shù)目的其它線程已經(jīng)處于第二執(zhí)行模式,則防止試圖進(jìn)入第二執(zhí)行模式的該線程進(jìn)入第二執(zhí)行模式,直到處于第二執(zhí)行模式的其它線程數(shù)目小于預(yù)定的數(shù)目為止。例如,直到處于第二執(zhí)行模式的其它線程數(shù)目小于預(yù)定數(shù)目之前,可以暫停試圖進(jìn)入第二執(zhí)行模式的線程的執(zhí)行。
      還提供了本發(fā)明對(duì)應(yīng)的方法方面,因而根據(jù)本發(fā)明第四方面,提供了操作處理器的一種方法,處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有不同于第一處理器上下文的第二處理器上下文,該方法包括當(dāng)處理器試圖從一個(gè)執(zhí)行模式改變到其它執(zhí)行模式時(shí)產(chǎn)生一個(gè)異常。
      根據(jù)本發(fā)明的第五方面,提供了操作處理器的一種方法,處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該方法包括執(zhí)行基于時(shí)間共享的多個(gè)線程,并當(dāng)執(zhí)行向處于第一執(zhí)行模式的線程切換時(shí),或者當(dāng)執(zhí)行向原來(lái)是第二執(zhí)行模式的最后線程的線程的切換時(shí),只保存第一處理器上下文。
      根據(jù)本發(fā)明的第六方面,提供了操作處理器的一種方法,處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該方法包括執(zhí)行基于時(shí)間共享的多個(gè)線程,并把任何一個(gè)時(shí)間可以處于第二執(zhí)行模式中的線程數(shù)限制為小于任何一個(gè)時(shí)間處理器上可活動(dòng)的線程總數(shù)。
      本發(fā)明還擴(kuò)展到用于在處理器上執(zhí)行的對(duì)應(yīng)的操作系統(tǒng),于是根據(jù)本發(fā)明的第七方面,提供了一種用于處理器的操作系統(tǒng),該處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有不同于第一處理器上下文的第二處理器上下文,該操作系統(tǒng)包括一個(gè)異常處理程序部分,用于處理當(dāng)處理器試圖從一個(gè)執(zhí)行模式改變到其它執(zhí)行模式時(shí)所產(chǎn)生的一個(gè)異常。
      根據(jù)本發(fā)明的第八方面,提供了一種用于處理器的操作系統(tǒng),該處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該操作系統(tǒng)包括一個(gè)程序部分,用于在多個(gè)基于時(shí)間共享的線程之間進(jìn)行切換執(zhí)行,以及一個(gè)程序部分,用于當(dāng)執(zhí)行向處于第一執(zhí)行模式的線程切換時(shí),或者當(dāng)執(zhí)行向原來(lái)是第二執(zhí)行模式的最后一個(gè)線程的線程切換時(shí),只保存第一處理器上下文。
      根據(jù)本發(fā)明的第九方面,提供了一種用于處理器的操作系統(tǒng),該處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該操作系統(tǒng)包括一個(gè)程序部分,用于在多個(gè)基于時(shí)間共享的線程之間進(jìn)行切換執(zhí)行,以及一個(gè)程序部分,用于把任何一個(gè)時(shí)間可以處于第二執(zhí)行模式中的線程數(shù)限制為小于任何一個(gè)時(shí)間處理器上可以活動(dòng)的線程總數(shù)。
      本發(fā)明還提供了計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品,用于執(zhí)行任何這里所述的方法,以及計(jì)算機(jī)可讀介質(zhì),其上已存儲(chǔ)用于執(zhí)行任何這里所述的方法的程序。
      一個(gè)方面的特點(diǎn)可用于任何其它方面;處理器、方法和操作系統(tǒng)的特點(diǎn)可彼此交換適用。
      現(xiàn)在將參照附圖,只是以示例的方式,說(shuō)明本發(fā)明的優(yōu)選特點(diǎn)。


      圖1是實(shí)施本發(fā)明的處理器的框圖;圖2是實(shí)施本發(fā)明的另一處理器的框圖;圖3表示在處理器上執(zhí)行的各線程的概念;圖4表示上下文切換的原理;圖5表示根據(jù)本發(fā)明的實(shí)施例,只在管理模式中可見(jiàn)進(jìn)行模式轉(zhuǎn)換方法的概念;圖6表示本發(fā)明第一實(shí)施例中由異常處理程序所進(jìn)行的步驟;圖7表示當(dāng)發(fā)生上下文切換時(shí)第一實(shí)施例中的操作系統(tǒng)所進(jìn)行的步驟;圖8表示第一實(shí)施例操作的一個(gè)例子;圖9表示本發(fā)明第二實(shí)施例中由異常處理程序所進(jìn)行的步驟;圖10表示當(dāng)發(fā)生上下文切換時(shí)第二實(shí)施例中的操作系統(tǒng)所進(jìn)行的步驟;圖11表示本發(fā)明第三實(shí)施例中由異常處理程序所進(jìn)行的步驟;圖12表示當(dāng)由從VLIW模式返回標(biāo)量模式的線程產(chǎn)生一異常時(shí),由第三實(shí)施例中的操作系統(tǒng)進(jìn)行的步驟。
      實(shí)施本發(fā)明的處理器示于圖1。參見(jiàn)圖1,處理器10包括多個(gè)計(jì)算單元12,14,16。每一計(jì)算單元包括用于執(zhí)行指令的一個(gè)執(zhí)行單元18,20,22,寄存器文件24,26,28,它們包含當(dāng)執(zhí)行指令時(shí)使用的寄存器,以及控制和/或狀態(tài)寄存器集30,32,34。計(jì)算單元12,14,16通過(guò)總線38連接到外部存儲(chǔ)器36(例如隨機(jī)訪問(wèn)存儲(chǔ)器,RAM)。各計(jì)算單元通過(guò)接口40,42,44被連接,這些接口例如用來(lái)交換存儲(chǔ)在寄存器文件24,26,28中的數(shù)值。處理器10還包括調(diào)度存儲(chǔ)單元46和指令發(fā)出單元48。在操作中,用于執(zhí)行的指令從調(diào)度存儲(chǔ)單元46傳送到指令發(fā)出單元48。指令發(fā)出單元48按指令類型向一個(gè)或多個(gè)計(jì)算單元12,14,16發(fā)出指令。
      處理器10被設(shè)計(jì)為使用兩個(gè)不同的指令集操作。這里稱為標(biāo)量指令集的第一指令集被設(shè)計(jì)為精簡(jiǎn)的,因而是存儲(chǔ)有效的。這一指令集類似于通常的RISC(精簡(jiǎn)指令集計(jì)算機(jī))處理器的指令集,并適于一般用途的應(yīng)用程序。標(biāo)量指令集是在稱為標(biāo)量模式的操作模式下執(zhí)行的。在這一模式下,指令發(fā)出單元48只向第一計(jì)算單元12發(fā)出指令,且該指令只由該計(jì)算單元執(zhí)行。第一計(jì)算單元12這里稱為主計(jì)算單元。
      第二指令集是超長(zhǎng)指令字(VLIW)指令集,該指令集設(shè)計(jì)用于高計(jì)算吞吐量。這一指令集使用長(zhǎng)指令字,或指令包,它們可被劃分為較小的指令同時(shí)執(zhí)行。VLIW指令集是在稱為VLIW模式的操作模式下執(zhí)行的。在這一模式下,用于執(zhí)行的指令包(VLIW包)從調(diào)度存儲(chǔ)單元46傳送到指令發(fā)出單元48。指令發(fā)出單元48把指令包劃分為它們的構(gòu)成指令,并把一個(gè)包的指令向主計(jì)算單元12和其它計(jì)算單元14,16的一個(gè)或多個(gè)發(fā)出。計(jì)算單元14,16這里稱為從屬計(jì)算單元。這時(shí)已經(jīng)收到屬于該包的各指令的計(jì)算單元同時(shí)執(zhí)行這些指令。
      另一實(shí)施本發(fā)明的處理器示于圖2。圖2的處理器以類似于圖1處理器的方式工作,所不同在于,每一計(jì)算單元包括兩個(gè)執(zhí)行單元。如圖1的處理器中那樣,在任一時(shí)間用于執(zhí)行指令的計(jì)算單元數(shù)目取決于處理器是處于標(biāo)量模式還是VLIW模式。圖2中所示的配置稱為群集,每一計(jì)算單元形成一個(gè)群。其它實(shí)施例中,每群設(shè)有三個(gè)或更多的執(zhí)行單元。
      參照?qǐng)D2,處理器50包括多個(gè)計(jì)算單元52,54,56,它們每一個(gè)包括兩個(gè)執(zhí)行單元58,59,60,61,62,63,以及寄存器文件64,66,68,及控制和/或狀態(tài)寄存器70,73,74。計(jì)算單元52,54,56通過(guò)總線88連接到外部存儲(chǔ)器86(例如RAM存儲(chǔ)器)。各計(jì)算單元通過(guò)接口90,92,94連接。處理器50還包括調(diào)度存儲(chǔ)單元96與指令發(fā)出單元98。
      在操作中,用于執(zhí)行的指令從調(diào)度存儲(chǔ)單元96傳送到指令發(fā)出單元98,指令發(fā)出單元98向一個(gè)或多個(gè)處理器單元52,54,56指令。當(dāng)處理器處于標(biāo)量模式時(shí),只向處理單元52發(fā)出指令,而當(dāng)該處理器處于VLIW模式時(shí),向兩個(gè)或多個(gè)處理單元52,54,56發(fā)出指令。在標(biāo)量模式下,例如取決于指令類型,指令由執(zhí)行單元58或由執(zhí)行單元59處理。在VLIW模式下,并行指令可由一個(gè)處理單元內(nèi)的兩個(gè)執(zhí)行單元同時(shí)處理。
      圖1和2所示的處理器10和50被設(shè)計(jì)為支持兩個(gè)不同專用的模式,最好稱為用戶模式和管理模式。管理模式允許訪問(wèn)整個(gè)處理器狀態(tài),即整個(gè)處理器存儲(chǔ)器,所有寄存器等。用戶模式只允許被限制的訪問(wèn)處理器狀態(tài)。例如,圖1或2中的控制集中一定的寄存器和狀態(tài)寄存器30,70只在管理模式下可訪問(wèn)。如果處理器試圖在用戶模式下進(jìn)行對(duì)于這一操作模式不合法的操作,則產(chǎn)生異常。異常引起向管理模式的轉(zhuǎn)換,并然后執(zhí)行異常處理代碼(使用操作系統(tǒng)的部分)以處理該異常。通常,操作系統(tǒng)運(yùn)行在管理模式下,而應(yīng)用程序代碼運(yùn)行在用戶模式下。
      用戶模式可以同時(shí)執(zhí)行幾個(gè)進(jìn)程(程序),每一進(jìn)程可以具有一個(gè)或多個(gè)線程(子程序)。這種情形示于圖3。幾個(gè)線程似乎在并行操作,但實(shí)際上操作系統(tǒng)在線程之間快速切換處理器資源而造成同時(shí)操作的假象。這就稱為時(shí)間共享。
      為了在不同的線程之間共享處理器資源可以使用各種不同的時(shí)間共享技術(shù)。典型的情形是,對(duì)系統(tǒng)中的每一線程給出優(yōu)先權(quán)。線程的分組可以具有相同的優(yōu)先權(quán)。在簡(jiǎn)單的多任務(wù)技術(shù)中,操作系統(tǒng)允許當(dāng)前的線程執(zhí)行直到線程本身或者直接釋放控制(即線程故意要求暫停)或者間接釋放控制,例如因?yàn)榫€程請(qǐng)求訪問(wèn)當(dāng)前由另一線程擁有的資源。當(dāng)線程釋放控制時(shí),操作系統(tǒng)選擇能夠運(yùn)行并切換到該線程的最高優(yōu)先權(quán)線程。如果兩個(gè)或多個(gè)線程都具有最高優(yōu)先權(quán),則操作系統(tǒng)根據(jù)內(nèi)部規(guī)則選擇一個(gè)。
      在另一種稱為搶先多任務(wù)的時(shí)間共享技術(shù)中,當(dāng)另一更高優(yōu)先權(quán)的線程成為可運(yùn)行時(shí),操作系統(tǒng)可能正在運(yùn)行一個(gè)線程。然后操作系統(tǒng)暫停當(dāng)前的線程并切換到更高優(yōu)先權(quán)的線程。由于數(shù)個(gè)事件的關(guān)系,更高優(yōu)先權(quán)的線程可能突然變成可運(yùn)行的。例如,當(dāng)前線程可能釋放更高優(yōu)先權(quán)線程正在等待的資源,或者可能發(fā)生中斷,其結(jié)果是中斷處理程序可能對(duì)更高優(yōu)先權(quán)線程的操作“排除了障礙”。在對(duì)這一技術(shù)的擴(kuò)展稱為時(shí)間分片的技術(shù)中,操作系統(tǒng)規(guī)則地在不同線程之間切換,每一線程具有相同(最高)的優(yōu)先權(quán)。
      將要描述的實(shí)施例可使用上述任何時(shí)間共享技術(shù),或者時(shí)間共享的任何其它形式來(lái)實(shí)現(xiàn)。
      從執(zhí)行的一個(gè)線程到另一線程的切換稱為上下文切換。當(dāng)發(fā)生上下文切換時(shí),操作系統(tǒng)必須保存離去的線程的上下文,即該線程訪問(wèn)的寄存器和處理器狀態(tài)其它方面的內(nèi)容。然后來(lái)到的線程的上下文必須被恢復(fù)到當(dāng)該線程上次被處理時(shí)它所處的狀態(tài)。操作系統(tǒng)并不知道離去的線程原來(lái)使用的上下文的哪部分或來(lái)到的線程上下文的哪部分需要被恢復(fù),于是通常保存/恢復(fù)的是整個(gè)的上下文。這種情形示于圖4。
      圖4中假設(shè)有兩個(gè)線程,線程A和線程B基于時(shí)間共享執(zhí)行。起初,處理器執(zhí)行線程A。在時(shí)間t=1處,開(kāi)始從線程A切換到線程B。然后處理器停止運(yùn)行線程A并進(jìn)入管理模式。在管理模式中,通過(guò)向存儲(chǔ)器36或86保存圖1中各寄存器24到34的內(nèi)容,或圖2中64到74的內(nèi)容,線程A的上下文被保存。一旦線程A的上下文已經(jīng)保存,則通過(guò)以處理器上次從線程B切換時(shí)原來(lái)存儲(chǔ)在存儲(chǔ)器36或86中的數(shù)值(或初始值,如果線程B是第一次被執(zhí)行)加載各寄存器24到34或64到74,線程B的上下文被恢復(fù)。然后在時(shí)間t=2處理器返回用戶模式執(zhí)行線程B。在時(shí)間t=3,開(kāi)始從線程B切換到線程A。處理器停止運(yùn)行線程B,進(jìn)入管理模式,保存線程B的上下文,并恢復(fù)線程A的上下文。在時(shí)間t=4處理器返回用戶模式執(zhí)行線程A。
      如上所討論,VLIW指令集通過(guò)提供可被并行處理的指令而為高計(jì)算吞吐量設(shè)計(jì)。用于執(zhí)行的指令包被這樣配置,使得各組成的指令在同時(shí)執(zhí)行時(shí)彼此不會(huì)沖突。在將引發(fā)沖突的情形下(例如,因?yàn)橐粋€(gè)指令在另一指令被執(zhí)行之前需要該指令可用的結(jié)果),這時(shí)沖突指令將被放入不同的指令包,且該指令包必要時(shí)將以空操作(NOP)指令被填充。
      一定的處理任務(wù),諸如數(shù)據(jù)的高速多媒體流的處理特別適合于使用VLIW指令集處理,因?yàn)閿?shù)據(jù)流的不同部分可被獨(dú)立地處理。然而,其它的處理任務(wù)不很適于并行處理,且結(jié)果可能是高度填充的VLIW指令包,這增加了代碼量。而且,當(dāng)處理器按VLIW模式操作時(shí),它通常要消耗更多的功率,于是標(biāo)量模式可能更適合在需要低功耗的情形。此外,某些通用任務(wù)可能無(wú)法在VLIW模式下執(zhí)行。由于這些原因,可能希望以標(biāo)量模式運(yùn)行程序的某些部分。對(duì)于代碼的具體部分使用標(biāo)量模式還是VLIW模式的決定或者由編譯器在編譯時(shí)作出,或者程序員可以明確聲明要使用的一種模式或另一種模式。
      為了引起從標(biāo)量模式向VLIW模式或相反的轉(zhuǎn)換,在代碼中適當(dāng)?shù)狞c(diǎn)處插入特定的指令或其它方法。諸如這里稱為模式轉(zhuǎn)換方法(MTM),轉(zhuǎn)換被稱為模式轉(zhuǎn)換事件(MTE)。例如,為了引起從標(biāo)量模式向VLIW模式的轉(zhuǎn)換,處理器可以執(zhí)行特別的轉(zhuǎn)移指令,這里稱為bv(轉(zhuǎn)移到VLIW模式)指令,并為了從VLIW模式返回標(biāo)量模式,處理器可以執(zhí)行另一指令,這里稱為rv(從VLIW模式返回)指令。
      當(dāng)處理器工作在標(biāo)量模式時(shí),只由主計(jì)算單元12或52執(zhí)行指令,于是這一模式下指令可訪問(wèn)的寄存器限于主處理單元的寄存器。此外,由于指令集的精簡(jiǎn)性,在標(biāo)量模式下寄存器文件中直接可尋址的寄存器數(shù)目,通常是寄存器文件中的寄存器總數(shù)的一個(gè)子集。反之,在VLIW模式下,指令在多個(gè)計(jì)算單元中執(zhí)行,且VLIW指令通常能夠直接對(duì)寄存器文件中所有寄存器尋址。結(jié)果是,VLIW上下文比標(biāo)量上下文大得多。
      例如,標(biāo)量指令集可被設(shè)計(jì)為對(duì)最大16個(gè)寄存器尋址,這種情形下,在標(biāo)量模式下需要保存的上下文(稱為標(biāo)量上下文)由這些16個(gè)寄存器加上諸如控制和狀態(tài)寄存器30,70等其它處理器狀態(tài)組成。在VLIW模式下指令集可被設(shè)計(jì)為對(duì)32個(gè)寄存器尋址,并可以有最多達(dá)32計(jì)算單元,每一個(gè)同時(shí)執(zhí)行一個(gè)或多個(gè)指令。這種情形下,在VLIW模式下需要保存的上下文(稱為VLIW上下文)潛在總數(shù)為1024個(gè)寄存器加上處理器狀態(tài)其它方面,諸如控制和狀態(tài)寄存器30,70及狀態(tài)寄存器32,34,72,74組成。
      如果VLIW上下文切換快速發(fā)生,則保存和恢復(fù)VLIW上下文能夠消耗大量的處理時(shí)間,從而降低了有效的處理器性能。
      在本發(fā)明的優(yōu)選實(shí)施例中,引起從標(biāo)量模式向VLIW模式轉(zhuǎn)換的模式轉(zhuǎn)換方法不允許在用戶模式下執(zhí)行,于是如果任何線程試圖在用戶模式下執(zhí)行這種模式轉(zhuǎn)換方法,則產(chǎn)生一個(gè)異常。這種異常引起處理器進(jìn)行向管理模式的轉(zhuǎn)換,并然后操作系統(tǒng)處理該異常。這一機(jī)制允許操作系統(tǒng)以兩種不同的方式管理上下文轉(zhuǎn)換。首先,它允許操作系統(tǒng)只在確實(shí)必要時(shí)而不是在每一上下文切換時(shí)保存和恢復(fù)VLIW上下文。這是通過(guò)只有當(dāng)VLIW模式隨后由另一線程進(jìn)入時(shí)才保存VLIW上下文而實(shí)現(xiàn)的。其次,它允許操作系統(tǒng)監(jiān)視和/或控制哪一個(gè)線程在VLIW模式下工作。
      使模式轉(zhuǎn)換方法只在管理模式下可見(jiàn)的概念示于圖5。在圖5中,對(duì)應(yīng)于圖4中的線程A和B的兩個(gè)線程A和B由處理器基于時(shí)間共享執(zhí)行。假設(shè)線程B包含模式轉(zhuǎn)換方法。起初處理器執(zhí)行線程A。在時(shí)間t=1,開(kāi)始從線程A向線程B切換。然后處理器停止運(yùn)行線程A并進(jìn)入管理模式。在管理模式下,線程A上下文的某些或全部被保存,且線程B上下文的某些或全部被恢復(fù)。然后處理器在時(shí)間t=2返回用戶模式執(zhí)行線程B。在時(shí)間t=3,在線程B中遇到模式轉(zhuǎn)換方法。由于在用戶模式下模式轉(zhuǎn)換方法不被允許,故產(chǎn)生一個(gè)異常且處理器進(jìn)入管理模式。在管理模式下執(zhí)行異常處理程序以處理該異常。在時(shí)間t=4,處理器再次進(jìn)入用戶模式并繼續(xù)執(zhí)行線程B,但是現(xiàn)在處于其它模式。在時(shí)間t=5,開(kāi)始從線程B向線程A切換。處理器停止運(yùn)行線程B,進(jìn)入管理模式,保存線程B的某些或全部上下文,并恢復(fù)線程A的某些或全部上下文。在時(shí)間t=6,處理器返回用戶模式以執(zhí)行線程A。
      第一實(shí)施例在第一實(shí)施例中,所有在處理器上運(yùn)行的線程能夠進(jìn)入VLIW模式。當(dāng)線程試圖進(jìn)入VLIW模式時(shí)(通過(guò)模式轉(zhuǎn)換方法),產(chǎn)生一異常,且異常由操作系統(tǒng)處理。作為異常處理的一部分,如果必要,使用VLIW模式的上一個(gè)線程的VLIW上下文被保存。
      現(xiàn)在參照?qǐng)D6就7說(shuō)明第一實(shí)施例的操作。圖6表示當(dāng)由試圖進(jìn)入VLIW模式的線程產(chǎn)生異常時(shí)異常處理程序所進(jìn)行的步驟,圖7表示當(dāng)上下文切換發(fā)生時(shí)由操作系統(tǒng)所進(jìn)行的步驟。在這一實(shí)施例中,從VLIW模式向標(biāo)量模式的轉(zhuǎn)換取決于所選擇的實(shí)現(xiàn)方式,可能引起或不引起異常產(chǎn)生。
      參見(jiàn)圖6,在步驟100,由一個(gè)線程產(chǎn)生了異常,該線程處于用戶模式而試圖執(zhí)行會(huì)引起從標(biāo)量模式向VLIW模式轉(zhuǎn)換的模式轉(zhuǎn)換方法。這一異常引起處理器進(jìn)入管理模式。在步驟101,判斷產(chǎn)生該異常的線程是否也是已處于VLIW模式的最后的線程。這是通過(guò)參照由操作系統(tǒng)保持的處于VLIW模式的最后線程的記錄而做到的。如果當(dāng)前線程也是已處于VLIW模式的最后的線程,那么沒(méi)有必要恢復(fù)當(dāng)前線程的VLIW上下文,于是沒(méi)有必要保存當(dāng)前VLIW上下文。
      如果當(dāng)前線程不是已處于VLIW模式的最后的線程,則在步驟102,通過(guò)把寄存器的內(nèi)容保存到存儲(chǔ)器而保存處理器的當(dāng)前VLIW上下文。當(dāng)前VLIW上下文是作為已處于VLIW模式的最后線程的VLIW上下文被保存的。這是通過(guò)參照已處于VLIW模式的最后線程的記錄,并把保存的VLIW上下文與該線程關(guān)聯(lián)而做到的。在步驟104,通過(guò)從存儲(chǔ)器中檢索與該線程關(guān)聯(lián)的寄存器內(nèi)容,當(dāng)前線程的VLIW上下文被恢復(fù)。在步驟106,處理器更新其哪一個(gè)線程是原來(lái)處于VLIW模式的最后線程的記錄,以指示當(dāng)前線程是處于VLIW模式的最后線程。
      在步驟108,設(shè)置模式位S。模式位S是在圖1或2中主計(jì)算單元12,52的控制和狀態(tài)寄存器30,70之一中的位,并只能在管理模式下可訪問(wèn)。當(dāng)設(shè)置了這一模式位時(shí),就允許在用戶模式下執(zhí)行模式轉(zhuǎn)換方法而沒(méi)有異常產(chǎn)生。在步驟110,處理器從異常返回正在執(zhí)行的線程中在它離去時(shí)的那點(diǎn)。由于現(xiàn)在設(shè)置了模式位,原來(lái)引起異常的MTM現(xiàn)在能夠被執(zhí)行而不會(huì)引起異常。
      實(shí)際上,由于VLIW上下文是遠(yuǎn)大于標(biāo)量上下文的超集,在步驟102和104只有不同于標(biāo)量上下文的VLIW上下文部分需要被保存和恢復(fù)。
      參見(jiàn)圖7,在步驟120,為了從一個(gè)線程向另一線程切換操作系統(tǒng)資源由操作系統(tǒng)起動(dòng)上下文切換。在步驟122,模式位S被復(fù)位。這是為了保證如果下一個(gè)線程試圖進(jìn)入VLIW模式,則將產(chǎn)生異常。在步驟124,保存當(dāng)前線程的標(biāo)量上下文,并在步驟126恢復(fù)下一個(gè)線程的標(biāo)量上下文。在步驟128,判斷下一個(gè)線程是否處于VLIW模式。這是通過(guò)參照稱為V位的一個(gè)位而做到的,這個(gè)位圖1還中主計(jì)算單元12,52的控制與狀態(tài)寄存器30,70之一中的一個(gè)位。V位是在步驟126中被恢復(fù)的下一個(gè)線程的標(biāo)量上下文的部分。如果這一位被設(shè)置,則下一個(gè)線程處于VLIW模式,并如果它被復(fù)位,則下一個(gè)線程處于標(biāo)量模式。如果下一個(gè)線程處于標(biāo)量模式,則沒(méi)有必要恢復(fù)該線程的VLIW上下文,并于是處理器在步驟138切換到下一個(gè)線程,只有該線程的標(biāo)量上下文被恢復(fù)。
      在步驟128,判斷出下一個(gè)線程處于VLIW模式,然后在步驟130判斷下一個(gè)線程是否是原來(lái)處于VLIW模式的最后的線程。這是通過(guò)參照由操作系統(tǒng)保持的處于VLIW模式的最后線程的記錄做到的。如果下一個(gè)線程也是處于VLIW模式的最后的線程,則當(dāng)前處理器VLIW上下文也是下一個(gè)線程的VLIW上下文,于是下一個(gè)線程的VLIW上下文不必恢復(fù)。這種情形下,處理器在步驟138切換到下一個(gè)線程,只是該線程的標(biāo)量上下文被恢復(fù)。然而如果下一個(gè)線程原來(lái)不是處于VLIW模式最后的線程,則必須恢復(fù)下一個(gè)線程的VLIW上下文。這種情形下,在步驟132,當(dāng)前處理器VLIW上下文(或VLIW上下文不同于標(biāo)量上下文的部分)被保存,并與處于VLIW模式的最后線程相關(guān);在步驟136,恢復(fù)下一個(gè)線程的VLIW上下文(或VLIW上下文不同于標(biāo)量上下文的部分);并在步驟136,處理器通過(guò)記錄下一個(gè)線程處于VLIW模式而更新其處于VLIW模式的最后線程的記錄。然后在步驟138,處理器切換到下一個(gè)線程。
      在圖6和7中,假設(shè)模式位S被觸發(fā)而允許處理器在從由MTM所引起的異常返回時(shí),進(jìn)行向VLIW模式的轉(zhuǎn)換。另外,異常處理程序本身可能引起處理器向VLIW模式轉(zhuǎn)換,并返回緊接在MTM之后正在執(zhí)行線程的點(diǎn)。也可以使用其它適當(dāng)?shù)募夹g(shù)用于防止異常重復(fù)產(chǎn)生并引起轉(zhuǎn)換。
      從以上說(shuō)明會(huì)注意到,只有當(dāng)滿足兩個(gè)條件時(shí)才保存處理器的VLIW上下文首先,下一個(gè)線程處于VLIW模式,而其次是下一個(gè)線程不是已處于VLIW的最后線程。這樣,不是在每一上下文轉(zhuǎn)換而只有當(dāng)確實(shí)需要時(shí)才保存處理器的VLIW。
      第一實(shí)施例操作的一個(gè)例子示于圖8。圖8中,所有線程起初都處于標(biāo)量模式。處理器起初執(zhí)行線程A。在時(shí)間t=1處理器停止允許線程A并進(jìn)入管理模式。在管理模式下,線程A的標(biāo)量上下文被保存,而線程B的標(biāo)量上下文被恢復(fù)。然后在時(shí)間t=2處理器返回用戶模式在標(biāo)量模式下執(zhí)行線程B。在時(shí)間t=3,在線程B中遇到轉(zhuǎn)移到VLIW模式的指令,并作為結(jié)果處理器進(jìn)入管理模式。在管理模式下,使用VLIW模式的最后線程的VLIW上下文被保存,且線程B的VLIW上下文被恢復(fù)。在時(shí)間t=4處理器再次進(jìn)入用戶模式并繼續(xù)執(zhí)行線程B,但現(xiàn)在是在VLIW模式下。在時(shí)間t=5,處理器停止運(yùn)行線程B,進(jìn)入管理模式,保存線程B的標(biāo)量上下文,并恢復(fù)線程C的標(biāo)量上下文。在時(shí)間t=6,處理器返回用戶模式在標(biāo)量模式下執(zhí)行線程C。在時(shí)間t=7,處理器停止運(yùn)行線程C,進(jìn)入管理模式,保存線程C的標(biāo)量上下文,并恢復(fù)線程A的標(biāo)量上下文。在時(shí)間t=8處理器返回用戶模式以執(zhí)行線程A。在時(shí)間t=9,在線程A中遇到轉(zhuǎn)移到VLIW模式的指令,這引起處理器進(jìn)入管理模式。在這點(diǎn),線程B的VLIW上下文被保存,且恢復(fù)線程A的VLIW上下文。在時(shí)間t=10,處理器進(jìn)入用戶模式并繼續(xù)執(zhí)行線程A,但這是在VLIW模式下。
      在圖8所示的例子中,線程B的VLIW上下文只在線程A進(jìn)入VLIW模式的那一點(diǎn)被保存。然而如果在線程A中沒(méi)有出現(xiàn)模式轉(zhuǎn)換方法,則當(dāng)處理器切換回線程B時(shí),處理器的VLIW上下文將仍然是線程B的上下文,因?yàn)闆](méi)有其它線程會(huì)改變這一上下文。這樣,在這種情形下將沒(méi)有必要保存或恢復(fù)線程B的VLIW上下文,并因而否則在保存和恢復(fù)VLIW上下文要耗用的時(shí)間就被節(jié)省了下來(lái)。
      第二實(shí)施例在本發(fā)明的第二實(shí)施例中,只允許一定的線程訪問(wèn)VLIW模式,且所有其它線程被禁止進(jìn)入VLIW模式。在一個(gè)例子中,只有一個(gè)線程被允許訪問(wèn)VLIW模式。這可以是管理模式中的線程,或用戶模式中的線程。在另一例子中,允許規(guī)定的一定數(shù)目的線程訪問(wèn)VLIW模式。通過(guò)限制被允許訪問(wèn)VLIW模式的線程的數(shù)目,能夠限制必須進(jìn)行的VLIW上下文切換的數(shù)目,或能夠消除必須進(jìn)行VLIW上下文切換。
      現(xiàn)在將參照?qǐng)D9和10說(shuō)明第二實(shí)施例的操作。圖9表示當(dāng)線程試圖進(jìn)入VLIW模式而產(chǎn)生異常時(shí)由異常處理程序所進(jìn)行的步驟,而圖10表示當(dāng)發(fā)生上下文切換時(shí)由操作系統(tǒng)所進(jìn)行的步驟。在圖9和10中假設(shè)只有預(yù)定的線程被允許訪問(wèn)VLIW模式。在這一實(shí)施例中,取決于所選擇的實(shí)現(xiàn)方式,從VLIW模式向標(biāo)量模式的轉(zhuǎn)換可能引起或不引起異常的產(chǎn)生。
      參照?qǐng)D9,在步驟140由于線程試圖在用戶模式下處理模式轉(zhuǎn)換而產(chǎn)生異常。這一異常引起處理器進(jìn)入管理模式。在步驟142判斷該線程是否被允許訪問(wèn)VLIW模式。在這例子中,只有一個(gè)線程被允許訪問(wèn)VLIW模式,于是如果引起了異常的線程不是該線程,則在步驟144采取適當(dāng)?shù)男U袆?dòng)。這行動(dòng)可能包括終止引起異常的線程,或如果可能在標(biāo)量模式下繼續(xù)該線程。
      如果引起異常的線程被允許進(jìn)而VLIW模式,則在步驟146設(shè)置模式位S,并在步驟148處理器從異常返回線程中此前它離開(kāi)的那一點(diǎn)。由于設(shè)置了模式位S,本來(lái)引起異常的模式轉(zhuǎn)換方法可被執(zhí)行而不會(huì)引起異常。這樣線程作出向VLIW模式的轉(zhuǎn)換并繼續(xù)在該模式下執(zhí)行。
      參見(jiàn)圖10,在步驟150,為了從一個(gè)線程向另一線程切換處理器資源,由操作系統(tǒng)起動(dòng)上下文切換。在步驟152復(fù)位模式位S。這是為了保證如果下一個(gè)線程試圖進(jìn)入VLIW模式,則將產(chǎn)生異常。在步驟154,保存當(dāng)前線程的標(biāo)量上下文,并在步驟156恢復(fù)下一個(gè)線程的標(biāo)量上下文。在步驟158,處理器切換到下一個(gè)線程。
      圖9和10中,假設(shè)只有一個(gè)線程允許進(jìn)入VIW模式,于是從來(lái)也就不需要保存VLIW上下文。在其它實(shí)現(xiàn)方式中,類似于圖6和7所示的方式,也可以允許一定的其它線程訪問(wèn)VLIW上下文,于是必要時(shí),采取保存VLIW上下文的步驟。這種情形下,雖然有時(shí)保存VLIW上下文是必要的,但必須的次數(shù)被減少了,因?yàn)橄拗屏丝商幱赩LIW模式的線程數(shù)。
      第三實(shí)施例本發(fā)明的第三實(shí)施例中,操作系統(tǒng)在任何一個(gè)時(shí)間只允許一個(gè)線程工作在VLIW模式。這一技術(shù)能夠被視為“令牌傳送”技術(shù),其中令牌能夠從一個(gè)線程傳送到另一線程,但是只有具有令牌的線程能夠進(jìn)入VLIW模式。這一技術(shù)能夠降低處理器的VLIW上下文必須被保存和恢復(fù)的次數(shù)。
      現(xiàn)在將參照?qǐng)D11和12說(shuō)明第三實(shí)施例的操作。圖11表示當(dāng)線程試圖進(jìn)入VLIW模式而產(chǎn)生異常時(shí)由異常處理程序所采取的步驟,而圖12表示當(dāng)線程從VLIW模式返回標(biāo)量模式而產(chǎn)生異常時(shí)由操作系統(tǒng)所采取的步驟。在這一實(shí)施例中,當(dāng)發(fā)生上下文切換時(shí)所采取的步驟與圖10中所示的步驟類似。
      參見(jiàn)圖11,在步驟200通過(guò)在用戶模式下執(zhí)行試圖處理MTM的線程而產(chǎn)生異常。這一異常引起處理器進(jìn)入管理模式。在步驟202,判斷是否有另一處于VLIW模式的線程。這是通過(guò)參照?qǐng)D1或2中的主計(jì)算單元12,52的控制和狀態(tài)寄存器30,70中的一個(gè)標(biāo)志(稱為VLIW標(biāo)志)而作出的。如果有另一處于VLIW模式的線程,則防止當(dāng)前線程進(jìn)入VLIW模式,直到處于VLIW模式的該線程已經(jīng)退回到標(biāo)量模式為止。在步驟204,當(dāng)前線程列入VLIW模式的隊(duì)列;在步驟206,暫停當(dāng)前線程的執(zhí)行;并在步驟208,操作系統(tǒng)切換到下一個(gè)線程,而不是返回當(dāng)前線程。在其它的實(shí)現(xiàn)方式中,如果可能,代替當(dāng)前線程暫停操作,而是當(dāng)前線程繼續(xù)處于標(biāo)量模式,或終止當(dāng)前線程。
      如果在步驟202判斷沒(méi)有其它線程處于VLIW模式,則在步驟210判斷當(dāng)前線程是否也是已處于VLIW模式的最后線程。這是通過(guò)參照由操作系統(tǒng)保持的處于VLIW模式的最后線程的記錄而作出的。如果當(dāng)前線程也是已處于VLIW模式的最后線程,那么沒(méi)有必要保存和恢復(fù)VLIW上下文。如果當(dāng)前線程不是已處于VLIW模式的最后線程,那么在步驟212,處理器的當(dāng)前VLIW上下文(或不同于標(biāo)量上下文的VLIW上下文的部分)被保存,并使這一上下文與處于VLIW模式的最后線程的VLIW上下文相關(guān)聯(lián)。在步驟214,當(dāng)前線程的VLIW上下文(或不同于標(biāo)量上下文的VLIW上下文的部分)被恢復(fù)。在步驟216,處理器更新哪一個(gè)線程原來(lái)是處于VLIW模式的最后線程的記錄,以指示當(dāng)前線程是處于VLIW模式的最后線程。在步驟218,設(shè)置VLIW標(biāo)志,指示有一線程處于VLIW模式。在標(biāo)志220,設(shè)置模式位S,并在步驟222處理器從異常返回執(zhí)行的線程在其當(dāng)初離開(kāi)時(shí)的那一點(diǎn)。由于設(shè)置了模式位,原來(lái)引起異常的MTM現(xiàn)在能夠被執(zhí)行而不會(huì)引起異常。
      在第三實(shí)施例中,從VLIW模式到標(biāo)量模式的轉(zhuǎn)換也引起了異常的產(chǎn)生。這樣,操作系統(tǒng)能夠判斷何時(shí)一個(gè)線程已經(jīng)停止按VLIW模式執(zhí)行,于是向另一線程給出允許進(jìn)入VLIW模式。當(dāng)這種異常產(chǎn)生時(shí)所采取的步驟示于圖12。
      參見(jiàn)圖12,在步驟230由于執(zhí)行的線程試圖在用戶模式下執(zhí)行“從VLIW模式返回”的指令而產(chǎn)生異常。在步驟232判斷是否有處于VLIW模式隊(duì)列的線程。如果沒(méi)有處于該隊(duì)列的線程,那么在步驟234,復(fù)位VLIW標(biāo)志,指示沒(méi)有線程處于VLIW模式。在步驟235,設(shè)置模式位以允許“從VLIW模式返回”在用戶模式下被執(zhí)行,并在步驟236,處理器從異常返回到線程中在其離開(kāi)的哪一點(diǎn)。
      如果在步驟232,判斷出有一線程處于VLIW模式的隊(duì)列,則在步驟238保存當(dāng)前線程的整個(gè)上下文(即,即有標(biāo)量上下文又有VLIW上下文)。在步驟240,從隊(duì)列中除去VLIW隊(duì)列中的下一個(gè)線程,并在步驟242,恢復(fù)該線程的整個(gè)上下文。在步驟244,處于VLIW模式的最后線程的記錄被更新以指示下一個(gè)線程。在步驟246,設(shè)置模式位S,并在步驟248,處理器返回下一個(gè)線程中當(dāng)該線程試圖進(jìn)入VLIW模式時(shí)在其離開(kāi)的哪一點(diǎn)。
      作為代替使用模式位S啟用和禁止“從VLIW模式返回”指令,為此能夠提供分開(kāi)的模式位R。這種情形下,步驟235中,模式位R將被設(shè)置而模式位S將被復(fù)位。在上下文切換時(shí)兩種模式位都將被復(fù)位。
      在第三實(shí)施例中,當(dāng)發(fā)生上下文切換時(shí)所采取的步驟與圖10所示的步驟相同。由于在一個(gè)時(shí)間只允許一個(gè)線程訪問(wèn)VLIW模式,因而當(dāng)發(fā)生上下文切換時(shí)不必保存VLIW上下文。在另一種實(shí)現(xiàn)方式中,在一個(gè)時(shí)間允許預(yù)定數(shù)目的線程進(jìn)入VLIW模式。在這種實(shí)現(xiàn)方式中,在上下文切換時(shí)VLIW上下文可能需要被保存。這能夠按圖7所示的方式完成。
      在第三實(shí)施例的一種變形中,在一個(gè)(或另一預(yù)定數(shù)目的)線程處于VLIW模式時(shí),對(duì)上下文切換作出標(biāo)記。在這一變形中,當(dāng)設(shè)置了VLIW標(biāo)志時(shí),操作系統(tǒng)防止上下文切換發(fā)生,于是VLIW上下文可能需要被保存的時(shí)間是當(dāng)線程第一次進(jìn)入VLIW模式時(shí)。當(dāng)線程試圖進(jìn)入VLIW模式而產(chǎn)生異常時(shí)所采取的步驟與圖6所示的步驟相同。
      雖然以上說(shuō)明通過(guò)示例的方式涉及了具有操作的標(biāo)量模式和VLIW模式的處理器,但是本發(fā)明能夠用于具有兩個(gè)或多個(gè)操作模式的任何處理器,其中一種模式具有不同于其它模式的上下文,并具體來(lái)說(shuō)其中一種模式具有實(shí)質(zhì)的上下文而另一個(gè)具有有限的上下文??梢允且粋€(gè)模式或兩個(gè)模式都是標(biāo)量模式或并行模式。并行模式或多并行模式不必是基于VLIW的,而可以是其中兩個(gè)或多個(gè)指令基本上是被并行處理任何模式,例如通過(guò)使用指令級(jí)并行性的某種形式。
      實(shí)施本發(fā)明的處理器可以作為處理器“核”包含在高度集成的“芯片上系統(tǒng)”(SOC)中,用于多媒體應(yīng)用程序,網(wǎng)絡(luò)例行程序,可視化移動(dòng)電話,智能化汽車,數(shù)字電視,語(yǔ)音識(shí)別,3D游戲,等等。
      應(yīng)當(dāng)理解到,以上只是以示例的方式對(duì)本發(fā)明進(jìn)行了說(shuō)明,能夠在本發(fā)明的范圍內(nèi)作出細(xì)節(jié)的修改。
      在圖4中,各附圖標(biāo)記的具體含義如下A. 運(yùn)行線程A 1.停止運(yùn)行APA.保存A的上下文B. 運(yùn)行線程B 2.開(kāi)始運(yùn)行BRB.恢復(fù)B的上下文3.停止運(yùn)行BPB.保存B的上下文4.開(kāi)始運(yùn)行ARA.恢復(fù)A的上下文在圖5中,各附圖標(biāo)記的具體含義如下A. 運(yùn)行線程A1.停止運(yùn)行A PA.保存A的上下文B. 運(yùn)行線程B2.開(kāi)始運(yùn)行B RB.恢復(fù)B的上下文3.MTEPB.保存B的上下文4.返回線程B RA.恢復(fù)A的上下文5.停止運(yùn)行B6.開(kāi)始運(yùn)行A在圖8中,各附圖標(biāo)記的具體含義如下A.運(yùn)行線程A 1.停止線程AB.運(yùn)行線程B 2.開(kāi)始線程BC.運(yùn)行線程C 3.MTEPA.保存A的上下文4.返回線程BPB.保存B的上下文5.停止線程BPC.保存C的上下文6.開(kāi)始線程CRA.恢復(fù)A的上下文7.停止線程CRB.恢復(fù)B的上下文8.開(kāi)始線程ARC.恢復(fù)C的上下文9.MTEPVL.保存VLIW上下文到最后VLIW線程10.返回線程ARVB.恢復(fù)B的VLIW上下文PVB.保存B的VLIW上下文RVA.恢復(fù)A的VLIW上下文
      權(quán)利要求
      1.一種在第一執(zhí)行模式和第二執(zhí)行模式之間可切換的處理器,該處理器在處于第一執(zhí)行模式時(shí)具有第一處理器上下文,并在處于第二執(zhí)行模式時(shí),具有不同于第一處理器上下文的第二處理器上下文,其中該處理器配置為在處理器試圖從一個(gè)執(zhí)行模式改變?yōu)榱硪粓?zhí)行模式時(shí)將產(chǎn)生一個(gè)異常。
      2.根據(jù)權(quán)利要求1的處理器,其中第二處理器上下文大于第一處理器上下文,并當(dāng)處理器試圖從第一執(zhí)行模式改變到第二執(zhí)行模式時(shí),產(chǎn)生異常。
      3.根據(jù)權(quán)利要求2的處理器,其中處理器被配置使得當(dāng)所述異常已經(jīng)產(chǎn)生時(shí),保存第二處理器上下文,或者保存第二處理器上下文不同于第一處理器上下文的部分。
      4.根據(jù)權(quán)利要求2或3的處理器,其中處理器被配置使得執(zhí)行基于時(shí)間共享的多個(gè)線程,且處理器被配置使得,當(dāng)處理器切換到處于第一執(zhí)行模式中的線程時(shí),或者當(dāng)處理器切換到原來(lái)是第二執(zhí)行模式中最后的線程的線程時(shí),只保存第一處理器的上下文。
      5.根據(jù)權(quán)利要求4的處理器,其中當(dāng)處理器接下來(lái)進(jìn)入第二執(zhí)行模式以執(zhí)行不同于第二執(zhí)行模式中上一個(gè)線程的一個(gè)線程時(shí),第二處理器上下文,或者第二處理器上下文不同于第一處理器上下文的部分被保存。
      6.根據(jù)權(quán)利要求2到5的任何之一的處理器,其中處理器被配置為使得執(zhí)行基于時(shí)間共享的多個(gè)線程,且在任何一時(shí)間可能處于第二執(zhí)行模式中的線程數(shù)小于任何一時(shí)間處理器上可能活動(dòng)的線程總數(shù)。
      7.根據(jù)權(quán)利要求6的處理器,其中處理器被這樣配置,使得當(dāng)已經(jīng)產(chǎn)生異常時(shí),進(jìn)行檢驗(yàn)以判斷引起異常的線程是否被允許進(jìn)入第二執(zhí)行模式。
      8.根據(jù)權(quán)利要求7的處理器,其中檢驗(yàn)包括判斷該線程是否是被阻擋在第二執(zhí)行模式之外的線程。
      9.根據(jù)權(quán)利要求7的處理器,其中檢驗(yàn)包括判斷預(yù)定數(shù)目的其它線程是否已經(jīng)處于第二執(zhí)行模式。
      10.根據(jù)權(quán)利要求9的處理器,其中處理器被這樣配置,使得如果預(yù)定數(shù)目的其它線程已經(jīng)處于第二執(zhí)行模式,則引起異常的線程的執(zhí)行被暫停直到處于第二執(zhí)行模式的其它線程的數(shù)目小于預(yù)定數(shù)目為止。
      11.根據(jù)以上任何權(quán)利要求的處理器,其中處理器配置為使得當(dāng)處于第一執(zhí)行模式時(shí)執(zhí)行第一指令集,并當(dāng)處于第二執(zhí)行模式時(shí)執(zhí)行第二指令集。
      12.根據(jù)以上任何權(quán)利要求的處理器,其中處理器能夠在管理模式和用戶模式之間切換,與管理模式相比用戶模式具有對(duì)處理器資源受限制的訪問(wèn),并當(dāng)所述異常產(chǎn)生時(shí),處理器從用戶模式轉(zhuǎn)移到管理模式。
      13.根據(jù)以上任何權(quán)利要求的處理器,處理器包括至少一個(gè)執(zhí)行單元和多個(gè)存儲(chǔ)單元,且第一處理器上下文包括在第一執(zhí)行模式中可訪問(wèn)的存儲(chǔ)單元的內(nèi)容,且第二處理器上下文包括在第二模式中可訪問(wèn)的存儲(chǔ)單元的內(nèi)容。
      14.根據(jù)以上任何權(quán)利要求的處理器,處理器包括多個(gè)計(jì)算單元用于并行執(zhí)行指令,每一計(jì)算單元具有至少一個(gè)執(zhí)行單元和執(zhí)行單元可訪問(wèn)的至少一個(gè)存儲(chǔ)單元。
      15.根據(jù)以上任何權(quán)利要求的處理器,其中第一執(zhí)行模式是一標(biāo)量模式,而第二執(zhí)行模式是一并行模式。
      16.一種可在第一執(zhí)行模式和第二執(zhí)行模式之間切換的處理器,該處理器當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,并當(dāng)處于第二執(zhí)行模式時(shí)具有大于第一處理器上下文的第二處理器上下文,其中處理器被配置為基于時(shí)間共享而執(zhí)行多個(gè)線程,并且處理器被這樣配置,使得當(dāng)處理器切換到處于第一執(zhí)行模式的線程時(shí),或當(dāng)處理器切換到原來(lái)是第二執(zhí)行模式中最后的線程的線程時(shí),只保存第一處理器上下文。
      17.根據(jù)權(quán)利要求16的處理器,其中當(dāng)處理器接下來(lái)進(jìn)入第二執(zhí)行模式以執(zhí)行另一線程時(shí),保存第二處理器上下文或第二處理器上下文不同于第一處理器上下文的部分。
      18.根據(jù)權(quán)利要求16或17的處理器,其中處理器這樣配置,使得任何一時(shí)間可處于第二執(zhí)行模式的線程數(shù),小于任何一時(shí)間處理器上可能活動(dòng)的線程總數(shù)。
      19.根據(jù)權(quán)利要求16到18的任何處理器,其中第一執(zhí)行模式是一標(biāo)量模式,而第二執(zhí)行模式是一并行模式。
      20.可在第一執(zhí)行模式和第二執(zhí)行模式之間切換的一種處理器,該處理器當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,并當(dāng)處于第二執(zhí)行模式時(shí)具有大于第一處理器上下文的第二處理器上下文,其中處理器被配置為基于時(shí)間共享而執(zhí)行多個(gè)線程,并且處理器被這樣配置,使得在任何一時(shí)間處于第二執(zhí)行模式的線程數(shù)小于任何一時(shí)間處理器上可以活動(dòng)的線程總數(shù)。
      21.根據(jù)權(quán)利要求20的處理器,其中該處理器這樣配置,使得當(dāng)線程試圖進(jìn)入第二執(zhí)行模式時(shí),要進(jìn)行檢驗(yàn)以判斷是否允許該線程進(jìn)入第二執(zhí)行模式。
      22.根據(jù)權(quán)利要求21的處理器,其中檢驗(yàn)包括判斷該線程是否是被阻擋進(jìn)入第二執(zhí)行模式的線程,
      23.根據(jù)權(quán)利要求21的處理器,其中檢驗(yàn)包括判斷預(yù)定數(shù)目的其它線程是否已經(jīng)處于第二執(zhí)行模式。
      24.根據(jù)權(quán)利要求23的處理器,其中處理器樣配置,使得如果預(yù)定數(shù)目的其它線程已經(jīng)處于第二執(zhí)行模式,則防止試圖進(jìn)入第二執(zhí)行模式的該線程進(jìn)入第二執(zhí)行模式,直到處于第二執(zhí)行模式的其它線程數(shù)目小于預(yù)定的數(shù)目為止。
      25.操作處理器的一種方法,處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有不同于第一處理器上下文的第二處理器上下文,該方法包括當(dāng)處理器試圖從一個(gè)執(zhí)行模式改變到其它執(zhí)行模式時(shí)產(chǎn)生一個(gè)異常。
      26.操作處理器的一種方法,處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該方法包括執(zhí)行基于時(shí)間共享的多個(gè)線程,并當(dāng)執(zhí)行向處于第一執(zhí)行模式的線程切換時(shí),或者當(dāng)執(zhí)行向原來(lái)是第二執(zhí)行模式的最后線程的線程切換時(shí),只保存第一處理器上下文。
      27.操作處理器的一種方法,處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該方法包括執(zhí)行基于時(shí)間共享的多個(gè)線程,并把任何一個(gè)時(shí)間可能處于第二執(zhí)行模式中的線程數(shù)限制為小于任何一個(gè)時(shí)間處理器上可能活動(dòng)的線程總數(shù)。
      28.一種用于處理器的操作系統(tǒng),該處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有不同于第一處理器上下文的第二處理器上下文,該操作系統(tǒng)包括一個(gè)異常處理程序部分,用于處理當(dāng)處理器試圖從一個(gè)執(zhí)行模式改變到其它執(zhí)行模式時(shí)所產(chǎn)生的一個(gè)異常。
      29.一種用于處理器的操作系統(tǒng),該處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該操作系統(tǒng)包括一個(gè)程序部分,用于在多個(gè)基于時(shí)間共享的線程之間進(jìn)行切換執(zhí)行,以及一個(gè)程序部分,用于當(dāng)執(zhí)行向處于第一執(zhí)行模式的線程切換時(shí),或者當(dāng)執(zhí)行向原來(lái)是第二執(zhí)行模式的最后一個(gè)線程的線程切換時(shí),只保存第一處理器上下文。
      30.一種用于處理器的操作系統(tǒng),該處理器可在第一執(zhí)行模式和第二執(zhí)行模式之間切換,并當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,而當(dāng)處于第二執(zhí)行模式時(shí),具有大于第一處理器上下文的第二處理器上下文,該操作系統(tǒng)包括一個(gè)程序部分,用于在多個(gè)基于時(shí)間共享的線程之間進(jìn)行切換執(zhí)行,以及一個(gè)程序部分,用于把任何一個(gè)時(shí)間可能處于第二執(zhí)行模式中的線程數(shù)限制為小于任何一個(gè)時(shí)間處理器上可能活動(dòng)的線程總數(shù)。
      全文摘要
      公開(kāi)了可在第一執(zhí)行模式(諸如標(biāo)量模式)和第二處執(zhí)行模式(諸如VLIW模式)之間切換的一種處理器。該處理器當(dāng)處于第一執(zhí)行模式時(shí)具有第一處理器上下文,當(dāng)處于第二執(zhí)行模式時(shí)具有不同于第一處理器上下文的第二處理器上下文。當(dāng)處理器試圖從一個(gè)執(zhí)行模式改變到另一執(zhí)行模式時(shí),處理器產(chǎn)生一異常。當(dāng)處理器切換到第一執(zhí)行模式的執(zhí)行線程時(shí),或者當(dāng)處理器切換到原來(lái)是第二執(zhí)行模式的最后線程的執(zhí)行線程時(shí),只保存第一處理器上下文。該處理器可這樣配置,使得在任何一時(shí)間可能處于第二執(zhí)行模式的線程數(shù)小于任何一時(shí)間在處理器上可能活動(dòng)的線程總數(shù)。
      文檔編號(hào)G06F9/46GK1384431SQ0210510
      公開(kāi)日2002年12月11日 申請(qǐng)日期2002年2月20日 優(yōu)先權(quán)日2001年2月20日
      發(fā)明者羅伯特·A·惠頓 申請(qǐng)人:斯羅揚(yáng)有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1