亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

管理對(duì)在多個(gè)處理器間共享的資源的鎖的方法和系統(tǒng)的制作方法

文檔序號(hào):6515206閱讀:252來(lái)源:國(guó)知局
管理對(duì)在多個(gè)處理器間共享的資源的鎖的方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了管理對(duì)在多個(gè)處理器間共享的資源的鎖的計(jì)算機(jī)程序產(chǎn)品、系統(tǒng)和方法。存儲(chǔ)器中的槽實(shí)施對(duì)共享資源的鎖。槽對(duì)應(yīng)于連續(xù)編號(hào)的計(jì)數(shù)器值并且表示忙或空閑之一。請(qǐng)求處理器獲取計(jì)數(shù)器值。進(jìn)行對(duì)應(yīng)于所獲取的計(jì)數(shù)器值的槽是否表示空閑的判斷。響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示不空閑的判斷,請(qǐng)求處理器的處理器標(biāo)識(shí)符被插入到與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽中。響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示空閑的判斷,請(qǐng)求處理器訪問(wèn)共享資源。
【專利說(shuō)明】管理對(duì)在多個(gè)處理器間共享的資源的鎖的方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及管理對(duì)在多個(gè)處理器間共享的資源的鎖的計(jì)算機(jī)程序產(chǎn)品、系統(tǒng)和方法。
【背景技術(shù)】
[0002]鎖被用在在多重處理器環(huán)境下執(zhí)行的共享存儲(chǔ)器的并行程序中,以為每次僅可由一個(gè)處理器執(zhí)行的非并行部分代碼提供相互排他性。一種現(xiàn)有技術(shù)的鎖是自旋鎖,諸如測(cè)試及置位(Test and Set)鎖。取得鎖的第一用戶可以訪問(wèn)非并行代碼,并且其他處理必須不間斷地檢查(即,自旋)鎖來(lái)確定鎖何時(shí)可用。即使在其他處理器已經(jīng)等待了更長(zhǎng)時(shí)間時(shí),在鎖變得可用之后進(jìn)行檢查的第一個(gè)處理器仍然可以拿取鎖。
[0003]另一種類型的鎖是基于陣列的隊(duì)列鎖算法。每個(gè)鎖對(duì)于每個(gè)處理器都需要計(jì)數(shù)器以及自旋位置或者緩存線。計(jì)數(shù)器值向槽提供地址。在鎖初始化之后,自旋位置(又叫做槽)被設(shè)置為忙,除了第一位置(槽O)被設(shè)置為空閑,并且具有與該槽對(duì)應(yīng)的值的計(jì)數(shù)器被設(shè)置為O。尋找鎖的第一處理器在計(jì)數(shù)器上進(jìn)行原子獲取及遞增(atomic fecth_and_increment)操作,以得到計(jì)數(shù)器值并之后增加計(jì)數(shù)器值。所獲取的計(jì)數(shù)器值提供處理器將要訪問(wèn)或在其上自旋的槽的地址或編號(hào)。
[0004]發(fā)出請(qǐng)求的處理器檢查具有零值的計(jì)數(shù)器并且訪問(wèn)與零計(jì)數(shù)器值相對(duì)應(yīng)的第一槽。如果該槽是空閑的,那么處理器已經(jīng)取得鎖并且隨后為了下一次使用該槽而將槽設(shè)置為忙。如果槽不是空閑的,那么請(qǐng)求處理器在槽上自旋,直到其空閑。當(dāng)處理器釋放鎖時(shí),下一個(gè)槽被設(shè)置為空閑。
[0005]這種基于陣列的隊(duì)列鎖對(duì)于每個(gè)槽使用一個(gè)緩存線,使得每個(gè)處理器可以在槽上自旋直到該槽被設(shè)置為空閑。隨著鎖的數(shù)目增加(因?yàn)閷?duì)于每個(gè)鎖來(lái)說(shuō),對(duì)于每個(gè)槽都需要緩存線)或者隨著處理器的數(shù)目增加,該技術(shù)可能需要大量的存儲(chǔ)器資源。
[0006]現(xiàn)有技術(shù)中需要管理對(duì)共享資源的鎖的改善技術(shù)。

【發(fā)明內(nèi)容】

