專利名稱:多線程計算機系統(tǒng)中對共存線程相伴調(diào)度的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別地,涉及用于在多核/多線程計
算機系統(tǒng)中對多個共存線程(Commensal Thread),例如工作線程和與其相關(guān)的輔助線程進行相伴調(diào)度(Concomitance Scheduling)的方法和設(shè)備。
背景技術(shù):
隨著計算機應(yīng)用的日益普及,用戶對計算機的處理能力的需求也在成指數(shù)級增長。在現(xiàn)代處理器設(shè)計中,多核/多線程技術(shù)日漸變?yōu)橹髁鞯募夹g(shù)。當(dāng)前主流的CPU制造商在其更高性能商業(yè)芯片中都采用多核/多線程體系結(jié)構(gòu)。例如,IBM Power系列、Intel Core Duo系列,AMD Barcelona系列等都是多線程處理器的例子。其中, 一種TLP (Thread Level Paramllesim,線程級并行)技術(shù),可以通過共享處理器的執(zhí)行資源,同時執(zhí)行多個線程,提高CPU的利用率,讓處理單元獲得更高的吞吐量。
多核/多線程處理器和傳統(tǒng)多處理器的主要區(qū)別在于多核/多線程處理器具有多個硬件線程。系統(tǒng)可以同時執(zhí)行多個線程。另一個區(qū)別在于大多數(shù)多核/多線程處理器在不同的核之間共享L2或L3高速緩存,以及在不同的硬件線程之間共享L1高速緩存。
對順序程序進行加速的各種方法正逐漸發(fā)展起來,并且線程級別上并行化順序代碼(thread-level parallelization of sequential code)的方法通常被認(rèn)為是在多核/多線程平臺上的一個重要方式。例如參見2002年10月22日遞交美國專利申請US2004/0078780A1,對于從原始的順序線程(s叫uential thread)中提取多個線程來說,該專利文獻對為順序執(zhí)行而編碼的應(yīng)用中的一個或多個代碼塊進行標(biāo)記,對已產(chǎn)生
標(biāo)記的代碼,在所述一個或多個塊的每一個上插入標(biāo)記符(marker ),以表明該塊用于可能的協(xié)同執(zhí)行處理(concurrent execution )。根據(jù)標(biāo)記符的塊持續(xù)時間權(quán)重(block duration weight of the marker)以及塊的路徑長度,估計被標(biāo)記的塊的執(zhí)行時間。將每個被標(biāo)記的塊的估計執(zhí)行時間與調(diào)度協(xié)同線程(concurrent thread )的開銷進行比較,然后根據(jù)含有標(biāo)記符的相關(guān)度信息(dependency information)來產(chǎn)生協(xié)同代碼(concurrent code),將一個或多個被標(biāo)記的塊轉(zhuǎn)換成相應(yīng)的協(xié)同執(zhí)行任務(wù)(線程)。
從順序碼中提取線程的另 一種方式是自動線程分割技術(shù)
(automatic thread partition)。通常,線程分割編譯器提供串行應(yīng)用程序的自動多線程轉(zhuǎn)換。編譯器在編譯串行應(yīng)用代碼的時候,確定該串行的應(yīng)用代碼是否可以被至少分成兩個不同的功能,然后根據(jù)數(shù)據(jù)的相關(guān)度檢查完整性。最后,將代碼自動分成多個任務(wù),并產(chǎn)生相應(yīng)的線程。 一旦多個應(yīng)用程序線程被分割,則該多個應(yīng)用程序線程就被作為多線程體系結(jié)構(gòu)的各個線程而被協(xié)同執(zhí)行。
無論采用以上提到的哪種輔助線程,他們都是功能性的而且是獨立的。對于調(diào)度這些輔助線程,操作系統(tǒng)不需要任何改變,并且如對待通常線程那樣進行操作。但是另一種輔助線程可被用于預(yù)先提取
(prefetch)不適當(dāng)(delinquent)的存儲器操作,或者可以預(yù)測那些難以預(yù)測的分支指令,或者在原始線程之前推測計算后面的代碼等。實際上,這些推測或輔助線程都是與原始順序線程緊密耦合的,并且希望能同時調(diào)度這些隨機或輔助線程。這些隨機或輔助線程也被稱為共存線程。例如,當(dāng)執(zhí)行原始工作線程時,如果切換出(switched out)預(yù)先提取線程,則不會得到性能增益。
參考圖1,其中示出了在執(zhí)行數(shù)據(jù)壓縮過程中通過具有推測功能的輔助線程來執(zhí)行順序代碼的過程的示意圖。其中,首先在系統(tǒng)運行過程中為該數(shù)據(jù)壓縮的進程定義了一些輔助線程,例如通過散列函數(shù)
"=hash[hash-function (c)"來定義,如圖1中的(a)部分所示。在執(zhí)行數(shù)據(jù)壓縮的過程中,當(dāng)開始運行該數(shù)據(jù)壓縮進程的工作線程后,開始運行其輔助線程。在圖1中(b)部分所示出的情況中,輔助線程必須與其所屬的工作線程一起被協(xié)同調(diào)度。否則,如果輔助線程與其工作線程不一起被協(xié)同調(diào)度的話,輔助線程會變得無用,甚至引起錯誤。
另 一種在多核/多線程平臺上加速單個線程應(yīng)用的方式是利用不
同核/硬件線程之間的共享高速緩存。圖2示出了在工作線程需要輔助線程之前從內(nèi)存中預(yù)先提取出該工作線程的輔助線程的例子。具體地,當(dāng)開始運行一個程序時,操作系統(tǒng)為運行該程序所生成的輔助線程,例如輔助線程0、輔助線程l、輔助線程2、輔助線程3及運行該程序的負(fù)載被隨機排列在運行隊列中等待調(diào)度。根據(jù)圖2所示的方法,預(yù)先將輔助線程0、輔助線程l、輔助線程2、輔助線程3以及負(fù)載提
取出來并保存在一個共享高速緩存中;在隨后開始運行工作線程時,從共享高速緩存直接獲取該工作線程的輔助線程和負(fù)栽數(shù)據(jù),而不是
從較低頻率的存儲器系統(tǒng)中獲取數(shù)據(jù)來加速工作線程。但是,該方法也需要輔助線程與其工作線程一起協(xié)同運行。否則,工作線程的性能將不會得到提升,甚至是變壞。
通過以上關(guān)于現(xiàn)有技術(shù)中調(diào)度輔助線程的技術(shù)的描述,可以理解,不管采用如上所述的哪一種輔助線程調(diào)度方法,都需要輔助線程與其工作線程一起運行或調(diào)度。但是,在當(dāng)前的主流操作系統(tǒng)中,因
為每個核/線程構(gòu)建單獨的運行隊列,而每個運行隊列單獨調(diào)度線程,并且由于受負(fù)栽平衡策略的影響,難以保證工作線程與其輔助線程之間的緊密結(jié)合關(guān)系。
圖3A-3E示出了在傳統(tǒng)操作系統(tǒng)中由于工作線程和其輔助線程之間的隨機調(diào)度結(jié)果,造成的一種混亂的調(diào)度情形。其中示意性示出了在第二列運行隊列中,線程l及其輔助線程同時出現(xiàn)的情形。在多核/多線程操作系統(tǒng)中,當(dāng)按照操作系統(tǒng)的任務(wù)列表運行線程時,運行隊列如圖3A-3D的順序正常操作,但是當(dāng)在下一個時刻,線程1進入隊列2的預(yù)備線程隊列中準(zhǔn)備運行時,如圖3E所示,線程1和其輔
8助線程同時出現(xiàn)在隊列2中,由此造成了混亂情形。
不利的是,在當(dāng)前的研究中,很少考慮這種與操作系統(tǒng)有關(guān)的問題在實際設(shè)計中所起的作用。
通過以上對現(xiàn)有技術(shù)的線程調(diào)度技術(shù)的描述,可以知道,現(xiàn)有技術(shù)中使用的線程調(diào)度方法1)對工作線程和與工作線程相關(guān)的輔助線程的調(diào)度是隨機的,也就是說,操作系統(tǒng)在運行工作線程時,對該工作線程的輔助線程的調(diào)度是隨機的;2)工作線程開始運行后,其輔助線程才開始運行,并且輔助線程的運行是隨機的。這樣,就會造成線程調(diào)度混亂的情況出現(xiàn)。
發(fā)明內(nèi)容
為解決現(xiàn)有技術(shù)中存在的上述缺陷,本發(fā)明的基本設(shè)計思想是基于工作線程和與其輔助線程之間的關(guān)聯(lián)性,在準(zhǔn)備開始運行和/或調(diào)
度一個工作線程時,操作系統(tǒng)首先使該工作線程的輔助線程先行運行,然后才開始運行該工作線程。這樣,根據(jù)本發(fā)明這種使工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度的方法,提高了單個線
程運行的速度、節(jié)省了CPU的系統(tǒng)資源。
具體地,為解決現(xiàn)有技術(shù)中存在的上述缺陷,本發(fā)明提供了一種在多核平臺上相伴調(diào)度多個共存線程的方法和設(shè)備。
根據(jù)本發(fā)明,提供了一種在多線程處理器系統(tǒng)中對工作線程和與所述工作線程相關(guān)的輔助線程進行相伴調(diào)度的方法,所述方法包括在準(zhǔn)備運行/調(diào)度所述工作線程時,查找與運行所述工作線程相關(guān)的一個或多個輔助線程;運行查找到的一個或多個輔助線程;在與運行所述工作線程相關(guān)的一個或多個輔助線程都運行后,運行所述工作線程。
根據(jù)本發(fā)明,還提供了一種在多線程處理器系統(tǒng)中對工作線程和與所述工作線程相關(guān)的輔助線程進行相伴調(diào)度的設(shè)備,所述設(shè)備包括查找裝置,用于在準(zhǔn)備運行/調(diào)度所述工作線程時,查找與運行所述工作線程相關(guān)的一個或多個輔助線程;調(diào)度裝置,用于運行查找到的一個或多個輔助線程;其中所述調(diào)度裝置還被配置用于在與運行所述工作線程相關(guān)的一個或多個輔助線程都運行后,運行所述工作線程。
以下通過結(jié)合附圖閱讀參考下述對說明性實施例的詳細(xì)描述時,將更好地理解本發(fā)明本身、優(yōu)選使用模式、其它目標(biāo)及其優(yōu)點。在附圖中
圖l是現(xiàn)有技術(shù)中使用推測性輔助線程進行工作線程調(diào)度方案的示意圖2是現(xiàn)有技術(shù)中使用預(yù)先提取輔助線程進行工作線程調(diào)度方案的示意圖3A-3E是根據(jù)現(xiàn)有技術(shù)出現(xiàn)工作線程調(diào)度混亂情形的操作時序圖4是根據(jù)本發(fā)明的在多核/多線程處理器系統(tǒng)中對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度的方法的示意流程
圖5A是根據(jù)本發(fā)明的一個具體實施例說明在多核/多線程處理器系統(tǒng)中對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度的系統(tǒng)架構(gòu)示意圖5B是圖5A所示系統(tǒng)架構(gòu)中進行相伴調(diào)度的調(diào)度模塊的局部示意圖6是根據(jù)本發(fā)明圖5的實施例在操作系統(tǒng)的任務(wù)列表中修改的
任務(wù)結(jié)構(gòu)的示意圖7是根據(jù)本發(fā)明圖5的實施例在輔助線程堆區(qū)中創(chuàng)建的輔助線
程結(jié)構(gòu)的示意圖8是根據(jù)本發(fā)明圖5的實施例創(chuàng)建輔助線程的操作的流程圖;圖9是根據(jù)本發(fā)明圖5的實施例去除輔助線程的操作的流程圖;圖10A-I是根據(jù)本發(fā)明在多核/多線程處理器系統(tǒng)中操作系統(tǒng)對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度過程中
運行隊列的示意圖11是根據(jù)本發(fā)明在多核/多線程處理器系統(tǒng)中對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度的方法中的運行隊列
的操作流程圖;以及
圖12是根據(jù)本發(fā)明在多核/多線程處理器系統(tǒng)中停止工作線程運行的流程圖。
具體實施例方式
以下將參照附圖對本發(fā)明的優(yōu)選實施方式進行詳細(xì)說明。
參考附圖4,其中示出了根據(jù)本發(fā)明在多核/多線程處理器系統(tǒng)中對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度的方
法的示意流程圖。
當(dāng)在步驟S405準(zhǔn)備開始運行一個工作線程時,啟動根據(jù)本發(fā)明的在多核/多線程處理器系統(tǒng)中對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度的方法。
過程進入到步驟S410,查找與運行該工作線程相關(guān)的一個或多個輔助線程。
在查找到與運行該工作線程相關(guān)的一個或多個輔助線程后,本發(fā)明的方法進入到步驟S415,開始運行所查找到的一個或多個輔助線程。根據(jù)本發(fā)明的優(yōu)選實施方式,在開始運行一個輔助線程后,操作系統(tǒng)會判斷該工作線程是否還有其他的輔助線程,以及接著開始運行下一個輔助線程。當(dāng)操作系統(tǒng)判斷出與運行所述工作線程相關(guān)的一個或多輔助線程都開始運行后,開始運行所述工作線程,如步驟S420所示。運行輔助線程的方式是使與運行該工作線程相關(guān)的所有輔助線程都被首先調(diào)度到操作系統(tǒng)的運行隊列上優(yōu)先運行,之后再開始運行該工作線程。以下將結(jié)合附圖和優(yōu)選實施方式,對運行工作線程和輔助線程的操作進行詳細(xì)描述。
相應(yīng)地,根據(jù)本發(fā)明的另一方面,提供了一種在多核/多線程處理器系統(tǒng)中對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴
調(diào)度的設(shè)備,所述設(shè)備包括查找裝置,用于在準(zhǔn)備運行所述工作線 程時,查找與運行所述工作線程相關(guān)的一個或多個輔助線程。調(diào)度裝 置,用于運行查找到的一個或多個輔助線程;以及所述調(diào)度裝置還被 配置用于在與運行所述工作線程相關(guān)的一個或多個輔助線程都運行 后,運行所述工作線程。
根據(jù)本發(fā)明這種使工作線程和與該工作線程相關(guān)的輔助線程進 行相伴調(diào)度的方法和相應(yīng)的調(diào)度設(shè)備,提高了單個線程運行的速度、 節(jié)省了 CPU的系統(tǒng)資源。
根據(jù)本發(fā)明,優(yōu)選地還包括由操作系統(tǒng)預(yù)先設(shè)置每個工作線程 的結(jié)構(gòu)和與該工作線程相關(guān)的輔助線程的結(jié)構(gòu),以使該工作線程和與
其相關(guān)的輔助線程相關(guān)聯(lián)。本領(lǐng)域技術(shù)人員可以理解,在為工作線程 生成輔助線程的過程中,實際上已經(jīng)使工作線程和輔助線程之間具有 關(guān)聯(lián)關(guān)系。但是,為了進一步加速單個線程運行的速度、節(jié)省CPU 的系統(tǒng)資源,根據(jù)本發(fā)明的優(yōu)選實施方式,為了加強工作線程與輔助 線程之間的這種關(guān)聯(lián)關(guān)系,還對工作線程和輔助線程的結(jié)構(gòu)進行進一 步限定。
以下結(jié)合附圖5-9來說明根據(jù)本發(fā)明的第一優(yōu)選實施例。在該優(yōu) 選實施方式中,預(yù)先設(shè)置每個工作線程的結(jié)構(gòu)和與該工作線程相關(guān)的 輔助線程的結(jié)構(gòu),以在運行/調(diào)度工作線程時能相伴調(diào)度與該工作線程 相關(guān)的輔助線程。
圖5A是根據(jù)本發(fā)明的一個具體實施例說明在多核/多線程處理器 系統(tǒng)中對單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào) 度的系統(tǒng)架構(gòu)示意圖;圖5B是圖5A所示系統(tǒng)架構(gòu)中進行相伴調(diào)度的 調(diào)度模塊的局部示意圖。該調(diào)度模塊基于傳統(tǒng)操作系統(tǒng)的調(diào)度模塊構(gòu) 建。本領(lǐng)域技術(shù)人員可以理解,對要運行的多個應(yīng)用,例如應(yīng)用1、 應(yīng)用2...應(yīng)用M來說,基于多核/多線程的操作系統(tǒng)通過SMT (同時 多線程)處理器,在硬件線程之間利用L2和L3高速緩存共享數(shù)據(jù)。
12如圖5A所示,根據(jù)本發(fā)明的調(diào)度模塊包括用于在創(chuàng)建工作線程時, 為該工作線程創(chuàng)建相應(yīng)的任務(wù)結(jié)構(gòu)的任務(wù)列表子模塊501、用于為工 作線程的輔助線程創(chuàng)建相應(yīng)的任務(wù)結(jié)構(gòu)的輔助線程堆區(qū)子模塊505和 用于指示和調(diào)度工作線程和與其運行相關(guān)輔助線程的運行隊列510。
其中,根據(jù)本發(fā)明,對于每個任務(wù)結(jié)構(gòu),根據(jù)本發(fā)明的任務(wù)列表 子模塊501例如增加了如下幾個新的字段來幫助操作系統(tǒng)管理和調(diào)度 該工作線程的輔助線程。具體地,參見圖6,其中圖6是根據(jù)本發(fā)明 圖5的實施例在操作系統(tǒng)的任務(wù)列表中修改的任務(wù)結(jié)構(gòu)的示意圖。在 該實施例中,所修改的任務(wù)結(jié)構(gòu)列表包括
用于以布爾邏輯值表示的該線程是否是輔助線程的IsAT字段。 其中若布爾值"IsAT"為"真(true)",則表明在創(chuàng)建該線程時, 該線程是輔助線程;否則,如果布爾值"IsAT"為"假(false)", 則表明在創(chuàng)建該線程時,該線程不是輔助線程而是工作線程。特別地, 當(dāng)所創(chuàng)建的線程是輔助線程時,則相應(yīng)地執(zhí)行創(chuàng)建輔助線程的結(jié)構(gòu)的 操作,以下詳述。當(dāng)所創(chuàng)建的線程是工作線程時,繼續(xù)執(zhí)行創(chuàng)建工作 線程的結(jié)構(gòu)的操作。
用于以布爾邏輯值表示的該工作線程是否具有輔助線程的 HasAT字段。其中若布爾值"HasAT"為"真,,,則表明在創(chuàng)建該工 作線程時,該工作線程具有輔助線程;否則,如果布爾值"HasAT" 為"假",則表明在創(chuàng)建該工作線程時,該工作線程不具有輔助線程。
用于以布爾邏輯值表示的屬于該工作線程的輔助線程的數(shù)量的 ATnum字段。特別地,當(dāng)HasAT的值為"假"時,ATnum的值等于 零。在圖6中,ATnum字段的值為3,表明屬于該工作線程的輔助 線程的數(shù)量為3個。更優(yōu)選地,在根據(jù)本發(fā)明的工作線程的任務(wù)結(jié)構(gòu) 列表中,還可以包括用于以布爾邏輯值表示的運行該工作線程時所 實際需要的輔助線程的數(shù)量的RunATnum字段。在圖6中, RunATnum字段的值為2,表明運行該工作線程時所實際需要的輔助 線程的數(shù)量為2個。
用于以布爾邏輯值指示該工作線程是否需要輔助線程的ForceAT字段。如果ForceAT的值為"假",則操作系統(tǒng)在某些情況 下不開始輔助線程。相反,如果ForceAT的值為"真",則操作系統(tǒng) 將在任何情況下開始調(diào)用輔助線程。
用于指示工作線程的第一個輔助線程結(jié)構(gòu)的指針 "AT*HelperTHead,,字段。
另外,如在現(xiàn)有技術(shù)中的任務(wù)列表中一樣,根據(jù)本發(fā)明的工作線 程的任務(wù)列表還包括用于指示工作線程所在的運行的隊列中的指針 "AT*RunATQueue,,字段。
參見圖7,圖7是根據(jù)本發(fā)明圖5的實施例在輔助線程堆區(qū)505 中創(chuàng)建的輔助線程結(jié)構(gòu)的示意圖。應(yīng)該理解,在輔助線程堆區(qū)中存儲 了所有輔助線程的任務(wù)結(jié)構(gòu)。并且,每個輔助線程和其相關(guān)的工作線 程之間被定義了關(guān)聯(lián)關(guān)系,以便于操作系統(tǒng)在運行工作線程時能方 便、迅速地調(diào)用和管理其輔助線程。具體地,為每個輔助線程創(chuàng)建的 輔助線程的新的結(jié)構(gòu)包括
用于以布爾邏輯值表示的該線程是否是輔助線程的IsAT字段。 其中若布爾值"IsAT"為"真(true)",則表明在創(chuàng)建該線程時, 該線程是輔助線程;否則,如果布爾值"IsAT"為"假(false)", 則表明在創(chuàng)建該線程時,該線程不是輔助線程而是工作線程。特別地, 當(dāng)所創(chuàng)建的線程是輔助線程時,繼續(xù)執(zhí)行創(chuàng)建輔助線程的結(jié)構(gòu)的操 作。
用于以布爾邏輯值指示的該輔助線程所屬的工作線程的 OwnerThread字段。通過該字段,可以很容易地找到該輔助線程所 屬的工作線程。
用于以布爾邏輯值指示的屬于同一工作線程的另一個輔助線程 的NextAT字段。通過該字段,可以很容易地找到同一工作線程的其 他輔助線程。
本領(lǐng)域技術(shù)人員應(yīng)該理解輔助線程不同于常規(guī)的工作線程。輔 助線程只對工作線程的性能產(chǎn)生很大影響而不會引起正確性與否的 問題。因此,當(dāng)諸如存儲器或處理器等的系統(tǒng)資源貧乏時,操作系統(tǒng)
14能很容易地釋放該存儲有輔助線程的存儲器,例如在本實施例中,釋 放掉輔助線程堆區(qū)中的資源。
圖8是根據(jù)本發(fā)明圖5的實施例創(chuàng)建輔助線程的操作的流程圖。 針對一個工作線程,根據(jù)本發(fā)明,首先在步驟S805由操作系統(tǒng)為該 工作線程創(chuàng)建相應(yīng)的任務(wù)結(jié)構(gòu),并將所創(chuàng)建的工作線程的任務(wù)結(jié)構(gòu)添 加到操作系統(tǒng)的任務(wù)列表中。接下來,在步驟S810,操作系統(tǒng)將檢查 該工作線程是否具有輔助線程。如果步驟S810的檢查結(jié)果是"否", 則結(jié)束創(chuàng)建輔助線程的操作,該流程結(jié)束。如果步驟S810的檢查結(jié) 果是"是",則表明該工作線程具有輔助線程。在這種情況下,過程 前進到步驟S815,由操作系統(tǒng)在輔助線程堆區(qū)中為該工作線程的其中 一個輔助線程創(chuàng)建一個新的任務(wù)結(jié)構(gòu)。接下來,在步驟S820進一步 判斷,該工作線程是否還有輔助線程,如果"否",則結(jié)束創(chuàng)建輔助 線程的操作,該流程結(jié)束。否則的話,如果當(dāng)前工作線程還具有輔助 線程,則重復(fù)步驟S815,由操作系統(tǒng)在輔助線程堆區(qū)中為該工作線程 的下一個輔助線程創(chuàng)建一個新的任務(wù)結(jié)構(gòu),直到創(chuàng)建完所有屬于該工 作線程的輔助線程為止。
相應(yīng)地,圖9是根據(jù)本發(fā)明圖5的實施例去除輔助線程的操作的 流程圖。當(dāng)針對一個工作線程希望去除其輔助線程時,首先,操作系 統(tǒng)在步驟S905中檢查該工作線程是否具有輔助線程。如果步驟S905 的檢查結(jié)果表明該工作線程不具有輔助線程,則結(jié)束去除輔助線程的 操作,該流程結(jié)束。否則,如果步驟S905的檢查結(jié)果表明該工作線 程具有輔助線程,則過程前進到步驟S910,操作系統(tǒng)從輔助線程堆區(qū) 中去除輔助線程結(jié)構(gòu)。接下來,在步驟S915進一步判斷,該工作線 程是否還有輔助線程,如果"否",則結(jié)束去除輔助線程的操作,該 流程結(jié)束。否則的話,如果當(dāng)前工作線程還具有輔助線程,則重復(fù)步 驟S910,由操作系統(tǒng)從輔助線程堆區(qū)中去除該工作線程的下一個輔助 線程的任務(wù)結(jié)構(gòu),直到步驟S915的判斷結(jié)果表明當(dāng)前工作線,已經(jīng) 不具有輔助線程為止。在這種情況下,過程前進到步驟S920,操作系 統(tǒng)從任務(wù)列表中最終去除該工作線程任務(wù)結(jié)構(gòu)。以上結(jié)合圖5-9詳細(xì)描述了根據(jù)本發(fā)明的第一種優(yōu)選實施例,在 操作系統(tǒng)的任務(wù)列表中預(yù)先設(shè)置每個工作線程的結(jié)構(gòu)和在操作系統(tǒng) 中的輔助線程堆區(qū)中設(shè)置與該工作線程相關(guān)的輔助線程的結(jié)構(gòu),以使 該工作線程和與其相關(guān)的輔助線程進行相關(guān)聯(lián)的操作的模塊結(jié)構(gòu)圖 和方法流程圖。通過針對單個工作線程,預(yù)先提取其輔助線程并在輔 助線程堆區(qū)中創(chuàng)建相應(yīng)的輔助線程任務(wù)結(jié)構(gòu),提高了單個線程運行的 速度、節(jié)省了CPU的系統(tǒng)資源。
在本發(fā)明的第二實施例中,采用了以查找表的形式保存工作線程 和其相應(yīng)的輔助線程之間的關(guān)聯(lián)關(guān)系的方式,來實現(xiàn)工作線程和與該 工作線程相關(guān)的輔助線程之間的相伴調(diào)度。根據(jù)該第二實施例,沒有 象第一實施例那樣,采取預(yù)先提取輔助線程,并將所創(chuàng)建的輔助線程 結(jié)構(gòu)單獨存儲在輔助線程堆區(qū)的方式。根據(jù)第二實施例,在操作系統(tǒng) 創(chuàng)建工作線程及相關(guān)的輔助線程時,所采用的工作線程和輔助線程的 結(jié)構(gòu)仍舊如第一實施例,所不同的是,根據(jù)第二實施例,使用查找表 來保存工作線程和其輔助線程之間的關(guān)聯(lián)關(guān)系,例如為一工作線程保 存其輔助線程的地址信息。根據(jù)第二實施例,同樣可以提高單個線程 運行的速度、節(jié)省CPU的系統(tǒng)資源。
相應(yīng)地,在去除輔助線程時,通過查找該查找表中工作線程和輔 助線程之間的關(guān)聯(lián)關(guān)系而去除輔助線程并最終去除工作線程。
圖10A-I是根據(jù)本發(fā)明在多核/多線程處理器系統(tǒng)中操作系統(tǒng)對 單個工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度過程中 運行隊列狀態(tài)轉(zhuǎn)移圖。根據(jù)本發(fā)明,在操作系統(tǒng)的運行隊列中,維護 指向不同任務(wù)的指針序列。操作系統(tǒng)將構(gòu)建用于每個處理器核/線程的 運行隊列。圖IOA-I示出了包括兩個索引的運行隊列。第一索引(圖 上顯示為"當(dāng)前")指向在運行隊列中正在運行的線程。第二索引(圖 上顯示為"下一個,,)指向在運行隊列中將被調(diào)度的線程。每個運行
隊列還包括指示在該處理器核/硬件線程上正在運行哪種線程(工,作線 程或輔助線程)的標(biāo)簽。
下面結(jié)合圖11對圖IOA-I的狀態(tài)轉(zhuǎn)移圖進行說明。圖ll是根據(jù)本發(fā)明在多核/多線程處理器系統(tǒng)中對單個工作線程和與該工作線程 相關(guān)的輔助線程進行相伴調(diào)度的方法的操作流程圖。在開始運行/調(diào)度
一個工作線程時
在步驟S1105,首先判斷該工作線程是否具有輔助線程。如果步 驟S1105的判斷結(jié)果為"否",則表明不需要進行該工作線程的調(diào)度, 相伴調(diào)度方法結(jié)束,工作線程如通常線程那樣開始運行。否則,如果 驟S1105的判斷結(jié)果為"是",則過程進入到步驟SlllO。
在步驟SlllO,進一步判斷該工作線程的輔助線程是否可以被調(diào) 度。如果步驟SlllO的判斷結(jié)果為"否,,,則表明不允許調(diào)度該工作 線程的輔助線程,相伴調(diào)度方法結(jié)束。否則,如果步驟S1110的判斷 結(jié)果為"是",則過程進入到步驟S1115。
在步驟S1115,用與運行所述工作線程相關(guān)的輔助線程中的一個 輔助線程替換運行隊列中要運行的所述工作線程,并運行所述輔助線 程。
再次參考圖10。如圖10A所示,以工作線程1為例,并且以基 于四個核的處理器系統(tǒng)進行說明。當(dāng)?shù)诙饕甘竟ぷ骶€程l作為運 行隊列(第一運行隊列)中要被調(diào)度的線程時,開始本發(fā)明的輔助線 程調(diào)度操作。
當(dāng)運行隊列中的正在運行的線程(圖10A中的線程7)運行結(jié)束, 線程1即將在該運行隊列中被運行時,用與運行所述工作線程1相關(guān) 的輔助線程中的一個輔助線程,例如第 一輔助線程替換運行隊列中要 運行的工作線程l,并運行所述第一輔助線程,如圖10B所示。
接著,過程進入到步驟S1120,將該工作線程1放置在下一個運 行隊列(即第二運行隊列)的要被調(diào)度的線程的位置。參見圖IOC, 此時將工作線程1置于下一個運行隊列(第二運行隊列)的要被調(diào)度 的線程的位置,以使該工作線程在下一時刻能首先被運行。也就是, 將當(dāng)前工作線程1插入到下一個運行隊列作為第一預(yù)備線程。
然后,過程進入到步驟S1125,進一步判斷該工作線程是否還有 更多的輔助線程。當(dāng)步驟S1125的判斷結(jié)果是"是"時,過程重復(fù)步驟S1115、 1120, 直到與運行所述工作線程相關(guān)的所有輔助線程都開始運行。
參見圖10D-10H所示,當(dāng)該工作線程l將要在下一個運行隊列(即 第二運行隊列)中被運行時,用與運行所述工作線程相關(guān)的輔助線程 中的下一個輔助線程替換下一個運行隊列(即第二運行隊列)中要運 行的所述工作線程1,并運行所述下一個輔助線程。其中,通過所創(chuàng) 建的輔助線程結(jié)構(gòu)中的"NextAt"字段,可以很容易找到當(dāng)前輔助線 程后的下一個輔助線程。從圖10D-10H可以看出,當(dāng)工作線程l依次 被置于第三、第四運行隊列的頭部時,相應(yīng)地依次用與運行所述工作 線程相關(guān)的輔助線程中的接下來的第三、第四輔助線程替換位于第 三、第四運行隊列頭部的工作線程,并運行相應(yīng)輔助線程。直到與運 行所述工作線程相關(guān)的所有輔助線程都開始運行時,開始運行所述工 作線程l,如圖101所示。
當(dāng)步驟S1125的判斷結(jié)果是"否"時,過程結(jié)束。
相應(yīng)地,當(dāng)工作線程停止運行后,系統(tǒng)將從每個運行隊列中去除 所有輔助線程并將下一個指針指向下一個工作線程,然后工作線程退 出運行。
圖12是根據(jù)本發(fā)明的工作線程停止運行的流程圖。圖12是工作 線程被調(diào)度模塊切換掉的過程。當(dāng)調(diào)度模塊準(zhǔn)備切換掉工作線程時 (由于另一個線程中斷或時間超時),調(diào)度模塊將從每個運行隊列中 刪除所有輔助線程,并讓下一個指針指向下一個工作線程。具體地, 該過程包括
在步驟S1205,首先判斷運行的工作線程是否具有輔助線程。如 果"否",則結(jié)束該過程。否則,如果步驟S1205的判斷結(jié)果是"是", 則過程進入到步驟S1210,從運行隊列中去除該工作線程的輔助線程。 并進入到步驟S1215,進一步判斷,當(dāng)前工作線程是否還有更多的輔 助線程。如果是,則從運行隊列中去除該工作線程的下一個輔助線程。 直到步驟S1215的判斷結(jié)果表明,當(dāng)前工作線程已經(jīng)沒有輔助線程時, 停止工作線程運行的過程結(jié)束。
18應(yīng)當(dāng)理解,給出這種示意只是為了便于本領(lǐng)域技術(shù)人員理解本 發(fā)明的原理,不應(yīng)當(dāng)將其理解為對本發(fā)明的任何限制。
本領(lǐng)域技術(shù)人員會認(rèn)識到,可以以方法、系統(tǒng)或計算機程序產(chǎn) 品的形式提供本發(fā)明的實施例。因此,本發(fā)明可采取全硬件實施例、 全軟件實施例,或者組合軟件和硬件的實施例的形式。硬件和軟件的 典型的結(jié)合可以是帶有計算機程序的通用計算機系統(tǒng),當(dāng)程序被加載 并被執(zhí)行時,控制計算機系統(tǒng),從而可以執(zhí)行上述的方法。
本發(fā)明可以嵌入在計算機程序產(chǎn)品中,它包括使此處描述的方 法得以實施的所有特征。所述計算機程序產(chǎn)品被包含在一個或多個計
算機可讀存儲介質(zhì)(包括,但不限于,磁盤存儲器、CD-ROM、光學(xué) 存儲器等)中,所述計算機可讀存儲介質(zhì)具有包含于其中的計算機可 讀程序代碼。
已參考根據(jù)本發(fā)明的方法、系統(tǒng)及計算機程序產(chǎn)品的流程圖和/ 或方框圖說明了本發(fā)明。流程圖和/或方框圖中的每個方框,以及流 程圖和/或方框圖中的方框的組合顯然可由計算機程序指令實現(xiàn)。這 些計算機程序指令可被提供給通用計算機、專用計算機、嵌入式處理
器或者其他可編程的數(shù)據(jù)處理設(shè)備的處理器,以產(chǎn)生一臺機器,從而 指令(所述指令通過計算機或者其他可編程數(shù)據(jù)處理設(shè)備的處理器) 產(chǎn)生用于實現(xiàn)在流程圖和/或方框圖的一個或多個方框中規(guī)定的功能 的裝置。
這些計算機程序指令也可保存在一個或多個計算機的讀存儲器 中,每個這種存儲器能夠指揮計算機或者其他可編程數(shù)據(jù)處理設(shè)備按 照特定的方式發(fā)揮作用,從而保存在計算機可讀存儲器中的指令產(chǎn)生 一種制造產(chǎn)品,所述制造產(chǎn)品包括實現(xiàn)在流程圖和/或方框圖的一個 或多個方框中規(guī)定的功能的指令裝置。
計算機程序指令也可被加載到一個或多個計算機或者其他可編 程數(shù)據(jù)處理設(shè)備上,使得在所述計算機或者其他可編程數(shù)據(jù)處^i殳備 上執(zhí)行一系列的操作步驟,從而在每個這樣的設(shè)備上產(chǎn)生計算機實現(xiàn)的過程,以致在該設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖和/或方 框圖的一個或多個方框中規(guī)定的步驟。
以上結(jié)合本發(fā)明的優(yōu)選實施方式對本發(fā)明的原理進行了說明, 但這些說明只是示例性的,不應(yīng)理解為對本發(fā)明的任何限制。本領(lǐng)域 技術(shù)人員可以對本發(fā)明進行各種改變和變形,而不會背離由隨附權(quán)利 要求所限定的本發(fā)明的精神和范圍。
權(quán)利要求
1、一種在多線程處理器系統(tǒng)中對工作線程和與所述工作線程相關(guān)的輔助線程進行相伴調(diào)度的方法,所述方法包括在準(zhǔn)備運行/調(diào)度所述工作線程時,查找與運行所述工作線程相關(guān)的一個或多個輔助線程;運行查找到的一個或多個輔助線程;在與運行所述工作線程相關(guān)的一個或多個輔助線程都運行后,運行所述工作線程。
2、 根據(jù)權(quán)利要求l所述的方法,還包括 由操作系統(tǒng)預(yù)先設(shè)置工作線程的結(jié)構(gòu)和與所述工作線程相關(guān)的輔助線程的結(jié)構(gòu),以使所述工作線程和與所述工作線程相關(guān)的所述 輔助線程相關(guān)聯(lián)。
3、 根據(jù)權(quán)利要求2所述的方法,其中,由操作系統(tǒng)預(yù)先設(shè)置工 作線程的結(jié)構(gòu)的步驟進一步包括在操作系統(tǒng)的任務(wù)列表中為每個所 述工作線程增加如下信息所述工作線程是否具有輔助線程以及屬于所述工作線程的輔助 線程的數(shù)量;運行所述工作線程時是否需要輔助線程以及所需要的輔助線程 的數(shù)量;以及指向與運行所述工作線程相關(guān)的輔助線程中的第一個輔助線程 的指針。
4、 根據(jù)權(quán)利要求2所述的方法,其中,由操作系統(tǒng)預(yù)先設(shè)置與 所述工作線程相關(guān)的輔助線程的結(jié)構(gòu)的步驟進一步包括為每個輔助 線程增加如下信息指向該輔助線程所屬的工作線程的指針;以及 指向同屬于所述工作線程的下一個輔助線程的指針。
5、 根據(jù)權(quán)利要求1至4中任意一個所述的方法,還包括 預(yù)先確定與所述工作線程相關(guān)的輔助線程; 提取確定的與所述工作線程相關(guān)的輔助線程;以及單獨的輔助線:存儲區(qū)中r ,''、,
6、 根據(jù)權(quán)利要求1至4中任意一個所述的方法,還包括 預(yù)先確定與所述工作線程相關(guān)的輔助線程; 將確定的與所述工作線程相關(guān)的輔助線程的物理地址增加到一個查找表中。
7、 根據(jù)權(quán)利要求1所述的方法,其中所述運行一個或多個輔助 線程的步驟進一步包括i )用與運行所述工作線程相關(guān)的輔助線程中的一個輔助線程替換 運行隊列中要運行的所述工作線程,并運行所述一個輔助線程;ii) 將所述工作線程放置在下一個運行隊列的要被調(diào)度的線程的 位置;iii) 當(dāng)所述工作線程將要在所述下一個運行隊列被運行時,用與 運行所述工作線程相關(guān)的輔助線程中的下一個輔助線程替換要運行 的所述工作線程,并運行所述下一個輔助線程;重復(fù)上述步驟,直到與運行所述工作線程相關(guān)的所有輔助線程都 已經(jīng)運行。
8、 根據(jù)權(quán)利要求1所述的方法,進一步包括 在所述工作線程停止運行后,從每個運行隊列中刪除與所述工作線程相關(guān)的輔助線程。
9、 根據(jù)權(quán)利要求1所述的方法,其中所述多線程處理器系統(tǒng)為 多核處理器系統(tǒng)。
10、 一種在多線程處理器系統(tǒng)中對工作線程和與所述工作線程相 關(guān)的輔助線程進行相伴調(diào)度的設(shè)備,所述設(shè)備包括查找裝置,用于在準(zhǔn)備運行/調(diào)度所述工作線程時,查找與運行所 述工作線程相關(guān)的一個或多個輔助線程;調(diào)度裝置,用于運行查找到的一個或多個輔助線程; 其中所述調(diào)度裝置還被配置用于在與運行所述工作線程相關(guān)的 一個或多個輔助線程都運行后,運行所述工作線程。
11、 根據(jù)權(quán)利要求10所述的設(shè)備,所述調(diào)度裝置還包括 預(yù)先設(shè)置裝置,用于使操作系統(tǒng)預(yù)先設(shè)置所述工作線程的結(jié)構(gòu)和與所述工作線程相關(guān)的輔助線程的結(jié)構(gòu),以使所述工作線程和與所述 工作線程相關(guān)的所述輔助線程相關(guān)聯(lián)。
12、 根據(jù)權(quán)利要求11所述的設(shè)備,其中,所述預(yù)先設(shè)置裝置被 進一步配置用于在操作系統(tǒng)的任務(wù)列表中為每個所述工作線程增加 如下信息所述工作線程是否具有輔助線程以及屬于所述工作線程的輔助 線程的數(shù)量;運行所述工作線程時是否需要輔助線程以及所需要的輔助線程 的數(shù)量;以及指向與運行所述工作線程相關(guān)的輔助線程中的第 一個輔助線程 的指針。
13、 根據(jù)權(quán)利要求11所述的設(shè)備,其中,所述預(yù)先設(shè)置裝置被 進一步配置用于為每個輔助線程增加如下信息指向該輔助線程所屬的工作線程的指針;以及 指向同屬于所述工作線程的下一個輔助線程的指針。
14、 根據(jù)權(quán)利要求10至13中任意一個所述的設(shè)備,還包括 確定裝置,用于預(yù)先確定與所述工作線程相關(guān)的輔助線程;提取裝置,用于提取確定的與所述工作線程相關(guān)的輔助線程;以及輔助線程堆區(qū),位于操作系統(tǒng)的一個單獨存儲區(qū)中,用于保存提 取的與所述工作線程相關(guān)的輔助線程。
15、 根據(jù)權(quán)利要求10至13中任意一個所述的設(shè)備,還包括 確定裝置,用于預(yù)先確定與所述工作線程相關(guān)的輔助線程; 查找表裝置,用于保存確定的與所述工作線程相關(guān)的輔助線程的地址。
16、 根據(jù)權(quán)利要求10所述的設(shè)備,其中所述調(diào)度裝置進一步被 配置用于i )用與運行所述工作線程相關(guān)的輔助線程中的一個輔助線程替換 運行隊列中要運行的所述工作線程,并運行所述一個輔助線程;ii) 將所述工作線程放置在下一個運行隊列的要被調(diào)度的線程的 位置;iii) 當(dāng)所述工作線程將要在所述下一個運行隊列被運行時,用與 運行所述工作線程相關(guān)的輔助線程中的下 一個輔助線程替換要運行 的所述工作線程,并運行所述下一個輔助線程;重復(fù)上述操作,直到與運行所述工作線程相關(guān)的所有輔助線程都 已經(jīng)運行。
17、 根據(jù)權(quán)利要求10所述的設(shè)備,還包括 在所述工作線程停止運行后,用于從每個運行隊列中刪除與所述工作線程相關(guān)的輔助線程的裝置。
18、 根據(jù)權(quán)利要求10所述的設(shè)備,其中所述多線程處理器系統(tǒng) 為多核處理器系統(tǒng)。
全文摘要
本發(fā)明提供了一種在多線程處理器系統(tǒng)中對工作線程和與該工作線程相關(guān)的輔助線程進行相伴調(diào)度的方法和設(shè)備。所述方法包括在準(zhǔn)備運行/調(diào)度所述工作線程時,查找與運行該工作線程相關(guān)的一個或多個輔助線程;運行所查找到的一個或多個輔助線程;在與運行所述工作線程相關(guān)的一個或多個輔助線程都運行后,運行所述工作線程。根據(jù)本發(fā)明,提高了單個線程運行的速度、節(jié)省了CPU的系統(tǒng)資源。
文檔編號G06F9/48GK101482831SQ200810002270
公開日2009年7月15日 申請日期2008年1月8日 優(yōu)先權(quán)日2008年1月8日
發(fā)明者銳 候, 亮 劉, 弋 戈, 虓 鐘, 瀅 陳 申請人:國際商業(yè)機器公司