欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

便利共享存儲(chǔ)器環(huán)境中的通信的方法和系統(tǒng)的制作方法

文檔序號(hào):6620625閱讀:167來(lái)源:國(guó)知局
專利名稱:便利共享存儲(chǔ)器環(huán)境中的通信的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明通常涉及在共享存儲(chǔ)器環(huán)境下的通信,并特別地涉及在該環(huán)境下使用無(wú)鎖隊(duì)列進(jìn)行通信,該無(wú)鎖隊(duì)列被構(gòu)造為用來(lái)提高通信中的效率。
背景技術(shù)
共享存儲(chǔ)器一直被用于在具有共享存儲(chǔ)器環(huán)境下的通信,諸如進(jìn)程間的相互通信。存儲(chǔ)器可被多個(gè)進(jìn)程訪問(wèn),并且這些進(jìn)程使用駐留在共享存儲(chǔ)器中的隊(duì)列進(jìn)行通信。例如,每個(gè)進(jìn)程至少具有一個(gè)隊(duì)列用于通信并且其他進(jìn)程通過(guò)訪問(wèn)一個(gè)特定的進(jìn)程的隊(duì)列來(lái)與該進(jìn)程進(jìn)行通信。由于多個(gè)進(jìn)程訪問(wèn)相同的隊(duì)列,鎖定機(jī)制被用來(lái)保護(hù)該隊(duì)列的完整性。然而,鎖定保護(hù)造成對(duì)隊(duì)列的爭(zhēng)奪,這在性能方面是代價(jià)高昂的。
為了提高性能,可能使用專用隊(duì)列,其中想要與另一進(jìn)程進(jìn)行通信的每一個(gè)進(jìn)程都擁有一個(gè)用于該另一進(jìn)程的專用隊(duì)列。然而,這又顯著地增加了該環(huán)境下所需隊(duì)列的數(shù)量并減少了可伸縮性。
基于前述的原因,仍需要一個(gè)更有效的機(jī)制來(lái)使用共享存儲(chǔ)器進(jìn)行通信。例如,需要有消除死鎖并且不會(huì)顯著地增加通信所需的隊(duì)列的數(shù)量的提高的能力。

發(fā)明內(nèi)容
通過(guò)提供一種便利在共享存儲(chǔ)器環(huán)境中的通信的方法克服了現(xiàn)有技術(shù)中的缺點(diǎn)并提供了附加的優(yōu)點(diǎn)。該方法包括,例如,一個(gè)共享存儲(chǔ)器環(huán)境下的處理實(shí)體在通信時(shí)使用一個(gè)共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列,該無(wú)鎖隊(duì)列可在該無(wú)鎖隊(duì)列的一端被共享存儲(chǔ)器環(huán)境下的多個(gè)處理實(shí)體并發(fā)訪問(wèn)來(lái)寫入該無(wú)鎖隊(duì)列,在該無(wú)鎖隊(duì)列的另一端可被非并發(fā)訪問(wèn),并且大小被設(shè)置為不會(huì)達(dá)到滿的狀態(tài)。
在另一方面,提供一種處理共享存儲(chǔ)器環(huán)境的隊(duì)列的方法。該方法包括,例如,使用單個(gè)原子操作將一個(gè)消息入隊(duì)在共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列中,該無(wú)鎖隊(duì)列可被多個(gè)處理實(shí)體寫入。
在本發(fā)明的另一方面,提供一種處理共享存儲(chǔ)器環(huán)境的隊(duì)列的方法。該方法包括,例如,在不用原子操作的情況下使一個(gè)消息從共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列中出隊(duì),該無(wú)鎖隊(duì)列可被多個(gè)處理實(shí)體寫入。
作為本發(fā)明的另一方面,提供一個(gè)包含一個(gè)隊(duì)列的共享存儲(chǔ)器,其中這個(gè)隊(duì)列包括,例如,該隊(duì)列的第一端,該第一端可以被多個(gè)處理實(shí)體并發(fā)訪問(wèn);該隊(duì)列的第二端,該第二端可被多個(gè)處理實(shí)體非并發(fā)訪問(wèn);并且該隊(duì)列是無(wú)鎖隊(duì)列并且大小被設(shè)置為不會(huì)達(dá)到滿的狀態(tài)。
對(duì)應(yīng)于以上概述方法的系統(tǒng)和計(jì)算機(jī)程序也在這里被說(shuō)明和要求保護(hù)。
通過(guò)本發(fā)明還實(shí)現(xiàn)了附加的特征和優(yōu)點(diǎn)。其他的實(shí)施例和方面在這里被詳細(xì)描述并被認(rèn)為是所要求保護(hù)的本發(fā)明的一部分。


