專利名稱:利用有序的加鎖機制來維護諸如分組之類的項目的次序的制作方法
技術(shù)領域:
本發(fā)明的一個實施例涉及通信和計算機系統(tǒng),尤其是路由器、分組交換系統(tǒng)、以及其他設備;更具體地說,一個實施例涉及利用有序加鎖機制來維護項目的次序,這可能包括在有序加鎖機制之間轉(zhuǎn)換。
背景技術(shù):
通信工業(yè)正快速改變,以適應新興技術(shù)和日益增加的客戶需求??蛻魧π聭煤同F(xiàn)有應用的更高性能的需求正驅(qū)動通信網(wǎng)絡和系統(tǒng)提供商采用具有更快速度和更大容量(例如,更寬帶寬)的網(wǎng)絡和系統(tǒng)。在試圖實現(xiàn)這些目標時,許多通信供應商采用的常用方法是使用分組交換技術(shù)。越來越多地公共和專用通信網(wǎng)絡利用各種分組技術(shù)(例如,因特網(wǎng)協(xié)議(IP))被構(gòu)建和擴展。
諸如交換機或路由器之類的網(wǎng)絡設備一般基于一個或多個標準接收、處理、以及轉(zhuǎn)發(fā)或丟棄分組,所述標準包括分組使用的協(xié)議的類型、分組的地址(例如,源,目的地,群組)、所要求的服務類型或質(zhì)量。另外,一般還對分組執(zhí)行一種或多種安全操作。但是在可以執(zhí)行這些操作前,一般必須對分組執(zhí)行分組分類操作。
這些操作消耗時間和資源,所以加速它們的性能的一種方法是使用多個處理器并且并行處理分組。然而,屬于一個分組流的某些分組可能需要按照接收順序從分組處理器轉(zhuǎn)發(fā)甚至處理。此外,維護分組的原始次序與以下需求沖突在分組被處理完時盡可能快地從處理器撤回分組,以便騰空資源以處理更多的分組。需要這樣一種方法,該方法只保持流的關鍵順序,例如但不限于未在不相關的分組之間強加任意和非最優(yōu)順序的順序。
發(fā)明內(nèi)容
本發(fā)明公開了用于利用有序加鎖機制來維持項目次序的方法、設備、數(shù)據(jù)結(jié)構(gòu)、計算機可讀介質(zhì)、機制和裝置等,該維持可以包括在有序加鎖機制之間轉(zhuǎn)換。這些項目可以對應于任何事物,包括但不限于分組、數(shù)據(jù)項、進程、線程等。
實施例采用的鎖的數(shù)目可以變化,并且一般符合應用的需求。鎖可以用來維持項目流的強排序。另外,鎖可以用來引起對項目的排序。例如,鎖可以被轉(zhuǎn)換到多種不同的鎖,這允許相同的順序在不同的鎖內(nèi)仍被保持,同時允許不同鎖的項目以任意順序被處理,例如但不限于被并行處理。類似地,多個鎖可以被轉(zhuǎn)換成單個鎖,這導致在不同鎖中的先前的項目之間排序(例如,一般具有加鎖請求被處理的排序)。
另外,某些實施例可以提供加鎖機制來執(zhí)行原子操作,這些原子操作內(nèi)在或明確地與加鎖項目相關聯(lián)。這種原子動作的示例包括但不限于鎖轉(zhuǎn)換、序列號生成和/或檢查、存儲器操作、數(shù)據(jù)操縱操作等。在一個實施例中,與要執(zhí)行的原子操作相對應的一組指令或者指令的命令隊列、或者其他指示被關聯(lián)有加鎖項目。通過允許加鎖機制執(zhí)行或者致使執(zhí)行這操作,一般可以減少關鍵的等待時間,這是由于這些操作一般可以流水線化在本地執(zhí)行,而不是分布式執(zhí)行。例如,在一個實施例中,這種操作由加鎖機制或者與加鎖機制相關聯(lián)的處理元件執(zhí)行,因此,一般可以減小或消除在執(zhí)行操作之前加鎖機制和鎖請求者之間的通信延遲。
一個實施例標識多個項目中的特定項目,并且在響應中生成對有序鎖的加鎖請求。該有序鎖配置為按照所請求的順序維護與所述加鎖請求相對應的標識符的加鎖隊列。一條或多條指令被關聯(lián)到該特定標識符,并且在該特定標識符到達加鎖隊列的頭部時,執(zhí)行這一條或多條指令。
一個實施例重復標識特定分組,并且在響應中生成對有序鎖的加鎖請求,其中該有序鎖按照所請求的順序維護與加鎖請求相對應的標識符的加鎖隊列。與分組相對應的接受請求被傳輸?shù)皆撚行蜴i。該有序鎖從加鎖隊列的頭部重復移除特定標識符,并且如果先前生成了對應的接受請求則準予與該特定標識符相對應的加鎖接受請求,或者等待直到生成與該特定標識符相對應的加鎖接受請求,然后準予與該特定標識符相對應的加鎖接受請求。
所附權(quán)利要求書具體闡明了本發(fā)明的特征。結(jié)合附圖從下面的具體實施方式
中,可以最好地理解本發(fā)明及其優(yōu)點,在附圖中圖1A是采用一個實施例的示例性系統(tǒng)的框圖;圖1B是在一個實施例中使用的系統(tǒng)或其組件的框圖,所述組件包括但不限于例如分組處理器、鎖機制、鎖管理器、分配器、收集器或資源。
圖2A~2C圖示了在一個實施例中使用的有序鎖;圖3A~3D圖示了在一個實施例中使用的有序鎖;圖4A~4D圖示了在一個實施例中使用的鎖轉(zhuǎn)換的概念;圖5A~5D是圖示了用于利用有序鎖來維護分組次序的無限多個實施例中的一些實施例的流程圖;圖6A是使用有序鎖來維護分組次序的示例性系統(tǒng)的框圖;以及圖6B是圖示了使用有序鎖來維護分組次序的使用有序鎖處理的過程的流程圖。
具體實施例方式
本發(fā)明公開了這樣的方法、設備、數(shù)據(jù)結(jié)構(gòu)、計算機可讀介質(zhì)、機制和裝置等,其用于使用有序加鎖機制來維護項目的次序,該維護可以包括在有序加鎖機制之間轉(zhuǎn)換。這些項目可以是任意項目,包括但不限于分組,并且在這種情形中,使用有序鎖來維護分組的次序的操作尤其可用于路由器、分組交換系統(tǒng)和其他設備。
這里描述的實施例包括各種元素和限制,并且沒有一種元素或限制被設想為是關鍵元素或限制。權(quán)利要求中的每一個整體上單獨地敘述本發(fā)明的一個方面。此外,所述的某些實施例可以包括但不限于系統(tǒng)、網(wǎng)絡、集成電路芯片、嵌入式處理器、ASIC、方法和包含指令的計算機可讀介質(zhì)等。一個或多個系統(tǒng)、設備、組件等可以包括一個或多個實施例,實施例可以包括由相同或不同的系統(tǒng)、設備、組件等執(zhí)行的權(quán)利要求的某些元素或限制。下文所述實施例體現(xiàn)在本發(fā)明范圍和精神內(nèi)的各個方面和配置,同時附示了示例性的非限制配置。
這里所使用的術(shù)語“分組”指信息或數(shù)據(jù)的所有類型的分組或者任意其他單位,包括但不限于固定長度的信元和可變長度的分組,并且每個都可以或者不可以劃分為更小的分組或信元。這里所使用的術(shù)語“分組”也既指分組自身又指分組指示,例如但不限于分組的全部或一部分或者分組頭部、數(shù)據(jù)結(jié)構(gòu)值、指針或索引、或者分組的任意其他部分或直接或間接標識、或者與其相關聯(lián)的信息。例如,路由器常常對分組的一個或多個字段進行操作,尤其是頭部,所以分組的主體通常被存儲在獨立的存儲器中,而分組的頭部被操縱,并且基于對分組(即,在本示例中為分組頭部)進行處理的結(jié)果,轉(zhuǎn)發(fā)或丟棄整個分組。另外,這些分組可以包含一種或多種類型的信息,包括但不限于聲音、數(shù)據(jù)、視頻和音頻信息。術(shù)語“項目”在這里總地用來指分組或任意其他信息或數(shù)據(jù)的單位或片斷、設備、組件、元件或任意其他實體。短語“處理分組”和“分組處理”一般指基于分組內(nèi)容(例如,分組頭部或其他字段)執(zhí)行某些步驟或動作,并且這些步驟或動作可以或者可以不包括修改、存儲、丟棄、和/或轉(zhuǎn)發(fā)分組和/或關聯(lián)數(shù)據(jù)。
術(shù)語“系統(tǒng)”在這里總地用來描述任意數(shù)量的組件、元件、子系統(tǒng)、設備、分組交換元件、分組交換機、路由器、網(wǎng)絡、計算機和/或通信設備或機制、或者它們的組件的組合。術(shù)語“計算機”在這里總地用來描述任意數(shù)量的計算機,包括但不限于個人計算機、嵌入式處理元件和系統(tǒng)、控制邏輯、ASIC、芯片、工作站、主機等。術(shù)語“處理元件”在這里總地用來描述任意類型的處理機制或設備,例如處理器、ASIC、現(xiàn)場可編程門陣列、計算機等。術(shù)語“設備”在這里總地用來描述任意類型的機制,包括計算機或系統(tǒng)或者它們的組件。術(shù)語“任務”和“進程”在這里總地用來描述任意類型的正運行的程序,包括但不限于計算機進程、任務、線程、執(zhí)行的應用、操作系統(tǒng)、用戶進程、設備驅(qū)動、源代碼、機器或其他語言等,并且可以是交互式和/或非交互式、本地執(zhí)行和/或遠程執(zhí)行的、前臺和/或后臺執(zhí)行的、在用戶和/或操作系統(tǒng)地址空間中執(zhí)行的、庫和/或獨立應用的子例程,并且不限于任意特定存儲器分區(qū)技術(shù)。在包括但不限于任意框圖、流程圖和消息序列圖的圖中示出的步驟、連接和對信號及信息的處理可以按照相同的或不同的串行或并行順序執(zhí)行,并且/或者可以由不同的組件和/或進程、線程等執(zhí)行,并且/或者可以通過不同的連接,并且可以與保持在本發(fā)明的范圍和精神內(nèi)的其他實施例中的其他功能組合。此外,術(shù)語“標識”在這里總地用來描述任意方式或機制,用于直接或間接確認某些內(nèi)容,其可以包括但不限于接收、從存儲器提取、確定、定義、計算、生成等。
此外,術(shù)語“網(wǎng)絡”和“通信機制”在這里總地用來描述一種或多種網(wǎng)絡、通信介質(zhì)或通信系統(tǒng),包括但不限于因特網(wǎng),專用或公共電話、蜂窩、無線、衛(wèi)星、線纜、局域、城域和/或廣域網(wǎng),線纜、電連接、總線等,以及消息傳遞、進程間通信、共享存儲器等內(nèi)部通信機制。術(shù)語“消息”在這里總地用來描述信息片斷,其可以是可以不是但是一般是經(jīng)由任意類型的一個或多個通信機制傳輸?shù)摹?br>
術(shù)語“存儲機制”包括任意類型的存儲器、存儲設備或其他機制,用于保存任意格式的指令或數(shù)據(jù)?!坝嬎銠C可讀介質(zhì)”是一個可擴展的術(shù)語,包括任意存儲器、存儲設備、存儲機制、以及其他存儲和信令機制,包括接口和設備,例如網(wǎng)絡接口卡和其中的緩沖器、以及任意通信設備和接收和發(fā)送的信號,以及計算機化的系統(tǒng)可以解釋、接收和/或發(fā)送的其他當前和正在開發(fā)的技術(shù)。術(shù)語“存儲器”包括任意隨機訪問存儲器(RAM)、只讀存儲器(ROM)、閃存、集成電路、以及/或者其他存儲器組件或元件。術(shù)語“存儲設備”包括任意固態(tài)存儲介質(zhì)、盤驅(qū)動、盤、連網(wǎng)的服務、帶驅(qū)動、以及其他存儲設備。存儲器和存儲設備可以存儲由處理元件和/或控制邏輯執(zhí)行的計算機可執(zhí)行指令,以及由處理元件和/或控制邏輯操縱的數(shù)據(jù)。術(shù)語“數(shù)據(jù)結(jié)構(gòu)”是一個可擴展的術(shù)語,指任意數(shù)據(jù)元素、變量、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫,以及/或者一種或多種有組織的方案,這些方案可以被用于到數(shù)據(jù)來幫助解釋數(shù)據(jù)或者對數(shù)據(jù)執(zhí)行操作,例如但不限于存儲器位置或器件、集合、隊列、樹、堆、列表、鏈接列表、數(shù)組、表、指針等。數(shù)據(jù)結(jié)構(gòu)一般保存在存儲機制中,術(shù)語“指針”和“鏈接”在這里總地用來標識某些機制,該機制用于引用或標識另一個元素、組件、或者其他實體,并且這些可以包括但不限于引用存儲器或其他存儲機制或者其中的位置、數(shù)據(jù)結(jié)構(gòu)中的索引、值等。術(shù)語“關聯(lián)存儲器”是一個可擴展的術(shù)語,并且指任意類型已知或?qū)頃_發(fā)出來的關聯(lián)存儲器,包括但不限于二進制和三進制內(nèi)容可尋址存儲器、散列表、TRIE和其他數(shù)據(jù)結(jié)構(gòu)等。另外,術(shù)語“關聯(lián)存儲器單元”可以包括但不限于一個和多個關聯(lián)存儲器器件或者它們的一部分,包括但不限于條目集合、區(qū)域、段、庫、頁、塊等。
術(shù)語“一個實施例”在這里用來指一個特定的實施例,其中每次引用“一個實施例”可以指不同的實施例,并且在這里描述關聯(lián)的特征、元素和/或限制時重復使用該術(shù)語,這并不是要建立每個并且所有實施例都必須包括的關聯(lián)的特征、元素和/或限制的累積集合,盡管一個實施例一般可能包括所有這些特征、元素和/或限制。另外,短語“用于xxx的裝置”一般包括包含用于執(zhí)行xxx的計算機可執(zhí)行指令的計算機可讀介質(zhì)。
另外,術(shù)語“第一”、“第二”等在這里一般用來標示不同的單元(例如,第一元素、第二元素)。在這里使用這些術(shù)語并不一定隱含著諸如一個單元或事件在另一個之前發(fā)生或到來這里的排序,而是提供一種機制來區(qū)分特定單元。另外,使用單數(shù)名詞是非限制性的,利用單數(shù)名詞一般包括一個或多個特定事物,而不是剛好一個(例如,使用詞“存儲器”一般指一個或多個存儲器,而不用必須指定“存儲器或多個存儲器”、或“一個或多個存儲器”、或“至少一個存儲器”等)。此外,短語“基于x”和“響應于x”用來指示項目x的最小集合,從該集合導出或引致某些內(nèi)容,其中“x”是可擴展的,并且不一定描述對其執(zhí)行了該操作的項目的完整列表等。另外,短語“耦合到”用來指示兩個元件或設備直接的直接或間接連接的某些級別,其中一個或多個耦合設備修改或不修改被耦合的信號或被傳輸?shù)男畔ⅰPg(shù)語“子集”用來指示一個集合的全部或少于全部元素的群組。術(shù)語“子樹”用來指示樹的全部或一部分。此外,術(shù)語“或”在這里用來標識選擇聯(lián)合(conjunctive)項目中的一個或多個,包括全部。
一個實施例標識特定的項目,并且在響應中生成對有序鎖的加鎖請求。有序鎖被配置為按照請求的順序維護與加鎖請求相對應的標識符的加鎖隊列。一條或多條指令與特定的標識符相關聯(lián),并且在特定的標識符到達加鎖隊列的頭部時,執(zhí)行這一條或多條指令。
在一個實施例中,在加鎖請求后執(zhí)行的操作中,指令被與特定的標識符相關聯(lián)。在一個實施例中,在與第二加鎖請求相應的另一個標識符被添加到加鎖隊列后執(zhí)行的操作中,指令被與特定標識符相關聯(lián)。在一個實施例中,當對特定項目執(zhí)行加鎖請求時,加鎖隊列包含與其他項目相對應的多個其他標識符。在一個實施例中,一條或多條指令包括鎖轉(zhuǎn)換指令,用于將特定項目與第二有序鎖相關聯(lián)。在一個實施例中,特定項目是分組。在一個實施例中,一條或多條指令包括分組收集指令。在一個實施例中,特定分組的一個或多個字段被處理來標識第二有序鎖,并且一條或多條指令包括鎖轉(zhuǎn)換指令,用于將該特定項目與第二有序鎖相關聯(lián)。
一個實施例重復標識出特定的分組,并且在響應中生成對有序鎖的加鎖請求,其中該有序鎖按照請求的順序維護與加鎖請求相對應的標識符的加鎖隊列。與分組相對應的接受請求被傳輸?shù)接行蜴i。有序鎖從加鎖隊列的頭部重復移除特定標識符,并且如果先前已產(chǎn)生了對應的接受請求,則向特定標識符授予加鎖接受請求,或者等待直到生成與該特定標識符相對應的加鎖接受請求,然后授予與該特定標識符相對應的加鎖接受請求。
在一個實施例中,加鎖請求是非阻塞性的,并且接受請求是阻塞性的。在一個實施例中,響應于授予與分組相對應的加鎖接受請求,產(chǎn)生對特定第二鎖的第二加鎖請求,該第二加鎖請求與該分組相對應,并且該特定第二鎖基于該分組的內(nèi)容標識出。
一個實施例包括多個分組處理器、有序鎖管理器和分配器。有序鎖管理器配置為接收鎖請求,接收與鎖請求相對應的指令請求,并且在前一個鎖請求被釋放后按照接收到鎖請求的順序處理與鎖請求相對應的指令。分配器配置為接收分組,向有序鎖管理器請求與分組相對應的加鎖請求,并且將分組分配到一個或多個處理器。所述一個或多個處理器中的至少一個配置為將與分組相對應的一組指令傳輸?shù)接行蜴i管理器。
在一個實施例中,該組指令包括分組收集指令。在一個實施例中,該組指令包括用于執(zhí)行鎖釋放的指令。在一個實施例中,該組指令包括轉(zhuǎn)換指令,用于執(zhí)行第二加鎖請求。
一個實施例包括一個或多個加鎖機制、多個分組處理器、以及分組分配器。這一個和多個加鎖機制操作多個有序鎖,包括根有序鎖和多個第二有序鎖,每個有序鎖包括用于存儲加鎖項目的隊列。每個加鎖機制配置為接收加鎖請求,將對加鎖請求的指示放置到有序鎖的對應隊列中,并且接收加鎖接受和加鎖釋放并對它們作出反應。分組分配器配置為接收分組,對每個分組作出根有序加鎖請求,并且將每個分組分配給分組處理器。每個分組處理器配置為接收特定分組,接受與對特定分組的根有序加鎖請求相對應的根有序鎖,處理該分組來標識第二鎖,作出與該第二鎖相對應的加鎖請求,并且釋放該根有序鎖。在一個實施例中,每個分組處理器配置為在接受根有序鎖后并且釋放該根有序鎖之前作出與第二鎖相對應的鎖請求,其中所述根有序鎖與對特定分組的根有序加鎖請求相對應。
圖1A是采用一個實施例的示例性系統(tǒng)的框圖。圖中示出一個分組交換系統(tǒng),該交換系統(tǒng)具有由分組交換構(gòu)架103互連的分組處理器101~102和104~105。在一個實施例中,分組處理器101~102和104~105中的一個或多個使用有序加鎖機制來維護所需分組次序。
圖1B是在一個實施例中使用的系統(tǒng)或其組件120的框圖,所述組件例如但不限于分組處理器、鎖機制、鎖管理器、分配器、收集器或者資源。在一個實施例中,系統(tǒng)或組件120執(zhí)行與這里示出或描述的流程圖之一相對應的一個或多個過程。
在一個實施例中,組件120包括處理元件121、存儲器122、存儲設備123和接口124,它們一般經(jīng)由一個或多個通信機制129(出于說明目的被示作總線)耦合,其中接口124用于接收和發(fā)送分組、項目和/或其他信息。組件120的各種實施例可以包括更多或更少的元件。組件120的操作一般由處理元件121利用存儲器122和存儲設備123控制,來執(zhí)行一個或多個調(diào)度任務或進程。存儲器122是一種計算機可讀介質(zhì),并且一般包括隨機訪問存儲器(RAM)、只讀存儲器(ROM)、閃存、集成電路和/或其他存儲器組件。存儲器122一般存儲將由處理元件121執(zhí)行的計算機可執(zhí)行指令,和/或由處理元件121操縱用來實現(xiàn)根據(jù)本發(fā)明的功能的數(shù)據(jù)。存儲設備123是另一類計算機可讀介質(zhì),并且一般包括固態(tài)存儲介質(zhì)、盤驅(qū)動、盤、聯(lián)網(wǎng)的服務、帶驅(qū)動和其他存儲設備。存儲設備123一般存儲將由處理元件121執(zhí)行的計算機可執(zhí)行指令,和/或由處理元件121操縱用來實現(xiàn)根據(jù)本發(fā)明的功能的數(shù)據(jù)。
項目的次序可以利用有序鎖來維護。這些項目可以與任何內(nèi)容相對應,但是利用有序鎖來維護分組的次序可能尤其有用。一個實施例利用加鎖請求、接受和釋放協(xié)議。一個實施例將指令與加鎖請求相關聯(lián),以使在獲得鎖后,加鎖機制執(zhí)行關聯(lián)的指令或者使關聯(lián)的指令被執(zhí)行,這是由于對指令的關聯(lián)隱含了對鎖的接受請求(或者可被明確地請求)。在一些應用中,不要求保留分組的全部次序的排序,而是僅保留項目的全部次序的某些子次序之間的排序,這可以通過將最初的根有序鎖(維護整個項目流的次序)轉(zhuǎn)換為多種其他的鎖(每種維護不同的項目子流的次序)來實現(xiàn)。
加鎖機制的一個實施例利用以下基本的可擴展操作·request(lock_id)-上下文請求鎖,“上下文”一般指狀態(tài)和資源,包括與正被處理的分組或其他實體相關聯(lián)的處理器引擎、線程等。如果所請求的鎖可用(即,沒有其他上下文擁有它),則lock_grant被發(fā)送給發(fā)出請求的上下文。但是,如果該鎖由另一個上下文擁有,則新請求被排入隊列,直到該請求移動到隊列的開頭,并且lock_grant被發(fā)送。這是一個非阻塞操作,即,在該請求之后但是在接受之前的任何代碼都不是臨界區(qū)(critical section)的一部分,并且可以在接收到lock_grant之前被執(zhí)行。
·accept(lock_id)-這是一個阻塞操作,該操作使發(fā)出請求的上下文阻塞,直到其獲得所需鎖(即,已接收到lock_grant)。在該接受之后但是在釋放之前執(zhí)行的任何代碼都是該鎖的臨界區(qū)。
·release(lock_id)-這是釋放鎖,并使該鎖對其他請求上下文可用的操作。
圖2A~2C圖示了在一個實施例中使用的有序鎖200。轉(zhuǎn)到圖2A,鎖機制201執(zhí)行加鎖操作,并且可以以無數(shù)種方式實現(xiàn),并且但不限于處理元件和存儲器、離散邏輯、定制ASIC等。在一個實施例中,有序鎖200利用一個或多個加鎖隊列202(或者任何其他機制來維護接收到的順序請求),一般所支持的每個鎖對應于一個加鎖隊列。在一個實施例中,有序鎖200僅服務單個鎖,因此不需要鎖ID來標識特定的鎖(例如,根鎖,第二鎖等)。在一個實施例中。有序鎖200服務多個鎖,特定的有序鎖一般由鎖ID(例如,唯一的值等)或者經(jīng)由其他機制標識。鎖請求隊列202可以以無數(shù)種方式實現(xiàn),例如,在不同的存儲器、移位寄存器、單個存儲器中,并且每個隊列元素利用鏈表或其他數(shù)據(jù)結(jié)構(gòu)等標識。
圖2B圖示了在一個實施例中用于處理鎖請求的鎖機制過程。處理開始于處理框220。在處理框222中,如果確定出鎖請求被接收到或者以其他方式被識別出,則在處理框224中,與所識別出的鎖請求相對應的標識符被放置在與該請求相對應的鎖請求隊列的末尾(例如,如果加鎖機制支持多于一個鎖,則該鎖由鎖ID或者其他機制標識)。然后處理返回處理框222。這樣,加鎖機制維護了接收到加鎖請求的順序。
圖2C圖示了在一個實施例中用來處理由加鎖機制支持的每個隊列的鎖項目/請求的過程。處理開始于處理框240。在處理框242中,判斷隊列中是否存在鎖標識符,然后在處理框244中,識別出與在該隊列的頭部的鎖請求相對應的指示。在過程框248中,如果確定出已接收到與該標識符相對應的接受請求,則在處理框252中,該接受請求被準予。然后該處理在處理框254處等待,直到接收到對應的釋放請求,然后在處理框256中從隊列的頭部移除該指示,然后處理返回處理框242。否則,在處理框250中,如果確定出已接收到與標識符相對應的釋放請求,則處理直接前進到處理框256。否則,處理返回處理框248。
加鎖機制的一個實施例使用以下基本的可擴展操作·request(lock_id)-該上下文請求鎖。如果所請求的鎖可用(即,沒有其他上下文擁有它),則lock_grant被發(fā)送給請求上下文。但是,如果該鎖由另一個上下文擁有,則新請求被排入隊列,直到該請求移動到隊列的開頭,才發(fā)送lock_grant。這是一個非阻塞操作,即,在該請求之后但是在接受之前的任何代碼都不是臨界區(qū)的一部分,并且可以在接收到lock_grant之前被執(zhí)行。
·attach(operation+attributions,convert+dest_flow_id)-該attach操作實際上包括隱含的接受(即,到達隊列的開頭找到當前flow_id),然后跟隨著do_action和/或轉(zhuǎn)換到新的flow_id,最后釋放當前的鎖。實施例可以使用不同的attach操作。
圖3A~3D圖示了在一個實施例中使用的有序鎖300。轉(zhuǎn)到圖3A,鎖機制301執(zhí)行加鎖操作,并且可以以無數(shù)種方式實現(xiàn),包括但不限于處理元件和存儲器、離散邏輯、定制ASIC等。在一個實施例中,有序鎖300使用一個或多個加鎖隊列302(或者任何其他機制來維護接收到的順序請求),一般所支持的每個鎖對應于一個加鎖隊列。在一個實施例中,有序鎖300僅服務單個鎖,因此不需要鎖ID來標識特定的鎖(例如,根鎖,第二鎖等)。在一個實施例中。有序鎖300服務多個鎖,特定的有序鎖一般由鎖ID(例如,唯一的值等)或者經(jīng)由其他機制來標識。鎖請求隊列302可以以無數(shù)種方式實現(xiàn),例如,在不同的存儲器、移位寄存器、單個存儲器中,并且每個隊列元素利用鏈接列表或其他數(shù)據(jù)結(jié)構(gòu)等標識。如圖所示,指令305與接收到的鎖請求相關聯(lián),例如,由(一個或多個)鎖請求隊列302中存儲的鎖標識符標識出的那些鎖請求。可以利用無數(shù)種技術(shù)將這些指令與鎖請求相關聯(lián),并且這些指令可以存儲在隊列302中或者在一個或多個其他數(shù)據(jù)結(jié)構(gòu)中。
圖3B圖示了在一個實施例中用于處理鎖請求的鎖機制過程。處理開始于處理框320。在處理框322中,如果確定出鎖請求被接收到或者以其他方式被識別出,則在處理框324中,與所識別出的鎖請求相對應的標識符被放置在與該請求相對應的鎖請求隊列的末尾(例如,如果加鎖機制支持多于一個鎖,則該鎖是由鎖ID或者其他機制標識出的)。然后處理返回處理框322。這樣,加鎖機制維護接收到加鎖請求的順序。
圖3C圖示了在一個實施例中用來由加鎖機制處理指令請求的過程。處理開始于處理框340。在處理框342中,如果確定出指令請求被識別出(例如,接收到等),則在處理框344中,這些指令被關聯(lián)到鎖請求(例如,加鎖機制中的鎖標識符,或者經(jīng)由任何其他機制)。
圖3D圖示了在一個實施例中用來處理由加鎖機制支持的每個隊列的鎖項目/請求的過程。處理開始于處理框360。在處理框362中,如果確定出在隊列中存在鎖標識符,則在處理框364中,識別出與在該隊列的頭部的鎖請求相對應的指示。在已識別出與該標識符相對應的指令(例如,現(xiàn)在或先前接收到或者以其他方式標識出的)之前,處理都停留在366。在已識別出對應的指令后,在處理框368中,這些指令由加鎖機制和/或其他處理機制執(zhí)行。
這些指令可以是阻塞性的(例如,在前進到下一條指令或其他操作之前該鎖必須完成)或者非阻塞性的(例如,發(fā)起操作和前進到其他指令或操作)。在一個實施例中,所執(zhí)行的(一條或多條)指令可以包括發(fā)起操作然后阻塞,直到該操作完成。在一個實施例中,所執(zhí)行的(一條或多條)指令可以包括發(fā)起操作但是直到該操作完成都不阻塞。在一個實施例中,所執(zhí)行的(一條或多條)指令可以包括發(fā)起操作并延遲發(fā)送確認指示到鎖請求者,直到該操作完成,同時前進到隊列中的其他鎖項目。例如,可能發(fā)起從不同存儲器位置和/或存儲器收集分組的多個部分的操作,而確認操作可能被延遲,直到對存儲器的一次或多次訪問已完成以使(一個或多個)存儲器位置可以被覆寫。
在處理框370中,確認消息被發(fā)送到請求者,該確認消息被立即發(fā)送或延遲發(fā)送直到某些其他操作完成,并且在這種確認被發(fā)送之前可能繼續(xù)處理隊列中的更多的加鎖項目。然后處理返回到處理框362。從一個方面看,接收指令充當隱含的鎖接受請求,或者甚至在一個實施例中,接受是與鎖請求或其指示相關聯(lián)的指令之一。
圖4A~4D圖示了在一個實施例中使用的鎖轉(zhuǎn)換的概念。注意,所使用的鎖轉(zhuǎn)換的數(shù)量和類型是可擴展的,并且可以隨實施例而不同,以匹配應用的需求。鎖可以被用來維護對項目流的強排序。另外,鎖可以用來引起對項目的排序。例如,鎖可以被轉(zhuǎn)換到多種不同的鎖,這允許相同的順序在不同的鎖內(nèi)仍被保持,同時允許不同鎖的項目以任意順序被處理,例如但不限于被并行處理。類似地,多個鎖可以被轉(zhuǎn)換成單個鎖,這導致在不同鎖中的先前的項目之間排序(例如,一般具有加鎖請求被處理的排序)。
例如,到達接口的分組可能每個都以它們被接收到的順序向單個根鎖作出加鎖請求,或者向多個根鎖之一作出加鎖請求(例如,每個接收端口、協(xié)議類型、分組類型等一個加鎖請求,或者它們的一些組合一個加鎖請求)。這這維持了分組的順序,因為這些鎖按照作出請求的順序被處理(例如,在一個實施例中是分組到達順序)。這些鎖然后可以基于所要求的對分組的處理或者分組中包括的某些值或者其他數(shù)據(jù)結(jié)構(gòu)等而被轉(zhuǎn)換為不同的鎖。例如,某些分組流必須維持排序。通過將與該流的分組相對應的所有鎖從根鎖轉(zhuǎn)換到相同的其他鎖,可以維持該排序。類似地,第二鎖(或者第n鎖,其中,n是用于該事物的任意整數(shù),因為可能的加鎖轉(zhuǎn)換數(shù)目是無限的)可以被轉(zhuǎn)換到另一種鎖,例如與輸出接口或端口相對應的一個鎖,從而可以維持原始排序(即使從其他鎖轉(zhuǎn)換到相同的鎖也如此,因為該鎖維持了每個流中的相對順序)。
首先轉(zhuǎn)到圖4A,該圖示出了有序鎖轉(zhuǎn)換400的一個示例。項目流401由有序鎖402處理(為了簡單標識為“根鎖”)。當根鎖402被特定標識符/項目獲取時,如果其與項目流401內(nèi)的流動(也稱作子序列或子流)相關聯(lián),則與該流動相關聯(lián)的有序鎖404~406被標識出,并且對該第二有序鎖404~406作出加鎖請求。注意,有序鎖404~406可以利用一個或多個有序鎖機制實現(xiàn),并且每個鎖利用鎖ID或其他機制隱含標識出或明確標識出。因此,由根有序鎖404維護的初始流內(nèi)的相關排序被傳送到每個流動有序鎖404~406,并且與項目相關聯(lián)的鎖從根有序鎖402被“轉(zhuǎn)換”到流動有序鎖404~406中的一個或多個。
圖4B示出了在一個實施例中由加鎖機制使用的這種處理。處理開始于420,然后前進到處理框422,其中所獲取的根鎖中的鎖(例如,在對應隊列的開頭或者其他排序機制處明確或隱含接受的指示)被標識出。注意,處理可能需要等待直到鎖被獲取。接下來,在處理框424中,作出與所請求的鎖相對應的流動有序鎖中的鎖請求。然后處理返回處理框422。
類似地,如圖4C所示,可以作出從多個流動鎖444~446到另一個有序鎖442(為了簡單標識為“根鎖”)的鎖轉(zhuǎn)換440,以產(chǎn)生項目流441。當多個流動鎖444~446之一被特定的標識符/項目獲取,并且期望轉(zhuǎn)換操作轉(zhuǎn)換到根鎖442時,對該第二鎖442作出加鎖請求。注意,有序鎖442~446可以利用一個或多個有序鎖機制實現(xiàn),并且每個鎖利用鎖ID或其他機制隱含標識出或明確標識出。
圖4D圖示了在一個實施例中由加鎖機制使用的這種處理。該處理開始于處理框460,然后前進到處理框462,其中所獲取的有序鎖中的鎖(例如,在對應隊列的開頭或者其他排序機制處明確或隱含接受的指示)被標識出。注意,處理可能需要等待直到鎖被獲取。接下來,在處理框464中,作出有序鎖中的鎖請求。然后處理返回處理框462。因此,在通過將多個流動有序鎖轉(zhuǎn)換到單個根流動有序鎖從而執(zhí)行該處理時,可以保持與這多個流動有序鎖相對應的項目的原始順序。
圖5A~5D是圖示了用于利用有序鎖來維持分組次序的無數(shù)實施例中的一些的流程圖。首先轉(zhuǎn)到圖5A,處理開始于處理框500,然后前進到處理框502,其中分組被接收到,并且作出對應的有序鎖請求。接下來,在處理框504中,該分組被處理。在處理框506中,作出對該有序鎖的接受請求。在處理框508中,當該鎖被獲取到后,分組被進一步處理、丟棄、發(fā)送等,然后該鎖被釋放。通過等待直到鎖被獲取,原始排序得到了保持。如處理框510所示,然后該流程圖的處理完成。
圖5B圖示了在一個實施例中使用的用于利用有序加鎖機制處理分組的過程。該處理開始于處理框520,然后前進到處理框522,其中分組被接收到,并且作出對應的有序鎖請求。接下來,在處理框524中,與分組相關聯(lián)的第二流動被標識出。例如,原始分組流可以是在接口上接收到的所有分組,并且特定的流動可以基于源地址、目的地地址、協(xié)議類型、服務質(zhì)量需求、群組標識符和/或在分組中包含的或在分組外的任何其他信息而被標識出。在一個實施例中,所有項目屬于第二流動,其可以包括不與另一個特定的流動相關聯(lián)的默認的分組流動。在一個實施例中,僅某些項目屬于第二流動,并且一般允許不屬于第二流動的那些分組作為處理過的繼續(xù)。
在處理框526中,作出對根有序鎖的接受請求,然后一般繼續(xù)處理分組。在處理框528中,在鎖被獲取后,作出對與標識出的第二流動相對應的第二有序鎖的鎖請求。在處理框530中,當對分組的處理結(jié)束后,作出對對應的第二有序鎖的接受請求,然后在處理框532中,當獲取了第二有序鎖后,分組被進一步處理、丟棄、發(fā)送等,然后該鎖被釋放。如處理框534所示,該流程圖的處理完成。
圖5C的流程圖的處理開始于處理框560,然后前進到處理框562,其中分組被接收到,并且作出對應的有序鎖請求。接下來,在處理框524中,該分組被處理。在處理框566中,當對分組的處理完成后,一組一條或多條指令被關聯(lián)到鎖請求。注意,響應于這些指令要執(zhí)行的原子操作是可擴展的,并且一般根據(jù)應用需要定義。例如,這些原子操作可以包括這樣的操作包括但不限于鎖轉(zhuǎn)換、序列號生成和/或檢查、檢錯和/或校正、存儲器操作、數(shù)據(jù)操縱操作、發(fā)起另一個操作等。在處理框568中,在獲取到鎖后,這些指令一般由鎖機制或者其他機制執(zhí)行來進一步處理、丟棄或收集/發(fā)送分組、轉(zhuǎn)換根鎖請求等,然后該鎖被釋放。通過在執(zhí)行這些指令之前等待直到獲取到鎖,原始排序得到了保持。如處理框570所示,然后該流程圖的處理完成。
圖5D圖示了在一個實施例中使用的用于利用有序加鎖機制處理分組的過程。該處理開始于處理框580,然后前進到處理框582,其中分組被接收到,并且作出對應的根有序鎖請求。接下來,在處理框584中,與分組相關聯(lián)的第二流動被標識出。在處理框586中,當對分組的處理完成后,一組一條或多條指令被關聯(lián)到鎖請求,其中這些指令包括轉(zhuǎn)換操作指令。在處理框588中,在獲取到鎖后,這些指令由鎖機制或者其他機制執(zhí)行,來將根鎖轉(zhuǎn)換到所標識出的第二鎖。在處理框590中,當對分組的處理完成后,一組一條或多條指令被關聯(lián)到第二鎖請求。在處理框592中,在獲取到鎖后,這些指令一般由鎖機制或者其他機制執(zhí)行來進一步處理、丟棄或收集/發(fā)送分組、轉(zhuǎn)換根鎖請求等,然后該鎖被釋放。如處理框594所示,然后該流程圖的處理完成。
圖6A是利用有序鎖來維持分組次序的示例性系統(tǒng)的框圖。分組601由分組處理器600接收到,并且一般經(jīng)由復用器602存儲到分組存儲器604中(同時分組處理器允許分組從組件624流出)。分配器606負責將分組分配給分組處理引擎610中的一個或多個,用于執(zhí)行實際的分組處理。該處理可以利用緩存612、DRAM控制器614和外部存儲器615、查找控制器616、關聯(lián)存儲器控制器618和關聯(lián)存儲器619,以及/或者一般經(jīng)由耦合的資源網(wǎng)絡608訪問的其他組件。分配器606還通知鎖管理器和重排序器620對分組的分配,并且作出根鎖請求。分組處理引擎610執(zhí)行鎖請求、接受、釋放、結(jié)合鎖管理器和重排序器620將指令附加/關聯(lián)到鎖請求。在適當?shù)臅r刻,收集機制622被通知應當例如基于與鎖請求相關聯(lián)的收集指令收集并發(fā)送分組。收集指令一般定義如何積累或收集已處理過的分組的多個部分以便形成處理過的分組,并且可以包括發(fā)送分組的語義。所收集到的分組被傳輸?shù)骄彌_、隊列、調(diào)度器、存儲器控制組件624,以如分組629所示發(fā)送處理過的分組。
現(xiàn)在結(jié)合圖6B描述分組處理器600和/或其他分組處理器的一個實施例的操作。該操作的處理開始于處理框640,然后前進到處理框642,其中分組被接收到,并且被存儲到分組存儲器中,然后告知分配器該分組已到達及該分組的位置。在處理框644中,分配器標識出分配來處理該分組的分組處理引擎和可能的線程。在處理框646中,分配器向分組處理引擎通知該分配,并且作出與所接收到的分組所屬的流相對應的根加鎖請求,例如,在其上接收到該分組的接口。在一個實施例中,該流基于分組內(nèi)容被標識出,但是其他實施例使分配器對分組執(zhí)行的處理最小化。分配器還針對該分組代表所分配的分組處理引擎向所管理器作出加鎖請求。在處理框648中,所分配的分組處理引擎從分組存儲器提取該分組的相關部分(例如,頭部、以及可能其他字段),然后處理該信息和/或其他信息來標識出該分組被關聯(lián)到的第二流動/鎖(如果有的話),然后繼續(xù)處理該分組。
在處理框650中,如果確定出要執(zhí)行轉(zhuǎn)換操作,則在處理框652中,分組處理引擎將轉(zhuǎn)換指令關聯(lián)/附加到根鎖請求,然后在獲取到根鎖后,例如對應的標識符到達根鎖隊列的開頭,鎖管理器執(zhí)行(或者使另一個機制執(zhí)行)指令來轉(zhuǎn)換該鎖,然后釋放該根鎖。
接下來,在處理框654中,當對分組的處理完成后,分組處理引擎將收集指令附加到第二或根鎖請求(取決于是否執(zhí)行了有序鎖轉(zhuǎn)換操作)。在獲取到該鎖后,鎖管理器執(zhí)行(或者使另一個機制執(zhí)行)指令來收集分組的字段,以形成要發(fā)送的分組,然后轉(zhuǎn)發(fā)該分組。如處理框534所示,然后該流程圖的處理完成。
考慮到本發(fā)明的原理可以被應用到的許多可能的實施例,將意識到這里參考附圖所述的實施例和它們的多個方面僅是說明性的,不應當理解為限制本發(fā)明的范圍。例如,對于本領域技術(shù)人員將清楚,許多處理框的操作可以被重排序來在其他操作之前、之后或者基本并發(fā)執(zhí)行。另外,在各種實施例中也可以使用許多不同形式的數(shù)據(jù)結(jié)構(gòu)。這里所述的發(fā)明設想所有這種實施例,只要它們可以在所附權(quán)利要求及其等同物的范圍內(nèi)。
權(quán)利要求
1.一種用于維持排序的方法,所述方法包括識別多個項目中的特定項目,并且在響應中生成對與所述特定項目相對應的有序鎖的加鎖請求,其中所述有序鎖被配置為按照所請求的順序維護與所述加鎖請求相對應的標識符的加鎖隊列,并且將與所述加鎖請求相對應的特定標識符放置到所述加鎖隊列的末尾;將一條或多條指令關聯(lián)到與所述加鎖請求相對應的特定標識符;以及識別出在所述加鎖隊列的頭部的特定標識符,并且在響應中執(zhí)行所述一條或多條指令。
2.如權(quán)利要求1所述的方法,其中,所述將一條或多條指令關聯(lián)到所述特定標識符的步驟是在與第二加鎖請求相對應的另一個標識符被添加到所述加鎖隊列之后被執(zhí)行的。
3.如權(quán)利要求1所述的方法,其中,在所述生成對有序鎖的加鎖請求的步驟被執(zhí)行時,所述加鎖隊列包含與其他項目相對應的多個其他標識符。
4.如權(quán)利要求1所述的方法,其中,所述一條或多條指令包括鎖轉(zhuǎn)換指令,用于將所述特定項目與第二有序鎖相關聯(lián)。
5.如權(quán)利要求1所述的方法,其中,所述多個項目中的每個項目包括分組。
6.如權(quán)利要求5所述的方法,其中,所述一條或多條指令包括分組收集指令。
7.如權(quán)利要求5所述的方法,包括對所述特定分組的一個或多個字段進行處理來識別第二有序鎖;并且其中所述一條或多條指令包括鎖轉(zhuǎn)換指令,用于將所述特定項目與所述第二有序鎖相關聯(lián)。
8.如權(quán)利要求1所述的方法,包括發(fā)送釋放鎖確認消息;其中所述一條或多條指令包括發(fā)起操作;并且其中所述發(fā)送釋放鎖確認消息的步驟是在所述操作的執(zhí)行完成后被執(zhí)行的。
9.如權(quán)利要求1所述的方法,包括發(fā)送釋放鎖確認消息;其中所述一條或多條指令包括發(fā)起操作;并且其中所述發(fā)送釋放鎖確認消息的操作是在所述操作的執(zhí)行完成前被執(zhí)行的。
10.一種用于維持分組排序的方法,所述方法包括重復識別多個分組中的特定分組,并且在響應中生成對與所述特定分組相對應的有序鎖的加鎖請求,其中所述有序鎖按照所請求的順序維護與所述加鎖請求相對應的標識符的加鎖隊列;將與所述多個分組中的分組相對應的接受請求傳輸?shù)剿鲇行蜴i;以及從所述加鎖隊列的頭部重復移除特定標識符,并且如果先前生成了對應的所述接受請求則準予與所述特定標識符相對應的加鎖接受請求,或者等待直到生成與所述特定標識符相對應的加鎖接受請求,然后準予與所述特定標識符相對應的加鎖接受請求。
11.如權(quán)利要求10所述的方法,其中,所述加鎖請求是非阻塞性的,并且所述接受請求是阻塞性的。
12.如權(quán)利要求10所述的方法,包括響應于所述準予與分組相對應的加鎖接受請求,而轉(zhuǎn)發(fā)所述分組。
13.如權(quán)利要求10所述的方法,包括響應于所述準予與分組相對應的加鎖接受請求,對多個第二有序鎖中的特定的第二鎖作出與所述分組相對應的第二加鎖請求,所述特定的第二鎖基于所述分組的內(nèi)容而被識別出。
14.如權(quán)利要求10所述的方法,其中,所述與多個分組中的第一分組相對應的加鎖請求在與所述多個分組中的第二分組相對應的加鎖請求之前生成,并且與所述第二分組相對應的接受請求在與所述第一分組相對應的接受請求之前作出,并且與所述第一分組相對應的接受請求在與所述第二分組相對應的接受請求之前被準予。
15.一種用于處理分組的裝置,所述裝置包括多個分組處理器;有序鎖管理器,其被配置為接收鎖請求,接收與所述鎖請求相對應的指令請求,并且按照接收到所述鎖請求的順序在接收到所述鎖請求的順序中的前一個鎖請求被釋放后,對與所述鎖請求相對應的指令進行處理;以及分配器,其耦合到所述多個分組處理器和所述有序鎖管理器,其被配置為接收分組,向所述有序鎖管理器作出與所述分組相對應的加鎖請求,并且將所述分組分配給所述多個分組處理器中的一個或多個處理器;其中所述一個或多個處理器中的至少一個處理器被配置為將與所述分組相對應的一組指令傳輸?shù)剿鲇行蜴i管理器。
16.如權(quán)利要求15所述的裝置,其中,所述一組指令包括分組收集指令。
17.如權(quán)利要求16所述的裝置,其中,所述一組指令包括用于執(zhí)行鎖釋放的指令。
18.如權(quán)利要求15所述的裝置,其中,所述一組指令包括用于執(zhí)行第二加鎖請求的轉(zhuǎn)換指令。
19.如權(quán)利要求15所述的裝置,其中,所述一組指令包括用于執(zhí)行鎖釋放請求的指令。
20.一種用于處理分組的裝置,所述裝置包括一個或多個加鎖機制,用于操作多個有序鎖,所述多個有序鎖中的每個有序鎖包括用于存儲加鎖項目的隊列,所述一個或多個加鎖機制中的每個加鎖機制被配置為接收加鎖請求,將對所述加鎖請求的指示放置到所述多個有序鎖的對應隊列中,接收加鎖接受和加鎖釋放并對所述加鎖接受和加鎖釋放作出反應,所述多個有序鎖包括根有序鎖和第二有序鎖;多個分組處理器;分組分配器,其被配置為接收分組,針對所述分組中的每個作出根有序加鎖請求,以及將所述分組中的每個分配給所述多個分組處理器;所述多個分組處理器中的每個分組處理器被配置為接收特定分組,接受與針對所述特定分組的根有序加鎖請求相對應的根有序鎖,處理所述分組來識別第二鎖,作出與所述第二有序鎖相對應的加鎖請求,以及釋放所述根有序鎖。
21.如權(quán)利要求20所述的裝置,其中,所述每個分組處理器被配置為,在所述接受與針對所述特定分組的根有序加鎖請求相對應的根有序鎖之后,但在所述釋放根有序鎖之前,執(zhí)行所述作出與所述第二有序鎖相對應的加鎖請求的步驟。
22.一種用于維持排序的裝置,所述裝置包括用于識別多個項目中的特定項目,并且在響應中生成對與所述特定項目相對應的有序鎖的加鎖請求的裝置,其中所述有序鎖被配置為按照所請求的順序維護與所述加鎖請求相對應的標識符的加鎖隊列、并且將與所述加鎖請求相對應的特定標識符放置到所述加鎖隊列的末尾;用于將一條或多條指令關聯(lián)到與所述加鎖請求相對應的特定標識符的裝置;以及用于識別在所述加鎖隊列的頭部的特定標識符,并且在響應中執(zhí)行所述一條或多條指令的裝置。
23.如權(quán)利要求22所述的裝置,其中,所述用于將一條或多條指令關聯(lián)到與所述加鎖請求相對應的特定標識符的裝置包括用于在與第二加鎖請求相對應的另一個標識符被添加到所述加鎖隊列之后將一條或多條指令關聯(lián)到所述特定標識符的裝置。
24.如權(quán)利要求22所述的裝置,其中,所述一條或多條指令包括鎖轉(zhuǎn)換指令,用于將所述特定項目與第二有序鎖相關聯(lián)。
25.如權(quán)利要求22所述的裝置,其中,所述多個項目中的每個項目包括分組。
26.如權(quán)利要求25所述的裝置,其中,所述一條或多條指令包括分組收集指令。
27.如權(quán)利要求25所述的裝置,包括用于對所述特定分組的一個或多個字段進行處理來識別第二有序鎖的裝置;并且其中所述一條或多條指令包括鎖轉(zhuǎn)換指令,用于將所述特定項目與所述第二有序鎖相關聯(lián)。
28.一種用于維持分組排序的裝置,所述裝置包括用于重復識別多個分組中的特定分組,并且在響應中生成對與所述特定分組相對應的有序鎖的加鎖請求的裝置,其中所述有序鎖按照所請求的順序維護與所述加鎖請求相對應的標識符的加鎖隊列;用于將與所述多個分組中的分組相對應的接受請求傳輸?shù)剿鲇行蜴i的裝置;以及用于從所述加鎖隊列的頭部重復移除特定標識符,并且如果先前生成了對應的所述接受請求則準予與所述特定標識符相對應的加鎖接受請求,或者等待直到生成與所述特定標識符相對應的加鎖接受請求,然后準予與所述特定標識符相對應的加鎖接受請求的裝置。
29.如權(quán)利要求28所述的裝置,其中,所述加鎖請求是非阻塞性的,并且所述接受請求是阻塞性的。
30.如權(quán)利要求28所述的裝置,包括用于響應于所述準予與分組相對應的加鎖接受請求而轉(zhuǎn)發(fā)所述分組的裝置。
31.如權(quán)利要求28所述的裝置,包括用于響應于所述準予與分組相對應的加鎖接受請求,對多個第二有序鎖中的特定的第二鎖作出與所述分組相對應的第二加鎖請求的裝置;以及用于基于所述分組的內(nèi)容識別所述特定的第二鎖的裝置。
32.如權(quán)利要求28所述的裝置,其中,與所述多個分組中的第一分組相對應的加鎖請求在與所述多個分組中的第二分組相對應的加鎖請求之前生成;并且與所述第二分組相對應的接受請求在與所述第一分組相對應的接受請求之前作出;并且與所述第一分組相對應的接受請求在與所述第二分組相對應的接受請求之前被準予。
33.一種包含計算機可執(zhí)行指令的計算機可讀介質(zhì),所述計算機可執(zhí)行指令用于執(zhí)行用于維持排序的步驟,所述步驟包括識別多個項目中的特定項目,并且在響應中生成對與所述特定項目相對應的有序鎖的加鎖請求,其中所述有序鎖被配置為按照所請求的順序維護與所述加鎖請求相對應的標識符的加鎖隊列,并且將與所述加鎖請求相對應的特定標識符放置到所述加鎖隊列的末尾;將一條或多條指令關聯(lián)到與所述加鎖請求相對應的特定標識符;以及識別在所述加鎖隊列的頭部的特定標識符,并且在響應中執(zhí)行所述一條或多條指令。
34.如權(quán)利要求33所述的計算機可讀介質(zhì),其中,所述將一條或多條指令關聯(lián)到所述特定標識符在與第二加鎖請求相對應的另一個標識符被添加到所述加鎖隊列之后被執(zhí)行。
35.如權(quán)利要求33所述的計算機可讀介質(zhì),其中,在所述生成對有序鎖的加鎖請求被執(zhí)行時,所述加鎖隊列包含與其他項目相對應的多個其他標識符。
36.如權(quán)利要求33所述的計算機可讀介質(zhì),其中,所述一條或多條指令包括鎖轉(zhuǎn)換指令,用于將所述特定項目與第二有序鎖相關聯(lián)。
37.如權(quán)利要求33所述的計算機可讀介質(zhì),其中,所述多個項目中的每個項目包括分組。
38.如權(quán)利要求37所述的計算機可讀介質(zhì),其中,所述一條或多條指令包括分組收集指令。
39.如權(quán)利要求37所述的計算機可讀介質(zhì),其中,所述步驟包括對所述特定分組的一個或多個字段進行處理來標識出第二有序鎖;并且其中所述一條或多條指令包括鎖轉(zhuǎn)換指令,用于將所述特定項目與所述第二有序鎖相關聯(lián)。
40.一種包含計算機可執(zhí)行指令的計算機可讀介質(zhì),所述計算機可執(zhí)行指令用于執(zhí)行用于維持分組排序的步驟,所述步驟包括重復識別多個分組中的特定分組,并且在響應中生成對與所述特定分組相對應的有序鎖的加鎖請求,其中所述有序鎖按照所請求的順序維護與所述加鎖請求相對應的標識符的加鎖隊列;將與所述多個分組中的分組相對應的接受請求傳輸?shù)剿鲇行蜴i;以及從所述加鎖隊列的頭部重復移除特定標識符,并且如果先前生成了對應的所述接受請求則準予與所述特定標識符相對應的加鎖接受請求,或者等待直到生成與所述特定標識符相對應的加鎖接受請求,然后準予與所述特定標識符相對應的加鎖接受請求。
41.如權(quán)利要求40所述的計算機可讀介質(zhì),其中,所述加鎖請求是非阻塞性的,并且所述接受請求是阻塞性的。
42.如權(quán)利要求40所述的計算機可讀介質(zhì),其中所述步驟包括響應于所述授予與分組相對應的加鎖接受請求,轉(zhuǎn)發(fā)所述分組。
43.如權(quán)利要求40所述的計算機可讀介質(zhì),其中所述步驟包括響應于所述授予與分組相對應的加鎖接受請求,對多個第二有序鎖中的特定的第二鎖作出與所述分組相對應的第二加鎖請求,所述特定的第二鎖基于所述分組的內(nèi)容而被識別出。
44.如權(quán)利要求40所述的計算機可讀介質(zhì),其中,與所述多個分組中的第一分組相對應的加鎖請求在與所述多個分組中的第二分組相對應的加鎖請求之前生成,并且與所述第二分組相對應的接受請求在與所述第一分組相對應的接受請求之前作出,并且與所述第一分組相對應的接受請求在與所述第二分組相對應的接受請求之前被準予。
45.如權(quán)利要求40所述的計算機可讀介質(zhì),其中,所述一條或多條指令包括發(fā)起操作;并且其中所述步驟包括在對所述操作的執(zhí)行完成后發(fā)送釋放鎖確認消息。
46.如權(quán)利要求40所述的計算機可讀介質(zhì),其中,所述一條或多條指令包括發(fā)起操作;并且其中所述步驟包括在對所述操作的執(zhí)行完成前發(fā)送釋放鎖確認消息。
全文摘要
可以利用有序鎖來維持項目次序。這些項目可以對應于任何事物,但是利用有序鎖來維持分組次序可能尤其有用。一種實現(xiàn)方式利用鎖請求、接受和釋放協(xié)議(圖5B)。一種實現(xiàn)方式將指令與加鎖請求相關聯(lián),由于指令的關聯(lián)隱含了對鎖的接受請求(或者可以被明確地請求)(526),所以使得在獲取到鎖后加鎖機制執(zhí)行關聯(lián)的指令或者致使關聯(lián)的指令被執(zhí)行。在一些應用中,不要求保留整個分組序列的排序,而是僅要求保留整個分組序列的某些子序列之間的排序,這可以通過將初始根有序鎖(維持整個項目流的次序)轉(zhuǎn)換為各種其他鎖(每個維持不同項目子流的次序)來實現(xiàn)。
文檔編號H04L12/56GK1879368SQ200480033472
公開日2006年12月13日 申請日期2004年9月30日 優(yōu)先權(quán)日2003年11月12日
發(fā)明者約翰·J·小威廉斯, 約翰·安德魯·費戈哈特, 肯尼思·哈維·波特 申請人:思科技術(shù)公司