專利名稱:無操作系統(tǒng)干預情況下調(diào)度os隔離定序器上的線程的機制的制作方法
技術(shù)領(lǐng)域:
本公開內(nèi)容一般涉及信息處理系統(tǒng),并且更具體地,涉及無操
作系統(tǒng)干預情況下OS隔離定序器上的線程執(zhí)行的調(diào)度和控制。
背景技術(shù):
為提高信息處理系統(tǒng)、諸如包括微處理器的那些信息處理系統(tǒng) 的性能,采用了硬件和軟件技術(shù)。在硬件方面,提高微處理器性能 的微處理器設(shè)計方案包括了更快的時鐘速度、流水線技術(shù)、分支預 測、超標量執(zhí)行、無序執(zhí)行和高速緩存。許多此類方案使得晶體管 數(shù)量增加,并且在一些情況下,甚至導致晶體管數(shù)量增加率大于性 能提高率。
其他性能增強涉及軟件技術(shù),而不是尋求完全通過增加晶體管 來提高性能。 一種已用于提高處理器性能的軟件方案稱為"多線程處 理"。在軟件多線程處理中,指令流可分成可以并行執(zhí)行的多個指令 流?;蛘撸鄠€獨立的軟件流可并行執(zhí)行。
在一個稱為時間片多線程處理或時間復用("TMUX")多線程 處理的方案中,單個處理器在固定時間段后在線程之間切換。在還 有的另 一方案中,在發(fā)生例如長等待時間高速緩存缺失的觸發(fā)事件 時,單個處理器在線程之間切換。在稱為基于事件切換的多線程處 理("SoEMT")的此后一方案中,在給定時間最多只有一個線程是 活動的。
在硬件方面,越來越支持多線程處理。例如,在一個方案中, 在諸如芯片多處理器("CMP")系統(tǒng)等多處理器系統(tǒng)中的處理器各
自可并發(fā)對多個軟件線程之一起作用。在稱為同時多線程處理
("SMT")的另一方案中,單個物理處理器變得對操作系統(tǒng)和用戶程 序好像是多個邏輯處理器。對于SMT,多個軟件線程可以是活動的, 并同時在單個處理器上執(zhí)行而無需切換。也就是說,每個邏輯處理 器維護一套完整的架構(gòu)狀態(tài),但共享諸如高速緩存、執(zhí)行單元、分 支預測器、控制邏輯和總線等物理處理器的許多其他資源。對于 SMT,來自多個軟件線程的指令因而在每個邏輯處理器上并發(fā)執(zhí)行。 對于支持軟件線程并發(fā)執(zhí)行的系統(tǒng),如SMT和/或CMP系統(tǒng), 操作系統(tǒng)應用可控制軟件線程的調(diào)度和執(zhí)行。然而, 一般情況下, 操作系統(tǒng)控制不能良好地擴展;操作系統(tǒng)應用調(diào)度線程而對性能沒 有負面影響的能力通常只限于較少量的線程。
附圖筒述
可參照下面的附圖理解本發(fā)明的實施例,其中,類似的要素用 類似的標號表示。這些圖形無意于限制,而是用于說明調(diào)度OS隔離 線程以供執(zhí)行的設(shè)備、系統(tǒng)和方法的選定實施例。
圖1是方框圖,示出多定序器系統(tǒng)的一般并行編程方案的圖形 表示。
圖2是方框圖,示出在用戶級多線程處理的至少一個實施例的 線程和纖程(shred)之間的共享存儲器和狀態(tài)。
圖3是方框圖,示出多定序器系統(tǒng)的各個實施例。
圖4是數(shù)據(jù)流程圖,示出支持用戶級線程控制的多定序器多線 程處理系統(tǒng)的調(diào)度機制的至少 一個實施例。
圖5是數(shù)據(jù)流程圖,示出非對稱多定序器多線程處理系統(tǒng)的調(diào) 度機制的至少 一個實施例。
圖6是數(shù)據(jù)流程圖,示出包括多個工作隊列的調(diào)度機制的至少 一個實施例。
圖7是時序圖,示出用戶驅(qū)動的與OS無關(guān)的纖程調(diào)度的控制流
的至少一個實施例。
圖8是時序圖,示出用戶驅(qū)動的與OS無關(guān)的纖程調(diào)度的特定示 例的控制流的至少一個實施例。
圖9是方框圖,示出能夠執(zhí)行公開技術(shù)的系統(tǒng)的至少一個實施例。
詳細說明
下面的論述描述了調(diào)度和/或以其他方式控制一個或多個OS隔
離定序器上的執(zhí)行線程(稱為"纖程")的方法、系統(tǒng)和機制的選定實
施例。OS隔離定序器在本文中有時稱為"os不可見"??山Y(jié)合單核或
多核多線程處理系統(tǒng)來利用本文所述機制。在下面的說明中,陳述 了如下的許多特定的細節(jié)以更透徹地理解本發(fā)明,如處理器類型、 多線程處理環(huán)境、系統(tǒng)配置、多定序器系統(tǒng)中定序器的數(shù)量和拓樸、 微架構(gòu)的結(jié)構(gòu)及指令名稱和參數(shù)。然而,本領(lǐng)域的技術(shù)人員將理解, 可無需此類特定細節(jié)來實現(xiàn)本發(fā)明。另外,未詳細示出一些熟知的 結(jié)構(gòu)、電路及諸如此類以免不必要地混淆本發(fā)明。
共享存儲器多處理范例可在稱為并行編程的方案中使用。根據(jù) 此方案,應用程序員可將有時稱為"應用"或"進程"的軟件程序分成要 并發(fā)運行的多個任務以便表示軟件程序的并行性。同一軟件程序("進 程")的所有線程共享共同的存儲器邏輯視圖。
圖1是方框圖,示出在多定序器多線程處理系統(tǒng)上的并行編程
方案的圖形表示。圖1示出操作系統(tǒng)140可見的進程100、 120。這 些進程100、 120可以是不同的軟件應用程序,如字處理程序和電子 郵件管理程序。通常,每個進程在不同的地址空間中才喿作。
操作系統(tǒng)("OS") 140 —般負責為諸如圖1所示進程120等進 程管理用戶創(chuàng)建的任務。相應地,操作系統(tǒng)140可為與進程120相 關(guān)聯(lián)的每個用戶定義的任務創(chuàng)建獨特的線程125、 126,并可將線程 125、 126映射到線程執(zhí)行資源。(在圖1中未示出線程執(zhí)行資源,
但下面有詳細論述。)OS 140—般負責調(diào)度這些線程125、 126以在 執(zhí)行資源上執(zhí)行。與單個進程相關(guān)聯(lián)的線程一般具有相同的存儲器 視圖,并可看到彼此的虛擬地址空間。
由于OS140負責創(chuàng)建、映射和調(diào)度線程,因此,線程125、 126 是OS 140可見的。另外,本發(fā)明的實施例包含OS 140不可見的另 外的線程130- 136。也就是說,OS 140并不創(chuàng)建、管理或以其他方 式確認或控制這些另外的線程130 - 136。這些非OS 140創(chuàng)建或控制 的另外的線程在本文有時稱為"纖程"130 - 136,以便區(qū)分它們與OS 可見的線程。由用戶級程序創(chuàng)建和管理這些纖程,并調(diào)度這些纖程 以在與操作系統(tǒng)隔離的定序器上運行。OS隔離定序器共享與OS可 見定序器相同的環(huán)0狀態(tài)。纖程因而共享為與同一進程相關(guān)聯(lián)的線 程創(chuàng)建的同一執(zhí)行環(huán)境(地址映射)。
術(shù)語"線程"和"纖程"在本文中使用時至少包括要與進程的其他線 程和/或纖程并發(fā)執(zhí)行的指令集的概念。線程和"纖程"術(shù)語因此均包 含軟件指令集的想法。均為指令流的線程(由OS控制)與纖程(操 作系統(tǒng)不可見并由用戶控制)之間的區(qū)分因素在本文中使用時指如 何管理線程和纖程指令流的執(zhí)行的差異。響應對OS的系統(tǒng)調(diào)用而生 成線程。OS生成該線程并分配資源以運行該線程。為線程分配的此 類資源可包括操作系統(tǒng)用于控制和調(diào)度線程的數(shù)據(jù)結(jié)構(gòu)。
與此相反,經(jīng)用戶指令或"原語"生成纖程的至少一個實施例, 該指令或"原語"調(diào)用軟件庫或其他與OS無關(guān)的;f幾制以生成OS不知
道的纖程。因此可響應用戶級軟件庫調(diào)用而生成纖程。
圖2是方框圖,以圖形形式示出有關(guān)上述的聲明即同一軟件程 序或進程的所有線程共享共同的存儲器邏輯視圖的其他細節(jié)。對于 本發(fā)明的實施例,此聲明在與進程100、 120相關(guān)聯(lián)的纖程方面同樣 適用。在本文中參照圖1論述圖2。
圖2采用圖1所示進程120、線程125、 126及纖程130- 136的 圖形表示。然而,此類表示不應視為限制。本發(fā)明的實施例無需對與進程相關(guān)聯(lián)的線程或纖程的數(shù)量強加上限或下限。在下限方面, 圖1示出,在給定時間運行的每個進程根本無需一定與一些線程或
纖程相關(guān)聯(lián)。例如,圖1所示的進程0 100示為在圖1所示的特殊時
間運行,既無線程,也無纖程。
然而,如圖l所示,另一進程120可與一個或多個線程125、 126 相關(guān)聯(lián)。另外,進程120還可另外與一個或多個纖程130- 136相關(guān) 聯(lián)。進程120的兩個線程125、 126和四個纖程130- 136的表示只 是為了說明,不應視為限制。與進程相關(guān)聯(lián)的OS可見線程的數(shù)量可 受OS程序的限制。然而,對于至少一個實施例,與進程相關(guān)聯(lián)的纖 程的累計數(shù)量的上限只受在執(zhí)行期間的特殊時間可用的線程執(zhí)行資 源的數(shù)量的限制。圖2示出,與進程120相關(guān)聯(lián)的第二線程126可 具有和第一線程125不同數(shù)量(n)的線程與其相關(guān)聯(lián)。(N對于線 程125、 126任意之一或兩者均可為0。)
圖2示出,特殊的存儲器邏輯視圖200由與特殊進程120相關(guān) 聯(lián)的所有線程125、 126共享。圖2示出,每個線程125、 126分別 具有其自己的應用和系統(tǒng)狀態(tài)202a、 202b。圖2示出,線程125、 126 的應用和系統(tǒng)狀態(tài)202由與特殊線程相關(guān)聯(lián)的所有纖程(例如,纖 程130- 136)共享。
相應地,圖2示出,本發(fā)明至少一個實施例的系統(tǒng)可支持在諸 如線程125的OS可見線程和與該線程相關(guān)聯(lián)的(OS不可見)纖程 130- 136之間的l對多關(guān)系。纖程是OS (參見圖1中的140)不"可 見的,,指是程序員而不是OS可采用用戶級技術(shù)創(chuàng)建、同步和以其他 方式管理和控制纖程的操作。雖然OS 140知道并管理線程,但OS 140 不知道也不管理或控制纖程。
因此,對于至少一個實施例,用戶不依賴操作系統(tǒng)管理線程單 元硬件與纖程之間的映射,而是可直接控制此類映射,并可直接操 縱與纖程執(zhí)行相關(guān)聯(lián)的控制和狀態(tài)轉(zhuǎn)移。相應地,對于本文中所述 的方法、機制和系統(tǒng)的實施例,線程單元架構(gòu)的用戶可見的特性至 少是一套規(guī)范的指令,這些指令允許用戶指引線程單元硬件的操縱 和控制。
線程單元在本文也可互換地稱為"定序器,,,在本文中使用時可 以是能夠執(zhí)行線程或纖程的任一物理或邏輯單元。它可包括為給定
線程或纖程確定要執(zhí)行的下一指令的下一指令指針邏輯。例如,圖2 所示的OS線程125可在未示出的定序器上執(zhí)行,而每個活動纖程130 - 136可分別在其他定序器即"SEQ 1" - "SEQ 4"上執(zhí)行。定序器可以 是邏輯線程單元或物理線程單元。圖3中示出了邏輯線程單元與物 理線程單元之間的此類不同。
圖3是方框圖,示出能夠執(zhí)行公開技術(shù)的多定序器系統(tǒng)的實施 例310、 350的選定硬件特性。圖3示出SMT多定序器多線程處理 環(huán)境310的選定硬件特性。圖3還示出其中每個定序器是單獨的物 理處理器核的多核多線程處理環(huán)境350的選定硬件特性。
在SMT環(huán)境310中,單個物理處理器304變得對操作系統(tǒng)和用 戶程序好像是多個邏輯處理器(未示出),這些邏輯處理器在本文 中稱為LP,到LPn。每個邏輯處理器LP,到LPn分別維護一套完整的 架構(gòu)狀態(tài)AS廣ASn。對于至少一個實施例,架構(gòu)狀態(tài)包括數(shù)據(jù)寄存 器、段寄存器、控制寄存器、調(diào)試寄存器和大多數(shù)模型特定的寄存 器。邏輯處理器LP,-LPn共享物理處理器304的大部分其他資源, 如高速緩存、執(zhí)行單元、分支預測器、控制邏輯和總線。雖然此類 特性可共享,但多線程處理環(huán)境310中的每個線程上下文可獨立生 成下一指令地址(并執(zhí)行例如從指令高速緩存、執(zhí)行指令高速緩存 或跟蹤高速緩存的取出(fetch))。因此,處理器304包括邏輯上 獨立的下一指令指針和取出邏輯320,以便即使可在單個物理取出/ 解碼單元322中實施多個邏輯定序器,也可為每個線程上下文取出 指令。對于SMT或?qū)嵤├?,術(shù)語"定序器"至少包含線程上下文的下 一指令指針和取出邏輯320以及該線程上下文的相關(guān)聯(lián)的架構(gòu)狀態(tài) AS中的至少一些。應注意的是,SMT系統(tǒng)310的定序器無需對稱。
例如,同一物理核的兩個SMT定序器可在它們各自維護的架構(gòu)狀態(tài) 信息量方面不同。
因此,對于至少一個實施例,多定序器系統(tǒng)310是支持并發(fā)多 線程處理的單核處理器304。對于此類實施例,每個定序器是具有其 自己的指令下一指令指針和取出邏輯及其自己的架構(gòu)狀態(tài)信息的邏 輯處理器,但同一物理處理器核304執(zhí)行所有線程指令。對于此類 實施例,邏輯處理器維護其自己版本的架構(gòu)狀態(tài),但可在并發(fā)執(zhí)行 的線程之間共享單個處理器核的執(zhí)行資源。
圖3還示出多核多線程處理環(huán)境350的至少一個實施例。此類 環(huán)境350包括兩個或更多個單獨的物理處理器304a-304n,每個處 理器能夠執(zhí)行不同的線程/纖程,使得至少部分不同線程/纖程的執(zhí)行 可同時進行。每個處理器304a到304n包括物理上獨立的取出單元 322,以取出其相應線程或纖程的指令信息。在其中每個處理器304a -304n執(zhí)行單個線程/纖程的實施例中,取出/解碼單元322實施單個 下一指令指針和取出邏輯320。然而,在其中每個處理器304a-304n 支持多個線程上下文的實施例中,取出/解碼單元322為每個支持的 線程上下文實施獨特的下一指令指針和取出邏輯320。在圖3中由虛 線表示多處理器環(huán)境350中另外的下一指令指針和取出邏輯320的 可選本質(zhì)。
因此,對于圖3所示的多核系統(tǒng)350的至少一個實施例,每個 定序器可以是處理器核304,多個核304a - 304n位于單個芯片封裝360 中。每個核304a-304n可以是單線程或多線程的處理器核。在圖3 中用虛線表示芯片封裝360,以指示多核系統(tǒng)350的所示單芯片實施 例只用于說明。對于其他實施例,多核系統(tǒng)的處理器核可位于不同 芯片上。
為i更于論述,下面的論述集中在多核系統(tǒng)350的實施例上。然 而,這種集中不應視為限制,表現(xiàn)在下述機制可在多核或單核多定 序器環(huán)境中執(zhí)行。
圖4是數(shù)據(jù)流程圖,示出支持用戶級線程控制的多定序器多線 程處理系統(tǒng)的調(diào)度機制400的至少一個實施例。圖4示出,機制400 包括工作隊列系統(tǒng)402。該機制還包括調(diào)度程序例程450,該例程可 在多個定序器403、 404中的每個定序器上執(zhí)行。
對于至少一個實施例,工作隊列系統(tǒng)402可維護等待執(zhí)行并因 此是"未決"的用戶定義的纖程的描述符。如上所述,可釆用調(diào)度機制 400而不是OS提供的調(diào)度機制;每個工作描述符描述不受OS干預 要在OS隔離或OS可見定序器上執(zhí)行的纖程。
纖程描述符可由用戶級纖程創(chuàng)建指令或原語創(chuàng)建。本領(lǐng)域的技 術(shù)人員將認識到,在程序員的代碼與實際的架構(gòu)指令之間可能存在 若干個級別的抽象,這些指令促使定序器執(zhí)行動作,從而生成纖程 描述符并將這些描述符置入工作隊列402中。描述為由程序員或用 戶生成的指令在本文中使用時,旨在不但包含可由匯編程序或編譯
指令,而且包含最終可匯編或編譯成架構(gòu)纖程控制指令的任何高級 原語或指令。還應理解,架構(gòu)纖程控制指令還可由線程執(zhí)行單元解 碼成一個或微操作。
圖4還示出,用于每個定序器的調(diào)度程序例程450a、 450b可訪 問工作隊列系統(tǒng)402,以便獲得在相關(guān)聯(lián)的定序器403、 404上執(zhí)行 的纖程。因此,圖4示出允許纖程的用戶級映射和控制的調(diào)度機制 的至少一個實施例,而纖程可在無需OS干預纖程調(diào)度的情況下彼此 和/或與OS控制的線程并發(fā)執(zhí)行。
應注意的是,圖4所示的定序器403、 404無需對稱,并且其數(shù) 量不應視為限制。有關(guān)定序器的數(shù)量,調(diào)度機制400可用于任何數(shù) 量的定序器。例如,可為包括4個、8個、16個、32個或更多個定 序器的多定序器系統(tǒng)實施調(diào)度機制。
有關(guān)對稱性,定序器403、 404可以在任一方面不同,包括影響 計算質(zhì)量的那些方面。例如,定序器可在功耗、計算性能速度、功 能特性或諸如此類方面不同。例如,對于一個實施例,定序器403、 404可在功能方面不同。例如, 一個定序器可能能夠執(zhí)行整數(shù)和浮點 指令,但無法執(zhí)行指令擴展的單指令多數(shù)據(jù)("SIMD")集,如流式 SIMD擴展3 ( "SSE3")。另一方面,另一定序器可能能夠執(zhí)行第一 定序器可以執(zhí)行的所有指令,并且也可以執(zhí)行SSE3指令。
作為功能非對稱性的另一示例,對于本發(fā)明的一個實施例,一 個定序器可以是OS可見的(例如,參見圖1的140),并可以因此 能夠執(zhí)行"環(huán)0"操作,如執(zhí)行系統(tǒng)調(diào)用、維修缺頁故障及諸如此類。 另一方面,另一定序器可與OS隔離,并因此無法執(zhí)行環(huán)0操作。
利用調(diào)度機制400的系統(tǒng)的定序器還可在任一其他方面不同, 如尺寸、字和/或數(shù)據(jù)路徑大小、拓樸、存儲器、功耗、功能單元數(shù) 量、通信架構(gòu)(多點與點對點互連)或與功能、性能、占地面積及 諸如此類相關(guān)的任何其他度量。
圖5是數(shù)據(jù)流程圖,示出非對稱多定序器多線程處理系統(tǒng)的調(diào) 度機制500的至少一個實施例。圖5只是示出一個非對稱性實施例, 表現(xiàn)在第一定序器503 ;li喿作系統(tǒng)540可見的,而第二定序器504 與操作系統(tǒng)540隔離。同樣地,本領(lǐng)域的技術(shù)人員將認識到在系統(tǒng) 中可存在其他類型的非對稱性,并且系統(tǒng)中可存在不止兩個定序器。
圖5示出,用于OS可見定序器503和隔離定序器504中的每個 定序器的調(diào)度程序例程450a、 450b探測工作隊列系統(tǒng)502,以了解 是否有要在分別與調(diào)度程序?qū)嵗?50a、 450b相關(guān)聯(lián)的定序器503、 504 上執(zhí)行的纖程。同樣地,此類機制500提供在無操作系統(tǒng)540干預 的情況下在非對稱定序器上的纖程調(diào)度。
圖6是數(shù)據(jù)流程圖,示出非對稱多定序器多線程處理系統(tǒng)的調(diào) 度機制600的至少一個實施例的其他細節(jié)。圖6示出,工作隊列系 統(tǒng)602可包括多個工作隊列604、 606。對于至少一個實施例,多個 工作隊列604、 606各自與一種定序器類型相關(guān)聯(lián)。對于圖6所示的 示范實施例,第一隊列604與一組一個或多個本文中稱為"類型A"的
第一類型的定序器640相關(guān)聯(lián)。第二隊列606與一組一個或多個本 文中稱為"類型B"的第二類型的定序器642相關(guān)聯(lián)。對于前面圖中所 示的其他實施例,如圖6中所示的隊列和定序器類型的數(shù)量及每種 類型的定序器的數(shù)量不應視為限制。
圖6因此示出包括至少兩種類型的非對稱定序器-類型A定序 器640和類型B定序器642的系統(tǒng)的調(diào)度機制600。隊列系統(tǒng)602包 括與每種類型的定序器相關(guān)聯(lián)的工作隊列604、 606。每個定序器640、 642包括分布式調(diào)度程序例程450的一部分。部分450a、 450b可以 是彼此的相同副本,但無需一定如此。
圖6示出,第一隊列604可包括要在類型A定序器640上運行 的纖程623的纖程描述符。第二隊列606可包括要在類型B定序器642 上運行的纖程624的纖程描述符。類型A纖程623可以是用戶編寫 以利用類型A定序器640提供的特殊功能的軟件序列。類似地,類 型B纖程624可以是用戶編寫以利用類型B定序器642提供的特殊 功能的軟件序列。
對于至少一個實施例,類型A定序器和類型B定序器的功能可 以是互斥的。也就是說,例如, 一組定序器640可支持另一組定序 器642不支持的特殊功能,如SSE3指令的執(zhí)行;而另一組定序器642 可支持另 一組定序器640不支持的特殊功能,如環(huán)0操作。
對于此類實施例,調(diào)度機制600可操作使得第一類型的線程623 的描述符可由類型A定序器640上的調(diào)度程序例程450從第一隊列 604拉出;而第二類型的纖程624的描述符可由類型A定序器640 上的調(diào)度程序例程450從第一隊列604拉出。纖程到適當?shù)亩ㄐ蚱?的映射可由用戶級指令指引。
然而,對于至少一個其他實施例,如圖6所示的實施例,定序 器類型A 640和B 642的功能表示超集-子集功能關(guān)系,而不是互斥 功能關(guān)系。也就是說,第一組定序器(如類型A定序器640)提供 包括第二組定序器(如類型B定序器642)的所有功能加上第二組定
序器642不提供的另外的功能的功能超集。對于此類實施例,可選 地,可由類型A定序器640的調(diào)度程序例程450從第二隊列606檢 索纖程描述符。例如,在類型A定序器的所有描述符不可用(如, 第一隊列604為空)時,可執(zhí)行此可選處理。換而言之,具有超集 功能的定序器可執(zhí)行專門指定用于此類定序器的纖程,但也可執(zhí)行 指定用于具有子集功能的定序器的纖程。
最后,圖6示出,可響應于由另一纖程或纖程感知的線程執(zhí)行 的纖程創(chuàng)建指令而將纖程描述符置于660工作隊列系統(tǒng)602中。對 于至少一個實施例,觸發(fā)創(chuàng)建纖程描述符的指令是API類似("應用 程序員接口")線程控制原語,如shred—create。諸如由軟件庫提供的 軟件可響應于shred_create原語而創(chuàng)建新纖程的纖程描述符,并可將 它置于工作隊列系統(tǒng)602中。
因此,對于至少 一個實施例,響應于shred_create原語由軟件創(chuàng) 建纖程描述符,并將它置于隊列系統(tǒng)702中。對于至少一個實施例, 纖程描述符可以是至少標識纖程的以下屬性的記錄a)纖程應開始 執(zhí)行的地址和b)棧描述符。棧描述符標識由新纖程用于存儲諸如局 部變量和返回地址等臨時變量的存儲器存儲區(qū)域(棧)。
圖7是數(shù)據(jù)流程圖,示出利用如圖4-6中所示任一調(diào)度機制等 調(diào)度機制的實施例執(zhí)行要在多定序器系統(tǒng)上執(zhí)行的纖程的用戶級調(diào) 度的示范序列。對于至少一個實施例,由在定序器770上運行的線 程T執(zhí)行方法700。對于至少一個實施例,響應于由諸如程序員等用 戶生成的指令,執(zhí)行方法700。對于圖7,此類指令稱為線程T的指 令。當然,將可理解,用戶可以用不同于圖7所示的順序來編程方 法700的各個塊。
圖7示出多定序器系統(tǒng)的示范實施例,其中,定序器相對于功 能度量是不對稱的。也就是說,其上執(zhí)行線程T的定序器770是OS 可見定序器。這樣,定序器770可經(jīng)與操作系統(tǒng)的交互來執(zhí)行特權(quán) 操作,如環(huán)0操作(即,維修缺頁故障,執(zhí)行系統(tǒng)調(diào)用等)。與此
相反,圖7所示的示范實施例還包括OS不可見的隔離定序器760。 這樣,隔離定序器760無法執(zhí)行特權(quán)操作。它們例如可^1限于執(zhí)行 環(huán)3操作,但無法執(zhí)行環(huán)0操作。圖7因此示出包括非對稱定序器 的多定序器系統(tǒng)的示范實施例。
對于圖7所示的實施例,方法700從塊701開始,并繼續(xù)到塊 704。在塊704,線程T執(zhí)行一個或多個指令來執(zhí)行與線程T相關(guān)聯(lián) 的一個或多個并發(fā)纖程的用戶級控制的初始化。對于至少一個實施 例,此類初始化704可包括創(chuàng)建和/或初始化工作隊列系統(tǒng)702的一 個或多個隊列(例如,參見圖6的604和606)。
另外,圖7示出,此類初始化704可包括一個或多個隔離定序 器760的初始化。當然,本領(lǐng)域的技術(shù)人員將認識到,無需一定由 單個例程、方法或函數(shù)執(zhí)行在塊704所示的隊列創(chuàng)建和定序器初始 化,也無需一定按本文中所述的順序執(zhí)行它們。例如,對于一個替 代實施例,可以用相反的順序執(zhí)行在塊704采取的初始化動作,或 可以并發(fā)執(zhí)行它們。
可執(zhí)行塊704的定序器初始化,以便使隔離定序器760準備運 行由如計算機程序員等用戶置于線程T的指令流中的用戶生成的纖 程創(chuàng)建指令所示的纖程。對于至少一個實施例,此類定序器初始化 可包括在每個隔離定序器760上的分布式調(diào)度程序例程450的調(diào)用。 正如下面更詳細論述的一樣,調(diào)度程序例程450的調(diào)用可引起調(diào)度 環(huán)的執(zhí)行,其中,分布式調(diào)度程序的每部分開始定期檢查工作隊列 系統(tǒng)702 ,以了解是否有可由相關(guān)聯(lián)的隔離定序器760執(zhí)行的工作。
在無此類初始化704的情況下,對于至少一個實施例,預期隔 離定序器760不可用于執(zhí)行纖程。對于至少一個實施例,使定序器760 準備執(zhí)行纖程的初始化704至少包括調(diào)度程序例程450的調(diào)用???在線程T的指令流中為用戶所示的每個定序器執(zhí)行初始化704。對于 至少一個實施例,為執(zhí)行而由線程T初始化的所有定序器共享由操 作系統(tǒng)為與線程T相關(guān)聯(lián)的進程構(gòu)建的相同虛擬存儲器視圖。
處理從塊704繼續(xù)到塊706。在塊706,線程T為在用戶定義的 主纖程函數(shù)開始的執(zhí)行生成纖程描述符。對于至少一個實施例,用 戶定義的主纖程函數(shù)替代傳統(tǒng)的OS可見mainO函數(shù)。圖7示出,可 將主纖程的纖程描述符置于工作隊列系統(tǒng)702中。相應地,主纖程 等待在下次機會由分布式纖程調(diào)度程序例程450之一調(diào)度以供執(zhí)行。
從塊706,處理繼續(xù)到塊708。在塊708, OS可見線程T開始 其自己的調(diào)度環(huán)。相應地,線程T執(zhí)行一個或多個指令以初始化定 序器770上的調(diào)度程序例程750。圖7示出,調(diào)度程序750可咨詢工 作隊列系統(tǒng)702以調(diào)度第一定序器770上的工作。圖7因此示出一 個實施例,其中,將所有纖程描述符發(fā)送到共用隊列系統(tǒng)702,而所 有調(diào)度程序例程450a-450n、 550可從該系統(tǒng)請求和調(diào)度工作。由于 調(diào)度例程450a-450n的實例分布在多個隔離定序器中,因此,調(diào)度 例程450在本文中可稱為"分布式"調(diào)度程序。
對于至少一個實施例,OS可見定序器770 (第一類型)與隊列 系統(tǒng)702的笫一工作隊列相關(guān)聯(lián)(例如,參見圖6的604),而隔離 定序器(第二類型)與隊列系統(tǒng)702的第二工作隊列相關(guān)聯(lián)(例如, 參見圖6的606)。如上結(jié)合圖6所述的,對于至少一個實施例,第 一定序器770可從工作隊列系統(tǒng)702的任一隊列中拉出工作。
這樣,OS可見定序器770和一個或多個隔離定序器760均已初 始化704、 706,能夠基于用戶生成的指令執(zhí)行纖程而不是依賴OS 管理此類調(diào)度。如上所述,用于執(zhí)行此操作的至少一種機制是在初 始化的(參見塊704)隔離定序器760上調(diào)用調(diào)度程序例程450及在 生成主纖程例程的纖程描述符的定序器770上調(diào)用更加共用的OS可 見調(diào)度程序例程750 (參見塊708)。從塊708,處理繼續(xù)到塊710。
在塊710,定序器770根據(jù)其調(diào)度程序750在定序器770上的調(diào) 度執(zhí)行指令。塊710的本質(zhì)可以是迭代式,表現(xiàn)在多個纖程或線程 部分可連續(xù)在定序器770上執(zhí)行。在圖7中以虛線表示塊710處理 的可能迭代本質(zhì)。
定序器770可執(zhí)行如工作隊列系統(tǒng)702的與其定序器類型相關(guān) 聯(lián)的隊列中的纖程描述符所示的纖程指令。此類指令可包括促使另 外的纖程描述符生成并置于工作隊列系統(tǒng)702中的那些指令。
對于至少一個實施例,由定序器770執(zhí)行的纖程可包括需要定
序器類型770提供的功能的那些纖程,而隔離定序器760無法執(zhí)行 那些纖程。例如,對于圖7所示的示例,與定序器770相關(guān)聯(lián)的隊 列可包括需要環(huán)0操作的纖程指令。也就是說,纖程執(zhí)行的操作系 統(tǒng)調(diào)用可能需要特殊的處理,這是因為OS只可為從OS可見定序器 發(fā)出的系統(tǒng)調(diào)用服務??捎蒓S可見定序器770經(jīng)代理機制執(zhí)行在OS 隔離定序器760上運行的纖程的系統(tǒng)調(diào)用。
代理機制允許OS可見定序器模仿纖程以便得到操作系統(tǒng)的注 意,進而執(zhí)行特權(quán)指令??梢杂萌魏螖?shù)量的方式實施代理機制。例 如,在隔離定序器760嘗試在OS隔離定序器上執(zhí)行特權(quán)指令、如系 統(tǒng)調(diào)用時,可隱含調(diào)用此類機制。嘗試的系統(tǒng)調(diào)用會促使異常生成。 異常的處理程序可保存纖程狀態(tài),生成系統(tǒng)調(diào)用的纖程描述符,并 將纖程描述符置于與OS可見定序器702相關(guān)聯(lián)的隊列中。在調(diào)度此 類描述符用于在OS可見定序器770上執(zhí)行710時,定序器770可在 獲得纖程的狀態(tài)并執(zhí)行系統(tǒng)調(diào)用前保存其自己的狀態(tài)。對于此類代 理執(zhí)行,在OS可見定序器770上的執(zhí)行在促使OS隔離定序器760 上出現(xiàn)故障的指令恢復。纖程的狀態(tài)隨后被保存,并且控制返回給 故障OS隔離定序器760,以便它可繼續(xù)其纖程的執(zhí)行。
對于至少 一個其他實施例,特權(quán)指令的代理執(zhí)行可明確由用戶 控制。對于此類實施例,用戶可明確指示包括特權(quán)指令的纖程應在 OS可見定序器770上執(zhí)行。此類指示可表示為纖程創(chuàng)建原語的參數(shù) 或變體。包括隊列首選參數(shù)或者使用專用纖程創(chuàng)建原語在本文中均 統(tǒng)稱為調(diào)度提示。
纖程創(chuàng)建原語(如"shred—create0")原語可調(diào)用庫函數(shù)。該函數(shù) 會促使創(chuàng)建新纖程描述符,并還會促使描述符置于工作隊列系統(tǒng)702 的隊列中。標準shred一create()原語的可選參數(shù)可允許用戶指定描述符 的隊列類型?;蛘?,在本文中稱為shred—create一affinityO的可選函數(shù) 調(diào)用可由用戶用于表示特殊纖程的隊列首選項。例如,如果纖程由 大量系統(tǒng)調(diào)用組成,則用戶可指定與能夠執(zhí)行環(huán)0操作的定序器類 型相關(guān)聯(lián)的工作隊列。本領(lǐng)域的技術(shù)人員將認識到,類似的參數(shù)和/ 或替代參數(shù)方案也可與Yield原語一起使用。
圖7所示的系統(tǒng)可包括與系統(tǒng)調(diào)用的處理有關(guān)的另外的防護措 施。例如,互斥可用于提供圍繞OS調(diào)用的串行化?;コ饪捎糜趯⑺?鎖降到最低,否則,在線程和一個或多個其相關(guān)聯(lián)的纖程嘗試得到 操作系統(tǒng)為線程同步而提供的相同鎖定時會發(fā)生死鎖。
對于在塊710執(zhí)行的任一纖程或纖程部分,定序器770可繼續(xù) 纖程的執(zhí)行,直至執(zhí)行Exit或Yield原語。如果在當前纖程中遇到"Exit" 原語,則當前纖程的執(zhí)行完成,并且調(diào)度程序750會刺激隊列系統(tǒng)702 的適當隊列以調(diào)度另一指令序列在定序器770上執(zhí)行。對于至少一 個實施例,Exit指令因此將纖程標記為完成,并且控制返回給調(diào)度程 序750。
如果在當前纖程中遇到"Yield"原語,則調(diào)用進程的纖程描迷符 會被放回隊列系統(tǒng)中,并且控制返回給調(diào)度程序750。相應地,在執(zhí) 行"Yield"原語時,當前纖程的剩余纖程指令的纖程描述符可置于工 作隊列系統(tǒng)702中。
對于Exit或Yield情況,在當前纖程的執(zhí)行在塊710已完成后, 處理可在塊712結(jié)束?;蛘撸烧{(diào)度新線程或纖程以供執(zhí)行。相應 地,從塊710環(huán)回到塊710的虛線指示可由定序器770執(zhí)行另外的 線程或纖程。在如分布式調(diào)度程序750調(diào)度的所有線程和/或纖程(或 纖程部分)的執(zhí)行完成后,處理可在塊712結(jié)束。
有關(guān)在塊710的執(zhí)行后另外的纖程的調(diào)度,可在Yield或End 指令已執(zhí)行后由分布式調(diào)度程序750調(diào)度新纖程以在當前定序器770 上執(zhí)行。對于至少一個實施例,此類動作可由于調(diào)度程序750 /人與
不同于其自己類型的定序器類型相關(guān)聯(lián)的工作隊列獲得工作而發(fā) 生。
或者,另外的OS可見指令可在塊710后執(zhí)行。此類工作可從與 定序器770自己的定序器類型相關(guān)聯(lián)的工作隊列調(diào)度。如上所述, 對于至少一個實施例,定序器770的調(diào)度程序750只在其自己的隊 列為空時調(diào)度最初指定在OS隔離定序器上執(zhí)行的纖程。
圖8是時序圖,示出與OS無關(guān)的纖程調(diào)度的控制流的至少一個 實施例。為便于說明,圖8的時序圖示出圖7所示的方法實施例700 的特定示例的控制流。相應地,在下面參照圖7論述圖8。如圖7所 示,圖8所示的方法800可由第一 OS可見定序器(870)和第二隔 離定序器(860)執(zhí)行。
圖8示出在第一類型的第一定序器870上的初始化704 (參見圖 7)的至少一個實施例的其他細節(jié)。對于至少一個實施例,定序器870 在功能度量方面與第二定序器860不同。也就是說,第一定序器870 是OS可見的,而第二定序器860被隔離。
圖8示出,初始化704可包括至少兩個用戶生成的指令的執(zhí)行。 在本文中稱為纖程監(jiān)視器("SEMONITOR")指令的第一指令用于設(shè) 置OS可見定序器與OS隔離定序器之間通信的信道。第二初始化指 令是控制轉(zhuǎn)移指令,在本文中稱為纖程轉(zhuǎn)移("SXFR")指令。
本領(lǐng)域的技術(shù)人員將認識到,在本文中所述的方法700、 800和 系統(tǒng)無需限于纖程控制指令的任一特殊名稱或指令集結(jié)構(gòu)。本領(lǐng)域 的技術(shù)人員還將認識到,SEMONITOR和SXFR類型的指令可由于 編譯程序、匯編程序或庫函數(shù)而為原語生成,如上述的shred一create()、 shred—create_affinity()、 shredjdd()和shred—exit()。 在此方面,最終 的指令在本文中仍然稱為"用戶生成的",但它們可能是響應于更高級 的用戶結(jié)構(gòu)而生成。纖程原語的上述部分名單不應視為限制。
本領(lǐng)域的技術(shù)人員還應認識到,隨附權(quán)利要求書包含實施例, 其中,最終纖程控制指令不一定是硬件支持的指令。相反,對于至
少一個實施例,響應于原語生成的"指令"可以是硬件信號,而不是架 構(gòu)指令。可響應于用戶生成的原語由軟件或固件層生成諸如中斷或
其他定序器控制信號等信號,以便實施SEMONITOR和SXFR類型 的功能。
相反,方法700、 800 —般假設(shè),定序器870、 860支持用于生 成和控制纖程的架構(gòu)、用戶級指令,并且傳統(tǒng)的多線程處理API可 通過使用規(guī)范纖程指令集而得到全面實施。有關(guān)一個示范的規(guī)范纖 程指令集的進一步論述,可參閱代理人案號為42390.P19770、題為"在
多個指令定序器上的基于指令集的線程執(zhí)行的機制"(A Mechanism For Instructions Set-Based Thread Execution on a Plurality of Instruction Sequencers)的同時4爭審的美國專利申請。
對于至少一個實施例,假設(shè)定序器870、 860至少支持規(guī)范纖程 指令集,該指令集包括根據(jù)SEMONITOR和SXFR的指令。用戶利 用此類型的指令來控制多個定序器的操作且尤其是實現(xiàn)定序器間控 制轉(zhuǎn)移的能力在本文中稱為"定序器算術(shù)"。提供定序器算術(shù)的纖程指 令可用作構(gòu)建更高級的纖程處理原語的組成部分,舉例子如Fork、 Join、 Yield 、 Exit、 Lock、 Wait和Unlock 。這些原語可用于實現(xiàn)在 無需OS級調(diào)度情況下執(zhí)行的并發(fā)共享存儲器纖程的用戶級管理。這 樣,規(guī)范纖程指令可用于在架構(gòu)纖程指令與應用軟件之間構(gòu)建抽象 層。規(guī)范纖程指令因此可用于構(gòu)建支持遺留應用程序接口的抽象層。
一般,SXFR類型的指令在由第一定序器執(zhí)行時,可將信號從笫 一定序器發(fā)送到第二定序器。SXFR類型的指令因此提供了一種執(zhí)行 纖程間服務信令的機制。SXFR類型的指令的動作是同步的,表現(xiàn)在 用戶可通過明智地將SXFR類型的指令置于代碼中而相對于纖程指 令流中其他指令的執(zhí)行來控制SXFR指令的執(zhí)行的定時。
與此相反,SEMONITOR類型的指令提供異步定序器算術(shù)。 SEMONITOR類型的指令可由程序員用于配置第二定序器監(jiān)視來自 第一定序器的信號。
圖8示出,第一初始化指令SEMONITOR指令在指定目標定序 器上將處理程序例程映射到特定的事件類型。也就是說,圖8所示 的SEMONITOR指令的實施例將特殊例程的開始指令指針地址(此 處,分布式調(diào)度程序例程"調(diào)度程序"的開始)映射到指定定序器id 1 的事件類型"init"。在目標定序器上,第一定序器上的SEMONITOR 指令執(zhí)行的結(jié)果是目標定序器監(jiān)視所示事件指示符,并在指定地址 開始在目標定序器上的控制流。
對于至少一個實施例,事件類型可實施為指示符,如在由第一 定序器指示指定事件時變?yōu)榧せ畹男盘柧€。由于在第一定序器SED0 870上SEMONITOR指令的執(zhí)行,如由作為SEMONITOR指令的定 序器標識符參數(shù)的'T,標識的目標定序器SID1 860輪詢或以其他方式 監(jiān)視"init"事件指示符。在init指示符被激活時,SID1 860跳到指定 地址(即,調(diào)度程序例程的開始處)并開始調(diào)度程序代碼的執(zhí)行。 調(diào)度程序例程只用作圖8的示例,本領(lǐng)域的技術(shù)人員將認識到,任 何適當?shù)氖录幚沓绦虼a均可使用。SEMONITOR指令的執(zhí)行因 此可設(shè)置在指定定序器上進行的異步控制轉(zhuǎn)移。
圖8所示的SEMONITOR初始化專用于圖8所示的示例,但不 應視為限制。可執(zhí)行類似于圖8所示的SEMONITOR指令的一組若 干個初始化指令用于替代實施例,以便將一系列事件類型映射到特 定的處理程序例程。在圖8所示的SEMONITOR指令執(zhí)行后,事件 類型"init"與分布式調(diào)度程序相關(guān)聯(lián)。
第二初始化指令SXFR指令隨后由第一定序器870執(zhí)行。SXFR 指令的執(zhí)行發(fā)送事件以初始化OS隔離定序器SID1上單獨的執(zhí)行線 程。在802,在OS隔離定序器SID1檢測到包含"Init"方案的信號時, OS隔離定序器SIDl啟動線程S,并開始對應于分布式調(diào)度程序(例 如,參見圖7的450)的指令流的執(zhí)行。
圖8示出包括以下參數(shù)的SXFR指令的實施例定序器標識符、 事件類型和可選的同步標記。定序器標識符("SID")指定這樣的定
序器,由于SXFR指令的執(zhí)行而要將控制轉(zhuǎn)移給它。對于圖8所示 的示例,定序器870的定序器標識符為"SIDO",而定序器860的定 序器標識符為"SID1"。
圖8所示的SXFR指令的事件類型參數(shù)指示"init,,事件類型。由 于圖中所示的前面的SEMONITOR指令的執(zhí)行,"init"事件類型在 SXFR指令執(zhí)行時已與分布式調(diào)度程序(圖7的450)相關(guān)聯(lián)。相應 地,事件類型參數(shù)有效地向受讓定序器(也就是i兌,SID1 860)指示, 在定序器860開始執(zhí)行時它應在分布式調(diào)度程序的IP地址開始執(zhí)行。
圖8所示的示范SXFR指令的最后參數(shù)是可選的等待/不等待標 記。通過指定"不等待",指令實際上開始并發(fā)多線程處理情況-第一 定序器870無需等待來自受讓定序器860的同步指示符,而是在它 一完成了 SXFR指令的執(zhí)行后就可繼續(xù)其自己指令流的執(zhí)行。
SXFR指令因此是纖程創(chuàng)建和控制轉(zhuǎn)移指令。圖8示出,由于第 一定序器的SXFR指令的執(zhí)行,纖程S開始執(zhí)行在第二定序器860 上的分布式處理程序例程。因此,在執(zhí)行SXFR指令后,線程T和 纖程S可并發(fā)執(zhí)行。
由于"不等待,,標記的原因,在SEDO 870上的線程T的執(zhí)行可在 該定序器在704執(zhí)行了 SXFR指令后繼續(xù)執(zhí)行。相應地,線程T繼 續(xù)創(chuàng)建706"主纖程"程序的纖程描述符,并將此類描述符置于工作隊 列系統(tǒng)702中。如上結(jié)合圖7所述,主纖程描述符可#1置于工作隊 列系統(tǒng)702 (圖2)中,在該系統(tǒng)中,隊列與隔離定序器SID1 860相 關(guān)聯(lián)。
線程T隨后調(diào)用708其OS可見定序器750,并繼續(xù)根據(jù)其調(diào)度 程序750的指引執(zhí)行指令710。如上結(jié)合圖7所述,可選地,線程T 可查找纖程描述符709,并因此可在710至少為滿足以下條件的那些 實施例執(zhí)行纖程指令a)允許OS可見調(diào)度程序從OS隔離定序器 隊列中拉出工作和/或b)支持在OS可見定序器870上的纖程指令的 代理執(zhí)行。在執(zhí)行一次或多次迭代的指令執(zhí)行710后,線程T的處理可在712結(jié)束。
有關(guān)隔離定序器860,圖8示出為纖程S執(zhí)行的操作順序的至少 一個實施例。如上所述,由于由OS可見定序器SID870上執(zhí)行的OS 可見線程T執(zhí)行的初始化處理704的原因,調(diào)度環(huán)(即,分布式調(diào) 度程序450的執(zhí)行)可在定序器860上啟動。
在804,在SID1 860上執(zhí)行的調(diào)度程序例程450查詢工作隊列 系統(tǒng)702以確定是否有纖程描述符可用于由定序器860執(zhí)行。對于 圖8所示的示范序列,如果塊706 (上面已論述)已經(jīng)由SID0 870 執(zhí)行,則定序器SID1 860可能在塊806遇到主纖程描述符。
如果找到描述符,則定序器860執(zhí)行806描述符所示的纖程。 一直執(zhí)行纖程,直至a)完成或者b)遇到Y(jié)ield指令。
應注意的是,纖程的指令可包括另外的纖程創(chuàng)建指令。也就是 說,對于至少一個實施例,纖程本身可執(zhí)行至少兩種類型的纖程操 作纖程控制操作(與創(chuàng)建和終止纖程有關(guān))和同步操作(如Yield 操作)。(對于至少一個實施例,可通過用戶在纖程指令流中使用 符合工業(yè)標準的原語而調(diào)用此類操作。例如, 一個此類工作標準是 POSIX (可移植操作系統(tǒng)接口 )。)圖8中從806到工作隊列系統(tǒng)702 的虛線示出,在纖程執(zhí)行806期間,可創(chuàng)建另外的纖程描述符,并 且可將另外的描述符置于工作隊列系統(tǒng)702中。
例如,用戶可將Yield原語置于纖程指令流中。此類Yield原語 可促使定序器放棄纖程控制。為此,定序器860可在終止纖程執(zhí)行 前將剩余纖程指令的描述符放回工作隊列系統(tǒng)702中。Yield原語可 調(diào)用在執(zhí)行控制轉(zhuǎn)移前交換棧的函數(shù),從而在將控制返回給定序器 的調(diào)度程序前保存當前線程上下文。
圖8示出,在執(zhí)行終止指令(Exit、 Yield等)時,終止或暫停 在SID1 860上纖程S的執(zhí)行。這種情況下,可選地,分布式調(diào)度程 序450可探測工作隊列系統(tǒng)702,以了解是否有另一纖程描述符,以 便識別可由定序器SID1 860執(zhí)行的工作。在圖8中通過從806到804
的虛線箭頭指示工作隊列系統(tǒng)702的此類可選的迭代探測。
對于圖8所示的示例,應注意的是,可能的是,在SDD0 870上 運行的調(diào)度程序例程450探測工作隊列系統(tǒng)702前,在SED1 860上 運行的調(diào)度程序例程450可能發(fā)現(xiàn)"主纖程"例程的纖程描述符。此類 情況下,假設(shè)定序器860或870能夠執(zhí)行"主纖程"例程,"主纖程,,例 程即使其描述符由SID0 870創(chuàng)建,也可由SID1 860執(zhí)行。
從以上關(guān)于圖8的論述將明白,對于至少一個實施例,兩個所 示定序器860、 870均能夠執(zhí)行"主纖程"例程。相應地,對于至少一 個實施例,可假設(shè)定序器860、 870對稱。然而,對于至少一個其他 實施例,定序器860、 870不完全對稱,但每個定序器860、 870仍 具有充足的執(zhí)行主纖程例程的功能能力。例如,在主纖程例程只需 要環(huán)3能力、定序器SID1 860具有環(huán)3能力并且SED0 870具有環(huán)3 和環(huán)0能力的情況下,此類實施例可存在。對于此類實施例,如圖6 所示,工作隊列系統(tǒng)702可包括第 一隊列(例如,用于只可由SID0 870 執(zhí)行的描述符)和用于可由SID0 870或SID1 860執(zhí)行的描述符的第 二隊列。
有關(guān)分布式調(diào)度程序450和工作隊列系統(tǒng)702,對于至少一個實 施例,工作隊列系統(tǒng)702可受到臨界段的保護。如上所述,每個隔 離定序器860可有效地運行其自己的分布式調(diào)度程序例程450的一 部分的副本,并嘗試爭用對任務隊列系統(tǒng)702的隊列的頂端的訪問 權(quán),以處理下一就緒指令來運行其相關(guān)聯(lián)的定序器。如果定序器上 的一個任務在等待諸如互斥等同步變量、條件變量或信號量,則在 進入對應的臨界段后,可取消調(diào)度該任務,并將其放置在任務隊列 的尾端。
考慮到圖8所示的示例,可看到本發(fā)明的實施例能夠在不使用 OS的情況下在與OS隔離的定序器上調(diào)度線程的執(zhí)行。因此,借助 于本文中公開的技術(shù),可能的是,構(gòu)建具有比OS能夠支持的更多的 定序器的多定序器系統(tǒng),并允許在OS不支持的多定序器系統(tǒng)的定序 器上的用戶級線程調(diào)度。
對于上述機制、系統(tǒng)和方法的至少一些實施例,分布式調(diào)度程
序450作為事件驅(qū)動自行調(diào)度程序操作,其中,響應于由于API類 似的線程控制(shred—create、 shred—create affinity及諸如此類)或線 程同步(shredjeld及諸如此類)原語創(chuàng)建的排隊調(diào)度事件而創(chuàng)建纖 程。調(diào)度程序和原語可實施為運行期程序庫的一部分,該庫在諸如 符合POSIX的API等傳統(tǒng)工業(yè)標準API與多定序器系統(tǒng)硬件之間創(chuàng) 建中間抽象層,其中,定序器至少支持一套規(guī)范纖程指令,這些纖 程指令實施用戶級定序器算術(shù)。該庫可包括諸如上述分布式調(diào)度程
序450的實施例的調(diào)度程序。運行期程序庫可充當中間抽象層,以 便程序員可通過支持纖程處理的硬件利用傳統(tǒng)線程API (如Pthreads API或Win32線程API)。該庫可提供基于用戶編程的原語、透明調(diào) 用規(guī)范纖程指令的函數(shù)。
可在包括單核SMT系統(tǒng)(例如參見圖3的310)和多核系統(tǒng)(例 如參見圖3的350)的任一多定序器系統(tǒng)上實施本文中論述的調(diào)度機 制和4支術(shù)。下面結(jié)合圖9進行此類系統(tǒng)的進一步論述。
圖9示出能夠執(zhí)行公開技術(shù)的計算系統(tǒng)900的至少一個示范實 施例。計算系統(tǒng)900包括至少一個處理器核904和存儲器系統(tǒng)940。 存儲器系統(tǒng)940可包括更大、相對較慢的存儲器存儲部件902及一 個或多個更小、相對較快的高速緩存,如指令高速緩存944和/或數(shù) 據(jù)高速緩存942。存儲器存儲部件902可存儲用于控制處理器904的 操作的指令910和數(shù)據(jù)912。指令910可包括分布式調(diào)度程序例程450 的一個或多個副本。
旨在將存儲器系統(tǒng)940作為存儲器的廣義表示,并且存儲器系 統(tǒng)940可包括多種形式的存儲器,如硬盤驅(qū)動器、CD-ROM、隨機 存取存儲器(RAM)、動態(tài)隨機存取存儲器(DRAM)、靜態(tài)隨機 存取存儲器(SRAM)、閃存及相關(guān)的電路。存儲器系統(tǒng)940可存儲 由處理器904可執(zhí)行的數(shù)據(jù)信號表示的指令910和/或數(shù)據(jù)912。指
令910和/或數(shù)據(jù)912可包括用于執(zhí)行本文中所述的任一或所有技術(shù) 的代碼和/或數(shù)據(jù)。例如,數(shù)據(jù)912可包括一個或多個隊列以形成能 夠存儲如上所述的纖程描述符的隊列系統(tǒng)702?;蛘?,指令910可包 括生成用于存儲纖程描述符的隊列系統(tǒng)702的指令。
處理器904可包括向執(zhí)行核930提供指令信息的前端920。取出 的指令信息可在高速緩存225中緩沖以等待由執(zhí)行核930來執(zhí)行。 前端920可按程序順序向執(zhí)行核930提供指令信息。對于至少一個 實施例,前端920包括確定要執(zhí)行的下一指令的取出/解碼單元322。 對于系統(tǒng)900的至少一個實施例,取出/解碼單元322可包括單個下 一指令指針和取出邏輯320。然而,在其中每個處理器904支持多個 線程上下文的一個實施例中,取出/解碼單元322為每個支持的線程 上下文實施獨特的下一指令指針和取出邏輯320。在圖9中由虛線表 示多處理器環(huán)境中另外的下一指令指針和取出邏輯320的可選本質(zhì)。
可以用硬件、硬件仿真軟件或其他軟件、固件或此類實施方案 的組合來實施本文中所述的方法實施例。可為包括至少一個處理器、 數(shù)據(jù)存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至 少一個輸入裝置和至少一個輸出裝置的可編程系統(tǒng)來實施本發(fā)明的 實施例。對本申請來說,處理系統(tǒng)包括具有處理器的任一系統(tǒng),如 數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或微 處理器。
程序可存儲在通用或?qū)S每删幊烫幚硐到y(tǒng)可讀取的存儲介質(zhì)或 裝置(例如,硬盤驅(qū)動器、軟盤驅(qū)動器、只讀存儲器(ROM)、 CD-ROM 裝置、閃存裝置、數(shù)字多功能盤(DVD)或其他存儲裝置)上。處 理系統(tǒng)中的處理器可訪問的指令提供在處理系統(tǒng)讀取存儲介質(zhì)或裝 置以執(zhí)行本文中所述的過程時配置和操作處理系統(tǒng)。本發(fā)明的實施 例還可視為實施為配置用于處理系統(tǒng)的機器可讀存儲介質(zhì),其中, 如此配置的存儲介質(zhì)使處理系統(tǒng)以特定和預定方式操作來執(zhí)行本文 中所述的功能。
示范系統(tǒng)900代4^于Intel 乂>司提供的Pentium , Pentium Pro、 Pentium II、 Pentium III、 Pentium 4及Itanium 和Itanium 2微處理器的處理系統(tǒng),但還可使用其他系統(tǒng)(包括具有其他微處理 器的個人計算機(PC)、工程工作站、個人數(shù)字助理和其他手持式 裝置、機頂盒及諸如此類)。對于一個實施例,示范系統(tǒng)可執(zhí)行 Microsoft公司提供的Windows頂操作系統(tǒng)版本,但還可使用例如其 他操作系統(tǒng)和圖形用戶界面。
雖然已示出和描述了本發(fā)明的特殊實施例,但本領(lǐng)域的技術(shù)人 員將明白,在不脫離隨附權(quán)利要求書范圍的情況下,可進行更改和 #^改。例如,工作隊列系統(tǒng)702可包括由多個定序器類型爭用的單 個隊列。對于此類實施例,資源要求明確包括在每個纖程描述符中。 分布式調(diào)度程序的每個定序器的部分在從工作隊列去除纖程的描述 符以供定序器執(zhí)行前執(zhí)行檢查以確保定序器能夠執(zhí)行纖程。
對于另一替代實施例,可在工作隊列系統(tǒng)702中實施混合方案。 對于此類混合方案,工作隊列系統(tǒng)702包括多個隊列。不過, 一個 或多個隊列對應于多個定序器類型。對于此類混合實施例,在與不 止一個定序器類型相關(guān)聯(lián)的任一隊列的每個纖程描述符中包括了明 確的資源指示。
上述分布式調(diào)度程序例程可使用循環(huán)調(diào)度方案來調(diào)度纖程描述 符的執(zhí)行。然而,對于至少一個替代實施例,上述分布式調(diào)度程序 和工作隊列系統(tǒng)可支持基于優(yōu)先級的高度方案。此外,對于至少一
個替代實施例,多隊列隊列系統(tǒng)實施例的隊列首選項可由用戶或運 行期程序庫設(shè)置,以指示任務由優(yōu)選定序器執(zhí)行。例如,可在執(zhí)行 纖程的剩余指令時將在Yield操作前在特殊定序器上執(zhí)行的纖程發(fā)送 回該相同的特殊定序器。
有關(guān)將纖程描述符分派到工作隊列系統(tǒng)中,上面已結(jié)合圖7描 述了可通過用戶使用特殊參數(shù)或特殊的"Affinity,,原語以便在纖程創(chuàng) 建時定義應指配給哪個隊列,從而可明確靜態(tài)控制纖程描述符的指配。
對于至少一個替代實施例,可不利用此類靜態(tài)指配方案,或者 除其之外,利用動態(tài)指配??赏ㄟ^諸如互斥等用戶級同步對象實施
動態(tài)指配。此類互斥可允許纖程將產(chǎn)生的纖程動態(tài)自行調(diào)度到工作 隊列系統(tǒng)的特殊隊列中?;蛘?,可實施動態(tài)指配,使得分布式調(diào)度 程序觀察隊列的行為并動態(tài)選擇哪個隊列應接收描述符。還或者,
可通過程序員使用諸如"Lock"和"Unlock"原語等同步原語執(zhí)行動態(tài)指 配。此類原語可利用OS互斥結(jié)構(gòu)。在執(zhí)行Lock原語時,當前定序 器可執(zhí)行Yield操作,并將當前纖程的描述符置于對應于互斥的隊列 中。
相應地,本領(lǐng)域的技術(shù)人員將認識到,在不脫離本發(fā)明在其更 廣義方面的范圍的情況下,可進行更改和修改。隨附權(quán)利要求書因 此將在其范圍內(nèi)包含在本發(fā)明真實范圍內(nèi)的所有此類更改和修改。
權(quán)利要求
1.一種用于并發(fā)線程的用戶級調(diào)度的方法,包括執(zhí)行用戶生成的線程原語,其中,所述執(zhí)行還包括調(diào)用生成線程控制指令的庫函數(shù);響應于所述線程原語,生成描述線程的工作描述符;促使所述工作描述符存儲在隊列系統(tǒng)中;以及在無操作系統(tǒng)干預的情況下,在OS隔離定序器上調(diào)度所述線程的執(zhí)行。
2. 如權(quán)利要求l所述的方法,還包括 初始化所述定序器以執(zhí)行用戶級并發(fā)多線程處理。
3. 如權(quán)利要求2所述的方法,其中所述初始化還包括在所述定序器上觸發(fā)用戶級分布式調(diào)度程序 的執(zhí)行。
4. 如權(quán)利要求l所述的方法,其中所述隊列系統(tǒng)包括與笫 一定序器類型相關(guān)聯(lián)的第 一隊列和與第 二定序器類型相關(guān)聯(lián)的第二隊列。
5. 如權(quán)利要求4所述的方法,其中所述第一定序器和所述第二定序器相對于至少一個計算度量不 對稱。
6. 如權(quán)利要求5所述的方法,其中所述計算度量是功能度量。
7. 如權(quán)利要求5所述的方法,其中所述計算度量是功耗度量。
8. 如權(quán)利要求6所述的方法,其中 所述功能度量是執(zhí)行環(huán)0操作的能力。
9. 如權(quán)利要求4所述的方法,其中所述促使還包括基于用戶提供的提示,促使所述工作描述符存 儲在所述第一隊列中。
10. 如權(quán)利要求l所述的方法,其中 所述線程原語是纖程創(chuàng)建原語。
11. 如權(quán)利要求l所述的方法,其中 所述線程原語是纖程同步原語。
12. 如權(quán)利要求l所述的方法,其中 所述線程原語是符合工業(yè)標準的應用程序員接口的一部分。
13. —種設(shè)備,包括包括與操作系統(tǒng)無關(guān)的分布式調(diào)度程序例程的第 一部分的第一 線程執(zhí)行單元;包括與操作系統(tǒng)無關(guān)的分布式調(diào)度程序例程的第二部分的第二 線程執(zhí)行單元;其中,所述第一線程執(zhí)行單元和所述笫二線程執(zhí)行單元能夠進 行并發(fā)多線程執(zhí)行;其中,所述第一部分和所述第二部分還查詢工作隊列以爭用描 述線程的工作描述符;以及其中,所述分布式調(diào)度程序例程基于所述爭用,在無操作系統(tǒng) 千預的情況下調(diào)度要在所述線程執(zhí)行單元中選定的一個上執(zhí)行的線 程。
14. 如權(quán)利要求13所迷的設(shè)備,其中所述線程執(zhí)行單元中的至少一個是操作系統(tǒng)可見的,并且所述 執(zhí)行單元中的至少另 一個是所述操作系統(tǒng)不可見的。
15. 如權(quán)利要求13所述的設(shè)備,其中 所述設(shè)備是單核處理器;以及所述第 一執(zhí)行單元和所述第二執(zhí)行單元是邏輯處理器。
16. 如權(quán)利要求13所迷的設(shè)備,其中 所述設(shè)備是多核處理器;以及 所述第一執(zhí)行單元和所述第二執(zhí)行單元是處理器核。
17. 如權(quán)利要求13所述的設(shè)備,其中 所述執(zhí)行單元在功能上對稱。
18. 如權(quán)利要求17所述的設(shè)備,其中所述隊列系統(tǒng)包括保存適用于所有所述執(zhí)行單元的工作描述符 的單個隊列。
19. 如權(quán)利要求13所述的設(shè)備,其中所述執(zhí)行單元中的至少 一個在計算上相對于其他執(zhí)行單元中的 一個或多個不對稱。
20. 如權(quán)利要求19所述的設(shè)備,其中所述隊列系統(tǒng)包括為所述至少一個非對稱執(zhí)行單元保存工作描 述符的第一隊列,并且還包括為所述一個或多個其他執(zhí)行單元保存 描述符的第二隊列。
21. —種多定序器多線程處理系統(tǒng),包括 存儲器系統(tǒng);第一定序器類型的笫一定序器;以及 第二定序器類型的第二定序器;以及存儲在所述存儲器系統(tǒng)中的軟件庫,所述軟件庫包括生成工作 隊列的一個或多個指令;所述庫還包括分布式調(diào)度程序,以執(zhí)行用戶指引的來自所述工 作隊列的要在所述定序器上執(zhí)行的工作的調(diào)度。
22. 如權(quán)利要求21所述的系統(tǒng),其中所迷分布式調(diào)度程序為所述第 一定序器和所述笫二定序器執(zhí)行 調(diào)度環(huán)。
23. 如權(quán)利要求21所述的系統(tǒng),其中所述工作隊列保存描述未決軟件線程的 一個或多個記錄。
24. 如權(quán)利要求23所述的系統(tǒng),其中所述一個或多個記錄各自包括相關(guān)聯(lián)的未決軟件線程的開始地
25. 如權(quán)利要求23所述的系統(tǒng),其中所述一個或多個記錄各自包括相關(guān)聯(lián)的未決軟件線程的棧指針。
26. 如權(quán)利要求23所述的系統(tǒng),其中所述分布式調(diào)度程序還執(zhí)行用戶指引的來自所述工作隊列的要 在所述定序器上執(zhí)行的工作的調(diào)度,使得所述定序器并發(fā)執(zhí)行其相 關(guān)聯(lián)的工作。
27. 如權(quán)利要求23所述的系統(tǒng),其中所述庫還包括一個或多個函數(shù),每個函數(shù)響應于相關(guān)聯(lián)的用戶 生成的原語而生成纖程指令,其中,所述原語符合眾所周知的應用 程序員接口標準。
28. 在多線程處理器中, 一種在多個定序器之間調(diào)度軟件線程 的執(zhí)行的方法,包括響應于用戶生成的線程指令,生成描述線程的線程描述符; 將所述線程描述符置于隊列中;執(zhí)行多個調(diào)度程序例程,每個所述例程與獨特的定序器相關(guān)聯(lián), 其中,所述多個定序器不受基于操作系統(tǒng)的線程調(diào)度程序影響; 其中,每個所述調(diào)度程序例程爭用所述隊列中的所迷描述符;以及調(diào)度所述線程以在所述定序器之一上執(zhí)行。
29. 如權(quán)利要求28所述的方法,還包括所述用戶生成的線程指令是原語,所述原語包括在應用程序員 接口中。
30. 如權(quán)利要求28所述的方法,其中 所述應用程序接口符合工業(yè)標準。
31. —種制品,包括具有多個機器可訪問指令的機器可訪問介 質(zhì),其中,在所述指令由處理器執(zhí)行時,所述指令提供以下操作執(zhí)行用戶生成的線程原語,其中,所述執(zhí)行還包括調(diào)用生成線 程控制指令的庫函數(shù);響應于所述線程原語,生成描述線程的工作描述符;促使所述工作描述符存儲在隊列系統(tǒng)中;以及在無操作系統(tǒng)干預的情況下,在定序器上調(diào)度所述線程的執(zhí)行。
32. 如權(quán)利要求31所述的制品,還包括在由處理器執(zhí)行時提供 以下操作的機器可訪問指令初始化所述定序器以執(zhí)行用戶級并發(fā)多線程處理。
33. 如權(quán)利要求32所迷的制品,其中提供初始化的所述指令還包括在由處理器執(zhí)行時提供以下操作 的指令在所述定序器上觸發(fā)用戶級分布式調(diào)度程序的執(zhí)行。
34. 如;f又利要求31所述的制品,其中所述隊列系統(tǒng)包括與第一定序器類型相關(guān)聯(lián)的第一隊列和與第 二定序器類型相關(guān)聯(lián)的第二隊列。
35. 如權(quán)利要求34所述的制品,其中所述第一定序器和所述第二定序器相對于至少一個計算度量不 對稱。
36. 如權(quán)利要求35所述的制品,其中 所迷計算度量是功能度量。
37. 如權(quán)利要求35所述的制品,其中 所述計算度量是功耗度量。
38. 如權(quán)利要求36所迷的制品,其中 所迷功能度量是執(zhí)行環(huán)0操作的能力。
39. 如權(quán)利要求34所述的制品,其中提供促使的所述指令還包括在由處理器執(zhí)行時提供以下操作的 指令基于用戶提供的提示,促使所述工作描述符存儲在所述第一 隊列中。
40. 如權(quán)利要求31所述的制品,其中 所述線程原語是纖程創(chuàng)建原語。
41. 如權(quán)利要求31所迷的制品,其中 所述線程原語是纖程同步原語。
42. 如權(quán)利要求31所述的制品,其中 所述線程原語是符合工業(yè)標準的應用程序員接口的一部分。
全文摘要
本文公開了在無操作系統(tǒng)干預的情況下調(diào)度與OS無關(guān)的“纖程”的方法、設(shè)備和系統(tǒng)實施例。對于至少一個實施例,由調(diào)度程序例程而不是操作系統(tǒng)調(diào)度纖程以供執(zhí)行。調(diào)度程序例程可在每個啟用的定序器上運行。調(diào)度程序可從隊列系統(tǒng)檢索纖程描述符。與調(diào)度程序相關(guān)聯(lián)的定序器隨后可執(zhí)行由描述符描述的纖程。本文還描述和聲明了其他實施例。
文檔編號G06F9/46GK101160565SQ200580045758
公開日2008年4月9日 申請日期2005年12月22日 優(yōu)先權(quán)日2004年12月30日
發(fā)明者A·馬利克, B·帕特爾, B·比比, C·考施克, G·欽亞, H·王, J·P·赫爾德, J·沈, M·吉爾卡, P·塞蒂, R·A·漢金斯, T·迪普, 田新民 申請人:英特爾公司