被認(rèn)為是本發(fā)明的主題在說(shuō)明書之后的權(quán)利要求中被特別地指出并明確地要求保護(hù)。通過(guò)下面詳細(xì)的說(shuō)明并結(jié)合附圖,本發(fā)明前述的和其他的目標(biāo)、特征和優(yōu)點(diǎn)將會(huì)很清楚,其中圖1描述引入和使用本發(fā)明一個(gè)或者多個(gè)方面的共享存儲(chǔ)器環(huán)境的一個(gè)實(shí)施例;圖2描述根據(jù)本發(fā)明一個(gè)方面的圖1所示環(huán)境的共享存儲(chǔ)器的一個(gè)例子;圖3描述根據(jù)本發(fā)明一個(gè)方面、與發(fā)送者向接收者傳送信息有關(guān)的邏輯的一個(gè)實(shí)施例;圖4描述根據(jù)本發(fā)明一個(gè)方面、與將隊(duì)列中一個(gè)元素(element)入隊(duì)有關(guān)的邏輯的一個(gè)實(shí)施例;圖5a-5b描述根據(jù)本發(fā)明隊(duì)列被處理的一個(gè)例子;圖6描述根據(jù)本發(fā)明一個(gè)方面、與接收者從發(fā)送者接收信息有關(guān)的邏輯的一個(gè)實(shí)施例;圖7描述根據(jù)本發(fā)明一個(gè)方面、與將隊(duì)列中一個(gè)元素出隊(duì)有關(guān)的邏輯的一個(gè)實(shí)施例;圖8描述根據(jù)本發(fā)明一個(gè)方面、與發(fā)送者復(fù)用一個(gè)隊(duì)列槽來(lái)與一個(gè)接收者進(jìn)行通信有關(guān)的邏輯的一個(gè)實(shí)施例;以及圖9描述根據(jù)本發(fā)明一個(gè)方面、與接收者復(fù)用一個(gè)隊(duì)列槽有關(guān)的邏輯的一個(gè)實(shí)施例。
具體實(shí)施例方式
根據(jù)本發(fā)明的一個(gè)方面,共享存儲(chǔ)器環(huán)境下的無(wú)鎖隊(duì)列被用來(lái)便利該環(huán)境中的通信。作為一個(gè)例子,無(wú)鎖隊(duì)列被用來(lái)便利在能夠訪問(wèn)共享存儲(chǔ)器的、環(huán)境的處理實(shí)體間的通信。在某種情況下,該些處理實(shí)體為進(jìn)程或者任務(wù),并且一個(gè)或者多個(gè)無(wú)鎖隊(duì)列被用來(lái)在不同進(jìn)程或者任務(wù)間進(jìn)行通信。在另外一種情況下,該處理實(shí)體為一個(gè)進(jìn)程的線程,并且一個(gè)或者多個(gè)無(wú)鎖隊(duì)列被用來(lái)在一個(gè)進(jìn)程的不同線程間進(jìn)行通信。該無(wú)鎖隊(duì)列被構(gòu)造為用來(lái)把原子操作的使用和需要施加在該隊(duì)列上的入隊(duì)/出隊(duì)操作的次數(shù)減到最少。
參照?qǐng)D1,描述了一個(gè)引入和使用本發(fā)明一個(gè)或者多個(gè)方面的共享存儲(chǔ)器環(huán)境的實(shí)施例。一共享存儲(chǔ)器環(huán)境100包括,例如,一中央處理單元102,用來(lái)執(zhí)行一操作系統(tǒng),例如紐約阿蒙克(Armonk)的國(guó)際商業(yè)機(jī)器公司提供的AIX(高級(jí)交互執(zhí)行體);一共享存儲(chǔ)器104(例如,主存儲(chǔ)器,一個(gè)存儲(chǔ)區(qū)域等等);和一個(gè)或者多個(gè)通過(guò)例如一個(gè)或者多個(gè)總線108相互連接的輸入/輸出(I/O)設(shè)備。作為一個(gè)例子,共享存儲(chǔ)器環(huán)境100包括一個(gè)由紐約阿蒙克的國(guó)際商業(yè)機(jī)器公司提供的RS/600計(jì)算單元。
在共享存儲(chǔ)器環(huán)境里執(zhí)行多個(gè)能夠訪問(wèn)共享存儲(chǔ)器的處理實(shí)體。在這里描述的例子中,該些處理實(shí)體是進(jìn)程,在另一些實(shí)施例中,該些處理實(shí)體是一個(gè)進(jìn)程的線程或者其他類型的實(shí)體。像參照?qǐng)D2更詳細(xì)描述的那樣,該些處理實(shí)體通過(guò)共享存儲(chǔ)器相互通信。
在一個(gè)例子中,一個(gè)共享存儲(chǔ)器200可以被多個(gè)進(jìn)程202訪問(wèn)。這些進(jìn)程使用共享存儲(chǔ)器相互通信。特別的,這些進(jìn)程使用駐留在共享存儲(chǔ)器中的隊(duì)列來(lái)相互通信。例如,每個(gè)進(jìn)程202都與一個(gè)數(shù)據(jù)隊(duì)列204相關(guān)聯(lián),該隊(duì)列用來(lái)接收來(lái)自其他進(jìn)程的數(shù)據(jù)。每個(gè)數(shù)據(jù)隊(duì)列204具有0個(gè)或者多個(gè)條目206,并且每個(gè)條目206都包括共享存儲(chǔ)器中的一個(gè)元素208的指示器(例如,索引,指針,定位器等等)。該元素包括將在進(jìn)程或者其他處理實(shí)體間通信的數(shù)據(jù)(例如,信息,一個(gè)消息等等)。在另一個(gè)實(shí)施例中,元素的指示器是該元素本身。
當(dāng)發(fā)送進(jìn)程要向接收進(jìn)程發(fā)送數(shù)據(jù)時(shí),一個(gè)元素被入隊(duì)到接收進(jìn)程的數(shù)據(jù)隊(duì)列,當(dāng)接收進(jìn)程要訪問(wèn)該數(shù)據(jù)時(shí),一個(gè)元素被出隊(duì)。在這里描述的例子中,通過(guò)在隊(duì)列中放置元素的指示器將該元素入隊(duì),通過(guò)從隊(duì)列中獲取指示器將元素出隊(duì)。在另一些實(shí)施例中,入隊(duì)/出隊(duì)包括放置/獲取該元素本身。
可以用來(lái)存儲(chǔ)數(shù)據(jù)的元素被另一個(gè)隊(duì)列跟蹤,該隊(duì)列稱為自由隊(duì)列210。每個(gè)進(jìn)程具有一個(gè)相關(guān)的自由隊(duì)列。和數(shù)據(jù)隊(duì)列一樣,自由隊(duì)列包括0個(gè)或者多個(gè)條目212,并且每個(gè)條目包括一個(gè)可用元素的指示器。
用于通信的隊(duì)列是無(wú)鎖隊(duì)列,因此,為了處理隊(duì)列上的并發(fā)操作,使用了原子操作。在這個(gè)實(shí)施例中,數(shù)據(jù)隊(duì)列和自由隊(duì)列都是無(wú)鎖隊(duì)列。然而,在另一些實(shí)施例中,自由隊(duì)列可以是鎖定保護(hù)隊(duì)列或者不是隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。原子操作比鎖定快,這增加了無(wú)鎖隊(duì)列相對(duì)于鎖定保護(hù)隊(duì)列的性能。然而,根據(jù)本發(fā)明的一個(gè)方面,使原子操作的使用最少。例如,并發(fā)性提供給入隊(duì)操作但不提供給出隊(duì)操作,因而,僅在入隊(duì)時(shí)需要原子操作,而在出隊(duì)時(shí)不需要原子操作。入隊(duì)操作的并發(fā)性使多個(gè)進(jìn)程可以并發(fā)地寫入隊(duì)列。出隊(duì)操作的非并發(fā)性是可接受的,因?yàn)殛?duì)列被一個(gè)進(jìn)程擁有并且只有擁有者能處理該隊(duì)列的數(shù)據(jù)。另外,通過(guò)使一個(gè)入隊(duì)操作僅經(jīng)由單個(gè)原子操作來(lái)完成,用于入隊(duì)操作的原子操作的使用被降到最少。
在數(shù)據(jù)隊(duì)列上入隊(duì)/出隊(duì)元素前,該隊(duì)列被初始化。例如,intqueue[size]被用來(lái)初始化該隊(duì)列。隊(duì)列的大小是2的冪并足夠大以使該隊(duì)列不會(huì)變滿。這通過(guò)提供一個(gè)和進(jìn)程可用元素的總數(shù)一樣的隊(duì)列大小來(lái)實(shí)現(xiàn)。例如,如果有64個(gè)進(jìn)程并且每個(gè)進(jìn)程至多提交128個(gè)動(dòng)態(tài)元素,那么一個(gè)大小為64×128=8192的隊(duì)列就足夠了。
隊(duì)列、入隊(duì)以及出隊(duì)操作可以被用于許多情形和環(huán)境,包括,但并不局限于,進(jìn)程內(nèi)通信和進(jìn)程間通信。在這里所描述的例子中,隊(duì)列和相關(guān)操作被用于進(jìn)程間通信,也稱為信息傳遞。因此,數(shù)據(jù)隊(duì)列被稱為消息隊(duì)列。存儲(chǔ)器中的元素也被稱為槽。
參照?qǐng)D3描述與一個(gè)進(jìn)程向另一個(gè)進(jìn)程傳送信息相關(guān)的邏輯的一個(gè)實(shí)施例。開始時(shí),期望和接收者(例如,一個(gè)進(jìn)程)通信的發(fā)送者(例如,另一個(gè)進(jìn)程)從發(fā)送者的自由隊(duì)列獲得一個(gè)自由槽,步驟300。例如,使用下面所述的出隊(duì)操作來(lái)從自由隊(duì)列獲得一個(gè)能夠保存將被發(fā)送到接收者的數(shù)據(jù)的、共享存儲(chǔ)器中的可用槽(例如元素)的指示器。響應(yīng)于接收到該指示器,發(fā)送者把數(shù)據(jù),例如一個(gè)消息,放入由從自由隊(duì)列中獲得的指示器所標(biāo)識(shí)的槽,步驟302。然后將該槽入隊(duì)到接收者的消息隊(duì)列,步驟304。也就是說(shuō),如下面描述的,將該槽的指示器放入接收者的消息隊(duì)列。
如參照?qǐng)D4所描述的,為了將該槽入隊(duì)到接收者的消息隊(duì)列中,執(zhí)行多個(gè)步驟。開始時(shí),確定消息隊(duì)列當(dāng)前尾部的值,步驟400。接著遞增該值以提供一個(gè)新的尾部,步驟402。(由于隊(duì)列被設(shè)計(jì)成不會(huì)滿,所以隊(duì)列操作并不檢查隊(duì)列滿。)作為一個(gè)例子,通過(guò)一個(gè)原子操作來(lái)進(jìn)行該確定和修改尾部值。在這個(gè)實(shí)施方式中,該原子操作是一fetch_and_add操作;然而,在其他實(shí)施例中,可能會(huì)使用其他的原子操作,例如一compare_and_swap、test_and_set等等。在偽代碼中,fetch_and_add操作被定義為word fetch_and_add(word*var,word inc),它用inc原子地遞增存儲(chǔ)在var中的雙字節(jié)值并返回遞增前的初始值。例如,如下面這樣使用fetch_and_addold_tail=fetcth_and_add(tail,1)%size,其中%size指取模運(yùn)算。因此,使用如圖5a所示具有范圍為0到7的8個(gè)條目大小的隊(duì)列的例子,獲得的尾部值為6并且新的尾部值為7,如圖5b所示。
回到圖4,接著,存儲(chǔ)有將被提供給接收者的數(shù)據(jù)的槽的指示器被放在舊的尾部。例如,如圖5b所示,一個(gè)92被放在舊的尾部。
接收者周期性地檢查它的隊(duì)列以確定是否有消息。參照?qǐng)D6描述了這種處理的一個(gè)例子。開始時(shí),接收者試圖將一個(gè)槽從接收者隊(duì)列中出隊(duì),步驟600。參照?qǐng)D7描述了出隊(duì)操作的一個(gè)例子。
確定該隊(duì)列是否為空,步驟700。如果隊(duì)列為空,那么一個(gè)稱為slot_index的變量被設(shè)置為空以表明消息隊(duì)列中沒(méi)有槽,步驟702,并且出隊(duì)操作結(jié)束。然而,如果隊(duì)列不空,那么獲取隊(duì)列頭部的值,步驟704。作為一個(gè)例子,可使用下面的偽代碼old_head=head++%size,其中使用取模運(yùn)算來(lái)確定隊(duì)列頭部的值。因此,參照?qǐng)D5a,在該例子中old_head=1。
接著,執(zhí)行一個(gè)while循環(huán)以確保當(dāng)隊(duì)列的頭部為空時(shí)處理不再繼續(xù)。這種情況可能出現(xiàn),因?yàn)槲膊恐羔樤谌腙?duì)操作中在槽指示器被放入隊(duì)列前被改變。因此,確定隊(duì)列的頭部是否為空,查詢706。如果為空,那么處理返回該查詢。然而,如果隊(duì)列頭部不為空,那么變量slot_index被設(shè)置為queue[old_head],步驟708。這時(shí)slot_index包括具有將被獲取的數(shù)據(jù)的槽的指示器。另外,隊(duì)列在舊的頭部處(例如queue[old_head])被設(shè)置為空,步驟710。因此,如圖5b所示,在身為頭部的隊(duì)列條目1處的指示器被出隊(duì)來(lái)提供一個(gè)31的指示器,并且這時(shí)隊(duì)列在該位置為空。頭部的值被遞增以指示一個(gè)新的頭部。
回到圖6,在試圖從接收者的消息隊(duì)列中出隊(duì)一個(gè)槽后,確定一個(gè)槽是否被出隊(duì),步驟601。如果出隊(duì)過(guò)程沒(méi)有返回一個(gè)槽的指示器,那么處理結(jié)束。然而,如果返回了指示器,那么處理被該指示器指定的槽中的數(shù)據(jù),步驟602,并且將該槽返回到自由隊(duì)列,步驟604。在一個(gè)實(shí)例中,使用入隊(duì)操作來(lái)將槽返回自由隊(duì)列。
在上面的例子中,接收者周期性地檢查消息。然而,在另一實(shí)施例中,接收者接收一個(gè)存在消息的指示。在種種情況下,可以可選地去除上面涉及測(cè)試隊(duì)列的一些邏輯。其他實(shí)施例也是可能的。
在本發(fā)明的另一個(gè)方面,為了減少出隊(duì)和入隊(duì)操作的次數(shù),被最后傳入的消息使用的槽不立即返回自由槽隊(duì)列。相反,該槽被保存用于下一個(gè)傳出的消息。就是說(shuō),作為一個(gè)例子,槽的指示器被保存。例如,在通信協(xié)議中,接收者向發(fā)送者發(fā)回一個(gè)消息來(lái)應(yīng)答剛剛收到的消息是很常見的,所以槽復(fù)用節(jié)省了一個(gè)入隊(duì)操作和一個(gè)出隊(duì)操作。參照?qǐng)D8和圖9描述了與當(dāng)傳入消息的槽被用于傳出消息時(shí)的傳遞消息相關(guān)的邏輯的一個(gè)實(shí)施例。具體地,圖8描述與發(fā)送者復(fù)用一個(gè)槽相關(guān)的邏輯的一個(gè)實(shí)施例,圖9描述與接收者保存一個(gè)槽以便復(fù)用相關(guān)的邏輯的一個(gè)實(shí)施例。
參照?qǐng)D8,發(fā)送者接收一個(gè)將要為其發(fā)送應(yīng)答的消息,步驟800。為了效率,該發(fā)送者復(fù)用最后傳入的消息所使用的槽,步驟802。特別地,發(fā)送者把數(shù)據(jù)放在該槽中,該槽被所保存的槽指示器所標(biāo)識(shí),步驟804,并且像上面所描述那樣,發(fā)送者將該槽入隊(duì)在接收者的隊(duì)列中,步驟806。
接收者從它的隊(duì)列中出隊(duì)一個(gè)槽,步驟900,并處理該槽中的數(shù)據(jù),步驟902。然后該槽被保存,用于下一個(gè)傳出的消息,步驟904。例如,一個(gè)槽的指示器被保存。
在一個(gè)實(shí)施例中,如果多個(gè)消息被一個(gè)進(jìn)程接收到,那么只有用于最后消息的槽被保存用于復(fù)用。其他不打算復(fù)用的槽被返回到自由槽隊(duì)列。因此,確定是否有一個(gè)先前被保存的槽,查詢906。如果有,那么如上所述,將該先前被保存的槽入隊(duì)在自由隊(duì)列中,步驟908。其后,或者如果沒(méi)有先前被保存的槽,那么處理結(jié)束,步驟910。
在一個(gè)實(shí)施例中,每個(gè)進(jìn)程保持最多一個(gè)待定的槽,該槽既不在它的消息隊(duì)列也不再它的自由隊(duì)列。只要一個(gè)進(jìn)程擁有自由槽的數(shù)量大于進(jìn)程的總數(shù)時(shí),就不會(huì)存在進(jìn)程得不到用于傳遞消息的自由槽的饑餓狀態(tài)。這是因?yàn)閷?duì)于一個(gè)進(jìn)程來(lái)說(shuō)待定槽的總數(shù)至多可以是在共享存儲(chǔ)器環(huán)境進(jìn)行通信的處理實(shí)體的總數(shù),并且剩下的槽遲早要被返回到該進(jìn)程的自由隊(duì)列。
上面詳細(xì)地描述了便利在共享存儲(chǔ)器環(huán)境中的通信的能力。為了便利通信,提供了把原子操作和入隊(duì)和出隊(duì)操作減少到最少的無(wú)鎖隊(duì)列。該隊(duì)列具有不會(huì)變滿的特征并僅在一端(例如尾部)具有用于入隊(duì)操作的并發(fā)性。通過(guò)使用這些隊(duì)列,遲延得以減少并且性能得以提高。
通過(guò)復(fù)用隊(duì)列元素,從而把出隊(duì)和入隊(duì)操作的數(shù)量降為最少,也提高了性能。
盡管上面描述了不同的例子,但這些僅僅是例子。在不脫離本發(fā)明精神的情況下可以有許多不同變化。例如,盡管上面提供了一種環(huán)境,但是其他的環(huán)境也可以從本發(fā)明的一個(gè)或者多個(gè)方面獲得益處。例如,許多具有共享存儲(chǔ)器的環(huán)境能從本發(fā)明的一個(gè)或者多個(gè)方面獲得益處,這包括但又不局限于通信環(huán)境,例如計(jì)算環(huán)境,以及其他類型的通信環(huán)境。作為另一個(gè)例子,可以使用不是Rs/6000的計(jì)算單元或者不是AIX的操作系統(tǒng)。另外,不是進(jìn)程、任務(wù)或者一個(gè)進(jìn)程中的線程的處理實(shí)體也可以從本發(fā)明的一個(gè)或者多個(gè)方面獲得益處。
這里所描述的隊(duì)列不僅僅可用于通信。另外,盡管在這里所描述的實(shí)施例中指示器被放置在隊(duì)列中,在其他的實(shí)施例中,數(shù)據(jù)或者消息以及其他和/或者附加信息可被設(shè)置在隊(duì)列中。這些和許多其他變化可被包括在本發(fā)明其他的實(shí)施例中。
此外,盡管在這里所描述的例子中,隊(duì)列的大小是2的冪并且使用取模算法來(lái)找到隊(duì)列的頭部,在其他實(shí)施例中,隊(duì)列的大小可以不是2的冪并且/或者不用取模算法。隊(duì)列的大小可以為任何值,但是不會(huì)達(dá)到滿的狀態(tài)(即,在隊(duì)列中總是有條目可用于入隊(duì)操作)。
此外,盡管在上面所述的槽復(fù)用的例子中,最后傳入的消息的槽被保存,但在其他例子中,也可以是其他消息的槽和/或者不止一個(gè)槽被保存。其他變化也是可能的。
本發(fā)明的一個(gè)或者多個(gè)面的能力可以在軟件、固件、硬件或者其結(jié)合中實(shí)現(xiàn)。
本發(fā)明的一個(gè)或者多個(gè)方面可以包括在具有例如計(jì)算機(jī)可用介質(zhì)的制物品(例如計(jì)算機(jī)程序)中。該介質(zhì)在其中具有例如計(jì)算機(jī)可讀程序代碼裝置或者邏輯(例如指令,代碼,命令等等)來(lái)提供和便利本發(fā)明的能力。該制造物品可作為計(jì)算機(jī)系統(tǒng)的一部分或者單獨(dú)出售。
另外,可提供至少一個(gè)機(jī)器可讀的程序存儲(chǔ)設(shè)備,該設(shè)備包含有至少一個(gè)可由該機(jī)器執(zhí)行的指令程序來(lái)實(shí)現(xiàn)本發(fā)明的能力。
這里描述的流程圖僅僅是一些例子。在不脫離本發(fā)明精神的情況下,這里所述的圖或者步驟(或者操作)可以有許多不同的變化。例如,步驟可以不同的順序執(zhí)行,或者步驟被增加、刪除或者改變。所有這些變化被認(rèn)為是要求保護(hù)的本發(fā)明的一部分。
盡管這里詳細(xì)描述了優(yōu)選的實(shí)施例,但是對(duì)于本領(lǐng)域熟練的技術(shù)人員來(lái)說(shuō),很顯然在不脫離本發(fā)明精神的情況下可以作出不同的改變、增加、替換或者類似操作,并且這些均被認(rèn)為是在下面權(quán)利要求中所定義的本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種便利在共享存儲(chǔ)器環(huán)境中的通信的方法,所述的方法包括由共享存儲(chǔ)器環(huán)境的處理實(shí)體使用共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列來(lái)進(jìn)行通信,所述無(wú)鎖隊(duì)列能在該無(wú)鎖隊(duì)列的一端被該共享存儲(chǔ)器環(huán)境的多個(gè)處理實(shí)體并發(fā)訪問(wèn)來(lái)寫入該無(wú)鎖隊(duì)列,能在該無(wú)鎖隊(duì)列的另一端被非并發(fā)地訪問(wèn),并且大小被設(shè)置為不會(huì)達(dá)到滿的狀態(tài)。
2.如權(quán)利要求1所述的方法,其中所述處理實(shí)體包括一個(gè)進(jìn)程并且所述多個(gè)處理實(shí)體包括多個(gè)進(jìn)程。
3.如權(quán)利要求1所述的方法,其中所述處理實(shí)體包括一個(gè)進(jìn)程的一個(gè)線程并且所述多個(gè)處理實(shí)體包括該進(jìn)程的多個(gè)線程。
4.如權(quán)利要求1所述的方法,其中所述使用操作包括使用單個(gè)原子操作來(lái)將元素入隊(duì)在該無(wú)鎖隊(duì)列中。
5.如權(quán)利要求4所述的方法,其中所述入隊(duì)操作包括確定該無(wú)鎖隊(duì)列的尾部的標(biāo)識(shí)符;遞增該尾部的標(biāo)識(shí)符以標(biāo)識(shí)一個(gè)新的尾部;以及在被遞增之前的該標(biāo)識(shí)符所標(biāo)識(shí)的尾部存儲(chǔ)與該元素相關(guān)的指示器。
6.如權(quán)利要求5所述的方法,其中由存儲(chǔ)在尾部的指示器指示的元素位于共享存儲(chǔ)器中。
7.如權(quán)利要求5所述的方法,其中所述確定和遞增步驟由所述單個(gè)原子操作來(lái)實(shí)現(xiàn)。
8.如權(quán)利要求7所述的方法,其中所述單個(gè)原子操作包括一取和加操作。
9.如權(quán)利要求1所述的方法,其中所述使用步驟包括在不用原子操作的情況下使該無(wú)鎖隊(duì)列的元素出隊(duì)。
10.如權(quán)利要求9所述的方法,其中所述出隊(duì)步驟包括確定無(wú)鎖隊(duì)列的頭部的標(biāo)識(shí)符;以及從該標(biāo)識(shí)符所標(biāo)識(shí)的頭部獲取與所述元素相關(guān)的指示器。
11.如權(quán)利要求10所述的方法,其中所述出隊(duì)步驟還包括遞增該頭部標(biāo)識(shí)符以標(biāo)識(shí)一個(gè)新的頭部。
12.如權(quán)利要求10所述的方法,其中由從頭部獲取的指示器所指示的元素位于共享存儲(chǔ)器中。
13.如權(quán)利要求10所述的方法,還包括檢查無(wú)鎖隊(duì)列是否為空;以及響應(yīng)于所述檢查步驟表明一個(gè)非空的無(wú)鎖隊(duì)列,繼續(xù)來(lái)確定該標(biāo)識(shí)符。
14.如權(quán)利要求10所述的方法,其中還包括檢查由標(biāo)識(shí)符標(biāo)識(shí)的頭部處的無(wú)鎖隊(duì)列是否為空;以及在繼續(xù)到獲取指示器之前等待,直到該頭部非空。
15.如權(quán)利要求1所述的方法,其中所述一端位于無(wú)鎖隊(duì)列的尾部,所述另一端位于無(wú)鎖隊(duì)列的頭部。
16.如權(quán)利要求1所述的方法,其中所述使用步驟包括獲得共享存儲(chǔ)器中用于存放數(shù)據(jù)的槽的指示器;在指示器指定的槽中存儲(chǔ)數(shù)據(jù);以及向無(wú)鎖隊(duì)列提供該指示器以使得能夠訪問(wèn)存儲(chǔ)在該槽中的數(shù)據(jù)。
17.如權(quán)利要求16所述的方法,其中該槽是由該處理實(shí)體的傳入消息使用的槽。
18.如權(quán)利要求17所述的方法,其中該傳入消息是該處理實(shí)體最后接收到的消息。
19.如權(quán)利要求16所述的方法,其中所述指示器是從自由槽數(shù)據(jù)結(jié)構(gòu)中獲得的。
20.如權(quán)利要求16所述的方法,其中所述提供該指示器的步驟包括原子地確定該無(wú)鎖隊(duì)列的尾部的標(biāo)識(shí)符并遞增該尾部標(biāo)識(shí)符以標(biāo)識(shí)一個(gè)新的尾部;以及在被遞增之前的該標(biāo)識(shí)符所標(biāo)識(shí)的尾部存儲(chǔ)該槽的指示器。
21.如權(quán)利要求1所述的方法,其中所述使用步驟包括從該無(wú)鎖隊(duì)列中獲得在共享存儲(chǔ)器中存儲(chǔ)將被處理的數(shù)據(jù)的槽的指示器;以及處理由該指示器所指示的槽的數(shù)據(jù)。
22.如權(quán)利要求21所述的方法,其中所述獲得步驟包括確定該無(wú)鎖隊(duì)列的頭部的標(biāo)識(shí)符;以及從該標(biāo)識(shí)符所標(biāo)識(shí)的頭部獲取該槽的指示器。
23.如權(quán)利要求21所述的方法,還包括保存該槽以用于傳出的消息。
24.如權(quán)利要求23所述的方法,還包括確定另一槽是否被保存;以及響應(yīng)于該確定步驟表明該另一槽被保存,向自由槽數(shù)據(jù)結(jié)構(gòu)返回該另一個(gè)槽。
25.如權(quán)利要求21所述的方法,還包括向自由槽數(shù)據(jù)結(jié)構(gòu)返回該槽。
26.一種處理共享存儲(chǔ)器環(huán)境的隊(duì)列的方法,所述方法包括使用單個(gè)原子操作將消息入隊(duì)在共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列中,該無(wú)鎖隊(duì)列能夠被多個(gè)處理實(shí)體寫入。
27.一種處理共享存儲(chǔ)器環(huán)境的隊(duì)列的方法,所述方法包括在沒(méi)有單個(gè)原子操作的情況下從共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列中使消息出隊(duì),該無(wú)鎖隊(duì)列能夠被多個(gè)處理實(shí)體寫入。
28.一種共享存儲(chǔ)器,包括隊(duì)列,所述隊(duì)列包括隊(duì)列的第一端,所述第一端可被多個(gè)處理實(shí)體并發(fā)地訪問(wèn);隊(duì)列的第二端,所述第二端可被多個(gè)處理實(shí)體非并發(fā)地訪問(wèn);以及其中所述隊(duì)列為無(wú)鎖隊(duì)列并且大小被設(shè)置為不會(huì)達(dá)到滿的狀態(tài)。
29.一種便利在共享存儲(chǔ)器環(huán)境中的通信的系統(tǒng),所述系統(tǒng)包括共享存儲(chǔ)器環(huán)境中的用于通信的無(wú)鎖隊(duì)列,所述無(wú)鎖隊(duì)列能在該無(wú)鎖隊(duì)列的一端被該共享存儲(chǔ)器環(huán)境的多個(gè)處理實(shí)體并發(fā)訪問(wèn)以寫入該無(wú)鎖隊(duì)列,能在該無(wú)鎖隊(duì)列的另一端被非并發(fā)地訪問(wèn),并且大小被設(shè)置為不會(huì)達(dá)到滿的狀態(tài);用于由共享存儲(chǔ)器環(huán)境的處理實(shí)體使用該無(wú)鎖隊(duì)列的裝置。
30.如權(quán)利要求29所述的系統(tǒng),其中所述用于使用的裝置包括用于使用單個(gè)原子操作來(lái)將元素入隊(duì)在該無(wú)鎖隊(duì)列中的裝置。
31.如權(quán)利要求30所述的系統(tǒng),其中所述用于入隊(duì)的裝置包括用于確定該無(wú)鎖隊(duì)列的尾部的標(biāo)識(shí)符的裝置;用于遞增該尾部的標(biāo)識(shí)符以標(biāo)識(shí)一個(gè)新的尾部的裝置;以及用于在由被遞增之前的該標(biāo)識(shí)符所標(biāo)識(shí)的尾部存儲(chǔ)與元素相關(guān)的指示器的裝置。
32.如權(quán)利要求31所述的系統(tǒng),其中所述用于確定的裝置和所述用于遞增的裝置由單個(gè)原子操作來(lái)實(shí)現(xiàn)。
33.如權(quán)利要求29所述的系統(tǒng),其中所述用于使用的裝置包括用于在不用原子操作的情況下使該無(wú)鎖隊(duì)列的元素出隊(duì)的裝置。
34.如權(quán)利要求33所述的系統(tǒng),其中用于出隊(duì)的裝置包括用于確定無(wú)鎖隊(duì)列的頭部的標(biāo)識(shí)符的裝置;以及用于從該標(biāo)識(shí)符所標(biāo)識(shí)的頭部獲取與該元素相關(guān)的指示器的裝置。
35.如權(quán)利要求34所述的系統(tǒng),還包括用于檢查無(wú)鎖隊(duì)列是否為空的裝置;以及用于響應(yīng)于該檢查表明一個(gè)非空的無(wú)鎖隊(duì)列,繼續(xù)來(lái)確定該標(biāo)識(shí)符的裝置。
36.如權(quán)利要求34所述的系統(tǒng),還包括用于檢查位于由標(biāo)識(shí)符標(biāo)識(shí)的頭部的無(wú)鎖隊(duì)列是否為空的裝置;以及用于在繼續(xù)到獲取該指示器之前等待,直到該頭部非空的裝置。
37.如權(quán)利要求29所述的系統(tǒng),其中所述用于使用的裝置還包括用于獲得在共享存儲(chǔ)器中用來(lái)存放數(shù)據(jù)的槽的指示器的裝置;用于在指示器指定的槽中存儲(chǔ)數(shù)據(jù)的裝置;以及用于向無(wú)鎖隊(duì)列提供該指示器以使得能夠訪問(wèn)存儲(chǔ)在該槽中的數(shù)據(jù)的裝置。
38.如權(quán)利要求37所述的系統(tǒng),其中該槽是被該處理實(shí)體的傳入消息使用的槽。
39.如權(quán)利要求38所述的系統(tǒng),其中將傳入消息是被該處理實(shí)體最后接收到的消息。
40.如權(quán)利要求37所述的系統(tǒng),其中該指示器是從自由槽數(shù)據(jù)結(jié)構(gòu)中獲得的。
41.如權(quán)利要求37所述的系統(tǒng),其中用于提供該指示器的裝置包括用于原子地確定該無(wú)鎖隊(duì)列的尾部的指示器的裝置和用于遞增該尾部標(biāo)識(shí)符以標(biāo)識(shí)一個(gè)新的尾部的裝置;以及用于在被遞增之前的該標(biāo)識(shí)符所標(biāo)識(shí)的尾部存儲(chǔ)該槽的指示器的裝置。
42.如權(quán)利要求29所述的系統(tǒng),其中所述用于使用的裝置包括用于從該無(wú)鎖隊(duì)列中獲得在共享存儲(chǔ)器中存儲(chǔ)將被處理的數(shù)據(jù)的槽的指示器的裝置;以及用于處理該指示器所指示的槽的數(shù)據(jù)的裝置。
43.如權(quán)利要求42所述的系統(tǒng),其中所述用于獲得的裝置包括用于確定該無(wú)鎖隊(duì)列的頭部的標(biāo)識(shí)符的裝置;以及用于從該標(biāo)識(shí)符所標(biāo)識(shí)的頭部獲取槽的指示器的裝置。
44.如權(quán)利要求42所述的系統(tǒng),還包括用于保存該槽以用于傳出消息的裝置。
45.如權(quán)利要求44所述的系統(tǒng),還包括用于確定另一槽是否被保存的裝置;以及用于響應(yīng)于所述確定表明該另一槽被保存,向自由槽數(shù)據(jù)結(jié)構(gòu)返回該另一個(gè)槽的裝置。
46.一種便利共享存儲(chǔ)器環(huán)境中的通信的系統(tǒng),所述系統(tǒng)包括共享存儲(chǔ)器環(huán)境的處理實(shí)體,該處理實(shí)體使用共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列來(lái)進(jìn)行通信,所述無(wú)鎖隊(duì)列能在該無(wú)鎖隊(duì)列的一端被該共享存儲(chǔ)器環(huán)境的多個(gè)處理實(shí)體并發(fā)訪問(wèn)以寫入該無(wú)鎖隊(duì)列,能在該無(wú)鎖隊(duì)列的另一端被非并發(fā)地訪問(wèn),并且大小被設(shè)置為不會(huì)達(dá)到滿的狀態(tài)。
47.一種制造物品,包括至少一個(gè)計(jì)算機(jī)可用介質(zhì),其具有計(jì)算機(jī)可讀程序代碼邏輯用來(lái)便利共享存儲(chǔ)器環(huán)境中的通信,該計(jì)算機(jī)可讀程序代碼邏輯包括用于由共享存儲(chǔ)器環(huán)境的處理實(shí)體使用共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列來(lái)進(jìn)行通信的使用邏輯,所述無(wú)鎖隊(duì)列能在該無(wú)鎖隊(duì)列的一端被該共享存儲(chǔ)器環(huán)境的多個(gè)處理實(shí)體并發(fā)訪問(wèn)以寫入該無(wú)鎖隊(duì)列,能在該無(wú)鎖隊(duì)列的另一端被非并發(fā)地訪問(wèn),并且大小被設(shè)置為不會(huì)達(dá)到滿的狀態(tài)。
48.如權(quán)利要求47所述的制造物品,其中所述使用邏輯包括用于使用單個(gè)原子操作來(lái)將元素入隊(duì)在該無(wú)鎖隊(duì)列中的入隊(duì)邏輯。
49.如權(quán)利要求48所述的制造物品,其中所述入隊(duì)邏輯包括用于確定該無(wú)鎖隊(duì)列的尾部的標(biāo)識(shí)符的確定邏輯;用于遞增該尾部的標(biāo)識(shí)符以標(biāo)識(shí)一個(gè)新的尾部的遞增邏輯;以及用于在被遞增之前的該標(biāo)識(shí)符所標(biāo)識(shí)的尾部存儲(chǔ)與該元素相關(guān)的指示器的存儲(chǔ)邏輯。
50.如權(quán)利要求49所述的制造物品,其中所述確定和遞增由單個(gè)原子操作來(lái)實(shí)現(xiàn)。
51.如權(quán)利要求47所述的制造物品,其中所述使用邏輯包括用于在不用原子操作的情況下使該無(wú)鎖隊(duì)列上的元素出隊(duì)的出隊(duì)邏輯。
52.如權(quán)利要求51所述的制造物品,其中所述出隊(duì)邏輯包括用于確定無(wú)鎖隊(duì)列的頭部的標(biāo)識(shí)符的確定邏輯;以及用于從該標(biāo)識(shí)符所標(biāo)識(shí)的頭部獲取與該元素相關(guān)的指示器的獲取邏輯。
53.如權(quán)利要求52所述的制造物品,還包括用于檢查無(wú)鎖隊(duì)列是否為空的檢查邏輯;以及用于響應(yīng)于該檢查表明一個(gè)非空的無(wú)鎖隊(duì)列,繼續(xù)來(lái)確定該標(biāo)識(shí)符的繼續(xù)邏輯。
54.如權(quán)利要求52所述的制造物品,還包括用于檢查位于由標(biāo)識(shí)符標(biāo)識(shí)的頭部的無(wú)鎖隊(duì)列是否為空的檢查邏輯;以及用于在繼續(xù)到獲取指示器之前等待,直到該頭部非空的等待邏輯。
55.如權(quán)利要求47所述的制造物品,其中所述使用邏輯包括用于獲得在共享存儲(chǔ)器中用來(lái)存放數(shù)據(jù)的槽的指示器的獲得邏輯;用于在指示器指定的槽中存儲(chǔ)數(shù)據(jù)的存儲(chǔ)邏輯;以及用于向無(wú)鎖隊(duì)列提供該指示器以使得能夠訪問(wèn)存儲(chǔ)在該槽中的數(shù)據(jù)的提供邏輯。
56.如權(quán)利要求55所述的制造物品,其中該槽是被該處理實(shí)體的傳入消息使用的槽。
57.如權(quán)利要求56所述的制造物品,其中該傳入消息是被處理實(shí)體最后收到的消息。
58.如權(quán)利要求55所述的制造物品,其中該指示器是從自由槽數(shù)據(jù)結(jié)構(gòu)中獲得的。
59.如權(quán)利要求55所述的制造物品,其中所述提供邏輯包括用于原子地確定該無(wú)鎖隊(duì)列的尾部的標(biāo)識(shí)符并遞增該尾部標(biāo)識(shí)符以標(biāo)識(shí)一個(gè)新的尾部的邏輯;以及用于在被遞增之前的該標(biāo)識(shí)符所標(biāo)識(shí)的尾部存儲(chǔ)該槽的指示器的存儲(chǔ)邏輯。
60.如權(quán)利要求47所述的制造物品,其中所述使用邏輯包括用于從該無(wú)鎖隊(duì)列中獲得在共享存儲(chǔ)器中存儲(chǔ)將被處理的數(shù)據(jù)的槽的指示器的獲得邏輯;以及用于處理該指示器所標(biāo)識(shí)的槽的數(shù)據(jù)的處理邏輯。
61.如權(quán)利要求60所述的制造物品,其中所述獲得邏輯包括用于確定該無(wú)鎖隊(duì)列的頭部的標(biāo)識(shí)符的確定邏輯;以及用于從該標(biāo)識(shí)符所標(biāo)識(shí)的頭部獲取該槽的指示器的獲取邏輯。
62.如權(quán)利要求60所述的制造物品,還包括用于保存該槽以用于傳出消息的保存邏輯。
63.如權(quán)利要求60所述的制造物品,還包括用于確定另一槽是否被保存的確定邏輯;以及用于響應(yīng)于該確定表明該另一槽被保存,向自由槽數(shù)據(jù)結(jié)構(gòu)返回另一個(gè)槽的返回邏輯。
全文摘要
使用共享存儲(chǔ)器環(huán)境的無(wú)鎖隊(duì)列來(lái)便利該環(huán)境中的通信。該些無(wú)鎖隊(duì)列可用于進(jìn)程間通信,也可用于進(jìn)程中的通信。該些無(wú)鎖隊(duì)列被構(gòu)造為當(dāng)在該些隊(duì)列上執(zhí)行操作時(shí),把原子操作的使用降到最少,并把將在該隊(duì)列上執(zhí)行的入隊(duì)/出隊(duì)操作的次數(shù)降到最少。
文檔編號(hào)G06F12/00GK1713151SQ20051007482
公開日2005年12月28日 申請(qǐng)日期2005年6月3日 優(yōu)先權(quán)日2004年6月22日
發(fā)明者R·西瓦拉姆, 薛瀚宏 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
方山县| 辉南县| 莱西市| 盐城市| 阿图什市| 沁源县| 景德镇市| 澄迈县| 儋州市| 湟中县| 科尔| 汾阳市| 蒙自县| 昌邑市| 星座| 岳阳县| 浦县| 荥经县| 开原市| 凤凰县| 边坝县| 鄂尔多斯市| 土默特右旗| 株洲县| 张家界市| 武冈市| 大名县| 南平市| 辽宁省| 梅河口市| 类乌齐县| 临武县| 滨州市| 武冈市| 伊通| 剑阁县| 峨边| 铁力市| 大厂| 库尔勒市| 大安市|