專利名稱:用于自主自適應(yīng)互斥體的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種改進的數(shù)據(jù)處理系統(tǒng),特別是涉及多處理協(xié)調(diào)的方法和設(shè)備。更具體地說,本發(fā)明提供了在任務(wù)管理或控制期間使用互斥鎖(互斥體)處理調(diào)度或者資源分配的方法和設(shè)備。
背景技術(shù):
現(xiàn)代操作系統(tǒng)支持多程序設(shè)計(multiprogramming),從而多個程序看起來似乎在具有單個中央處理單元(CPU)的單一計算裝置上并行運行,或可能在對稱的多處理器(SMP)機中的多CPU上并行運行。并行運行的現(xiàn)象是利用串行化運行(也被稱之為“時間分片(time slicing)”)實現(xiàn)的即裝置的操作系統(tǒng)允許多個程序之一在某個有限時段即時間片(timeslice)內(nèi)獨自地運行,然后在其后的時段內(nèi)獨自運行多個程序中另外一個。由于程序間切換非??斓匕l(fā)生,因此這些程序看起來好像是并行運行,即使它們實際上為串行化運行也是如此。當(dāng)用于一個程序的時間片結(jié)束時,該程序就進入暫?;蛘摺靶菝摺睜顟B(tài),并且另一個程序“喚醒”并開始運行。
改善單個程序或者單個處理的性能的一種方法是把程序或者處理劃分成多個運行路徑,通常將其稱為似乎并行地運行的“線程”。這樣的程序或者處理通常被稱作“多任務(wù)”或者“多線程”。在每個線程獨自使用CPU期間,操作系統(tǒng)為其提供時間片。操作系統(tǒng)通常提供內(nèi)建機構(gòu),以非??焖俣行У姆绞皆诙鄠€并行程序之間和/或多個線程之間進行切換。某些類型的CPU提供對多線程的操作系統(tǒng)的直接硬件支持。由于本發(fā)明的原理等同地應(yīng)用于可以包括單線程或多線程的并行線程和并行程序,所以這里使用的術(shù)語“線程”可以指非多線程程序或多線程程序內(nèi)的一個線程。
當(dāng)線程運行時,它們總是需要存取數(shù)據(jù)處理系統(tǒng)內(nèi)的資源,比如存儲器、數(shù)據(jù)結(jié)構(gòu)、文件或者其它資源。打算被多線程共享的資源必須以這樣一種方式被共享保護被包含在資源內(nèi)的或者經(jīng)過資源的數(shù)據(jù)的完整性。實現(xiàn)的方式之一是串行化運行正在爭用共享資源的線程。當(dāng)?shù)谝痪€程已經(jīng)使用一個資源時,需要資源的第二線程必須等待到該資源不再被使用,這種情況通常作為第一線程已經(jīng)成功地完成其資源使用的結(jié)果而發(fā)生。
操作系統(tǒng)通常提供多個機構(gòu)來協(xié)調(diào)多線程的共享資源的使用。盡管應(yīng)用程序開發(fā)商可以創(chuàng)建她自己的特定機構(gòu)來確保對共享線程的串行化存取,但是應(yīng)用程序開發(fā)商通常利用操作系統(tǒng)所提供的機構(gòu)或標(biāo)準(zhǔn)化軟件庫內(nèi)的機構(gòu),把共享資源的控制邏輯嵌入到多線程中。操作系統(tǒng)特定機構(gòu)的使用是有利的,因為它允許操作系統(tǒng)把資源爭用信息并入時間片功能中。因此,操作系統(tǒng)根據(jù)線程對資源的需要和爭用來把時間片分配給線程,而不是通過使線程嚴(yán)格地周期使用時間片。
串行化存取共享資源的普通機構(gòu)是互斥體或者互斥鎖,互斥鎖是具有以下兩種狀態(tài)的簡單鎖鎖定和解鎖。該鎖通常被實施為經(jīng)由例程的標(biāo)準(zhǔn)化庫中的軟件子例程或者模塊創(chuàng)建、毀壞或修改的數(shù)據(jù)對象或數(shù)據(jù)結(jié)構(gòu)?;コ怏w可以邏輯地關(guān)聯(lián)于共享資源,以使得成功鎖定互斥體的線程被說成是互斥體的當(dāng)前擁有者。只有擁有特定互斥體的線程才將存取與特定互斥關(guān)聯(lián)的共享資源,并且只有擁有特定互斥體的線程才可以解鎖該特定互斥體。因此,存取共享資源的線程內(nèi)的代碼臨界區(qū)(critical section of code)由鎖定互斥體的調(diào)用以及解鎖該互斥體的調(diào)用來界定。如果線程試圖鎖定互斥體但失敗,那么它必須等待,直至在開始運行存取共享資源的代碼臨界區(qū)之前能夠鎖定互斥體。如果在通過協(xié)調(diào)處理共享的存儲器內(nèi)分配了互斥體,則互斥體可以用來同步單一處理或交叉多處理內(nèi)的多個線程。
在獲取互斥體失敗后,線程等待該互斥體的方式取決于實施互斥體機構(gòu)的方式。三種類型的鎖被廣泛使用阻塞鎖、自旋鎖以及阻塞鎖和自旋鎖的某些組合。如果已獲取到互斥體并且另一個線程需要鎖定該互斥體,則實施為阻塞鎖的互斥體使等待的線程停止運行或暫停,即變成“休眠”。相反,自選鎖不將等待的線程置于“休眠”?;蛘?,等待的線程運行循環(huán),從而重復(fù)地請求該鎖直至它被當(dāng)前擁有互斥體的線程釋放。該循環(huán)可以包含空循環(huán)、迭代循環(huán),即“忙循環(huán)”或“忙等待”,它遞增或者遞減變量,使線程不立即重新請求互斥體,而是等待取決于迭代循環(huán)的長度的時間段。
與阻塞鎖或自旋鎖不同,互斥體通常被實施為帶有超時的自旋鎖,它是將阻塞鎖特征與自旋鎖特征相結(jié)合的鎖。具有超時的自旋鎖在有限時間段旋轉(zhuǎn),同時允許線程試圖再次獲得該鎖。如果有限時段期滿而又未獲得該鎖,則鎖定該線程。用于超時的時段通常是通過在忙等待循環(huán)中運行固定次數(shù)的迭代來控制的。除了一個鎖例程和解鎖例程外,軟件庫還通常包含一個“trylock(試鎖)”子例程,在其中,如果未獲得互斥體,即不強迫請求例程等待互斥體變成可用,則把控制返回到請求子例程。
阻塞和旋轉(zhuǎn)的行為具有它們的優(yōu)點和缺點。阻塞快速地暫停等待線程的運行。然而,阻塞的行為可以暫停將立即獲得鎖的線程,并且線程的暫停需要明顯的開銷,例如必須保存線程的運行場景。自旋消耗比如CPU時間和存儲器高速緩存行這樣的資源,但是如果審慎地選擇自旋周期的長度,則等待線程通常可以較快地獲得互斥體,從而允許自旋操作比阻塞操作消耗更少的計算資源。然而,自旋與阻塞之間的選擇取決于許多因素,特別是取決于等待的線程正在運行的裝置的計算環(huán)境。
為了改善性能,自旋鎖超時通常是可調(diào)整的。某些操作系統(tǒng)內(nèi)核允許自旋超時的長度根據(jù)整個系統(tǒng)范圍(system-wide)調(diào)整。在其它情況下,自旋鎖超時可基于每個應(yīng)用(per-application)來調(diào)整。自旋鎖超時的值可以從提供運行時間或者環(huán)境變量值的配置文件或者特性文件中讀取。然而,找到自旋鎖超時的適當(dāng)值可能是由系統(tǒng)管理器執(zhí)行的、耗時的任務(wù)。
因此,擁有一個被實施為不需要專門的手工調(diào)諧處理的、帶有超時的自旋鎖的互斥體總是有好處的。
發(fā)明內(nèi)容
本發(fā)明提供了一種在數(shù)據(jù)處理系統(tǒng)中管理互斥體的方法。對于每個互斥體,維持平均獲取成本,該平均獲取成本指示線程試圖獲得互斥體而引起的計算資源的平均消耗。如果線程試圖獲取被鎖定的互斥體,那么線程根據(jù)限制條件和此時用于互斥體的平均獲取成本值進入自旋狀態(tài)或者休眠狀態(tài)。維持特定線程的當(dāng)前獲取成本值,該成本值代表在獲取互斥體的最初試圖之后和在獲取互斥體之前由線程消耗的計算資源。當(dāng)線程獲得互斥體時,特定線程的當(dāng)前獲取成本值包含在平均獲取成本值中。
在所附的權(quán)利要求書中限定了被認(rèn)為是本發(fā)明特征的新穎特征。通過參考以下結(jié)合附圖的詳細說明,將會更好地理解本發(fā)明本身和其它目的以及本發(fā)明的優(yōu)點。
圖1A圖示了數(shù)據(jù)處理系統(tǒng)的典型網(wǎng)絡(luò),其中每個數(shù)據(jù)處理系統(tǒng)都可以實施本發(fā)明;圖1B圖示了可以在數(shù)據(jù)處理系統(tǒng)內(nèi)使用的典型計算機結(jié)構(gòu),其中在該數(shù)據(jù)處理系統(tǒng)中可以實施本發(fā)明;圖2A圖示了一個方框圖,該方框圖顯示了在利用互斥體的典型多線程應(yīng)用程序內(nèi)的各部件邏輯結(jié)構(gòu);圖2B圖示了一個方框圖,該方框圖顯示了支持多線程應(yīng)用程序運行的典型數(shù)據(jù)處理系統(tǒng)中各部件的邏輯結(jié)構(gòu),其中多線程應(yīng)用程序使用由操作系統(tǒng)內(nèi)核支持的互斥體;圖3圖示了自旋鎖互斥體的一種典型實施;圖4A圖示了根據(jù)本發(fā)明實施例的一個顯示互斥體數(shù)據(jù)結(jié)構(gòu)的方框圖,該互斥體數(shù)據(jù)結(jié)構(gòu)已經(jīng)被擴展到包括支持自適應(yīng)互斥體的信息;圖4B圖示了一個顯示某些數(shù)據(jù)字段的方框圖,該數(shù)據(jù)字段可以用于特定線程的、與互斥體有關(guān)的數(shù)據(jù)結(jié)構(gòu),以支持自適應(yīng)互斥體的獲?。粓D5A-圖5C圖示了一組顯示一個處理的流程圖,通過該處理,一個線程獲取自適應(yīng)互斥體,同時協(xié)助跨越所有嘗試計算運行平均獲取成本,以獲得自適應(yīng)互斥體;和圖6圖示了一個顯示處理的流程圖,通過該處理,線程釋放自適應(yīng)互斥體。
具體實施例方式
通常,可以包括或者涉及本發(fā)明的裝置包含廣泛的數(shù)據(jù)處理技術(shù)。因此,在詳細描述本發(fā)明之前,先說明分布式數(shù)據(jù)處理系統(tǒng)內(nèi)的硬件和軟件成分的典型結(jié)構(gòu)。
參見附圖,圖1A圖示了數(shù)據(jù)處理系統(tǒng)的典型網(wǎng)絡(luò),其中的每個數(shù)據(jù)處理系統(tǒng)都可以實施本發(fā)明的一部分。分布式數(shù)據(jù)處理系統(tǒng)100包含網(wǎng)絡(luò)101,它是可以用來在一起連接到分布式數(shù)據(jù)處理系統(tǒng)100內(nèi)的裝置與計算機之間提供通信鏈路的媒介。網(wǎng)絡(luò)101可以包括永久連接件,比如線路和光纖電纜,也可以包括通過電話或者無線通信產(chǎn)生的臨時連接。在所示的實例中,服務(wù)器102和服務(wù)器103與存儲單元104一起連接到網(wǎng)絡(luò)101。此外,客戶機105-107和服務(wù)器102-103可以由各種計算裝置(比如主計算機、個人計算機、個人數(shù)字助理(PDA)等)代表。分布式數(shù)據(jù)處理系統(tǒng)100可以包括未示出的附加服務(wù)器、客戶機、路由器、其它裝置和對等式結(jié)構(gòu)。
在所示的實例中,分布式數(shù)據(jù)處理系統(tǒng)100可以包括具有代表全球網(wǎng)絡(luò)匯集的網(wǎng)絡(luò)101的因特網(wǎng);和使用各種協(xié)議彼此通信的網(wǎng)關(guān),這些協(xié)議比如是簡便目錄存取協(xié)議(LDAP)、傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)、超文本傳輸控制協(xié)議(HTTP)、無線應(yīng)用協(xié)議(WAP)等。當(dāng)然,分布式數(shù)據(jù)處理系統(tǒng)100還可以包括多種不同類型網(wǎng)絡(luò),比如內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)或者廣域網(wǎng)(WAN)。例如,服務(wù)器102直接支持客戶機109和網(wǎng)絡(luò)110,以組建無線通信鏈路。網(wǎng)絡(luò)激活電話機111經(jīng)由網(wǎng)線鏈路112連接網(wǎng)絡(luò)110,而PDA113經(jīng)由無線鏈路114連接網(wǎng)絡(luò)110。電話機111和PDA113也可以使用建立所謂個人域網(wǎng)(PAN)或者個人專用(ad-hoc)網(wǎng)的合適的技術(shù)如藍牙無線技術(shù),經(jīng)由無線鏈路115在它們之間直接傳送數(shù)據(jù)。按照同樣的方式,PDA113可以經(jīng)由無線通信鏈路116把數(shù)據(jù)傳送到PDA107。
本發(fā)明可以在各種硬件平臺上實現(xiàn)。圖1A打算作為不同種類計算環(huán)境的一個實例,不打算作為本發(fā)明的結(jié)構(gòu)限制。
參見圖1B所示的如圖1A所示的數(shù)據(jù)處理系統(tǒng)的典型計算機結(jié)構(gòu)的示意圖,該計算機結(jié)構(gòu)可以實施本發(fā)明。數(shù)據(jù)處理系統(tǒng)120包含一個或多個連接內(nèi)部系統(tǒng)總線123的中央處理單元(CPU)122,該內(nèi)部系統(tǒng)總線123互連隨機存取存儲器(RAM)124、只讀存儲器126和輸入/輸出適配器128,適配器128支持各種I/O裝置比如打印機130、盤單元132或其它未顯示的裝置,比如音頻輸出系統(tǒng)等。系統(tǒng)總線123還連接提供接入通信鏈路136的通信適配器134。用戶接口適配器148連接各種用戶裝置,如鍵盤140和鼠標(biāo)142,或者連接未顯示的其他裝置,如觸摸屏、攝像頭(stylus)、麥克風(fēng)等。顯示適配器144把系統(tǒng)總線123連接到顯示裝置146。
本領(lǐng)域熟練技術(shù)人員將會明白,圖1B中的硬件可以根據(jù)系統(tǒng)實施而變化。例如,該系統(tǒng)可以具有一個或多個處理器(比如英特爾奔騰處理器和數(shù)字信號處理器(DSP))以及一種或多種易失性和非易失性存儲器。其它外圍設(shè)備可以和圖1B所示的硬件一起使用,或者替代圖1B中所示的硬件。所示實例不用來限制本發(fā)明的結(jié)構(gòu)。
除了能夠在各種硬件平臺上實施本發(fā)明外,還可以在各種軟件環(huán)境中實現(xiàn)本發(fā)明。典型的操作系統(tǒng)可以用來控制每個數(shù)據(jù)處理系統(tǒng)內(nèi)的程序運行。例如,一個裝置可以運行Unix操作系統(tǒng),而另一個裝置包含一個簡單的Java運行時間環(huán)境。代表性計算機平臺可以包括瀏覽器,瀏覽器是一個公知軟件應(yīng)用程序,用于訪問各種格式的超文本文件,比如圖形文件、字處理文件、可擴展標(biāo)記語言(XML)、超文本標(biāo)記語言(HTML)、手持裝置標(biāo)記語言(HDML)、無線標(biāo)記語言(WML)和各種其它格式和類型文件。
本發(fā)明可以在各種硬件和軟件平臺上實施,如在圖1A和圖1B所述的包括對稱多處理器(SMP)機上實施。盡管本發(fā)明不需要圖1A和圖1B中所述的所有部件,但是這些元件可以由設(shè)嵌入本發(fā)明的一個部件(例如操作系統(tǒng)、應(yīng)用程序或者某個其它部件)使用。此外,本發(fā)明可以在這樣一個計算環(huán)境中實施,在該計算環(huán)境中,各種部件(諸如顯示裝置)間接地用來支持本發(fā)明,以便(例如)允許系統(tǒng)管理員配置參數(shù)和元素。
更具體地說,盡管如此,但是本發(fā)明針對一種改進的互斥體,該互斥體可以被實施于一個操作系統(tǒng)內(nèi)、一個應(yīng)用程序內(nèi),或者以某種其它方式實施于一個數(shù)據(jù)處理系統(tǒng)內(nèi)。在詳細說明改進的互斥體之前,首先描述典型互斥體的使用。如上所述,應(yīng)用程序開發(fā)商可以創(chuàng)建如圖2A所示的特定應(yīng)用程序互斥體,但是應(yīng)用程序開發(fā)商通常采用如圖2B所示的、由操作系統(tǒng)提供的機構(gòu)或者標(biāo)準(zhǔn)化軟件庫中的機構(gòu)??梢砸愿鞣N特定應(yīng)用或者非特定應(yīng)用形式實施本發(fā)明,而又不影響本發(fā)明的范圍。
參見圖2A,其中的方框示了在利用互斥體的典型多線程應(yīng)用程序中的各部件的邏輯結(jié)構(gòu)。多線程應(yīng)用程序202包括多個線程,如線程204和線程206。應(yīng)用程序可以實施它自己的、由互斥體數(shù)據(jù)結(jié)構(gòu)210支持的互斥體功能208,以便對于由包括應(yīng)用程序的線程共享的資源,使它自己的線程的操作串行化,而不依賴于由操作系統(tǒng)提供的、或者標(biāo)準(zhǔn)軟件庫內(nèi)(諸如POSIX“p線程(pthread)”庫)的互斥體功能。
參見圖2B,其中的方框示了典型數(shù)據(jù)處理系統(tǒng)的各部件的邏輯結(jié)構(gòu),該典型數(shù)據(jù)處理系統(tǒng)支持使用由操作系統(tǒng)內(nèi)核支持的互斥體的多線程應(yīng)用程序的運行。計算機220支持一個包含內(nèi)核級功能222的操作系統(tǒng),該內(nèi)核級功能222控制分別包括線程228和230的多線程應(yīng)用程序224和226的運行。內(nèi)核中的線程調(diào)度器232利用線程調(diào)度器數(shù)據(jù)結(jié)構(gòu)234確定線程何時運行以及何時被暫停,線程調(diào)度器數(shù)據(jù)結(jié)構(gòu)234可以包含協(xié)助線程調(diào)度任務(wù)管理的數(shù)據(jù)結(jié)構(gòu),例如,數(shù)據(jù)結(jié)構(gòu)可以包括FIFO(先進先出)隊列,比如與各種線程狀態(tài)關(guān)聯(lián)的隊列,例如準(zhǔn)備運行隊列、休眠隊列、I/O阻塞隊列、互斥體等待隊列,或者其它狀態(tài)。駐留在內(nèi)核中的互斥體管理例程236(或利用內(nèi)核級特權(quán)運行的內(nèi)核擴展的程序)提供創(chuàng)建、修改和毀壞諸如互斥體數(shù)據(jù)結(jié)構(gòu)238內(nèi)反映的互斥體的功能。如上所述,盡管如此,互斥體管理例程和互斥體數(shù)據(jù)結(jié)構(gòu)也可以按應(yīng)用級而不是按內(nèi)核級予以實施,本發(fā)明可應(yīng)用于任何一種實施的形式。在下文中,術(shù)語“休眠”被認(rèn)為等同于“暫?!?。
參見圖3所示介紹自旋鎖互斥體的典型實施。處理開始于線程請求獲得互斥體(步驟302),在下文中,術(shù)語“獲得”、“保留”、“占有”、“擁有”,或者“鎖定”互斥體被認(rèn)為是等同的。然后確定互斥體是否被釋放和解鎖(步驟304),如果不是,則通過繞互斥體自旋來檢查線程是否已經(jīng)使用了可配置時間量(步驟306)。如果不是,則線程執(zhí)行一個忙等待循環(huán)(步驟308),即當(dāng)線程等待互斥體變成可用時,在一個循環(huán)中自旋。如果線程先前已經(jīng)經(jīng)過步驟302-308,則線程通過完成另一個忙等待循環(huán),繼續(xù)執(zhí)行自旋操作。在自旋某個時段之后,線程重復(fù)步驟302。
如果互斥體在步驟304是自由的,則為該線程而鎖定互斥體(步驟310),并且線程可以開始訪問共享資源(步驟312),而不可能與另一線程碰撞以及損壞與共享資源關(guān)聯(lián)的數(shù)據(jù)的完整性。在線程已經(jīng)執(zhí)行它的關(guān)于共享資源的操作之后,線程請求將釋放互斥體,并解鎖互斥體(步驟314),從而結(jié)束該處理。在互斥體已經(jīng)被解鎖之后,可以由其它并發(fā)運行的線程使用互斥體。如果線程通過繞互斥體自旋已經(jīng)使用了如步驟306所確定的可配置時間量,則線程例如通過調(diào)用造成線程進入休眠狀態(tài)的內(nèi)核功能而在互斥體上休眠(步驟316)。線程可以休眠可配置的時段,或者內(nèi)核可以有當(dāng)互斥體被解鎖時喚醒線程的能力。在任何一種情況下,當(dāng)線程被喚醒之后,線程再次試圖獲得互斥體。
如上所述,在現(xiàn)有技術(shù)中,自旋鎖超時是可調(diào)整的,以便盡量改善獲取互斥體的處理性能。某些操作系統(tǒng)內(nèi)核允許基于整個系統(tǒng)范圍(system-wide)調(diào)整自旋超時的長度。在其它情況中,自旋鎖超時可基于每個應(yīng)用程序調(diào)整。然而,找到自旋鎖超時的適當(dāng)值可能是一件費時的試驗任務(wù)?,F(xiàn)在回到本發(fā)明,本發(fā)明針對獲取這樣一個互斥體的處理,該互斥體以每個互斥體(per-mutex)為基礎(chǔ)自動自適應(yīng)在獲得互斥體的在前嘗試期間已經(jīng)消耗的計算資源。剩下的附圖在下文中說明本發(fā)明的各個實施例。
參見圖4A,所示的方框示說明了互斥體數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)已經(jīng)被擴展到包含支持本發(fā)明實施例的自適應(yīng)互斥體的信息。應(yīng)當(dāng)注意的是,所示互斥體數(shù)據(jù)結(jié)構(gòu)中信息數(shù)據(jù)項可以被存儲在其它數(shù)據(jù)結(jié)構(gòu)中,而且圖4A中的互斥體數(shù)據(jù)結(jié)構(gòu)僅僅是支持本發(fā)明實施例的可以在邏輯上相互關(guān)聯(lián)的各種信息數(shù)據(jù)項的邏輯結(jié)構(gòu)的一個實例,其它信息數(shù)據(jù)項可以被包含在互斥體數(shù)據(jù)結(jié)構(gòu)中。
互斥體數(shù)據(jù)結(jié)構(gòu)402包含互斥體404,互斥體404是為反映互斥鎖的鎖定或解鎖狀態(tài)而觸發(fā)的數(shù)據(jù)值。如果互斥體被鎖定,則鎖定的線程標(biāo)識符406指示由操作系統(tǒng)分配給當(dāng)前擁有互斥體(即已經(jīng)鎖定互斥體)的線程的線程標(biāo)識符。如果該互斥體被鎖定以及存在等待其釋放的線程,那么等待的線程列表408包含等待互斥體釋放的線程的線程標(biāo)識符。作為選擇,等待的線程列表408可以包含一個記錄列表,其中每個記錄代表一個正在等待互斥體的線程,并且每個記錄可以包含下面將要詳細說明的線程管理信息。互斥體數(shù)據(jù)結(jié)構(gòu)402還包含平均獲得成本410,對于存儲已經(jīng)獲得互斥體404的線程的平均成本或者計算資源的消耗,該平均獲得成本尤為重要,以下將更詳細說明。
參見圖4B,所示方框圖顯示了本發(fā)明實施例的某些數(shù)據(jù)字段,這些數(shù)據(jù)字段可以在特定線程、與互斥體有關(guān)的數(shù)據(jù)結(jié)構(gòu)中使用,以支持自適應(yīng)互斥體獲取。圖4B所示的數(shù)據(jù)字段可以代表圖4A所示的等待線程列表408內(nèi)特定線程記錄中所包含的數(shù)據(jù)字段。作為選擇,圖4B中顯示的數(shù)據(jù)字段可以被存儲在操作系統(tǒng)管理其特定線程操作的線程控制塊內(nèi)。與自適應(yīng)互斥體上操作結(jié)合使用的數(shù)據(jù)字段隨本發(fā)明不同實施例而改變。圖4B所示的數(shù)據(jù)字段還用來在圖5A-圖6中圖示說明可以執(zhí)行調(diào)度線程運行的附加的線程有關(guān)的管理。在任何情況下,圖4B所示的數(shù)據(jù)字段是正在試圖獲取特定自適應(yīng)互斥體的特定線程所特有的??梢约俣ǎ?dāng)特定線程每次試圖獲取已給定的自適應(yīng)互斥體時,初始化這些數(shù)據(jù)字段。
線程標(biāo)識符420指示由操作系統(tǒng)分配給特定線程的線程標(biāo)識符。等待標(biāo)志422指示特定線程正在等待獲取自適應(yīng)互斥體。忙等待標(biāo)志424指示線程在等待自適應(yīng)互斥體的時候,已經(jīng)進入忙等待或自旋狀態(tài)。休眠標(biāo)志426指示線程在等待自適應(yīng)互斥體的時候,已經(jīng)進入休眠狀態(tài)。休眠開始時標(biāo)428是指示線程進入休眠狀態(tài)時的時間值,休眠結(jié)束時標(biāo)430是指示線程退出休眠狀態(tài)時的時間值。附加數(shù)據(jù)字段432包含線程的當(dāng)前互斥體獲取成本的值即某些度量,以指示在當(dāng)前時間點之前為獲取特定自適應(yīng)互斥體的當(dāng)前嘗試中已經(jīng)消耗的計算資源的量。
參見圖5A-圖5C,所述的一組流程圖顯示了本發(fā)明實施例的,一個線程在通過獲取自適應(yīng)互斥體的所有嘗試協(xié)助運行平均獲取成本的時候,獲取自適應(yīng)互斥體的處理。圖5A-圖5C圖示說明了各種互斥體獲取階段,或者在試圖獲取自適應(yīng)互斥體的時候線程可能經(jīng)歷的各種互斥體獲取狀態(tài)。圖5A主要說明了能夠鎖定一個處于解鎖狀態(tài)的自適應(yīng)互斥體的線程的處理。圖5B顯示了線程進入自旋狀態(tài),即線程自旋或者忙等待已鎖定的自適應(yīng)互斥體的處理,而圖5C顯示了線程進入休眠狀態(tài),即線程休眠于已鎖定自適應(yīng)互斥體的處理。
參見圖5A,處理開始于進入鎖定自適應(yīng)互斥體的程序(步驟502),例如,開始于從特定線程調(diào)用該程序。在該實施例中,該程序被稱之為“自適應(yīng)互斥體管理例程”,它可以作為通過特定操作系統(tǒng)調(diào)用進行訪問的內(nèi)核級程序而存在,或者作為僅僅可以用特定特權(quán)運行的其它類型程序而存在。作為選擇,一個應(yīng)用可以實施本發(fā)明的一個實施例,在此情況下,自適應(yīng)互斥體管理例程可以被編譯成應(yīng)用程序的目標(biāo)代碼。
為了反映線程的最當(dāng)前的狀態(tài),例如為了線程調(diào)度器的利益,設(shè)置一個標(biāo)志值來指示該線程正在等待互斥體(步驟504)。各種特定線程數(shù)據(jù)值可以被初始化,比如初始化圖4B所示的數(shù)據(jù)值。特別是,可以把獲取感興趣的特定自適應(yīng)互斥體的線程當(dāng)前獲取成本設(shè)定為零(步驟506)。
然后確定自適應(yīng)互斥體是否已經(jīng)被鎖定(步驟508)。如果互斥體還沒有被鎖定,則為該線程鎖定互斥體(步驟510)。需要注意的是,步驟508和步驟510應(yīng)當(dāng)被實施為原子操作(atomic operation),即被實施為不能中斷的操作。各種公知技術(shù)都可用來執(zhí)行關(guān)于互斥體的原子操作。為了反映線程的最當(dāng)前狀態(tài),把一個線程標(biāo)識符存儲在所需要的任何數(shù)據(jù)結(jié)構(gòu)中,以指示已經(jīng)獲取互斥體的線程的標(biāo)識(步驟512),并且清除等待標(biāo)志值,以指示該線程不再等待互斥體(步驟514)。
然后檢索自適應(yīng)互斥體的平均獲取成本以及用于該互斥體的線程當(dāng)前獲取成本(步驟516)。利用這些已檢索值,計算和存儲自適應(yīng)互斥體的平均獲取成本的新值(步驟518)。自適應(yīng)互斥體管理例程隨后返回到調(diào)用程序(步驟520),并結(jié)束獲取自適應(yīng)互斥體的處理。用來計算平均獲取成本的新值的算法可以隨本發(fā)明不同實施例而變化,這不影響本發(fā)明的范圍。下面詳細說明算法的實例。
在步驟508,如果自適應(yīng)互斥體已經(jīng)被鎖定,則確定互斥體平均獲取成本是否超出門限值或者是否滿足特定限制條件(步驟522)。下面更詳細說明門限值或者其它的條件形式。如果互斥體平均獲取成本未超出門限值或者不滿足特定條件,則處理轉(zhuǎn)移到圖5B所示的運行塊。如果線程的平均獲取成本超過門限值或者滿足特定條件,則處理轉(zhuǎn)移到圖5C所示的運行塊。更具體地說,圖5B圖示說明了線程繞已鎖定的自適應(yīng)互斥體自旋的運行塊。圖5C圖示說明了線程休眠于已鎖定的自適應(yīng)互斥體的運行塊。
現(xiàn)在參見圖5B,運行塊通過設(shè)置一個標(biāo)志值而啟動,該標(biāo)志值指示線程正在自旋于或者正在忙等待于自適應(yīng)互斥體(步驟530),從而反映線程的最當(dāng)前狀態(tài)。如果需要,則初始化忙等待循環(huán)(步驟532),并且進入、運行和完成忙等待循環(huán)(步驟534)。例如,忙等待循環(huán)可以包括不執(zhí)行任何實質(zhì)上有用的工作的空迭代循環(huán)。
然后以某種度量形式計算就計算資源來說的運行這個特定忙等待循環(huán)的成本(步驟536)。計算任何給定的忙等待循環(huán)的算法可以隨本發(fā)明的不同實施例變化,這不影響本發(fā)明的范圍。下面更詳細討論計算忙等待循環(huán)的計算成本的算法的一個實例。如果該成本已經(jīng)被計算和保存,或者如果該成本已經(jīng)得知,例如通過預(yù)配置值得知,則只檢索該成本而不計算該成本。
然后通過添加為最近完成的自旋循環(huán)獲得或計算的成本,更新用于自適應(yīng)互斥體的線程獲取成本的值(步驟538),從而產(chǎn)生用于自適應(yīng)互斥體的新的、特定線程的當(dāng)前獲取成本。照此方式,保持互斥體的線程獲取成本的運行總成本。盡管該成本值可以被描述為總值,但是應(yīng)當(dāng)注意,成本值代表一個近似總值,各種指令執(zhí)行等也許未被包含于成本值中。由于線程已經(jīng)完成忙等待循環(huán),因此指示線程正在自旋或者忙等待于自適應(yīng)互斥體的標(biāo)志值被清零(步驟540),從而反映線程的最當(dāng)前狀態(tài),并結(jié)束該運行塊。
現(xiàn)在參見經(jīng)由圖5A的步驟522到達的圖5C,運行塊通過設(shè)置一個指示線程正休眠于自適應(yīng)互斥體的標(biāo)志而啟動(步驟542),由此反映線程的最當(dāng)前狀態(tài)。例如通過系統(tǒng)調(diào)用,獲得一個用于當(dāng)前時間點的時標(biāo)(步驟544),并且以適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)存儲該時標(biāo),以作為線程進入休眠狀態(tài)的時間,即線程的休眠開始時間(步驟546)。然后線程進入休眠狀態(tài)一個時段(步驟548)。線程可以休眠一個預(yù)配置的時段,但是最好是線程休眠,直至該線程被來自另一個線程的已觸發(fā)的睡醒信號喚醒,或者以某種其它方式(例如線程調(diào)度器的動作)喚醒。
在某個時間點,線程退出休眠狀態(tài)(步驟550)。為當(dāng)前時間點獲取一個時標(biāo)(步驟552),該時標(biāo)代表線程退出休眠狀態(tài)的時間,即線程休眠停止時間。
然后,根據(jù)線程休眠開始時間和線程休眠停止時間,以某種度量形式計算該特定休眠周期的計算成本(步驟554)。計算任何給定休眠周期的成本的算法可以隨本發(fā)明不同實施例而變化,這不影響本發(fā)明的范圍。下面更詳細討論計算休眠周期的計算成本的算法的實例。通過添加為最近完成的休眠周期獲得或計算的成本,更新自適應(yīng)互斥體的線程獲取成本的值(步驟556),從而產(chǎn)生用于自適應(yīng)互斥體的新的、特定線程的當(dāng)前獲取成本。以此方式,維持用于互斥體的線程獲取成本的運行總值。盡管成本值可以被描述為一個總值,但是應(yīng)當(dāng)注意,成本值代表一個近似總值,因為各種指令運行等也許未被包含在成本值中。由于線程已經(jīng)完成了休眠周期,因此指示線程正休眠于自適應(yīng)互斥體的標(biāo)志值被清零(步驟558),由此反映線程的最當(dāng)前狀態(tài),并且結(jié)束該運行塊。
計算線程當(dāng)前獲取成本的算法可以改變,可以使用反映計算資源的線程消耗的任何適當(dāng)特征。例如,如果線程自旋于已鎖定的自適應(yīng)互斥體,則可以根據(jù)線程運行于忙等待循環(huán)中的迭代次數(shù)來計算計算成本。如果線程休眠于已鎖定的自適應(yīng)互斥體,則可以根據(jù)線程處于休眠狀態(tài)的時間量計算計算成本。線程被認(rèn)為是,在休眠狀態(tài)期間根據(jù)線程占據(jù)各線程管理結(jié)構(gòu)內(nèi)的諸多項目的實事造成的計算成本,即消耗計算資源,其中所述線程管理結(jié)構(gòu)可以有有限數(shù)量的項目。此外,即使線程處于休眠狀態(tài),也必須管理線程,所以在線程的休眠期間對于該線程執(zhí)行各種線程管理功能,例如,確定線程是否應(yīng)當(dāng)退出休眠狀態(tài),然后是否調(diào)度以運行。
互斥體的平均獲取成本和線程的當(dāng)前獲取成本是反映計算資源的物理消耗的兩個度量值??梢源鷶?shù)或邏輯地計算、比較和合并互斥體平均獲取成本的兩個不同值。為此,應(yīng)當(dāng)以某種方式標(biāo)準(zhǔn)化每個值,使每個成本值代表關(guān)于相同量綱(例如,秒、毫秒、迭代(iteration)、千迭代(kilo-iteration)等)的量,由此允許比較及合并成本值。
例如,本發(fā)明的實施例可以依據(jù)迭代次數(shù)計算計算成本,其中迭代次數(shù)是當(dāng)線程自旋于已鎖定自適應(yīng)互斥體時容易獲得的量。如果線程休眠于一個已鎖定的自適應(yīng)互斥體,則線程把線程處于休眠狀態(tài)的時間量轉(zhuǎn)換成多個迭代,例如,使用轉(zhuǎn)換因子將其轉(zhuǎn)換成多個迭代,該轉(zhuǎn)換因子涉及一個線程可以在一秒鐘不中斷地運行的迭代次數(shù)。例如,可以用每秒一百千迭代(即每毫秒1百次迭代)轉(zhuǎn)換因子把休眠6秒鐘的成本值轉(zhuǎn)換成自旋的600000次迭代。
通過基準(zhǔn)檢測(benchmark)一個迭代循環(huán),可以容易和試驗地確定該轉(zhuǎn)換因子值。操作系統(tǒng)中的一個特定功能或者在軟件運行的裝置的啟動或者初始化階段期間,配置系統(tǒng)的一個特殊模塊可以自動地執(zhí)行該測量。然后可以例如通過系統(tǒng)數(shù)據(jù)區(qū)或者配置文件,提供轉(zhuǎn)換因子值以及用來支持系統(tǒng)上應(yīng)用程序運行的其它系統(tǒng)參數(shù),從而避免時間消耗、手控處理,該手控處理通常由系統(tǒng)安裝商或者系統(tǒng)管理員執(zhí)行。
參見圖6,一個流程示說明了線程釋放自適應(yīng)互斥體的處理。圖6通過顯示一個正在釋放自適應(yīng)互斥體的線程來補充圖5A-圖5C,其中使用圖5A-圖5C所示的處理在前獲得了所述的自適應(yīng)互斥體。處理開始于進入解鎖一個自適應(yīng)互斥體的一個例程時(步驟602)。在檢查確保正在請求解鎖自適應(yīng)互斥體的線程是在前已經(jīng)鎖定自適應(yīng)互斥體的線程之后,再解鎖自適應(yīng)互斥體(步驟604)。需要注意的是,步驟604應(yīng)當(dāng)被實施為原子操作。程序隨后清除或者刪除在前存儲在一個數(shù)據(jù)結(jié)構(gòu)中的、指示在前鎖定互斥體的線程的標(biāo)識的線程標(biāo)識符(步驟606)。
然后確定正在等待自適應(yīng)互斥體的任何線程是否正休眠于該自適應(yīng)互斥體(步驟608)。如果是,則向正休眠于自適應(yīng)互斥體的線程發(fā)送一個睡醒信號(步驟610),例如,通過將調(diào)度線程運行的系統(tǒng)調(diào)用發(fā)送該信號。如果多個線程都休眠于該自適應(yīng)互斥體,那么可以使用適當(dāng)算法來選擇將試圖鎖定自適應(yīng)互斥體的下一個線程。解鎖例程隨后返回到調(diào)用程序(步驟612),從而結(jié)束解鎖自適應(yīng)互斥體的處理。
從以上提供的詳細說明中,將會明白本發(fā)明的優(yōu)點。本發(fā)明自動地調(diào)整關(guān)于特定的鎖定互斥體的線程行為,以便取決于關(guān)于互斥體在前動作的方式,使線程進入自旋狀態(tài)或者進入休眠狀態(tài)。
在本發(fā)明中,每個自適應(yīng)互斥體具有通過許多線程為獲取互斥體的許多嘗試而計算的相關(guān)聯(lián)的平均獲取成本。換言之,對于每個自適應(yīng)互斥體,和對于線程已經(jīng)嘗試獲取互斥體的每一次,計算用于該特定嘗試的計算成本。如上所述,該值被標(biāo)識為線程當(dāng)前獲取成本,它是在當(dāng)前時間點之前,特定線程的可能的多次嘗試的計算成本的運行總值。當(dāng)線程最終獲取互斥體時,在計算上利用平均獲取成本并以某種方式包含線程的當(dāng)前獲取成本,所述平均獲取成本與該線程剛剛獲取的特定互斥體相關(guān)聯(lián)。
在現(xiàn)有技術(shù)中,當(dāng)鎖定一個互斥體時,一個線程通常在一個鎖定互斥體上執(zhí)行自旋超時操作,由此使線程在按系統(tǒng)級或者應(yīng)用級配置的時段之后進入休眠。而對于本發(fā)明,線程是否應(yīng)當(dāng)自旋于或者休眠于已鎖定的自適應(yīng)互斥體的確定取決于特定互斥體使用的歷程。
在本發(fā)明中,特定自適應(yīng)互斥體的平均獲取成本是確定線程應(yīng)當(dāng)自旋于已鎖定自適應(yīng)互斥體還是休眠于已鎖定自適應(yīng)互斥體的焦點。在圖5A的步驟522,將該時間點的特定自適應(yīng)互斥體的平均獲取成本與門限值進行比較。在一個可替換實施例中,不是執(zhí)行簡單的比較,而是執(zhí)行更復(fù)雜的計算或者條件檢查。如果此時間點的特定自適應(yīng)互斥體的平均獲取成本小于門限值,則線程自旋于已鎖定的自適應(yīng)互斥體。如果此時間點的特定自適應(yīng)互斥體的平均獲取成本大于或等于門限值,則線程休眠于已鎖定的自適應(yīng)互斥體。照此方式,正在嘗試獲取該特定互斥體的線程的行為適應(yīng)于該特定互斥體使用的歷程。
如上所述,用來計算例如圖5A中步驟518的平均獲取成本的新值的算法隨本發(fā)明不同實施例而改變,這不影響本發(fā)明的范圍。例如,可以使用以下算法計算新的平均獲取成本。如果當(dāng)前平均獲取成本為零,則將新的平均獲取成本設(shè)置為等于線程的當(dāng)前獲取成本,如果當(dāng)前平均獲取成本不為零,那么從線程的當(dāng)前獲取成本減去平均獲取成本。該結(jié)果被加權(quán)因子整除(div功能)。加權(quán)調(diào)整過的結(jié)果被加到或減去前一平均獲取成本,其中加或者減的選擇分別取決于第一減法運算是正還是負(fù),即保留第一減法運算結(jié)果的符號。
加權(quán)因子可以被選擇為方便的2的冪,例如64,由此允許除法實施為簡單的比特位移。該算法是有利的,因為它不可能在固定的精密系統(tǒng)中溢出,并且該算法僅需要三個負(fù)荷、三個單周期指令(即兩個加和一個比特位移)以及一次存儲。此外,該算法僅使用永久存儲器的單個字,并且它是真正可伸縮的,因為它是成本不依賴已經(jīng)鎖定的次數(shù)的固定時間操作。
盡管該算法減少了需要維持平均的工作量并且增加了計算真平均的效率,但是該算法只是計算近似平均,而不是計算真平均。然而在許多方式之中,由于平均超時展現(xiàn)的慣性行為,該近似平均更適合于預(yù)測未來平均成本。
在自旋或休眠判決中使用的門限值的選擇,即與圖5A的步驟522判決中平均獲取成本的比較,可以隨用來計算平均獲取成本的算法的選擇而變化。在上述計算平均獲取成本的算法中,當(dāng)獲取自適應(yīng)互斥體時,如果獲取線程的當(dāng)前獲取成本小于當(dāng)前平均獲取成本,則減少平均獲取成本。為了確保最近計算的平均獲取成本精確地反映關(guān)于自適應(yīng)互斥體的行為的歷程行為,門限值被優(yōu)先選擇為稍大于當(dāng)線程進入休眠狀態(tài)然后被立即喚醒時發(fā)生的計算成本。
例如,如果線程休眠然后立即喚醒,則線程的當(dāng)前獲取成本將比較小,以及把線程的當(dāng)前獲取成本并入到新計算的平均獲取成本中將導(dǎo)致更小的平均獲取成本。如果該情況重復(fù)發(fā)生,則平均獲取成本將接近線程休眠然后立即喚醒時引發(fā)的計算成本。如果門限值被選擇為稍大于當(dāng)線程休眠然后立即喚醒時引發(fā)的計算成本,則隨后執(zhí)行自旋或休眠判決的任何線程將最終選擇自旋,而不是休眠。照此方式,本發(fā)明調(diào)整了關(guān)于特定自適應(yīng)互斥體的線程的行為。在適當(dāng)和有效的情況下,線程在鎖定的自適應(yīng)互斥體上運行一個自旋循環(huán),并且在適當(dāng)和有效的情況下,線程休眠于已鎖定的自適應(yīng)互斥體。
如果門限值選擇為稍大于當(dāng)線程進入休眠狀態(tài)然后立即被喚醒時引發(fā)的計算成本,則可以通過測量線程休眠和醒來所需的時間,簡單和經(jīng)驗地確定該門限值。該測量可以由操作系統(tǒng)中一個特定功能自動地執(zhí)行,或者由在軟件運行的裝置啟動或初始化階段期間配置系統(tǒng)的特定模塊自動地執(zhí)行。然后,例如通過系統(tǒng)數(shù)據(jù)區(qū)或者配置文件,提供已測量值和其它系統(tǒng)參數(shù),所述其它系統(tǒng)參數(shù)用來支持系統(tǒng)上應(yīng)用的運行。因此,本發(fā)明避免了時間消耗、手動調(diào)諧處理,而該手動調(diào)協(xié)處理通常由調(diào)節(jié)通常出錯的系統(tǒng)安裝商或者系統(tǒng)管理員執(zhí)行。
重要的是,盡管已經(jīng)在全功能數(shù)據(jù)處理系統(tǒng)的場境中描述了本發(fā)明,但是本領(lǐng)域熟練技術(shù)人員將會明白,本發(fā)明的處理能夠以計算機可讀媒介中指令的形式或者各種其它形式來分布,而與實際用來完成分布的信號承載媒介的類型無關(guān)。計算機可讀媒介的例子包括諸如EPROM、ROM、磁帶、紙帶、軟盤、硬盤驅(qū)動器、RAM和CD-ROM的媒介,以及傳輸型媒介,比如數(shù)字和模擬通信鏈路。
已經(jīng)提供的本發(fā)明的描述用于解釋和說明目的,而不打算窮舉或限制到所公開的實施例。本領(lǐng)域熟練技術(shù)人員明白許多修改和變化。本發(fā)明的各實施例被選擇來解釋本發(fā)明的原理以及它的實際應(yīng)用,并且能夠使本領(lǐng)域熟練技術(shù)人員理解本發(fā)明,以便實現(xiàn)各種實施例與可能適合于其它預(yù)期使用的各種修改。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)中管理互斥體的方法,該方法包括維持用于互斥體的平均獲取成本值;第一線程嘗試獲取互斥體;和響應(yīng)第二線程已經(jīng)獲取互斥體的確定,根據(jù)互斥體的平均獲取成本值確定進入第一線程的自旋狀態(tài)或者休眠狀態(tài)。
2.根據(jù)權(quán)利要求1所述的方法,其中平均獲取成本值指示線程獲取互斥體時的計算資源的平均消耗。
3.根據(jù)權(quán)利要求1所述的方法,還包括維持一個特定線程的當(dāng)前獲取成本值,該當(dāng)前獲取成本值代表第一線程在最初嘗試獲取互斥體之后和獲取互斥體之前的計算資源的消耗;和響應(yīng)第一線程獲取互斥體,為互斥體重新計算平均獲取成本值,以計入特定線程的當(dāng)前獲取成本值。
4.根據(jù)權(quán)利要求1所述的方法,還包括如果平均獲取成本值滿足第一條件,則進入自旋狀態(tài);和如果平均獲取成本值滿足第二條件,則進入休眠狀態(tài)。
5.根據(jù)權(quán)利要求4所述的方法,其中第一條件為平均獲取成本值小于門限值,第二條件為平均獲取成本值大于或等于門限值。
6.根據(jù)權(quán)利要求5所述的方法,其中門限值與線程進入然后退出休眠狀態(tài)所需的時間量有關(guān)。
7.根據(jù)權(quán)利要求1所述的方法,還包括進入第一線程的自旋狀態(tài)或者休眠狀態(tài);和在退出第一線程的自旋狀態(tài)或者休眠狀態(tài)之后,計算或檢索指示第一線程在自旋狀態(tài)或休眠狀態(tài)期間的計算資源消耗的成本值。
8.根據(jù)權(quán)利要求7所述的方法,還包括通過運行一個忙等待循環(huán)進入第一線程的自旋狀態(tài);和根據(jù)在忙等待循環(huán)中執(zhí)行的迭代次數(shù),計算指示第一線程在自旋狀態(tài)期間的計算資源消耗的成本值。
9.根據(jù)權(quán)利要求7所述的方法,還包括通過執(zhí)行一個系統(tǒng)調(diào)用,進入第一線程的休眠狀態(tài),以暫停第一線程的運行;和根據(jù)第一線程處于休眠狀態(tài)的時間量,計算指示第一線程在休眠期間的計算資源消耗的成本值。
10.根據(jù)權(quán)利要求7所述的方法,還包括把指示由第一線程在自旋狀態(tài)或休眠狀態(tài)期間的計算資源消耗的成本值添加到當(dāng)前獲取成本值上,該當(dāng)前獲取成本值代表第一線程在最初嘗試獲取互斥體之后及獲取互斥體之前的計算資源消耗。
11.根據(jù)權(quán)利要求7所述的方法,還包括使指示第一線程在自旋狀態(tài)或休眠狀態(tài)期間計算資源的消耗的成本值標(biāo)準(zhǔn)化,然后將其添加到當(dāng)前獲取成本值上。
12.一種在數(shù)據(jù)處理系統(tǒng)中管理互斥體的設(shè)備,包括維持用于互斥體的平均獲取成本值的裝置;用于由第一線程嘗試獲取互斥體的裝置;和確定裝置,響應(yīng)第二線程已經(jīng)獲取互斥體的確定,根據(jù)互斥體的平均獲取成本值確定進入第一線程的自旋狀態(tài)或者休眠狀態(tài)。
13.根據(jù)權(quán)利要求12所述的設(shè)備,其中平均獲取成本值指示線程獲取互斥體時的計算資源的平均消耗。
14.根據(jù)權(quán)利要求12所述的設(shè)備,還包括維持特定線程的當(dāng)前獲取成本值的裝置,該當(dāng)前獲取成本值代表第一線程在最初嘗試獲取互斥體之后和獲取互斥體之前的計算資源的消耗;和重新計算裝置,響應(yīng)第一線程獲取互斥體,為互斥體重新計算平均獲取成本值,以包括特定線程的當(dāng)前獲取成本值。
15.根據(jù)權(quán)利要求12所述的設(shè)備,還包括如果平均獲取成本值滿足第一條件,則進入自旋狀態(tài)的裝置;和如果平均獲取成本值滿足第二條件,則進入休眠狀態(tài)的裝置。
16.根據(jù)權(quán)利要求15所述的設(shè)備,其中第一條件為平均獲取成本值小于門限值,第二條件為平均獲取成本值大于或等于門限值。
17.根據(jù)權(quán)利要求16所述的設(shè)備,其中門限值與線程進入然后退出休眠狀態(tài)所需的時間量有關(guān)。
18.根據(jù)權(quán)利要求12所述的設(shè)備,還包括進入第一線程的自旋狀態(tài)或者休眠狀態(tài)的裝置;和計算或檢索裝置,在退出第一線程的自旋狀態(tài)或者休眠狀態(tài)之后,計算或檢索指示第一線程在自旋狀態(tài)或休眠狀態(tài)期間的計算資源消耗的成本值。
19.根據(jù)權(quán)利要求18所述的設(shè)備,還包括通過運行忙等待循環(huán)進入第一線程的自旋狀態(tài)的裝置;和根據(jù)在忙等待循環(huán)中執(zhí)行的迭代次數(shù),計算指示第一線程在自旋狀態(tài)期間的計算資源消耗的成本值的裝置。
20.根據(jù)權(quán)利要求18所述的設(shè)備,還包括通過執(zhí)行一個系統(tǒng)調(diào)用,進入第一線程的休眠狀態(tài)以暫停第一線程的運行的裝置;和根據(jù)第一線程處于休眠狀態(tài)的時間量,計算指示第一線程在休眠期間的計算資源消耗的成本值的裝置。
21.根據(jù)權(quán)利要求18所述的設(shè)備,還包括添加裝置,把指示由第一線程在自旋狀態(tài)或休眠狀態(tài)期間的計算資源消耗的成本值添加到當(dāng)前獲取成本值上,該當(dāng)前獲取成本值代表第一線程在最初嘗試獲取互斥體之后及獲取互斥體之前的計算資源消耗。
22.根據(jù)權(quán)利要求18所述的設(shè)備,還包括標(biāo)準(zhǔn)化裝置,使指示第一線程在自旋狀態(tài)或休眠狀態(tài)期間計算資源的消耗的成本值標(biāo)準(zhǔn)化,然后將其添加到當(dāng)前獲取成本值上。
23.一種計算機可讀媒介的計算機程序產(chǎn)品,供管理互斥體的數(shù)據(jù)處理系統(tǒng)使用,所述計算機程序產(chǎn)品包括維持用于互斥體的平均獲取成本值的裝置;第一線程嘗試獲取互斥體的裝置;和確定裝置,響應(yīng)第二線程已經(jīng)獲取互斥體的確定,根據(jù)互斥體的平均獲取成本值確定進入第一線程的自旋狀態(tài)或者休眠狀態(tài)。
24.根據(jù)權(quán)利要求23所述的計算機程序產(chǎn)品,其中平均獲取成本值指示線程獲取互斥體時的計算資源的平均消耗。
25.根據(jù)權(quán)利要求23所述的計算機程序產(chǎn)品,還包括維持特定線程的當(dāng)前獲取成本值的裝置,該當(dāng)前獲取成本值代表第一線程在最初嘗試獲取互斥體之后和獲取互斥體之前的計算資源的消耗;和重新計算裝置,響應(yīng)第一線程獲取互斥體,為互斥體重新計算平均獲取成本值,以包括特定線程的當(dāng)前獲取成本值。
26.根據(jù)權(quán)利要求23所述的計算機程序產(chǎn)品,還包括如果平均獲取成本值滿足第一條件,則進入自旋狀態(tài)的裝置;和如果平均獲取成本值滿足第二條件,則進入休眠狀態(tài)的裝置。
27.根據(jù)權(quán)利要求26所述的計算機程序產(chǎn)品,其中第一條件為平均獲取成本值小于門限值,第二條件為平均獲取成本值大于或等于門限值。
28.根據(jù)權(quán)利要求27所述的計算機程序產(chǎn)品,其中門限值與線程進入然后退出休眠狀態(tài)所需的時間量有關(guān)。
29.根據(jù)權(quán)利要求23所述的計算機程序產(chǎn)品,還包括進入第一線程的自旋狀態(tài)或者休眠狀態(tài)的裝置;和計算或檢索裝置,在退出第一線程的自旋狀態(tài)或者休眠狀態(tài)之后,計算或檢索指示第一線程在自旋狀態(tài)或休眠狀態(tài)期間的計算資源消耗的成本值。
30.根據(jù)權(quán)利要求29所述的計算機程序產(chǎn)品,還包括通過運行忙等待循環(huán)進入第一線程的自旋狀態(tài)的裝置;和根據(jù)在忙等待循環(huán)中執(zhí)行的迭代次數(shù),計算指示第一線程在自旋狀態(tài)期間的計算資源消耗的成本值的裝置。
31.根據(jù)權(quán)利要求29所述的計算機程序產(chǎn)品,還包括通過執(zhí)行一個系統(tǒng)調(diào)用,進入第一線程的休眠狀態(tài)以暫停第一線程的運行的裝置;和根據(jù)第一線程處于休眠狀態(tài)的時間量,計算指示第一線程在休眠期間的計算資源消耗的成本值的裝置。
32.根據(jù)權(quán)利要求29所述的計算機程序產(chǎn)品,還包括添加裝置,把指示由第一線程在自旋狀態(tài)或休眠狀態(tài)期間的計算資源消耗的成本值添加到當(dāng)前獲取成本值上,該當(dāng)前獲取成本值代表第一線程在最初嘗試獲取互斥體之后及獲取互斥體之前的計算資源消耗。
33.根據(jù)權(quán)利要求29所述的計算機程序產(chǎn)品,還包括標(biāo)準(zhǔn)化裝置,使指示第一線程在自旋狀態(tài)或休眠狀態(tài)期間計算資源的消耗的成本值標(biāo)準(zhǔn)化,然后將其添加到當(dāng)前獲取成本值上。
全文摘要
本發(fā)明提供了一種在數(shù)據(jù)處理系統(tǒng)中管理互斥體的方法。對于每個互斥體,維持一個平均獲取成本,該平均獲取成本指示嘗試獲取互斥體的線程造成的計算資源的平均消耗。如果線程嘗試獲取已鎖定的互斥體,則線程根據(jù)限制條件和此時用于互斥體的平均獲取成本,進入自旋狀態(tài)或者休眠狀態(tài)。維持特定線程的當(dāng)前獲取成本值,該當(dāng)前獲取成本值代表線程在最初嘗試獲取互斥體之后和獲取互斥體之前的計算資源消耗。當(dāng)線程獲取互斥體時,特定線程當(dāng)前獲取成本被并入平均獲取成本值中。
文檔編號G06F9/46GK1601477SQ20041008244
公開日2005年3月30日 申請日期2004年9月22日 優(yōu)先權(quán)日2003年9月25日
發(fā)明者喬爾·H·肖普 申請人:國際商業(yè)機器公司