專利名稱:在多核架構(gòu)中進(jìn)行調(diào)度的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于在多核架構(gòu)中調(diào)度線程的方法和裝置。
背景技術(shù):
近年來,出現(xiàn)了生產(chǎn)含有多個(gè)核的處理器的趨勢(shì),以使硅效率(即,“應(yīng)用可用的”MIP/平方毫米或MIP/毫瓦)最大化。這種多核架構(gòu)理想地適于運(yùn)行基于線程的應(yīng)用,這是因?yàn)榫€程定義了包含執(zhí)行狀態(tài)、指令流和數(shù)據(jù)集的工作的自治封裝,通過該定義,其可以與其他線程并發(fā)地執(zhí)行。
調(diào)度是概括術(shù)語(yǔ),用于對(duì)于特定處理資源發(fā)現(xiàn)并分配最適合的線程(即指令集)來執(zhí)行,并且應(yīng)用程序以及在其上執(zhí)行應(yīng)用程序的下層硬件平臺(tái)都需要調(diào)度。
與適于執(zhí)行特定線程的多個(gè)核可能的可用性相結(jié)合,在多核結(jié)構(gòu)內(nèi)的執(zhí)行并發(fā)性將另外的問題引入了用于在這些多核架構(gòu)內(nèi)分配線程的調(diào)度中。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的第一方面,提供了一種在多核處理器內(nèi)調(diào)度可執(zhí)行事務(wù)(更經(jīng)常地稱為線程)的方法,如權(quán)利要求1所述。
通過提供多級(jí)(更優(yōu)選地為分層)的調(diào)度系統(tǒng),本發(fā)明使得能夠根據(jù)一個(gè)或更多個(gè)較簡(jiǎn)單的調(diào)度算法構(gòu)造出復(fù)雜的調(diào)度算法。使用這種復(fù)雜調(diào)度算法的能力提高了包括多個(gè)線程的應(yīng)用在其執(zhí)行期間的性能。本發(fā)明通過更有效地將可執(zhí)行事務(wù)或線程分配給處理資源,而提高了應(yīng)用的運(yùn)行時(shí)性能。這可以提高執(zhí)行速度并且減少對(duì)特定資源的瓶頸。它還可增加對(duì)多核處理器的較不活躍部分的使用。
在優(yōu)選實(shí)施例中,由專用硬編碼(從而有效率)實(shí)施例來執(zhí)行該方法。優(yōu)選的硬編碼實(shí)施例是服務(wù)器-客戶機(jī)拓?fù)浣Y(jié)構(gòu)的,包括系統(tǒng)服務(wù)器(下文中稱為SystemWeaver)以及多核處理器內(nèi)每個(gè)處理資源或核的客戶機(jī)。在其他的實(shí)施例中,正在討論的處理資源的能力使單個(gè)客戶機(jī)可以聚合對(duì)多個(gè)處理資源的訪問。
為了進(jìn)一步提高并入了本發(fā)明的整個(gè)系統(tǒng)的性能,優(yōu)選實(shí)施例使用專用存儲(chǔ)器內(nèi)的指針來調(diào)度分配、存儲(chǔ)用于判定目的的值等。這些指針優(yōu)選地包含用于存儲(chǔ)根據(jù)其做出調(diào)度判定的參數(shù)的字段,并且優(yōu)選地還包含這樣的字段,該字段用于存儲(chǔ)在后續(xù)判定中使用的值或者簡(jiǎn)單地存儲(chǔ)關(guān)心的其他值。在下文中所述字段集總地被稱為量度(metric)或操作符。
根據(jù)本發(fā)明的第二方面,提供了一種在多核處理器內(nèi)調(diào)度可執(zhí)行事務(wù)的方法,所述可執(zhí)行事務(wù)定義了應(yīng)用,并且所述多核處理器具有多個(gè)處理器元件,所述方法包括保持可執(zhí)行事務(wù)調(diào)度器的層級(jí),其中,所述層級(jí)適于根據(jù)所述應(yīng)用在使用時(shí)的要求來調(diào)度可執(zhí)行事務(wù),其中,所述調(diào)度器層級(jí)的每個(gè)級(jí)別包括至少一個(gè)調(diào)度器,并且其中,所述至少一個(gè)調(diào)度器包括至少一個(gè)規(guī)則,用于將所述可執(zhí)行事務(wù)排序成在一個(gè)或更多個(gè)處理器元件上執(zhí)行的最適任事務(wù)的順序。
根據(jù)本發(fā)明的第三方面,提供了一種在多核處理器中管理能耗的方法,如權(quán)利要求37所述。
在多核處理器具有多個(gè)處理資源、每個(gè)處理資源都能夠執(zhí)行特定線程的情況下,本發(fā)明使這多個(gè)處理資源能夠一起置入池中。因而是該處理資源池被分配了線程。然而,在這種情況下,當(dāng)需要執(zhí)行的線程的數(shù)量未超過池的執(zhí)行能力時(shí),即,當(dāng)該池內(nèi)的某些處理資源要么被利用,要么完全未被利用時(shí),本發(fā)明使各個(gè)處理資源能夠置入節(jié)能模式。處理資源甚至可具有多個(gè)不同的節(jié)能級(jí)別。
優(yōu)選地,當(dāng)線程執(zhí)行負(fù)載需要時(shí),處理資源離開節(jié)能模式,或者至少將處理資源移動(dòng)到較不節(jié)能的模式,其返回到全功率模式的代價(jià)較低。
根據(jù)本發(fā)明的第四方面,如權(quán)利要求38所述,提供了一種在多核處理器內(nèi)調(diào)度可執(zhí)行事務(wù)或線程的方法,所述多核處理器具有至少一個(gè)包括可重新配置的邏輯的處理器元件。
在一個(gè)或更多個(gè)處理器元件具有可重新配置的邏輯部分的情況下,例如在場(chǎng)可編程門陣列(FPGA)的可重新配置的執(zhí)行部分的情況下,本發(fā)明可以通過將利用該邏輯的相同配置的線程聚合在一起來提高性能。即,當(dāng)可重新配置的邏輯部分被重新配置時(shí),這用來減少環(huán)境(context)切換的需要或降低環(huán)境切換的影響。
本發(fā)明還可在可重新配置的邏輯的情況下提高性能,形式為,局部高速緩沖存儲(chǔ)器存儲(chǔ)準(zhǔn)備好接下來在所討論的處理器元件上執(zhí)行的指令。
這是因?yàn)橥ㄟ^將使用高速緩沖的存儲(chǔ)器中相同區(qū)域的線程聚合以用于執(zhí)行,可將局部高速緩存沒有命中或者局部高速緩存沖出的效果最小化。
根據(jù)本發(fā)明的第五方面,提供了一種計(jì)算機(jī)程序,其當(dāng)被數(shù)字邏輯執(zhí)行時(shí),執(zhí)行如權(quán)利要求1所述的方法。還提供了一種計(jì)算機(jī)可讀介質(zhì),其包含所述計(jì)算機(jī)程序。
當(dāng)利用這里描述的教導(dǎo)時(shí),處理器元件、處理資源、核以及處理器被解釋為等同的。處理器元件的繁忙狀態(tài)可等同于其當(dāng)前工作負(fù)載。在其所附從屬權(quán)利要求中定義了另外的有利特性。
根據(jù)本發(fā)明的另一方面,提供了一種多核處理器,所述多核處理器包括多個(gè)處理器元件;至少一個(gè)分配隊(duì)列,所述分配隊(duì)列按對(duì)執(zhí)行的適任性的順序列出可執(zhí)行事務(wù);以及多級(jí)調(diào)度器,其包括多個(gè)個(gè)體可執(zhí)行事務(wù)調(diào)度器,其中每個(gè)個(gè)體可執(zhí)行事務(wù)調(diào)度器包括調(diào)度算法,所述調(diào)度算法用于從準(zhǔn)備好執(zhí)行的多個(gè)候選可執(zhí)行事務(wù)中確定用于執(zhí)行的最適任可執(zhí)行事務(wù);其中,將多個(gè)調(diào)度器鏈接在一起并將所述多級(jí)調(diào)度器布置為從其將所述最適任可執(zhí)行事務(wù)輸出到所述至少一個(gè)分配隊(duì)列。
可執(zhí)行事務(wù)可包括線程描述符,線程描述符可從多個(gè)狀態(tài)中選擇。根據(jù)狀態(tài)轉(zhuǎn)換配置,線程描述符可在來自所述多個(gè)狀態(tài)的狀態(tài)之間變化,由此識(shí)別所述可執(zhí)行事務(wù),從而可在多個(gè)可執(zhí)行事務(wù)之間對(duì)其進(jìn)行管理,以提供低調(diào)度等待時(shí)間以及調(diào)度層級(jí)的完整性。調(diào)度器可識(shí)別線程描述符。調(diào)度器可包括從多個(gè)調(diào)度狀態(tài)中選擇的調(diào)度器狀態(tài)??刂普{(diào)度器狀態(tài)來支持動(dòng)態(tài)調(diào)度層級(jí),其中,可在系統(tǒng)的正常運(yùn)行期間調(diào)整調(diào)度層級(jí),同時(shí)保持在該層級(jí)內(nèi)調(diào)度的項(xiàng)目的順序和完整性。
多核處理器還可包括硬件定時(shí)資源,可以布置硬件定時(shí)資源來提供watchdog(看門狗)超時(shí),其中,watchdog超時(shí)指的是已進(jìn)入不可操作狀態(tài)的處理資源實(shí)例。另選地,硬件定時(shí)資源可提供時(shí)間片(timeslice)超時(shí),其中時(shí)間片超時(shí)指的是在多個(gè)同等適任的可執(zhí)行事務(wù)之間公平地共享的處理資源實(shí)例或處理資源實(shí)例的組。公平共享可包括提供對(duì)時(shí)間的同等共享或?qū)εc可執(zhí)行事務(wù)的要求成比例的時(shí)間的共享??蓪⒃撚布〞r(shí)資源布置為在第一模式和第二模式之間切換,在所述第一模式下將其配置為提供watchdog超時(shí),在所述第二模式下將其配置為提供時(shí)間片超時(shí)。優(yōu)選地將硬件定時(shí)資源配置為如果設(shè)置了時(shí)間片斷超時(shí),就切換到第一模式。
所述多核處理器的等待管理器(pending manager)還可包括定時(shí)器隊(duì)列,每個(gè)定時(shí)器隊(duì)列布置為接收定時(shí)器隊(duì)列元素。定時(shí)器隊(duì)列元素可包括可執(zhí)行事務(wù)。定時(shí)器隊(duì)列中的第一個(gè)可執(zhí)行事務(wù)可以與第一時(shí)間參數(shù)相關(guān)聯(lián)。第一時(shí)間參數(shù)指的是超時(shí)時(shí)間,所述超時(shí)時(shí)間是相關(guān)聯(lián)的可執(zhí)行事務(wù)應(yīng)該變得對(duì)執(zhí)行適任時(shí)的時(shí)間。優(yōu)選地,第一個(gè)可執(zhí)行事務(wù)的超時(shí)時(shí)間與當(dāng)前時(shí)間最接近。第二個(gè)可執(zhí)行事務(wù)可以與第二時(shí)間參數(shù)相關(guān)聯(lián)。第二時(shí)間參數(shù)指的是第二個(gè)可執(zhí)行事務(wù)的超時(shí)時(shí)間與第一個(gè)可執(zhí)行事務(wù)的超時(shí)時(shí)間之間的差。第三個(gè)可執(zhí)行事務(wù)可以與第三時(shí)間參數(shù)相關(guān)聯(lián)。第三時(shí)間參數(shù)指的是第三個(gè)可執(zhí)行事務(wù)的超時(shí)時(shí)間與第二個(gè)可執(zhí)行事務(wù)的超時(shí)時(shí)間之間的差。
隊(duì)列中的第一個(gè)可執(zhí)行事務(wù)可與一時(shí)間參數(shù)相關(guān)聯(lián)。該時(shí)間參數(shù)指的是相關(guān)聯(lián)的可執(zhí)行事務(wù)的超時(shí)與也在隊(duì)列中的第二個(gè)可執(zhí)行事務(wù)的超時(shí)之間的差。優(yōu)選地,所述第二個(gè)可執(zhí)行事務(wù)是隊(duì)列中具有在所述第一個(gè)可執(zhí)行事務(wù)的超時(shí)之前發(fā)生且與其最接近的超時(shí)的可執(zhí)行事務(wù)。
多核處理器還可包括多個(gè)派出隊(duì)列。優(yōu)選地,派出隊(duì)列被布置為識(shí)別另外的派出隊(duì)列。每個(gè)派出隊(duì)列可包括派出隊(duì)列描述符。這使得可具有靈活數(shù)量的被服務(wù)處理資源實(shí)例,并還使派出隊(duì)列描述符能夠被按順序地詢問。還可將派出隊(duì)列布置為從當(dāng)前正使用處理器元件的搶占可執(zhí)行事務(wù)的組中識(shí)別可執(zhí)行事務(wù)。還可將派出隊(duì)列布置為從將隨后使用處理器元件的搶占可執(zhí)行事務(wù)的組中識(shí)別另外的可執(zhí)行事務(wù)。從而派出隊(duì)列保持由調(diào)度管理器所進(jìn)行的最近一次調(diào)度判定的索引。
為提供多級(jí)調(diào)度器,多個(gè)個(gè)體可執(zhí)行事務(wù)調(diào)度器的鏈接定義了調(diào)度層級(jí),其中每個(gè)可執(zhí)行事務(wù)調(diào)度器具有相關(guān)聯(lián)的調(diào)度層??蓪⒖蓤?zhí)行事務(wù)調(diào)度器配置為識(shí)別先前調(diào)度了可執(zhí)行事務(wù)的可執(zhí)行事務(wù)調(diào)度器??蛇x地,所述可執(zhí)行事務(wù)調(diào)度器可識(shí)別所述可執(zhí)行事務(wù)是否源自與處理器元件相關(guān)聯(lián)的分配隊(duì)列。所述可執(zhí)行事務(wù)調(diào)度器可識(shí)別所述可執(zhí)行事務(wù)是否來自搶占可執(zhí)行事務(wù)的組。針對(duì)調(diào)度事件是“推送”事件的情況可使處理優(yōu)化。當(dāng)由可執(zhí)行事務(wù)調(diào)度器調(diào)度可執(zhí)行事務(wù)時(shí),還可將所述可執(zhí)行事務(wù)調(diào)度器配置為將校正參數(shù)發(fā)送到先前調(diào)度過該可執(zhí)行事務(wù)的各個(gè)可執(zhí)行事務(wù)調(diào)度器。所述校正參數(shù)使調(diào)度判定可以傳播并使得可以保持多級(jí)調(diào)度器內(nèi)的計(jì)數(shù)器的完整性。
還提供了一種操作多核處理器系統(tǒng)的方法,該方法包括設(shè)置客戶機(jī);以及為該客戶機(jī)選擇交互狀態(tài)。所述交互狀態(tài)可包括空閑狀態(tài),在其期間客戶機(jī)可被配置為在功率管理模式下工作;以及用戶狀態(tài),在其期間客戶機(jī)被配置為在用戶或正常模式下執(zhí)行可執(zhí)行事務(wù)。優(yōu)選地,所述交互狀態(tài)還可包括API交互狀態(tài),在API交互狀態(tài)期間,客戶機(jī)被配置為在特權(quán)狀態(tài)中執(zhí)行可執(zhí)行事務(wù)??蛇x地,所述交互狀態(tài)可包括客戶機(jī)中介狀態(tài)(client shim state),在客戶機(jī)中介狀態(tài)期間,客戶機(jī)可被配置為準(zhǔn)備可執(zhí)行事務(wù)的環(huán)境。優(yōu)選地,所述方法還包括設(shè)置服務(wù)器,其中,在所述客戶機(jī)和服務(wù)器之間共享所述交互狀態(tài)。優(yōu)選地,可提供帶外信號(hào)以使所述交互狀態(tài)改變。所述服務(wù)器可提供該帶外信號(hào)。可選地,可執(zhí)行事務(wù)可使所述交互狀態(tài)改變。
具體實(shí)施例方式
介紹
圖1示出了與用于在多核系統(tǒng)中管理任務(wù)或線程的SystemWeaver中所實(shí)現(xiàn)的任務(wù)狀態(tài)圖相似的任務(wù)狀態(tài)圖。
在多核系統(tǒng)中,調(diào)度器根據(jù)一組預(yù)定規(guī)則在最佳時(shí)間將工作包提供給最佳資源(所述的“調(diào)度”)。
應(yīng)用和下層的硬件平臺(tái)都需要調(diào)度-應(yīng)用調(diào)度包括同步和適任性(eligibility)。
同步確保可以共享系統(tǒng)內(nèi)的資源,而不會(huì)危及數(shù)據(jù)的完整性以及無(wú)論如何也不會(huì)危及整個(gè)系統(tǒng)。適任性確保以與應(yīng)用的需要(其是在調(diào)度策略中表達(dá)的)相符合的方式將就緒任務(wù)分發(fā)給處理資源。
-基于平臺(tái)/分配調(diào)度定義了這樣的策略,即,在適當(dāng)?shù)奶幚碣Y源實(shí)例之間分配應(yīng)用任務(wù)。這意味著在多個(gè)用戶和/或多個(gè)不同的算法之間共享處理資源。
圖2示出了調(diào)度點(diǎn)相對(duì)于其造成的隊(duì)列點(diǎn)的表示。
從左至右遇到的第一個(gè)隊(duì)列點(diǎn)是待定(pending)隊(duì)列。被阻塞的任務(wù)根據(jù)其優(yōu)先級(jí)存儲(chǔ)在該待定隊(duì)列中并由同步事件釋放,進(jìn)一步討論待定隊(duì)列的結(jié)構(gòu)和行為超出了本文檔的范圍。第二隊(duì)列點(diǎn)是就緒隊(duì)列,其包括應(yīng)用調(diào)度和分配調(diào)度。在圖2中其被分為三個(gè)邏輯部分;應(yīng)用調(diào)度和分配調(diào)度。在概念上,在這兩個(gè)調(diào)度級(jí)之間是這樣的點(diǎn),在該點(diǎn)處所有當(dāng)前就緒的應(yīng)用任務(wù)都已根據(jù)其適任性(其是在用戶定義的量度和調(diào)度策略中表達(dá)的)而排序。這是被稱作分配節(jié)點(diǎn)的點(diǎn)。
在分配節(jié)點(diǎn)之前,配置了一組應(yīng)用特定調(diào)度策略,其確定了不同類別的任務(wù)以及同一類別的任務(wù)實(shí)例是如何競(jìng)爭(zhēng)以訪問處理資源實(shí)例的。這種調(diào)度策略的層級(jí)被稱為調(diào)度錐(cone)并且是應(yīng)用特定的。
在調(diào)度錐之后,配置了一組平臺(tái)特定調(diào)度策略,其確定了如何將最適任的應(yīng)用任務(wù)分配給存在于下層硬件平臺(tái)中的處理資源實(shí)例。這種調(diào)度策略的層級(jí)被稱為分配錐并且是平臺(tái)特定的。
可以基于許多屬性的組合來判斷調(diào)度策略和實(shí)現(xiàn)的有效性
-吞吐量每秒可進(jìn)行的調(diào)度判定的數(shù)量。
-等待時(shí)間在系統(tǒng)內(nèi)的事件與完成與該事件相關(guān)聯(lián)的調(diào)度操作之間經(jīng)過的時(shí)間。
-可預(yù)測(cè)性/確定性確定系統(tǒng)在所有情形下如何運(yùn)轉(zhuǎn)的能力。
-效率其中可實(shí)現(xiàn)任何給定調(diào)度算法的效率。這可以根據(jù)每次判定的指令(指令集效率的度量)和/或硅足印(silicon footprint)(存儲(chǔ)器和其他模區(qū)域)來測(cè)量。
-策略支持策略的多樣性和將它們組合以形成復(fù)雜層級(jí)的能力。
組件SystemWeaver有兩個(gè)主要組件服務(wù)器核和客戶機(jī)中介(shims)??梢砸愿鞣N方式將它們連接起來。支持SystemWeaver的系統(tǒng)將包括服務(wù)器核以及至少一個(gè)客戶機(jī)中介。
SystemWeaver核SystemWeaver核包括硬件引擎和緊密耦合的存儲(chǔ)器。該存儲(chǔ)器包含調(diào)度配置以及用于表示系統(tǒng)內(nèi)的工作單位的動(dòng)態(tài)描述符。每個(gè)SystemWeaver核跨多個(gè)客戶機(jī)聚合,所述多個(gè)客戶機(jī)可以為基于指令集的架構(gòu)或硬件加速器。SystemWeaver通過兩個(gè)邏輯分立的數(shù)據(jù)路徑與每個(gè)客戶機(jī)單獨(dú)通信-帶外信號(hào),用于警告客戶機(jī)需要注意的系統(tǒng)狀態(tài)的變化。
SystemWeaver核是該接口的主設(shè)備,(這里以及以后假設(shè))該接口被典型地實(shí)現(xiàn)為中斷。
-數(shù)據(jù)路徑,客戶機(jī)可以通過其詢問SystemWeaver??蛻魴C(jī)是該接口的主設(shè)備,該接口可被實(shí)現(xiàn)為總線、雙工串行接口或者任何其他雙向的實(shí)現(xiàn)。
在引導(dǎo)過程中必須初始化SystemWeaver核。通常將會(huì)指派一個(gè)客戶機(jī)代表系統(tǒng)的其他部分作為引導(dǎo)主設(shè)備并對(duì)SystemWeaver及其關(guān)聯(lián)存儲(chǔ)器進(jìn)行初始化。
SystemWeaver客戶機(jī)中介在經(jīng)典的構(gòu)造中,每個(gè)客戶機(jī)具有單獨(dú)的客戶機(jī)中介,然而更保守的實(shí)現(xiàn)可以在多個(gè)客戶機(jī)之上聚合客戶機(jī)中介??梢砸杂布蜍浖韺?shí)現(xiàn)客戶機(jī)中介。圖3示出了軟件客戶機(jī)中介的主要要素-SystemWeaver HAL實(shí)現(xiàn)SystemWeaver核的寄存器接口所需的命令格式化。
-SystemWeaver API使應(yīng)用能夠以基于任務(wù)的抽象概念對(duì)SystemWeaver核進(jìn)行調(diào)用。
-用戶線程是使用SystemWeaver任務(wù)管理能力的應(yīng)用線程。在任何時(shí)刻,各個(gè)單獨(dú)的客戶機(jī)僅僅直接管理一個(gè)用戶線程。
-客戶機(jī)中介對(duì)帶外信號(hào)業(yè)務(wù)(通常中斷業(yè)務(wù))進(jìn)行處理。處理資源實(shí)例內(nèi)由客戶機(jī)中介管理的環(huán)境主要確保通過任務(wù)切換和搶占而保持完整性。通常,客戶機(jī)中介包含架構(gòu)不可知的部分以及指令集架構(gòu)特定部分。
-空閑代理執(zhí)行管理任務(wù),該管理任務(wù)處理個(gè)體處理資源實(shí)例或宏架構(gòu)的斷電(power-down)模式。
圖4示出了運(yùn)轉(zhuǎn)中的SystemWeaver的狀態(tài)圖??蛻魴C(jī)中介執(zhí)行兩個(gè)主要功能-對(duì)在其中執(zhí)行處理資源實(shí)例的“環(huán)境”(對(duì)于經(jīng)典處理器,環(huán)境可包含處理器棧空間和內(nèi)容、寄存器值、程序計(jì)數(shù)器等)的管理(在適當(dāng)時(shí)間分配、存儲(chǔ)和恢復(fù))。存在兩種類型的環(huán)境用戶或任務(wù)環(huán)境,其是其中執(zhí)行用戶任務(wù)的環(huán)境;和處理實(shí)例特定環(huán)境,其是專門用于客戶機(jī)中介管理操作的環(huán)境。
-對(duì)操作模式的管理(在經(jīng)典處理器中,用戶(正常)和超級(jí)用戶(有特權(quán))模式可用,其定義了訪問特定關(guān)鍵系統(tǒng)資源的權(quán)限,例如,與超級(jí)用戶模式任務(wù)不同,將不允許用戶模式任務(wù)訪問會(huì)負(fù)面影響共享處理資源的其他用戶模式任務(wù)的資源)。
以下描述針對(duì)的是通用處理器,但是對(duì)于所有客戶機(jī)類型存在類似性。
-“空閑”狀態(tài)。在空閑狀態(tài)期間,用戶定義的算法可以利用由端處理資源實(shí)例(例如,時(shí)鐘選通或其他低功率狀態(tài))或整個(gè)系統(tǒng)架構(gòu)(例如,時(shí)鐘選通、或者降低或消除向特定處理資源實(shí)例提供的電力)使其可用的斷電模式。當(dāng)在該狀態(tài)中時(shí),處理資源實(shí)例可以在特權(quán)模式下工作并將使用處理資源特定環(huán)境。
要注意,SystemWeaver服務(wù)器沒有指示客戶機(jī)進(jìn)入空閑狀態(tài),客戶機(jī)之所以這樣做是由于沒有調(diào)度的任務(wù)。
每個(gè)客戶機(jī)保持在“空閑”狀態(tài)中,直到來自SystemWeaver服務(wù)器的帶外信號(hào)(通常為中斷)指示其進(jìn)行響應(yīng)。
-“客戶機(jī)中介”狀態(tài)??蛻魴C(jī)中介狀態(tài)管理用戶任務(wù)和空閑任務(wù)的執(zhí)行環(huán)境。當(dāng)在“客戶機(jī)中介”狀態(tài)中時(shí),客戶機(jī)中介保存已完成執(zhí)行、被搶占或已阻塞的任何任務(wù)的環(huán)境,并為下一執(zhí)行的任務(wù)恢復(fù)或創(chuàng)建環(huán)境(在空閑狀態(tài)的情況下,其是處理資源實(shí)例特定環(huán)境)。當(dāng)在該狀態(tài)中時(shí),處理資源實(shí)例可以在特權(quán)模式下工作。有時(shí),客戶機(jī)中介可以在處理資源特定環(huán)境或者用戶或任務(wù)環(huán)境中工作。
由于來自SystemWeaver服務(wù)器的帶外信號(hào)(從“用戶”或“空閑”狀態(tài)轉(zhuǎn)變到“客戶機(jī)中介”狀態(tài))或者由于使執(zhí)行中任務(wù)被阻塞的SystemWeaver API調(diào)用(例如由于嘗試鎖住信號(hào)機(jī)(semaphore)失敗而引起從“SyWAPI”狀態(tài)轉(zhuǎn)變到“客戶機(jī)中介”狀態(tài))而進(jìn)入“客戶機(jī)中介”狀態(tài)。
當(dāng)完成了處理時(shí),不用任何其他的外部信令發(fā)送,客戶機(jī)中介可以從“客戶機(jī)中介狀態(tài)”轉(zhuǎn)變到“空閑”狀態(tài)(如果對(duì)于該處理資源實(shí)例不存在未完結(jié)任務(wù))或者轉(zhuǎn)變到“用戶”狀態(tài)(如果對(duì)于該處理資源實(shí)例存在適任任務(wù))。
-“用戶”狀態(tài)。當(dāng)在“用戶”狀態(tài)中時(shí),客戶機(jī)中介執(zhí)行用戶應(yīng)用代碼。在該狀態(tài)中,處理資源實(shí)例通常將在“用戶”或“正?!蹦J较鹿ぷ?。“用戶”狀態(tài)將完全在用戶或任務(wù)環(huán)境中運(yùn)轉(zhuǎn)。
“用戶”狀態(tài)可以從“客戶機(jī)中介”狀態(tài)進(jìn)入(由于開始或繼續(xù)執(zhí)行用戶任務(wù)而引起)或者從SyWAPI狀態(tài)進(jìn)入(由于從SystemWeaver服務(wù)器API調(diào)用返回而引起)。
由于任務(wù)完成或搶占(接收到從SystemWeaver服務(wù)器發(fā)送的帶外信號(hào)),客戶機(jī)中介會(huì)從“用戶”狀態(tài)轉(zhuǎn)變到“客戶機(jī)中介”狀態(tài)。由于對(duì)SystemWeaver服務(wù)器API的調(diào)用,客戶機(jī)中介會(huì)從“用戶”狀態(tài)轉(zhuǎn)變到SyWAPI狀態(tài)。
-“SyWAPI”狀態(tài)。在用戶任務(wù)需要與SystemWeaver核進(jìn)行交互的情況下,用戶任務(wù)通過使客戶機(jī)中介狀態(tài)變?yōu)椤癝yWAPI”的SystemWeaver API來這樣做。當(dāng)在該狀態(tài)中時(shí),處理資源實(shí)例可以在特權(quán)模式下工作。“SyWAPI”狀態(tài)將完全在用戶或任務(wù)環(huán)境中運(yùn)轉(zhuǎn)。
在對(duì)SystemWeaver API進(jìn)行調(diào)用之后進(jìn)入“SyWAPI”狀態(tài)。對(duì)于非阻塞調(diào)用,客戶機(jī)中介將從“SyWAPI”狀態(tài)返回到“用戶”狀態(tài),然而,某些訪問(例如與信號(hào)機(jī)相關(guān)聯(lián)的訪問)會(huì)使用戶任務(wù)阻塞(阻塞的任務(wù)必須等待直到某些共享系統(tǒng)資源變?yōu)榭捎脼橹?。在此情況下,客戶機(jī)中介轉(zhuǎn)變到“客戶機(jī)中介”狀態(tài)。
概念下面的部分討論理解SystemWeaver調(diào)度器的操作所需的概念。
SystemWeaver存儲(chǔ)器元件SystemWeaver需要附加的緊密耦合存儲(chǔ)器,使用該存儲(chǔ)器來存儲(chǔ)調(diào)度策略使得在整個(gè)系統(tǒng)開發(fā)過程中能夠進(jìn)行全面的調(diào)度修改以及能夠調(diào)整靈活性。SystemWeaver存儲(chǔ)器被分為多個(gè)SystemWeaver存儲(chǔ)器元件(WME)。使用WME來表示下面討論的任務(wù)描述符和調(diào)度描述符。
任務(wù)描述符任務(wù)描述符是SystemWeaver架構(gòu)的關(guān)鍵“流通單位”。它們表示根據(jù)在調(diào)度層級(jí)內(nèi)配置的規(guī)則而競(jìng)爭(zhēng)訪問處理資源實(shí)例的工作單位。任務(wù)描述符包含-對(duì)任務(wù)控制塊的引用,任務(wù)控制塊進(jìn)而包含對(duì)要執(zhí)行的任務(wù)的引用以及該任務(wù)必須在其上執(zhí)行的數(shù)據(jù)集。
-調(diào)度量度,定義任務(wù)的適任性。
-對(duì)于最初就會(huì)被阻塞的任務(wù),還可包括同步基準(zhǔn)和超時(shí)設(shè)定。對(duì)阻塞的任務(wù)行為的更詳細(xì)的描述超出了本文檔的范圍。
-對(duì)“入口節(jié)點(diǎn)”的引用,其定義了調(diào)度層級(jí)的(可能在同步后)必須添加任務(wù)描述符的部分。
調(diào)度錐和分配錐兩種類型的錐用于描述SystemWeaver的調(diào)度行為調(diào)度錐和分配錐。調(diào)度錐用于描述從很多“入口”點(diǎn)匯聚到單個(gè)聚合點(diǎn)(多對(duì)一映射)的調(diào)度器的層級(jí)。分配錐用于描述從單個(gè)聚合點(diǎn)分散到多個(gè)“派出(dispatch)”點(diǎn)(一對(duì)多映射)的調(diào)度器的層級(jí)。
調(diào)度錐調(diào)度錐(圖5中紅色所示)定義了“應(yīng)用判定節(jié)點(diǎn)”層級(jí),其由應(yīng)用的需要所驅(qū)動(dòng)(也如圖2的就緒狀態(tài)中的“應(yīng)用調(diào)度”所示)。調(diào)度錐是多對(duì)一映射,其定義規(guī)則,根據(jù)這些規(guī)則,多個(gè)類別的任務(wù)以及任務(wù)類別的多個(gè)實(shí)例競(jìng)爭(zhēng)系統(tǒng)資源。
分配錐分配錐(圖5中紫色所示)定義了“分配判定節(jié)點(diǎn)”層級(jí),其主要由下層硬件平臺(tái)的屬性所驅(qū)動(dòng)(也如圖2的就緒狀態(tài)中的“分配調(diào)度”所示)。分配錐定義規(guī)則,根據(jù)這些規(guī)則,在可用且適當(dāng)?shù)奶幚碣Y源之間分配最適任的候選調(diào)度錐。
主要調(diào)度節(jié)點(diǎn)存在三種用于描述調(diào)度配置的主要節(jié)點(diǎn)入口節(jié)點(diǎn)、分配節(jié)點(diǎn)和派出節(jié)點(diǎn)。這些主要節(jié)點(diǎn)覆蓋在下面的次要節(jié)點(diǎn)結(jié)構(gòu)上,這更貼切地反映了調(diào)度器的詳細(xì)實(shí)現(xiàn)。
入口節(jié)點(diǎn)入口節(jié)點(diǎn)定義了新任務(wù)排隊(duì)的點(diǎn)。通常,入口節(jié)點(diǎn)多對(duì)一地映射到分配節(jié)點(diǎn)上,作為調(diào)度錐的兩個(gè)極端。入口節(jié)點(diǎn)可以與特定類別的任務(wù)相關(guān)聯(lián)或者依照其他得自應(yīng)用的策略。一給定入口節(jié)點(diǎn)僅可映射到單個(gè)分配節(jié)點(diǎn)上。
分配節(jié)點(diǎn)分配節(jié)點(diǎn)定義調(diào)度錐和分配錐之間的勾畫(delineation)。分配節(jié)點(diǎn)通常代表一類處理資源。調(diào)度錐通常將一個(gè)或更多個(gè)入口節(jié)點(diǎn)映射到單個(gè)分配節(jié)點(diǎn)上,分配錐通常將單個(gè)分配節(jié)點(diǎn)映射到多個(gè)派出節(jié)點(diǎn)上,從而最終映射到處理資源實(shí)例。
派出節(jié)點(diǎn)派出節(jié)點(diǎn)定義與個(gè)體處理資源實(shí)例相關(guān)聯(lián)的出口點(diǎn)。派出節(jié)點(diǎn)通常與存在于硬件平臺(tái)內(nèi)的IP核一對(duì)一地映射(盡管可以向硬件多線程處理器核分配多個(gè)派出隊(duì)列)。多個(gè)分配錐可映射到個(gè)體派出節(jié)點(diǎn)上。
次要調(diào)度節(jié)點(diǎn)定義了兩種類型的判定節(jié)點(diǎn)應(yīng)用判定節(jié)點(diǎn)和分配判定節(jié)點(diǎn)。雖然應(yīng)用判定節(jié)點(diǎn)和分配判定節(jié)點(diǎn)直接映射到調(diào)度層上,但是它們沒有窮盡地定義調(diào)度器實(shí)現(xiàn)內(nèi)的下層的數(shù)量或類型。
應(yīng)用判定節(jié)點(diǎn)應(yīng)用判定節(jié)點(diǎn)定義調(diào)度錐內(nèi)的中間調(diào)度或聚合點(diǎn)。每個(gè)應(yīng)用判定節(jié)點(diǎn)定義一規(guī)則,可以根據(jù)該規(guī)則選擇一組最適任的候選項(xiàng)。
分配判定節(jié)點(diǎn)在多個(gè)分配節(jié)點(diǎn)映射到單個(gè)派出節(jié)點(diǎn)的情況下,要求分配判定節(jié)點(diǎn)設(shè)置這樣的策略,該策略確定可以訪問處理資源實(shí)例的分配錐。
調(diào)度配置就緒狀態(tài)結(jié)構(gòu)(圖2)包含準(zhǔn)備好執(zhí)行的線程。整個(gè)就緒狀態(tài)結(jié)構(gòu)可包括許多調(diào)度錐和分配錐。這些線程是用獨(dú)立的線程原語(yǔ)(primitive)創(chuàng)建的(即,這些線程是在就緒狀態(tài)中創(chuàng)建的),或者這些線程接收到它們所依賴的同步原語(yǔ)或超時(shí)設(shè)定。經(jīng)同步的線程是先前從阻塞狀態(tài)轉(zhuǎn)變的。
就緒狀態(tài)結(jié)構(gòu)可包含調(diào)度器節(jié)點(diǎn)描述符和獨(dú)立的線程描述符。雖然在運(yùn)行期間允許線程描述符及其相關(guān)聯(lián)的動(dòng)態(tài)調(diào)度器層描述符來來往往,但是主要在系統(tǒng)初始化期間定義該結(jié)構(gòu)。
就緒狀態(tài)結(jié)構(gòu)使得可將線程調(diào)度到處理節(jié)點(diǎn)池或一特定處理節(jié)點(diǎn)。這使得能夠?qū)崿F(xiàn)負(fù)載平衡或跨多個(gè)兼容處理資源的其他分配行為,同時(shí)保持在有特定能力的處理資源(例如硬件加速器或IO裝置)處發(fā)現(xiàn)特定任務(wù)的能力。
調(diào)度層是用于實(shí)現(xiàn)構(gòu)成就緒狀態(tài)結(jié)構(gòu)的主要和次要調(diào)度節(jié)點(diǎn)的原語(yǔ)資源。調(diào)度層可具有與其他調(diào)度層和任務(wù)描述符的父、子或同輩關(guān)系。
圖6示出了展示父子關(guān)系的調(diào)度器層級(jí)圖。在該示例中,y是a、b和c的父親。y是x和z的同輩。父親僅可是調(diào)度層,而孩子可以是調(diào)度層或任務(wù)描述符。一給定同輩組(例如a、b和c)可包括混合的任務(wù)描述符和調(diào)度層。進(jìn)而,所有調(diào)度層都有父親(派出節(jié)點(diǎn)是不定義父親的唯一描述符)。
在運(yùn)行期間,父親層可根據(jù)用戶定義的策略從最適任的孩子繼承“量度”(優(yōu)先級(jí)等)。在較深嵌入的調(diào)度策略需要從正被比較的調(diào)度分支了解適任候選項(xiàng)的情況下可以使用該特性(在下面的量度傳播章節(jié)中詳細(xì)說明了該主題)。
下面的章節(jié)描述任何SystemWeaver調(diào)度層級(jí)的組成部分。
基本調(diào)度器層調(diào)度器層定義了用于調(diào)度線程描述符的層級(jí)。每個(gè)調(diào)度器層通常定義調(diào)度算法、用于確定調(diào)度判定的某些量度、用于定義如何將這些量度從孩子傳播到父親的繼承策略、以及可以為其他調(diào)度器層或線程描述符的孩子元素的列表。存在三種類型的調(diào)度器層描述符根、靜態(tài)和動(dòng)態(tài)(其中動(dòng)態(tài)層是一特殊類型的靜態(tài)調(diào)度層)。圖7示出了一示例調(diào)度錐的實(shí)現(xiàn)。圖36示出了從圖7開始的所有調(diào)度圖的圖參考圖例。
調(diào)度器根描述符調(diào)度器根描述符與派出隊(duì)列的一對(duì)一映射。調(diào)度器根描述符表示就緒狀態(tài)結(jié)構(gòu)中的最終節(jié)點(diǎn)。根描述符量度總是包含根據(jù)定義的繼承策略從就緒狀態(tài)結(jié)構(gòu)得出的量度的副本。
調(diào)度器根描述符是在系統(tǒng)初始化期間配置的,并且永久存在。
靜態(tài)調(diào)度器描述符在調(diào)度層級(jí)中,調(diào)度器靜態(tài)描述符存在于根節(jié)點(diǎn)之下。靜態(tài)調(diào)度器描述符的父親可以是其他靜態(tài)調(diào)度器描述符或根描述符。調(diào)度器靜態(tài)描述符根據(jù)其父親定義的調(diào)度器算法和其自身的調(diào)度器量度,與兄弟節(jié)點(diǎn)競(jìng)爭(zhēng)。
調(diào)度器靜態(tài)描述符是在系統(tǒng)初始化期間配置的,并且永久存在。在操作期間,SystemWeaver根據(jù)選定的調(diào)度以及量度傳播算法來保持調(diào)度器量度。
動(dòng)態(tài)調(diào)度器描述符在調(diào)度層級(jí)中,調(diào)度器動(dòng)態(tài)描述符存在于根節(jié)點(diǎn)之下,并且可選地存在于靜態(tài)節(jié)點(diǎn)之下。動(dòng)態(tài)調(diào)度器描述符的父親可以是靜態(tài)調(diào)度器描述符或根描述符。動(dòng)態(tài)調(diào)度器描述符根據(jù)其父親定義的調(diào)度器算法和其自身的調(diào)度器量度,與兄弟節(jié)點(diǎn)競(jìng)爭(zhēng)。
動(dòng)態(tài)調(diào)度器描述符可以在任何時(shí)間配置。這使得與純靜態(tài)可能提供的相比,系統(tǒng)能夠支持高得多的數(shù)量的調(diào)度層。SystemWeaver是利用這樣的可能性來實(shí)現(xiàn)此點(diǎn)的,即,雖然在總體時(shí)間上使用大量且不同的線程和動(dòng)態(tài)調(diào)度器層,但是在有限時(shí)段內(nèi)的瞬時(shí)需求較小。例如,在具有支持最大4k動(dòng)態(tài)元素(線程和動(dòng)態(tài)調(diào)度器描述符)的附加存儲(chǔ)器的網(wǎng)絡(luò)系統(tǒng)中,在任意時(shí)刻可以支持16k個(gè)連接,但是在處理器中僅有來自整個(gè)連接空間的一小部分的數(shù)據(jù)單元會(huì)激活。這種靈活性是以性能小幅下降為代價(jià)而實(shí)現(xiàn)的,因?yàn)?,如果不存在?dòng)態(tài)調(diào)度器描述符,則必須在添加子線程描述符之前創(chuàng)建它。
在操作期間,SystemWeaver根據(jù)選定的調(diào)度算法保持調(diào)度器量度。在某些情況下,SystemWeaver將把動(dòng)態(tài)調(diào)度器描述符釋放回WME空閑列表。
處理器資源池處理器資源池使得能夠?qū)⑻囟ㄌ幚碣Y源的實(shí)例聚合到單個(gè)分配節(jié)點(diǎn)。然后,該分配節(jié)點(diǎn)可提供跨處理資源池的個(gè)體成員的負(fù)載平衡、智能搶占和功率管理。
圖8示出了典型的處理資源池的配置。三種新定義的Weaver存儲(chǔ)器元件支持處理器池的配置結(jié)構(gòu)池附加節(jié)點(diǎn)池附加節(jié)點(diǎn)(PAN)用于將調(diào)度器根層附加到處理資源池根層。PAN必須存在于調(diào)度器根層內(nèi)(即,其父親必須是調(diào)度器根節(jié)點(diǎn))。在操作期間,用池根節(jié)點(diǎn)(PRN)的量度的副本自動(dòng)更新PAN量度,PRN的量度是依次從調(diào)度錐繼承的。
沒有使用在PAN內(nèi)定義的調(diào)度操作符。
池靜態(tài)節(jié)點(diǎn)池靜態(tài)節(jié)點(diǎn)(PSN)用于將調(diào)度器根層附加到處理資源池根層。PSN存在于池根層內(nèi)(即,其父親必須是PAN)并自動(dòng)保持派出節(jié)點(diǎn)(即,當(dāng)前在執(zhí)行的線程)的量度的副本。
必須將給定池的PSN內(nèi)的調(diào)度器操作符全部設(shè)置為相同的算法,定義用于選擇要搶占的適當(dāng)處理資源實(shí)例的策略。
池根節(jié)點(diǎn)對(duì)于每個(gè)處理資源池,存在單個(gè)池根節(jié)點(diǎn)(PRN)。池根節(jié)點(diǎn)定義了處理資源池的分配節(jié)點(diǎn)。PRN內(nèi)的量度反映了與該分配節(jié)點(diǎn)相關(guān)聯(lián)的調(diào)度錐內(nèi)擁有的最適任線程。必須將PRN父指針設(shè)置為指向池靜態(tài)節(jié)點(diǎn)之一。
與正常情況一樣,應(yīng)該根據(jù)調(diào)度錐的相鄰層的需要來設(shè)置調(diào)度器算法。
動(dòng)態(tài)調(diào)度器配置SystemWeaver支持在運(yùn)行時(shí)創(chuàng)建和刪除調(diào)度節(jié)點(diǎn)以及提供在無(wú)損失或不打亂順序的情況下將任務(wù)類別從一個(gè)入口節(jié)點(diǎn)遷移到另一個(gè)入口節(jié)點(diǎn)的能力。當(dāng)討論動(dòng)態(tài)調(diào)度器配置時(shí)必須引入兩個(gè)另外的概念休眠調(diào)度層和標(biāo)記線程。
-休眠調(diào)度層存在于層級(jí)內(nèi)并且可以接受推送操作(即,可以累積子條目),但是不適任于調(diào)度,因而從不彈出。
-標(biāo)記線程僅當(dāng)其為依賴于調(diào)度層級(jí)的特定部分的最后一個(gè)線程時(shí)才被調(diào)度。依賴于調(diào)度層級(jí)的一部分的線程數(shù)包括就緒線程數(shù)和在其變?yōu)榫途w時(shí)會(huì)使用調(diào)度層級(jí)的該部分的阻塞線程數(shù)。標(biāo)記線程可以像任何其他線程一樣帶有任務(wù)引用,并且通常用于完成對(duì)調(diào)度層級(jí)的一部分和另一部分之間的轉(zhuǎn)變操作進(jìn)行的管理。
下面的章節(jié)詳細(xì)描述來自層級(jí)的一部分的任務(wù)流的轉(zhuǎn)變的示例序列。要注意,其是調(diào)度層級(jí)的一部分的刪除的超集。
操作序列較高級(jí)別的軟件有責(zé)任確保遵守適當(dāng)?shù)牟僮黜樞?。無(wú)法遵守該順序會(huì)導(dǎo)致意想不到的行為,具體地,一定不能將新線程引入已插入了標(biāo)記線程的調(diào)度層級(jí)的一部分。
在該示例序列中,假設(shè)任務(wù)流tstream從調(diào)度層級(jí)h1轉(zhuǎn)變到新的調(diào)度層級(jí)h2。
-創(chuàng)建休眠調(diào)度器層級(jí)h2。
-將tstream上的所有新任務(wù)描述符分配到h2。
-將標(biāo)記線程插入h1中。
-等待標(biāo)記線程的出現(xiàn)。
-喚醒休眠層級(jí)h2。
調(diào)度器分析、算法、操作符和操作數(shù)調(diào)度分析有許多形式(EDF、RMA等)并且通常為應(yīng)用特定或者至少為扇區(qū)(sector)特定。調(diào)度分析的結(jié)果是一組策略,其靜態(tài)或動(dòng)態(tài)地控制應(yīng)用的運(yùn)行時(shí)間部署。通過其獨(dú)特的宏架構(gòu),SystemWeaver在運(yùn)行時(shí)有效地執(zhí)行這些預(yù)定義的策略/算法。
調(diào)度算法SystemWeaver被設(shè)計(jì)為能夠在硅設(shè)計(jì)時(shí)定義專用算法而不破壞架構(gòu)或?qū)崿F(xiàn)。然而,缺省提供了很多算法-FIFO調(diào)度簡(jiǎn)單的先入先出隊(duì)列。
-優(yōu)先級(jí)調(diào)度最適任的候選項(xiàng)具有最高(升序優(yōu)先級(jí))或最低(降序優(yōu)先級(jí))的優(yōu)先級(jí)量度。
-輪轉(zhuǎn)當(dāng)從調(diào)度層級(jí)彈出一任務(wù)時(shí),將調(diào)度判定更新為下一同等判定。要注意,輪轉(zhuǎn)不是在調(diào)度層級(jí)的“最左”極端的相關(guān)調(diào)度策略。
-加權(quán)公平隊(duì)列一種復(fù)雜的調(diào)度器,其中,根據(jù)所分配的權(quán)值和負(fù)載的某些測(cè)量值(即包的長(zhǎng)度)來選擇適任候選項(xiàng)。
如果注意一下整個(gè)調(diào)度器層級(jí),就可創(chuàng)建調(diào)度器算法的復(fù)雜組合,以在應(yīng)用系統(tǒng)中提供精密的通信量和任務(wù)管理能力。
操作符調(diào)度算法被進(jìn)一步分解為單獨(dú)的調(diào)度操作符和量度操作符,都在父節(jié)點(diǎn)中定義-調(diào)度操作符定義了使用存儲(chǔ)在子節(jié)點(diǎn)中的操作數(shù)來確定最適任候選項(xiàng)的方式。調(diào)度操作符不修改子節(jié)點(diǎn)中的操作數(shù)。
-量度操作符定義了將最適任孩子的操作數(shù)傳播為父親的操作數(shù)的方式。傳播操作符可以是空(對(duì)父親不更新)、復(fù)制(覆寫父親的操作數(shù))、或者包括針對(duì)一些和所有子操作數(shù)和父操作數(shù)的數(shù)學(xué)函數(shù)。在所有的情況下,子操作數(shù)都不改變。
調(diào)度操作符和量度操作符本來就實(shí)現(xiàn)在SystemWeaver的調(diào)度器硬件中。調(diào)度操作符和量度操作符的組合通常用來定義給定的調(diào)度器算法。調(diào)度算法一般意味著對(duì)于推送事件(其中一新任務(wù)被推送進(jìn)調(diào)度器層級(jí))下的行為與彈出事件(其中從調(diào)度器層級(jí)彈出一任務(wù))下的不同。例如,考慮FIFO調(diào)度器,當(dāng)將一新任務(wù)推送進(jìn)非空的FIFO調(diào)度級(jí)時(shí),沒有執(zhí)行調(diào)度更新,而當(dāng)從FIFO調(diào)度級(jí)彈出一項(xiàng)目時(shí),必須更新調(diào)度器。
調(diào)度操作符調(diào)度操作符被設(shè)計(jì)成可擴(kuò)展的,但是定義了缺省操作符的選項(xiàng)。調(diào)度操作符通常是比較操作符,因而結(jié)果總是布爾值(Boolean)。在下面的表中,M根據(jù)以下方案表示調(diào)度層的成員或調(diào)度層描述符自身中的兩個(gè)量度之一-Mcurrentn是指屬于當(dāng)前最適任候選項(xiàng)的那些量度-Mcandidaten是指屬于這樣的候選項(xiàng)的那些量度,在調(diào)度更新的過程中當(dāng)前描述符與所述候選項(xiàng)進(jìn)行了比較-Mtiern是指屬于附有當(dāng)前項(xiàng)和候選項(xiàng)的調(diào)度器層描述符的那些量度
表1調(diào)度操作符復(fù)合調(diào)度操作符還可使用復(fù)合調(diào)度操作符,其是表1中的調(diào)度操作符的組合。例如需要更新=(Mcurrent0>Mcandidate0)&&(Mcurrent1<Mcandidate1)其中,所涉及的參數(shù)可以利用父描述符和子描述符中的量度。可以將這些復(fù)合操作符用于傳統(tǒng)調(diào)度層和池分配層兩者中。
對(duì)于進(jìn)一步的信息和示例,請(qǐng)參照下面的調(diào)度序列圖章節(jié)。
量度操作符量度操作符在本質(zhì)上是算術(shù)操作符。與調(diào)度操作符相同,量度操作符被設(shè)計(jì)成可擴(kuò)展的,但是具有一組缺省操作符,見表2。就復(fù)雜性而言,量度操作符包括從空或簡(jiǎn)單的復(fù)制操作一直到復(fù)雜的乘法累積操作。
表2量度操作符操作數(shù)調(diào)度操作數(shù)(或量度)分為兩組-局部量度與處理資源實(shí)例、調(diào)度器層以及線程描述符相關(guān)聯(lián)。對(duì)局部量度進(jìn)行操作會(huì)自動(dòng)引起重新調(diào)度事件。
-全局量度是可選的,并且通常與系統(tǒng)資源狀態(tài)(諸如總線繁忙或空閑存儲(chǔ)器的某些啟發(fā)(heuristic))相關(guān)聯(lián)。
一給定調(diào)度算法可僅使用兩個(gè)量度,其中的一個(gè)必須是局部的。通過Metric1IsGlobal標(biāo)志來確定第二量度的類型-當(dāng)Metric1IsGlobal被重置時(shí),量度1是局部的,并將在調(diào)度操作中被按原意(literal)使用。
-當(dāng)設(shè)置了Metric1IsGlobal時(shí),量度1是對(duì)全局量度端口陣列的索引。
局部量度任務(wù)描述符和調(diào)度層描述符都包含兩個(gè)32位操作數(shù)或者調(diào)度量度。這些操作數(shù)在調(diào)度操作期間被它們各自的父親使用并且可以在調(diào)度操作期間被轉(zhuǎn)換和/或傳播成父親的操作數(shù),以用于該層級(jí)中隨后更高級(jí)別的調(diào)度。
圖9示出了存在于任務(wù)描述符內(nèi)的調(diào)度量度。在任務(wù)描述符內(nèi),量度0通常用于表示任務(wù)的優(yōu)先級(jí)。保留該量度的最低有效字節(jié)以供在SystemWeaver硬件和客戶機(jī)軟件內(nèi)的內(nèi)部使用。對(duì)于調(diào)度器層量度,沒有這種限制。
全局量度全局量度在本質(zhì)上是被動(dòng)的,全局量度值的改變不會(huì)引起針對(duì)所有潛在受影響的調(diào)度資源的重新調(diào)度事件。在這樣的時(shí)刻(由于某些其他系統(tǒng)事件而調(diào)度了依賴的調(diào)度資源時(shí))詢問全局量度。雖然SystemWeaver架構(gòu)沒有對(duì)全局度量的使用強(qiáng)加限制,但是它們可用于系統(tǒng)啟發(fā)(總線利用、在一時(shí)間窗口中的存儲(chǔ)器飽和度(fill)等),因此變化率相對(duì)較低。也可應(yīng)用過濾器以使數(shù)據(jù)平均。
調(diào)度層級(jí)配置細(xì)節(jié)在以下章節(jié)提及的所有配置圖都使用如圖36所示的共同格式。
圖10示出了單個(gè)處理器的最基本的配置,其示出了這樣的配置單個(gè)處理資源實(shí)例(單個(gè)派出節(jié)點(diǎn))及其強(qiáng)制調(diào)度根節(jié)點(diǎn)。在該最簡(jiǎn)單的情況下,因?yàn)閮H有單個(gè)處理器,所以調(diào)度器錐包括單個(gè)FIFO級(jí)并且分配級(jí)為空。因此,調(diào)度器根節(jié)點(diǎn)既是入口節(jié)點(diǎn)又是分配節(jié)點(diǎn)。
要注意,調(diào)度器節(jié)點(diǎn)實(shí)現(xiàn)上的箭頭是從右向左(父到子)地示出的,這與任務(wù)的“流”相反,任務(wù)“流”從孩子流向處理資源實(shí)例。
調(diào)度器是以模塊的形式實(shí)現(xiàn)的并配置在易失性存儲(chǔ)器中,這使得可以根據(jù)不同策略的連續(xù)的調(diào)度器層來構(gòu)建非常精密的調(diào)度器層級(jí),并且可以在整個(gè)開發(fā)過程中對(duì)其進(jìn)行調(diào)整和裁減。然而,可能有無(wú)效配置,必須特別當(dāng)心以確保適當(dāng)?shù)牧慷葘?duì)于深深嵌套的調(diào)度器層可用。
層內(nèi)結(jié)構(gòu)調(diào)度層按到達(dá)的順序或者根據(jù)缺省的FIFO排隊(duì)策略來存儲(chǔ)條目。稍后描述將所定義的調(diào)度策略覆蓋在該結(jié)構(gòu)上的方式。新節(jié)點(diǎn)(描述符)通過推送操作被添加到層內(nèi)結(jié)構(gòu),并由于彈出操作而被移除。調(diào)度操作不操作層內(nèi)鏈接。
圖11示出了單處理資源實(shí)例的更有代表性的調(diào)度結(jié)構(gòu)。在該示例中,從左側(cè)起,兩個(gè)FIFO級(jí)供給一個(gè)優(yōu)先級(jí)級(jí)。在層級(jí)的兩個(gè)級(jí)處存在三個(gè)調(diào)度層。要注意,調(diào)度層僅具有一個(gè)“出口”節(jié)點(diǎn)(在該圖的右側(cè)示出),但是潛在地具有許多入口節(jié)點(diǎn)(在該圖的左側(cè)示出)。
圖12示出了FIFO調(diào)度層中的一層的詳細(xì)圖。該圖示出了一組指針,該組指針保持該層上所有同輩之間的雙鏈表。
雙鏈表用于使該層的任意成員的移除(彈出)的性能最大化。
雖然該詳細(xì)圖僅示出了任務(wù)描述符,但是該結(jié)構(gòu)可以同等地應(yīng)用于包含線程和調(diào)度節(jié)點(diǎn)的任何混合的層。
同輩元素之間的層內(nèi)鏈接僅在推送和彈出操作期間被操作。
層間結(jié)構(gòu)除了池根層,圖12示出了層間鏈路的結(jié)構(gòu)。各層具有一父節(jié)點(diǎn),該父節(jié)點(diǎn)必須是調(diào)度器根節(jié)點(diǎn)或者是調(diào)度節(jié)點(diǎn)。這些節(jié)點(diǎn)存儲(chǔ)指向該層的最適任成員的指針。在接收到調(diào)度事件時(shí),根據(jù)在父節(jié)點(diǎn)和子節(jié)點(diǎn)內(nèi)分別定義的調(diào)度策略和量度來更新這些子指針。
每個(gè)子節(jié)點(diǎn)還必須引用其父親。
池根層結(jié)構(gòu)池根層結(jié)構(gòu)是一特殊情況,在該情況下層具有單個(gè)入口節(jié)點(diǎn)和很多出口節(jié)點(diǎn)。該入口節(jié)點(diǎn)是調(diào)度錐向其匯聚的點(diǎn)(如圖2中的就緒隊(duì)列結(jié)構(gòu)的“應(yīng)用調(diào)度”部分所示),也被稱為“分配節(jié)點(diǎn)”?!俺隹诠?jié)點(diǎn)”將池根層鏈接到其上可能分配有任務(wù)的處理資源實(shí)例的“分配調(diào)度”結(jié)構(gòu)。圖13示出了包含兩個(gè)處理資源實(shí)例的池的此類型的結(jié)構(gòu)的表示。
每個(gè)池分配層必須包含池根節(jié)點(diǎn)(PRN)以及一個(gè)或更多個(gè)池靜態(tài)節(jié)點(diǎn)(PSN),不允許其它節(jié)點(diǎn)類型。PRN包含對(duì)調(diào)度錐(存儲(chǔ)在HeadIndex字段內(nèi))的第一層的引用以及對(duì)考慮分配的第一PSN條目的引用。必須將共同的分配和量度更新策略分別存儲(chǔ)在每個(gè)PSN的調(diào)度器和量度的推送和彈出操作符內(nèi)。
每個(gè)PSN必須將PRN作為其孩子引用(使用HeadIndex字段)。
池靜態(tài)節(jié)點(diǎn)的父親必須是池附加節(jié)點(diǎn)(PAN)。PAN和PSN必須具有一對(duì)一的映射。然而,各處理資源實(shí)例可具有與其所參與的各個(gè)分配池相關(guān)聯(lián)的多個(gè)PAN。圖14示出了處理資源參與兩個(gè)池的情況下的示例結(jié)構(gòu)。對(duì)其中給定處理資源可以作為成員的池的數(shù)量沒有進(jìn)行限制。此外,任何池可以和任意數(shù)量的其他池共享任意數(shù)量的作為其組成部分的處理資源。
在調(diào)度根節(jié)點(diǎn)內(nèi),存在與處理資源實(shí)例所參與的各個(gè)分配錐相關(guān)聯(lián)的兩個(gè)PAN。此外,存在一調(diào)度節(jié)點(diǎn),其提供對(duì)所需處理資源實(shí)例的特定訪問。
在池分配層的各PSN內(nèi)定義的分配策略識(shí)別選擇用于執(zhí)行給定任務(wù)的最適任處理資源實(shí)例的方式。例如,該策略可以是優(yōu)先級(jí)之一,其中,在來自相關(guān)聯(lián)的調(diào)度錐的高優(yōu)先級(jí)任務(wù)到達(dá)時(shí),選擇當(dāng)前在執(zhí)行的最低優(yōu)先級(jí)任務(wù)的處理資源實(shí)例用于搶占。
圖15示出了包括五個(gè)處理資源實(shí)例和兩個(gè)分配池的配置。要注意,PRI#3參與兩個(gè)池。
行為下面的章節(jié)描述SystemWeaver調(diào)度的行為。
一般原理下面的章節(jié)提供用于解釋SystemWeaver調(diào)度架構(gòu)的某些關(guān)鍵基礎(chǔ)原理的某些基本背景信息。
基于指針的隊(duì)列雖然在SystemWeaver內(nèi)存在多個(gè)潛在的排隊(duì)點(diǎn)(圖2中已詳細(xì)描述),但是這些點(diǎn)是僅使用指針而實(shí)現(xiàn)的。從未復(fù)制排隊(duì)的實(shí)體(即SystemWeaver存儲(chǔ)器元件(WME))。
基于事件的調(diào)度SystemWeaver僅當(dāng)系統(tǒng)狀態(tài)的某些改變要求更新調(diào)度判定時(shí)才這樣做。這些狀態(tài)的改變可被分為三個(gè)事件類別-“推送事件”,其中,系統(tǒng)狀態(tài)的改變使得將新線程描述符引入就緒狀態(tài)結(jié)構(gòu)(要注意,其可以是新線程描述符,或者可以是系統(tǒng)狀態(tài)的改變使其變?yōu)榫途w的線程的現(xiàn)存線程描述符)。
-“彈出事件”,其中,系統(tǒng)狀態(tài)的改變導(dǎo)致從就緒隊(duì)列結(jié)構(gòu)中移除線程描述符。
-“更新事件”,其中,調(diào)度參數(shù)已被修改,需要重新評(píng)估調(diào)度判定。
這些改變可以是-中斷(“推送事件”,因?yàn)榕c該中斷相關(guān)聯(lián)的阻塞線程移至就緒狀態(tài))。
-由執(zhí)行中任務(wù)創(chuàng)建的新任務(wù)到達(dá)(如果新任務(wù)不依賴于其他因素或事件,則其可以是推送事件,)-同步事件,例如信號(hào)機(jī)信號(hào)(假設(shè)有一阻塞的線程在等待該信號(hào),則其是“推送事件”,因?yàn)樵撟枞€程的描述符轉(zhuǎn)變到就緒狀態(tài))。
-任務(wù)的執(zhí)行“優(yōu)先級(jí)”的改變,即“更新事件”。
-處理資源實(shí)例內(nèi)的任務(wù)的消耗(從就緒轉(zhuǎn)變到執(zhí)行)(“彈出事件”)。
-任務(wù)的調(diào)度量度的修改(“更新事件”)。
-調(diào)度器層的調(diào)度算法或量度的修改(“更新事件”)。
-調(diào)度器層級(jí)自身的修改(“更新事件”)。
在系統(tǒng)處于穩(wěn)定狀態(tài)的情況下,SystemWeaver保持空閑。原則上,在最節(jié)能的方案中,這可以使SystemWeaver能夠在需要附加調(diào)度的事件到達(dá)之前斷電。要注意,改變?nèi)至慷炔粫?huì)引起重新調(diào)度事件。
“準(zhǔn)時(shí)(just in time)”調(diào)度僅將排隊(duì)到給定調(diào)度層的新條目與當(dāng)前最適任條目(由父HeadIndex識(shí)別)進(jìn)行比較。如果根據(jù)層調(diào)度策略,新條目比當(dāng)前的頭更為適任,則更新HeadIndex字段以引用該新條目??偸菍⑿聴l目放置在當(dāng)前鏈表結(jié)構(gòu)的后部。
如果調(diào)度策略是FIFO,則在新條目到達(dá)時(shí)從不更新HeadIndex指針,除非該隊(duì)列為空。因此,缺省行為(其中將新條目放置在隊(duì)列的后部)與FIFO算法相同。
該方案確保花費(fèi)最少的時(shí)間處理推送操作,這一般是作為調(diào)度性能中的等待時(shí)間而被遵守的。因此,彈出調(diào)度更為繁重,在最差情況下,必須針對(duì)每次彈出操作評(píng)估調(diào)度層的全部?jī)?nèi)容以更新調(diào)度判定。然而,在物理隊(duì)列結(jié)構(gòu)中總是使用自然的FIFO算法是可取的,這是因?yàn)閷?duì)調(diào)度算法的修改不需要將調(diào)度器層重新鏈接。此外,通常,彈出調(diào)度可與應(yīng)用的執(zhí)行并行地執(zhí)行,因而對(duì)整體系統(tǒng)性能具有較小的影響。
調(diào)度分析、策略和操作符存在許多對(duì)系統(tǒng)進(jìn)行分析以確保滿足實(shí)時(shí)絕限(deadline)的方法,其示例為EDF(最早絕限優(yōu)先)、RMS(速率單調(diào)調(diào)度)和各種其他隨機(jī)方法。這些方法趨向?yàn)閼?yīng)用特定的,并且可能在本質(zhì)上是私有的。然而,在所有情況下,這種調(diào)度分析的結(jié)果是一組調(diào)度策略(即,優(yōu)先級(jí)、FIFO、輪轉(zhuǎn)、加權(quán)公平隊(duì)列),必須在運(yùn)行時(shí)對(duì)其進(jìn)行有效的部署。SystemWeaver技術(shù)的目標(biāo)是在運(yùn)行時(shí)有效地執(zhí)行通過調(diào)度分析而識(shí)別的策略。對(duì)于SystemWeaver內(nèi)的部署,每個(gè)調(diào)度策略還要進(jìn)一步解碼為一組調(diào)度操作符。
每個(gè)調(diào)度器層具有兩個(gè)操作符,這兩個(gè)操作符用于確定由于推送至調(diào)度層(或從屬調(diào)度層)或者從調(diào)度層(或從屬調(diào)度層)彈出,如何更新調(diào)度判定。在某些情況下,調(diào)度操作符將需要操作數(shù),所述操作數(shù)存儲(chǔ)在調(diào)度器和任務(wù)描述符等的量度字段內(nèi)。
調(diào)度量度和量度傳播操作符調(diào)度量度存儲(chǔ)選定的調(diào)度算法可能需要的信息,其最基本的示例是優(yōu)先級(jí)。在某些情況下,有必要將量度從最適任候選項(xiàng)轉(zhuǎn)發(fā)到父節(jié)點(diǎn),以使該信息可以直接在隨后的調(diào)度判定中使用或者用作量度更新操作中的操作數(shù)。量度傳播操作符定義了針對(duì)推送和彈出的情形如何實(shí)現(xiàn)此點(diǎn)。
根據(jù)調(diào)度節(jié)點(diǎn)在層級(jí)內(nèi)的位置,量度字段還可反映當(dāng)前正在執(zhí)行的線程對(duì)給定處理資源的優(yōu)先級(jí)。在此情況下,使用量度字段來確定是否需要搶占(見下面的調(diào)度行為章節(jié))。
調(diào)度資源下面的章節(jié)描述用于在運(yùn)行時(shí)實(shí)現(xiàn)調(diào)度算法的各種資源。
層調(diào)度器層調(diào)度器層包括一個(gè)父親和多個(gè)孩子,該父親可以是調(diào)度器根節(jié)點(diǎn)、池根節(jié)點(diǎn)或基本調(diào)度節(jié)點(diǎn)(圖6)。孩子可以是基本調(diào)度節(jié)點(diǎn)、線程或任務(wù)描述符或池附加節(jié)點(diǎn)。通過使子節(jié)點(diǎn)能夠憑本身的權(quán)利而成為調(diào)度節(jié)點(diǎn)(即,其他調(diào)度器層的父節(jié)點(diǎn)),可以建立復(fù)雜的調(diào)度器層級(jí)。
池分配層池分配層可包含唯一的池根節(jié)點(diǎn)(僅一個(gè))以及多個(gè)池靜態(tài)節(jié)點(diǎn)。每個(gè)處理類別僅有一個(gè)池根節(jié)點(diǎn)。
派出隊(duì)列描述符-調(diào)度器操作符用于定義確定當(dāng)前在執(zhí)行的任務(wù)是否應(yīng)被搶占的調(diào)度策略。
-量度傳播操作符在派出隊(duì)列描述符中沒有量度傳播操作符。
-量度量度元素通常存儲(chǔ)當(dāng)前在執(zhí)行的線程的量度。
調(diào)度器和池根節(jié)點(diǎn)-調(diào)度器操作符用于確定調(diào)度錐的最適任候選項(xiàng)。
-量度傳播操作符其總是被設(shè)置為繼承調(diào)度錐的最適任候選項(xiàng)的量度。
-量度保持調(diào)度錐的當(dāng)前最適任候選項(xiàng)的量度。
調(diào)度器層元素-調(diào)度器操作符用于確定來自附加層的最適任孩子候選。
-量度傳播操作符用戶定義。根據(jù)后續(xù)調(diào)度級(jí)的需要進(jìn)行設(shè)置。
-量度用戶定義。根據(jù)后續(xù)調(diào)度級(jí)的需要進(jìn)行設(shè)置。要注意,某些量度傳播操作符會(huì)自動(dòng)更新這些字段。
池靜態(tài)節(jié)點(diǎn)-調(diào)度器操作符用于確定池分配層中用于搶占的最適任候選。
-量度傳播操作符用于確定執(zhí)行中的任務(wù)的量度的傳播。
-量度根據(jù)池分配算法的需要進(jìn)行設(shè)置。缺省地,所述量度將反映當(dāng)前在執(zhí)行的線程的量度,然而對(duì)于某些分配策略,可能需要靜態(tài)分配。
池附加節(jié)點(diǎn)-調(diào)度器操作符未使用。
-量度傳播操作符用于控制最適任任務(wù)量度的傳播。
-量度用于存儲(chǔ)附加到關(guān)聯(lián)池根節(jié)點(diǎn)的調(diào)度錐的最適任任務(wù)的量度。
線程元素-量度用于傳達(dá)與用于調(diào)度的任務(wù)的適任性直接相關(guān)的信息,或者根據(jù)所述量度,調(diào)度器可以計(jì)算出該適任性。
調(diào)度行為調(diào)度操作分為兩個(gè)子類別-標(biāo)準(zhǔn)層調(diào)度,其中,調(diào)度器層內(nèi)的一個(gè)或更多個(gè)條目競(jìng)爭(zhēng)成為層內(nèi)的最適任條目。
-池分配調(diào)度識(shí)別應(yīng)該中斷處理資源實(shí)例中的哪個(gè)選定實(shí)例。
除非接收到調(diào)度事件,否則不發(fā)生調(diào)度行為。
調(diào)度推送和彈出事件如前所述,系統(tǒng)狀態(tài)的改變會(huì)引起“推送事件”或“彈出事件”,這些事件引起重新調(diào)度的發(fā)生。所有調(diào)度操作都是工作守恒的(workconserving)。僅對(duì)調(diào)度層級(jí)中被給定事件確信無(wú)疑地影響到的部分進(jìn)行重新評(píng)估,稱這些部分存在于重新調(diào)度范圍內(nèi)。圖17示出了對(duì)基本調(diào)度層級(jí)上的事件的重新調(diào)度范圍,圖18示出了簡(jiǎn)單的兩個(gè)實(shí)例的處理資源池的重新調(diào)度范圍。
層調(diào)度層調(diào)度是SystemWeaver調(diào)度算法的最基本的構(gòu)建塊。調(diào)度事件可以引起可由用戶配置的調(diào)度層級(jí)所定義的連續(xù)的層調(diào)度操作。各個(gè)層調(diào)度操作的結(jié)果是更新了父調(diào)度器(調(diào)度節(jié)點(diǎn)或調(diào)度器根節(jié)點(diǎn))的HeadIndex指針。父調(diào)度器的量度還可以根據(jù)所定義的量度傳播算法進(jìn)行更新。
原則上,層調(diào)度在當(dāng)前HeadIndex處開始并對(duì)調(diào)度器層的成員進(jìn)行疊代(但是在實(shí)踐中,為了使等待時(shí)間最小,推送操作僅僅更新針對(duì)當(dāng)前頭指針的調(diào)度判定),根據(jù)以下內(nèi)容確立是否需要更新HeadIndex-事件,其可以是推送或彈出操作-與事件類型(推送或彈出)相關(guān)聯(lián)的調(diào)度算法-層成員的量度如果找到更適任的條目,則相應(yīng)地更新HeadIndex。觀察了幾種精練了調(diào)度操作的行為的特殊情況。在所有情況下,在調(diào)度操作中忽略休眠調(diào)度器層。
各個(gè)調(diào)度節(jié)點(diǎn)必須總是知曉存在于其子層級(jí)中的線程或任務(wù)描述符的數(shù)量,以確保保持了關(guān)鍵飽和度參數(shù)。然而,不必總是完全地調(diào)度每個(gè)層,保持一標(biāo)志,該標(biāo)志識(shí)別直接下游的重新調(diào)度操作在哪里引起了調(diào)度判定更新,如果一層引起了調(diào)度判定更新,則父層也必須被完全評(píng)估;如果沒有,則不需要對(duì)剩余的上游調(diào)度器層級(jí)進(jìn)行重新調(diào)度(但是需要更新某些其他狀態(tài))。
任何重新調(diào)度的最后一個(gè)操作都是確定是否應(yīng)該允許最適任就緒任務(wù)搶占當(dāng)前在給定PRI上執(zhí)行的任務(wù)。派出隊(duì)列描述符包含調(diào)度算法和當(dāng)前運(yùn)行的任務(wù)的量度兩者——可以針對(duì)調(diào)度器根節(jié)點(diǎn)量度對(duì)這些量度進(jìn)行評(píng)估,所述調(diào)度器根節(jié)點(diǎn)量度包含來自調(diào)度錐的最適任線程量度的副本。
池分配調(diào)度池分配調(diào)度僅發(fā)生在池分配層內(nèi)。而基本層調(diào)度尋求找到用于執(zhí)行的最適任線程/任務(wù)的候選,池分配調(diào)度尋求找到用于搶占的最適任處理資源實(shí)例候選。通常,這意味著識(shí)別以資源池中的最低適任性運(yùn)行任務(wù)的處理資源實(shí)例,并且將其與來自附加調(diào)度錐的最適任“就緒”任務(wù)的量度進(jìn)行比較。
在最適任就緒任務(wù)的適任性比所有運(yùn)行中的任務(wù)都低的情況下,對(duì)每個(gè)附加處理資源實(shí)例上的剩余的分配錐進(jìn)行更新,以確保所有調(diào)度層中的每一個(gè)保持知曉可訪問的下游任務(wù)的總數(shù),然而,不必進(jìn)一步調(diào)度。
在識(shí)別出搶占候選項(xiàng)的情況下,調(diào)度更新僅向所述處理資源實(shí)例傳播。
圖20示出了由于圖18所示的推送事件而發(fā)生的重新調(diào)度的序列圖。在池根層(層#6)發(fā)生基本層調(diào)度操作,接下來是池分配調(diào)度操作。在此示例中,將節(jié)點(diǎn)5選為適任于搶占,因此執(zhí)行層#1中的層調(diào)度操作。隨后的派出層調(diào)度操作導(dǎo)致對(duì)附加處理資源實(shí)例的搶占。之后,還更新層#2以確??梢员3制湎掠稳蝿?wù)/線程的計(jì)數(shù)值。
協(xié)作和搶占調(diào)度搶占調(diào)度使得當(dāng)前在執(zhí)行的任務(wù)能夠被更適任(更高優(yōu)先級(jí))的任務(wù)異步地中斷。搶占產(chǎn)生對(duì)執(zhí)行處理資源和環(huán)境(例如,存儲(chǔ)狀態(tài)并且搶占者一離開該資源就繼續(xù)執(zhí)行的能力)的特定需求。通常,可搶占的任務(wù)或線程在就緒和執(zhí)行狀態(tài)中會(huì)保持相同的調(diào)度適任性。
相反,協(xié)作線程僅在完成時(shí)退讓,因此更高優(yōu)先級(jí)的任務(wù)必須等待。在SystemWeaver的任務(wù)管理方案中,協(xié)作線程在其進(jìn)入執(zhí)行狀態(tài)時(shí)使其適任性最大,從而阻止出現(xiàn)更高優(yōu)先級(jí)的任務(wù)以及潛在的隨后搶占。
量度傳播行為調(diào)度事件或執(zhí)行中任務(wù)或線程的量度的修改都會(huì)引起量度傳播。
調(diào)度事件量度傳播當(dāng)由于調(diào)度事件而更新了父親的用于調(diào)度層的HeadIndex時(shí),根據(jù)在父層中所定義的量度傳播操作符,將量度從最適任子量度傳播進(jìn)父量度。這依賴于操作的本質(zhì)(推送或彈出事件),并且在復(fù)雜性上從簡(jiǎn)單復(fù)制到乘法累積。
執(zhí)行線程量度傳播可以動(dòng)態(tài)地修改當(dāng)前在執(zhí)行的線程的量度,這可用來消除對(duì)加鎖資源的優(yōu)先級(jí)倒置條件。在執(zhí)行中的處理資源實(shí)例沒有參與分配錐的情況下,僅更新派出隊(duì)列描述符的量度。在分配池的情況下,將執(zhí)行中的量度傳播給與處理資源實(shí)例相關(guān)聯(lián)的池靜態(tài)節(jié)點(diǎn)(圖21)。由PSN自身內(nèi)所保持的量度傳播操作符來控制對(duì)PSN量度的更新。在特定調(diào)度情形中,靜態(tài)值在池靜態(tài)節(jié)點(diǎn)內(nèi)必須持續(xù)存在。
在兩種情況下都引發(fā)重新調(diào)度事件,以確保新的執(zhí)行中量度不會(huì)引起執(zhí)行中任務(wù)和就緒的任務(wù)的相對(duì)適任性的改變。在非池的情況下,簡(jiǎn)單地相對(duì)于新的執(zhí)行中量度對(duì)調(diào)度器根節(jié)點(diǎn)量度進(jìn)行重新調(diào)度。在形成池的情況下,必須重新評(píng)估池分配層以及所有后續(xù)層。
空閑處理當(dāng)處理資源實(shí)例進(jìn)入空閑狀態(tài)時(shí),其使用執(zhí)行中量度來通知調(diào)度結(jié)構(gòu)。實(shí)質(zhì)上,空閑處理資源實(shí)例是“正執(zhí)行”可能的最低優(yōu)先級(jí)任務(wù)的實(shí)例,并因而會(huì)被任何到達(dá)的任務(wù)所搶占。將執(zhí)行中量度設(shè)置為空閑值會(huì)以通常的方式引發(fā)重新調(diào)度事件,從而使該空閑任務(wù)被在就緒狀態(tài)結(jié)構(gòu)中等待該處理資源實(shí)例的任務(wù)所“搶占”。
對(duì)于“空閑任務(wù)”的更詳細(xì)的描述及其對(duì)處理資源池中的功率管理的影響,請(qǐng)參見下面的池情形章節(jié)中的功率管理章節(jié)。
高級(jí)調(diào)度模式固有地或者通過采用特定的SystemWeaver配置可以使用幾種高級(jí)模式和行為。在下面的章節(jié)中描述以下模式。
要注意,這不是在窮盡性地列舉SystemWeaver內(nèi)可用的調(diào)度模式。
時(shí)間片雖然SystemWeaver系統(tǒng)主要是事件驅(qū)動(dòng)的,但是基于傳統(tǒng)定時(shí)器的系統(tǒng)(諸如時(shí)間分片)仍然可用。時(shí)間片型任務(wù)根據(jù)單獨(dú)的時(shí)間片周期共享處理資源,所述時(shí)間片周期確定在其期間任務(wù)可占用處理資源的時(shí)間間隔(假設(shè)在該時(shí)間間隔期間沒有優(yōu)先的任務(wù)就緒)。
相對(duì)于普通任務(wù)(圖1中示出),時(shí)間片型任務(wù)展現(xiàn)出輕微改動(dòng)的“運(yùn)行”行為。圖22示出了運(yùn)行狀態(tài)的兩個(gè)部分正常和受輕視(deprecated)。
此章節(jié)描述時(shí)間片任務(wù)的行為以及當(dāng)對(duì)其進(jìn)行配置時(shí)必須遵守的規(guī)則。
SystemWeaver核資源下面的章節(jié)討論用于實(shí)現(xiàn)SystemWeaver服務(wù)器核內(nèi)的時(shí)間片特性的資源。
計(jì)數(shù)器在SystemWeaver核內(nèi)使用每處理資源實(shí)例計(jì)數(shù)器來推動(dòng)時(shí)間片行為。還提供了單個(gè)預(yù)置器(prescaler),其由系統(tǒng)時(shí)鐘提供。在芯片設(shè)計(jì)時(shí)設(shè)置該預(yù)置器的位分辨率。
時(shí)間片狀態(tài)指示器留出預(yù)處理資源實(shí)例中斷狀態(tài)寄存器內(nèi)的狀態(tài)位用于時(shí)間片行為。該狀態(tài)位寄存時(shí)間片計(jì)數(shù)器的期限,并可被軟件用來確定是否發(fā)生了時(shí)間片事件。
配置時(shí)間片組內(nèi)的所有任務(wù)必須共享相同的優(yōu)先級(jí)和相同的父調(diào)度層,此外,時(shí)間片任務(wù)不應(yīng)與其他非時(shí)間片任務(wù)共享調(diào)度層。應(yīng)將時(shí)間片父親的調(diào)度算法設(shè)置為FIFO。圖23示出了典型的時(shí)間片配置,其中時(shí)間片組在具有這樣的一組前景的背景下工作,即,當(dāng)其需要服務(wù)時(shí)采用優(yōu)先級(jí)的事件驅(qū)動(dòng)的任務(wù)。
行為當(dāng)時(shí)間片任務(wù)首先開始執(zhí)行時(shí),系統(tǒng)范圍的時(shí)間片值被復(fù)制到與處理資源實(shí)例相關(guān)聯(lián)的時(shí)間片計(jì)數(shù)器。稱時(shí)間片任務(wù)進(jìn)入其“正常”運(yùn)行狀態(tài)(圖24)。在正常狀態(tài)下,每個(gè)循環(huán)將該計(jì)數(shù)器遞減。當(dāng)?shù)竭_(dá)0時(shí),硬件將任務(wù)的執(zhí)行優(yōu)先級(jí)(存儲(chǔ)在派出隊(duì)列描述符內(nèi))自動(dòng)遞減,從而任務(wù)進(jìn)入“受輕視”狀態(tài)。此時(shí),時(shí)間片間隔計(jì)數(shù)器切換到傳統(tǒng)的看門狗(watchdog)模式。
在單個(gè)處理資源實(shí)例向多個(gè)時(shí)間片任務(wù)提供服務(wù)的情況下,(以關(guān)聯(lián)的重新調(diào)度操作)使執(zhí)行優(yōu)先級(jí)遞減的行動(dòng)將引起被就緒狀態(tài)結(jié)構(gòu)內(nèi)的時(shí)間片組的另一成員的搶占。通過詢問時(shí)間片狀態(tài)位,軟件客戶機(jī)可確定時(shí)間片的持續(xù)時(shí)間已屆滿,并且將該現(xiàn)在已被搶占的任務(wù)推送至FIFO隊(duì)列的后部。因此,該組遵守所配置的時(shí)間片規(guī)則,同時(shí)很大程度上保持了SystemWeaver核調(diào)度以及客戶機(jī)行為的正常運(yùn)行模式。
當(dāng)在“正常的”時(shí)間片狀態(tài)下時(shí)間片任務(wù)被非時(shí)間片任務(wù)搶占時(shí),將未完結(jié)的時(shí)間片持續(xù)時(shí)間復(fù)制到任務(wù)控制塊。然后將該任務(wù)推送回時(shí)間片組使其位于FIFO隊(duì)列的頭部。當(dāng)任何搶占任務(wù)處理完成時(shí),所述時(shí)間片任務(wù)恢復(fù),被搶占任務(wù)的剩余時(shí)間片被設(shè)置到時(shí)間片計(jì)數(shù)器。
當(dāng)時(shí)間片任務(wù)在“受輕視”狀態(tài)下被搶占時(shí),將其推送回時(shí)間片組FIFO隊(duì)列的尾部。在兩種情況下,時(shí)間片任務(wù)的優(yōu)先級(jí)量度都保持為其原始配置值。
在時(shí)間片組由處理資源實(shí)例的池提供服務(wù)(假設(shè)沒有搶占任務(wù))的情況下,進(jìn)入“受輕視”狀態(tài)不一定會(huì)立即切換到另一時(shí)間片組成員。要注意下面的觀察
Tp=(t*d)/p 其中(1≤p≤t)Tready=Tp-dTp時(shí)間片組完全循環(huán)一次的時(shí)長(zhǎng)(執(zhí)行每個(gè)成員任務(wù)一次)。
Tready每個(gè)循環(huán)中給定任務(wù)在就緒狀態(tài)中等待的時(shí)間的量。
t時(shí)間片任務(wù)的數(shù)量p池中的處理資源實(shí)例的數(shù)量d每個(gè)時(shí)間片間隔的持續(xù)時(shí)間要注意,當(dāng)p=t時(shí),在沒有其他任何搶占任務(wù)時(shí),時(shí)間片任務(wù)連續(xù)運(yùn)行。
執(zhí)行概況下面的執(zhí)行概況示出了SystemWeaver的時(shí)間片行為圖25示出了單處理器和三個(gè)時(shí)間片任務(wù)的經(jīng)典情況。在搶占任務(wù)到達(dá)前,每個(gè)時(shí)間片任務(wù)根據(jù)時(shí)間片間隔進(jìn)行時(shí)間共享,在搶占任務(wù)到達(dá)時(shí),時(shí)間片任務(wù)(在此情況下為2個(gè))退讓。當(dāng)高優(yōu)先級(jí)的搶占任務(wù)完成時(shí),原來的時(shí)間片任務(wù)繼續(xù)執(zhí)行以完成被中斷的時(shí)間間隔。
圖26示出了具有兩個(gè)處理器的同樣情形。最初,在這兩個(gè)處理器之間共享這三個(gè)時(shí)間片任務(wù)。當(dāng)搶占任務(wù)到達(dá)時(shí),這些時(shí)間片任務(wù)共享剩余的處理器,并且當(dāng)搶占任務(wù)完成時(shí),這些時(shí)間片任務(wù)在兩個(gè)處理器上繼續(xù)執(zhí)行。
圖27展示了當(dāng)可用處理資源的數(shù)量等于時(shí)間片任務(wù)的數(shù)量時(shí),各個(gè)時(shí)間片任務(wù)在處理器之一上連續(xù)運(yùn)行。當(dāng)高優(yōu)先級(jí)任務(wù)取得對(duì)一個(gè)處理器的控制時(shí),時(shí)間片組自動(dòng)地根據(jù)所定義的時(shí)間片間隔共享剩余的處理器。
池情形下的功率管理處理資源池的缺省行為是從分配層內(nèi)的第一個(gè)池靜態(tài)節(jié)點(diǎn)評(píng)估調(diào)度判定。池根節(jié)點(diǎn)(PRN)具有父指針,其通常指向分配層中的第一個(gè)池靜態(tài)節(jié)點(diǎn)(PSN)(圖28)。當(dāng)評(píng)估用于搶占的候選項(xiàng)時(shí),使用同輩指針從此條目開始比較并且圍繞該鏈表進(jìn)展。
如果所有靜態(tài)節(jié)點(diǎn)都具有相同的適任性并且該適任性低于來自調(diào)度錐的候選,則將選擇遇到的第一個(gè)節(jié)點(diǎn)。因此,在低負(fù)載的情形下,在處理器中的一個(gè)或更多個(gè)為空閑(已將其量度設(shè)置為空閑值)的情況下,將使最接近PRN的父指針的處理資源實(shí)例來處理新任務(wù),并且離該父指針最遠(yuǎn)的處理資源將出現(xiàn)長(zhǎng)的空閑時(shí)長(zhǎng)。
當(dāng)處理資源實(shí)例或者宏架構(gòu)(即,通過時(shí)鐘選通、電壓/頻率調(diào)制、功率隔離等)具有調(diào)節(jié)功耗的能力時(shí),此行為是有用的。通過向軟件客戶機(jī)中介添加適當(dāng)?shù)尿?qū)動(dòng)代碼可以平衡這些特性。
當(dāng)必須重新喚醒處理資源時(shí),不同的節(jié)能措施傾向于展現(xiàn)不同的影響,例如,時(shí)鐘選通可能保持宏架構(gòu)內(nèi)的所有狀態(tài),而激烈的電壓/頻率縮放可能犧牲所有現(xiàn)存狀態(tài)并且在被喚醒時(shí)出現(xiàn)不期望的涌入(in-rush)電流。在給定PRI具有多個(gè)不同代價(jià)的斷電選項(xiàng)并且使用上述調(diào)度行為的情況下,根據(jù)空閑所占的時(shí)間來管理其使用是有意義的。
根據(jù)處理資源實(shí)例和系統(tǒng)宏架構(gòu)的能力,可將“空閑”狀態(tài)分為多個(gè)子狀態(tài)。從某些狀態(tài)重新啟動(dòng)可能比從其他狀態(tài)重新啟動(dòng)花費(fèi)更大的代價(jià)(例如對(duì)比保持時(shí)鐘選通斷電的狀態(tài)和功率隔離狀態(tài))。為了支持這些情形,SystemWeaver支持多個(gè)空閑優(yōu)先級(jí)。
對(duì)于具有多個(gè)子狀態(tài)的那些處理資源,在線程繼續(xù)執(zhí)行之前,中斷響應(yīng)會(huì)穩(wěn)定地轉(zhuǎn)變回空閑狀態(tài)。這允許將處理資源逐漸地重新引入給定分配的活動(dòng)組。
示例圖29示出了使用升序優(yōu)先級(jí)隨著時(shí)間進(jìn)入空閑狀態(tài),處理資源實(shí)例(PRI)的“執(zhí)行優(yōu)先級(jí)”。在第一實(shí)例中,空閑任務(wù)將優(yōu)先級(jí)設(shè)置為其可能的最低設(shè)置,給予該P(yáng)RI當(dāng)與其分配池同輩進(jìn)行比較時(shí)可能從調(diào)度器分配任務(wù)的最高機(jī)會(huì)。
一段時(shí)間后,空閑任務(wù)引發(fā)處理資源宏架構(gòu)內(nèi)可能支持的斷電模式。此時(shí),空閑任務(wù)提高了該P(yáng)RI的執(zhí)行優(yōu)先級(jí),以降低分配任務(wù)的可能性(在先前狀態(tài)中的PRI將占先)。
類似地,經(jīng)過另一段時(shí)間之后,空閑任務(wù)(或某些其他代理)進(jìn)一步提高了所述執(zhí)行優(yōu)先級(jí),(可能對(duì)該P(yáng)RI進(jìn)行功率隔離,從而排除了靜態(tài)泄漏)。調(diào)節(jié)所述優(yōu)先級(jí)使該P(yáng)RI對(duì)于任務(wù)分配的適任性更低(與重新喚醒該處理資源的代價(jià)(在此情況下為涌入流、冷高速緩存效應(yīng)等)一致)。
注意對(duì)分配層中第一個(gè)條目的優(yōu)先搶占有時(shí)是不期望的。在這種情況下,在前一調(diào)度判定成為后續(xù)調(diào)度操作的新起點(diǎn)的情況下,可以選擇不同的行為。該選擇展現(xiàn)了在分配池內(nèi)的處理資源實(shí)例之間對(duì)高優(yōu)先級(jí)搶占任務(wù)的更公平的分配。
基于滯后的調(diào)度在某些情況下,期望保持調(diào)度判定,而不管其工作絕對(duì)正確性。通常,這是這樣的情況為特定類別的任務(wù)或數(shù)據(jù)集建立環(huán)境的代價(jià)高,因而應(yīng)該在可允許的情況下在多個(gè)任務(wù)上聚合。這種情況的示例包括-處理器高速緩存針對(duì)歷史算法或數(shù)據(jù)集而組裝的高速緩沖存儲(chǔ)器會(huì)顯示出與全異算法(disparate algorithm)和/或數(shù)據(jù)集的較差親和性(affinity)。這被稱為冷高速緩存效應(yīng)并表現(xiàn)出高的高速緩存錯(cuò)失率(missratio),并因此表現(xiàn)出較差性能。
-可重新配置的FPGA分區(qū)部分運(yùn)行時(shí)可重配性使FPGA的一部分能夠在芯片已部署并工作的同時(shí)被動(dòng)態(tài)地重新配置,使得能夠隨著時(shí)間而執(zhí)行不同的算法。然而,從一個(gè)算法切換到另一算法的代價(jià)較高,從而必須在較大的數(shù)據(jù)集上聚合以確保系統(tǒng)效率。
這兩個(gè)都是代價(jià)高的環(huán)境切換的示例。
基于滯后的調(diào)度可以通過跨多個(gè)用戶操作聚合環(huán)境切換的代價(jià)從而用于避免某些負(fù)面效應(yīng)。通過使用量度之一來表示“系統(tǒng)代價(jià)”參數(shù),可以實(shí)現(xiàn)基于滯后的調(diào)度。該滯后量度可基于系統(tǒng)內(nèi)的多個(gè)代價(jià)的測(cè)量-任務(wù)存儲(chǔ)器占用在存儲(chǔ)器非常重要的情況下,可以使用給定任務(wù)隊(duì)列的累積足印來確定何時(shí)調(diào)度新配置。
-處理要求期望在實(shí)質(zhì)上的“活動(dòng)處理”時(shí)段上聚合環(huán)境切換代價(jià)的情況。
-時(shí)間片等待時(shí)間的抖動(dòng)很重要的情況。
例如,在被動(dòng)態(tài)配置的FPGA的情況下,存儲(chǔ)器可以為在可重新配置構(gòu)造的單個(gè)部分上復(fù)用的各個(gè)算法環(huán)境累積工作;在此情況下,存儲(chǔ)器占用可以是判定何時(shí)對(duì)陣列重新編程的因素。在所有情況下,可以將調(diào)度器層級(jí)設(shè)計(jì)為包容由于高優(yōu)先級(jí)任務(wù)的到達(dá)而引起的被迫切換。
以下總結(jié)了關(guān)鍵的系統(tǒng)級(jí)挑戰(zhàn)-環(huán)境切換的代價(jià)的影響(切換的時(shí)間、涌入流)-切換的定時(shí)-如何管理對(duì)給定環(huán)境(在其不活動(dòng)的情況下)的工作的累積下面的章節(jié)描述使用SystemWeaver管理動(dòng)態(tài)FPGA重新配置的可能的方法。使用類似的調(diào)度技術(shù)和更簡(jiǎn)單的軟件客戶機(jī)中介行為可以實(shí)現(xiàn)對(duì)冷高速緩存的管理。
FPGA運(yùn)行時(shí)間重新配置雖然與處理器環(huán)境切換非常類似,但仍需幾個(gè)定義(重新定義)。
配置目標(biāo)為FPGA構(gòu)造的給定部分的一套編程變量。
環(huán)境切換改變FPGA的可重新配置的部分的配置的行動(dòng)。
任務(wù)由給定FPGA配置執(zhí)行的單個(gè)單位的工作。
在該建議中,目標(biāo)為FPGA的可重新配置的部分的配置被視為協(xié)作型(與搶占型相反),也就是說,個(gè)體任務(wù)是不可分的并且必須在環(huán)境切換能發(fā)生之前完成。這確保了任務(wù)不需要再進(jìn)入并且將在環(huán)境之間的狀態(tài)保持問題限制為這樣一個(gè)問題,即,等待特定配置的任務(wù)的數(shù)量必須是整數(shù)值。圖30示出了對(duì)未完結(jié)任務(wù)進(jìn)行的管理的邏輯圖。
將任務(wù)組織進(jìn)隊(duì)列。這些隊(duì)列永久存在;具體地,這些隊(duì)列累積當(dāng)前不活動(dòng)的FPGA配置的工作。調(diào)度器確定何時(shí)切換任務(wù)并且管理任務(wù)組內(nèi)任務(wù)的執(zhí)行順序。該重新配置支持邏輯管理對(duì)該構(gòu)造進(jìn)行重新編程的技巧,并在完成時(shí)發(fā)出信號(hào)。根據(jù)該模型的協(xié)作本質(zhì),當(dāng)對(duì)環(huán)境切換進(jìn)行調(diào)度時(shí),沒有需要保留在該構(gòu)造內(nèi)的數(shù)據(jù)。
調(diào)度器調(diào)度器執(zhí)行兩個(gè)不同的功能-調(diào)度器根據(jù)任務(wù)隊(duì)列的變化狀態(tài)持續(xù)地評(píng)估當(dāng)前的調(diào)度判定。
-調(diào)度器管理個(gè)體任務(wù)隊(duì)列內(nèi)任務(wù)的執(zhí)行順序。
每個(gè)任務(wù)的到達(dá)都會(huì)引起調(diào)度判定的更新,以確保FPGA構(gòu)造總是處于正確的狀態(tài)(貪婪調(diào)度)。在任務(wù)隊(duì)列內(nèi),調(diào)度器根據(jù)由系統(tǒng)設(shè)計(jì)師定義的屬性制訂執(zhí)行順序。調(diào)度器至少應(yīng)該提供FIFO、輪轉(zhuǎn)和優(yōu)先級(jí)策略。
使用SystemWeaver進(jìn)行重新配置管理SystemWeaver方案提供了一套豐富的調(diào)度能力和處理器間通信能力,可以部署所述能力來管理運(yùn)行時(shí)間并行執(zhí)行以及處理器間的通信。SystemWeaver的特性可有效地管理傳統(tǒng)指令集架構(gòu)、固定的硬件元素和可重新配置的FPGA塊等之內(nèi)的任務(wù)和環(huán)境切換。圖31示出了一示例架構(gòu)SystemWeaver處理對(duì)以下行為的管理對(duì)FPGA構(gòu)造的環(huán)境切換進(jìn)行的調(diào)度;以及對(duì)個(gè)體任務(wù)隊(duì)列內(nèi)的任務(wù)進(jìn)行的排序。自然地,除此之外,還有將更傳統(tǒng)的任務(wù)調(diào)度到平臺(tái)內(nèi)的固定配置元素。
用特定SystemWeaver硬件客戶機(jī)中介處理重新配置自身。要注意,用于管理高速緩存的“溫暖度(warmth)”的類似調(diào)度技術(shù)對(duì)標(biāo)準(zhǔn)客戶機(jī)中介沒有另外的要求。將由客戶機(jī)中介接收的各被調(diào)度任務(wù)控制塊與該構(gòu)造的現(xiàn)有配置進(jìn)行比較。如果當(dāng)前載入的配置與被調(diào)度任務(wù)的配置不同,則客戶機(jī)中介重新配置該構(gòu)造而不與SystemWeaver核進(jìn)一步交互。然后,構(gòu)造更新判定由調(diào)度器所規(guī)定的任務(wù)的輸出順序排他地進(jìn)行控制。可以將客戶機(jī)中介重新設(shè)計(jì)為包容不相似的重新配置策略。
調(diào)度策略應(yīng)該由系統(tǒng)設(shè)計(jì)者確定調(diào)度策略。然而,存在必須要有用來支持該特性的關(guān)鍵能力。具體地,調(diào)度算法應(yīng)該可以表現(xiàn)出滯后,即,保持一種調(diào)度判斷,直到別處已累積了用于保證切換到另一判定的足夠代價(jià)為止。
在示出的示例中,每個(gè)“任務(wù)”都隨機(jī)地產(chǎn)生量度,該量度被添加到表示任務(wù)組的累積量度。當(dāng)給定任務(wù)組由從隊(duì)列中移除任務(wù)的“彈出”操作提供服務(wù)時(shí),使該累積計(jì)數(shù)值遞減。
當(dāng)“推送”(新任務(wù)到達(dá))或者“彈出”操作發(fā)生時(shí),該構(gòu)造的調(diào)度器針對(duì)當(dāng)前在執(zhí)行的任務(wù)組的量度評(píng)估各個(gè)候選項(xiàng)。根據(jù)圖32給出的算法需要更新=(Ccandidate>Ccurrent+Hysteresis)Ccandidate候選調(diào)度層內(nèi)的任務(wù)的累積代價(jià)。
Ccurrent當(dāng)前選定的調(diào)度層內(nèi)的未完結(jié)任務(wù)的累積代價(jià)。
Hysteresis 為了避免環(huán)境顛簸(thrashing)而添加的滯后量。
圖33示出了可以選擇用來實(shí)現(xiàn)上述算法的調(diào)度層級(jí)。在此情況下,“滯后調(diào)度器”的量度1存儲(chǔ)滯后操作數(shù)。量度0可用于存儲(chǔ)滯后組的靜態(tài)優(yōu)先級(jí),當(dāng)在滯后組和搶占組之間進(jìn)行調(diào)度時(shí)使用該優(yōu)先級(jí)。假設(shè)存在某些任務(wù),這些任務(wù)有足夠的優(yōu)先級(jí)迫使環(huán)境改變。
結(jié)果圖32示出了這種系統(tǒng)的理論效果。任務(wù)調(diào)度輸出在本質(zhì)上是蓄意不均的(blocky),其最大程度的使用任何給定配置,同時(shí)管理對(duì)系統(tǒng)通信量成形的影響。
圖34示出了提出的調(diào)度算法的仿真結(jié)果。與所有代價(jià)的總和(累積的)一起畫出了等待四個(gè)配置中的各個(gè)配置的任務(wù)的累積“代價(jià)”。選擇的軌跡指示所述算法將選擇哪一個(gè)可用配置。
復(fù)合調(diào)度算法示例例如當(dāng)對(duì)池分配層中的處理資源池進(jìn)行調(diào)度時(shí)復(fù)合調(diào)度操作符是有用的。例如,成員的子集可能僅在等待處理的任務(wù)的隊(duì)列飽和度超過一特定閾值時(shí)才會(huì)適任。
考慮可使用三個(gè)處理資源、1個(gè)RISC處理器和兩個(gè)DSP的情況(圖35)。這些資源中的每一個(gè)在理論上都能夠執(zhí)行語(yǔ)音編碼操作,但是DSP裝置更有效率。在此情況下,如所示出的,RISC處理器將存在于語(yǔ)音編碼池中,但是其參與該執(zhí)行的適任性將取決于等待該功能的任務(wù)的隊(duì)列深度。
在這種配置中,池根節(jié)點(diǎn)量度0可能表示優(yōu)先級(jí),而量度1可能表示隊(duì)列飽和度。在各個(gè)候選PSN中,量度0通常將表示在其各自的處理資源示例(PRI)上運(yùn)行的任務(wù)的執(zhí)行優(yōu)先級(jí)。在此情況下,量度1將表示使其相關(guān)聯(lián)的PRI適任于調(diào)度所需的隊(duì)列飽和度。在此情況下,該復(fù)合調(diào)度算法為需要更新=(Mcurrent0>Mcandidate0)&&(Mcurrent1>Mcandidate1)在與DSP裝置相關(guān)聯(lián)的PSN中,將M1設(shè)置為0,從而該算法純粹基于優(yōu)先級(jí)來確定。在RISC處理器的情況下,M1將是非零的,因此由Mcurrent1所表示的隊(duì)列飽和度必須變得大于該值以使RISC處理器參與該算法的執(zhí)行。
下面在宏架構(gòu)或事務(wù)級(jí)別上描述SystemWeaver服務(wù)器。
如前所述,存在SystemWeaver硬件方案的四個(gè)元素-SystemWeaver服務(wù)器核-與SystemWeaver緊密耦合的存儲(chǔ)器-SystemWeaver調(diào)試管理器-SystemWeaver客戶機(jī)中介全局量度代理是可選的,并且在系統(tǒng)設(shè)計(jì)需要在調(diào)度判定中包括系統(tǒng)全局狀態(tài)時(shí)使用該全局量度代理。
主要連接組圖38示出了在核周圍找到的接口組。
為了確保可以容易地集成SystemWeaver核,所有信號(hào)都是單向的并且對(duì)于單個(gè)時(shí)鐘是同步的。下面給出這些組的組成成員的細(xì)節(jié)。所有信號(hào)方向是相對(duì)于SystemWeaver核給出的。
系統(tǒng)控制組系統(tǒng)控制組包含確保SystemWeaver核的正確操作所需的各種各樣的信號(hào)。這些信號(hào)包括系統(tǒng)時(shí)鐘、實(shí)時(shí)時(shí)鐘以及重置信號(hào)。
全局量度組在某些系統(tǒng)中,期望在調(diào)度判定期間使用特定的系統(tǒng)量度。這些量度可表示各種因素,諸如互聯(lián)繁忙、高速緩存命中率、存儲(chǔ)器占用等。
外圍中斷組外圍中斷組包括源自SystemWeaver控制的系統(tǒng)的外部的一組中斷。例如可以從與外部世界的輸入接口或者直接經(jīng)由針腳從SoC裝置的外部驅(qū)動(dòng)外圍中斷組中的信號(hào)。在SoC設(shè)計(jì)時(shí)定義外圍中斷輸入端的數(shù)量。
內(nèi)部中斷組內(nèi)部組包括由SystemWeaver系統(tǒng)發(fā)起的兩組同步中斷以及一組運(yùn)行時(shí)間系統(tǒng)調(diào)試信號(hào)。信號(hào)組內(nèi)各個(gè)信號(hào)的數(shù)量通常會(huì)對(duì)應(yīng)于系統(tǒng)內(nèi)處理資源的數(shù)量,并且在SoC設(shè)計(jì)時(shí)定義。
緊密耦合存儲(chǔ)器接口組該組將SystemWeaver連接到其自身私有的緊密耦合存儲(chǔ)器資源。假設(shè)附加的存儲(chǔ)器是同步SRAM裝置。在SoC設(shè)計(jì)時(shí)定義地址路徑的寬度n和數(shù)據(jù)路徑的寬度m。
互聯(lián)組必須在SoC設(shè)計(jì)時(shí)設(shè)置單獨(dú)的互聯(lián)策略,其包括協(xié)議以及層的數(shù)量??梢栽趯?duì)應(yīng)的總線特定的實(shí)現(xiàn)中找到任意給定總線接口信號(hào)的細(xì)節(jié)。
調(diào)試接口組對(duì)于到調(diào)試管理器的接口的細(xì)節(jié),請(qǐng)參見共同待定的國(guó)際PCT申請(qǐng)第PCT/GB2005/003525號(hào),在此通過引用將其并入。
緊密耦合存儲(chǔ)器(TCM)SystemWeaver TCM是由多個(gè)EDA制造商提供的一種標(biāo)準(zhǔn)編譯器SSRAM技術(shù)。TCM包含在SoC設(shè)計(jì)時(shí)根據(jù)應(yīng)用的需要而定義的整數(shù)數(shù)量的SystemWeaver存儲(chǔ)器元件(WME)。每個(gè)WME消耗256位的存儲(chǔ)器空間。SystemWeaver支持最大65536個(gè)WME或16Mb的存儲(chǔ)器。
雖然隊(duì)列描述符不消耗WME,但是在通常的系統(tǒng)中,所需WME的數(shù)量將由線程支持要求所支配。例如,能夠支持同時(shí)位于SystemWeaver服務(wù)器內(nèi)的400個(gè)線程的系統(tǒng)將需要大約128kb的附加存儲(chǔ)器。
在SoC設(shè)計(jì)時(shí),可以修改存儲(chǔ)器接口以簡(jiǎn)化路由。
服務(wù)器核的子塊的描述圖39示出了SystemWeaver服務(wù)器實(shí)體的主要邏輯組件。這些功能映射到圖40所示的架構(gòu)上。在執(zhí)行以下功能的四個(gè)主要內(nèi)部并行處理元素之間分配功能-線程調(diào)度器輸入管理器(TSIM)空閑鏈表維護(hù)、WME恢復(fù)。
-線程調(diào)度器待定管理器(TSPM)待定鏈表維護(hù)、同步、推進(jìn)至就緒隊(duì)列結(jié)構(gòu)。線程同步管理器保持待定隊(duì)列結(jié)構(gòu)的完整性(插入和提取)。
-線程調(diào)度器輸出管理器(TSOM)就緒隊(duì)列維護(hù)、派出隊(duì)列維護(hù)、處理資源功率管理、中斷產(chǎn)生。保持就緒隊(duì)列結(jié)構(gòu)的完整性(插入和提取)。
-線程調(diào)度器調(diào)度管理器(TSSM)維護(hù)就緒隊(duì)列結(jié)構(gòu)內(nèi)各個(gè)處理資源的調(diào)度判定。
此外,一些塊提供支持功能-線程調(diào)度器存儲(chǔ)器管理器(TSMM)聚合對(duì)附加的System Weaver存儲(chǔ)器的訪問,包括互斥和加鎖。
-線程調(diào)度器中斷管理器(TSIC)將進(jìn)入系統(tǒng)的中斷轉(zhuǎn)換為內(nèi)部同步原語(yǔ)。
-線程調(diào)度器接口管理器(TSIF)向SystemWeaver資源提供互聯(lián)接口和配置以及運(yùn)行時(shí)間訪問。
圖40示出了SystemWeaver架構(gòu)的主要子塊。下面的章節(jié)詳細(xì)描述了在這些組件之間進(jìn)行的子塊內(nèi)交互。每個(gè)子塊向其他子塊提供一組“公用方法”,使每個(gè)子塊能夠指示其同等物對(duì)它們各自保持的結(jié)構(gòu)執(zhí)行操作。
在一命令會(huì)以特定條件完成的情況下,在子塊內(nèi)管理狀態(tài)標(biāo)志。
子塊接口圖的箭頭方向指示總線的主要運(yùn)量(master-ship),而沒有反映信號(hào)組的個(gè)體元素的方向。
全狀態(tài)(stateful)描述符行為在SystemWeaver的操作期間使用了多種描述符類型(對(duì)于進(jìn)一步的細(xì)節(jié),請(qǐng)參見共同待定的國(guó)際PCT申請(qǐng)第PCT/GB2005/001154號(hào),在此通過引用將其并入)。這些描述符中的大多數(shù)是無(wú)狀態(tài)的,然而,在特定情況下,線程描述符和調(diào)度器描述符會(huì)在多種狀態(tài)中轉(zhuǎn)變。此文檔描述了這些狀態(tài)轉(zhuǎn)變以及引起這些狀態(tài)轉(zhuǎn)變的事件。
線程描述符存在由SystemWeaver內(nèi)部識(shí)別的兩種類型的線程描述符標(biāo)準(zhǔn)線程描述符和標(biāo)記線程描述符。后者專門用來對(duì)移除調(diào)度層級(jí)的處理進(jìn)行同步,同時(shí)保證先前排隊(duì)的線程描述符的完整性和順序。
圖41示出了內(nèi)部線程的狀態(tài)圖,線程描述符和標(biāo)記線程描述符都遍歷該狀態(tài)圖。要注意,狀態(tài)“新建”和“釋放”是元狀態(tài),它們與SystemWeaver內(nèi)的永久狀態(tài)沒有直接相關(guān)性。在線程描述符內(nèi)不存在原意狀態(tài)變量,代之地,狀態(tài)由多個(gè)標(biāo)志表示。表3給出了標(biāo)志狀態(tài)與其中存在圖41中的線程的狀態(tài)之間的相關(guān)性。
標(biāo)準(zhǔn)線程描述符的狀態(tài)描述下面的章節(jié)給出對(duì)狀態(tài)以及引起進(jìn)入該狀態(tài)以及從該狀態(tài)離開的事件的簡(jiǎn)要描述。
新建新建狀態(tài)是瞬時(shí)的。根據(jù)獨(dú)立于或依賴于線程的命令的推送將新線程引入TSIF。如下處理這兩種情況-獨(dú)立線程(沒有時(shí)間或同步依賴性的線程)立即轉(zhuǎn)變到推送狀態(tài)。在該實(shí)例中,TSIF指示TSSM將該線程引入就緒隊(duì)列結(jié)構(gòu)。
-依賴線程(具有時(shí)間或同步依賴性的線程)轉(zhuǎn)變到阻塞狀態(tài)。TSIF指示TSPM適當(dāng)?shù)貙⒃摼€程引入待定和定時(shí)隊(duì)列結(jié)構(gòu)。
阻塞在阻塞狀態(tài)下,線程描述符等待外部同步和/或基于定時(shí)的同步。阻塞線程在TSIF發(fā)起。當(dāng)接收到適當(dāng)?shù)耐綍r(shí),TSPM將該線程轉(zhuǎn)變到推送狀態(tài)并指示TSSM將該線程引入就緒隊(duì)列結(jié)構(gòu)。
推送推送狀態(tài)中的線程要么已被同步,要么原本就是獨(dú)立的,TSPM(依賴線程)和TSIF(獨(dú)立線程)將在各個(gè)情況下管理至推送狀態(tài)的轉(zhuǎn)變。TSSM將該線程推送至就緒隊(duì)列結(jié)構(gòu)并將該線程轉(zhuǎn)變到就緒狀態(tài)。轉(zhuǎn)變到就緒狀態(tài)引起重新調(diào)度的發(fā)生。
就緒就緒狀態(tài)中的線程要么是從推送狀態(tài)轉(zhuǎn)變的,要么是被沖出(flush)回到就緒狀態(tài)結(jié)構(gòu)的(由TSSM)。轉(zhuǎn)變到就緒狀態(tài)總會(huì)引發(fā)重新調(diào)度。線程可從就緒狀態(tài)轉(zhuǎn)變到彈出狀態(tài)或沖出狀態(tài),后者是這樣的特定情況的結(jié)果,即,經(jīng)過彈出情況以在單次操作中沖出。當(dāng)線程被TSSM指派為用于調(diào)度的最適任候選時(shí),線程轉(zhuǎn)變到彈出狀態(tài)。
彈出彈出狀態(tài)中的線程已被調(diào)度器(TSSM)指派為對(duì)于由一特定處理資源實(shí)例或一組實(shí)例進(jìn)行的處理最適任的線程,這些線程是被TSOM轉(zhuǎn)變到該狀態(tài)的。線程可以從彈出狀態(tài)轉(zhuǎn)變到?jīng)_出狀態(tài)或僵尸狀態(tài)(zombiestate)-由于進(jìn)行重新調(diào)度而識(shí)別出更適任的線程,結(jié)果TSOM將線程轉(zhuǎn)變到?jīng)_出狀態(tài)。
-由于開始在系統(tǒng)處理資源實(shí)例之一中進(jìn)行處理,TSOM將線程轉(zhuǎn)變到僵尸狀態(tài)。僵尸狀態(tài)保持線程描述符,直到其可被釋放為止。
僵尸(zombie)在TSSM內(nèi)處理僵尸線程。僵尸狀態(tài)的存在是為了保證在釋放線程之前已經(jīng)免除了針對(duì)給定線程描述符的所有依賴性。一旦線程到達(dá)TSSM處理隊(duì)列的前部就可保證此點(diǎn),因此不需要進(jìn)一步的處理。
沖出由TSSM處理被沖出的線程。必須將沖出的線程重新引入就緒隊(duì)列結(jié)構(gòu),從而引起重新調(diào)度操作。一旦完成了重新引入,TSSM就會(huì)將該線程轉(zhuǎn)變回就緒狀態(tài)。
釋放釋放狀態(tài)是一瞬時(shí)狀態(tài),其指示該線程描述符所消耗的WME被放回了空閑鏈表。
標(biāo)記線程描述符的狀態(tài)描述下面的章節(jié)給出對(duì)狀態(tài)以及引起進(jìn)入該狀態(tài)以及從該狀態(tài)離開的事件的簡(jiǎn)要描述。
新建新建狀態(tài)是瞬時(shí)的。根據(jù)推送標(biāo)記線程命令將新標(biāo)記線程引入TSIF。標(biāo)記線程總是經(jīng)過阻塞狀態(tài),以確保在標(biāo)記線程自身到達(dá)之前存在于TSPM的輸入和輸出工作隊(duì)列中的任何處理都已完成,所述處理會(huì)影響標(biāo)記線程最終刪除的調(diào)度器層的狀態(tài)。
阻塞TSPM直接將標(biāo)記線程轉(zhuǎn)變到推送狀態(tài)并指示TSSM將該線程引入就緒隊(duì)列結(jié)構(gòu)。
推送TSSM將標(biāo)記線程推送至就緒隊(duì)列結(jié)構(gòu)并將該線程轉(zhuǎn)變到就緒狀態(tài)。轉(zhuǎn)變到就緒狀態(tài)引起重新調(diào)度的發(fā)生。
就緒當(dāng)標(biāo)記線程被引入就緒隊(duì)列結(jié)構(gòu)時(shí),其對(duì)其直接父親解鎖。然后在依賴線程的數(shù)量的計(jì)數(shù)值的控制之下解放該父調(diào)度層。標(biāo)記線程僅在其父親的依賴線程計(jì)數(shù)值到達(dá)零時(shí)(即SystemWeaver內(nèi)沒有依賴于該父調(diào)度層的存在的其他線程描述符)才適任于離開就緒狀態(tài)的轉(zhuǎn)變。
與標(biāo)準(zhǔn)線程相同,標(biāo)記線程可從就緒狀態(tài)轉(zhuǎn)變到彈出狀態(tài)或沖出狀態(tài),后者是這樣的特定情況的結(jié)果,即,經(jīng)過彈出條件以在單次操作中沖出。當(dāng)標(biāo)記線程被TSSM指派為用于調(diào)度的最適任候選時(shí),標(biāo)記線程轉(zhuǎn)變到彈出狀態(tài)。
彈出彈出狀態(tài)中的標(biāo)記線程已被調(diào)度器(TSSM)指派為對(duì)于由一特定處理資源實(shí)例或一組實(shí)例進(jìn)行的處理最適任的線程,要注意,該調(diào)度判定是一特殊情況,其指的是調(diào)度層為空并且不存在其他依賴線程。標(biāo)記線程可以從彈出狀態(tài)轉(zhuǎn)變到?jīng)_出狀態(tài)或僵尸狀態(tài)-由于進(jìn)行重新調(diào)度而識(shí)別出更適任的線程,結(jié)果標(biāo)記線程被轉(zhuǎn)變到?jīng)_出狀態(tài)。
-由于開始在系統(tǒng)處理資源實(shí)例之一中進(jìn)行處理,標(biāo)記線程被轉(zhuǎn)變到僵尸狀態(tài)。僵尸狀態(tài)保持線程描述符,直到其可被釋放為止。此外,標(biāo)記線程的父親也被標(biāo)記以在該狀態(tài)期間刪除。
僵尸對(duì)僵尸標(biāo)記線程的處理與正常線程描述符的類似。在該狀態(tài)內(nèi)還刪除標(biāo)記線程的父調(diào)度層。
釋放釋放狀態(tài)是一瞬時(shí)狀態(tài),其指示該線程描述符所消耗的WME被放回了空閑鏈表。
調(diào)度器層狀態(tài)圖調(diào)度器層還具有暗含狀態(tài)。對(duì)于靜態(tài)層,即,在系統(tǒng)的整個(gè)運(yùn)行時(shí)間持續(xù)存在的層,唯一的狀態(tài)是活動(dòng)狀態(tài)。其余的狀態(tài)由動(dòng)態(tài)調(diào)度層使用,即,在運(yùn)行時(shí)間期間來來往往的層。表4給出了標(biāo)志狀態(tài)和圖42中的其中存在調(diào)度器層的狀態(tài)之間的相關(guān)性。
調(diào)度器層描述符的狀態(tài)描述下面的章節(jié)給出對(duì)狀態(tài)以及引起進(jìn)入該狀態(tài)以及從該狀態(tài)離開的事件的簡(jiǎn)要描述。
新建新建狀態(tài)是瞬時(shí)的。在初始化期間或在運(yùn)行時(shí)通過一推送獨(dú)立元素將新調(diào)度器層引入TSIF。
休眠在休眠狀態(tài)中,允許調(diào)度器層累積線程,并且潛在地,允許調(diào)度器層累積另外的子層級(jí),但是從來不會(huì)被TSSM調(diào)度??梢砸詢煞N方式進(jìn)入該休眠狀態(tài)-在休眠狀態(tài)中可以創(chuàng)建新調(diào)度描述符。
-調(diào)度層可在運(yùn)行時(shí)修改并根據(jù)TSIF發(fā)出的明確的系統(tǒng)命令而置入休眠狀態(tài)。
僅可通過明確的系統(tǒng)命令離開休眠狀態(tài)。
活動(dòng)在活動(dòng)狀態(tài)中的調(diào)度器層活躍地參與調(diào)度并被加鎖,這意味著僅當(dāng)其變空時(shí)才將其移除。通常在該狀態(tài)中創(chuàng)建靜態(tài)調(diào)度器。根據(jù)通過TSIF接收到的明確的系統(tǒng)命令,動(dòng)態(tài)調(diào)度器轉(zhuǎn)變到該狀態(tài)。僅當(dāng)接收到標(biāo)記線程時(shí)調(diào)度器層才離開活動(dòng)狀態(tài),調(diào)度器層進(jìn)入“待釋放”狀態(tài)。
待釋放調(diào)度器層停留在待釋放狀態(tài)中,直到以下兩個(gè)標(biāo)準(zhǔn)都滿足為止-依賴元素的數(shù)量(其是保持測(cè)量的對(duì)引用該元素的描述符的數(shù)量的測(cè)量結(jié)果的計(jì)數(shù)值)變?yōu)?-子元素的數(shù)量變?yōu)榱阋⒁猓@意味著引起轉(zhuǎn)變到待釋放狀態(tài)的標(biāo)記線程描述符也被彈出,僅在調(diào)度器層沒有其他依賴性時(shí)才會(huì)發(fā)生的行為。
釋放釋放狀態(tài)是一瞬時(shí)狀態(tài),其指示調(diào)度層描述符所消耗的WME被放回了空閑鏈表。
子塊間的行為下面的章節(jié)覆蓋了涉及多個(gè)子塊的SystemWeaver行為的多個(gè)方面。
動(dòng)態(tài)調(diào)度層級(jí)的操作在系統(tǒng)運(yùn)行時(shí)間期間可添加和移除調(diào)度層級(jí)。如果涉及到特定用戶級(jí)過程,則SystemWeaver保證系統(tǒng)的完整性以及從調(diào)度層級(jí)的一部分轉(zhuǎn)移到另一部分的線程描述符的順序。對(duì)于進(jìn)一步的細(xì)節(jié),請(qǐng)見上文。
動(dòng)態(tài)調(diào)度量度的更新可以更新標(biāo)準(zhǔn)線程或標(biāo)記線程內(nèi)的量度。行為依賴于線程狀態(tài)-如果線程處于阻塞狀態(tài),則將適當(dāng)?shù)拿畎l(fā)送到TSPM。因?yàn)榇?duì)列是經(jīng)排序的,所以當(dāng)更新了量度時(shí),從該隊(duì)列中移除該線程或者將該線程重新插入到該隊(duì)列中,以確保該線程在適當(dāng)?shù)狞c(diǎn)重新出現(xiàn)。
-如果線程處于任何其他持久狀態(tài),則向TSSM發(fā)出執(zhí)行量度更新并且對(duì)調(diào)度層級(jí)的適當(dāng)部分進(jìn)行重新調(diào)度的命令。
用于調(diào)度的TSOM/TSSM交互在線程描述符到處理資源實(shí)例的調(diào)度中,TSOM和TSSM都起了作用。在圖72和73中給出了TSOM和TSSM之間的交互的一些示例序列圖。
子塊內(nèi)架構(gòu)和行為就其主要IO或到其同等物或外部世界的物理接口,并且還就其命令接口或使用適當(dāng)物理接口上的命令協(xié)議而可以調(diào)用的方法,來討論各個(gè)子塊。
TSIF-接口管理器接口管理器負(fù)責(zé)協(xié)調(diào)(orchestrate)從互聯(lián)組接收的命令的執(zhí)行,并將其分配給其他子塊。下面的章節(jié)描述存在于TSIF內(nèi)并且超越對(duì)內(nèi)部消耗的命令簡(jiǎn)單翻譯的功能實(shí)體。
架構(gòu)TSIF主要將通過互聯(lián)接口接收的命令解釋(interpret)成用于其余子塊的一個(gè)或多個(gè)內(nèi)部命令。下面的章節(jié)給出了存在于TSIF內(nèi)的架構(gòu)資源的細(xì)節(jié)。
信號(hào)機(jī)區(qū)域鎖信號(hào)機(jī)區(qū)域鎖(SRL)提供了這樣的資源,其可由任何系統(tǒng)資源原子地測(cè)試和加鎖以獲得對(duì)系統(tǒng)資源的排他訪問??赡艹鲇谝韵氯魏螖?shù)目的原因而使用SRL-為了鎖住系統(tǒng)存儲(chǔ)器中包含一個(gè)或更多個(gè)共享資源(例如,信號(hào)機(jī)對(duì)象、任務(wù)控制對(duì)象等)的區(qū)域,從而保證了完整性。
-為了鎖住用于多循環(huán)命令訪問的SystemWeaver命令接口-為了鎖住用于多循環(huán)事件的SystemWeaver調(diào)試事件接口SRL有兩種狀態(tài)已加鎖和已解鎖。讀取SRL被定義為嘗試獲得鎖,對(duì)SRL寫被定義為嘗試解鎖。在鎖住特定SRL的處理資源實(shí)例和釋放該特定SRL的處理資源實(shí)例之間沒有必需的相關(guān)性。下面描述了該行為-已解鎖。在已解鎖狀態(tài)中,對(duì)SRL的讀取返回向讀取者指示該加鎖嘗試是否成功的控制碼。在該狀態(tài)中,寫沒有效果。
-已加鎖。在已加鎖狀態(tài)中,對(duì)SRL的讀取指示該SRL不可用。寫會(huì)釋放該SRL。
命令處理TSIF將從系統(tǒng)互聯(lián)接收的命令分成可能多個(gè)內(nèi)部命令。
Watchdog和時(shí)間片支持可選地,可向每個(gè)處理資源實(shí)例提供雙模式定時(shí)器計(jì)數(shù)器。這兩個(gè)定時(shí)器模式是watchdog和時(shí)間片,缺省模式為watchdog。
由watchdog循環(huán)和個(gè)體計(jì)數(shù)值定義watchdog行為(圖44)。Watchdog是系統(tǒng)時(shí)鐘的逐步減低(step down)版本,由硅設(shè)計(jì)時(shí)的系統(tǒng)常量來定義該逐步遞減。圖46(a)示出了每個(gè)預(yù)置(prescaled)的watchdog時(shí)鐘周期內(nèi)每個(gè)處理資源實(shí)例的行為-詢問個(gè)體watchdog計(jì)數(shù)器以確定watchdog中斷是否恰當(dāng)。
-如果有必要,則產(chǎn)生watchdog中斷。
來自處理資源實(shí)例(定時(shí)器與之相關(guān)的)的每個(gè)控制訪問將重置watchdog定時(shí)器計(jì)數(shù)值,因此,只有在watchdog時(shí)間間隔不訪問SystemWeaver的處理資源才經(jīng)歷watchdog中斷。
在TSIF和TSOM之間劃分前述時(shí)間分片行為。在TSIF中,分配給各個(gè)處理資源的定時(shí)器可以是專門用于時(shí)間片支持的。當(dāng)出現(xiàn)時(shí)間片間隔時(shí),在TSOM中提供自動(dòng)量度操作(運(yùn)行優(yōu)先級(jí)被遞減)。僅當(dāng)由于自動(dòng)的量度更新從而標(biāo)準(zhǔn)搶占變?yōu)檫m當(dāng)時(shí),處理資源自身才被搶占。
圖45示出了TSIF內(nèi)時(shí)間片支持邏輯的每系統(tǒng)時(shí)鐘周期的行為。圖46(b)示出了每個(gè)預(yù)置的時(shí)間片時(shí)鐘周期內(nèi)每個(gè)處理資源的行為。要注意,在發(fā)生了時(shí)間片事件后,定時(shí)器模式回到watchdog模式。
中斷處理SystemWeaver接受來自系統(tǒng)的中斷、外圍中斷、并向系統(tǒng)發(fā)起中斷(處理資源實(shí)例中斷)。
外圍中斷在TSIF內(nèi)可掩蔽外圍中斷以及對(duì)外圍中斷設(shè)置條件(邊沿/電平觸發(fā)、負(fù)/正邏輯等)。
處理資源實(shí)例中斷在TSIF內(nèi)設(shè)置中斷處理資源以提供以下便利-保持中斷狀態(tài),包括中斷斷言的源(搶占、時(shí)間片、watchdog)。
-掩蔽能力。
在TSIF內(nèi)實(shí)現(xiàn)了對(duì)SystemWeaver命令接口自動(dòng)進(jìn)行中斷掩蔽的特殊特性。因?yàn)槊罱涌谑窍到y(tǒng)內(nèi)所有處理資源的公共訪問點(diǎn),所以必須保持完整性和效率。出于此目的,當(dāng)一處理資源獲得了對(duì)SystemWeaver命令接口的鎖定時(shí),SystemWeaver自動(dòng)處理中斷掩蔽以確保該處理資源不會(huì)在代碼的該關(guān)鍵區(qū)期間被中斷。
針對(duì)跟蹤已接收到的成功SystemWeaver命令接口信號(hào)機(jī)區(qū)加鎖請(qǐng)求的數(shù)量的各個(gè)處理資源實(shí)例,保持一計(jì)數(shù)器。每個(gè)加鎖請(qǐng)求使計(jì)數(shù)值遞增,而每個(gè)解鎖請(qǐng)求使其遞減。當(dāng)計(jì)數(shù)器從零遞增時(shí),中斷被自動(dòng)掩蔽,當(dāng)計(jì)數(shù)器遞減到零時(shí),中斷被自動(dòng)解掩蔽。
TSIM-輸入管理器輸入管理器管理WME空閑鏈表,處理來自TSIF的彈出請(qǐng)求以及來自多個(gè)子塊(TSIF、TSPM、TSOM、TSSM)的推送請(qǐng)求。
架構(gòu)TSIM僅包含一個(gè)架構(gòu)實(shí)體,即,SystemWeaver存儲(chǔ)器元件(WME)空閑鏈表。圖48示出了該鏈表的結(jié)構(gòu)。
空閑鏈表根據(jù)后進(jìn)先出(LIFO)策略進(jìn)行工作。該鏈表的每個(gè)成員都是C_SCHED_ENTRY_FREE類型的,并且使用由C_FREE_QUEUE_POINTER_INDEX所引用的指針單向鏈接。
方法接口除了基本的鏈表維護(hù)方法(取得和設(shè)置狀態(tài))之外,輸入管理器還提供關(guān)于其接口的以下命令Push Free Index(C_TSIM_CMD_PUSH_INDEX)調(diào)用者(TSIF、TSSM、TSOM、TSPM)push free index命令用于將所釋放的WME索引推送回空閑鏈表。下面總結(jié)了參數(shù)
Pop Free Index(C_TSIM_CMD_POP_INDEX)調(diào)用者TSIFpop free index命令用于從空閑鏈表彈出一空閑WME索引。下面總結(jié)了參數(shù)
TSPM-待定管理器待定管理器管理等待某些事件而被阻塞的任務(wù)或線程描述符;其要么是基于同步的,要么是基于定時(shí)器的。個(gè)體待定隊(duì)列關(guān)聯(lián)由用戶控制(或者由更高層軟件控制),其可表示信號(hào)機(jī)、競(jìng)爭(zhēng)域、中斷或它們的任何組合。
架構(gòu)待定管理器包括兩個(gè)主要元素待定隊(duì)列和定時(shí)器隊(duì)列的可變數(shù)量。待定隊(duì)列存儲(chǔ)等待由某些外部事件進(jìn)行同步的線程的鏈表,而定時(shí)器隊(duì)列存儲(chǔ)等待超時(shí)的線程的鏈表。線程描述符可能(實(shí)際上普遍地)是這兩個(gè)鏈表的成員,由此允許線程描述符等待外部同步事件一段有限長(zhǎng)度的時(shí)間。
待定隊(duì)列結(jié)構(gòu)圖50的待定隊(duì)列結(jié)構(gòu)主要出現(xiàn)在緊密耦合存儲(chǔ)器內(nèi),用TSPM內(nèi)的資源和能力來處理其內(nèi)容。TSPM自身包含一頭指針和引用待定隊(duì)列描述符的鏈表的多個(gè)元素(即,鏈表的鏈表)。每個(gè)待定隊(duì)列包含線程描述符的鏈表,待定隊(duì)列的數(shù)量在運(yùn)行時(shí)可動(dòng)態(tài)地增長(zhǎng)和減小。所有阻塞狀態(tài)中的線程描述符存在于待定隊(duì)列中(與定時(shí)器隊(duì)列相反,在定時(shí)器隊(duì)列中僅當(dāng)線程具有定義的超時(shí)時(shí)該線程才出現(xiàn))。對(duì)多個(gè)待定隊(duì)列的使用依賴于應(yīng)用和應(yīng)用程序員的需要和偏好??蓪⒋?duì)列與以下事務(wù)等相關(guān)聯(lián)-信號(hào)機(jī)。這可能導(dǎo)致各自包含很少線程的大量待定隊(duì)列。因此,在這些情形下,最差情況同步響應(yīng)時(shí)間會(huì)很低。
-競(jìng)爭(zhēng)域。競(jìng)爭(zhēng)域是競(jìng)爭(zhēng)相同資源的多個(gè)實(shí)體內(nèi)的區(qū)域。例如,可將進(jìn)程(相對(duì)于線程)視為競(jìng)爭(zhēng)域。
-中斷。為了得到最快響應(yīng)事件,通常將中斷聚合在一起成為排他專用的待定隊(duì)列。
與定時(shí)器隊(duì)列不同,待定隊(duì)列是純粹基于事件的。這些事件是-推送事件,其中,將新線程引入一待定隊(duì)列,該待定隊(duì)列要么已經(jīng)存在,要么必須被創(chuàng)建。
-同步事件,其中,一個(gè)或更多個(gè)線程必須轉(zhuǎn)移進(jìn)就緒隊(duì)列結(jié)構(gòu)。
下面的章節(jié)描述在這些情況下的行為推送事件對(duì)于推送事件,TSPM必須(根據(jù)所識(shí)別的排序操作符metric
)確定在鏈表的何處插入線程描述符。必須考慮兩種情況-推送至現(xiàn)存的待定隊(duì)列-推送至新的待定隊(duì)列前一情況是普通的,按順序詢問鏈表,直到找到插入點(diǎn)為止。在升序優(yōu)先級(jí)的經(jīng)典情況下,將排序操作符設(shè)置為“大于”(C_PEND_MNGR_PUSH_GTR)并搜索現(xiàn)存的鏈表。由新線程的metric
大于下一鏈表成員的metric
時(shí)的點(diǎn)來定義插入點(diǎn)。
當(dāng)需要新的待定隊(duì)列時(shí),就在插入新線程條目之前,發(fā)生待定隊(duì)列的插入。
同步事件可以從中斷控制器(TSIC)或通過命令接口接收同步事件。同步可以以兩種模式發(fā)生-原意模式,其中,命令參數(shù)對(duì)WME索引進(jìn)行原意引用。
-相關(guān)模式,其中,在線程描述符內(nèi)的字段和同步原語(yǔ)內(nèi)的字段之間尋求相關(guān)性。
在原意模式下,因?yàn)閷⒕€程描述符的索引傳遞給命令,所以不需要搜索最適任候選項(xiàng)。相關(guān)模式需要首先找到最適任同步候選項(xiàng)。
相關(guān)模式包括三個(gè)子類型-正常,其中,只有指定待定隊(duì)列內(nèi)的最適任候選被同步。
-多播,其中,指定待定隊(duì)列內(nèi)的所有適任候選被同步。
-廣播,其中,所有待定隊(duì)列內(nèi)的所有適任候選被同步。
通過與命令傳遞的參數(shù)以及也在命令內(nèi)的元素標(biāo)識(shí)符來識(shí)別最適任候選。該元素標(biāo)識(shí)符規(guī)定用哪一個(gè)候選線程描述符的字段與所傳遞的參數(shù)進(jìn)行比較以識(shí)別適任性。在正常模式下,算法向下對(duì)待定隊(duì)列疊代,直到找到一適任候選項(xiàng)為止,在該點(diǎn)處將該適任候選項(xiàng)從該等待隊(duì)列移除(在適用的情況下從定時(shí)器隊(duì)列移除),并轉(zhuǎn)發(fā)至就緒隊(duì)列結(jié)構(gòu)。對(duì)于多播和廣播模式,該處理繼續(xù)直到該等待隊(duì)列或各個(gè)等待隊(duì)列分別窮盡為止。
特殊條件與移除定時(shí)器隊(duì)列的成員相關(guān)聯(lián)。
參見下面的章節(jié)以得到更多細(xì)節(jié)。
定時(shí)隊(duì)列的結(jié)構(gòu)和操作被引入超時(shí)隊(duì)列的每個(gè)新線程最初包含一絕對(duì)超時(shí)值。該值可以是接口管理器從作為參數(shù)接收到的32位相對(duì)或絕對(duì)超時(shí)中得出的。
定時(shí)器隊(duì)列使用C_THREAD_PENDING_QUEUE_TIMER_PTR_INDEX來存儲(chǔ)按其超時(shí)排序的線程描述符的鏈表,最接近的超時(shí)位于鏈表的頭部。要注意,通過由C_THREAD_PENDING_QUEUE_PRIORITY_PTR_INDEX所索引的第二組指針,這些線程描述符也會(huì)是優(yōu)先級(jí)列表的成員。圖51示出了超時(shí)隊(duì)列的基本結(jié)構(gòu)。在定時(shí)器隊(duì)列的個(gè)體線程描述符成員內(nèi)并不存儲(chǔ)絕對(duì)超時(shí)值,而是存儲(chǔ)與直接前任的超時(shí)的相對(duì)超時(shí)。使用浮點(diǎn)表示將該值存儲(chǔ)在一16位字段內(nèi),其中,浮點(diǎn)定時(shí)器格式的尾數(shù)包括帶有5位指數(shù)的11個(gè)有效位的絕對(duì)數(shù)。總是將定時(shí)器隊(duì)列的頭元素的超時(shí)字段復(fù)制到TSPM的TimerHeadTimeout寄存器,并在之后重置該超時(shí)字段。
定時(shí)同步架構(gòu)的操作使用幾個(gè)持久的內(nèi)部資源-TimerHeadIndex;定時(shí)器鏈表的頭指針-TimerNumElements;定時(shí)器隊(duì)列中的元素的數(shù)量-TimerHeadTimeout;頭元素的超時(shí)的快照-TimerDivider;系統(tǒng)時(shí)鐘的預(yù)置器-TimerDividercounter;分割器(divider)的倒計(jì)時(shí)資源-TimerCounter;根據(jù)每個(gè)預(yù)置的時(shí)鐘滴答(tick)而單調(diào)增加的32位計(jì)數(shù)器資源-TimerErrorAdjustCounter;用于累積和包容錯(cuò)誤的32位計(jì)數(shù)器如果TimerDivider寄存器被設(shè)置為0,則禁用了定時(shí)器功能。
定時(shí)器隊(duì)列循環(huán)行為圖52示出了在各預(yù)置的時(shí)鐘滴答發(fā)生的操作。當(dāng)沒有基于待定定時(shí)器的同步(定時(shí)器隊(duì)列處于等待狀態(tài))時(shí),TimerHeadTimeout為非零,因此不采取行動(dòng)。當(dāng)TimerHeadTimeout變?yōu)?并且定時(shí)器隊(duì)列不為空時(shí),系統(tǒng)根據(jù)TimerErrorAdjustCouner的值采用兩個(gè)狀態(tài)中的一個(gè)狀態(tài)。如果TimerErrorAdjustCounter為零,那么在此循環(huán)發(fā)生TimerHeadTimeout的期滿,并且創(chuàng)建一定時(shí)器同步原語(yǔ),該原語(yǔ)將最終引起從該定時(shí)器隊(duì)列(和用于維護(hù)目的的優(yōu)先級(jí)隊(duì)列)的彈出。之后,TimerErrorAdjustCounter立即單調(diào)遞增,直到完成了對(duì)時(shí)間事件原語(yǔ)的處理之后將其重置為止。
定時(shí)器隊(duì)列事件存在引起定時(shí)器隊(duì)列操作的三種事件-時(shí)間事件原語(yǔ)(C_TSPM_CMD_TIME_PRIMITIVE)-超時(shí)為非零的線程推送事件(超時(shí)設(shè)置為零的線程未放置在定時(shí)器隊(duì)列中)-非基于定時(shí)器的同步事件,其導(dǎo)致從定時(shí)器隊(duì)列中移除線程(作為維護(hù)行為)。
圖53示出了超時(shí)邏輯的操作模式的非?;镜谋硎?。當(dāng)在等待狀態(tài)中時(shí),TimerHeadTimeout為非零并且根據(jù)預(yù)置的時(shí)鐘單調(diào)遞減。在該狀態(tài)中,TimerErrorAdjustCounter保持為零。當(dāng)TimerHeadTimeout到達(dá)0時(shí),定時(shí)器隊(duì)列的頭已超時(shí),并且FSM轉(zhuǎn)變到活動(dòng)狀態(tài),在活動(dòng)狀態(tài)中為彈出操作提供服務(wù)。在該狀態(tài)內(nèi),TimerHeadTimeout為零并且TimerErrorAdjustCounter在每個(gè)循環(huán)單調(diào)增加。該錯(cuò)誤計(jì)數(shù)值用于確定對(duì)前一超時(shí)事件采取行動(dòng)所花費(fèi)的時(shí)間是否使得后續(xù)超時(shí)事件適任。一旦沒有未完結(jié)的其他適任超時(shí)事件,則FSM轉(zhuǎn)變回等待狀態(tài)并且TimerErrorAdjustCounter被重置。
從定時(shí)器的潛在序列得到的彈出操作中的第一個(gè)是根據(jù)線程描述符內(nèi)的重置超時(shí)字段推斷出的(見圖52)。作為定時(shí)器隊(duì)列的頭,該線程總是被彈出。之后,TSPM必須評(píng)估隨后的彈出是否適任,為了使其容易,使用另外的資源TimerLastError來保持所有累積彈出線程描述符的超時(shí)增量(delta)之和。對(duì)于定時(shí)器隊(duì)列的后續(xù)成員的各個(gè)進(jìn)一步的疊代,從TimerErrorAdjustCounter中減去TimerLastError,創(chuàng)建歸一的錯(cuò)誤計(jì)數(shù)值,將其與位于定時(shí)器隊(duì)列頭部的新線程描述符的超時(shí)進(jìn)行比較。如果該線程內(nèi)的超時(shí)增量小于所述歸一的錯(cuò)誤計(jì)數(shù)值,則也應(yīng)該彈出該線程描述符。TimerLastError最初為零,因此,將線程超時(shí)增量直接與TimerErrorAdjustCounter進(jìn)行比較。圖54示出了在線程1的超時(shí)已流逝并且相關(guān)的彈出操作已發(fā)生之后的前一定時(shí)器隊(duì)列結(jié)構(gòu)。要注意,TimerLastError已被線程2的增量更新,線程1彈出操作的持續(xù)時(shí)間意味著線程2現(xiàn)在也適任了。
圖55示出了在彈出線程2之后隊(duì)列的狀態(tài)。要注意,已將線程2的增量添加到TimerLastError,創(chuàng)建了線程描述符增量之和的運(yùn)行中的累積。還要注意,對(duì)線程2的彈出操作花費(fèi)了足夠長(zhǎng)的時(shí)間,從而線程3現(xiàn)在適任了。
圖56示出了在彈出線程3之后的狀態(tài)。在該情況下,后一線程(線程4)不適任于彈出,所以定時(shí)器隊(duì)列的狀態(tài)可返回至等待。必須如所示出地重置TimerHeadTimeout。
要注意,當(dāng)從活動(dòng)狀態(tài)轉(zhuǎn)變回等待狀態(tài)時(shí),必須正確地重置TimerHeadTimeout。這是通過從新定時(shí)隊(duì)列頭的增量中減去TimerErrorAdjustCounter和TimerLastError之間的差而實(shí)現(xiàn)的。
當(dāng)新線程被引入并推送至定時(shí)隊(duì)列時(shí),必須考慮兩種情況推送至定時(shí)隊(duì)列的頭部以及推送至定時(shí)隊(duì)列體內(nèi)。
-對(duì)于推送至頭部,將TimerHeadTimeout簡(jiǎn)單地設(shè)置為線程增量。在隊(duì)列為非空的情況下,將舊的頭描述符增量設(shè)置為TimerHeadTimeout減去新線程增量。
-對(duì)于推送至體內(nèi),定時(shí)器隊(duì)列塊必須巡視定時(shí)器鏈表以識(shí)別插入線程描述符的位置。然后調(diào)節(jié)鏈表中的下一個(gè)的增量以包容增加新線程的增量(從下一線程增量中減去該新線程增量)。
彈出操作無(wú)論是由于定時(shí)器還是由于外部事件同步事件而引起的彈出操作都類似地進(jìn)行處理。要考慮兩種情況在定時(shí)器隊(duì)列的頭部彈出線程的情況、以及不是這種情況的情況。在前一情況下,存在三種情形定時(shí)器隊(duì)列處于等待狀態(tài)、以及定時(shí)器隊(duì)列處于活動(dòng)狀態(tài)。
-對(duì)于從“等待中”定時(shí)器隊(duì)列的頭部進(jìn)行的彈出操作,將TimerHeadTimeout添加到定時(shí)器隊(duì)列的下一成員的定時(shí)器增量以形成新的TimerHeadTimeout(要注意,在基于定時(shí)器的彈出中,TimerHeadTimeout的值將總是為零)。
-對(duì)于從“活動(dòng)”定時(shí)器隊(duì)列的頭部進(jìn)行的并且TimerErrorAdjustCounter大于下一線程描述符中的增量(即,下一線程適任于基于定時(shí)器的同步)的彈出操作,使錯(cuò)誤計(jì)數(shù)器(TimerErrorAdjustCounter)重新基于所彈出的線程的增量。
-對(duì)于從“活動(dòng)”定時(shí)器隊(duì)列的頭部進(jìn)行的并且TimerErrorAdjustCounter不大于下一線程描述符中的增量(即,下一線程不適任于基于定時(shí)器的同步)的彈出操作,錯(cuò)誤計(jì)數(shù)器使將該增量遞減,并且用該結(jié)果來更新TimerHeadTimeout。定時(shí)器隊(duì)列有效地回到等待狀態(tài)。
在所彈出的線程描述符不是位于定時(shí)器鏈表頭部的情況下,必須將該定時(shí)器隊(duì)列中下一線程的增量遞增當(dāng)前被移除的線程內(nèi)的增量那么多。
方法接口除了用于待定隊(duì)列和定時(shí)器隊(duì)列的基本鏈表狀態(tài)操作(取得和設(shè)置狀態(tài))之外,待定管理器還提供了針對(duì)其接口的以下命令Synchronisation primitive(C_TSPM_CMD_SYNC_PRIMITIVE)調(diào)用者TSIF,TSICsynchronisation primitive命令發(fā)出控制包,該控制包釋放存儲(chǔ)在待定隊(duì)列內(nèi)的阻塞的線程描述符。下面示出了參數(shù)
Add thread to pending queue(將線程添加到待定隊(duì)列)調(diào)用者TSIF該命令將線程描述符添加到新的或現(xiàn)存的工作隊(duì)列。該命令向待定管理器暗示工作隊(duì)列中存在線程描述符。下面的表例示了線程描述符中與該命令相關(guān)的字段。
Process marker thread(處理標(biāo)記線程)調(diào)用者TSIF該命令簡(jiǎn)單地將標(biāo)記線程傳遞到調(diào)度管理器工作隊(duì)列。使用其以確保在標(biāo)記線程引起調(diào)度器拆卸(tear-down)的任何可能之前所有依賴線程都已被待定管理器處理。
Synchronisation primitive(同步原語(yǔ))調(diào)用者TSIF該命令向指定待定隊(duì)列發(fā)出同步原語(yǔ)。下面的參數(shù)出現(xiàn)在命令結(jié)構(gòu)中
Update metrics(更新量度)調(diào)用者TSIF該命令更新被阻塞線程的量度并使適當(dāng)?shù)拇?duì)列重新排序。如果所識(shí)別的線程不再阻塞,則可將該命令傳遞給TSSM。下面的參數(shù)出現(xiàn)在命令結(jié)構(gòu)中
Unlock pending queue(解鎖待定隊(duì)列)調(diào)用者TSIF該命令將待定隊(duì)列解鎖,從而當(dāng)該待定隊(duì)列變?yōu)榭諘r(shí),可將其釋放回空閑鏈表。下面的參數(shù)出現(xiàn)在命令結(jié)構(gòu)中
TSOM-輸出管理器輸出管理器管理派出隊(duì)列結(jié)構(gòu)(其引用下一執(zhí)行中線程的描述符)和當(dāng)前在執(zhí)行的線程的執(zhí)行量度。
1.1.1架構(gòu)TSOM的架構(gòu)以圖58所示的派出隊(duì)列結(jié)構(gòu)為中心。輸出管理器保持派出隊(duì)列描述符的鏈表,其中,每個(gè)DQD都通過ProcElementID字段與系統(tǒng)處理資源實(shí)例相關(guān)聯(lián)。DQD存在兩組元素,其緊密引用TSOM整體的功能。包括ProcElementID、量度0、量度1以及缺省量度0的第一組(以執(zhí)行為中心的元素)引用任務(wù)的執(zhí)行狀態(tài)并且在任務(wù)的執(zhí)行狀態(tài)內(nèi)進(jìn)行管理。包括根調(diào)度器索引、搶占索引以及下一搶占索引的第二組(以就緒隊(duì)列為中心的元素)引用等待執(zhí)行的線程的就緒隊(duì)列結(jié)構(gòu)。TSOM還管理向系統(tǒng)內(nèi)的處理資源實(shí)例發(fā)送帶外信號(hào)(通常為中斷)以及從就緒隊(duì)列結(jié)構(gòu)彈出線程描述符。
以執(zhí)行為中心的元素下面是對(duì)派出隊(duì)列描述符內(nèi)以執(zhí)行為中心的元素的用途的簡(jiǎn)要描述-ProcElementID其是存儲(chǔ)索引的靜態(tài)字段,所述索引引用派出隊(duì)列描述符與之耦合的處理資源實(shí)例。
-量度0、1是動(dòng)態(tài)更新的字段,用于存儲(chǔ)當(dāng)前在執(zhí)行的任務(wù)(包括“空閑任務(wù)”和潛在的多個(gè)斷電狀態(tài))的執(zhí)行量度。
-缺省量度0是靜態(tài)字段,用于支持優(yōu)化,由此,當(dāng)將當(dāng)前在執(zhí)行的線程推送進(jìn)SyetemWeaver服務(wù)器并因此根據(jù)定義變?yōu)榭臻e時(shí),可自動(dòng)恢復(fù)空閑量度。
以就緒隊(duì)列為中心的元素下面是對(duì)派出隊(duì)列描述符內(nèi)以就緒隊(duì)列為中心的元素的用途的簡(jiǎn)要描述-根調(diào)度器索引是對(duì)與派出隊(duì)列相關(guān)聯(lián)的調(diào)度根層的靜態(tài)引用。
-搶占索引是動(dòng)態(tài)字段,其存儲(chǔ)給定處理資源的下一次執(zhí)行的當(dāng)前最適任候選項(xiàng)。搶占索引完全在TSOM內(nèi)進(jìn)行管理,并且在適當(dāng)?shù)那闆r下被設(shè)置為派出隊(duì)列事件的結(jié)果。
-下一搶占索引是動(dòng)態(tài)字段,其存儲(chǔ)調(diào)度層級(jí)內(nèi)下一最適任線程的父親或者該線程索引自身。下一搶占索引僅由TSSM設(shè)置并且用作向TSOM通知最適任線程在就緒隊(duì)列結(jié)構(gòu)內(nèi)的位置的工具。TSOM通常在處理后重置該字段。
派出隊(duì)列事件派出隊(duì)列事件因兩種原因發(fā)生-重新調(diào)度事件只要當(dāng)調(diào)度管理器(TSSM)內(nèi)的重新調(diào)度操作識(shí)別出通常是對(duì)就緒隊(duì)列事件進(jìn)行處理(推送、彈出或量度操作)所引起的派出隊(duì)列所需的狀態(tài)變化(即搶占)時(shí),就會(huì)發(fā)生派出隊(duì)列事件。
-派出隊(duì)列彈出事件由搶占索引所引用的線程索引已被接口管理器(TSIF)彈出。利用派出隊(duì)列描述符自身內(nèi)的“派出隊(duì)列彈出”標(biāo)志(由C_DISPATCH_DESC_POPPED_FLAG所索引)向TSOM發(fā)信號(hào)以通知該事件。
在派出隊(duì)列彈出事件的情況下,被彈出線程轉(zhuǎn)變到僵尸狀態(tài)(見圖41),并且如果其不是已經(jīng)存在于那里,則將其推送回工作隊(duì)列,以由TSSM釋放。之后,TSOM解除該線程與就緒隊(duì)列層級(jí)的鏈接。
對(duì)于重新調(diào)度事件和派出隊(duì)列彈出事件兩者,對(duì)派出隊(duì)列事件的處理繼續(xù)下去以發(fā)起派出隊(duì)列描述符內(nèi)搶占索引的重新組裝(repopulation)。缺省地,如果下一搶占索引不是其自身權(quán)利內(nèi)的線程索引,則通過從下一搶占索引所識(shí)別的調(diào)度層開始向下巡視調(diào)度層級(jí)來裝該下一搶占索引。一旦完成了該組裝,則將所識(shí)別出的線程索引放入搶占索引字段內(nèi),并且將該線程從就緒隊(duì)列中虛擬地彈出,即,該線程從就緒狀態(tài)轉(zhuǎn)變到彈出狀態(tài)(見圖41)。通過對(duì)最適任線程加鎖、將其標(biāo)記為已彈出以及標(biāo)記一事件將其發(fā)回TSSM以用于重新調(diào)度,可使虛擬彈出變得明顯。
在某些情況下,派出隊(duì)列事件導(dǎo)致中斷。如果重新組裝的搶占索引包含有效線程描述符索引并且啟用了中斷,則對(duì)與該派出隊(duì)列相關(guān)聯(lián)的系統(tǒng)處理器的中斷將在除以下情況的所有情況下被斷言,在該例外情況下,啟用了早期中斷斷言標(biāo)志并且下一搶占索引是線程,其中所述中斷已經(jīng)被TSSM斷言。
派出隊(duì)列量度也被更新。
雖然派出隊(duì)列量度代表當(dāng)前在運(yùn)行的線程的適任性,但是要么派出隊(duì)列被搶占,要么發(fā)生了派出隊(duì)列的彈出。因此,要么執(zhí)行中線程要被搶占(在此情況下,量度的更新在最差情況下會(huì)有點(diǎn)過早),要么執(zhí)行新線程,無(wú)論如何派出隊(duì)列量度都將被覆寫。
在發(fā)生了篡奪現(xiàn)存的下一搶占索引的重新調(diào)度的情況下,必須將該現(xiàn)存的搶占索引虛擬地沖出回到就緒隊(duì)列結(jié)構(gòu)(見圖41)。在TSOM內(nèi),該線程被簡(jiǎn)單地標(biāo)記為沖出并被推送回TSSM工作隊(duì)列以用于處理。
如果無(wú)法找到適任線程,則該操作簡(jiǎn)單地完成,客戶機(jī)(處理資源)將在這些情況下空閑。
設(shè)置派出隊(duì)列適任性量度派出隊(duì)列適任性量度反映了當(dāng)前運(yùn)行在由ProcElementID所索引的處理資源實(shí)例上的任務(wù)的執(zhí)行優(yōu)先級(jí)。然而,在某些優(yōu)化下,派出隊(duì)列適任性量度還可反映要開始執(zhí)行的任務(wù)的執(zhí)行優(yōu)先級(jí)。
派出隊(duì)列優(yōu)先級(jí)量度用于控制搶占,出于各種原因?qū)ζ溥M(jìn)行操作-開始新任務(wù)-當(dāng)前任務(wù)的完成-優(yōu)先級(jí)倒置-功率管理在所有情況下,目的是要調(diào)節(jié)對(duì)就緒隊(duì)列進(jìn)行調(diào)度的操作。在更新導(dǎo)致修改池根節(jié)點(diǎn)的情況下,將該節(jié)點(diǎn)標(biāo)記到TSSM,以用于重新調(diào)度操作。對(duì)于池參與者和非池參與者內(nèi)的量度傳播的更多細(xì)節(jié),請(qǐng)見上文。
作為一種優(yōu)化,當(dāng)處理資源實(shí)例將當(dāng)前在執(zhí)行的線程推送回SystemWeaver內(nèi)的就緒或阻塞狀態(tài)時(shí),執(zhí)行優(yōu)先級(jí)被自動(dòng)重置為缺省量度。
方法接口除了針對(duì)派出隊(duì)列鏈表的基本狀態(tài)操作(取得和設(shè)置狀態(tài))之外,輸出管理器還提供針對(duì)其接口的以下命令A(yù)utomated executing metric update(C_TSOM_CMD_SERVICE_TIME_SLICE_EXPIRE)調(diào)用者TSIF該命令針對(duì)所識(shí)別出的處理器ID自動(dòng)修改派出隊(duì)列內(nèi)保持的量度的量度0的最低有效位。因?yàn)閰?shù)是處理器的標(biāo)識(shí)而不是派出隊(duì)列描述符自身,所以該命令最初巡視派出隊(duì)列描述符鏈表以尋找適當(dāng)?shù)拿枋龇?。所述修改是?jiǎn)單地反轉(zhuǎn)所述最低有效位,假設(shè)適當(dāng)設(shè)置了量度字段的保留部分,則這具有這樣的效果不管優(yōu)先級(jí)是升序還是降序,都降低執(zhí)行中線程的優(yōu)先級(jí)。
下面示出了參數(shù)
Set dispatch queue metrics(設(shè)置派出隊(duì)列量度)調(diào)用者TSIF(來自明確的系統(tǒng)調(diào)用)該命令為特定派出隊(duì)列設(shè)置執(zhí)行量度。下面的參數(shù)存在于命令結(jié)構(gòu)中
Set default dispatch queue metrics(設(shè)置缺省派出隊(duì)列量度)調(diào)用者TSIF該命令將特定派出隊(duì)列的執(zhí)行metric(0)重置為缺省值(也保持在該派出隊(duì)列內(nèi))。該函數(shù)沒有參數(shù)。
Dispatch queue event(C_SCHED_ENTRY_DISPATCH_LIST)調(diào)用者TSSM該命令在就緒隊(duì)列的狀態(tài)變化需要時(shí)使派出隊(duì)列描述符被更新。
TSSM-調(diào)度管理器調(diào)度管理器對(duì)就緒隊(duì)列結(jié)構(gòu)的父子鏈接中固有的調(diào)度判定進(jìn)行管理。
架構(gòu)TSSM排他地從其工作隊(duì)列接口得到命令供給,并且是純事件驅(qū)動(dòng)的。然而,特定行為是幾個(gè)命令所公有的,下面描述該行為重新調(diào)度重新調(diào)度函數(shù)根據(jù)調(diào)度層級(jí)中的一定義點(diǎn)重新評(píng)估調(diào)度判定。該重新調(diào)度操作是工作守恒的,除與層級(jí)的其狀態(tài)可被一事件可設(shè)想地影響的部分相關(guān)聯(lián)的工作之外不進(jìn)行其他工作。
重新調(diào)度函數(shù)有一個(gè)特別有趣的參數(shù)UpdateRequired。UpdateRequired用于在調(diào)度器層操作之間傳播更新狀態(tài)。例如,雖然仍然必須管理其他狀態(tài),但是不對(duì)子層中的判定進(jìn)行更新的彈出操作不需要引起父層內(nèi)的整個(gè)調(diào)度循環(huán)。在此情況下,UpdateRequired為假。
圖60示出了重新調(diào)度操作的基本流程。層內(nèi)調(diào)度器執(zhí)行層內(nèi)的調(diào)度,并導(dǎo)致層父親頭索引指針的更新。層間調(diào)度器面向派出節(jié)點(diǎn)對(duì)調(diào)度層級(jí)內(nèi)的連續(xù)層進(jìn)行縮放(scale)。要注意,用父索引調(diào)用層間調(diào)度函數(shù),從而立即縮放層級(jí)的級(jí)別。池層間調(diào)度是特殊情況的調(diào)度算法,其是從單個(gè)節(jié)點(diǎn)(池根節(jié)點(diǎn))扇出到多個(gè)節(jié)點(diǎn)(池靜態(tài)節(jié)點(diǎn))的唯一算法。
該章節(jié)的其余部分描述調(diào)度算法的操作。
層內(nèi)調(diào)度器最基本的調(diào)度操作是遍歷調(diào)度層內(nèi)的元素的鏈表以識(shí)別最適任的,并據(jù)此更新父親的頭指針。
在普通情況下,在將適當(dāng)描述符推送至空調(diào)度層的情況下,無(wú)條件地更新父親的頭指針和元素的數(shù)量,并且將量度從新孩子有條件地傳播(根據(jù)量度傳播操作符)到父親。
圖61示出了推送操作的更一般的情況。當(dāng)前選項(xiàng)以及候選選擇的有效性是以下多個(gè)因素的組合-該選擇必須具有可被調(diào)度的內(nèi)容。對(duì)于線程,這總是為真,但是對(duì)于調(diào)度器,這取決于其從屬層級(jí)的內(nèi)容。
-如果該描述符是調(diào)度器,則其一定不能是休眠的,也一定不能設(shè)置其無(wú)效選擇標(biāo)志。
-如果該描述符是標(biāo)準(zhǔn)線程,則其一定不能被加鎖,其也一定不能位于工作隊(duì)列中。
-如果該描述符是標(biāo)記線程,則父親的總依賴計(jì)數(shù)值必須為零,并且該標(biāo)記線程必須是層中剩下的唯一條目。
要注意,候選僅與當(dāng)前選擇(前一調(diào)度操作的最適任描述符)進(jìn)行比較,如果該候選項(xiàng)擊敗獲勝者,則其一定是新的獲勝者。如上所述,“調(diào)度對(duì)”與父調(diào)度層內(nèi)保持的算法相關(guān)?!案赂赣H”變量將這樣的指令帶回調(diào)用者,即,作為該操作的結(jié)果,此層的父親也應(yīng)被更新。
在重新調(diào)度的一般情況下,例如,在已更新了量度的情況下或者在發(fā)生了彈出的情況下,必須重新評(píng)估整層以尋找新的最適任候選項(xiàng)。如圖62所示,該處理運(yùn)行圖61的操作多次,直到已重新評(píng)估整層為止。
層間調(diào)度層間調(diào)度在每個(gè)調(diào)度器層運(yùn)行一次,其針對(duì)每個(gè)調(diào)度事件可能達(dá)到幾次。層間調(diào)度高度依賴于父親的類型??偠灾瑢娱g調(diào)度持續(xù)調(diào)用層內(nèi)調(diào)度,直到父親變?yōu)榕沙鲫?duì)列為止。這有一種例外,該例外是遇到池分布節(jié)點(diǎn)的情況。
圖63示出了層間調(diào)度的基本流程。存在與派出隊(duì)列描述符(DQD)父親以及池根節(jié)點(diǎn)(PRN)父親相關(guān)聯(lián)的唯一行為。然而,在其他情況下,層間調(diào)度器簡(jiǎn)單地用當(dāng)前父親來替換當(dāng)前子索引(從而沿調(diào)度層級(jí)向上疊代)并重新調(diào)用其自身。
圖64示出了層間調(diào)度例程中的派出隊(duì)列處理。首先,根據(jù)在派出隊(duì)列描述符(DQD)中定義的算法,針對(duì)在調(diào)度器根節(jié)點(diǎn)內(nèi)保持的量度,來調(diào)度包含在DQD內(nèi)的執(zhí)行量度。如果該操作確定需要搶占,則根據(jù)啟動(dòng)重新調(diào)度操作的事件的類型對(duì)DQD下一搶占索引進(jìn)行更新。如果該事件是線程推送,則將被調(diào)度的線程索引直接放置在下一搶占索引字段中,否則使用調(diào)度器根節(jié)點(diǎn)索引。然后指向TSOM,疊代調(diào)度層級(jí)以尋找該線程描述符。
池層間調(diào)度池層間調(diào)度用于識(shí)別應(yīng)該選擇哪個(gè)(如果有的話)相關(guān)聯(lián)的處理資源實(shí)例為在當(dāng)前池內(nèi)保持的線程描述符提供服務(wù)。在該意義上,池層間調(diào)度以獨(dú)特的方式工作,因?yàn)榕c這里描述的所有其他調(diào)度算法不同,其通常尋找最不適任的候選項(xiàng)。
圖66示出了在圖65中用圖形表示的池層間調(diào)度操作的流程。最初的層內(nèi)調(diào)度操作確定來自該調(diào)度層級(jí)的候選是否比執(zhí)行中任務(wù)中的任何一個(gè)更適任,如池分配層內(nèi)的池靜態(tài)節(jié)點(diǎn)內(nèi)保持的量度所示。有兩種結(jié)果,對(duì)是否需要更新的指示以及對(duì)必須進(jìn)行更新的節(jié)點(diǎn)的識(shí)別。
該算法然后繼續(xù)進(jìn)行,從由池根節(jié)點(diǎn)的適當(dāng)?shù)摹皀ext(下一)指針”所指示的池靜態(tài)節(jié)點(diǎn)開始,疊代遍整個(gè)池分配層。
對(duì)于每次循環(huán),除了管理維護(hù)函數(shù)(諸如維護(hù)線程計(jì)數(shù)器和其他狀態(tài))之外,還針對(duì)池附加層調(diào)用層間調(diào)度。作為正常的情況,繼續(xù)層間調(diào)度以沿著調(diào)度的整個(gè)層級(jí)向上傳播,直到到達(dá)派出節(jié)點(diǎn)為止。層間調(diào)度采用參數(shù)“update required(需要更新)”,其指示其他調(diào)度層是否應(yīng)該完全重新評(píng)估該調(diào)度判定。在池間調(diào)度的環(huán)境中,在兩種情況下設(shè)置該標(biāo)志-當(dāng)前在處理的池靜態(tài)節(jié)點(diǎn)是這樣的節(jié)點(diǎn),該節(jié)點(diǎn)被池內(nèi)調(diào)度識(shí)別為用于處理池根節(jié)點(diǎn)之下的最適任線程的最適任節(jié)點(diǎn)。
-池根節(jié)點(diǎn)之下的層級(jí)沒有任何適任調(diào)度候選項(xiàng)。
池層內(nèi)調(diào)度圖67示出了池層內(nèi)調(diào)度的流程。在第一個(gè)實(shí)例中存在一種優(yōu)化,其減少推送單一操作的調(diào)度時(shí)間,這提供了系統(tǒng)對(duì)于新任務(wù)變?yōu)榭捎玫捻憫?yīng)性。
假設(shè)這不是排他推送操作,則調(diào)度操作將當(dāng)前選項(xiàng)和候選項(xiàng)設(shè)置為池內(nèi)的前兩個(gè)PSN節(jié)點(diǎn)。該算法然后進(jìn)入繞整個(gè)池分配層的循環(huán)。對(duì)于每次疊代,針對(duì)候選調(diào)度當(dāng)前選擇。要注意,對(duì)于池分配層和其他調(diào)度層使用相同的調(diào)度算法,然而,所選擇的個(gè)體算法可能不同,這是因?yàn)樵诖饲樾蜗?,正確的選項(xiàng)根據(jù)正常標(biāo)準(zhǔn)表現(xiàn)出最不適任量度。
如果候選主管(preside over)當(dāng)前選擇,則將當(dāng)前選擇更新為候選,將候選更新為該層中的下一條目,并且處理繼續(xù)直到候選變?yōu)镻RN為止。
在排他的推送操作中,避免了該疊代。將當(dāng)前選擇和更新節(jié)點(diǎn)簡(jiǎn)單地設(shè)置為該P(yáng)RN(其定義了當(dāng)前調(diào)度選擇)的父親,并且候選是該P(yáng)RN自身。
在所有情況中,然后檢查池根節(jié)點(diǎn)以尋找可調(diào)度內(nèi)容,如果沒有,那么設(shè)置“不更新”狀態(tài),并且該算法返回。然而,如果存在可調(diào)度內(nèi)容,則處理繼續(xù)進(jìn)行至第二階段,由此針對(duì)PRN自身調(diào)度來自PRN的現(xiàn)存選擇(在排他推送操作中)或疊代的結(jié)果(在其他情況下)。如果PRN在該競(jìng)賽中勝出,那么需要更新,否則不需要。
示例圖68示出了與將線程描述符(節(jié)點(diǎn)#5)推送進(jìn)靜態(tài)調(diào)度元素(節(jié)點(diǎn)#3)相關(guān)聯(lián)的TSSM調(diào)度器處理。第一個(gè)層內(nèi)調(diào)度操作發(fā)生在重新調(diào)度函數(shù)的環(huán)境內(nèi)并且是相對(duì)于父節(jié)點(diǎn)#3的。然后,重新調(diào)度沿層級(jí)向上移動(dòng)一層,并且調(diào)用與父節(jié)點(diǎn)#2的層間調(diào)度。此疊代之后緊鄰的疊代尋找父節(jié)點(diǎn)#1,其是DQD。因此,沒有針對(duì)層內(nèi)調(diào)度器的其他調(diào)用,并且在存儲(chǔ)在根節(jié)點(diǎn)內(nèi)的最適任候選項(xiàng)的量度和存儲(chǔ)在派出節(jié)點(diǎn)內(nèi)的執(zhí)行中線程的量度之間進(jìn)行調(diào)度比較。在此情況下,搶占是適當(dāng)?shù)模⑶覍⑴沙鲫?duì)列事件發(fā)送至TSOM。
圖69示出了更多級(jí)聯(lián)的調(diào)度層級(jí)。這里,針對(duì)層級(jí)的附加層進(jìn)行對(duì)層內(nèi)調(diào)度函數(shù)的附加調(diào)用。但是要注意,當(dāng)引起重新調(diào)度操作的調(diào)度事件在其范圍之外時(shí),調(diào)度層5和3保持不受影響。
圖70給出了第三示例,在此情況下為池調(diào)度操作。與以前一樣,其中發(fā)生了線程推送事件的層要經(jīng)受層內(nèi)調(diào)度操作,在該示例中,新線程是池根層中最適任的。然后,池層間調(diào)度器進(jìn)行對(duì)池層內(nèi)調(diào)度器的調(diào)用,以確定任何系統(tǒng)處理資源是否應(yīng)被新到達(dá)的線程搶占。在此情況下,池層內(nèi)調(diào)度的結(jié)果是在WME索引7處的與派出隊(duì)列描述符相關(guān)聯(lián)的處理資源實(shí)例應(yīng)被搶占。
然后,池層間調(diào)度循環(huán)遍池分配層,首先在節(jié)點(diǎn)4上調(diào)用層間調(diào)度。繼而層間調(diào)度調(diào)用層內(nèi)調(diào)度以更新調(diào)度器層1,但是因?yàn)檫@不是被搶占的層,所以不需要窮舉調(diào)度,將處理限制為維護(hù)狀態(tài)信息,因此,沒有到達(dá)TSOM的派出隊(duì)列事件,也沒有到達(dá)系統(tǒng)處理資源的中斷。
下一調(diào)用是層2上的層間調(diào)度。在此情況下,適當(dāng)?shù)卣{(diào)度該層以確立新推送的線程描述符是否比任何其他候選項(xiàng)更為適任。最終將候選項(xiàng)量度與存儲(chǔ)在派出隊(duì)列描述符內(nèi)的執(zhí)行中線程的量度進(jìn)行比較,以確定搶占是否是適當(dāng)?shù)摹T谠撌纠?,相?yīng)地將派出隊(duì)列事件發(fā)送至TSOM并且對(duì)系統(tǒng)處理資源實(shí)例中斷加標(biāo)記。
再一次,僅僅重新評(píng)估推送線程事件的范圍所及的那些調(diào)度層。
方法接口排他地通過工作隊(duì)列指向TSSM。
Service thread descriptor event(服務(wù)線程描述符事件)調(diào)用者TSIF,TSPM,TSOM該命令的行為依賴于接收到的線程的標(biāo)志內(nèi)的設(shè)置-如果設(shè)置了推送或沖出標(biāo)志,則父親的總線程元素計(jì)數(shù)值增加。如果設(shè)置了彈出標(biāo)志,則父親的總線程元素計(jì)數(shù)值減小(要注意,以上的組合的凈效果可能是空(NULL))。
-設(shè)置了推送標(biāo)志的線程然后被鏈接到就緒隊(duì)列層級(jí)。在其轉(zhuǎn)變離開阻塞狀態(tài)的情況下,依賴線程的父計(jì)數(shù)值也減小。
-標(biāo)記線程唯一的專有行為是將父親解鎖(將調(diào)度器層轉(zhuǎn)變到“待釋放”狀態(tài),見圖42)。
-TSSM請(qǐng)求在處理該命令時(shí)釋放在僵尸狀態(tài)中接收到的任何線程描述符。
該命令總是請(qǐng)求重新調(diào)度。
Reschedule pool distribution tier(重新調(diào)度池分配層)調(diào)用者TSOM該命令由于執(zhí)行中的線程的量度改變而被調(diào)用。在派出描述符參與池的情況下,這些量度是通過分配層級(jí)而傳播的并最終調(diào)用該函數(shù)以重新評(píng)估調(diào)度判定。
Reschedule or delete scheduler tier(重新調(diào)度或刪除調(diào)度器層)調(diào)用者TSOMTSOM出于兩種原因調(diào)用該命令-由于執(zhí)行中線程的量度改變,其中派出描述符不參與池,重新評(píng)估搶占是否適當(dāng)。該操作傳遞調(diào)度根節(jié)點(diǎn)。在調(diào)度層在其層級(jí)中包含線程描述符的情況下,請(qǐng)求重新調(diào)度。
-為了刪除調(diào)度層,其中TSOM確定這樣做是適當(dāng)?shù)?。該確定基于加鎖的標(biāo)志、依賴線程計(jì)數(shù)值以及子元素的數(shù)量(分別為假、0和0)。描述符的實(shí)際釋放將其自身表示為對(duì)TSIM的請(qǐng)求。
Push an independent element(推送獨(dú)立元素)
調(diào)用者TSIF在初始化期間可使用該命令以將靜態(tài)調(diào)度層推送進(jìn)調(diào)度層級(jí),或者可在運(yùn)行時(shí)間期間動(dòng)態(tài)地使用其來添加線程描述符或動(dòng)態(tài)調(diào)度層級(jí)。
Update thread metrics(更新線程量度)調(diào)用者TSIF更新就緒隊(duì)列層級(jí)內(nèi)的線程描述符的量度。僅當(dāng)線程描述符處于就緒狀態(tài)(圖41)時(shí)才可更新量度。該命令引起重新調(diào)度。
Update scheduler state(更新調(diào)度器狀態(tài))調(diào)用者TSIF該命令使得能夠更新調(diào)度器算法、量度和量度傳播算法。該命令引起重新調(diào)度。
Activate scheduler tier(激活調(diào)度器層)調(diào)用者TSIF該命令激活休眠的調(diào)度器層。該命令引起重新調(diào)度。
De-activate scheduler tier(去激活調(diào)度器層)調(diào)用者TSIF該命令去激活休眠的調(diào)度器層。
TSMM-存儲(chǔ)器管理器存儲(chǔ)器管理器(圖71)提供用于聚合對(duì)TCM的訪問的復(fù)用/解復(fù)用行為。它還提供加鎖能力以確保在多個(gè)子塊之間共享的資源的完整性。
架構(gòu)從架構(gòu)的角度,存儲(chǔ)器管理器主要可被視為復(fù)用/解復(fù)用器,其聚合六個(gè)可能的請(qǐng)求者中對(duì)TCM的訪問。它還在多個(gè)子塊嘗試訪問相同的資源的情況下通過實(shí)現(xiàn)帶鎖的高速緩存來保持WME的完整性。
訪問聚合訪問聚合由調(diào)度器控制。該調(diào)度器是非對(duì)稱的-TSIF具有最高優(yōu)先級(jí)-TSOM具有次高優(yōu)先級(jí)-所有剩余請(qǐng)求者具有相等的優(yōu)先級(jí),并按工作守恒的輪轉(zhuǎn)方式對(duì)待。
帶鎖的高速緩存每個(gè)塊分配一至四把鎖。這些數(shù)量表示子塊請(qǐng)求者可排他訪問的WME的數(shù)量。阻塞請(qǐng)求已加鎖資源的子塊,直到該資源變?yōu)榭捎?。多個(gè)塊之間針對(duì)同一資源的競(jìng)爭(zhēng)通過優(yōu)先級(jí)解決。
調(diào)度序列圖推送事件圖72中的序列圖示出了推送事件之后的子塊間交互。要注意,引入工作隊(duì)列來存儲(chǔ)命令,因?yàn)門SSM和TSOM自身都是單線程的。請(qǐng)參照?qǐng)D68來獲得代表性調(diào)度層級(jí)。
推送事件之前的狀態(tài)為,線程#4是派出隊(duì)列描述符#1內(nèi)的當(dāng)前搶占索引。由于派出隊(duì)列描述符#1被推送進(jìn)TSOM工作隊(duì)列,第一次重新調(diào)度識(shí)別出線程#5比線程#4更適任。
TSOM工作隊(duì)列中的派出隊(duì)列描述符引起TSOM內(nèi)的派出隊(duì)列事件。該事件虛擬地彈出線程描述符#5并相應(yīng)地設(shè)置派出隊(duì)列量度。該彈出操作引起就緒隊(duì)列的狀態(tài)改變,因此必須調(diào)用重新調(diào)度。這是通過將線程#5推送進(jìn)TSSM工作隊(duì)列同時(shí)設(shè)置彈出標(biāo)志而實(shí)現(xiàn)的。
因?yàn)榫€程#4先前已虛擬地彈出,所以現(xiàn)在需要被沖出回到就緒隊(duì)列結(jié)構(gòu)。這還構(gòu)成就緒隊(duì)列結(jié)構(gòu)內(nèi)的狀態(tài)改變,因此需要另一次重新調(diào)度。這是通過將線程#4推送進(jìn)TSSM就緒隊(duì)列結(jié)構(gòu)同時(shí)設(shè)置沖出標(biāo)志而實(shí)現(xiàn)的。
要注意,因?yàn)樘摂M彈出的線程和沖出的線程可能位于就緒隊(duì)列層級(jí)中大不相同的部分,所以第二次和第三次重新調(diào)度操作無(wú)法合并。
彈出事件圖73中的序列圖示出了當(dāng)從“虛擬”派出隊(duì)列彈出線程描述符時(shí)TSIF、TSOM和TSSM之間的交互。
彈出命令自身是TSIF通過命令接口或系統(tǒng)互聯(lián)而接收到的。TSIF通過將派出隊(duì)列描述符推送至TSOM工作隊(duì)列同時(shí)設(shè)置彈出標(biāo)志,而向TSOM發(fā)出派出隊(duì)列彈出命令。
TSOM工作隊(duì)列中的派出隊(duì)列描述符引起TSOM內(nèi)的派出隊(duì)列事件。派出隊(duì)列事件處理器指示TSSM請(qǐng)求將剛被彈出的線程描述符(在此情況下為線程#5)放回空閑鏈表中。然后由TSOM虛擬地彈出存儲(chǔ)有用于執(zhí)行的下一最適任候選的下一搶占索引。這表示就緒隊(duì)列結(jié)構(gòu)的狀態(tài)改變,因此TSOM指示TSSM重新調(diào)度,將下一搶占線程推送進(jìn)TSSM工作隊(duì)列同時(shí)設(shè)置彈出標(biāo)志。
權(quán)利要求
1.一種在多核處理器內(nèi)調(diào)度可執(zhí)行事務(wù)的方法,所述多核處理器具有多個(gè)處理器元件,所述方法包括設(shè)置至少一個(gè)分配隊(duì)列,所述分配隊(duì)列按對(duì)執(zhí)行的適任性順序排列可執(zhí)行事務(wù);設(shè)置多個(gè)個(gè)體可執(zhí)行事務(wù)調(diào)度器,其中,每個(gè)個(gè)體可執(zhí)行事務(wù)調(diào)度器包括調(diào)度算法,所述調(diào)度算法用于從準(zhǔn)備好執(zhí)行的多個(gè)候選可執(zhí)行事務(wù)中確定用于執(zhí)行的最適任可執(zhí)行事務(wù);將所述多個(gè)調(diào)度器鏈接在一起,從而提供多級(jí)調(diào)度器;以及從所述多級(jí)調(diào)度器將所述最適任可執(zhí)行事務(wù)輸出到所述至少一個(gè)分配隊(duì)列。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述多級(jí)調(diào)度器具有分層結(jié)構(gòu)。
3.根據(jù)權(quán)利要求1或2所述的方法,其中,所述可執(zhí)行事務(wù)中的一些或全部一起定義了一應(yīng)用,所述方法還包括在所述應(yīng)用的運(yùn)行時(shí)間期間開始執(zhí)行可執(zhí)行事務(wù);在所述運(yùn)行時(shí)間期間,動(dòng)態(tài)地創(chuàng)建新的個(gè)體可執(zhí)行事務(wù)調(diào)度器;以及將所述新的個(gè)體可執(zhí)行事務(wù)調(diào)度器鏈接到所述多級(jí)分層調(diào)度器。
4.根據(jù)權(quán)利要求3所述的方法,其中,鏈接新的動(dòng)態(tài)創(chuàng)建的個(gè)體可執(zhí)行事務(wù)調(diào)度器的步驟包括將準(zhǔn)備好執(zhí)行的一個(gè)或更多個(gè)可執(zhí)行事務(wù)分配給所述新的個(gè)體可執(zhí)行事務(wù)調(diào)度器。
5.根據(jù)權(quán)利要求3所述的方法,該方法還包括在所述動(dòng)態(tài)創(chuàng)建的個(gè)體可執(zhí)行事務(wù)調(diào)度器完成了對(duì)所標(biāo)記的所有可執(zhí)行事務(wù)的處理時(shí),對(duì)所述動(dòng)態(tài)創(chuàng)建的個(gè)體可執(zhí)行事務(wù)調(diào)度器解除鏈接;以及從所述多級(jí)分層調(diào)度器中移除所述個(gè)體可執(zhí)行事務(wù)調(diào)度器。
6.根據(jù)任一前述權(quán)利要求所述的方法,該方法還包括設(shè)置至少一個(gè)待定隊(duì)列,用于將所述候選可執(zhí)行事務(wù)提供給所述多個(gè)個(gè)體事務(wù)調(diào)度器。
7.根據(jù)任一前述權(quán)利要求所述的方法,該方法還包括為每個(gè)處理器元件設(shè)置派出隊(duì)列,所述派出隊(duì)列按在相關(guān)聯(lián)處理器元件上的執(zhí)行順序排列所述可執(zhí)行事務(wù)。
8.根據(jù)權(quán)利要求7所述的方法,該方法還包括將分配隊(duì)列中的一個(gè)與一特定處理器元件相關(guān)聯(lián),并將所述分配隊(duì)列的內(nèi)容直接輸出到所述相關(guān)聯(lián)處理器元件的所述派出隊(duì)列中。
9.根據(jù)權(quán)利要求7所述的方法,該方法還包括通過將分配隊(duì)列中的一個(gè)與多個(gè)處理器元件相關(guān)聯(lián),并且根據(jù)與所述派出隊(duì)列相關(guān)聯(lián)的處理器元件的適任性,將所述分配隊(duì)列的內(nèi)容輸出到所述相關(guān)聯(lián)處理器元件的一個(gè)或更多個(gè)派出隊(duì)列,以執(zhí)行特定可執(zhí)行事務(wù),從而設(shè)置了處理器元件的池。
10.根據(jù)權(quán)利要求9所述的方法,該方法還包括將分配隊(duì)列中的另一個(gè)的內(nèi)容輸出到所述處理器元件的池的派出隊(duì)列中的一個(gè)。
11.根據(jù)權(quán)利要求9或10所述的方法,該方法還包括通過將分配隊(duì)列中的另一個(gè)與另外的多個(gè)處理器元件相關(guān)聯(lián),并且根據(jù)與所述派出隊(duì)列相關(guān)聯(lián)的處理器元件的適任性,將所述分配隊(duì)列的內(nèi)容輸出到所述相關(guān)聯(lián)處理器元件的一個(gè)或更多個(gè)派出隊(duì)列,以執(zhí)行特定可執(zhí)行事務(wù),從而設(shè)置了處理器元件的另一池。
12.根據(jù)權(quán)利要求9至11中任一項(xiàng)所述的方法,其中,執(zhí)行特定可執(zhí)行事務(wù)的相關(guān)聯(lián)處理器元件的適任性取決于所述處理器元件的繁忙狀態(tài)。
13.根據(jù)權(quán)利要求12所述的方法,其中,處理器元件的所述繁忙狀態(tài)取決于已經(jīng)位于所述特定處理器元件的所述派出隊(duì)列中的可執(zhí)行事務(wù)的數(shù)量。
14.根據(jù)權(quán)利要求9至11中任一項(xiàng)所述的方法,其中,執(zhí)行特定可執(zhí)行事務(wù)的相關(guān)聯(lián)處理器元件的適任性取決于所述處理器元件的功率狀態(tài)。
15.根據(jù)權(quán)利要求11所述的方法,其中,一個(gè)或更多個(gè)所述處理器元件位于處理器元件的多個(gè)池中。
16.根據(jù)權(quán)利要求11所述的方法,該方法還包括這樣的步驟在處理器元件的池之間移動(dòng)可執(zhí)行事務(wù)。
17.根據(jù)權(quán)利要求7所述的方法,該方法還包括設(shè)置可執(zhí)行事務(wù)的至少一個(gè)時(shí)間片組,所述時(shí)間片組與所述處理器元件中的一個(gè)相關(guān)聯(lián),并且所述時(shí)間片組中的每個(gè)可執(zhí)行事務(wù)在相關(guān)聯(lián)處理器元件上具有預(yù)定義的執(zhí)行時(shí)間部分。
18.根據(jù)權(quán)利要求9至11中任一項(xiàng)所述的方法,該方法還包括設(shè)置可執(zhí)行事務(wù)的至少一個(gè)時(shí)間片組,所述時(shí)間片組與處理器元件的池相關(guān)聯(lián),并且所述時(shí)間片組中的每個(gè)可執(zhí)行事務(wù)在處理器元件的相關(guān)聯(lián)池上具有預(yù)定義的執(zhí)行時(shí)間部分。
19.根據(jù)權(quán)利要求17或18所述的方法,該方法還包括針對(duì)可執(zhí)行事務(wù)的每個(gè)時(shí)間片組,設(shè)置可執(zhí)行事務(wù)的一搶占組,可執(zhí)行事務(wù)的所述搶占組相對(duì)于可執(zhí)行事務(wù)的所述時(shí)間片組中的任何一個(gè),在相關(guān)聯(lián)的處理器元件或處理器元件的池上具有執(zhí)行優(yōu)先級(jí)。
20.根據(jù)權(quán)利要求19所述的方法,該方法還包括當(dāng)可執(zhí)行事務(wù)的所述搶占組在處理器元件的相關(guān)聯(lián)池中的其他處理器元件中的至少一個(gè)上執(zhí)行時(shí),提供在處理器元件的相關(guān)聯(lián)池中的處理器元件中的至少一個(gè)上具有預(yù)定義的執(zhí)行時(shí)間部分的可執(zhí)行事務(wù)的所述至少一個(gè)時(shí)間片組。
21.根據(jù)權(quán)利要求20所述的方法,該方法還包括使來自所述至少一個(gè)時(shí)間片組的可執(zhí)行事務(wù)在相關(guān)聯(lián)處理器元件上執(zhí)行;使所述可執(zhí)行事務(wù)對(duì)來自所述搶占組的可執(zhí)行事務(wù)退讓;以及當(dāng)來自所述搶占組的可執(zhí)行事務(wù)的執(zhí)行完成時(shí),在相關(guān)聯(lián)處理器元件上繼續(xù)執(zhí)行來自所述至少一個(gè)時(shí)間片組的所述可執(zhí)行事務(wù)。
22.根據(jù)權(quán)利要求9至16中任一項(xiàng)所述的方法,其中,處理器元件的池內(nèi)的每個(gè)處理器元件具有至少一個(gè)節(jié)能模式,并且所述方法還包括當(dāng)分配給處理器元件的池的可執(zhí)行事務(wù)的數(shù)量使得可用處理器元件的僅僅一部分用于執(zhí)行可執(zhí)行事務(wù)時(shí),將所述處理器元件的池內(nèi)的一個(gè)或更多個(gè)所述處理器元件置入第一節(jié)能模式。
23.根據(jù)權(quán)利要求22所述的方法,其中,所述處理器元件的池內(nèi)的每個(gè)處理器元件具有至少兩個(gè)節(jié)能模式,并且所述方法還包括在預(yù)定義的時(shí)間段后,將所述處理器元件的池內(nèi)的一個(gè)或更多個(gè)處理器元件置入第二節(jié)能模式,其中所述第二節(jié)能模式比所述第一節(jié)能模式節(jié)約更多能量。
24.根據(jù)權(quán)利要求22或23所述的方法,其中,按預(yù)定義的順序分配所述處理器元件的池內(nèi)的處理器元件,并且用于將可執(zhí)行事務(wù)分配給所述處理器元件的池內(nèi)的處理器元件的調(diào)度算法總是將可執(zhí)行事務(wù)分配給在所述預(yù)定義的順序中第一個(gè)可用的處理器元件。
25.根據(jù)權(quán)利要求22至24中任一項(xiàng)所述的方法,該方法還包括響應(yīng)于分配給處理器元件的池的可執(zhí)行事務(wù)的數(shù)量的增加,使所述處理器元件的池內(nèi)的當(dāng)前處于節(jié)能模式下的一個(gè)或更多個(gè)處理器元件返回到正常電力模式。
26.根據(jù)權(quán)利要求22至25中任一項(xiàng)所述的方法,其中,通過增加處理器元件將執(zhí)行的可執(zhí)行事務(wù)的最小執(zhí)行優(yōu)先級(jí)來發(fā)起所述至少一個(gè)節(jié)能模式。
27.根據(jù)任一前述權(quán)利要求所述的方法,該方法還包括識(shí)別可執(zhí)行事務(wù)以及多核處理器中至少一個(gè)的變化;以及作為識(shí)別到變化的結(jié)果,針對(duì)個(gè)體可執(zhí)行事務(wù)調(diào)度器,從多個(gè)準(zhǔn)備好執(zhí)行的候選可執(zhí)行事務(wù)中重新確定用于執(zhí)行的最適任可執(zhí)行事務(wù)。
28.根據(jù)權(quán)利要求27所述的方法,其中,針對(duì)受所識(shí)別出的變化所影響的每個(gè)個(gè)體可執(zhí)行事務(wù)調(diào)度器執(zhí)行重新確定的步驟。
29.根據(jù)任一前述權(quán)利要求所述的方法,其中,所述多核處理器內(nèi)的至少一個(gè)處理器元件包含可重新配置的邏輯,所述可重新配置的邏輯在運(yùn)行時(shí)間期間可重新配置,所述方法還包括為可重新配置的邏輯的每個(gè)配置提供可執(zhí)行事務(wù)的配置隊(duì)列,所述配置隊(duì)列列出準(zhǔn)備好執(zhí)行并且分配給所述可重新配置的處理器元件的特定配置的可執(zhí)行事務(wù);將與當(dāng)前選擇的配置實(shí)例相關(guān)聯(lián)的配置隊(duì)列的內(nèi)容輸出到所述可重新配置的處理器元件以用于執(zhí)行;以及當(dāng)?shù)竭_(dá)預(yù)定義的閾值時(shí),切換當(dāng)前選擇的配置實(shí)例。
30.根據(jù)權(quán)利要求29所述的方法,其中,切換配置實(shí)例的步驟還包括停止對(duì)與當(dāng)前選擇的配置相關(guān)聯(lián)的配置隊(duì)列的內(nèi)容的輸出;選擇可用配置實(shí)例中的另一個(gè),并且將可重新配置的邏輯的配置改變?yōu)榭捎门渲脤?shí)例中的所述選擇的另一個(gè);以及將與新選擇的配置實(shí)例相關(guān)聯(lián)的配置隊(duì)列的內(nèi)容輸出到所述可重新配置的處理器元件以用于執(zhí)行。
31.根據(jù)權(quán)利要求29或30所述的方法,其中,所述可重新配置的邏輯是存儲(chǔ)器。
32.根據(jù)權(quán)利要求29至31中任一項(xiàng)所述的方法,其中,所述預(yù)定義的閾值是為了保持所述應(yīng)用的完整性而必須執(zhí)行特定可執(zhí)行事務(wù)之前所允許的最大時(shí)間。
33.根據(jù)權(quán)利要求30所述的方法,其中,對(duì)另一配置實(shí)例的選擇依賴于各個(gè)配置隊(duì)列的長(zhǎng)度。
34.根據(jù)權(quán)利要求33所述的方法,其中,選擇與最長(zhǎng)的配置隊(duì)列相關(guān)聯(lián)的配置實(shí)例。
35.根據(jù)任一前述權(quán)利要求所述的方法,其中,所述多個(gè)個(gè)體可執(zhí)行事務(wù)調(diào)度器使用至少兩個(gè)不同的調(diào)度算法。
36.根據(jù)權(quán)利要求35所述的方法,其中,所使用的調(diào)度算法包括先入先出調(diào)度;基于優(yōu)先級(jí)的調(diào)度;輪轉(zhuǎn)調(diào)度;或加權(quán)公平隊(duì)列調(diào)度。
37.根據(jù)任一前述權(quán)利要求所述的方法,其中,使用專用存儲(chǔ)器中的指針來進(jìn)行所述多核處理器內(nèi)的可執(zhí)行事務(wù)的操作和/或分配,所述指針引用主存儲(chǔ)器,所述主存儲(chǔ)器包含指令,所述指令包括所述可執(zhí)行事務(wù)。
38.根據(jù)權(quán)利要求37所述的方法,其中,所述分配隊(duì)列或派出隊(duì)列是存儲(chǔ)在所述專用存儲(chǔ)器中的指針的鏈接集。
39.根據(jù)權(quán)利要求37或38所述的方法,其中,所述指針包括多個(gè)可執(zhí)行事務(wù)的參數(shù),所述可執(zhí)行事務(wù)的參數(shù)定義所述可執(zhí)行事務(wù)的特征,根據(jù)所述特征做出調(diào)度判定,并且其中,所述可執(zhí)行事務(wù)的參數(shù)用于調(diào)度可執(zhí)行事務(wù)。
40.根據(jù)權(quán)利要求39所述的方法,其中,所述調(diào)度算法隨時(shí)間操縱所述參數(shù)。
41.根據(jù)權(quán)利要求39或40所述的方法,其中,所述多個(gè)可執(zhí)行事務(wù)的參數(shù)包括可執(zhí)行事務(wù)的參數(shù)的第一和第二子集,并且其中,僅當(dāng)可執(zhí)行事務(wù)的參數(shù)的第一子集位于預(yù)定義的配置中時(shí),才利用可執(zhí)行事務(wù)的參數(shù)的所述第二子集。
42.一種在多核處理器內(nèi)調(diào)度可執(zhí)行事務(wù)的方法,所述可執(zhí)行事務(wù)定義應(yīng)用,并且所述多核處理器具有多個(gè)處理器元件,所述方法包括保持可執(zhí)行事務(wù)調(diào)度器的層級(jí),其中,所述層級(jí)適于根據(jù)所述應(yīng)用在使用時(shí)的要求來調(diào)度可執(zhí)行事務(wù),其中,所述調(diào)度器層級(jí)的每個(gè)級(jí)別包括至少一個(gè)調(diào)度器,并且其中,所述至少一個(gè)調(diào)度器包括至少一個(gè)規(guī)則,用于將所述可執(zhí)行事務(wù)排序成在一個(gè)或更多個(gè)所述處理器元件上執(zhí)行的最適任事務(wù)的順序。
43.一種在多核處理器中管理能耗的方法,所述多核處理器具有多個(gè)處理器元件,所述多個(gè)處理器元件布置成處理器元件的至少一個(gè)池,其中所述處理器元件的池內(nèi)的每個(gè)處理器元件具有至少一個(gè)節(jié)能模式,并且所述方法還包括當(dāng)分配給所述處理器元件的池的可執(zhí)行事務(wù)的數(shù)量使得可用處理器元件的僅僅一部分用于執(zhí)行可執(zhí)行事務(wù)時(shí),將所述處理器元件的池內(nèi)的一個(gè)或更多個(gè)所述處理器元件置入第一節(jié)能模式。
44.一種在多核處理器內(nèi)調(diào)度可執(zhí)行事務(wù)的方法,所述多核處理器具有多個(gè)處理器元件,所述多核處理器內(nèi)的至少一個(gè)處理器元件包含可重新配置的邏輯,所述可重新配置的邏輯在運(yùn)行時(shí)間期間可重新配置,所述方法包括為可重新配置的邏輯的每個(gè)配置提供可執(zhí)行事務(wù)的配置隊(duì)列,所述配置隊(duì)列列出準(zhǔn)備好執(zhí)行并且分配給所述可重新配置的處理器元件的特定配置的可執(zhí)行事務(wù);將與當(dāng)前選擇的配置實(shí)例相關(guān)聯(lián)的所述配置隊(duì)列的內(nèi)容輸出到所述可重新配置的處理器元件以用于執(zhí)行;以及當(dāng)?shù)竭_(dá)預(yù)定義的閾值時(shí),切換當(dāng)前選擇的配置實(shí)例。
45.一種計(jì)算機(jī)程序,其包括指令,所述指令當(dāng)被數(shù)字邏輯執(zhí)行時(shí),執(zhí)行如權(quán)利要求1至35中任一項(xiàng)所述的方法。
46.一種計(jì)算機(jī)可讀介質(zhì),其包含指令,所述指令當(dāng)被計(jì)算機(jī)執(zhí)行時(shí),執(zhí)行如權(quán)利要求1至35中任一項(xiàng)所述的方法。
全文摘要
本發(fā)明涉及在多核架構(gòu)中的調(diào)度。本發(fā)明涉及在多核處理器中調(diào)度線程。可以使用至少一個(gè)分配隊(duì)列和多級(jí)調(diào)度器來調(diào)度可執(zhí)行事務(wù),所述分配隊(duì)列按對(duì)執(zhí)行的適任性的順序排列可執(zhí)行事務(wù),所述多級(jí)調(diào)度器包括多個(gè)鏈接的個(gè)體可執(zhí)行事務(wù)調(diào)度器。它們每個(gè)包括一調(diào)度算法,用于確定用于執(zhí)行的最適任可執(zhí)行事務(wù)。從多級(jí)調(diào)度器將最適任可執(zhí)行事務(wù)輸出到所述至少一個(gè)分配隊(duì)列。
文檔編號(hào)G06F1/32GK1955931SQ200610131758
公開日2007年5月2日 申請(qǐng)日期2006年9月30日 優(yōu)先權(quán)日2005年9月30日
發(fā)明者馬克·大衛(wèi)·李佩特 申請(qǐng)人:科威爾公司, 富士通株式會(huì)社