[0007]提供了一種用于管理對(duì)在多個(gè)處理器間共享的資源的鎖的計(jì)算機(jī)程序產(chǎn)品、系統(tǒng)和方法。存儲(chǔ)器中的槽實(shí)施對(duì)共享資源的鎖。所述槽對(duì)應(yīng)于連續(xù)編號(hào)的計(jì)數(shù)器值并且表示忙或空閑之一。發(fā)請(qǐng)求的處理器獲取包括所獲取的計(jì)數(shù)器值的計(jì)數(shù)器值。進(jìn)行對(duì)應(yīng)于所獲取的計(jì)數(shù)器值的槽是否表示空閑的判斷。響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示不空閑的判斷,發(fā)請(qǐng)求的處理器的處理器標(biāo)識(shí)符被插入到與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽中。響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示空閑的判斷,發(fā)請(qǐng)求的處理器訪問(wèn)共享資源。
【專利附圖】

【附圖說(shuō)明】
[0008]圖1示出了計(jì)算環(huán)境的實(shí)施例。
[0009]圖2示出了鎖初始化代碼和非并行代碼部分的實(shí)施例。[0010]圖3示出了對(duì)關(guān)于鎖的數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化的操作的實(shí)施例。
[0011]圖4示出了請(qǐng)求鎖的操作的實(shí)施例。
[0012]圖5示出了釋放鎖的操作的實(shí)施例。
【具體實(shí)施方式】
[0013]所描述的實(shí)施例提供了用于管理對(duì)共享資源(諸如在多重處理環(huán)境中可以由多個(gè)處理器執(zhí)行的非并行代碼)的鎖的技術(shù)。鎖提供多個(gè)槽,在任何時(shí)候,這些槽全部忙或者僅有一個(gè)槽表示空閑。如果處理器請(qǐng)求鎖并且發(fā)現(xiàn)在之前被訪問(wèn)的槽之后的槽為忙,那么處理器插入其標(biāo)識(shí)符,使得在鎖空閑時(shí)該處理器可以得到通知。在等待鎖期間,發(fā)請(qǐng)求的處理器在該處理器的自旋位置上自旋,直到該鎖被釋放。通過(guò)提供與該處理器的槽相分離的自旋位置,用于鎖的多個(gè)槽可以實(shí)施在單個(gè)緩存線中,以節(jié)約存儲(chǔ)器資源,這是因?yàn)樘幚砥髟诘却i期間在它們的自旋位置上而非在槽上自旋。
[0014]圖1示出了具有經(jīng)由總線8與共享存儲(chǔ)器6連接的多個(gè)處理器4f4n的系統(tǒng)2的實(shí)施例。處理器4^.4η可以執(zhí)行共享存儲(chǔ)器資源10,其可以包括數(shù)據(jù)結(jié)構(gòu)、參數(shù)和代碼。在特定實(shí)施例中,共享存儲(chǔ)器資源10可以包括處理器4^4n可以并行執(zhí)行的并行代碼以及每次僅可以由處理器4^4n之一執(zhí)行的非并行代碼。鎖管理器12包括由處理器4^4n執(zhí)行來(lái)管理鎖(諸如自旋鎖)的代碼,該鎖必須被保持以訪問(wèn)共享存儲(chǔ)器資源10。
[0015] 存儲(chǔ)器6包括用于一個(gè)或多個(gè)鎖14的數(shù)據(jù)結(jié)構(gòu),鎖14包括多個(gè)槽0...η以及計(jì)數(shù)器16。計(jì)數(shù)器16可以具有與槽0...η相對(duì)應(yīng)的值。在一個(gè)實(shí)施例中,如果存在O…η個(gè)槽,那么將會(huì)存在計(jì)數(shù)器值0...η。每個(gè)槽表示:鎖為忙,等待鎖的處理器4^..4η的處理器標(biāo)識(shí)符;或者鎖為空閑。在一個(gè)實(shí)施例中,存在相同數(shù)目的槽和處理器,例如,η+1個(gè),因此,每個(gè)處理器4^..4η可以具有獨(dú)立的槽O…η,以得到用于共享資源的鎖14。
[0016]存儲(chǔ)器6還包括用于處理器4f4n的自旋位置18,其中對(duì)于η+1個(gè)處理器4f-4n中的每一個(gè)存在自旋位置O…η之一。如果處理器4^..4η試圖在鎖不空閑時(shí)得到鎖14,那么處理器4^4n自旋或者不間斷地檢查用于處理器4^..4η的自旋位置0...η是否表示空閑,空閑意味著處理器七…宄可以得到鎖及訪問(wèn)共享資源。
[0017]在一個(gè)實(shí)施例中,對(duì)于每個(gè)自旋位置O…η存在一個(gè)緩存線。此外,在一個(gè)實(shí)施例中,槽0...η中的多個(gè)可以被實(shí)施在一個(gè)緩存線中。例如,如果緩存線是64字節(jié)并且每個(gè)槽是4字節(jié),那么在每個(gè)緩存線中可以實(shí)施15個(gè)槽0...η。通過(guò)在一個(gè)緩存線中實(shí)施多個(gè)槽O…η,所描述的實(shí)施例節(jié)約了存儲(chǔ)器6的資源,這在存在多個(gè)鎖、每個(gè)鎖具有槽0...η時(shí)可以
非常有意義。
[0018]在一個(gè)實(shí)施例中,處理器七…宄可以包括獨(dú)立的中央處理單元(CPU)或微處理器單元。在替換實(shí)施例中,處理器4y4n中的一些或全部可以包括在單個(gè)CPU上的核心。在一個(gè)實(shí)施例中,全部的處理器七…宄都在相同的系統(tǒng)2中。在替換實(shí)施例中,處理器七…宄可以在遠(yuǎn)程系統(tǒng)中并且可以經(jīng)由網(wǎng)絡(luò)通信。
[0019]共享存儲(chǔ)器6可以包括一個(gè)或多個(gè)易失性存儲(chǔ)裝置,諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、隨機(jī)存取存儲(chǔ)器(RAM),或者非易失性存儲(chǔ)器,例如,有備用電池的隨機(jī)存取存儲(chǔ)器(RAM)、靜態(tài)RAM (SRAM)、固態(tài)存儲(chǔ)裝置(SSD)等。
[0020]總線8可以包括本領(lǐng)域中已知的總線或數(shù)據(jù)傳輸系統(tǒng),諸如周邊組件互連(PCI)型總線。
[0021]在一個(gè)實(shí)施例中,共享存儲(chǔ)器資源10可以包括數(shù)據(jù)結(jié)構(gòu)、值和/或處理器4^4n希望執(zhí)行的代碼。在替換實(shí)施例中,共享存儲(chǔ)器資源10可以包括系統(tǒng)2中處理器七…宄可能希望訪問(wèn)的裝置或硬件組件。或者,共享存儲(chǔ)器資源可以在一個(gè)或多個(gè)處理器七…宄的外部系統(tǒng)中。此外,共享存儲(chǔ)器裝置可以在系統(tǒng)2內(nèi)、與系統(tǒng)2直接連接或者相對(duì)于系統(tǒng)2遠(yuǎn)程布置。
[0022]圖2示出了共享存儲(chǔ)器資源10包括每次僅可以由處理器七…宄之一執(zhí)行的非并行代碼30的實(shí)施例。處理器4^.4η中的一者或多者執(zhí)行鎖初始化代碼32,以初始化用于鎖14的槽O…η以及初始化用于處理器4^4n的自旋位置O…η。非并行代碼部分34包括:請(qǐng)求自旋鎖36和釋放自旋鎖38的鎖管理操作,以及要被執(zhí)行的非并行代碼30。發(fā)請(qǐng)求的處理器4^4n執(zhí)行請(qǐng)求自旋鎖例程36,直到其獲得用于非并行代碼30的鎖14為止。在執(zhí)行非并行代碼30之后,保持鎖14的執(zhí)行處理器4^.4η執(zhí)行釋放自旋鎖例程38,以釋放在非并行代碼30上的鎖14,以使得另一個(gè)處理器4f4n能夠執(zhí)行代碼30。在一個(gè)實(shí)施例中,可以為每個(gè)非并行代碼部分30都提供獨(dú)立的鎖14,在這個(gè)情況下非并行代碼30的不同部分可以被獨(dú)立地執(zhí)行。但是每次僅有一個(gè)處理器4^4n可以執(zhí)行特定的非并行代碼30部分。
[0023]圖3示出了鎖管理器12進(jìn)行操作的實(shí)施例,該實(shí)施例由處理器4^..4η中的一者或多者執(zhí)行,以進(jìn)行鎖初始化代碼32的操作。在初始化用于管理鎖的數(shù)據(jù)結(jié)構(gòu)和參數(shù)的初始化操作之后(在框100處),處理器4f4n中的至少一個(gè)分別為處理器4f4n中每一個(gè)初始化自旋位置0...η (在框102)。該操作可以在產(chǎn)生任何鎖之前的處理器初始化期間進(jìn)行,或者可以在產(chǎn)生第一鎖時(shí)進(jìn)行。對(duì)于用于共享非并行部分34的每個(gè)鎖,處理器4^.4η中的至少一個(gè)進(jìn)行框106到 框112的操作循環(huán)(框104-框114)。在框106,鎖管理器12產(chǎn)生分別用于每個(gè)處理器七…4η的槽O…η。第一槽O被設(shè)置為空閑(在框108處)并且全部的其他槽1...η被設(shè)置為忙值(在框110處)。計(jì)數(shù)器16被設(shè)置為與槽O相對(duì)應(yīng)的O (在框112處)。
[0024]在圖3的操作之后,自旋位置18和鎖14數(shù)據(jù)結(jié)構(gòu)被生成,并準(zhǔn)備好被用于來(lái)自處理器4^..4η的、訪問(wèn)非并行代碼30的鎖請(qǐng)求。
[0025]圖4示出了由處理器七…4η之一(被稱為發(fā)請(qǐng)求的處理器)進(jìn)行的操作實(shí)施例,該發(fā)請(qǐng)求的處理器執(zhí)行請(qǐng)求自旋鎖例程36,以得到鎖來(lái)能夠訪問(wèn)共享資源,例如,非并行代碼30。在初始化請(qǐng)求鎖的操作之后(在框130處),發(fā)請(qǐng)求的處理器確定用于被請(qǐng)求的鎖14的計(jì)數(shù)器16的所獲取的計(jì)數(shù)器值(在框132處),并且遞增計(jì)數(shù)器(在框134)。框132和134的確定計(jì)數(shù)器值并遞增計(jì)數(shù)器的這些操作可以作為單個(gè)原子獲取及遞增(single atomicfetch_and_increment)操作的一部分。如果(在框136處)對(duì)應(yīng)于所獲取的計(jì)數(shù)器值i的槽i表示空閑,那么請(qǐng)求處理器將槽i設(shè)置為忙值(在框138處)并且返回對(duì)于所考慮的槽i的計(jì)數(shù)器值i (也被稱作為槽位置)(在框140處)。就此,請(qǐng)求處理器取得對(duì)共享資源10的鎖(在框142處)。
[0026]如果(在框136處)槽i表示鎖14是忙值,即,不包括處理器標(biāo)識(shí)符,那么請(qǐng)求處理器設(shè)置自旋位置0...η中請(qǐng)求處理器j的自旋位置j為忙(在框144處)。如果槽i表示忙,那么發(fā)請(qǐng)求的處理器j將請(qǐng)求處理器的處理器標(biāo)識(shí)符插入到與計(jì)數(shù)器值i相對(duì)應(yīng)的槽i(在框146處)。在一個(gè)實(shí)施例中,在框146處的操作可以包括原子比較及交換(atomiccompare_and_swap)命令。請(qǐng)求處理器j不間斷地檢查其自旋位置j (例如,在其自旋位置j上自旋),以判斷自旋位置j表示忙還是空閑(在框148處)。如果(在框148處)自旋位置j表示忙,那么請(qǐng)求處理器j繼續(xù)自旋并檢查自旋位置j。如果(在框148處)自旋位置j表示空閑,那么控制進(jìn)行到框138,以進(jìn)行取得鎖和共享資源的操作,例如,執(zhí)行非并行代碼。
[0027]整數(shù)值i和j可以都包括任何整數(shù)值,并且可以是在值0...η的范圍內(nèi)的相同或不同值。
[0028]在所描述的實(shí)施例的某些實(shí)施例中,發(fā)請(qǐng)求的處理器在其自身的自旋位置上自旋,其自旋位置可以包括緩存線。以此方式,因?yàn)樘幚砥鞑辉诓?...η上自旋,所以多個(gè)槽O…η可以被實(shí)施在單個(gè)緩存線中。
[0029]圖5示出了由處理器4^..4η之一(被稱作為保持處理器)進(jìn)行的操作實(shí)施例,該保持處理器在完成執(zhí)行非并行代碼30時(shí)執(zhí)行釋放自旋鎖38例程,以釋放鎖14,來(lái)允許其他處理器七…宄得到鎖。在初始化釋放鎖的操作(例如,執(zhí)行釋放自旋鎖38例程)之后(在框170處),保持處理器確定(在框172處)在請(qǐng)求鎖時(shí)處理的槽(例如,槽i)的計(jì)數(shù)器16值(所返回的槽位置)。保持處理器確定(在框174處)下一個(gè)計(jì)數(shù)器值,例如按順序在所確定的計(jì)數(shù)器值i之后的i+Ι,計(jì)數(shù)器值i對(duì)應(yīng)于在先由保持處理器訪問(wèn)的、用以獲得鎖的槽i。如果(在框176處)對(duì)應(yīng)于下一個(gè)計(jì)數(shù)器值(i+Ι)的下一個(gè)槽(i+Ι)具有忙值,那么保持處理器將下一個(gè)槽設(shè)置為表示空閑(在框178處)。具有忙值意味著,沒(méi)有在不成功地請(qǐng)求鎖時(shí)將其處理器標(biāo)識(shí)符包括在槽0...η中的正在等待的處理器。在一個(gè)實(shí)施例中,在框176和178處的操作可以由比較及交換(compare-and-swap)操作來(lái)進(jìn)行,在框176和178處的操作為:比較下一個(gè)槽(i+1 ),以判斷其是否具有忙值,并且如果是的話,將空閑值交換到該槽中。如果沒(méi)有發(fā)生交換,即,如果下一個(gè)槽不是忙值,則通過(guò)比較并交換而返回得到的值是下一個(gè)處理器ID (在框182處)。
[0030]如果(在框176處)下一個(gè)槽(i+Ι)不具有忙值,這表示下一個(gè)槽包括處理器標(biāo)識(shí)符,那么保持處理器確定在所獲取的下一個(gè)槽(i+Ι)中表示的處理器標(biāo)識(shí)符(在步驟182處)。保持處理器隨后通知處理器4^4?中具有該處理器標(biāo)識(shí)符的處理器所述鎖是空閑的。在一個(gè)實(shí)施例中,該通知是通過(guò)以下方式進(jìn)行的:將所識(shí)別的處理器的自旋位置O…η設(shè)置為空閑(在框184處),以使得所識(shí)別的處理器檢查其自旋位置O…η來(lái)拿取鎖14并且訪問(wèn)非并行代碼30。當(dāng)判斷為自旋位置表示空閑時(shí),請(qǐng)求處理器可以進(jìn)行圖4中的操作。
[0031]通過(guò)為能夠訪問(wèn)共享資源的每個(gè)處理器維持槽和自旋位置,所描述的實(shí)施例提供了管理對(duì)共享資源(諸如不能被同時(shí)訪問(wèn)的存儲(chǔ)器中的共享代碼和數(shù)據(jù))的鎖的技術(shù)。以此方式,如果鎖14不是空閑的,那么由發(fā)請(qǐng)求的處理器訪問(wèn)的槽被設(shè)置為表示請(qǐng)求處理器的標(biāo)識(shí)符。在所描述的某些實(shí)施例中,因?yàn)榉蛛x的自旋位置被用于處理器來(lái)確定何時(shí)允許得到鎖/訪問(wèn)共享資源,所以用于鎖的多個(gè)槽可以被實(shí)施在一個(gè)緩存線中。
[0032]所描述的操作可以被實(shí)施為使用標(biāo)準(zhǔn)編程和/或工程技術(shù)來(lái)生產(chǎn)軟件、固件、硬件或其任何組合的方法、設(shè)備或計(jì)算機(jī)程序產(chǎn)品。因此,實(shí)施例的方面可以具有完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、常駐軟件和微代碼等)或者結(jié)合軟件和硬件方面的實(shí)施例的形式,它們都可以在這里被統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,實(shí)施例的方面可以具有承載在在其上承載`了計(jì)算機(jī)可讀程序代碼的一種或多種計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式。
[0033]可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)可以包括:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0034]計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括——但不限于——電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0035]計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一但不限于一無(wú)線、有線、光纜、RF等等,或者上述的任意合適的組合。
[0036]可以以一種或多種程序設(shè)計(jì)語(yǔ)言的任意組合來(lái)編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語(yǔ)言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過(guò)程式程序設(shè)計(jì)語(yǔ)言一諸如“C”語(yǔ)言或類似的程序設(shè)計(jì)語(yǔ)言。程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來(lái)通過(guò)因特網(wǎng)連接)。
[0037]下面將參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些計(jì)算機(jī)程序指令在通過(guò)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的裝置。
[0038]也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中,這些指令使得計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其他設(shè)備以特定方式工作,從而,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的指令的制造品。
[0039]計(jì)算機(jī)程序指令也可以被裝載到計(jì)算機(jī)、其他可編程數(shù)據(jù)處理設(shè)備或其他裝置,以使得一系列操作步驟在計(jì)算機(jī)、其他可編程數(shù)據(jù)處理設(shè)備或其他裝置上執(zhí)行,以產(chǎn)生由計(jì)算機(jī)實(shí)施的處理,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供實(shí)施在流程圖和/或框圖的一個(gè)或多個(gè)框中規(guī)定的功能/動(dòng)作的處理。
[0040]除非特別另外規(guī)定,術(shù)語(yǔ)“一實(shí)施例”、“實(shí)施例”、“多個(gè)實(shí)施例”、“該實(shí)施例”、“該多個(gè)實(shí)施例”、“一個(gè)或多個(gè)實(shí)施例”、“一些實(shí)施例”以及“一個(gè)實(shí)施例”表示“一個(gè)或多個(gè)本發(fā)明的一個(gè)或多個(gè)(但非全部)實(shí)施例”。
[0041]除非特別另外規(guī)定,術(shù)語(yǔ)“包括”、“包含”、“具有”及其各種變化形式表示“包括但不局限于”。
[0042]除非特別另外規(guī)定,窮舉列出的項(xiàng)目不暗示任何或全部項(xiàng)目是相互排斥的。
[0043]除非特別另外規(guī)定,未限定數(shù)目的冠詞表示“一個(gè)或多個(gè)”。
[0044]除非特別另外規(guī)定,彼此通信的裝置不需要彼此持續(xù)通信。此外,彼此通信的裝置可以通過(guò)一個(gè)或多個(gè)媒介直接或間接地通信。
[0045]關(guān)于具有彼此通信的多個(gè)組件的實(shí)施例的描述并不暗示著全部這種組件都是必須的。相反,描述了各種可選組件,以表示出本發(fā)明的可能實(shí)施例的廣泛變化。
[0046]此外,雖然處理步驟、方法步驟或算法等可能被次序順序描述,但是這種處理、方法和算法可以被構(gòu)造為以可選方式工作。換言之,可能描述的步驟的任何次序或順序不一定表示步驟由該順序執(zhí)行的要求。這里所描述的步驟可能以任何其他次序?qū)嵺`方式來(lái)進(jìn)行。此外,一些步驟可以同時(shí)進(jìn)行。
[0047]當(dāng)在這里描述了單個(gè)裝置或物體時(shí),很容易明白一個(gè)以上的裝置/物體(無(wú)論它們是否協(xié)同工作)可以被用來(lái)代替單個(gè)裝置/物體。類似地,當(dāng)在這里描述一個(gè)以上的裝置或物體時(shí),很容易明白單個(gè)裝置/物體可以被用來(lái)代替這一個(gè)以上的物體,或者不同數(shù)目的裝置/物體可以被用來(lái)代替所示出數(shù)目的裝置或程序。裝置的功能和/或特征可以可選地由一個(gè)以上的、沒(méi)有被明確地描述為具有這種功能/特征的其他裝置承載。因此,本發(fā)明的其他實(shí)施例不需要包括該裝置本身。
[0048]附圖的圖示操作示出了以特定順序發(fā)生的特定事件。在可選實(shí)施例中,特定操作可以以不同順序執(zhí)行,或者被調(diào)整或移除。此外,步驟可以被增加到上述邏輯中并且仍然符合所描述的實(shí)施例。此外,這里描述的操作可以順序地進(jìn)行或者特性操作可以并行地處理。再此外,操作可以由單個(gè)處理單元執(zhí)行或者由分布的處理單元執(zhí)行。
[0049]已經(jīng)為了示意性和描述性目的提供了本發(fā)明的各種實(shí)施例的以上描述。其并不旨在窮盡本發(fā)明或者將本發(fā)明限制在所公開(kāi)的精確形式。鑒于以上教導(dǎo),可以進(jìn)行許多修改和變化。其意味著本發(fā)明的范圍不局限于具體的描述,而是由所附的權(quán)利要求所限定。以上的說(shuō)明、示例和數(shù)據(jù)提供了制造和使用本發(fā)明的組成的全部描述。因?yàn)榭梢栽诓怀霰景l(fā)明的精神和范圍的情況下進(jìn)行本發(fā)明的許多實(shí)施例,所以本發(fā)明的權(quán)利存在于所附的權(quán)利要求。
【權(quán)利要求】
1.一種系統(tǒng),包括: 多個(gè)處理器; 存儲(chǔ)器,其可以由所述多個(gè)處理器訪問(wèn);以及 計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),具有由至少一個(gè)處理器執(zhí)行以進(jìn)行操作的計(jì)算機(jī)程序代碼,該操作包括: 在所述存儲(chǔ)器中維持多個(gè)槽,以實(shí)施在共享資源上的鎖,其中所述槽對(duì)應(yīng)于連續(xù)編號(hào)的計(jì)數(shù)器值并且表示不空閑或空閑之一; 由發(fā)出請(qǐng)求的處理器獲取計(jì)數(shù)器值以作為所獲取的計(jì)數(shù)器值,所述發(fā)出請(qǐng)求的處理器是請(qǐng)求所述共享資源的鎖的處理器之一; 判斷與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽是否表示空閑; 響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示不空閑的判斷,將所述發(fā)出請(qǐng)求的處理器的處理器標(biāo)識(shí)符插入到與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽中;以及 響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示空閑的判斷,由所述發(fā)出請(qǐng)求的處理器訪問(wèn)所述共享資源。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其中全部槽表示不空閑,或者僅一個(gè)槽表示空閑。
3.根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述操作還包括: 將所述存儲(chǔ)器中用于所述發(fā)出請(qǐng)求的處理器的自旋位置設(shè)置為忙; 在所述發(fā)出請(qǐng)求的處理器的自旋位置表示忙的期間,所述發(fā)出請(qǐng)求的處理器不間斷地檢查所述自旋位置;以及 響應(yīng)于所述發(fā)出請(qǐng)求的處理器的自旋位置表示空閑的判斷,所述發(fā)出請(qǐng)求的處理器訪問(wèn)所述共享資源。
4.根據(jù)權(quán)利要求3所述的系統(tǒng),其中所述操作還包括: 響應(yīng)于所述槽表示空閑的判斷,將與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽設(shè)置為忙值;以及響應(yīng)于所述發(fā)出請(qǐng)求的處理器的自旋位置表示空閑的判斷,將與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽設(shè)置為忙值,其中,如果所述槽表示忙值或者所述處理器標(biāo)識(shí)符之一,則所述槽表示所述共享資源是不空閑的。
5.根據(jù)權(quán)利要求3所述的系統(tǒng),其中,所述處理器各個(gè)都存在一個(gè)獨(dú)立的自旋位置,并且其中有相同數(shù)目的槽、自旋位置和處理器。
6.根據(jù)權(quán)利要求3所述的系統(tǒng),其中,每個(gè)自旋位置都包括一個(gè)緩存線,并且其中多個(gè)槽緩存線被用來(lái)實(shí)施所述槽,使得在每個(gè)槽緩存線中實(shí)施多個(gè)槽。
7.根據(jù)權(quán)利要求1所述的系統(tǒng),其中,所述操作還包括: 由準(zhǔn)備好釋放所述共享資源的保持處理器確定釋放所述共享資源,所述保持處理器是所述多個(gè)處理器之一; 由所述保持處理器確定,在所述保持處理器在請(qǐng)求鎖時(shí)處理的所述槽的所述計(jì)數(shù)器值之后按順序的下一個(gè)計(jì)數(shù)器值; 由所述保持處理器判斷,下一個(gè)槽是否具有忙值,所述下一個(gè)槽是與所述下一個(gè)計(jì)數(shù)器值相對(duì)應(yīng)的槽; 響應(yīng)于所述下一個(gè)槽不具有忙值的判斷,確定在所述下一個(gè)槽中表示的下一個(gè)處理器標(biāo)識(shí)符;以及將鎖空閑通知給下一個(gè)處理器,所述下一個(gè)處理器是由所述下一個(gè)處理器標(biāo)識(shí)符識(shí)別的處理器之一。
8.一種管理對(duì)可由多個(gè)處理器訪問(wèn)的共享資源的鎖的方法,包括: 在存儲(chǔ)器中維持多個(gè)槽,以實(shí)施在所述共享資源上的鎖,其中所述槽對(duì)應(yīng)于連續(xù)編號(hào)的計(jì)數(shù)器值并且表示不空閑或空閑之一; 由發(fā)請(qǐng)求的處理器獲取計(jì)數(shù)器值以作為所獲取的計(jì)數(shù)器值,所述發(fā)請(qǐng)求的處理器是請(qǐng)求所述共享資源的鎖的處理器之一; 判斷與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽是否表示空閑; 響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示不空閑的判斷,將所述發(fā)請(qǐng)求的處理器的處理器標(biāo)識(shí)符插入到與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽中;以及 響應(yīng)于與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽表示空閑的判斷,由所述發(fā)請(qǐng)求的處理器訪問(wèn)所述共享資源。
9.根據(jù)權(quán)利要求8所述的方法,其中全部槽表示不空閑,或者僅一個(gè)槽表示空閑。
10.根據(jù)權(quán)利要求8所述的方法,還包括: 將所述存儲(chǔ)器中用于所述發(fā)請(qǐng)求的處理器的自旋位置設(shè)置為忙; 在所述發(fā)請(qǐng)求的處理器的自旋位置表示忙的期間,由所述發(fā)請(qǐng)求的處理器不間斷地檢查所述自旋位置;以及 響應(yīng)于所述發(fā)請(qǐng)求的處理器的自旋位置表示空閑的判斷,由所述發(fā)請(qǐng)求的處理器訪問(wèn)所述共享資源。
11.根據(jù)權(quán)利要求10所述的方法,還包括: 響應(yīng)于所述槽表示空閑的判斷,將與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽設(shè)置為忙值;以及響應(yīng)于所述發(fā)請(qǐng)求的處理器的自旋位置表示空閑的判斷,將與所獲取的計(jì)數(shù)器值相對(duì)應(yīng)的槽設(shè)置為忙值,其中如果所述槽表示忙值或者處理器標(biāo)識(shí)符之一,則所述槽表示所述共享資源是不空閑的。
12.根據(jù)權(quán)利要求10所述的方法,其中所述處理器各個(gè)都存在一個(gè)獨(dú)立的自旋位置,并且其中有相同數(shù)目的槽、自旋位置和處理器。
13.根據(jù)權(quán)利要求10所述的方法,其中每個(gè)自旋位置都包括一個(gè)緩存線,并且其中多個(gè)槽緩存線被用來(lái)實(shí)施所述槽,使得在每個(gè)槽緩存線中實(shí)施多個(gè)槽。
14.根據(jù)權(quán)利要求8所述的方法,還包括: 由準(zhǔn)備好釋放所述共享資源的保持處理器確定釋放所述共享資源; 由所述保持處理器確定,在所述保持處理器在請(qǐng)求鎖時(shí)處理的所述槽的所述計(jì)數(shù)器值之后按順序的下一個(gè)計(jì)數(shù)器值; 由所述保持處理器判斷下一個(gè)槽是否具有忙值,所述槽是與所述下一個(gè)計(jì)數(shù)器值相對(duì)應(yīng)的槽; 響應(yīng)于所述下一個(gè)槽不具有忙值的判斷,確定在所述下一個(gè)槽中表示的下一個(gè)處理器標(biāo)識(shí)符;以及 將鎖空閑通知給下一個(gè)處理器,所述下一個(gè)處理器是由所述下一個(gè)處理器標(biāo)識(shí)符識(shí)別的處理器之一。
【文檔編號(hào)】G06F9/46GK103729238SQ201310475575
【公開(kāi)日】2014年4月16日 申請(qǐng)日期:2013年10月12日 優(yōu)先權(quán)日:2012年10月12日
【發(fā)明者】T·N·拿亞恩 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1