專利名稱:重新獲取對執行外部執行上下文的處理資源的控制的制作方法
重新獲取對執行外部執行上下文的處理資源的控制背景在計算機系統中執行的進程可包括調度進程的任務以便在計算機系統中執行的 執行上下文調度器。調度器可創建執行上下文(例如,線程、光纖或子進程)以執行任務。 在執行期間,調度器維護對這些執行上下文的控制并維護對分配給該調度器的處理資源的 控制。調度器通常不具有對在該調度器之外創建的執行上下文(即,外部執行上下文) 的控制。如果調度器允許外部執行上下文用該調度器的處理資源來執行,則外部執行上下 文獲取對處理資源的控制。該外部執行上下文可以不包括用于將對處理資源的控制返回給 調度器的機制。結果,調度器可能丟失執行外部執行上下文的處理資源。概述提供本概述是為了以精簡的形式介紹將在以下詳細描述中進一步描述的一些概 念。本概述并不旨在標識所要求保護的主題的關鍵特征或必要特征,也不旨在用于限制所 要求保護的主題的范圍。計算機系統的進程中的調度器允許外部執行上下文在分配給該調度器的處理資 源上執行。調度器向外部執行上下文提供對處理資源的控制。調度器注冊與外部執行上下 文相關聯的退出事件的通知。響應于接收到已發生退出事件的通知,調度器重新獲取對處 理資源的控制并使得由該處理資源執行與該調度器所控制的執行上下文相關聯的任務。附圖簡述包括附圖來提供了對各實施例的進一步理解,且這些附圖被合并在本發明書內并 構成其一部分。附圖示出各實施例,并且與說明書一起用于解釋本發明的原理。其他實施 例和各實施例的許多預期優點將隨著參考下面的詳細描述進行更好的理解而得到認識。附 圖的元素不一定相對于彼此而縮放。相同的附圖標記指代對應的類似部分。
圖1A-1D是示出被配置成請求和接收與運行時環境中的外部執行上下文相關聯 的退出事件通知的調度器的各實施例的框圖。圖2是示出供在調度器中使用的調度組的一實施例的框圖。圖3是示出用于請求和接收與外部執行上下文相關聯的退出事件通知的方法的 流程圖。圖4是示出用于提供退出事件通知的方法的一實施例的流程圖。圖5是示出被配置成實現包括調度器的運行時環境的計算機系統的一實施例的 框圖,該調度器被配置成請求和接收與外部執行上下文相關聯的退出事件通知。詳細描述在以下詳細描述中,對附圖進行了參考,附圖構成了實施例的一部分且在其中作 為示例示出了可在其中實踐本發明的各特定實施例。就此,諸如“頂部”、“底部”、“前方”、 “后方”、“前導”、“尾部”等的方向性術語參考正在描述的附圖的方向來使用。因為實施例的 各組件可位于多個不同的方向,所以方向性術語出于說明的目的來使用而不是限制。可以 理解,可以使用其它實施例并且可以做出結構上或邏輯上的改變而不背離本發明的范圍。因此,以下詳細描述并不旨在限制,并且本發明的范圍由所附權利要求來限定。應該理解,此處描述的各示例性實施例的特征可相互組合,除非另外具體注明。圖1A-1D是示出運行時環境10的進程12中的調度器22的各實施例的框圖。調 度器22被配置成請求和接收與外部執行上下文沈相關聯的退出事件通知參考圖1A,運行時環境10表示計算機系統中的運行時操作模式,諸如圖5中示出 且在下文中更詳細地描述的計算機系統100,其中該計算機系統正在執行指令。計算機系統 從諸如圖5中示出且在下文中更詳細描述的運行時平臺122等運行時平臺中生成運行時環 境10。運行時環境10包括至少一個已調用的進程12、操作系統(OS) 14、一組硬件線程 16 (1)-16 (M),其中M是大于或等于1的整數且表示第M個硬件線程16 (M)、以及資源管理 層18。運行時環境10允許使用OS 14、資源管理層18和硬件線程16(1)-16(M)來執行來 自進程12的任務以及來自與進程12共存的任何其他進程的任務(未示出)。運行時環境 10結合OS 14和/或資源管理層18來操作以允許進程12獲得計算機系統的處理器和其他 資源(例如,硬件線程16 (1)-16 (M))。運行時環境10包括生成調度器22的調度器功能。在一個實施例中,調度器功能 被實現為調度器應用程序編程接口(API)。在其他實施例中,調度器功能可使用其他合適 的編程構造來實現。當進程12被調用時,調度器功能在進程12中創建調度器22,其中調 度器22用于調度進程12的任務以供一個或多個硬件線程16 (1)-16 (M)執行。運行時環境 10可使用知道調度器功能所提供的設施的附隨工具來利用應用程序或庫開發者在其程序 (例如,進程12)中表達的精細粒度并發性。進程12包括對主存一個或多個執行上下文(即線程)的處理和其他資源的分配。 進程12從OS 14和/或資源管理層18獲取對計算機系統中的處理和其他資源(例如,硬 件線程16 (1)-16 (M))的訪問。進程12使用該處理和其他資源來使任務被執行。進程12在不同長度的任務中生成工作,其中每一任務與調度器22中的執行上下 文相關聯。每一任務包括當由計算機系統執行時執行工作單元的指令序列。每一執行上下 文形成在分配到的處理資源上執行相關聯的任務的線程。每一執行上下文包括程序狀態信 息和機器狀態信息。執行上下文可在沒有剩余任務要執行的情況下終止。對于每一任務, 運行時環境10和/或進程12或者將任務分配到調度器22以被調度執行,或者以其他方式 使該任務在不使用調度器22的情況下執行。進程12可被配置成在基于諸如棧模型或解釋器模型等任何合適的執行模型的計 算機環境中操作,且可表示任何合適類型的代碼,如應用程序、庫函數或操作系統服務。進 程12具有與包括定義的存儲器地址空間的一組分配的資源相關聯的程序狀態和機器狀 態。進程12獨立于運行時環境10中的任何共存進程而自主地或基本自主地執行。因此,進 程12不會無意地更改共存進程的程序狀態或分配到共存進程的任何資源的機器狀態。類 似地,共存進程不會無意地更改進程12的程序狀態或分配到進程12的任何資源的機器狀 態。OS 14管理計算機系統的處理和其他資源并提供允許計算機系統中的進程12和 其他進程訪問和使用組件的一組功能。另外,OS 14向計算機系統中的調度器22和進程12 提供執行上下文。如圖IA所示,OS 14向調度器22提供執行上下文34(1)-34(N)和一組38,其中N是大于或等于一的整數并且表示第N個執行上下文34 (N)。OS 14還 向進程12提供執行上下文沈(1) -26 (P),其中P是大于或等于一的整數并且表示第P個執 行上下文26 (P)。硬件線程16駐留在計算機系統的一組或者一個或多個處理器封裝(例如,圖5中 示出且在下文更詳細地描述的處理器封裝10 的執行核中。每一硬件線程16被配置成獨 立于或基本獨立于其他執行核來執行指令,且包括機器狀態。硬件線程16可被包括在單個 處理器封裝中,或者可分布在多個處理器封裝上。處理器封裝中的每一執行核可包括一個 或多個硬件線程16。資源管理層18通過將一個或多個硬件線程16分配到進程12來將處理資源分配 到進程12。在圖1A-1D的實施例中,資源管理層18與OS 14分開存在。在其他實施例中, 資源管理層18或其部分或全部功能可被包括在OS 14中。處理器12隱式地或顯式地使得調度器22經由運行時環境10提供的調度器功能 來創建。當進程12使用計算機系統中可用的API或編程語言特征時,可隱式地創建調度器 實例22。響應于API或編程語言特征,運行時環境10創建帶有默認策略的調度器22。為 了顯式地創建調度器22,進程12可調用運行時環境10提供的調度器功能并為調度器22指 定一個或多個策略。調度器22以對于進程12透明的方式與資源管理層18進行交互來協商計算機系 統的處理和其他資源。資源管理層18基于供需和調度器22的任何策略來將硬件線程16 分配到調度器22。在圖1A-1D示出的實施例中,調度器22通過創建形成底層硬件線程16的抽象的 虛擬處理器32來管理處理資源。調度器22包括一組虛擬處理器32 (1) -32 (N),其中N是大 于或等于一的整數并且表示第N個虛擬處理器32 (N)。調度器22通過將每一虛擬處理器32 映射到硬件線程16來將虛擬處理器32復用到硬件線程16上。調度器22可將一個以上的 虛擬處理器32映射到特定硬件線程16上,但只可將一個硬件線程16映射到每一虛擬處理 器32。在其他實施例中,調度器22以其他合適的方式來管理處理資源以使得硬件線程16 執行進程12的指令。調度器22中的執行上下文集包括具有正在由相應的虛擬處理器32(1)_32(N)執 行的相應的相關聯的任務36 (1) -36 (N)的一組執行上下文34 (1) -34 (N),以及在進程12A的 執行期間的任何時刻的一組零個或多個執行上下文38。每一執行上下文34和38包括指 示執行上下文34或38是正在執行的、可運行的(例如,響應于變為解除阻塞或被添加到調 度器2 還是被阻塞的狀態信息。正在執行的執行上下文34已經被附加到虛擬處理器32 且當前正在執行。可運行的執行上下文38包括相關聯的任務40且準備好由可用虛擬處理 器32來執行。被阻塞的執行上下文38還包括相關聯的任務40且正在等待正由另一執行 上下文34生成的或者將由另一執行上下文38生成的數據、消息或事件。在虛擬處理器32上執行的每一執行上下文34可在其執行過程中生成按任何合適 的方式來組織(例如,添加到工作隊列(未在圖1A-1D中示出))的附加任務42。在一實施 例中,可以通過使用運行時環境10提供的應用程序編程接口(API)或編程語言特征以及相 應的工具來創建工作。當處理資源對調度器22可用時,任務被分配到在獲得新任務之前將 其在虛擬處理器32上執行完全的執行上下文34或38。在虛擬處理器32上執行的執行上下文34還可通過生成將由其他執行上下文38使用的數據、消息或事件來對其他執行上下 文38解除阻塞。調度器22中的每一任務可以是實現的(例如,已實現的任務36和40),這指示執 行上下文34或38已經或將要被附加到該任務且該任務準備好執行。已實現的任務通常包 括解除阻塞的執行上下文和調度的代理。未實現的任務被稱為未實現的。未實現的任務 (例如,任務42)可作為父任務的執行所生成的子任務來創建,且可由并行構造來生成(例 如,并行、并行的、開始和完成)。調度器22可被組織成用于帶有執行上下文的邏輯上獨立 的任務(即,實現的任務)的同步集合(例如,棧和/或隊列),以及用于依賴任務(即,未 實現的任務)的工作竊取(workstealing)隊列的列表,如以下圖2的實施例所描述的。在完成、阻塞或以其他方式中斷(即,顯式產生或迫使搶先)在虛擬處理器32上 運行的執行上下文34之后,虛擬處理器32變成可用于執行另一已實現的任務40或未實現 的任務42。調度器22搜索可運行執行上下文38或未實現的任務42來附加到可用虛擬處 理器32以便按任何合適的方式來執行。例如,調度器22可在搜索要執行的未實現的任務 42之前首先搜索要執行的可運行執行上下文38。調度器22繼續將執行上下文38附加到 可用虛擬處理器32以便執行,直到執行了調度器22的所有任務和執行上下文38。在一個實施例中,進程12將任務組織成一個或多個調度組50并將調度組50呈現 給調度器22。圖2是示出供在調度器22中使用的調度組50的一實施例的框圖。調度組50包括可運行集合52、已實現的任務集合53、工作集合M、和一組零個或 多個工作竊取隊列56。可運行集合52包含解除阻塞的執行上下文38的列表。當執行上下 文變為解除阻塞時,調度器22將執行上下文38添加至可運行集合52。已實現的任務集合 53包含可能具有或可能不具有相關聯的執行上下文38的已實現的任務40的列表(例如, 未啟動的代理)。當進程12將新的可運行任務呈現給調度器22時,調度器22將已實現的 任務添加至已實現的任務集合53。工作集合M包含如由箭頭58所指示的工作竊取隊列 56的列表,并跟蹤正在執行來自工作竊取隊列56的任務的執行上下文。每一工作竊取隊列 56包括一個或多個未實現的任務42。使用圖2的實施例,調度器22可首先在調度器22中的每一調度組50的可運行集 合52中搜索解除阻塞的執行上下文38。調度器實例22然后可在調度組50的工作竊取隊 列56中搜索未實現的任務之前在調度器22中的所有調度組50的已實現的任務集合53中 搜索已實現的任務。在一個實施例中,變為可用的虛擬處理器32可嘗試在該可用虛擬處理器32最近 從中獲得可運行執行上下文38的調度組50 (即,當前調度組50)中的可運行集合52中定 位可運行執行上下文38。可用虛擬處理器32然后可嘗試以循環或其他合適的次序在調度 器22的其余調度組50中的可運行集合52中定位可運行執行上下文38。如果沒有找到可 運行執行上下文38,則可用虛擬處理器32然后可嘗試在以循環或其他合適的次序搜索調 度器22的其余調度組50中的工作竊取隊列56之前在當前調度組50的工作竊取隊列56 中定位未實現的任務42。回頭參考圖1A,調度器22創建并管理執行上下文34和28。當執行上下文34在 虛擬處理器32上完成執行時,該執行上下文34將對該虛擬處理器32的控制返回給調度器 22。調度器22然后可使得虛擬處理器32搜索要執行的另一執行上下文38直到所有執行上下文38和任務42都已完成執行。除了由調度器22創建和管理的執行上下文34和38之外,調度器22允許由進程 12創建并在調度器22外部的外部執行上下文沈直接在屬于調度器22的虛擬處理器32上 執行。當外部執行上下文26直接在屬于調度器22的虛擬處理器32上執行時,調度器22 將對虛擬處理器32的控制移交給外部執行上下文26。通過這樣做,調度器22可以避免可 能的昂貴的上下文切換并允許對外部外部執行上下文26應用調度器22的調度策略。然而,因為外部執行上下文沈不在調度器22的控制下,所以外部執行上下文沈 不將虛擬處理器32返回給調度器22。相反,外部執行上下文沈繼續使用虛擬處理器32, 直到外部執行上下文沈通過退出運行時環境10或由操作系統14創建的操作系統環境來 停止執行。當外部執行上下文沈停止執行時,調度器22回收外部執行上下文沈所使用的 虛擬處理器32。為了回收外部執行上下文沈所使用的虛擬處理器32,調度器22向運行時環境10 或OS 14注冊與外部執行上下文沈相關聯的退出事件的通知。響應于接收到來自運行時 環境10或OS 14的已經發生退出事件的通知,調度器22重新獲取對虛擬處理器32的控制 并使得由虛擬處理器32來執行與由調度器22控制的執行上下文34或38相關聯的任務40 或42。圖3是示出用于請求和接收與外部執行上下文沈相關聯的退出事件通知的方法 的流程圖。如由調度器22執行的圖3的方法將參考圖1A-1D的實施例來描述。另外,由運 行時環境10或OS 14執行的功能將參考圖4描述。圖4是示出用于提供退出事件通知的 方法的一實施例的流程圖。在圖3中,調度器22確定調度器22中是否包括外部執行上下文,如框62所示。如 此處所使用的,術語“外部執行上下文”指的是由進程12而不是由調度器22創建的執行上 下文。進程12由此控制外部執行上下文的執行。外部執行上下文可響應于生成任務以供 調度器22執行,或通過顯式地創建調度器22來被包括在調度器22中。參考圖IA的示例,調度器22確定調度器22中是否包括外部執行上下文沈中的 任一個。進程12通過向OS 14提供請求來創建外部執行上下文沈。因為這些外部執行上 下文26是由進程12創建的,所以進程12,而不是調度器22控制外部執行上下文沈的執 行。相反,調度器22通過向OS 14提供請求來創建執行上下文34和38。因此,調度器22 控制執行上下文;34和38的執行。如果調度器22中包括外部執行上下文,則調度器22將該外部執行上下文轉換成 自主執行上下文,如框64所示。如此處所使用的,自主執行上下文是在調度器22的處理資 源上執行但不在調度器22的控制下的執行上下文。因此,調度器22提供調度器22的處理 資源以供自主執行上下文使用,以便允許該自主執行上下文在該處理資源上執行。通過這 樣做,調度器22放棄對處理資源的控制,以使得該處理資源在自主執行上下文的控制下, 而不在調度器22的控制下。參考圖IB的示例,調度器22確定調度器22中是否包括外部執行上下文沈(1)。 調度器22將外部執行上下文沈(1)轉換成自主執行上下文沈(1)并將虛擬處理器32(1) 提供給自主執行上下文沈(1)。虛擬處理器32(1)執行自主執行上下文沈(1)的至少一個 任務28 (I)0
調度器22注冊與自主執行上下文相關聯的退出事件的通知,如框66所示。自主 執行上下文執行進程12中的調度器22的任務并且可以不包括用于將對處理資源的控制返 回給調度器22的機制。自主執行上下文繼續在調度器22的處理資源上執行,除非自主執 行上下文顯式地脫離調度器22(例如,經由運行時環境10所提供的API)。自主執行上下 文可以在任何時刻退出運行時環境10和/或由OS 14創建的操作系統環境。因此,調度器 22向運行時環境10或OS 14提供信號以注冊與自主執行上下文相關聯的退出事件的通知。 例如,調度器22向OS 14提供信號44,如圖IB所示。在OS 14是Windows操作系統的情況 下,調度器22可使得自主執行上下文的句柄被添加到等待陣列46并等待來自OS 14的信 號。在其他實施例中,調度器22可使得該句柄被提供給其他合適的數據結構或存儲在其他 合適的數據結構中。參考圖4,由運行時環境10或OS 14確定是否已經接收到對與自主執行上下文相 關聯的退出事件的通知的請求,如框82所示。運行時環境10或OS 14從調度器22接收對 與在分配給調度器22的處理資源上執行的自主執行上下文相關聯的退出事件的通知的請 求。例如,在圖IB的示例中,OS 14從調度器22接收信號44。響應于接收到該請求,運行 時環境10或OS 14將標識自主執行上下文的句柄添加到等待陣列46,如框84所示。在其 他實施例中,運行時環境10或OS 14可將通知請求存儲在其他合適的數據結構中。回頭參考圖3,自主執行上下文在調度器22的處理資源上執行,如框68所示。在 圖IB的示例中,自主執行上下文沈(1)在調度器22的虛擬處理器32(1)上執行。在自主 執行上下文26(1)執行之前,虛擬處理器32(1)執行執行上下文34(1),如圖IA所示。虛擬 處理器32(1)可響應于執行上下文34(1)的完成、阻塞或其他中斷(例如,顯式退讓或強制 搶先)而變為可用于執行自主執行上下文沈(1)。調度器22中的其他虛擬處理器32可以 在虛擬處理器32(1)執行自主執行上下文沈(1)的同時繼續執行調度器22的執行上下文 34。自主執行上下文可以在任何時刻停止在虛擬處理器32(1)上執行并退出運行時環境10 和/或由OS 14創建的操作系統環境。回頭參考圖4,由運行時環境10或OS 14確定是否已經發生與自主執行上下文相 關聯的退出事件,如框86所示。運行時環境10或OS 14在自主執行上下文退出或以其他 方式終止和停止在調度器22的處理資源上執行時檢測退出事件。如圖IC的示例所示,虛 擬處理器32(1)不再執行自主執行上下文沈(1)。響應于確定已經發生退出事件,運行時 環境10或OS 14向調度器22提供該退出事件的通知,如框88所示。例如,在圖IC的示例 中,OS 14向調度器22提供信號48。回頭參考圖3,調度器22確定是否接收到對應于自主執行上下文的退出事件的通 知,如框70所示。響應于接收到退出事件的通知(例如,接收到來自OS 14的信號48),調 度器22標識并重新獲取對執行自主執行上下文的處理資源的控制。調度器22在自主上下 文所使用的處理資源上執行另一任務,如框72所示。在圖ID的示例中,調度器22重新獲取對虛擬處理器32(1)的控制,并在重新獲取 對虛擬處理器32(1)的控制后使得與執行上下文38(1)相關聯的任務40(1)在虛擬處理器 32(1)上執行。執行上下文38(1)可以是解除阻塞的或新的執行上下文。使用圖3和4的方法,調度器22允許外部執行上下文用調度器22的處理資源來 執行,同時確保調度器22在外部執行上下文退出后回收處理資源。
圖5是示出被配置成實現包括調度器22的運行時環境10的計算機系統100的一 實施例的框圖,其中調度器22被配置成請求和接收與外部執行上下文相關聯的退出事件 通知。計算機系統100包括一個或多個處理器封裝102、存儲器系統104、零個或更多輸 入/輸出設備106、零個或更多顯示設備108、零個或更多外圍設備110、和零個或更多網絡 設備112。處理器封裝102、存儲器系統104、輸入/輸出設備106、顯示設備108、外圍設備 110和網絡設備112使用包括任何合適的類型、數量和配置的控制器、總線、接口、和/或其 他有線或無線連接的一組互連114來進行通信。計算機系統100表示出于通用或專用目的而配置的任何合適的處理設備。計算機 系統100的示例包括服務器、個人計算機、膝上型計算機、圖形輸入板計算機、個人數字助 理(PDA)、移動電話、和音頻/視頻設備。計算機系統100的組件(即,處理器封裝102、存 儲器系統104、輸入/輸出設備106、顯示設備108、外圍設備110、網絡設備112和互連114) 可包含在公共外殼(未示出)中或任何合適數量的獨立外殼(未示出)中。處理器封裝102包括硬件線程16 (1)-16 (M)。處理器封裝102中的每一硬件線程 16被配置成訪問并執行存儲在存儲器系統104中的指令。指令可包括基本輸入輸出系統 (BIOS)或固件(未示出)、0S 14(也在圖1A-1D中示出)、運行時平臺122、應用程序IM和 資源管理層18 (也在圖1A-1D中示出)。每一硬件線程16可結合或響應于從輸入/輸出設 備106、顯示設備108、外圍設備110、和/或網絡設備112接收到的信息來執行指令。計算機系統100引導并執行OS 14。OS 14包括可由硬件線程16執行來管理計算 機系統100的組件并提供允許應用程序IM訪問并使用該組件的一組功能的指令。在一實 施例中,OS 14是Windows操作系統。在其他實施例中,OS 14是適于和計算機系統100 — 起使用的另一操作系統。資源管理層18包括可結合OS 14執行以如上參考圖1A-1D所述地分配包括硬件 線程16的計算機系統100的資源的指令。資源管理層18可作為可為一個或多個應用程序 124所用的功能庫或者作為OS 14的一個集成部分被包括在計算機系統100中。運行時平臺122包括可結合OS 14和資源管理層18來執行以生成運行時環境10 并向應用程序IM提供運行時功能的指令。這些運行時功能包括如上參考圖1A-1D所詳細 描述的調度器功能。運行時功能可作為應用程序124的一部分、作為對一個或多個應用程 序1 可用的功能庫、或者作為OS 14和/或資源管理層18的一個集成部分被包括在計算 機系統100中。每一應用程序IM包括可結合OS 14、資源管理層18和/或運行時平臺122來執 行以使計算機系統100執行所需操作的指令。每一應用程序IM表示可與如由運行時平臺 122提供的調度器22 —起執行的一個或多個進程,諸如如上所述的進程12。存儲器系統104包括被配置成存儲指令和數據的任何合適的類型、數量和配置的 易失性或非易失性存儲設備。存儲器系統104的存儲設備表示存儲包括OS 14、資源管理層 18、運行時平臺122和應用程序124的計算機可執行指令的計算機可讀存儲介質。這些指 令可由計算機系統來執行以執行此處描述的OS 14、資源管理層18、運行時平臺122和應用 程序124的功能和方法。存儲器系統104中的存儲設備的示例包括硬盤驅動器、隨機存取 存儲器(RAM)、只讀存儲器(ROM)、閃存驅動器和卡、以及磁盤和光盤。
存儲器系統104存儲從處理器封裝102、輸入/輸出設備106、顯示設備108、外圍 設備110和網絡設備112接收的指令和數據。存儲器系統104向處理器封裝102、輸入/輸 出設備106、顯示設備108、外圍設備110和網絡設備112提供存儲的指令和數據。輸入/輸出設備106包括被配置成將指令或數據從用戶輸入到計算機系統100并 將指令或數據從計算機系統100輸出到用戶的任何合適的類型、數量和配置的輸入/輸出 設備。輸入/輸出設備106的示例包括鍵盤、鼠標、觸摸墊、觸摸屏、按鈕、撥盤、旋鈕和開關。顯示設備108包括被配置成向計算機系統100的用戶輸出文本和/或圖形信息的 任何合適的類型、數量和配置的顯示設備。顯示設備108的示例包括監視器、顯示屏和投影 儀。外圍設備110包括被配置成用計算機系統100中的一個或多個其他組件來操作以 執行通用或專用處理功能的任何合適的類型、數量和配置的外圍設備。網絡設備112包括被配置成允許計算機系統100通過一個或多個網絡(未示出) 進行通信的任何合適的類型、數量和配置的網絡設備。網絡設備112可根據任何合適的網 絡協議和/或配置來操作以允許計算機系統100將信息發送給網絡或者從網絡接收信息。上述實施例允許任務調度器使用外部執行上下文(即,在該調度器的控制之外的 上下文)來調度工作,而不會在外部執行上下文終止時耗盡虛擬化處理資源。通過這樣做, 可避免可能的昂貴的上下文切換并且可對所選外部執行上下文應用調度器22的所需調度 策略。盡管此處說明并描述了具體實施例,但本領域技術人員可以理解,可用各種替換 和/或等價實現來替換此處示出并描述的具體實施例而不背離本發明的范圍。本申請旨在 覆蓋此處討論的具體實施例的任何改編或變型。因此,本發明旨在僅由權利要求書及其等 效方案來限制。
權利要求
1.一種由在計算機系統(100)上執行的進程(1 的調度器0 執行的方法,所述方 法包括提供所述調度器的第一處理資源(16/32)以供第一執行上下文06)使用,以使得所述 第一處理資源不在所述調度器的控制下;注冊與所述第一外部上下文相關聯的退出事件的通知;以及響應于接收到所述退出事件的通知來重新獲取對所述第一處理資源的控制。
2.如權利要求1所述的方法,其特征在于,還包括 用所述第一處理資源來執行所述第一執行上下文。
3.如權利要求1所述的方法,其特征在于,還包括在重新獲取對所述第一處理資源的控制之后在所述第一處理資源上執行所述調度器 的任務(40)。
4.如權利要求3所述的方法,其特征在于,還包括在執行所述任務之前將所述任務與第二執行上下文(38)相關聯。
5.如權利要求4所述的方法,其特征在于,所述進程創建所述第一執行上下文,并且其 中所述調度器用所述調度器創建所述第二執行上下文。
6.如權利要求1所述的方法,其特征在于,還包括在提供所述第一處理資源以供所述第一執行上下文使用之前在所述第一處理資源上 執行所述調度器的任務(36)。
7.如權利要求1所述的方法,其特征在于,還包括向操作系統(14)或運行時環境(10/12 中的一個注冊與所述第一執行上下文相關聯 的退出事件的通知。
8.如權利要求1所述的方法,其特征在于,還包括在提供所述第一處理資源以供所述第一執行上下文使用之后并且在重新獲取對所述 第一處理資源的控制之前,在所述調度器的第二處理資源上執行所述調度器的任務(36)。
9.如權利要求1所述的方法,其特征在于,所述第一處理資源包括虛擬處理器(32)和 硬件線程(16)。
10.一種存儲計算機可執行指令的計算機可讀存儲介質(104),所述計算機可執行指 令在由計算機系統(100)執行時執行一種方法,所述方法包括注冊與提供給在所述計算機系統上執行的進程(1 中的調度器0 的第一執行上下 文06)相關聯的退出事件的通知;在從所述調度器提供給所述第一執行上下文的處理資源(16/3 上執行所述第一執 行上下文;以及在接收到所述退出事件的通知后在所述處理資源上執行第一任務GO)。
11.如權利要求10所述的計算機可讀存儲介質,其特征在于,所述方法還包括 在向所述調度器提供所述第一執行上下文之前用所述進程來創建所述第一執行上下文。
12.如權利要求10所述的計算機可讀存儲介質,其特征在于,所述方法還包括 用所述調度器來創建第二執行上下文(38);以及在執行所述第一任務之前將所述任務與所述第二執行上下文相關聯。
13.如權利要求10所述的計算機可讀存儲介質,其特征在于,所述方法還包括將所述進程中的外部執行上下文轉換成包括所述第一執行上下文的、獲取對所述處理 資源的控制的自主執行上下文。
14.如權利要求10所述的計算機可讀存儲介質,其特征在于,所述方法還包括 向操作系統(14)或運行時環境(10/122)中的一個注冊所述退出事件的通知。
15.如權利要求10所述的計算機可讀存儲介質,其特征在于,所述方法還包括 當在所述第一處理資源上執行所述第一執行上下文時在所述調度器的第二處理資源(16/32)上執行所述調度器的第二任務(36)。
全文摘要
計算機系統的進程中的調度器允許外部執行上下文在分配給該調度器的處理資源上執行。調度器向外部執行上下文提供對處理資源的控制。調度器注冊與外部執行上下文相關聯的退出事件的通知。響應于接收到已發生退出事件的通知,調度器重新獲取對處理資源的控制并使得由該處理資源執行與該調度器所控制的執行上下文相關聯的任務。
文檔編號G06F9/46GK102047217SQ200980121207
公開日2011年5月4日 申請日期2009年5月1日 優先權日2008年6月2日
發明者G·弗納德斯, P·林塞斯 申請人:微軟公司