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

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

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

      本地用戶級線程數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和管理技術(shù)的制作方法

      文檔序號:6569789閱讀:190來源:國知局
      專利名稱:本地用戶級線程數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和管理技術(shù)的制作方法
      技術(shù)領(lǐng)域
      本公開總體上涉及信息處理系統(tǒng),并且更具體地涉及多定序器 (multi-sequencer)多線程系統(tǒng)中的本地用戶級線程數(shù)據(jù)。
      背景技術(shù)
      為了提高諸如那些包括微處理器的信息處理系統(tǒng)的性能,已經(jīng)采用 了硬件和軟件的多線程技術(shù)。多線程逐漸得到硬件上的支持。例如,在一 種方式中,多處理器系統(tǒng)(例如單芯片多處理器("CMP")系統(tǒng))中的處理器每 個都可以并發(fā)地運(yùn)行多個軟件線程中的一個。在被稱為同時多線程 (simultaneous multi-threading, "SMT")的另一種方式中,對于操作系統(tǒng)和用戶 程序而言,單個物理處理器看起來像是多個邏輯處理器。對于SMT,在單 個處理器上,多個軟件線程可以同時是活動的并可以同時執(zhí)行而無需切換。 也就是說,每個邏輯處理器保持完整的一組架構(gòu)狀態(tài),但是該物理處理器 的許多其它資源(例如高速緩存、執(zhí)行單元、分支預(yù)測器、控制邏輯和總線) 都是共享的高速緩存。因此,對于SMT來說,來自多個軟件線程的指令可 以并發(fā)地在每個邏輯處理器上執(zhí)行。對于諸如SMT和/或CMP系統(tǒng)這樣的支持多個軟件線程的并發(fā)執(zhí)行 的系統(tǒng)而言,操作系統(tǒng)應(yīng)用程序可以控制(多個)線程執(zhí)行資源上的軟件線程 的調(diào)度和執(zhí)行。然而,不受操作系統(tǒng)控制的其它線程執(zhí)行資源對于程序員 來說也可以是可用的,并且可以由用戶級代碼來控制。普通操作系統(tǒng)并未 提供數(shù)據(jù)結(jié)構(gòu)來保持用于可在這些資源上執(zhí)行的用戶級線程的本地數(shù)據(jù)。


      參考下列附圖,可以理解本發(fā)明的實(shí)施例,在附圖中相似的元件用 相似的數(shù)字標(biāo)明。這些附圖并非限制性的,而是用來對用于管理多定序器 多線程系統(tǒng)中的本地用戶級線程數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和技術(shù)的選定實(shí)施例進(jìn)行說明。圖1的方框圖說明了多定序器系統(tǒng)的各種實(shí)施例;圖2的方框圖展示了用于多定序器系統(tǒng)的一般并行編程方法的圖形 表不;圖3的方框圖說明了用于用戶級多線程的至少一個實(shí)施例的線程和 用戶級線程中的共享存儲器和狀態(tài);圖4的塊數(shù)據(jù)流圖說明了用來在多線程系統(tǒng)中保持線程專用的本地 數(shù)據(jù)的機(jī)制的至少一個實(shí)施例;圖5的方框圖說明了結(jié)構(gòu)化異常處理所利用的數(shù)據(jù)結(jié)構(gòu)的至少一個 實(shí)施例;圖6的方框圖說明了用來為包括一個或多個分離的定序器的多線程 系統(tǒng)保持shred專用的本地數(shù)據(jù)的機(jī)制;圖7的方框圖說明了在使用直接存儲器指針的多線程系統(tǒng)中保持 shred專用的本地數(shù)據(jù)的機(jī)制的至少一個實(shí)施例;圖8的方框圖說明了在使用段寄存器的多線程系統(tǒng)中保持shred專用 的本地數(shù)據(jù)的機(jī)制的至少一個備選實(shí)施例;圖9的塊數(shù)據(jù)流圖說明了用于保持上下文切換過程中的shred環(huán)境塊 的狀態(tài)的機(jī)制的至少一個實(shí)施例的數(shù)據(jù)組織和流;圖10的流程圖說明了用于保持上下文切換過程中的shred環(huán)境塊的 狀態(tài)的方法的至少一個第一實(shí)施例;圖11的流程圖說明了用于保持上下文切換過程中的shred環(huán)境塊的 狀態(tài)的方法的至少一個第二實(shí)施例;圖12的塊數(shù)據(jù)流圖說明了用于保持AMS-OMS-AMS上下文切換過 程中的shred環(huán)境塊的狀態(tài)的方法;以及圖13的方框圖說明了能夠執(zhí)行公開的技術(shù)的系統(tǒng)的至少一個實(shí)施 例。
      具體實(shí)施例方式下面的論述說明了方法、系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、裝置和機(jī)制的選定實(shí)施 例,用于管理既非由操作系統(tǒng)創(chuàng)建也非由其管理、而是由用戶級代碼創(chuàng)建和管理的用戶級線程的本地數(shù)據(jù)。這樣的用戶級線程(在這里有時被稱作"shred")是程序員可以基于用 戶級代碼中的指令而使其執(zhí)行的指令序列。關(guān)聯(lián)于同一個線程的多個shred 可以并發(fā)地執(zhí)行。對于至少一個實(shí)施例而言,(例如,通過軟件庫中或者存 在于用戶空間中的調(diào)度程序(scheduler))調(diào)度shred運(yùn)行在可用的硬件資源 上,而無需操作系統(tǒng)的干預(yù)。在此所述的實(shí)施例可以被用于單核或多核的 多線程系統(tǒng)。如這里所使用的,線程單元(在此還可互換地被稱作硬件線程上下文 (context)或"定序器")可以是能夠執(zhí)行線程或shred的任何物理或邏輯單元。
      在下列說明中,闡述了諸如處理器類型、多線程環(huán)境、系統(tǒng)配置、 數(shù)據(jù)結(jié)構(gòu)以及特定操作處理之類的大量具體細(xì)節(jié),以便于更加充分地理解 本發(fā)明的實(shí)施例。然而,本領(lǐng)域技術(shù)人員將意識到,本發(fā)明可以在沒有這 些具體細(xì)節(jié)的情況下實(shí)施。另外,沒有詳細(xì)示出一些公知的結(jié)構(gòu)、電路等, 以免不必要地使本發(fā)明變得晦澀。圖1的方框圖說明了支持線程的用戶級控制的多定序器系統(tǒng)的實(shí)施 例310、 350的選定硬件特征。圖1說明了單核多定序器多線程環(huán)境310的 選定硬件特征。圖1還說明了多核多線程環(huán)境350的選定硬件特征,在該 環(huán)境中每個定序器是單獨(dú)的物理處理器核心。在單核多線程環(huán)境310中,在操作系統(tǒng)和用戶程序看來,單個物理 處理器304顯現(xiàn)為多個邏輯處理器(未示出),在此被稱作LPl-LPn。邏輯處 理器LPl-LPn中的每一個分別保持完整的一組架構(gòu)狀態(tài)ASl-ASn。對于至 少一個實(shí)施例而言,架構(gòu)狀態(tài)312a、 312b可以包括數(shù)據(jù)寄存器、段寄存器、 控制寄存器、調(diào)試寄存器和大多數(shù)模型專用的寄存器。
      邏輯處理器LPl-LPn共享物理處理器304的大多數(shù)其它資源,諸如 高速緩存、執(zhí)行單元、分支預(yù)測器、控制邏輯和總線等。雖然可以共享這 些特性,但是多線程環(huán)境310中的每個線程上下文能夠獨(dú)立生成下一個指 令地址(并且例如從指令高速緩存、執(zhí)行指令高速緩存或軌跡高速緩存中進(jìn) 行提取(fetch))。因此,處理器304包括用于每個線程上下文的邏輯上獨(dú)立的下一指 令指針和提取邏輯320,即使在單個物理提取/解碼單元322中可以實(shí)現(xiàn)多
      9個邏輯定序器也是如此。下一指令指針和提取邏輯320用于確定對于給定 線程或shred的要執(zhí)行的下一個指令。對于單核實(shí)施例,定序器因而可以是邏輯線程單元。在此情況下, 詞語"定序器"至少包括用于線程上下文的下一指令指針和提取邏輯320、以 及用于該線程上下文的至少一些相關(guān)聯(lián)的架構(gòu)狀態(tài)AS 312。應(yīng)當(dāng)注意的是, 單核多線程系統(tǒng)310的定序器不需要是對稱的。例如,用于同一個物理核 心304的兩個邏輯定序器在它們各自所保持的架構(gòu)狀態(tài)信息量上可以是不 同的。單核多線程系統(tǒng)能夠?qū)嵤┤我舛嗑€程方案,包括同時多線程(SMT)、 事件切換多線程(SoeMT)和/或時間復(fù)用多線程(TMUX)。當(dāng)來自一個以上硬 件線程上下文(或邏輯處理器)的指令在任意特定時間點(diǎn)上在處理器中并發(fā) 運(yùn)行時,被稱作為SMT。否則,單核多線程系統(tǒng)可以實(shí)施SoeMT,其中在 多個硬件線程上下文之間復(fù)用處理器管道,但是在任意給定時間,僅有來 自一個硬件線程上下文的指令可以在所述管道中執(zhí)行。對于SoeMT而言, 如果線程切換事件是基于時間的,則其為TMUX。因此,對于至少一個實(shí)施例而言,多定序器系統(tǒng)310是支持同時多 線程的單核處理器304。對于這樣的實(shí)施例而言,雖然單個處理器核心304 的相同執(zhí)行資源可以在并發(fā)執(zhí)行的線程中共享,從而同一個核心304執(zhí)行 并發(fā)線程的所有指令,但是每個定序器是一個邏輯處理器,其具有自己的 下一指令指針和提取邏輯320以及其自己的架構(gòu)狀態(tài)信息312。
      圖1還說明了多核多線程系統(tǒng)350的至少一個實(shí)施例。這樣的系統(tǒng) 350包括兩個或更多個單獨(dú)的物理處理器304a-304n,其每個都能夠執(zhí)行不 同的線程/shred,以便可以同時進(jìn)行至少一部分的不同線程/shred。每個處理 器304a-304n均包括物理獨(dú)立的提取單元322,用來提取其各自的線程或 shred的指令信息。對于其中每個處理器304a-304n執(zhí)行單個線程/shred的實(shí) 施例而言,提取/解碼單元322實(shí)現(xiàn)了單個下一指令指針和提取邏輯320。
      然而,對于至少一個實(shí)施例而言,每個處理器304a-304n支持多個線 程上下文;也就是說,每個處理器304a-304n可以是如實(shí)施例310中所示的 多線程單核處理器。對于這樣的實(shí)施例而言,系統(tǒng)350中的每個核心304 的提取/解碼單元322對于每個所支持的線程上下文,實(shí)現(xiàn)了截然不同的下一指令指針和提取邏輯320,并且每個線程上下文保持架構(gòu)狀態(tài)(AS)的單獨(dú) 拷貝。多處理器環(huán)境350中附加的下一指令指針和提取邏輯320以及架構(gòu) 狀態(tài)的附加拷貝的可選特性由圖1中的虛線所表示。對于圖1所示的多核系統(tǒng)350的至少一個實(shí)施例而言,每個定序器 可以是一個處理器核心304,而在單芯片封裝360中存在多個核心 304a-304n。如上文剛剛描述的,每個核心304a-304n可以是單線程的處理 器核心或多線程的處理器核心。芯片封裝360在圖1中由虛線表示,用以 指示所說明的多核系統(tǒng)350的單芯片實(shí)施例僅僅是示例性的。對于其它實(shí) 施例而言,多核系統(tǒng)的多個處理器核心可以存在于多個單獨(dú)的芯片上。也 就是說,所述多核系統(tǒng)可以是多插槽(multi-socket)對稱多處理系統(tǒng)。
      為了便于論述,以下論述著重于多核系統(tǒng)350的實(shí)施例。然而,該 著重點(diǎn)不應(yīng)當(dāng)被看作是限制性的,這是因?yàn)橐韵滤龅臋C(jī)制可以在多核多 定序器環(huán)境或單核多定序器環(huán)境中執(zhí)行。圖2的方框圖說明了多定序器多線程系統(tǒng)上的并行編程方法的圖形 表示。共享存儲器的多處理范例可以被用在被稱作并行編程的方法中。根 據(jù)該方法,應(yīng)用程序程序員可以通過要并發(fā)運(yùn)行的多個線程而在軟件程序 (有時被稱作"應(yīng)用程序"或"進(jìn)程")中表現(xiàn)并行性。同一軟件程序("進(jìn)程")的 所有線程共享公共的存儲器邏輯示圖。圖2說明了對于操作系統(tǒng)("OS") 140可見的進(jìn)程100、 103、 120。這 些進(jìn)程100、 103、 120可以是不同的軟件應(yīng)用程序,例如字處理程序、圖 形程序和電子郵件管理程序。 一般來說,每個進(jìn)程運(yùn)行在不同的虛擬地址 空間中。操作系統(tǒng)("OS")140 —般負(fù)責(zé)管理進(jìn)程的用戶定義任務(wù)。雖然每個進(jìn) 程具有至少一個任務(wù)(例如,見由附圖標(biāo)記100和103分別表示的進(jìn)程0和 進(jìn)程2),但其它進(jìn)程可以具有一個以上的任務(wù)(例如,由附圖標(biāo)記120表示 的進(jìn)程1)。圖2所示的進(jìn)程數(shù)目以及每個進(jìn)程的用戶定義任務(wù)的數(shù)目不應(yīng) 當(dāng)被看作是限制性的。這樣的說明僅僅是出于解釋的目的。
      圖2說明的是:關(guān)聯(lián)于進(jìn)程120的每個用戶定義任務(wù)的不同線程125、 126可以由操作系統(tǒng)140來創(chuàng)建,并且操作系統(tǒng)140可以將線程125、 126 映射到線程執(zhí)行資源。類似地,關(guān)聯(lián)于進(jìn)程103的用戶定義任務(wù)的線程127可以由操作系統(tǒng)140來創(chuàng)建;以及關(guān)聯(lián)于進(jìn)程O (IOO)的用戶定義任務(wù)的線 程124也可以由操作系統(tǒng)140來創(chuàng)建。 OS 140—般負(fù)責(zé)對這些線程124、 125... 126、 127進(jìn)行調(diào)度以在執(zhí)行 資源上執(zhí)行。關(guān)聯(lián)于同一進(jìn)程的線程具有相同的虛擬存儲器地址空間。
      由于OS140負(fù)責(zé)創(chuàng)建、映射和調(diào)度線程,所以線程124、 125...126、 127對于OS 140是"可見的"。另夕卜,本發(fā)明的實(shí)施例包括對OS 140不可見 的附加的用戶級線程130-139。也就是說,OS140并不創(chuàng)建、管理或另外控 制這些附加的用戶級線程130-139。這些附加線程不由OS 140創(chuàng)建或控制,并且可以被調(diào)度以彼此并發(fā) 執(zhí)行,所述附加線程在這里有時被稱作"shred" 130-139,以便將它們與OS 可見線程進(jìn)行區(qū)別,并且進(jìn)一步將它們與針對同一個OS可見線程的不能彼 此并發(fā)執(zhí)行的其它用戶級線程進(jìn)行區(qū)別。也就是說,與同一個OS可見線程 相關(guān)聯(lián)的多個shred可以彼此并發(fā)執(zhí)行。 shred由用戶級程序(被稱作"shred化程序(shredded program)")創(chuàng)建和 管理,并且可以被調(diào)度以在與操作系統(tǒng)分離的定序器上運(yùn)行。例如,圖2 所示的OS管理的線程125可以在對于OS可見的一個定序器(未示出)上執(zhí) 行,而每個活動的shred 130-132可以在其它與OS分離的定序器(例如,分 別見圖3的"seql"-"s叫4")上執(zhí)行。對于與OS分離的定序器而言,由用戶 級調(diào)度程序來調(diào)度指令流以便執(zhí)行。由此,與OS分離的定序器由用戶級應(yīng) 用程序而不是OS來管理,因此在此被稱作"應(yīng)用程序管理的定序器"或 "AMS"。圖2說明了與一個受OS調(diào)度的線程127相關(guān)聯(lián)的一個進(jìn)程103,還 說明了與兩個或更多線程125-126相關(guān)聯(lián)的另一個進(jìn)程120。另外,每個進(jìn) 程103、 120還可以額外地分別與一個或多個shred 137-139、 130-136相關(guān) 聯(lián)。圖2中使用虛點(diǎn)線和省略號來表示可選的附加shred。
      進(jìn)程l (120)的兩個線程125、 126和四個shred 130-136的表示以及 進(jìn)程2 (103)的一個線程127和兩個shred 137、 139的表示僅僅是說明性的, 而不應(yīng)當(dāng)被看作是限制性的。本發(fā)明的實(shí)施例無需為與一個進(jìn)程相關(guān)聯(lián)的 線程或shred數(shù)目施加上限或下限。至于線程的下限,圖2說明了在給定時 間運(yùn)行的每個進(jìn)程與至少一個線程相關(guān)聯(lián)。
      然而,線程根本無需與任何shred相關(guān)聯(lián)。因此,沒有為shred施加 下限。例如,圖2中所示的進(jìn)程0 (100)被示出為在圖2所示的特定時間上 運(yùn)行時,具有一個線程124,但沒有任何shred。至于上限,與一個進(jìn)程相關(guān)聯(lián)的OS可見線程的數(shù)目可以由OS程序 來限定。然而,對于至少一個實(shí)施例而言,與一個進(jìn)程相關(guān)聯(lián)的shred的累 積數(shù)目的上限僅由在執(zhí)行期間特定時間上可用的shred執(zhí)行資源的數(shù)目(例 如,定序器的數(shù)目)來限定。圖2說明的是與第一線程125相比,關(guān)聯(lián)于進(jìn)程120的第二線程 126可以具有與其相關(guān)聯(lián)的不同數(shù)目(n)的shred。附加的shred的可選特性 在圖2中由省略號和虛線來表示。這里,可以將與程序或進(jìn)程的所有線程相關(guān)聯(lián)的存儲器的公共邏輯 示圖稱作"應(yīng)用圖像"。對于本發(fā)明的實(shí)施例而言,該應(yīng)用程序圖像也由與一 個進(jìn)程相關(guān)聯(lián)的shred所共享。圖3的方框圖說明了在進(jìn)程、線程和shred之間的共享存儲器狀態(tài)的 一個例子。圖3示出了圖2所示的進(jìn)程120、線程124、 125、 126和shred 130-132的圖形表示。參照圖2,下面論述圖3。圖3說明的是存儲器的特定邏輯視圖200由與特定進(jìn)程120相關(guān) 聯(lián)的所有線程125、 126共享。與OS分離的定序器保持了與OS可見的定 序器上的那些完全相同的一組ring 0狀態(tài)。這些共享的ring-0架構(gòu)狀態(tài)一般 是那些負(fù)責(zé)支持在OS可見的定序器和與OS分離的定序器之間的公共的共 享存儲器地址空間的架構(gòu)狀態(tài)。例如,對于基于IA-32架構(gòu)的實(shí)施例而言, CR0、 CR2、 CR3和CR4是這些共享的ring-0架構(gòu)狀態(tài)中的一些。因此, shred共享了同一個執(zhí)行環(huán)境(虛擬地址映射),該執(zhí)行環(huán)境是為與同一個進(jìn) 程相關(guān)聯(lián)的線程創(chuàng)建的。圖3說明的是每個線程125、 126分別具有它自己的應(yīng)用程序和系 統(tǒng)狀態(tài)202a、 202b。圖3說明的是線程125、 126的應(yīng)用程序和系統(tǒng)狀態(tài) 202由與該特定線程相關(guān)聯(lián)的所有shred(例如,shred 130-132)所共享。例如, 對于至少一個實(shí)施例而言,關(guān)聯(lián)于特定shred的所有shred可以共享ring 0 狀態(tài)、以及與特定線程相關(guān)聯(lián)的應(yīng)用程序狀態(tài)中的至少一部分應(yīng)用狀態(tài)。
      因此,圖3說明的是本發(fā)明至少一個實(shí)施例的系統(tǒng)可以支持OS可見線程(例如線程125)和與該線程相關(guān)聯(lián)的shred 130-132 (它們對于OS不可 見)之間的一對多的關(guān)系。程序員(而非OS)可以采用用戶級技術(shù)來創(chuàng)建、同 步以及另外管理和控制shred的操作,就這方面而言,這些shred對于OS (見 140,圖2)是不"可見的"。雖然OS 140知道并管理一個或多個線程125...126, 但是OS 140不知道并且不管理或控制這些shred。如這里所使用的,詞語"線 程"和"shred"至少包括這樣的概念,即其為要與一個進(jìn)程的其它線程和/或 shred并發(fā)執(zhí)行的一組指令。如這里所使用的,線程(其是受OS控制的)與 shred (其對于操作系統(tǒng)是不可見的并且由用戶所控制)均為指令流,它們之 間的區(qū)別點(diǎn)在于在如何管理各自的線程和shred指令流的調(diào)度和執(zhí)行上的 不同。響應(yīng)于對OS的系統(tǒng)調(diào)用來生成線程。OS生成該線程并且分配資源 來運(yùn)行該線程。為線程分配的這些資源可以包括操作系統(tǒng)用來控制和調(diào)度 所述線程的數(shù)據(jù)結(jié)構(gòu)。相比之下,shred的至少 一個實(shí)施例是通過用戶級軟件"原語 (primitWe)"生成的,所述用戶級軟件"原語"調(diào)用一種獨(dú)立于OS的機(jī)制,其 用于生成和調(diào)度OS不知道的shred。因此,可以響應(yīng)于用戶級軟件調(diào)用來 生成shred。對于至少一個實(shí)施例而言,用戶級軟件原語可以包括用戶級 (ring-3)指令,所述用戶級指令調(diào)用硬件或固件來創(chuàng)建shred。這樣創(chuàng)建的 shred可以由硬件和/或固件和/或用戶級軟件來調(diào)度。所述獨(dú)立于OS的機(jī)制 可以是位于用戶空間(比如軟件庫)中的軟件代碼。因此,取代依賴操作系統(tǒng) 來管理線程單元硬件和shred之間的映射的是,用戶空間中的調(diào)度程序邏輯 可以管理所述映射??梢栽跇?biāo)題為"A Mechanism For Instructions Set-Based Thread Execution on a Plurality of Instruction Sequencers"的共同未決專禾伸 請美國專利序列號No. 11/173326中找到用戶級shredding指令的進(jìn)一步論 述。應(yīng)當(dāng)注意的是,能夠執(zhí)行這里所公開的技術(shù)的實(shí)施例的系統(tǒng)的定序 器無需是對稱的。定序器可以在任意方式上有所不同,包括影響計算質(zhì)量 的那些方面。例如,所述定序器可以在功耗、計算執(zhí)行的速度、功能特征 等方面有所不同。在以下部分中,給出了關(guān)于公共線程處理的背景信息,以便為本發(fā) 明的所選實(shí)施例提供上下文。這些部分提供了關(guān)于OS管理的線程的線程環(huán)境塊、線程本地存儲、描述符表、以及結(jié)構(gòu)化異常處理的背景。其后給出
      了根據(jù)本發(fā)明的shred環(huán)境塊的結(jié)構(gòu)和管理的所選實(shí)施例。 「00541 OS管理的線程的線程環(huán)境塊。圖4的方框圖說明了運(yùn)行在OS管理 的定序器上的OS管理的線程的現(xiàn)有技術(shù)數(shù)據(jù)管理機(jī)制。OS管理的定序器 430在此被稱作"OMS"。圖4說明了線程環(huán)境塊或"TEB"545,其是由操作系統(tǒng)(例如,見圖2 的140)創(chuàng)建和保持的用于多線程應(yīng)用程序中的數(shù)據(jù)結(jié)構(gòu)。對于特定系統(tǒng)而 言,TEB545也可以被稱作其它名稱,例如線程信息塊或線程控制塊。為了 便于論述,結(jié)構(gòu)545在這里被稱作TEB,但是本領(lǐng)域技術(shù)人員將認(rèn)識到, 結(jié)構(gòu)545的表示旨在包含任何相似結(jié)構(gòu),而不管特定系統(tǒng)的命名方式。
      對于至少一些公共系統(tǒng)而言,諸如線程本地存儲和結(jié)構(gòu)化異常處理 這樣的關(guān)鍵操作系統(tǒng)服務(wù)依賴于每個線程的TEB數(shù)據(jù)結(jié)構(gòu)545的存在。 「00571線程本地存儲。許多公共系統(tǒng)中的TEB 545的主要功能在于保持和 支持私有(也稱作"本地")的線程數(shù)據(jù)。為了保持本地線程數(shù)據(jù),操作系統(tǒng)可以在創(chuàng)建每個線程之后保留 TEB 545的專用實(shí)例。OS管理的線程的私有數(shù)據(jù)可以保持在該線程的線程 本地存儲("TLS")區(qū)域460a、460b中。TLS區(qū)域460可以保持在TEB段540a、 540b內(nèi)的主存儲器502中,或者它可以由TEB段540內(nèi)含有的地址指針來 引用。也就是說,TEB段540可以包含指向TLS區(qū)域460的指針,而不是 包括為TLS區(qū)域460所保留的實(shí)際存儲區(qū)域。每個線程本地變量的值被存儲在TEB數(shù)據(jù)結(jié)構(gòu)545的TLS區(qū)域460 內(nèi)。每個線程本地變量的值可以通過每個可變的鍵來訪問。例如,編譯器 可以在TLS區(qū)域460內(nèi)的偏移為3處存儲線程本地變量foo。每個線程訪問 foo從各自的TLS區(qū)域460的內(nèi)部的索引3處讀取。因?yàn)門LS區(qū)域460包 括在TEB結(jié)構(gòu)545內(nèi),所以將對線程本地數(shù)據(jù)變量的每個訪問轉(zhuǎn)換為對存 儲器中的TLS區(qū)域460的直接訪問。對于至少一個實(shí)施例而言,可以利用寄存器440來指示當(dāng)前TEB 545 的基地址。對于第一實(shí)施例而言,寄存器440可以保持指向TEB結(jié)構(gòu)545 的直接存儲器指針。例如,對于基于IA-64架構(gòu)的實(shí)施例而言,可以將指向 用于正確的線程的TEB結(jié)構(gòu)545的直接存儲器指針保持在寄存器440中。
      15對于該實(shí)施例,寄存器440可以是諸如R13等的通用寄存器,而不是專用 的段寄存器。對于利用直接存儲器指針的實(shí)施例的而言,管理經(jīng)由上下文切換的 線程本地數(shù)據(jù)可以如下進(jìn)行。依據(jù)上下文切換490,操作系統(tǒng)(參見,例如 圖2的140)可以利用指向新線程的TEB 504b的直接存儲器指針來更新寄存 器440。然而,提供對其它平臺(例如,IA-32平臺)上的TEB結(jié)構(gòu)545的訪問 更加復(fù)雜。對于至少一個備選實(shí)施例而言,寄存器440可以被實(shí)現(xiàn)為段寄 存器。定序器430的段寄存器440可以包含一個用于指示當(dāng)前執(zhí)行線程的 TEB段540a的值。依據(jù)上下文切換490,操作系統(tǒng)(參見,例如圖2的140) 可以經(jīng)由到全局描述符表550(下面立即描述)的索引來更新段寄存器440中 的值,以指示第二線程的TEB段540b。描述符表。對于使用段寄存器方法的實(shí)施例而言,段寄存器440中 的值可以是到描述符表550的索引,而不是直接存儲器指針。對于這樣的 實(shí)施例而言,TEB結(jié)構(gòu)545保持在操作系統(tǒng)(參見,例如圖2的140)所限定 的存儲器540的段中。段描述符551描述了存儲器的這個段。段是存儲器 塊,其起始于固定的基地址并且具有設(shè)定的長度。每個存儲器參考包括段 值和偏移值。該偏移值是相對于該段的基地址的位置。
      圖4說明的是將用于描述TEB 545a、 545b的每個段540的段描述 符551a、 55 lb存儲在全局描述符表550中。全局描述符表(GDT)550是可 以存儲在主存儲器502中的描述符的表。存儲在GDT 550中的每個描述符 551包含與段有關(guān)的完整信息。段描述符可以包括(除了其它信息)段的起始 地址、段的長度和該段的訪問權(quán)限。將到全局描述符表550中的索引保持在定序器430的寄存器440之 一中,其中該索引訪問當(dāng)前線程的TEB 540的段的描述符551。對于基于 IA-32架構(gòu)的實(shí)施例而言,寄存器440可以是段寄存器(例如,在IA-32架構(gòu) 上,Windows OS使用FS段寄存器,而Linux OS使用GS段寄存器)。
      例如,圖4說明的是可以將線程1的TEB 545a的段540a的描述 符551a保持在全局描述符表550中,并且將到描述符551a 540a的GBT 550 的索引存儲在段寄存器440中,而線程1在OMS 430上是活動的。
      為了直接訪問TEB數(shù)據(jù)結(jié)構(gòu)545,因此程序員可以指定到TEB段540 的索弓l 。例如,對于在IA-32平臺上運(yùn)行的WINDOWS操作系統(tǒng),"mov eax, FS: [O]"可以將第一個字從當(dāng)前線程的TEB段540載入EAX寄存器中。
      圖4說明的是對于OMS 430上的從線程1到線程2的上下文切換 490,可以更新段寄存器440的內(nèi)容。也就是說,可以將到GDT550的索引 載入段寄存器440中,該索引訪問用于保持線程2的TEB 545b的段540b 的描述符551b。對于至少一些系統(tǒng)而言,在存儲器502中,存在至少兩個主要的表, 它們存儲段描述符。(涉及中斷的第三類型的描述符表不在本論述范圍之 內(nèi))。描述符表的第一類型是上述的GDT550。該描述符表550可以由所有 進(jìn)程均等訪問。全局描述符表包含有一般可用于系統(tǒng)中的所有任務(wù)的描述 符。通常,這些是操作系統(tǒng)所使用的任務(wù)。另外,可以針對給定進(jìn)程的任務(wù)創(chuàng)建描述符表。這些表稱作本地描 述符表(LDT),并且將在下面結(jié)合圖8對其進(jìn)行進(jìn)一步的詳細(xì)論述。
      結(jié)構(gòu)化異常處理除了支持線程本地數(shù)據(jù)之外,TEB 545還可以支持結(jié)構(gòu)化異常處理 ("SEH")。 SEH是OS提供的服務(wù),補(bǔ)充以來自編譯器的支持,用于處理在 程序執(zhí)行期間發(fā)生的異常事件。這些異常事件可以例如包括除0錯誤、 特權(quán)擾亂等。圖5說明了運(yùn)行在OMS 430上的OS管理的線程(例如,"T")的結(jié)構(gòu) 化異常處理記錄的至少一個普通實(shí)施例。應(yīng)用程序程序員可以在代碼中采 用結(jié)構(gòu)化異常處理,來促進(jìn)用戶提供的對于在用戶模式中執(zhí)行所述代碼時 發(fā)生的某些異常事件的處理,而不是依靠操作系統(tǒng)140運(yùn)行默認(rèn)處理程序 (handler)來處理所述異常。通常,為了調(diào)用結(jié)構(gòu)化異常處理,應(yīng)用程序程序員可以在代碼中包
      括指令,所述代碼向OS 140注冊了一個回調(diào)函數(shù)。繼而,OS140在所述代
      碼的執(zhí)行期間在遇到用戶模式中的異常時執(zhí)行所述回調(diào),從而允許用戶模
      式應(yīng)用程序自身來處理在該應(yīng)用程序執(zhí)行時發(fā)生的異常。圖5說明的是,TEB 545的多個字段之一可以是指向一個或多個異常
      注冊記錄1050的指針1045。所述異常注冊記錄可以是單個記錄,或者可以是多個記錄1055a、 1055b...1055n的結(jié)構(gòu)(表格、陣列、鏈表)。對于至少一 個實(shí)施例而言,注冊記錄1050可以是記錄的鏈表1060,每個記錄指向一個 異常處理例程。
      編譯器可以使用try/except語法來將異常處理程序插入或"注冊"到由 TEB 545所指向的鏈表1060。由try/except語法所指定的該注冊處理被變換 為直接從TEB 545讀取以及向其寫入。當(dāng)發(fā)生異常時,OS140的SEH服務(wù) 搜索用戶提供的異常處理程序的鏈表1060,以便確定下一個動作過程。
      因此圖5所示的結(jié)構(gòu)化異常處理機(jī)制510是OS支持的動態(tài)機(jī)制,其 允許注冊一回調(diào)處理例程,該例程將被調(diào)用以將控制從操作系統(tǒng)140轉(zhuǎn)移 到用戶級異常處理程序,從而處理某些指定的用戶模式異常。然而,由于 OS 140并不為在與OS分離的定序器460上運(yùn)行的shred提供TEB 545,所 以圖5所示的機(jī)制510不支持用于shred的SEH。
      也就是說,圖5所示的TEB 545已經(jīng)被操作系統(tǒng)140分配用于主線 程T。然而,圖5還說明了,操作系統(tǒng)140沒有為在分離的定序器460 (分 別是"Seq l"和"Seq 2")上運(yùn)行的兩個shred (SI和S2)中的任何一個分配 TEB,這是因?yàn)樗鼈儗τ贠S 140是不可見的。
      Shred環(huán)境塊?,F(xiàn)在參考圖6,它是說明用于多shredding系統(tǒng)410 中的shred本地數(shù)據(jù)的數(shù)據(jù)管理機(jī)制的至少一個實(shí)施例的方框圖。圖6所示 的多shredding系統(tǒng)410的實(shí)施例包括一個或多個OMS定序器430,它們對 于操作系統(tǒng)140是可見的并且由操作系統(tǒng)140控制。
      圖6說明的是,多shredding系統(tǒng)410還包括一個或多個與操作系統(tǒng) 140分離的定序器(S叫1、 Seq2)。分離的定序器(Seql、 Seq 2)在圖6中被 統(tǒng)稱為應(yīng)用程序管理的定序器("AMS") 460。
      因此,系統(tǒng)410可以包括可由應(yīng)用程序開發(fā)人員的代碼所管理的多 個定序器460,其處于操作系統(tǒng)控制之外。開發(fā)人員可以在其代碼中采用以 下指令,該指令能夠?qū)е略诜蛛x的定序器460上并發(fā)執(zhí)行指令流或"shred"。 運(yùn)行在與OS分離的定序器460上的shred —般不能訪問有效的TEB實(shí)例 545,這是因?yàn)椴僮飨到y(tǒng)140典型地僅在創(chuàng)建原生線程(native thread)時保存 TEB 545的實(shí)例,但是對于shred并非如此。
      對于至少一個實(shí)施例而言,圖6所示的定序器430、 460在功能上可以有所不同。圖6所示的功能不對稱的示例示出,至少一個定序器430對 于OS 140可以是可見的,并且由此能夠執(zhí)行"ringO"操作,例如執(zhí)行系統(tǒng)調(diào) 用、為頁錯誤提供服務(wù)等。
      在另一方面, 一個或多個其它定序器460可以與OS140分離,并且 由此不能夠執(zhí)行ringO操作。然而,這僅僅是功能不對稱的一個示例。多定 序器系統(tǒng)410中的定序器430、 460還可以以任何其它的方式有所不同,例 如尺寸、字和/或數(shù)據(jù)路徑大小、拓?fù)?、存儲器、功耗、功能單元?shù)目、通 信架構(gòu)(多點(diǎn)(multi-drop)總線對點(diǎn)對點(diǎn)互連)、或者與功能、性能、占地面積 等相關(guān)的任何其他的度量。
      對于圖6所示的示例性實(shí)施例而言,每個分離的定序器460已經(jīng)被 初始化為能夠執(zhí)行與一個線程相關(guān)聯(lián)的shred (例如,Sl和S2)。圖6所示 的示例示出了已經(jīng)由運(yùn)行在OS可見的定序器430上的線程T所生成的兩個 shred Sl和S2。調(diào)度shred Sl和S2,以分別在分離的定序器Seq 1和Seq 2 上執(zhí)行。
      因?yàn)閳D6所示的系統(tǒng)410允許程序員管理shred Sl和S2在操作系統(tǒng) 140控制之外的AMS定序器Seql、 S叫2上的執(zhí)行,所以系統(tǒng)410包括一 種機(jī)制,其創(chuàng)建和管理數(shù)據(jù)結(jié)構(gòu)442來保持用于shredSl、 S2的shred本地 數(shù)據(jù)。這樣的數(shù)據(jù)結(jié)構(gòu)在此被稱作shred環(huán)境塊("SEB,,) 442(1)、 442(2)。
      對于shred環(huán)境塊442的結(jié)構(gòu)、組織和管理,存在許多選擇。對于在 此所述的實(shí)施例,帶有某些特定目標(biāo)地設(shè)計所述結(jié)構(gòu)、組織和管理。
      第一個目標(biāo)在于以支持簡化編程以及應(yīng)用程序(對于傳統(tǒng)線程環(huán)境 而言,將所述應(yīng)用程序?qū)懭攵鄐hredding環(huán)境中)的相對無縫的端口的方式, 為shred本地數(shù)據(jù)提供支持。這樣,SEB442結(jié)構(gòu)的動機(jī)之一在于無縫地為 代碼提供便利,該代碼包含對TEB數(shù)據(jù)結(jié)構(gòu)的顯性訪問和/或隱性訪問。通 過使用所提出的SEB結(jié)構(gòu),具有顯性和/或隱性TEB訪問的代碼可以在OS 管理的定序器(OMS)430和應(yīng)用程序管理的定序器(AMS)460兩者上執(zhí)行, 而不必進(jìn)行源代碼轉(zhuǎn)換,或者甚至不必對現(xiàn)有二進(jìn)制進(jìn)行重新編譯。例如, 通過針對線程本地數(shù)據(jù)的編譯器指令隱性地訪問TLS區(qū)域460的代碼可以 在不修改的情況下在OMS和AMS兩者上執(zhí)行;在沒有SEB結(jié)構(gòu)442的情 況下,需要修改代碼以便能夠在AMS上執(zhí)行。
      第二個目標(biāo)由如下所述的機(jī)制實(shí)現(xiàn),以便在OMS和AMS之間遷移 代碼時同步SEB和TEB狀態(tài)。另外,該機(jī)制還在AMS上將上下文從一個 shred切換到另一個shred時提供同步狀態(tài)。
      SEB和shred本地存儲。
      關(guān)于第一目標(biāo),已經(jīng)設(shè)計了這里所述的SEB 442的實(shí)施例的結(jié)構(gòu), 以便模仿公知的TEB 545結(jié)構(gòu)的設(shè)計。利用這種方式,熟悉TEB 545的程 序員無需大量的額外努力就可以理解SEB 442的結(jié)構(gòu)。因此,SEB 442中 每個字段的位置均模仿TEB 545中這些字段的組織。
      圖7的方框圖示出了用于在多shredded系統(tǒng)中保持shred專用的本地 數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的至少一個實(shí)施例,圖7示出了 SEB結(jié)構(gòu)442。圖7說明 的是可以將shred的私有數(shù)據(jù)保持在SEB結(jié)構(gòu)442內(nèi)的shred本地存儲 ("SLS")區(qū)域462中。
      SEB結(jié)構(gòu)內(nèi)的數(shù)據(jù)的組織可以例如基于線程環(huán)境塊545的結(jié)構(gòu)。例 如,SEB 442的數(shù)據(jù)的組織可以基于眾所周知的針對運(yùn)行WINDOWS操作 系統(tǒng)(被稱為Win32)的32位應(yīng)用程序的實(shí)現(xiàn)方式。例如,Win32環(huán)境的TEB 結(jié)構(gòu)545中的第三個字保持了線程堆桟的起始地址。相應(yīng)地,SEB 442結(jié)構(gòu) 的第三個字保持了 shred的堆桟的起始地址。換言之,堆桟地址保持在SEB 442中的偏移處,其中該偏移與程序員針對TEB 545所使用的偏移相同。
      除了 SEB 442內(nèi)的數(shù)據(jù)的組織以外,期望的是以用戶熟悉的方式來 訪問SEB 442的數(shù)據(jù)。
      對于在寄存器443中提供了直接存儲器指針的實(shí)施例而言,提供對 SEB 442結(jié)構(gòu)的訪問是直接了當(dāng)?shù)?;系統(tǒng)僅僅需要在AMS 460上的線程指 針寄存器443中保持指向SEB 442的指針。例如,在IA-64架構(gòu)上,軟件 約定將使用寄存器R13來包含指向TEB的指針。
      現(xiàn)在討論圖8,圖8是備選實(shí)施例的方框圖,該備選實(shí)施例包括一種 用于訪問IA-32平臺上的SEB 442結(jié)構(gòu)的機(jī)制。圖8說明的是對于該實(shí) 施例而言,SEB 442的SLS區(qū)域462可以保持在SEB段640內(nèi)的主存儲器 502中。
      在基于IA-32的平臺上,為了與普通的TEB方案一致,SEB 442包 含在由FS/GS(Win32/Linux32)段寄存器443所引用的存儲器502的段內(nèi)。存儲器的這個段在這里被稱作shred本地段640。
      圖8示出了本地描述符表("LDT" )750。該本地描述符表750包含 與給定任務(wù)相關(guān)聯(lián)的段描述符。LDT 750可以任選地在每個任務(wù)的基礎(chǔ)上 定義,并且可以用來對任務(wù)的可尋址范圍進(jìn)行劃分。LDT表750提供了一 種用于將給定任務(wù)的代碼和數(shù)據(jù)段與操作系統(tǒng)的剩余部分或其它任務(wù)相分 離的機(jī)制。
      圖8所示機(jī)制的至少一個實(shí)施例提供了對SEB結(jié)構(gòu)442的段640的 定義。對于AMS 460,圖8示出了單個SEB段640。如下所述,可以定義 多個SEB段640,以使用每個AMS 460。但現(xiàn)在參照每個AMS—個SEB 來論述圖8。
      段640的描述符751在本地描述符表(LDT)750中創(chuàng)建。對于至少一 個實(shí)施例而言,該段640和它的相應(yīng)描述符751可以通過操作系統(tǒng)提供的 服務(wù)來創(chuàng)建。該操作系統(tǒng)服務(wù)可以由shredded代碼中的系統(tǒng)調(diào)用來請求。
      Shred本地段640的描述符751的LDT索引709被存儲在AMS 460 的段寄存器443中。于是,將SEB442保持在存儲器502的本地段640中。 利用這種方式,在AMS 460上訪問shred本地段640的偏移將從SEB 442 讀取數(shù)據(jù),反之,在OMS430上訪問線程本地段540中的同一偏移將訪問 原生線程的TEB 545。因?yàn)閷⑾嗤淖侄?偏移分別保持在TEB結(jié)構(gòu)545和 SEB結(jié)構(gòu)442中,因此訪問TEB 545的代碼現(xiàn)在將對SEB 442起作用,而 不需要代碼修改。
      總之,對于圖7和圖8兩者所示的實(shí)施例,應(yīng)該看到,TEB 545經(jīng)由 OMS 430的寄存器440來引用,而SEB 442經(jīng)由AMS 460的寄存器443來 引用。對于這兩個實(shí)施例,shred本地數(shù)據(jù)存儲在shred本地存儲(SLS)區(qū)域 462中,或者可由shred本地存儲(SLS)區(qū)域462引用。SLS 462可以類似于 設(shè)置在一些現(xiàn)有系統(tǒng)中的線程本地存儲(TLS)區(qū)域460。
      對于圖8的實(shí)施例,將SEB 442中的SLS區(qū)域462與TLS區(qū)域460 保持在相同的段偏移處。SLS區(qū)域462與TLS區(qū)域460保持在相同的相對 偏移處將允許例如通過用于TLS存儲的編譯器指令對TLS區(qū)域460進(jìn)行隱 性訪問,以便正常工作,而無論代碼是在AMS 460還是在OMS 430上運(yùn)行。 對于基于Win32平臺的實(shí)施例而言,可以采用這種方法,但是本領(lǐng)域技術(shù)人員應(yīng)該意識到,這里論述的實(shí)施例沒有被如此限制。例如,對于運(yùn)行在IA-32平臺上的LINUX操作系統(tǒng)以及運(yùn)行在IA-64平臺上的LINUX和/或 WINDOWS操作系統(tǒng)而言,可以采用圖7和圖8所示機(jī)制的各種實(shí)施例。 「01031 SEB和結(jié)構(gòu)化異常處理。圖7和圖8說明的是SEB結(jié)構(gòu)442可以 包括一個字段,以便以與上面結(jié)合圖5所論述的類似方式來支持結(jié)構(gòu)化異 常處理。SEB結(jié)構(gòu)442在一個偏移與TEB結(jié)構(gòu)545中的偏移相同的字段中 可以包括指向一個或多個異常注冊記錄765的指針745。編譯器向應(yīng)用程序 提供了 try/except語法,以便將異常處理程序插入或"注冊"到由SEB 442 中的指針745所指向的記錄765中。
      由try/except語法所指定的該注冊處理被變換為直接從SEB 442讀取 以及向其寫入。當(dāng)發(fā)生異常時,OS140的SEH服務(wù)搜索用戶提供的異常處 理程序的鏈表來確定下一個動作過程。利用這種方式,對于shred,可以支 持結(jié)構(gòu)化異常處理。r01051 SEB和上下文切換。SEB 442管理機(jī)制的設(shè)計的第二個目標(biāo)是促進(jìn) 上下文切換過程中的正確代碼操作。上下文切換可以具有幾個不同的原型 (origin),其中將在下文論述其中的一些原型。
      例如, 一種類型的用戶級上下文切換可以發(fā)生在OMS定序器430從 OS可見的任務(wù)切換到用戶級任務(wù)時。例如,在OMS 430可用于執(zhí)行shred 時,可以發(fā)生這種上下文切換。在這種情況下,用戶級上下文切換可以發(fā) 生,從而使得OMS 430開始運(yùn)行用戶級shred。這種上下文切換可以被看作 shred到OMS 430的"遷移"。對于至少一個這種實(shí)施例,操作系統(tǒng)不會調(diào) 度OMS 430來運(yùn)行shredded應(yīng)用程序。作為代替,用戶級調(diào)度程序可以重 定向OMS 430以拾取一個shred。
      如果操作系統(tǒng)在OMS 430已經(jīng)完成shred的執(zhí)行之前獲得并且調(diào)度 OMS 430上的工作,那么發(fā)生另一個上下文切換,以將shred從OMS 430 上遷移下來。相應(yīng)地,這里論述的至少一些實(shí)施例提供了 SEB442的管理, 以便在OMS 430和AMS 460之間遷移代碼時同步SEB和TEB狀態(tài)(參見, 下文對圖12的論述)。
      除了涉及OMS 430的shred遷移之外,SEB 442管理機(jī)制的實(shí)施例 還可以在單個AMS 460上將上下文從一個shred切換到另一個shred時或者從一個AMS 460切換到另一個AMS 460時提供同步狀態(tài)。單個AMS 460 的上下文切換例如可以發(fā)生在系統(tǒng)上,該系統(tǒng)提供了在AMS 460上調(diào)度 shred的循環(huán)法或其它共享方法。這種調(diào)度方法例如可以在支持shred(M)的 數(shù)量多于可用AMS(N)的數(shù)量的系統(tǒng)中采用。
      也就是說,更像現(xiàn)代操作系統(tǒng)可以管理多于可用定序器的數(shù)量的線 程的方式,支持用戶級shred的系統(tǒng)可以通過M: N用戶空間調(diào)度程序來管 理比可用AMS(N)多的shred(M)。例如,在標(biāo)題為"Mechanism To Schedule Threads On OS-Sequestered Sequencers Without Operating System Intervention"的序列號為11/027,445的共同待決的專利申請中,描述了這種 調(diào)度程序的至少一個實(shí)施例。
      每次將新的shred切入到AMS 460中并且將當(dāng)前執(zhí)行的shred切出 時,這種調(diào)度方法都產(chǎn)生一個用戶級上下文切換。相應(yīng)地,這里論述的至 少一些實(shí)施例提供對多個SEB 442的管理,以便在AMS 460上將上下文從 一個shred切換到另一個shred時同步狀態(tài)(參見下文對圖9的論述)。
      上面的段落說明了多shredding系統(tǒng)應(yīng)該以在涉及shred的上下文切 換中提供正確操作的方式來管理SEB 442的一般建議的幾個具體示例。為 了實(shí)現(xiàn)這個目標(biāo),提出了多個用于創(chuàng)建和保持SEB 442的方法。
      圖9是塊數(shù)據(jù)流圖,其示出了用于創(chuàng)建和保持SEB結(jié)構(gòu)442a-442n 的一種方法,其中為n個shred的每一個定義SEB 442。圖9的示例假設(shè)方 案沿圖8所示的線,每個SEB442存在于本地段640中。
      對于假設(shè)方案沿圖7所示的線的備選實(shí)施例而言,圖9所示的寄存 器443不是段寄存器,取而代之的是將其設(shè)計成用于存儲指向當(dāng)前SEB結(jié) 構(gòu)442的直接存儲器指針。圖9的余下論述集中在443是段寄存器的實(shí)施 例上。然而,本領(lǐng)域技術(shù)人員應(yīng)該理解,類似的SEB保持方案可以被用于 例如圖7所示的實(shí)施例,該實(shí)施例被設(shè)計成用于將直接存儲器指針存儲在 寄存器443中。
      圖9將結(jié)合圖10來論述,圖10的流程圖示出了 SEB管理方法1010 的至少一個實(shí)施例,其數(shù)據(jù)流在圖9中示出。圖10的方法1010可以由調(diào) 度shred的用戶級調(diào)度程序來執(zhí)行。
      圖10說明的是操作系統(tǒng)進(jìn)行調(diào)用以便創(chuàng)建本地段640a-640n,這代表了圖10所示方法1010的初始操作1012。這樣,分別為每一個SEB 442a-442n創(chuàng)建shred裝入段640a-640n。然后,處理進(jìn)行到方框1014。
      在方框1014,判斷是否需要在AMS460上進(jìn)行上下文切換。為了論 述圖9所述的示例,出于論述的目的,假設(shè)在方框1014需要進(jìn)行上下文切 換909,以將shred 1從AMS460切出,而切入shredn。相應(yīng)地,處理從方 框1014進(jìn)行到方框1016(如果不需要進(jìn)行上下文切換,則處理將在方框1015 結(jié)束)。
      對于上下文切換909,在方框1016,將當(dāng)前shred的本地段寄存器 443的內(nèi)容保存到存儲位置。對于圖9所示的示例,段寄存器443的初始值 是與shred本地段640a的描述符751a相關(guān)聯(lián)的索引,其中shred本地段640a 關(guān)聯(lián)于shredl。在方框1016,可以以將寄存器443的內(nèi)容與適當(dāng)任務(wù)關(guān)聯(lián) 的方式將該寄存器443的內(nèi)容保存。然后,處理進(jìn)行到方框1018。
      在方框1018,將索引912載入段寄存器443,該索引912用于識別 被切入的新shred的段640n的描述符751n。對于圖9所示的示例,在方框 1018,將與shred本地段640n的描述符751n相關(guān)聯(lián)的索引載入段寄存器 443 ,其中shred本地段640n關(guān)聯(lián)于shred n。
      稍后進(jìn)行的將shred 1切換到AMS 460上的上下文切換再次觸發(fā)了操作1016和1018,使得shred 1的存儲值被返回到段寄存器443。
      然后,方法1010的處理在方框1015結(jié)束。如通過上面的論述所示出的那樣,針對每個shred創(chuàng)建SEB442的結(jié)果在于僅為上下文切換保存/恢復(fù)所述寄存器443的內(nèi)容,但是shred專用的SEB 442的內(nèi)容不需要為上下文切換保存和恢復(fù)。這是因?yàn)槊總€shred具有它自己的SEB實(shí)例442a-442n。
      備選方法將僅為每個AMS 460定義一個SEB 442。在圖7中一般性 示出了這種方法,圖7是使用寄存器443中的直接存儲器指針的實(shí)施例。 類似地,在圖8中一般性示出了這種方法,圖8是采用寄存器443作為段 寄存器的實(shí)施例。對于這樣的實(shí)施例,每當(dāng)發(fā)生shred上下文切換時,shred 上下文切換涉及保存和恢復(fù)每個shred的SEB結(jié)構(gòu)442的內(nèi)容。
      圖11的流程圖示出了用于管理系統(tǒng)的AMS上下文切換(例如圖7和 圖8所示的那些)的shred本地數(shù)據(jù)的方法1110的至少一個實(shí)施例,其為每個AMS 460創(chuàng)建僅一個SEB 442。圖11將結(jié)合圖7和圖8來論述。對于至 少一個實(shí)施例而言,該方法1110可以由用戶級shred調(diào)度程序來執(zhí)行。
      圖11說明了方法1110開始于方框1102,并且進(jìn)行到方框1104。 如果在方框1104檢測到上下文切換,那么處理進(jìn)行到方框1106。否貝l」,處 理在方框1105結(jié)束。
      在方框1106,可以將被切出的shred的SEB結(jié)構(gòu)442的當(dāng)前內(nèi)容保 存在存儲區(qū)域中,例如備份存儲裝置中。然后,處理進(jìn)行到方框1108。在 方框1108,引入的shred的SEB結(jié)構(gòu)的內(nèi)容可以從存儲區(qū)域載入SEB結(jié)構(gòu) 442中。
      稍后進(jìn)行的將初始shred切換到AMS 460上的上下文切換再次觸發(fā) 了操作1106和1108,使得shred 1 shred環(huán)境塊的存儲狀態(tài)可以返回到SEB 結(jié)構(gòu)442。然后,處理在方框1115結(jié)束。
      代替僅涉及AMS資源的上下文切換,如果上下文切換是從AMS到 OMS的遷移情況或者從OMS到AMS的遷移情況,那么SEB結(jié)構(gòu)442的內(nèi)容的管理可以包括附加的考慮因素。我們轉(zhuǎn)到圖12來進(jìn)一步論述這些考 慮因素。
      圖12說明的是對于從AMS到OMS和從OMS到AMS的特定數(shù) 據(jù)的遷移,以便促進(jìn)這些類型的上下文切換過程中的適當(dāng)操作。圖12示出 了用于第一上下文切換的數(shù)據(jù)流1020,其代表shred遷移到OMS 430。圖 12還示出了第二上下文切換的數(shù)據(jù)流1030,其代表shred從OMS 430遷移 回AMS 460。
      對于第一上下文切換,當(dāng)前線程的TEB結(jié)構(gòu)545的數(shù)據(jù)被復(fù)制出(例 如,被復(fù)制到備份存儲裝置)。然后,在數(shù)據(jù)遷移1020, SEB442狀態(tài)的一 個子集包括有線程狀態(tài),并且被寫入1020到TEB 545。 SEB 442狀態(tài)的這 個子集中的至少一些可以被寫入到TEB 545的線程本地存儲區(qū)域460。
      對于第二上下文切換,當(dāng)前TEB結(jié)構(gòu)545狀態(tài)的一個子集包括有 shred狀態(tài),并且被寫入1030到SEB 442。當(dāng)前TEB 545狀態(tài)的這個子集的 至少一部分可以被寫入到shred本地存儲區(qū)域462。然后,可以將TEB結(jié)構(gòu) 545的原始數(shù)據(jù)從備份存儲裝置中恢復(fù)。
      圖11所示的數(shù)據(jù)遷移1020、 1030可適用于采用寄存器440和443中的直接存儲器指針的系統(tǒng),并且同樣地適用于采用寄存器440、 443作為 段寄存器的系統(tǒng)。
      圖13說明了能夠執(zhí)行所公開的技術(shù)的計算系統(tǒng)1300的至少一個示 例實(shí)施例。計算系統(tǒng)1300包括n個處理器核心1304a-1304n以及存儲器系 統(tǒng)1340。存儲器系統(tǒng)1340可以包括較大而相對較慢的存儲裝置502,以及 一個或多個較小而相對快的高速緩存,例如指令高速緩存1344和/或數(shù)據(jù)高 速緩存1342。雖然沒有單獨(dú)示出,但是每個核心1304a-1304n可以具有其 自己的指令高速緩存1344和/或數(shù)據(jù)高速緩存1342。
      存儲器系統(tǒng)1340意指存儲器的一般化表示,并且可以包括多種形式 的存儲器,例如硬盤驅(qū)動器、CD-ROM、隨機(jī)存取存儲器(RAM)、動態(tài)隨 機(jī)存取存儲器(DRAM)、靜態(tài)隨機(jī)存取存儲器(SRAM)、閃速存儲器以及相 關(guān)電路。存儲器系統(tǒng)1340可以存儲可由處理器1304執(zhí)行的指令1310和/ 或由數(shù)據(jù)信號所表示的數(shù)據(jù)1312。指令1310和/或數(shù)據(jù)1312可以包括用于 執(zhí)行任何或全部這里所論述的技術(shù)的代碼和/或數(shù)據(jù)。
      指令1310可以包括主線程代碼1350。主線程代碼1350可以包括用 于初始化一個或多個OS不可見的shred的指令。在由定序器執(zhí)行時,主線 程代碼1350的初始化指令可以使得OS不可見的定序器執(zhí)行shred指令流, 同時共享主線程的邏輯執(zhí)行環(huán)境。
      對于至少一個實(shí)施例而言,指令1310還可以包括處理例程1360來 調(diào)度shred在定序器上執(zhí)行。調(diào)度例程1360可以包括分別執(zhí)行圖10和圖11 所示方法1010、 lllO中的至少一個的指令,以進(jìn)行上下文切換。調(diào)度例程 1360還可以包括用于執(zhí)行圖12所示的數(shù)據(jù)遷移1020、 1030的邏輯1066。
      處理器1304a-1304n無需是對稱的,但是其中每一個可以包括向執(zhí)行 核心1330供應(yīng)指令信息的前端1320。所取出的指令信息可以在高速緩存 225中緩沖,以等待由執(zhí)行核心1330執(zhí)行。前端1320可以以程序順序向執(zhí) 行核心1330供應(yīng)指令信息。對于至少一個實(shí)施例而言,前端1320包括確 定將要執(zhí)行的下一指令的提取/解碼單元322。對于系統(tǒng)1300的至少一個實(shí) 施例而言,提取/解碼單元322可以包括單個的下一指令指針和提取邏輯 320。然而,在其中每個處理器1304a-1304n支持多個線程上下文的實(shí)施例 中,該提取/解碼單元322為每個所支持的線程上下文實(shí)現(xiàn)了不同的下一指令指針和提取邏輯320。多處理器環(huán)境中額外的下一指令指針和提取邏輯 320的可選特性在圖13中以虛線來表示。
      這里所述的方法的實(shí)施例可以用硬件、硬件仿真軟件或其它軟件、 固件、或這樣的實(shí)現(xiàn)方式的組合來實(shí)現(xiàn)??梢詾橐粋€可編程系統(tǒng)實(shí)現(xiàn)本發(fā) 明的實(shí)施例,該系統(tǒng)包括至少一個處理器、數(shù)據(jù)存儲系統(tǒng)(包括易失性和非 易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備、以及至少一個輸出設(shè)備。 為了該應(yīng)用程序,處理系統(tǒng)包括具有處理器的任意系統(tǒng),所述處理器例如 是數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)、或微處理器。
      程序可以存儲在可由通用或?qū)S每删幊烫幚硐到y(tǒng)讀取的存儲介質(zhì)或 設(shè)備(例如,硬盤驅(qū)動器、軟盤驅(qū)動器、只讀存儲器(ROM)、 CD-ROM設(shè)備、 閃速存儲器設(shè)備、數(shù)字多用盤(DVD)、或其它存儲設(shè)備)上。當(dāng)處理系統(tǒng)讀 取存儲媒體或設(shè)備時,可由該處理系統(tǒng)中的處理器訪問的指令用于配置和 操作該處理系統(tǒng),以執(zhí)行這里所述的過程。本發(fā)明的實(shí)施例也可以被認(rèn)為 是被實(shí)現(xiàn)為有形的機(jī)器可讀存儲介質(zhì),其被配置為與處理系統(tǒng)一起使用, 其中這樣配置的存儲介質(zhì)使得該處理系統(tǒng)以特定和預(yù)定方式操作,從而執(zhí) 行這里所述的功能。
      示例系統(tǒng)1300代表基于英特爾公司提供的Pentium⑧、Pentium⑧Pro、 Pentium II、 Pentium III、 Pentium 4禾口 Itanium 以及Itanium 2微處 理器的處理系統(tǒng),但是也可以使用其它系統(tǒng)(包括具有其它微處理器的個人 計算機(jī)(PC)、工程工作站、個人數(shù)字助理和其它手持設(shè)備、機(jī)頂盒等)。對 于一個實(shí)施例,示例系統(tǒng)可以執(zhí)行微軟公司提供的一個版本的Windows 操作系統(tǒng),但是例如也可以使用其它操作系統(tǒng)和圖形用戶界面。
      盡管己經(jīng)示出和描述了本發(fā)明的特定實(shí)施例,但是對于本領(lǐng)域技術(shù) 人員來說顯而易見的是,可以進(jìn)行許多變化和修改,而不會背離所附權(quán)利 要求的范圍。例如,雖然以上將寄存器440和443作為用于存儲與shred環(huán) 境塊相關(guān)的指針或索引的裝置來論述,但是本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,包 括鎖存器、存儲器位置或其它存儲機(jī)制在內(nèi)的任何存儲裝置都可以取代寄 存器來使用。
      同樣,例如,已經(jīng)敘述了各種應(yīng)用程序編程接口和平臺,包括32位 和64位WINDOWS平臺以及32位和64位LINUX平臺。然而,本領(lǐng)域技術(shù)人員應(yīng)該意識到,這里所述的實(shí)施例的特征可以適用于其它環(huán)境,而不 會背離所附權(quán)利要求的保護(hù)范圍。
      因此,本領(lǐng)域技術(shù)人員將認(rèn)識到,可以進(jìn)行許多變化和修改,而不 會在較寬方面上背離本發(fā)明。所附權(quán)利要求旨在將落入本發(fā)明的真正范圍 內(nèi)的所有這些變化和修改都包含在其范圍之內(nèi)。
      權(quán)利要求
      1、一種方法,包括生成本地數(shù)據(jù)的存儲區(qū)域,以便用戶級線程(“shred”)在不受操作系統(tǒng)(“OS”)管理的線程單元上運(yùn)行;以及在上下文切換過程中,將狀態(tài)保持在所述存儲區(qū)域中。
      2、 如權(quán)利要求l所述的方法,其中,所述生成步驟還包括 生成所述存儲區(qū)域,作為shred環(huán)境塊的一部分。
      3、 如權(quán)利要求l所述的方法,其中,所述保持步驟還包括根據(jù)線程環(huán)境塊的組織結(jié)構(gòu),將數(shù)據(jù)保持在所述存儲區(qū)域中。
      4、 如權(quán)利要求2所述的方法,其中所述shred環(huán)境塊還包括用于保持指向結(jié)構(gòu)化異常處理的記錄的指針 的字段。
      5、 如權(quán)利要求l所述的方法, 當(dāng)活動的shred變得不活動時,
      6、 如權(quán)利要求5所述的方法, 當(dāng)所述shred再次變得活動時,其中,保持狀態(tài)還包括 保存所述存儲區(qū)域的內(nèi)容。其中,所述保持還包括-恢復(fù)所述存儲區(qū)域的所述保存的內(nèi)容。
      7、 如權(quán)利要求6所述的方法,其中將所述保存的內(nèi)容保存到備份存儲裝置,并且從所述備份存儲裝置恢 復(fù)所述保存的內(nèi)容。
      8、 如權(quán)利要求6所述的方法,其中將所述保存的內(nèi)容保存到與另一線程單元相關(guān)聯(lián)的存儲區(qū)域,并且從 與所述另一線程單元相關(guān)聯(lián)的所述存儲區(qū)域恢復(fù)所述保存的內(nèi)容。
      9、 如權(quán)利要求l所述的方法,其中,所述生成步驟還包括 執(zhí)行系統(tǒng)調(diào)用。
      10、 如權(quán)利要求l所述的方法,其中,所述保持步驟還包括 保持用于指示所述存儲區(qū)域的寄存器值。
      11、 如權(quán)利要求10所述的方法,其中,所述保持步驟還包括 當(dāng)發(fā)生上下文切換時,更新所述寄存器值,以便指示不同的存儲區(qū)域。
      12、 如權(quán)利要求IO所述的方法,其中 所述寄存器值是到描述符表的索引。
      13、 一種包括有形的機(jī)器可訪問介質(zhì)的制品,所述機(jī)器可訪問介質(zhì)具 有多個機(jī)器可訪問指令,其中,當(dāng)處理器執(zhí)行所述指令時,所述指令用于生成本地數(shù)據(jù)的存儲區(qū)域,以便用戶級線程("shred")在不受操作系統(tǒng) ("OS")管理的線程單元上運(yùn)行;以及在上下文切換過程中,將狀態(tài)保持在所述存儲區(qū)域中。
      14、 如權(quán)利要求13所述的制品,其中,用于生成步驟的所述指令還包 括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令生成所述存儲區(qū)域,作為shred環(huán)境塊的一部分。
      15、 如權(quán)利要求13所述的制品,其中,用于保持狀態(tài)的所述指令還包 括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令根據(jù)線程環(huán)境塊的組織結(jié)構(gòu),將數(shù)據(jù)保持在所述存儲區(qū)域中。
      16、 如權(quán)利要求14所述的制品,其中所述shred環(huán)境塊還包括用于保持指向結(jié)構(gòu)化異常處理的記錄的指針 的字段。
      17、 如權(quán)利要求13所述的制品,其中,用于保持狀態(tài)的所述指令還包括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令當(dāng)活動的shred變得不活動時,保存所述存儲區(qū)域的內(nèi)容。
      18、 如權(quán)利要求17所述的制品,其中,用于保持狀態(tài)的所述指令還包 括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令當(dāng)所述shred再次變得活動時,恢復(fù)所述存儲區(qū)域的所述保存的內(nèi)容。
      19、 如權(quán)利要求18所述的制品,其中,用于保持狀態(tài)的所述指令還包 括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令將所述內(nèi)容保存到備份存儲裝置,并且從所述備份存儲裝置恢復(fù)所述 保存的內(nèi)容。
      20、 如權(quán)利要求18所述的制品,其中,用于保持狀態(tài)的所述指令還包括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令將所述內(nèi)容保存到與另一線程單元相關(guān)聯(lián)的存儲區(qū)域,并且從與所述 另一線程單元相關(guān)聯(lián)的所述存儲區(qū)域恢復(fù)所述保存的內(nèi)容。
      21、 如權(quán)利要求13所述的制品,其中,用于生成步驟的所述指令還包 括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令執(zhí)行系統(tǒng)調(diào)用。
      22、 如權(quán)利要求13所述的制品,其中,用于保持狀態(tài)的所述指令還包 括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令保持用于指示所述存儲區(qū)域的寄存器值。
      23、 如權(quán)利要求22所述的制品,其中,用于保持狀態(tài)的所述指令還包 括在被處理器執(zhí)行時用于進(jìn)行下列步驟的指令當(dāng)發(fā)生上下文切換時,更新所述寄存器值,以便指示不同的存儲區(qū)域。
      24、 如權(quán)利要求22所述的制品,其中 所述寄存器值是到描述符表的索引。
      25、 一種系統(tǒng),包括存儲器系統(tǒng),用于存儲用戶級線程("shred")的用戶級調(diào)度程序;以及 能夠并發(fā)執(zhí)行shred的多個線程單元;其中,所述用戶級調(diào)度程序用于在涉及每個shred的上下文切換的過程 中為所述shred保持本地數(shù)據(jù)。
      26、 如權(quán)利要求25所述的系統(tǒng),其中所述用戶級調(diào)度程序還用于將每個shred的本地數(shù)據(jù)保持在shred專用 的存儲區(qū)域中。
      27、 如權(quán)利要求25所述的系統(tǒng),其中所述用戶級調(diào)度程序還用于將數(shù)據(jù)保存到與線程單元相關(guān)聯(lián)的單個 shred專用的存儲區(qū)域,以及從與線程單元相關(guān)聯(lián)的所述單個shred專用的 存儲區(qū)域恢復(fù)所述數(shù)據(jù)。
      28、 如權(quán)利要求26所述的系統(tǒng),還包括包括在每個線程單元中的寄存器,所述寄存器保持一個值,用于指示 當(dāng)前活動的shred的所述shred專用的存儲區(qū)域的存儲器地址。
      29、 如權(quán)利要求28所述的系統(tǒng),其中,所述用戶級調(diào)度程序還包括 用于更新作為上下文切換結(jié)果的所述寄存器值的邏輯。
      30、 如權(quán)利要求27所述的系統(tǒng),還包括包括在每個線程單元中的段寄存器,所述段寄存器用于保持到描述符 表的索引,所述索引用于指示針對shred專用的存儲區(qū)域的段的描述符。
      31、 如權(quán)利要求30所述的系統(tǒng),其中,所述用戶級調(diào)度程序還包括用于更新作為上下文切換結(jié)果的所述段寄存器值的邏輯。
      32、如權(quán)利要求25所述的系統(tǒng),其中,所述系統(tǒng)存儲器還包括: DRAM。
      全文摘要
      本發(fā)明提供了本地用戶級線程數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建、組織和管理技術(shù)。還描述和聲明了其它實(shí)施例。
      文檔編號G06F9/46GK101317155SQ200680044279
      公開日2008年12月3日 申請日期2006年12月12日 優(yōu)先權(quán)日2005年12月27日
      發(fā)明者B·V·帕特爾, D·K·波爾森, G·N·金雅, H·王, J·P·舍恩, R·A·漢金斯, S·M·沙阿, S·奧德赫 申請人:英特爾公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1