專利名稱:用于串行互斥體的方法與裝置的制作方法
背景技術(shù):
許多應(yīng)用程序采用共享公用存儲(chǔ)器中的數(shù)據(jù)或使用公用存儲(chǔ)器進(jìn)行通訊的多個(gè)執(zhí)行線程,為保證數(shù)據(jù)的一致性,應(yīng)用程序需要采用一定類型的機(jī)制。有一種機(jī)制提供互斥,就是說(shuō),它使用“互斥鎖”來(lái)確保只有一個(gè)執(zhí)行線程能夠進(jìn)入臨界區(qū)在其中對(duì)共享數(shù)據(jù)進(jìn)行操作。如果兩個(gè)以上的執(zhí)行線程共享一個(gè)數(shù)據(jù)區(qū)的話,多個(gè)線程可能試圖同時(shí)獲得互斥鎖的所有權(quán),在這種情況下,線程獲得互斥鎖所有權(quán)的順序無(wú)法保證。
當(dāng)一個(gè)或多個(gè)處理器上的多線程共享數(shù)據(jù)時(shí),使用互斥鎖(mutal exclusionlock)(“互斥體”)來(lái)一次只向一個(gè)線程提供共享數(shù)據(jù)的所有權(quán)?;コ怏w(mutex)的使用使得持有互斥體的線程在維護(hù)記錄內(nèi)一致性的同時(shí),對(duì)共享記錄的內(nèi)容進(jìn)行一次或多次修改,或者是一次讀-改-寫操作對(duì)記錄內(nèi)容進(jìn)行更新。
一般而言,互斥體被實(shí)現(xiàn)為存儲(chǔ)器中的一個(gè)存儲(chǔ)單元(a location inmemory),它被用來(lái)既表示試圖占有也表示已經(jīng)擁有另一個(gè)被互斥體保護(hù)的區(qū)域的所有權(quán)。有許多技術(shù),使用軟件的或軟件與硬件相結(jié)合的,來(lái)實(shí)現(xiàn)獲得(進(jìn)入)和釋放(退出)互斥體的動(dòng)作。進(jìn)入共享數(shù)據(jù)在其中被修改的代碼關(guān)鍵區(qū)域的線程之前被加上mutex_enter()操作,之后被加上mutex_exit()操作。實(shí)現(xiàn)mutex_enter()和mutex_exit()操作的技術(shù)是人們所熟知的。
在一些應(yīng)用中,由于串行化方式的限制,使用這種競(jìng)爭(zhēng)性互斥鎖來(lái)控制對(duì)共享數(shù)據(jù)的存取是不充分的。因此,還需使用其它實(shí)施排序的技術(shù)。
例如,在一些網(wǎng)絡(luò)化應(yīng)用程序中,順序是通過(guò)要求所有的在特定的一對(duì)端點(diǎn)間傳輸?shù)男旁驍?shù)據(jù)包被同一個(gè)進(jìn)程或線程來(lái)處理來(lái)維護(hù)的,或通過(guò)使用硬件流水線操作來(lái)維護(hù)。前者將任意一對(duì)端點(diǎn)間的吞吐量限制在單線程的性能內(nèi),因而,并行性只能在不相關(guān)的端點(diǎn)的流量中取得,當(dāng)嚴(yán)格的順序被維護(hù)在任意的點(diǎn)到點(diǎn)之間。后者能取得較高的吞吐量,但在靈活性和性能上受到限制,比如要將任務(wù)分割成多少個(gè)固定的流水線階段,以及階段間的通訊的簡(jiǎn)化程度。還有些網(wǎng)絡(luò)應(yīng)用程序通過(guò)使用與每個(gè)信元或數(shù)據(jù)包相關(guān)聯(lián)的序號(hào)來(lái)維護(hù)次序,但有些網(wǎng)絡(luò)協(xié)議不支持序號(hào)的使用。
圖1是一種通訊系統(tǒng)框圖,它使用一個(gè)擁有多線程微引擎的處理器來(lái)支持多線程的執(zhí)行。
圖2是處理器高層處理流程的描述。
圖3是處理器接收單元的方框圖。
圖4是一種范例性的接收數(shù)據(jù)路徑的描述。
圖5是圖1的處理器中的線程使用的一種串行互斥體(s-mutex)機(jī)制的概念上的描述。
圖6是協(xié)作線程使用串行化互斥鎖來(lái)存取共享數(shù)據(jù)項(xiàng)的代碼的例子。
圖7是協(xié)作線程使用串行化互斥鎖存取共享數(shù)據(jù)項(xiàng)的串行化方式的說(shuō)明。
圖8是串行互斥鎖的串行化所有權(quán)傳遞方面的一個(gè)范例性“令牌傳遞”實(shí)現(xiàn)的說(shuō)明。
圖9是串行互斥鎖所有權(quán)傳遞機(jī)制的一個(gè)可供選擇的方法。
圖10是一種說(shuō)明使用四個(gè)串行互斥鎖的范例性流程圖。
詳細(xì)說(shuō)明參考圖1,通訊系統(tǒng)10包括處理器12,其連接到一個(gè)或多個(gè)輸入/輸出裝置,例如網(wǎng)絡(luò)裝置14和16,以及存儲(chǔ)器系統(tǒng)18。處理器12是多線程處理器,因而對(duì)能分解為并行子任務(wù)或功能的任務(wù)尤其有用。如圖所示的一個(gè)實(shí)施例中,處理器12包括多個(gè)微引擎20,每個(gè)帶有多個(gè)能在一個(gè)任務(wù)中同時(shí)激活并獨(dú)立工作的由硬件控制的程序線程22。每個(gè)微引擎20與臨近的微引擎相連接并能與之通訊。
處理器12還包括通用處理器(GPP)24,它幫助裝載用于微引擎20的微代碼控制,并且完成其它諸如處理協(xié)議和異常的通用計(jì)算機(jī)類型的功能,它還為微引擎無(wú)法處理的高層處理任務(wù)提供支持。通用處理器24有操作系統(tǒng),通過(guò)它通用處理器能調(diào)用功能在微引擎20上進(jìn)行操作。通用處理器24能使用任何被支持的操作系統(tǒng),最好是實(shí)時(shí)操作系統(tǒng)。
微引擎20分別以共享資源操作,包括存儲(chǔ)器系統(tǒng)18、總線接口26′、一個(gè)和多個(gè)媒體塊26和28??偩€接口26′為外部總線30,例如PCI總線,提供接口。媒體塊26、28分別控制和把處理器12接口到網(wǎng)絡(luò)裝置14、16。存儲(chǔ)器系統(tǒng)18包括使用DRAM控制器36存取的動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)34、使用SRAM控制器40存取的靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)38。存儲(chǔ)器系統(tǒng)18還包括諸如PROM之類的非易失性存儲(chǔ)器42和相應(yīng)的接口44,以支持引導(dǎo)操作。DRAM 34和DRAM控制器36通常用于存儲(chǔ)大容量數(shù)據(jù),例如網(wǎng)絡(luò)數(shù)據(jù)包的有效載荷。DRAM控制器36包括用于存取位于DRAM 34中緩沖存儲(chǔ)器46的DRAM接口45。緩沖存儲(chǔ)器保存數(shù)據(jù)包的數(shù)據(jù),有效載荷或完整的數(shù)據(jù)包。SRAM 38和SRAM控制器40用在低延時(shí)、快速存取任務(wù)的網(wǎng)絡(luò)實(shí)現(xiàn)中,例如,存取查找表、處理器24使用的時(shí)間緊急的數(shù)據(jù)和指令,等等。SRAM 38保存DRAM緩沖區(qū)的自由鏈表(緩沖存儲(chǔ)器46中可用的緩沖區(qū)的指針列表)48、描述符50、描述符自由鏈表52和傳遞信息用的通信環(huán)54,例如在處理器資源如微引擎線程22、GPP 24和媒體塊之間傳遞描述符指針。SRAM控制器40包括用于存取存儲(chǔ)在SRAM 38中的數(shù)據(jù)的SRAM接口56,還包括支持DRAM緩沖區(qū)分配的用于申請(qǐng)資源的控制邏輯50,該DRAM緩沖區(qū)由自由鏈表48表示。SRAM控制器40還包括環(huán)轉(zhuǎn)換單元60,它和環(huán)預(yù)取器62一起被資源用來(lái)存取環(huán)54。微引擎20和通用處理器24能執(zhí)行到DRAM控制器36或SRAM控制器40的內(nèi)存訪問(wèn)指令(memory reference instructions)。
裝置14和16可以是可發(fā)送和/或接收網(wǎng)絡(luò)流量數(shù)據(jù)的任何網(wǎng)絡(luò)裝置,如成幀/媒體存取控制裝置,例如,用于連接到10/100BaseT以太網(wǎng)、千兆以太網(wǎng)、ATM或其它類型網(wǎng)絡(luò)的裝置,或連接到交換結(jié)構(gòu)的裝置。因此,媒體塊26、28支持一種或一種以上的接口,例如用于在PHY裝置與更高協(xié)議層(例如鏈路層)之間包和信元傳送的接口,或在流量管理和異步傳輸模式(ATM)、網(wǎng)際協(xié)議(IP)、以太網(wǎng)和類似的數(shù)據(jù)通訊應(yīng)用的交換結(jié)構(gòu)之間的接口。媒體塊26、28分別包括一個(gè)分離的接收(RX)單元64和發(fā)送(TX)單元66,分別可配置為特定的處理器12所支持的接口。
處理器12也為其它裝置提供服務(wù),諸如可連接到由總線接口26′控制的總線30上的主機(jī)和/或總線外設(shè)(未示出),或者可連接到由協(xié)處理器接口70控制的協(xié)處理器總線68上的協(xié)處理器(亦未示出)。
一般的,作為網(wǎng)絡(luò)處理器,處理器12能和任何類型的接收/發(fā)送大量數(shù)據(jù)的通訊裝置或接口相連接。如將被描述的,起到網(wǎng)絡(luò)處理器作用的處理器12能接收從像網(wǎng)絡(luò)裝置14那樣的網(wǎng)絡(luò)裝置來(lái)的數(shù)據(jù)包單元,并以并行的方式處理這些數(shù)據(jù)包單元。數(shù)據(jù)包單元可能包括完整的網(wǎng)絡(luò)數(shù)據(jù)包(例如,以太網(wǎng)數(shù)據(jù)包)或這種數(shù)據(jù)包的一部分,例如信元或數(shù)據(jù)包片斷。
處理器12的每個(gè)功能單元20、24、26′、36、40、44和70連接到第一總線結(jié)構(gòu)72。功能單元20、26、28、36、40連接到第二總線結(jié)構(gòu)74。存儲(chǔ)器總線78、80分別將存儲(chǔ)器控制器36和40連接到存儲(chǔ)器系統(tǒng)18的各個(gè)存儲(chǔ)器單元DRAM 34和SRAM 38。存儲(chǔ)器總線82將PROM接口44連接到存儲(chǔ)器系統(tǒng)18的PROM 42。媒體塊26、28通過(guò)分離的輸入/輸出總線84a和84b分別將它們連接到各自的網(wǎng)絡(luò)裝置14和16。
盡管沒(méi)有詳細(xì)顯示出來(lái),但每個(gè)微引擎20包括寫發(fā)送寄存器文件和讀發(fā)送寄存器文件。寫發(fā)送寄存器文件存儲(chǔ)將被寫到微引擎的外部資源(例如,DRAM存儲(chǔ)器或SRAM存儲(chǔ)器)的數(shù)據(jù)。讀發(fā)送寄存器文件用于存儲(chǔ)從微處理器20的外部資源返回的數(shù)據(jù)。
參考圖2,顯示了處理器12的一種示例性的軟件模型90。處理器12支持三個(gè)處理級(jí)別或階段接收處理階段92,高層處理階段94和發(fā)送處理階段96。在接收處理階段,完成了諸如重組指針?biāo)阉鳌⒅亟M信息更新、接收包處理和隊(duì)列管理等操作。如此,接收處理階段的處理起始于數(shù)據(jù)抵達(dá)媒體塊的輸入/輸出接口的接收單元,終止于將描述符存儲(chǔ)在SRAM并將有效載荷數(shù)據(jù)移動(dòng)到DRAM中。在發(fā)送處理階段,完成包括發(fā)送調(diào)度、隊(duì)列管理和數(shù)據(jù)發(fā)送等一些功能。
接收線程98解析數(shù)據(jù)包頭部并完成基于數(shù)據(jù)包頭部信息的查找。當(dāng)數(shù)據(jù)包被處理完后,就被存儲(chǔ)到DRAM 34中,或者作為異常被轉(zhuǎn)發(fā)給GPP 24做進(jìn)一步處理,到另一個(gè)線程100或協(xié)處理器102做高層的處理,或者通過(guò)為數(shù)據(jù)包放置一個(gè)描述符在與由頭部/查找所指示的發(fā)送(轉(zhuǎn)發(fā)口)相聯(lián)系的發(fā)送隊(duì)列中來(lái)排隊(duì)等待發(fā)送。此描述符存儲(chǔ)在SRAM 38中。在發(fā)送處理階段96,TX線程104完成發(fā)送數(shù)據(jù)處理,就是說(shuō),可能應(yīng)用一種調(diào)度策略,可能修改頭部,然后將數(shù)據(jù)包發(fā)送到由在接收處理階段的頭部/查找信息所指示的轉(zhuǎn)發(fā)端口。
總體上,各種功能組成一種功能性流水線。功能性流水線中的每個(gè)階段并行地使用多個(gè)微引擎線程100,并且,在任何特定時(shí)間,每個(gè)微引擎(ME)中的每個(gè)線程被分配單獨(dú)一個(gè)數(shù)據(jù)包來(lái)處理。
一般地,為了重新組裝數(shù)據(jù)幀或?yàn)榱税l(fā)送,信元和數(shù)據(jù)幀需要在一個(gè)數(shù)據(jù)流中保持順序。由于使用了多組線程來(lái)提供并行性和改善吞吐量,通過(guò)協(xié)作線程的仔細(xì)排序來(lái)維護(hù)順序。
參考圖3,顯示了媒體塊接收(RX)單元64的功能性單元和數(shù)據(jù)結(jié)構(gòu)。這個(gè)單元復(fù)制在圖1的媒體塊0和媒體塊1中。RX單元64包括接收管理器110,其包括用來(lái)管理多信道112的信道管理塊111。RX單元64還包括接收緩沖陣列(RBUF)114和狀態(tài)陣列116。狀態(tài)陣列116存儲(chǔ)與RBUF114中每個(gè)項(xiàng)目相關(guān)聯(lián)的狀態(tài)描述表(context)。每個(gè)項(xiàng)目通過(guò)索引來(lái)標(biāo)識(shí),該索引作為RX狀態(tài)的一部分提交到一個(gè)分配的RX線程并被此RX線程返回到RBUF的自由鏈表118中。數(shù)據(jù)被RBUF控制器120放在RBUF116中,并能被線程使用某條指令讀取,該指令指定了陣列偏移量、要讀取的單元的數(shù)目和數(shù)據(jù)將被移動(dòng)到的第一寄存器。
線程通過(guò)將其線程標(biāo)識(shí)符寫到線程自由鏈表122的方法來(lái)指示接收單元它已準(zhǔn)備好來(lái)處理接收到的信元或數(shù)據(jù)幀。這是通過(guò)為它正使用的列表向線程自由鏈表寄存器CSR發(fā)出一個(gè)CSR寫來(lái)達(dá)到的。線程標(biāo)識(shí)符ID在線程自由鏈表122上的出現(xiàn)指示該線程已保留其SRAM讀傳送寄存器來(lái)接收RX狀態(tài)字。線程還能指示RX單元64從RBUF 116中直接將數(shù)據(jù)移動(dòng)到DRAM 34中。
接收硬件以與線程被列隊(duì)在自由鏈表中的次序相同的順序?yàn)樾旁驍?shù)據(jù)包分配線程。在接收單元中會(huì)有多個(gè)線程列表,每個(gè)有其自己的CSR地址。通道管理塊110中的每個(gè)通道被配置使用一個(gè)特定的線程自由鏈表。這使得單個(gè)自由鏈表能夠根據(jù)系統(tǒng)程序員的要求為一個(gè)或多個(gè)通道服務(wù)。還可以有多個(gè)RBUF自由鏈表。每個(gè)通道被配置來(lái)使用其中之一,因此每個(gè)RBUF自由鏈表118能根據(jù)需要為一個(gè)或多個(gè)通道服務(wù)。RBUF控制器120從RBUF自由鏈表118中分配一個(gè)RBUF單元來(lái)保存接收到的數(shù)據(jù),并把RBUF號(hào)(索引)作為接收狀態(tài)一部分傳遞到線程中。一旦線程讀完RBUF單元的內(nèi)容,它通過(guò)向相關(guān)聯(lián)的RBUF自由鏈表CSR地址發(fā)出一個(gè)CSR寫指令將該項(xiàng)目返回到RBUF自由鏈表118中。
RX單元通過(guò)從綁定到那個(gè)RX通道的RBUF自由鏈表中讀取數(shù)據(jù)幀或信元來(lái)分配RBUF單元以保存收到的數(shù)據(jù)幀的頭64字節(jié)(包括前導(dǎo)符)或一個(gè)完整的信元。
任何為數(shù)據(jù)幀配置的通道自動(dòng)地使用DMA引擎124來(lái)將數(shù)據(jù)幀體(頭64字節(jié)之后的包括填充部分的所有字節(jié))存儲(chǔ)到DRAM 34中的緩沖區(qū)。數(shù)據(jù)被寫到起始于64字節(jié)對(duì)齊的緩沖區(qū)指針的64字節(jié)的偏移處,為處理線程留出空間來(lái)在以后插入編輯過(guò)的頭部。
RX單元64包括預(yù)取器126,以從在SRAM 38中DRAM緩沖區(qū)自由鏈表48中預(yù)取DRAM緩沖區(qū)的指針。為效率故,這些指針可以從DRAM緩沖區(qū)鏈表48中猝發(fā)預(yù)取。預(yù)取器還能直接從TX單元接收指向TX單元中用過(guò)的緩沖區(qū)的指針。也就是說(shuō),TX單元能直接循環(huán)用過(guò)的DRAM緩沖區(qū)到RX預(yù)取器126,而不是將它們退回到DRAM緩沖區(qū)列表48。
RX單元還包括就緒單元列表128,它由RBUF控制器120使用來(lái)將完整接收到的信元或數(shù)據(jù)幀投遞到RBUF和/或DRAM,并準(zhǔn)備分配給某個(gè)線程,以及完成這些的分配分配器129。
四個(gè)RX線程自由鏈表的每一個(gè)使線程組以FIFO順序把自己分配給一組端口中的一個(gè)提供服務(wù)。每個(gè)媒體通道被靜態(tài)地配置從這些鏈表中使用線程,每個(gè)鏈表可以為一個(gè)或多個(gè)通道服務(wù)。類似的,有四個(gè)RBUF自由鏈表,用過(guò)的RBUF項(xiàng)目被返回到這里。這表示至多有四個(gè)分配給一個(gè)或一組端口的封閉的緩沖區(qū)池,用類似的靜態(tài)綁定每個(gè)通道在這些鏈表中的一個(gè)上,這樣鏈表就能為一個(gè)或多個(gè)通道服務(wù)。RBUF池使得系統(tǒng)軟件根據(jù)需要在不同的端口中分配這64個(gè)緩沖區(qū),這些端口可能運(yùn)行在根本不同的到達(dá)速率上。由于每個(gè)媒體塊能被分割為至多4個(gè)通道,這些緩沖區(qū)池允許靈活分配資源,并在不同的通道間獨(dú)立的排隊(duì)。
參考圖4,在接收信元或數(shù)據(jù)幀130中一種示例性的事件時(shí)序如下。媒體RX接口110開(kāi)始接收數(shù)據(jù)幀或接收信元到它的內(nèi)部緩沖區(qū)(事務(wù)1,如標(biāo)號(hào)“1”的箭頭指示的)。如果接收到的數(shù)據(jù)單元是幀,接口110分配一個(gè)從DRAM緩沖區(qū)自由鏈表中預(yù)取的緩沖區(qū)(事務(wù)2)。它還從接收通道的RBUF自由鏈表中分配一個(gè)空閑的RBUF單元(事務(wù)3)。接口110從媒體RX接口移動(dòng)信元或數(shù)據(jù)包(事務(wù)4)。頭64字節(jié)被移到已分配的RBUF項(xiàng)目(事務(wù)4a)。如果是數(shù)據(jù)幀,幀的剩余部分被寫入起始于偏移量為64字節(jié)的DRAM緩沖區(qū)(事務(wù)4b)。當(dāng)全部信元或數(shù)據(jù)幀被接收到,狀態(tài)即結(jié)束,并且該單元被投遞到此通道的就緒單元鏈表上(事務(wù)5)。從信道的線程已分配自由鏈表中分配一個(gè)線程(事務(wù)6)。分派器將狀態(tài)推到那個(gè)線程的讀傳遞寄存器中(事務(wù)7)。狀態(tài)包括諸如RBUF索引、幀長(zhǎng)度、媒體特定的比特位(包括特定狀態(tài),如果是信元就包括VCI/VPI,如果是以太網(wǎng)幀就包括以太網(wǎng)CRC)、通道的ID、時(shí)間戳和緩沖區(qū)指針。線程還必須將接收到的頭64字節(jié)中包含的任何非頭部的信息寫回,以在DRAM中完成數(shù)據(jù)包的內(nèi)容。
所分配的線程發(fā)出讀RBUF內(nèi)容的指令(事務(wù)7a)。線程將數(shù)據(jù)從RBUF接收到SRAM的讀轉(zhuǎn)發(fā)寄存器(事務(wù)7b)。在信元的情況下,由于它已經(jīng)有了VCI/VPI,線程只讀取有效載荷??蛇x的,線程還可以從描述符自由鏈表中為數(shù)據(jù)幀分配一個(gè)描述符(事務(wù)7c)。
線程解析頭部、執(zhí)行查找與比較(事務(wù)8)。如果是數(shù)據(jù)幀,線程適當(dāng)?shù)鼐庉嬵^部(事務(wù)8a)。如果執(zhí)行信元SAR,線程將有效載荷組裝到一個(gè)幀緩沖區(qū)內(nèi),并為該信元計(jì)算增量CRC(在過(guò)程中為該幀取得、修改和寫回CRC余數(shù))(事務(wù)8b)。如果線程正在轉(zhuǎn)發(fā)信元,它分配一個(gè)信元緩沖區(qū)并將修改過(guò)的信元寫進(jìn)去(事務(wù)8c)。
如果是數(shù)據(jù)幀,線程必須將編輯過(guò)的頭部寫進(jìn)DRAM緩沖區(qū)來(lái)完成DRAM中幀的映像(事務(wù)9)。寫到DRAM緩沖區(qū)的頭部的長(zhǎng)度可能比收到的頭部長(zhǎng)、短或者相等。
如果轉(zhuǎn)發(fā)數(shù)據(jù)幀或信元,當(dāng)幀完成后,線程把緩沖區(qū)指針或相關(guān)的描述符指針?lè)诺接布芾淼沫h(huán)54中的一個(gè)上,這樣,將它傳遞到TX線程,或到另一個(gè)線程做進(jìn)一步處理,或到通用處理器GPP 24上。如果分配了描述符,在它被轉(zhuǎn)發(fā)前被填到SRAM。當(dāng)這些都完成了,線程通過(guò)將其線程ID寫到線程自由鏈表來(lái)宣布自己可用(事務(wù)11)。線程將RBUF單元返回到其RBUF中(事務(wù)11a)。應(yīng)當(dāng)理解,線程可以選擇在事務(wù)7b之后的任何時(shí)間返回RBUF單元。
一組線程提供處理從某個(gè)通道來(lái)的單獨(dú)一個(gè)數(shù)據(jù)包流或信元流的并行性,但需要以順序的方式,以所處理的信元或數(shù)據(jù)包到達(dá)的順序,存取各通道(per-channel)或各流(per-flow)的特定信息。為了維護(hù)接收的順序,它們還需要按順序地將自己列隊(duì)在自由鏈表上。線程間的排序通過(guò)使用順序互斥鎖,即“s_mutex”來(lái)實(shí)現(xiàn)。
s_mutex保證以特定地順序來(lái)處理數(shù)據(jù)包或信元,并保證對(duì)順序敏感的數(shù)據(jù)結(jié)構(gòu)相應(yīng)地被存取/更新。
參考圖5,描述了一種在多線程環(huán)境中用于協(xié)作線程的串行互斥鎖(s_mutex)方案。有多個(gè)執(zhí)行線程142a,142b,……142n和共享數(shù)據(jù)項(xiàng)144,示為數(shù)據(jù)項(xiàng)144a,144b,……144x。數(shù)據(jù)項(xiàng)可對(duì)應(yīng)于存儲(chǔ)在單個(gè)存儲(chǔ)單元中、或存儲(chǔ)器內(nèi)一區(qū)域中的數(shù)據(jù)。與每個(gè)共享數(shù)據(jù)項(xiàng)144相關(guān)聯(lián)的是對(duì)應(yīng)的連續(xù)互斥體(mutux)146,從而互斥體146a,146b,……146x分別對(duì)應(yīng)于共享數(shù)據(jù)項(xiàng)144a,144b,……144x。
參考圖6,顯示了協(xié)作線程使用的代碼片段150。例中顯示,協(xié)作線程使用兩個(gè)s_mutex,S_mutex(a)和S_mutex(b)分別對(duì)應(yīng)于共享數(shù)據(jù)項(xiàng)“a”和“b”。各線程進(jìn)入S_mutex(a)(“Sa”),執(zhí)行存取共享數(shù)據(jù)“a”的代碼,退出S_mutex(a)。線程可以執(zhí)行多線程安全代碼,即,不使用共享數(shù)據(jù)的代碼。線程進(jìn)入S_mutex(b)(“Sb”),執(zhí)行存取共享數(shù)據(jù)“b”的代碼,退出S_mutex(b)。
參考圖7,時(shí)序圖160闡明了協(xié)作線程存取共享數(shù)據(jù)項(xiàng)“a”和“b”時(shí)使用的串行方式。雖然多個(gè)線程(本例中是4個(gè))可能同時(shí)等待特定的S_mutex(本例中為“Sa”或“Sb”),它們?nèi)匀话凑疹A(yù)定的順序順次的獲得進(jìn)入。從圖7可看到,線程可以以任何順序進(jìn)入“等待”。
在一種串行互斥方法中,鎖(進(jìn)而是受保護(hù)的數(shù)據(jù))的所有權(quán)從當(dāng)前持有者被傳到其后繼者。盡管可能有許多線程在等待獲得鎖的所有權(quán),然而某個(gè)線程僅能從其指定的前任那里接收到鎖的所有權(quán)。因此,在這種方法中,s_mutex所有權(quán)的傳遞可被看作一種令牌傳遞機(jī)制,它使用線程間信令機(jī)制將令牌從前任傳遞到后繼者。在s_mutex實(shí)現(xiàn)中可以使用多種不同的令牌傳遞機(jī)制。
圖8顯示了直接的處理器(或線程)-處理器(或-線程)信令或“門鈴”機(jī)制170。在這種機(jī)制中,“n”個(gè)線程中每一個(gè)都有狀態(tài)寄存器172a,172b,……172n。每個(gè)寄存器172有“x”個(gè)比特位174a,174b,……,174x,每位對(duì)應(yīng)接收令牌的位置。這些位置提供信令機(jī)制,即“門鈴”,也就是說(shuō),一個(gè)門鈴/位對(duì)應(yīng)于“x”個(gè)共享數(shù)據(jù)項(xiàng)的每一項(xiàng)。例如,比特位174b對(duì)應(yīng)于門鈴2。發(fā)送者(前任)執(zhí)行“按門鈴”指令,該指令指定了后繼者線程的線程ID(標(biāo)識(shí)符)和對(duì)應(yīng)于相應(yīng)門鈴的比特位。接收者(后繼者)輪詢其門鈴狀態(tài)寄存器尋找所關(guān)心的比特位,或者在該事件上休眠。例如,假定線程1進(jìn)入“Sb”(對(duì)應(yīng)于門鈴2),完成關(guān)鍵工作并退出“Sb”。當(dāng)線程1退出時(shí),它將代表s-mutex的令牌傳遞到下一線程,例如,根據(jù)一組使用此s-mutex的線程的預(yù)定的線程順序傳遞給線程2。線程1通過(guò)在線程2的門鈴狀態(tài)寄存器中設(shè)定位174b而按響線程2的門鈴,寄存174b(如箭頭176所示)使線程2知道其現(xiàn)在擁有該鎖。當(dāng)線程2在其代碼中“Sb”的互斥體進(jìn)入時(shí),線程2檢查門鈴狀態(tài)寄存器172b中的位174b。若該位已置位,線程2繼續(xù)涉及與由該s-mutex保護(hù)的數(shù)據(jù)項(xiàng)有關(guān)的工作,或者繼續(xù)輪詢(等待)一直到確定該位已置位。這樣的消息系統(tǒng)能完全位于ME(微引擎)內(nèi),而門鈴狀態(tài)寄存器位于本地CSR中,或者門鈴狀態(tài)寄存器可以位于共享的硬件或外部存儲(chǔ)器中。這種類型的令牌傳遞機(jī)制在令牌傳遞中具有相對(duì)低的時(shí)延,但由于它需要使用專門的硬件資源而限制了所支持的s-mutex的數(shù)量。
在可供選擇的線程間信令的實(shí)現(xiàn)中,使用了一種可配置的到處理器(或到線程)的信令機(jī)制,該機(jī)制允許任何線程或處理器把多種信令中的任一種發(fā)送到所使用的任一處理器(或線程)。
還可以使用其它(非令牌傳遞)機(jī)制。例如,如圖9所示,硬件S-mutex監(jiān)控系統(tǒng)或s-mutex分配器180在特定的s-mutex“Sx”的共享地址182上為“n”個(gè)線程142a,142b,……,142n的每一個(gè)提供硬件監(jiān)控器180,即,相應(yīng)的硬件監(jiān)控器181a,181b,……,181n。共享地址182為s-mutex的當(dāng)前擁有者存儲(chǔ)線程ID(標(biāo)識(shí)符)。當(dāng)硬件監(jiān)控器181等待的地址182中被寫入了那個(gè)線程的標(biāo)識(shí)符時(shí),它就促使與其對(duì)應(yīng)的處理器/線程142分別為每個(gè)線程142a,142b,……,142n接收狀態(tài)184(例如,硬件中斷,線程喚醒,輪詢線程等),即184a,184b,……,184n。例如,每個(gè)監(jiān)控器會(huì)把相應(yīng)的監(jiān)控器值185a,185b,……,185n提供給與其耦合的相應(yīng)MUX(多路復(fù)用器)186a,186b,……,186n,并從地址182接收ID,當(dāng)?shù)刂钒鄳?yīng)線程的ID時(shí),使MUX能夠引起信號(hào)184中相應(yīng)的一個(gè)進(jìn)入激活狀態(tài)。當(dāng)前的擁有者通過(guò)將后繼者的標(biāo)識(shí)符放到串行互斥體“x”地址182處來(lái)將互斥體讓給器后繼者。在這種機(jī)制中,線程142a,142b,……,142n所使用的每個(gè)s-mutex都有一個(gè)s-mutex分配器180。
監(jiān)控機(jī)制也可以代之以集中代理。s-mutex所有權(quán)(當(dāng)前s-mutex持有者的線程ID)可存儲(chǔ)在單獨(dú)的寄存器地址中。當(dāng)傳遞所有權(quán)給后繼者時(shí),前任將后繼者的標(biāo)識(shí)符寫到那個(gè)地址。參與排序好的一組線程中的所有線程輪詢這個(gè)地址以進(jìn)入特定的s-mutex,檢查其內(nèi)容以確定所保存的ID是否與它們自身的ID相匹配。這種技術(shù)提供了所需的排序,但導(dǎo)致大量的存儲(chǔ)器訪問(wèn)流量。最多它以存儲(chǔ)器讀操作的時(shí)延為代價(jià)來(lái)獲得鎖的所有權(quán)。
或者,每個(gè)s-mutex的硬件寄存器可以用類似于上述存儲(chǔ)器單元的方式來(lái)輪詢,但需要離處理器較近,從而能更快速地存取。這種實(shí)現(xiàn)將系統(tǒng)內(nèi)s-mutex的數(shù)目限制為可用的硬件寄存器數(shù)目。
如前所討論的,服務(wù)一個(gè)或多個(gè)端口的一組線程互相協(xié)作以實(shí)施排序并使共享數(shù)據(jù)在次序上保持一致。線程使用一種串行互斥體來(lái)協(xié)作以實(shí)施排序。服務(wù)一個(gè)端口以獲得并行性(為了吞吐量)的一組線程在需要時(shí)會(huì)實(shí)施排序,即使處理是并行發(fā)生的。
例如,帶有VP/VC的ATM信元保持嚴(yán)格的次序。同樣,為性能故,TCP也強(qiáng)烈要求流量?jī)?nèi)的數(shù)據(jù)幀保持次序。在信元/幀接收流中,處理流量中的某些功能也按順序發(fā)生,例如CRC余數(shù)管理。一組相互協(xié)作的線程依次排隊(duì)到線程的自由列表中,因此從到達(dá)的流中以相同次序取得所分配的信元和數(shù)據(jù)包。在每個(gè)事件中,可以用s-mutex來(lái)實(shí)施對(duì)共享的、對(duì)順序敏感的關(guān)鍵代碼段的按序存取,還實(shí)施按順序?qū)⑿旁驍?shù)據(jù)包轉(zhuǎn)發(fā)到下一個(gè)處理代理的次序。
參考圖10,闡述了一個(gè)使用s-mutex來(lái)實(shí)現(xiàn)AAL5幀內(nèi)信元的并行處理的例子。例子中使用了4個(gè)不同的s-mutex(串行互斥體)。其中一個(gè)串行互斥體用于維持協(xié)作線程間CRC余數(shù)的相干性,這些協(xié)作線程為來(lái)自相同幀或數(shù)據(jù)包的信元執(zhí)行CRC處理。每個(gè)信元有數(shù)據(jù)幀的一個(gè)片段。CRC的驗(yàn)證或產(chǎn)生(數(shù)據(jù)完整性保護(hù))以信元到達(dá)的次序的順序來(lái)串行化,以產(chǎn)生正確的結(jié)果。另外,CRC的計(jì)算以嚴(yán)格的順序執(zhí)行,以確保屬于相同VC的信元用正確的CRC余數(shù)來(lái)計(jì)算。
在AAL5幀的RX過(guò)程220中,線程完成如下任務(wù)。222當(dāng)線程喚醒時(shí),線程在微引擎SRAM讀傳送寄存器中找到信元狀態(tài),包括DRAM緩沖區(qū)指針和RBUF號(hào)碼。224線程從對(duì)應(yīng)于RBUF號(hào)碼的RBUF項(xiàng)目中取得信元。226線程從信元頭部提取出VCI/VPI,以及228對(duì)VCI/VPI執(zhí)行哈希函數(shù)。230線程對(duì)VC表進(jìn)行哈希搜索以定位與該信元相關(guān)聯(lián)的VC的相關(guān)序號(hào)(“vc_record[seq_num]”)。232線程進(jìn)入第一s-mutex,該s-mutex在線程修改第一s-mutex時(shí)4線程遞增序號(hào),以及238退出第一s-mutex。240如果序號(hào)為‘0’,線程就從數(shù)據(jù)包部件的緩沖區(qū)自由列表中分配一個(gè)緩沖區(qū),更具體地說(shuō)是一個(gè)指針“buf prt”。線程進(jìn)入第二串行互斥體,它用于保護(hù)VC表記錄,該記錄存儲(chǔ)當(dāng)前信元的指針值“vc_record[wrt_ptr]”。244如果此信元是數(shù)據(jù)包中的第一信元,線程將值“48”加到指針值上并記錄該指針值;否則,它使當(dāng)前記錄的值遞增48,值48是每個(gè)ATM信元攜帶的有效載荷的字節(jié)數(shù)。246線程退出第二串行互斥體。248線程進(jìn)入第三串行互斥體。250除非信元是第一信元,否則線程取出存儲(chǔ)在記錄vc_record[residue]內(nèi)的VC表中的CRC余數(shù)。252線程把余數(shù)和CRC信息從信元提供給位于微引擎中的CRC引擎,用于CRC計(jì)算。256線程確定該信元是否為最后一個(gè)。如果信元不是最后一個(gè)信元,則線程進(jìn)行如下操作。258線程從CRC引擎中讀取新的余數(shù),以及260把新的余數(shù)存儲(chǔ)到vc_record(residue]。262線程退出第三串行互斥體。264線程把信元數(shù)據(jù)存儲(chǔ)到部件緩沖區(qū)中的計(jì)算/取出的地址。如果在步驟256確定該信元是最后一個(gè)信元,則線程執(zhí)行如下操作。266線程檢查CRC的有效性,然后268將重組好的數(shù)據(jù)幀傳遞給另一線程或通用處理器做進(jìn)一步的處理,或者傳到TX單元來(lái)發(fā)送。270線程將RBUF單元返回到RBUF自由列表中。272線程進(jìn)入第四串行互斥體,274將其自身的線程標(biāo)識(shí)符排隊(duì)到線程自由列表上,然后276退出第四串行互斥體。第四串行互斥體是一個(gè)點(diǎn),各線程在此點(diǎn)上將自按預(yù)定的順序排隊(duì)到線程自由列表上,以便維持其他串行互斥體的順序使用,從而以按序的協(xié)助組進(jìn)行工作。當(dāng)媒體塊RX_Status信號(hào)指示另一個(gè)信元已經(jīng)被分配給此線程時(shí),線程就休眠。
還有其它使用串行互斥體的應(yīng)用程序示例。例如,在L3轉(zhuǎn)發(fā)中,各線程可以進(jìn)入兩個(gè)串行操作的串行互斥體s-mutex把數(shù)據(jù)幀/信元轉(zhuǎn)發(fā)給處理該流的下一線程,例如,以發(fā)送該數(shù)據(jù)幀;以及將自身按組順序放回到線程的自由列表中。。
串行互斥體能用來(lái)幫助維持?jǐn)?shù)據(jù)包和信元的順序,如上面討論的那樣。通過(guò)提供一種串行操作的有效機(jī)制,可以減少開(kāi)銷,并且相應(yīng)地增加吞吐量。
盡管是在多線程、多處理器的網(wǎng)絡(luò)操作環(huán)境的背景中描述的,但串行互斥機(jī)制也可以應(yīng)用于通用的多線程編程應(yīng)用中。
其它的實(shí)施方式落在所附權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種方法,其特征在于包括將互斥鎖與共享數(shù)據(jù)項(xiàng)相關(guān)聯(lián);及向按順序?qū)蚕頂?shù)據(jù)相執(zhí)行代碼操作的多個(gè)處理代理提供互斥鎖的所有權(quán)。
2.如權(quán)利要求1所述的方法,其特征在于,所述處理代理為執(zhí)行線程。
3.如權(quán)利要求2所述的方法,其特征在于,由執(zhí)行線程所執(zhí)行的代碼處理接收自網(wǎng)絡(luò)的包數(shù)據(jù)的單元,且順序保持包數(shù)據(jù)單元的正確順序。
4.如權(quán)利要求3所述的方法,其特征在于,所述保持正確的順序包括保持轉(zhuǎn)發(fā)的網(wǎng)絡(luò)包的端點(diǎn)到端點(diǎn)順序。
5.如權(quán)利要求2所述的方法,其特征在于,由執(zhí)行線程所執(zhí)行的代碼處理接收自網(wǎng)絡(luò)的包數(shù)據(jù)的單元,且順序保持包數(shù)據(jù)單元處理的正確順序。
6.如權(quán)利要求2所述的方法,其特征在于,代碼被用來(lái)對(duì)屬于包的ATM信元進(jìn)行接收處理,包括CRC計(jì)算,所述共享數(shù)據(jù)項(xiàng)是存儲(chǔ)在存儲(chǔ)位置的CRC計(jì)算值,且順序與在CRC計(jì)算中訪問(wèn)存儲(chǔ)位置的順序保持一致。
7.如權(quán)利要求6所述的方法,其特征在于,所述CRC計(jì)算值是CRC余數(shù)。
8.如權(quán)利要求2所述的方法,其特征在于,所述代碼被用來(lái)對(duì)ATM信元進(jìn)行接收處理,且共享數(shù)據(jù)項(xiàng)為順序號(hào)。
9.如權(quán)利要求2所述的方法,其特征在于,所述提供包括使作為互斥鎖的當(dāng)前持有者的每個(gè)線程能夠根據(jù)順序?qū)⒒コ怄i的所有權(quán)傳遞給后繼線程。
10.如權(quán)利要求9所述的方法,其特征在于,所述使能包括利用線程間信令資源向后繼線程發(fā)信號(hào),表示后繼線程擁有互斥鎖。
11.如權(quán)利要求10所述的方法,其特征在于,所述線程間信令資源包括狀態(tài)寄存器,其存儲(chǔ)每個(gè)線程的互斥鎖所有權(quán)狀態(tài)。
12.如權(quán)利要求2所述的方法,其特征在于,所述使能還包括作為互斥鎖的當(dāng)前所有者的每個(gè)線程在某個(gè)位置存儲(chǔ)一相關(guān)標(biāo)識(shí)符,當(dāng)線程釋放互斥鎖時(shí),該線程存儲(chǔ)與后繼線程相關(guān)的標(biāo)識(shí)符。
13.如權(quán)利要求12所述的方法,其特征在于,所述提供包括使每個(gè)線程都能夠接收表示互斥鎖所有權(quán)的狀態(tài)。
14.如權(quán)利要求12所述的方法,其特征在于,所述使能還包括由其它線程輪詢所述位置,以判定所存儲(chǔ)的標(biāo)識(shí)符是否與輪詢線程的標(biāo)識(shí)符相匹配。
15.如權(quán)利要求12所述的方法,其特征在于,所述與后繼線程相關(guān)的標(biāo)識(shí)符的存儲(chǔ)導(dǎo)致向后繼線程發(fā)送一狀態(tài)。
16.如權(quán)利要求12所述的方法,其特征在于,所述使能還包括觸發(fā)在該狀態(tài)處于睡眠的線程的喚醒。
17.如權(quán)利要求10所述的方法,其特征在于,所述線程間信令資源還包括線程的狀態(tài)指示,表明線程已經(jīng)成為互斥鎖的所有者。
18.一種產(chǎn)品,其特征在于包括一種存儲(chǔ)介質(zhì),在其上存儲(chǔ)了指令,當(dāng)指令被機(jī)器執(zhí)行時(shí)將產(chǎn)生以下結(jié)果將互斥鎖與共享數(shù)據(jù)項(xiàng)相關(guān)聯(lián);和向按順序?qū)蚕頂?shù)據(jù)項(xiàng)執(zhí)行代碼處理的多個(gè)執(zhí)行線程提供互斥鎖的所有權(quán)。
19.如權(quán)利要求18所述的產(chǎn)品,其特征在于,由執(zhí)行線程所執(zhí)行的所述代碼被用來(lái)處理從網(wǎng)絡(luò)中接收的包數(shù)據(jù)的單元,而且順序與包數(shù)據(jù)單元的正確順序保持一致。
20.如權(quán)利要求18所述的產(chǎn)品,其特征在于,由執(zhí)行線程所執(zhí)行的所述代碼被用來(lái)處理從網(wǎng)絡(luò)中接收的包數(shù)據(jù)的單元,而且順序與包數(shù)據(jù)單元處理的正確順序保持一致。
21.一種裝置,其特征在于包括處理器,它包括訪問(wèn)共享數(shù)據(jù)項(xiàng)的處理代理;存儲(chǔ)裝置,它存儲(chǔ)可執(zhí)行代碼以標(biāo)識(shí)哪一個(gè)處理代理?yè)碛谢コ怄i的所有權(quán),包括使處理器進(jìn)行以下步驟的指令改變處理代理可訪問(wèn)的信息,以反映按照順序方式將所有權(quán)從作為當(dāng)前所有者的一個(gè)處理代理向作為后繼者的另一個(gè)處理代理的轉(zhuǎn)移;和至少通知該后后繼者信息已被改變。
22.如權(quán)利要求21所述的裝置,其特征在于,所述處理代理是執(zhí)行線程。
23.如權(quán)利要求22所述的裝置,其特征在于,所述執(zhí)行線程所執(zhí)行的代碼對(duì)從網(wǎng)絡(luò)接收的包數(shù)據(jù)的單元進(jìn)行處理,且順序與包數(shù)據(jù)單元的正確順序保持一致。
24.如權(quán)利要求22所述的裝置,其特征在于,所述執(zhí)行線程所執(zhí)行的代碼被用于對(duì)從網(wǎng)絡(luò)接收的包數(shù)據(jù)的單元進(jìn)行處理,且順序與包數(shù)據(jù)單元的正確順序保持一致。
25.如權(quán)利要求23所述的裝置,其特征在于,所述保持正確的順序包括保持所轉(zhuǎn)送的網(wǎng)路包的端點(diǎn)到端點(diǎn)順序。
26.如權(quán)利要求22所述的裝置,其特征在于,所述執(zhí)行線程所執(zhí)行的代碼對(duì)從網(wǎng)絡(luò)接收的包數(shù)據(jù)的單元進(jìn)行處理,且順序與包數(shù)據(jù)單元處理的正確順序保持一致。
27.如權(quán)利要求22所述的裝置,其特征在于,所述代碼被用來(lái)對(duì)屬于包的ATM信元進(jìn)行接收處理,包括CRC計(jì)算,所述共享數(shù)據(jù)項(xiàng)是存儲(chǔ)在存儲(chǔ)位置上的CRC計(jì)算值,且順序與在CRC計(jì)算期間訪問(wèn)存儲(chǔ)位置的順序保持一致。
28.如權(quán)利要求27所述的裝置,其特征在于,所述CRC計(jì)算值為CRC余數(shù)。
29.如權(quán)利要求22所述的裝置,其特征在于,所述代碼被用來(lái)對(duì)ATM信元進(jìn)行接收處理,且共享數(shù)據(jù)項(xiàng)為順序號(hào)。
30.如權(quán)利要求22所述的裝置,其特征在于,所述提供包括使作為互斥鎖的當(dāng)前持有者的每個(gè)線程能夠按順序?qū)⒒コ怄i的所有權(quán)傳遞給后繼線程。
31.如權(quán)利要求30所述的裝置,其特征在于,所述使能包括用線程間信令資源向后繼線程發(fā)出該后繼線程擁有互斥鎖的信號(hào)。
32.如權(quán)利要求31所述的裝置,其特征在于,所述線程間信令資源包括狀態(tài)寄存器,它存儲(chǔ)每個(gè)線程的互斥鎖所有權(quán)狀態(tài)。
33.如權(quán)利要求22所述的裝置,其特征在于,所述使能還包括每個(gè)作為互斥鎖的當(dāng)前所有者的線程在某位置上存儲(chǔ)一關(guān)聯(lián)標(biāo)識(shí)符,當(dāng)線程釋放互斥鎖時(shí),該線程存儲(chǔ)與后繼線程相關(guān)的標(biāo)識(shí)符。
34.如權(quán)利要求33所述的裝置,其特征在于,所述提供包括使每個(gè)線程都能夠接收表示互斥鎖所有權(quán)的狀態(tài)。
35.如權(quán)利要求33所述的裝置,其特征在于,所述使能還包括其它線程對(duì)位置輪詢,以確定所存儲(chǔ)的標(biāo)識(shí)符是否與輪詢的線程的標(biāo)識(shí)符相匹配。
36.如權(quán)利要求33所述的裝置,其特征在于,存儲(chǔ)與后繼線程相關(guān)的標(biāo)識(shí)符導(dǎo)致向后繼線程發(fā)送一狀態(tài)。
37.如權(quán)利要求33所述的裝置,其特征在于,所述使能還包括觸發(fā)在該狀態(tài)處于睡眠的線程的喚醒。
38.如權(quán)利要求31所述的裝置,其特征在于,所述線程間信令資源還包括線程的狀態(tài)指示,表明線程已經(jīng)成為互斥鎖的所有者。
全文摘要
提供了一種將互斥鎖與共享數(shù)據(jù)項(xiàng)相關(guān)聯(lián)、并向多個(gè)執(zhí)行線程提供互斥鎖所有權(quán)的機(jī)制,這些線程按次序?qū)蚕頂?shù)據(jù)項(xiàng)執(zhí)行代碼操作。
文檔編號(hào)G06F9/00GK1512326SQ200310114380
公開(kāi)日2004年7月14日 申請(qǐng)日期2003年11月12日 優(yōu)先權(quán)日2002年11月12日
發(fā)明者L·B·休斯頓, C·E·那拉德, L B 休斯頓, 那拉德 申請(qǐng)人:英特爾公司