專利名稱:用于分區(qū)的多處理器系統(tǒng)的實(shí)時(shí)線程服務(wù)的制作方法
用于分區(qū)的多處理器系統(tǒng)的實(shí)時(shí)線程服務(wù)北息 冃眾發(fā)明領(lǐng)域本發(fā)明的各實(shí)施例涉及操作系統(tǒng)領(lǐng)域,尤其涉及實(shí)時(shí)線程。相關(guān)領(lǐng)域的描述實(shí)時(shí)操作系統(tǒng)(RTOS)是為實(shí)時(shí)應(yīng)用程序開發(fā)的操作系統(tǒng)(OS)。典型 地,實(shí)時(shí)應(yīng)用程序在與真實(shí)世界環(huán)境交互時(shí)要求確定性的響應(yīng)時(shí)間。在現(xiàn)有OS下開發(fā)的應(yīng)用程序并不具有不受潛在OS限制的完全專用和可 預(yù)測(cè)的環(huán)境。它或者需要與在隔離的環(huán)境之上或之內(nèi)運(yùn)行的特殊硬件和軟件平 臺(tái)相協(xié)調(diào)。隔離環(huán)境可以是在同一或另一處理器上其本身虛擬地址空間內(nèi)的獨(dú) 立進(jìn)程,通常帶有完全獨(dú)立的RTOS環(huán)境。應(yīng)用程序不得不通過顯式消息和數(shù) 據(jù)緩沖交互來與這一隔離的環(huán)境交互。這就導(dǎo)致了資源利用效率低下,并會(huì)引 起不確定的響應(yīng)時(shí)間。附圖簡(jiǎn)述通過參考以下用于說明本發(fā)明的實(shí)施例的描述和附圖將最好地理解本發(fā)明的實(shí)施例。附圖中
圖1是示出其中可實(shí)施本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的圖示。圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例示出多核實(shí)時(shí)線程服務(wù)的圖示。圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例示出實(shí)時(shí)線程服務(wù)的組件交互的圖示。圖4是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的共享虛擬地址空間的圖示。圖5是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的虛擬地址空間映射的圖示。圖6是根據(jù)本發(fā)明一個(gè)實(shí)施例示出連續(xù)的實(shí)時(shí)線程事件的圖示。圖7是根據(jù)本發(fā)明一個(gè)實(shí)施例示出支持多核環(huán)境中的實(shí)時(shí)線程服務(wù)的模塊的圖示。描述本發(fā)明的一個(gè)實(shí)施例是一種向多核環(huán)境中的應(yīng)用程序提供實(shí)時(shí)線程服務(wù)的技術(shù)。這些實(shí)時(shí)的核與OS隔離。驅(qū)動(dòng)程序在操作系統(tǒng)(OS)的內(nèi)核中發(fā)起。執(zhí)行程序則由驅(qū)動(dòng)程序發(fā)起以自舉并控制隔離的核。使用os上的庫(kù)為應(yīng)用程序創(chuàng)建實(shí)時(shí)線程。該庫(kù)露出用戶級(jí)應(yīng)用程序接口 (API)以便與驅(qū)動(dòng)程序和執(zhí) 行程序通信。實(shí)時(shí)線程與該應(yīng)用程序共享虛擬地址空間并受執(zhí)行程序和驅(qū)動(dòng)程 序的控制。在以下的描述中,陳述了眾多特定的細(xì)節(jié)。然而,應(yīng)理解可在沒有這些特 定的細(xì)節(jié)的情況下實(shí)施本發(fā)明的實(shí)施例。在其它的例子中,沒有示出公知的電 路、結(jié)構(gòu)和技術(shù),以免混淆對(duì)本發(fā)明的理解??蓪⒈景l(fā)明的一個(gè)實(shí)施例描述為進(jìn)程, 一般將該進(jìn)程描述為流程圖、流程 圖解、結(jié)構(gòu)圖或框圖。盡管流程圖將操作描述為順序進(jìn)程,但很多操作可并行或同時(shí)執(zhí)行。此外, 可重新安排操作的順序。進(jìn)程在其操作完成時(shí)終止。進(jìn)程可以對(duì)應(yīng)于方法、程 序、過程、生成或制造方法等。本發(fā)明的一個(gè)實(shí)施例是一種為多核或多處理器系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)線程服務(wù)的 技術(shù)。術(shù)語(yǔ)"實(shí)時(shí)"在這里指的是響應(yīng)于真實(shí)世界事件或事務(wù)的確定性時(shí)間。 各線程在用戶級(jí)處暴露。因此,可將其稱為輕型線程,因?yàn)橐4娴纳舷挛男?息的量很小。提供該線程服務(wù)以支持隔離的對(duì)稱多核或多處理器系統(tǒng)(SMP) 或核多處理器系統(tǒng)(CMP)。隔離的SMP/CMP平臺(tái)是多處理器/多核系統(tǒng),在 其中主機(jī)OS被引導(dǎo)并且僅知曉部分核或處理器。其余的處理器對(duì)OS不可見。 不可見的處理器也可稱為隔離的處理器。驅(qū)動(dòng)程序和執(zhí)行程序一起工作,從而 允許程序器經(jīng)由用戶級(jí)庫(kù)提供的API,在與主OS隔離的分區(qū)SMP平臺(tái)內(nèi)的核 /處理器上執(zhí)行線程。線程服務(wù)還允許程序器使用現(xiàn)成的和將來的多處理器 (MP)平臺(tái)來用實(shí)時(shí)子系統(tǒng)擴(kuò)展現(xiàn)今的非實(shí)時(shí)OS,其中實(shí)時(shí)子系統(tǒng)使用在其 中隔離的處理器與OS空間的處理器共享統(tǒng)一的虛擬地址空間的軟件模型。這 樣就能夠方便地移植現(xiàn)有的代碼并能利用多個(gè)核的有效工作來快速開發(fā)這一 OS擴(kuò)展,而不會(huì)產(chǎn)生對(duì)現(xiàn)有OS的限制。本發(fā)明的實(shí)施例的元件可由硬件、固件、軟件或其任意組合來實(shí)現(xiàn)。術(shù)語(yǔ)硬件一般指的是具有諸如電子、電磁、光、電光、機(jī)械、電機(jī)部件、組件或器 件等物理結(jié)構(gòu)的元件。術(shù)語(yǔ)軟件一般指的是邏輯結(jié)構(gòu)、方法、過程、程序、例 程、進(jìn)程、算法、公式、函數(shù)、表達(dá)式等。術(shù)語(yǔ)固件一般指的是實(shí)現(xiàn)或包含在 硬件結(jié)構(gòu)(例如,閃存)中的邏輯結(jié)構(gòu)、方法、過程、程序、例程、進(jìn)程、算法、 公式、函數(shù)、表達(dá)式等。固件的例子可包括微代碼、可寫控制存儲(chǔ)、微編程結(jié) 構(gòu)。當(dāng)實(shí)現(xiàn)在軟件或固件中時(shí),本發(fā)明的實(shí)施例的元件本質(zhì)上是執(zhí)行必需的任 務(wù)的代碼段。軟件/固件可包括用于執(zhí)行本發(fā)明的一個(gè)實(shí)施例中所述的操作的實(shí) 際代碼或用于仿真或模擬操作的代碼。程序或代碼段可存儲(chǔ)在處理器或機(jī)器可 訪問介質(zhì)中,或通過包含在載波中的計(jì)算機(jī)數(shù)據(jù)信號(hào)或由載波調(diào)制的信號(hào)在傳 輸介質(zhì)上發(fā)送。"處理器可讀或可訪問介質(zhì)"或"機(jī)器可讀或可訪問介質(zhì)"可 包括能存儲(chǔ)、發(fā)送或傳送信息的任何介質(zhì)。處理器可讀或機(jī)器可訪問介質(zhì)的例子包括電子電路、半導(dǎo)體存儲(chǔ)設(shè)備、只讀存儲(chǔ)器(ROM)、閃存、可擦除 ROM(EROM)、可擦除可編程ROM(EPROM)、軟盤、致密盤(CD)ROM、光盤、 硬盤、光纖介質(zhì)、射頻(RF)鏈路等。計(jì)算機(jī)數(shù)據(jù)信號(hào)可以包括能夠經(jīng)諸如電子 網(wǎng)絡(luò)信道、光纖、空氣、電磁、RF鏈路等傳輸介質(zhì)傳播的任何信號(hào)。代碼段 可以經(jīng)由諸如因特網(wǎng)、內(nèi)聯(lián)網(wǎng)等的計(jì)算機(jī)網(wǎng)絡(luò)下載。機(jī)器可訪問介質(zhì)可以具體 化為產(chǎn)品。機(jī)器可訪問介質(zhì)可包括數(shù)據(jù),該數(shù)據(jù)在被機(jī)器訪問時(shí),使得機(jī)器執(zhí) 行以下操作。機(jī)器可訪問介質(zhì)還可包括嵌入其中的程序代碼。程序代碼包括執(zhí) 行以下描述的操作的機(jī)器可讀代碼。術(shù)語(yǔ)"數(shù)據(jù)"在此指的是為了機(jī)器可讀的 目的而編碼的任何類型的信息。因此,它可以包括程序、代碼、數(shù)據(jù)、文件等。 本發(fā)明的全部或部分實(shí)施例可由硬件、軟件、固件或其任意組合來實(shí)現(xiàn)。 硬件、軟件或固件元件可具有互相耦合的多個(gè)模塊。硬件模塊通過機(jī)械、電、 光電磁或其它物理連接耦合到另一個(gè)模塊。軟件模塊通過函數(shù)、過程、方法、 子程序、或子例程調(diào)用、跨接、鏈路、參數(shù)、變量以及變?cè)獋鬟f、函數(shù)調(diào)用返 回等耦合到另一個(gè)模塊。軟件模塊被耦合到另一個(gè)模塊以接收變量、參數(shù)、變 元、指針等和/或生成或傳遞結(jié)果、更新的變量、指針等。固件模塊通過以上的 硬件和軟件耦合方法的任意組合來耦合到另一個(gè)模塊。硬件、軟件或固件模塊 可被耦合到另一個(gè)硬件、軟件或固件中的任何一個(gè)。模塊還可以是與在該平臺(tái)上運(yùn)行的操作系統(tǒng)交互的軟件驅(qū)動(dòng)程序或接口。模塊還可以是被配置為構(gòu)造、 建立、初始化、發(fā)送數(shù)據(jù)給硬件設(shè)備或從中接收數(shù)據(jù)的硬件驅(qū)動(dòng)程序。裝置可 包括硬件、軟件和固件模塊的任意組合??蓪⒈景l(fā)明的一個(gè)實(shí)施例描述為進(jìn)程, 一般將該進(jìn)程描述為流程圖、流程 圖解、結(jié)構(gòu)圖或框圖。盡管流程圖將操作描述為順序進(jìn)程,但很多操作可并行 或同時(shí)執(zhí)行。流程圖中的環(huán)路或迭代可由單個(gè)迭代來描述。應(yīng)理解,維持環(huán)路 索引或計(jì)數(shù)器以更新相關(guān)聯(lián)的計(jì)數(shù)器或指針。此外,可重新安排操作的順序。 進(jìn)程在其操作完成時(shí)終止。進(jìn)程可對(duì)應(yīng)于方法、程序、過程等??驁D可包含描 述元件、項(xiàng)、組件、器件、單元、子單元、結(jié)構(gòu)、方法、進(jìn)程、功能、操作、 功能性、任務(wù)等的塊或模塊??勺詣?dòng)或手動(dòng)地執(zhí)行功能性或操作。圖1A是示出其中可實(shí)施本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)100的圖示。系統(tǒng)10 包括處理器單元110、存儲(chǔ)器控制器集線器(MCH) 120、主存儲(chǔ)器130、輸入 /輸出控制器集線器(ICH) 140、互連145、大容量存儲(chǔ)接口 150、以及輸入/ 輸出(I/O)設(shè)備180i至180K。處理器單元110表示任何類型的體系結(jié)構(gòu)的中央處理單元,諸如利用超線 程、安全、網(wǎng)絡(luò)、數(shù)字媒體技術(shù)的處理器、多核處理器、嵌入式處理器、移動(dòng) 處理器、微控制器、數(shù)字信號(hào)處理器、超標(biāo)量計(jì)算機(jī)、向量處理器、單指令多 數(shù)據(jù)(SIMD)計(jì)算機(jī)、復(fù)雜指令集計(jì)算機(jī)(CISC)、精簡(jiǎn)指令集計(jì)算機(jī)(RISC)、超 長(zhǎng)指令字(VLIW)或混合式體系結(jié)構(gòu)。更具體,處理器單元110可以具有其中多 核或處理器并行操作的多核或多處理器體系結(jié)構(gòu)。MCH 120提供對(duì)諸如主存儲(chǔ)器130、 ICH140之類的存儲(chǔ)器和輸入/輸出設(shè) 備的控制和配置。可將MCH 120集成為芯片組,該芯片組集成了諸如圖形、 媒體、隔離執(zhí)行模式、主機(jī)-外圍總線接口、存儲(chǔ)器控制、電源管理等多種功 能。MCH 120或MCH 120中的存儲(chǔ)器控制器功能可集成在處理器單元110中。 在某些實(shí)施例中,處理器單元110內(nèi)部或外部的存儲(chǔ)器控制器可為處理器單元 110中的所有核或處理器工作。在其它實(shí)施例中,它可包括可分開地為處理器 單元110中的不同的核或處理器工作的不同的部分。主存儲(chǔ)器130存儲(chǔ)系統(tǒng)代碼和數(shù)據(jù)。主存儲(chǔ)器130通常以動(dòng)態(tài)隨機(jī)存取存 儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)或包括不需要刷新的存儲(chǔ)器的任何其它類型的存儲(chǔ)器來實(shí)現(xiàn)。主存儲(chǔ)器130可以包括存儲(chǔ)器設(shè)備雙倍數(shù)率(DDR2) DRAM的多條通道。更具體地,存儲(chǔ)器130包括多核實(shí)時(shí)(RT)線 程服務(wù)135。多核RT線程服務(wù)135向應(yīng)用程序提供服務(wù)以在多核環(huán)境中創(chuàng)建 并管理RT線程。ICH 140具有設(shè)計(jì)成支持I/O功能的多種功能。ICH 140還可與MCH 20 一起集成為芯片組,或與MCH20分離以執(zhí)行I/O功能。ICH140可包括多個(gè) 接口和1/0功能,諸如外圍組件互連(PCI)總線接口、處理器接口、中斷控制器、 直接存儲(chǔ)器訪問(DMA)控制器、電源管理邏輯、定時(shí)器、系統(tǒng)管理總線(SMBus)、 通用串行總線(USB)接口、大容量存儲(chǔ)接口、低引腳數(shù)(LPC)接口等?;ミB145提供至外圍設(shè)備的接口?;ミB145可以是點(diǎn)對(duì)點(diǎn)的,或連接到多 個(gè)設(shè)備。為了清楚起見,沒有示出所有的互連??深A(yù)想互連145可包括任何互 連或總線,諸如外圍組件互連(PCI)、 PCI快速、通用串行總線(USB)、以及直 接媒體接口(DMI)等。大容量存儲(chǔ)接口 150提供對(duì)大容量存儲(chǔ)設(shè)備的接口,這些大容量存儲(chǔ)設(shè)備 存儲(chǔ)諸如代碼、程序、文件、數(shù)據(jù)和應(yīng)用程序之類的檔案信息。大容量存儲(chǔ)設(shè) 備可包括致密盤(CD)只讀存儲(chǔ)器(ROM)152、數(shù)字視頻/通用盤(DVD)154、軟盤 驅(qū)動(dòng)器156和硬盤驅(qū)動(dòng)器158、以及任何其他磁或光存儲(chǔ)設(shè)備。大容量存儲(chǔ)接 口 150提供了用于讀取機(jī)器可訪問介質(zhì)的機(jī)構(gòu)。I/O設(shè)備180!至180k可包括用 于執(zhí)行I/O功能的任何I/O設(shè)備。I/O設(shè)備18(h至180K的例子包括用于輸入設(shè) 備(例如,鍵盤、鼠標(biāo)、跟蹤球、點(diǎn)擊設(shè)備)的控制器、媒體卡(例如,音頻、視 頻、圖形顯示)、網(wǎng)卡以及任何其他的外圍控制器。圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例示出圖1所示的多核實(shí)時(shí)(RT)線程服務(wù) 135的圖示。多核RT線程服務(wù)135包括主核210、 N個(gè)RT核心220!至220N、 OS 230、最高特權(quán)級(jí)(MPL) 240以及最低特權(quán)級(jí)(LPL) 250。主核210是其上載有并運(yùn)行OS 230的核。存在OS 230可以在上運(yùn)行的一 個(gè)以上的主核。N個(gè)RT核心220i至220w是由基本輸入輸出系統(tǒng)(BIOS)在 引導(dǎo)期間隔離的核或處理器,或者它們也可由OS 230隔離。N個(gè)RT核心22(h 至220w對(duì)OS 230不可見。它們可被稱為輕型核,與稍后描述的在用戶級(jí)上運(yùn) 行的輕型線程相對(duì)應(yīng)。一旦由用戶205引導(dǎo),OS 230可被載入并在主核210上運(yùn)行。OS 230支 持分區(qū)的對(duì)稱多處理(SMP)系統(tǒng)。在一個(gè)實(shí)施例中,OS 230是Microsoft Windows Server 2003 OS。應(yīng)該預(yù)料到也可以使用支持分區(qū)MP的其他OS。 OS 230支持表示各種特權(quán)級(jí)別的分層。MPL240是其上運(yùn)行OS 230內(nèi)核的最高特 權(quán)級(jí)。LPL級(jí)別250是其中運(yùn)行用戶應(yīng)用或程序的最低特權(quán)級(jí)。在一個(gè)實(shí)施例 中,MPL 240和LPL 250分別對(duì)應(yīng)于Microsoft Windows Server 2003 OS中的內(nèi)核模式和用戶模式。OS 230具有驅(qū)動(dòng)程序260、庫(kù)285、以及稱為應(yīng)用程序280的應(yīng)用程序或 OS線程。驅(qū)動(dòng)程序260在OS 230啟動(dòng)時(shí)由OS 230發(fā)起。隨后,驅(qū)動(dòng)程序260 發(fā)起N個(gè)執(zhí)行程序270!至270N,每個(gè)執(zhí)行程序用于N個(gè)RT核心22(h至220N 中的每個(gè)核。每個(gè)N個(gè)RT核心22(^至220N都具有自己的執(zhí)行程序?qū)嵗?。?可以為所有的RT核發(fā)起單個(gè)執(zhí)行程序。驅(qū)動(dòng)程序260和N個(gè)執(zhí)行程序270, 至270n在MPL 240中操作。應(yīng)用程序280則在LPL 250中由用戶280發(fā)起。 它載入庫(kù)285。應(yīng)用程序280隨后請(qǐng)求在RT核290k上創(chuàng)建RT線程,諸如RT 線程290k。如有需要,N個(gè)RT核心220!至220n中的毎一個(gè)都可以代表OS應(yīng) 用程序執(zhí)行RT線程。沒有執(zhí)行RT線程的RT核被認(rèn)為是空閑的。在本發(fā)明的 其它實(shí)施例中,單個(gè)RT核可以代表單個(gè)OS應(yīng)用程序執(zhí)行若干RT線程,或者 代表若干OS應(yīng)用程序執(zhí)行若干RT線程。OS 230沒有在核心22(h至220n上 操作。這樣,執(zhí)行程序270,至270N和RT線程290!至290N因受核處理器支持 而在MPL 240和LPL 250處操作。圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例示出RT線程服務(wù)的組件交互的圖示。如上所述,驅(qū)動(dòng)程序260和執(zhí)行程序270在MPL 240中運(yùn)行。應(yīng)用程序 280、庫(kù)285和RT線程290k在LPL 250中運(yùn)行。這些組件共同形成用于隔離 的SMP系統(tǒng)的多核RT線程服務(wù)。驅(qū)動(dòng)程序260在啟動(dòng)時(shí)在每個(gè)可用核220k上發(fā)起執(zhí)行程序270k。它可以 發(fā)起、聯(lián)結(jié)和刪除RT線程。它可以釘住分配給RT線程或應(yīng)用程序的存儲(chǔ)器 區(qū)域或者取消該區(qū)域的釘住。它還保持與所有執(zhí)行程序的通信。執(zhí)行程序270k切換至RT線程290k或從其切換。換句話說,它分別執(zhí)行在 MPL240和LPL250之間任務(wù)的轉(zhuǎn)換。它還執(zhí)行異常處理和其他任務(wù),諸如占先和信令。庫(kù)285是含有許多有用函數(shù)的動(dòng)態(tài)鏈接庫(kù),從而執(zhí)行與提供線程服務(wù)支持 有關(guān)的多種任務(wù)。它代理來自主核210的驅(qū)動(dòng)程序260的服務(wù),包括發(fā)起和聯(lián) 結(jié)RT線程290k和存儲(chǔ)器釘住。它還代理執(zhí)行程序270k的服務(wù),包括管理線程 退出。此外,它還可以執(zhí)行任何運(yùn)行時(shí)間任務(wù),諸如堆管理、調(diào)試打印以及同 步。應(yīng)用程序280使用線程服務(wù)創(chuàng)建線程,這些線程在圖2所示的RT核心或 處理器22(^至220w上運(yùn)行。例如,它使用線程服務(wù)來創(chuàng)建RT線程290k。 RT 線程創(chuàng)建開始于來自O(shè)S 230內(nèi)的應(yīng)用程序280對(duì)庫(kù)285的調(diào)用,以請(qǐng)求創(chuàng)建 RT線程。該調(diào)用提供入口點(diǎn)(例如,函數(shù)名)和自變量。庫(kù)285隨后請(qǐng)求驅(qū) 動(dòng)程序260從N個(gè)RT核心220!至220N中分配RT核。驅(qū)動(dòng)程序260通過N 個(gè)RT核心220,至220N以確定或找出可用于創(chuàng)建線程的核。假設(shè)核k可用。 驅(qū)動(dòng)程序270隨后被請(qǐng)求向下釘住RT線程正確操作所需的存儲(chǔ)器頁(yè)面。消息 隨后被發(fā)送給執(zhí)行程序270k,以請(qǐng)求其在核220k上發(fā)起RT線程。執(zhí)行程序270k 隨后創(chuàng)建RT線程290k。執(zhí)行程序270k建立頁(yè)面目錄和表,從而作為應(yīng)用程序280的虛擬地址空 間一對(duì)一映射。它隨后切換至LPL250并跳至用戶的入口點(diǎn)。當(dāng)RT線程290k 退出或者有外部事件(例如,中斷)出現(xiàn)時(shí),控制返回至執(zhí)行程序270k。執(zhí)行 程序270k隨后或者服務(wù)該事件并將控制返回給應(yīng)用程序280,或者清除并發(fā)信 號(hào)通知驅(qū)動(dòng)程序260和庫(kù)285該RT線程290k已完成執(zhí)行。在RT線程290k執(zhí) 行期間出現(xiàn)的大多數(shù)可恢復(fù)異??捎蓤?zhí)行程序270k處理,諸如在OS 230內(nèi)完 成對(duì)用戶定義的處理程序的調(diào)用。圖4是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例由RT線程共享的虛擬地址空間的圖 示。RT線程對(duì)虛擬地址空間的共享經(jīng)由OS應(yīng)用程序及其實(shí)時(shí)線程共享同一頁(yè) 面目錄來實(shí)現(xiàn)。主核210具有指向頁(yè)面目錄430的頁(yè)面目錄基寄存器(PDBR) 415。核心 220,至220n分別具有PDBR 425〗至425N。主核210上的每個(gè)應(yīng)用程序都具有 自己的頁(yè)面目錄。頁(yè)面目錄是每個(gè)應(yīng)用程序上下文的一部分,因而在上下文切 換上保存并恢復(fù)。當(dāng)RT線程被創(chuàng)建并執(zhí)行時(shí),關(guān)聯(lián)核的PDBR則改變?yōu)榘l(fā)起應(yīng)用程序的PDBR??蛇x地,核心220i至220N的PDBR可以指向父進(jìn)程的頁(yè) 面目錄的副本,該副本持有該父進(jìn)程虛擬地址空間的子集。由此,該RT線程 就與調(diào)用它的應(yīng)用程序共享同一虛擬地址空間。頁(yè)面目錄430含有根據(jù)應(yīng)用程序此刻的物理存儲(chǔ)器需求指向K個(gè)頁(yè)面表 440,至440k的指針。頁(yè)面表440i至440K指向位于物理存儲(chǔ)器450內(nèi)相應(yīng)的頁(yè) 面460,至460M。此外,還可以執(zhí)行處理器釘住以確保由RT線程使用的應(yīng)用程序頁(yè)面不被 OS存儲(chǔ)器管理器所驅(qū)逐。這可以使用設(shè)置在OS內(nèi)核中的API來實(shí)現(xiàn)。庫(kù)285 自動(dòng)釘住執(zhí)行RT線程290k所需的代碼和數(shù)據(jù)段。經(jīng)要求的鎖定和分頁(yè)可得到高效使用。圖5是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例由執(zhí)行程序執(zhí)行的虛擬地址空間映 射500的圖示。映射500示出了執(zhí)行程序270k的頁(yè)面目錄。所有的執(zhí)行程序使 用同一個(gè)頁(yè)面目錄。圖5所示的執(zhí)行程序的頁(yè)面目錄與圖4所示的RT線程的 頁(yè)面目錄不同。對(duì)RT線程頁(yè)面目錄的分配在關(guān)聯(lián)核被分配給應(yīng)用程序時(shí)進(jìn)行。 另一方面,執(zhí)行程序頁(yè)面目錄可在該核尚未被分配時(shí)使用。映射500包括OS 虛擬地址空間510、物理存儲(chǔ)器地址空間520以及執(zhí)行程序虛擬地址空間530。執(zhí)行程序代碼作為驅(qū)動(dòng)程序260的一部分被編譯,因此被載入大于2千兆 字節(jié)(2G)的線性地址。所有的動(dòng)態(tài)分配都從OS系統(tǒng)堆中執(zhí)行,這就確保所 有的執(zhí)行程序存儲(chǔ)器都免受用戶代碼的侵占,而只能由內(nèi)核模式代碼訪問。執(zhí) 行程序頁(yè)面目錄是OS系統(tǒng)(〉2G)線性存儲(chǔ)器的很小的、 一對(duì)一子集。它可 用于映射執(zhí)行程序正確操作所需的結(jié)構(gòu)。這些結(jié)構(gòu)的示例是執(zhí)行程序代碼和 數(shù)據(jù)、全局描述符表(GDT)、中斷描述符表(IDT)、先進(jìn)可編程中斷控制器 (APIC)信息、大小合理的堆或緩沖區(qū)(例如,64K)、執(zhí)行程序管理結(jié)構(gòu)、 消息緩沖區(qū)(例如,存儲(chǔ)器管道)和棧。OS虛擬地址空間510占據(jù)了由主核210提供的整個(gè)虛擬地址空間。它包 括由驅(qū)動(dòng)程序260、執(zhí)行程序270k和執(zhí)行程序存儲(chǔ)器結(jié)構(gòu)540占據(jù)的存儲(chǔ)器區(qū) 域。執(zhí)行程序存儲(chǔ)器結(jié)構(gòu)540可以包括執(zhí)行程序堆、GDT和IDT。物理存儲(chǔ)器 地址空間520包含由OS內(nèi)的軟件組件映射的存儲(chǔ)器區(qū)域。所有的存儲(chǔ)器分配 都由主核210 (圖2)完成。對(duì)執(zhí)行程序頁(yè)面目錄/頁(yè)面表的映射則通過釘住頁(yè)面并在隨后將一對(duì)一的物理/線型復(fù)本從OS頁(yè)面目錄映射到執(zhí)行程序頁(yè)面目錄。例如,驅(qū)動(dòng)程序260可被映射至存儲(chǔ)器區(qū)域550和552,執(zhí)行程序270k可 被映射至存儲(chǔ)器區(qū)域560和562,而執(zhí)行程序存儲(chǔ)器結(jié)構(gòu)540則可被映射至存 儲(chǔ)器區(qū)域570和572。執(zhí)行程序虛擬地址空間530在一對(duì)一映射上對(duì)應(yīng)于OS 虛擬地址空間510。圖6是根據(jù)本發(fā)明一個(gè)實(shí)施例示出連續(xù)的RT線程事件的圖示。這一連續(xù) 的RT線程事件包括用戶205、 OS 230、驅(qū)動(dòng)程序260、執(zhí)行程序270k、應(yīng)用 程序280和RT線程290k。這些事件的順序由時(shí)標(biāo)A至L指示。開始時(shí),在時(shí)刻A,用戶205引導(dǎo)系統(tǒng),且OS 230被載入。在初始化之 后,在時(shí)刻B, OS 230以內(nèi)核模式發(fā)起驅(qū)動(dòng)程序260。在時(shí)刻C,驅(qū)動(dòng)程序260 發(fā)起對(duì)所有隔離的核的執(zhí)行程序270k。此刻,多核RT線程服務(wù)135向上并運(yùn) 行。在時(shí)刻D,在發(fā)起執(zhí)行程序270k之后,用戶205開始應(yīng)用程序280,該應(yīng) 用程序280可以使用多核RT線程服務(wù)135。在時(shí)刻E,應(yīng)用程序280請(qǐng)求經(jīng)由庫(kù)285創(chuàng)建RT線程。于是就創(chuàng)建合適 的結(jié)構(gòu)并釘住所有相關(guān)的線性段。這一請(qǐng)求經(jīng)由庫(kù)285發(fā)送至驅(qū)動(dòng)程序260。 驅(qū)動(dòng)程序260于是驗(yàn)證可用核存在。在時(shí)刻F,驅(qū)動(dòng)程序260發(fā)送請(qǐng)求至可用 核k上的執(zhí)行程序270k,以請(qǐng)求執(zhí)行程序270k引發(fā)(spawn) RT線程。在時(shí) 刻G,執(zhí)行程序270k在可用核220k上引發(fā)RT線程290K。 RT線程290k隨后在 最低特權(quán)級(jí)250中運(yùn)行。在時(shí)刻H,應(yīng)用程序280通過使用共享變量來發(fā)信號(hào)通知RT線程290k停 止的方式來終止RT線程290K。在時(shí)刻I,應(yīng)用程序280將RT線程290k聯(lián)結(jié) 至驅(qū)動(dòng)程序260,以請(qǐng)求驅(qū)動(dòng)程序260等待直到RT線程2卯k實(shí)際已停止。在 時(shí)刻J, RT線程290k終止并經(jīng)由庫(kù)函數(shù)調(diào)用退出??刂齐S后轉(zhuǎn)移至執(zhí)行程序 270k。在時(shí)刻K,執(zhí)行程序270k通知驅(qū)動(dòng)程序260該RT線程290k終止。在時(shí) 刻L,驅(qū)動(dòng)程序260發(fā)信號(hào)給應(yīng)用程序280,以指示RT線程290k已被聯(lián)結(jié)。 驅(qū)動(dòng)程序260解除對(duì)應(yīng)用程序280的阻止以允許其接收RT線程退出狀態(tài)并繼 續(xù)運(yùn)行。此刻,應(yīng)用程序280己經(jīng)完成它對(duì)RT線程290k的使用。圖7是根據(jù)本發(fā)明一個(gè)實(shí)施例示出支持在多核環(huán)境中的RT線程服務(wù)的模 塊700的圖示。模塊700包括資源管理功能710、驅(qū)動(dòng)程序-執(zhí)行程序通信720、存儲(chǔ)器釘住功能730和存儲(chǔ)器釘住跟蹤740。資源管理功能710是基于記住RT核活動(dòng)的機(jī)制。在一個(gè)實(shí)施例中,驅(qū)動(dòng) 程序維持兩個(gè)列表。第一列表包括所有未分配的或自由的執(zhí)行程序。第二列表 包括為使用RT線程服務(wù)的每個(gè)用戶應(yīng)用程序分配的執(zhí)行程序。在每次發(fā)起RT 線程時(shí),驅(qū)動(dòng)程序在第一列表中找出可用執(zhí)行程序,并將該執(zhí)行程序移至第二 列表。如果所有的執(zhí)行程序都已分配,則驅(qū)動(dòng)程序向調(diào)用應(yīng)用程序返回錯(cuò)誤。 該列表由執(zhí)行程序首部的指針?biāo)溄?。無論什么時(shí)候,執(zhí)行程序都剛好屬于一 個(gè)列表。使用這一列表結(jié)構(gòu),就可以實(shí)現(xiàn)額外的或者更為復(fù)雜的資源管理策略。驅(qū)動(dòng)程序-執(zhí)行程序通信720在驅(qū)動(dòng)程序和執(zhí)行程序之間提供通信機(jī)制。 在一個(gè)實(shí)施例中,該通信機(jī)制使用存儲(chǔ)器管道。該管道可用循環(huán)存儲(chǔ)器緩沖區(qū) 來實(shí)現(xiàn)。執(zhí)行程序和驅(qū)動(dòng)程序具有它們自己的管道來作為引入消息隊(duì)列。發(fā)送 器找到合適的消息隊(duì)列,將消息寫入該隊(duì)列,并發(fā)信號(hào)通知接受器讀取其隊(duì)列。 每個(gè)存儲(chǔ)器管道都具有鎖,以防止多個(gè)消息被同時(shí)寫入隊(duì)列。存儲(chǔ)器釘住功能730向RT線程分配并釘住存儲(chǔ)器區(qū)域。完成上述功能以 確保OS虛擬存儲(chǔ)器管理器不會(huì)使由RT線程使用的頁(yè)面出頁(yè)面。可通過驅(qū)動(dòng) 程序使用OS內(nèi)核的存儲(chǔ)器管理器服務(wù)來向下釘住這些頁(yè)面。在一個(gè)實(shí)施例中, 庫(kù)自動(dòng)釘住執(zhí)行RT線程所需的代碼和數(shù)據(jù)段。在最為簡(jiǎn)單的方法中,進(jìn)程930 在載入該庫(kù)之時(shí)鎖定所有的代碼和數(shù)據(jù)段,包括堆緩沖區(qū)。這一簡(jiǎn)單方法會(huì)導(dǎo) 致為每個(gè)應(yīng)用程序釘住大量的存儲(chǔ)器。更為高效的方法則可使用按要求的鎖定 和分頁(yè)。執(zhí)行存儲(chǔ)器釘住跟蹤功能740,以便向OS主存進(jìn)程提供存儲(chǔ)器釘住服務(wù)。 驅(qū)動(dòng)程序不依賴用戶應(yīng)用程序,以在退出前釋放其所有釘住的區(qū)域。通過跟蹤 釘住的區(qū)域,驅(qū)動(dòng)程序如有需要,可以執(zhí)行任何清除。跟蹤可通過使用單鏈接 列表結(jié)構(gòu)來執(zhí)行。在一個(gè)實(shí)施例中,使用Windows 2003 OS中的存儲(chǔ)器描述符 列表(MDL)。在這一單個(gè)列表上記錄有來自使用RT線程服務(wù)的所有應(yīng)用程 序的所有被釘住的存儲(chǔ)器區(qū)域。對(duì)列表的訪問可由互斥機(jī)制保護(hù)。當(dāng)驅(qū)動(dòng)程序 260從庫(kù)接收RT線程被終止的通知時(shí),該功能740就解除對(duì)存儲(chǔ)器區(qū)域的釘 住。這可以通過遍歷被釘住緩沖區(qū)的列表并解除對(duì)分配給已終止RT線程的任 何緩沖區(qū)的釘住而實(shí)現(xiàn)。本發(fā)明的實(shí)施例為分區(qū)的多處理器系統(tǒng)提供有效的RT線程服務(wù)。該線程 服務(wù)向用戶提供在專用和可預(yù)測(cè)子系統(tǒng)上運(yùn)行要求實(shí)時(shí)性能(例如,媒體編碼) 的強(qiáng)計(jì)算的能力,而免受OS調(diào)度程序的任意性和不確定性性質(zhì)的影響。應(yīng)用程序和RT線程通過多線程協(xié)作模型進(jìn)行協(xié)作,并通過同一虛擬地址空間進(jìn)行 通信,從而能夠方便地開發(fā)新的應(yīng)用程序并能方便地移動(dòng)現(xiàn)有的應(yīng)用程序。更 具體地,不再需要預(yù)先確定在OS上執(zhí)行代碼的哪部分,而在RT核或處理器 上執(zhí)行哪部分。計(jì)算可以在兩邊完成,從而允許OS線程在其備用循環(huán)內(nèi)提供 額外的計(jì)算能力。此外,相同的代碼無需重新編譯,就能夠在OS和RT核兩 者上運(yùn)行。最后,不存在封裝這一復(fù)雜因素。不再需要為兩個(gè)OS編譯同一程 序,或編譯兩個(gè)程序,每個(gè)OS使用一個(gè)。RT線程服務(wù)僅需要標(biāo)準(zhǔn)的OS (例 如,Windows)開發(fā)環(huán)境。盡管根據(jù)幾個(gè)實(shí)施例描述了本發(fā)明,但本領(lǐng)域的技術(shù)人員將意識(shí)到本發(fā)明 不限于所述的實(shí)施例,而是可用所附權(quán)利要求的精神和范圍內(nèi)的修改和改變來 實(shí)施本發(fā)明因此將說明書視為說明性的而不是限制性的。
權(quán)利要求
1.一種方法,包括在操作系統(tǒng)(OS)的最高特權(quán)級(jí)(MPL)下,在多核環(huán)境內(nèi)的實(shí)時(shí)(RT)核上發(fā)起執(zhí)行程序,所述RT核與所述OS隔離;以及在最低特權(quán)級(jí)(LPL)下在所述RT核上使用庫(kù)為應(yīng)用程序創(chuàng)建RT線程,所述庫(kù)由所述應(yīng)用程序載入,所述RT線程與所述應(yīng)用程序共享虛擬地址空間。
2. 如權(quán)利要求l所述的方法,其特征在于,創(chuàng)建所述RT線程包括 接收來自所述庫(kù)的創(chuàng)建請(qǐng)求,所述庫(kù)傳遞來自所述應(yīng)用程序的所述創(chuàng)建請(qǐng)求;驗(yàn)證所述RT核可用;以及將引發(fā)請(qǐng)求發(fā)送給所述執(zhí)行程序,所述執(zhí)行程序在所述RT核上引發(fā)所述 RT線程。
3. 如權(quán)利要求l所述的方法,其特征在于,還包括改變所述RT線程的頁(yè)面目錄基寄存器(PDBR)以指向所述OS內(nèi)的父進(jìn) 程的頁(yè)面目錄,或者指向持有所述父進(jìn)程虛擬地址空間子集的所述頁(yè)面目錄的副本。
4. 如權(quán)利要求3所述的方法,其特征在于,還包括 與所述應(yīng)用程序通信;管理由所述RT線程使用的存儲(chǔ)器區(qū)域的釘?。灰约?經(jīng)由共享的存儲(chǔ)器緩沖區(qū)與所述執(zhí)行程序通信。
5. 如權(quán)利要求4所述的方法,其特征在于,與所述應(yīng)用程序通信包括 接收來自所述應(yīng)用程序的等待請(qǐng)求,以等待所述RT線程停止; 接收來自所述執(zhí)行程序的信號(hào),所述信號(hào)指示所述RT線程已停止;以及解除對(duì)所述應(yīng)用程序的阻止,以允許所述應(yīng)用程序接收來自所述RT線程的退出狀態(tài)。
6. 如權(quán)利要求4所述的方法,其特征在于,管理所述存儲(chǔ)器區(qū)域的釘住包括釘住給所述RT線程的存儲(chǔ)器區(qū)域; 跟蹤所述存儲(chǔ)器區(qū)域;從所述庫(kù)接收所述RT線程終止的通知;以及 解除對(duì)所述存儲(chǔ)器區(qū)域的釘住。
7. 如權(quán)利要求l所述的方法,其特征在于,還包括 管理在所述多核環(huán)境上的資源。
8. —種制品,包括一種包括數(shù)據(jù)的機(jī)器可訪問介質(zhì),當(dāng)所述數(shù)據(jù)由機(jī)器訪問時(shí),使得所述機(jī) 器執(zhí)行如下動(dòng)作在操作系統(tǒng)(OS)的最高特權(quán)級(jí)(MPL)下,在多核環(huán)境內(nèi)的實(shí)時(shí)(RT) 核上發(fā)起執(zhí)行程序,所述RT核與所述OS隔離;以及在最低特權(quán)級(jí)(LPL)下在所述RT核上使用庫(kù)為應(yīng)用程序創(chuàng)建RT線程, 所述庫(kù)由所述應(yīng)用程序載入,所述RT線程與所述應(yīng)用程序共享虛擬地址空間。
9. 如權(quán)利要求8所述的制品,其特征在于,所述使得所述機(jī)器執(zhí)行創(chuàng)建 所述RT線程的數(shù)據(jù)包括在由機(jī)器訪問時(shí),使得所述機(jī)器執(zhí)行如下操作的數(shù)據(jù)接收來自所述庫(kù)的創(chuàng)建請(qǐng)求,所述庫(kù)傳遞來自所述應(yīng)用程序的所述創(chuàng)建請(qǐng)求;驗(yàn)證所述RT核可用;以及將引發(fā)請(qǐng)求發(fā)送給所述執(zhí)行程序,所述執(zhí)行程序在所述RT核上引發(fā)所述 RT線程。
10. 如權(quán)利要求8所述的制品,其特征在于,所述數(shù)據(jù)還包括在由機(jī)器訪 問時(shí),使得所述機(jī)器執(zhí)行如下操作的數(shù)據(jù)改變所述RT線程的頁(yè)面目錄基寄存器(PDBR)以指向所述OS內(nèi)的父進(jìn) 程的頁(yè)面目錄,或者指向持有所述父進(jìn)程虛擬地址空間子集的所述頁(yè)面目錄的副本。
11. 如權(quán)利要求10所述的制品,其特征在于,所述數(shù)據(jù)還包括在由機(jī)器 訪問時(shí),使得所述機(jī)器執(zhí)行如下操作的數(shù)據(jù)與所述應(yīng)用程序通信;管理由所述RT線程使用的存儲(chǔ)器區(qū)域的釘??;以及經(jīng)由共享的存儲(chǔ)器緩沖區(qū)與所述執(zhí)行程序通信。
12. 如權(quán)利要求11所述的制品,其特征在于,所述使得所述機(jī)器執(zhí)行與所述應(yīng)用程序通信的數(shù)據(jù)包括在由機(jī)器訪問時(shí),使得所述機(jī)器執(zhí)行如下操作的 數(shù)據(jù)接收來自所述應(yīng)用程序的等待請(qǐng)求,以等待所述RT線程停止; 接收來自所述執(zhí)行程序的信號(hào),所述信號(hào)指示所述RT線程己停止;以及 解除對(duì)所述應(yīng)用程序的阻止,以允許所述應(yīng)用程序接收來自所述RT線程 的退出狀態(tài)。
13. 如權(quán)利要求11所述的制品,其特征在于,所述使得所述機(jī)器執(zhí)行管理所述存儲(chǔ)器區(qū)域的釘住的數(shù)據(jù)包括在由機(jī)器訪問時(shí),使得所述機(jī)器執(zhí)行如下操作的數(shù)據(jù)釘住給所述RT線程的存儲(chǔ)器區(qū)域; 跟蹤所述存儲(chǔ)器區(qū)域;從所述庫(kù)接收所述RT線程終止的通知;以及 解除對(duì)所述存儲(chǔ)器區(qū)域的釘住。
14. 如權(quán)利要求8所述的制品,其特征在于,還包括在由機(jī)器訪問時(shí),使 得所述機(jī)器執(zhí)行如下操作的數(shù)據(jù)管理在所述多核環(huán)境上的資源。
15. —種系統(tǒng),包括具有操作系統(tǒng)(OS)的主核,所述OS支持最高特權(quán)級(jí)和最低特權(quán)級(jí); 與所述OS隔離的多個(gè)核,所述核支持所述最高和最低特權(quán)級(jí); 在所述最低特權(quán)級(jí)下運(yùn)行的應(yīng)用程序;以及允許所述應(yīng)用程序在隔離的核上創(chuàng)建實(shí)時(shí)(RT)線程的RT線程服務(wù),所 述RT線程服務(wù)包括在所述最高特權(quán)級(jí)下運(yùn)行并由所述OS發(fā)起的驅(qū)動(dòng)程序,所述驅(qū)動(dòng)程 序控制所述RT線程,由所述驅(qū)動(dòng)程序在所述隔離的核上發(fā)起并在所述最高特權(quán)級(jí)下運(yùn)行 以引發(fā)所述RT線程的執(zhí)行程序,所述RT線程與所述應(yīng)用程序共享虛擬 地址空間,以及由在所述最低特權(quán)級(jí)下運(yùn)行的所述應(yīng)用程序載入的庫(kù)。
16. 如權(quán)利要求15所述的系統(tǒng),其特征在于,所述驅(qū)動(dòng)器驗(yàn)證所述隔離的核是可用的并且在接收到來自所述庫(kù)的創(chuàng)建請(qǐng)求時(shí),將引發(fā)請(qǐng)求發(fā)送給所述 可用隔離核上的所述執(zhí)行程序。
17. 如權(quán)利要求15所述的系統(tǒng),其特征在于,所述執(zhí)行程序改變所述RT 線程的頁(yè)面目錄基寄存器(PDBR)以指向所述OS內(nèi)的父進(jìn)程的頁(yè)面目錄, 或者指向持有所述父進(jìn)程虛擬地址空間子集的所述頁(yè)面目錄的副本。
18. 如權(quán)利要求15所述的系統(tǒng),其特征在于,所述驅(qū)動(dòng)程序解除對(duì)所述 應(yīng)用程序的阻止,以允許所述應(yīng)用程序在從所述執(zhí)行程序接收指示所述RT線 程已停止的信號(hào)之后,接收來自所述RT線程的退出狀態(tài)。
19. 如權(quán)利要求15所述的系統(tǒng),其特征在于,所述執(zhí)行程序釘住給所述 RT線程的存儲(chǔ)器區(qū)域,跟蹤所述存儲(chǔ)器區(qū)域,并且從所述庫(kù)接收到所述RT線 程終止的通知之后解除對(duì)所述存儲(chǔ)器區(qū)域的釘住。
20. 如權(quán)利要求15所述的系統(tǒng),其特征在于,所述驅(qū)動(dòng)程序管理在所述 多核環(huán)境上的資源。
全文摘要
本發(fā)明的一個(gè)實(shí)施例是一種向多核環(huán)境中的應(yīng)用程序提供實(shí)時(shí)線程服務(wù)的技術(shù)。在操作系統(tǒng)(OS)的最高特權(quán)級(jí)下,在多核環(huán)境內(nèi)的實(shí)時(shí)核上發(fā)起執(zhí)行程序。該實(shí)時(shí)核與OS隔離。在最低特權(quán)級(jí)下在該實(shí)時(shí)核上使用庫(kù)為應(yīng)用程序創(chuàng)建實(shí)時(shí)線程。該庫(kù)由應(yīng)用程序載入。該實(shí)時(shí)線程與該應(yīng)用程序共享虛擬地址空間。
文檔編號(hào)G06F9/46GK101268445SQ200680034530
公開日2008年9月17日 申請(qǐng)日期2006年9月12日 優(yōu)先權(quán)日2005年9月21日
發(fā)明者D·莎瑪雅, J·海爾德, R·加伯, S·雷諾, Y·庫(kù)巴克 申請(qǐng)人:英特爾公司