緩沖資源管理方法和電信設(shè)備的制作方法
【專利摘要】本公開涉及無鎖緩沖資源管理方案。在所提出的方案中,緩沖池被配置為具有分配列表和去分配列表。所述分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;以及頭指針,指向位于分配列表頭部的緩沖對象。所述去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;頭指針,指向位于去分配列表開頭的緩沖對象;以及尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針。
【專利說明】緩沖資源管理方法和電信設(shè)備
【技術(shù)領(lǐng)域】
[0001]本公開涉及資源管理的無鎖方案,具體涉及無鎖緩沖資源管理方案以及采用該方案的電信設(shè)備。
【背景技術(shù)】
[0002]在電信設(shè)備(如BS(基站)和/或交換機)中,總是需要管理其中的緩沖資源。例如,在LTE (長期演進)eNB (演進型節(jié)點B)中,與空中接口相比,SI處的傳入/傳輸分組是并發(fā)異步過程。通常,存在兩個分離的任務(wù),一個通過SI接口上的套接字接收或發(fā)送并向無線UP(用戶面)(roCP/RLC/MAC)棧傳遞分組,另一個根據(jù)調(diào)度信息由UP棧中的分組生成MAC (媒體訪問控制)PDU (分組數(shù)據(jù)單元),并在空中接口上發(fā)送。
[0003]圖1示出了 LTE eNB中的示例產(chǎn)出方和消耗方模型。(SI接口上的)套接字任務(wù)是消耗方,分配來自池的緩沖對象以保持來自Si接口的分組并將其傳送至UP棧,(空中接口上的)另一任務(wù)是產(chǎn)出方,在PDU通過接口發(fā)送后將緩沖對象釋放回池。緩沖對象是在兩個任務(wù)間流動的分組的容器,因此在緩沖池中循環(huán)以便重用。此時,出現(xiàn)以下常見問題:如何在這樣的多線程執(zhí)行環(huán)境中確保緩沖池的數(shù)據(jù)完整性。
[0004]確保產(chǎn)出方-消耗方模型中的數(shù)據(jù)完整性的常見方法是M,即,強制緩沖池在多線程之間的串行訪問,以確保數(shù)據(jù)完整性。
[0005]鎖機制通常由OS (操作系統(tǒng))提供,從而可以確保原子態(tài),如互斥體、旗語。每當任意任務(wù)希望訪問緩 沖池(無論分配還是去分配),其總是需要首先取得鎖。如果鎖已被另一任務(wù)擁有,當前任務(wù)將必須中止其執(zhí)行,直到所有者將鎖釋放。
[0006]鎖機制將不可避免地引入額外的任務(wù)切換。在一般情況下,其不會對總體性能引起較多影響。然而,在某種關(guān)鍵的實時環(huán)境中,任務(wù)切換的開銷不可忽略。例如,在LTE eNB中,調(diào)度TTI僅1ms,而一個任務(wù)切換將消耗大約20 μ S,并且一輪任務(wù)中止和繼續(xù)需要至少兩個任務(wù)切換過程,即40 μ S,這成為對LTE調(diào)度性能的顯著影響,在大業(yè)務(wù)量下尤其如此。
[0007]通常,基帶應(yīng)用在便于多個任務(wù)并行執(zhí)行以實現(xiàn)高性能的多核硬件平臺上運行。然而,鎖機制妨礙這樣的并行模型,由于鎖的實質(zhì)恰恰強制串行執(zhí)行以確保數(shù)據(jù)完整性。即使擁有鎖的間隔極小,串行執(zhí)行也將對運行上多核平臺上的應(yīng)用引起極大影響,并且可能成為潛在的性能瓶頸。
【發(fā)明內(nèi)容】
[0008]為了解決上述問題中的至少一個,本公開提供了無鎖緩沖資源管理方案以及采用該方案的電信設(shè)備。
[0009]根據(jù)本公開的第一方案,提供了一種緩沖資源管理方法,其中,緩沖池被配置為具有分配列表和去分配列表。所述分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;以及頭指針,指向位于分配列表頭部的緩沖對象。所述去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;頭指針,指向位于去分配列表開頭的緩沖對象;以及尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針。在初始化中,去分配列表的頭指針為空,去分配列表的尾指針指向去分配列表的頭指針自身。所述緩沖資源管理方法可以包括以下接管動作的步驟:將去分配列表的頭指針賦值給分配列表的頭指針;將去分配列表的頭指針清空;以及令去分配列表的尾指針指向去分配列表的頭指針自身。
[0010]在一個實施例中,所述緩沖資源管理方法還可以包括以下步驟:確定分配列表是否為空;如果分配列表為空,確定去分配列表是否為空;以及如果去分配列表不為空,執(zhí)行所述接管動作的步驟。所述緩沖資源管理方法還可以包括以下步驟:如果分配列表不為空,將位于分配列表開頭的緩沖對象解除鏈接。所述緩沖資源管理方法還可以包括以下步驟:如果去分配列表為空,分配來自堆的多個緩沖對象,并將所述多個緩沖對象鏈接至分配列表。
[0011]在另一實施例中,所述緩沖資源管理方法還可以包括以下回收動作的步驟:令位于去分配列表結(jié)尾的緩沖對象的下一指針指向新的釋放的緩沖對象,其中,去分配列表結(jié)尾的下一指針由去分配列表的尾指針尋址;以及將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。所述緩沖資源管理方法還可以包括以下后調(diào)整動作的步驟:在新的釋放的緩沖對象鏈入去分配列表后,確定去分配列表的頭指針是否為空;以及如果去分配列表的頭指針為空,令去分配列表的尾指針指向去分配列表的頭指針自身。所述緩沖資源管理方法還可以包括以下重回收動作的步驟:在所述后調(diào)整動作后,確定分配列表的頭指針是否為空以及新的釋放的緩沖對象是否仍處于釋放狀態(tài);以及如果分配列表的頭指針為空且新的釋放的緩沖對象仍處于釋放狀態(tài),再次執(zhí)行回收動作的步驟。
[0012]作為示例,接管動作的步驟和回收動作的步驟能夠在任意位置交錯。
[0013]根據(jù)本公開的 第二方面,提供了一種緩沖資源管理方法,其中,緩沖池被配置為具有分配列表和去分配列表。所述分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;以及頭指針,指向位于分配列表開頭的緩沖對象。所述去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;頭指針,指向位于去分配列表開頭的緩沖對象;以及尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針。在初始化中,去分配列表的頭指針為空,去分配列表的尾指針指向去分配列表的頭指針自身。所述緩沖資源管理方法可以包括以下回收動作的步驟:令位于去分配列表結(jié)尾的緩沖對象的下一指針指向新的釋放的緩沖對象,其中,去分配列表結(jié)尾的下一指針由去分配列表的尾指針尋址;以及將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。
[0014]在一個實施例中,所述緩沖資源管理方法還可以包括以下后調(diào)整動作的步驟:在新的釋放的緩沖對象鏈入去分配列表后,確定去分配列表的頭指針是否為空;以及如果去分配列表的頭指針為空,令去分配列表的尾指針指向去分配列表的頭指針自身。所述緩沖資源管理方法還可以包括以下重回收動作的步驟:在所述后調(diào)整動作后,確定分配列表的頭指針是否為空以及新的釋放的緩沖對象是否仍處于釋放狀態(tài);以及如果分配列表的頭指針為空且新的釋放的緩沖對象仍處于釋放狀態(tài),再次執(zhí)行回收動作的步驟。
[0015]根據(jù)本公開的第三方面,提供了一種具有用于輔助電信設(shè)備中的緩沖資源管理的計算機可讀指令的計算機可讀存儲介質(zhì),所述指令能夠由計算設(shè)備執(zhí)行,以執(zhí)行根據(jù)本公開第一和第二方面中任一項所述的方法。
[0016]根據(jù)本公開的第四方面,提供了一種包括緩沖池的電信設(shè)備,其中,所述緩沖池被配置為具有去分配列表。所述去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象,頭指針,指向位于去分配列表開頭的緩沖對象,以及尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針。
[0017]在一個實施例中,在初始化中,去分配列表的頭指針為空,去分配列表的尾指針指向去分配列表的頭指針自身。
[0018]在另一實施例中,所述緩沖池還被配置為具有分配列表,并且所述分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象,以及
[0019]頭指針,指向位于分配列表頭部的緩沖對象。
[0020]在又一實施例中,所述電信設(shè)備還可以包括處理器,被配置為執(zhí)行以下接管動作的步驟:將去分配列表的頭指針賦值給分配列表的頭指針;將去分配列表的頭指針清空;以及令去分配列表的尾指針指向去分配列表的頭指針自身。
[0021]在另一實施例中,所述處理器還可以被配置為執(zhí)行以下步驟:確定分配列表是否為空;如果分配列表為空,確定去分配列表是否為空;以及如果去分配列表不為空,執(zhí)行所述接管動作的步驟。所述處理器還可以被配置為執(zhí)行以下步驟:如果分配列表不為空,將位于分配列表開頭的緩沖對象解除鏈接。所述處理器還可以被配置為執(zhí)行以下步驟:如果去分配列表為空,分配來自堆的多個緩沖對象,并將所述多個緩沖對象鏈接至分配列表。
[0022]在又一實施例中,所述處理器還可以被配置為執(zhí)行以下回收動作的步驟:令位于去分配列表結(jié)尾的緩沖對象的下一指針指向新的釋放的緩沖對象,其中,去分配列表結(jié)尾的下一指針由去分配列表的尾指針尋址;以及將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。
[0023]或者備選地,所述電信設(shè)備還可以包括處理器,被配置為執(zhí)行以下回收動作的步驟:令位于去分配列表結(jié)尾的緩沖對象的下一指針指向新的釋放的緩沖對象,其中,去分配列表結(jié)尾的下一指針由去分配列表的尾指針尋址;以及將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。
[0024]此外,所述處理器還可以被配置為執(zhí)行以下后調(diào)制動作的步驟:在新的釋放的緩沖對象鏈入去分配列表后,確定去分配列表的頭指針是否為空;以及如果去分配列表的頭指針為空,令去分配列表的尾指針指向去分配列表的頭指針自身。所述處理器還可以被配置為執(zhí)行以下重回收動作的步驟:在所述后調(diào)整動作后,確定分配列表的頭指針是否為空以及新的釋放的緩沖對象是否仍處于釋放狀態(tài);以及如果分配列表的頭指針為空且新的釋放的緩沖對象仍處于釋放狀態(tài),再次執(zhí)行回收動作的步驟。
[0025]作為示例,接管動作的步驟和回收動作的步驟能夠在任意位置交錯。
[0026]作為另一示例,所述電信設(shè)備可以是基站(BS)、交換機或演進型節(jié)點B (eNB)。
【專利附圖】
【附圖說明】
[0027]通過以下結(jié)合附圖對本公開的非限制實施例的詳細描述,本公開的上述以及其他目的、特征和優(yōu)勢將更加清楚,附圖中:
[0028] 圖1是一產(chǎn)出方和一消耗方模型的示意圖。[0029]圖2示出了具有其緩沖對象、頭和尾的示例分配列表和示例去分配列表(又稱“空閑列表”)。
[0030]圖3是示出了緩沖對象的示意圖。
[0031 ] 圖4示出了示例消耗方任務(wù)的流程圖。
[0032]圖5示出了示例產(chǎn)出方任務(wù)的流程圖。
[0033]圖6示出了具有緩沖丟失檢測的示例產(chǎn)出方任務(wù)的流程圖。
【具體實施方式】
[0034]以下,將根據(jù)附圖描述本公開的實施例。在以下描述中,一些特定實施例僅用于描述的目的,其不應(yīng)理解為對本公開的任何限制而是其示例。當可能使本公開的理解模糊時,將省略傳統(tǒng)結(jié)構(gòu)和構(gòu)造。
[0035]根據(jù)現(xiàn)有技術(shù),逖機制引入額外的任務(wù)切換開銷并妨礙并行執(zhí)行,本公開的一個目標恰是移除鎖但仍確保數(shù)據(jù)完整性。
[0036]由于現(xiàn)代OS理論已證明M機制僅是解決多任務(wù)環(huán)境中資源爭用的一種可行方法。然而,該理論僅針對一般情況,在一些特殊情況下,鎖可能不再必要。如圖1所示的有關(guān)產(chǎn)出方和消耗方情況僅是這樣的情況之一,并且該情況具有以下特征:
[0037].僅兩個并行任務(wù)可用 [0038]與具有多于兩個任務(wù)的一般情況相比,當前產(chǎn)出方和消耗方情況僅具有兩個任務(wù)。
[0039].一個用于讀取另一個用于寫入
[0040]與任一任何能夠讀取和寫入的一般情況相比,當前產(chǎn)出方主要向緩沖池寫入,而消耗方主要從緩沖池讀取。
[0041 ] 如果僅存在兩個任務(wù)并且每個任務(wù)向緩沖池執(zhí)行不同的操作,可以通過認真設(shè)計數(shù)據(jù)結(jié)構(gòu)和處理過程使兩個任務(wù)訪問緩沖池的不同部分,而不使用鎖。
[0042]為了滿足上述目標,可以遵循以下設(shè)計原理中的至少一個。
[0043]1.對不同任務(wù)分離關(guān)鍵數(shù)據(jù)結(jié)構(gòu)
[0044]雖然不使用鎖,仍可以使用隔離數(shù)據(jù)結(jié)構(gòu)的方法,其能夠較大程度地確保數(shù)據(jù)完整性。
[0045]例如,在一個鏈表結(jié)構(gòu)中,鏈表頭將成為兩個任務(wù)同時訪問的關(guān)鍵變量,因此不可能確保其完整性。但是如果針對各個任務(wù)采用兩個分離的列表,將極大降低沖突的可能性。
[0046]然而,有時,同時訪問仍不可避免,并且因此需要引入更多其他技術(shù)。
[0047]2.使用盡可能少的指令來訪問那些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)
[0048]當訪問關(guān)鍵數(shù)據(jù)結(jié)構(gòu)時,通常采用if-then-else模式,即,首先檢查某一條件,然后根據(jù)結(jié)果操作數(shù)據(jù)結(jié)構(gòu)。然而,這樣的模式占用較多的CPU指令,進而增加了確保數(shù)據(jù)完整性的難度。代碼指令越少,沖突可能性越低。因此,最好盡力通過認真設(shè)計數(shù)據(jù)結(jié)構(gòu)和處理過程采用統(tǒng)一的處理邏輯而不對關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進行條件檢查。
[0049]3.當同時訪問關(guān)鍵數(shù)據(jù)結(jié)構(gòu)之一不可避免時,最好來自不同任務(wù)的操作保持彼此兼容。
[0050]不論如何認真設(shè)計數(shù)據(jù)結(jié)構(gòu),兩個任務(wù)操作相同數(shù)據(jù)結(jié)構(gòu)的事實始終發(fā)生。不采用鎖同步機制,兩個任務(wù)對數(shù)據(jù)結(jié)構(gòu)的執(zhí)行順序是隨機的,因此結(jié)果將變得不可預(yù)測。因此,最好避免來自不同任務(wù)的沖突操作。此處,示例中的“兼容”指具有相同結(jié)構(gòu)的讀和寫或?qū)懞妥x,即使兩個任務(wù)同時訪問數(shù)據(jù)結(jié)構(gòu),其也能產(chǎn)生確定的結(jié)果。
[0051]4.當必須使用條件檢查時,最好一旦檢查為真就保持條件不變。
[0052]一般而言,不論如何認真設(shè)計處理過程,條件檢查都不可避免。由于條件檢查不是原子操作,可能在檢查和對應(yīng)操作之間出現(xiàn)未料到的任務(wù)切換,進而條件可能在任務(wù)繼續(xù)其執(zhí)行后改變,引起數(shù)據(jù)損壞。因此,如果不使用鎖,最好確保一旦條件被檢查為真或假其自身就保持不變,即使任務(wù)切換確實在檢查和后續(xù)操作之間發(fā)生。
[0053]在本公開的一個實施例中,提供了一種無鎖資源沖突解決方案。在該方法中,緩沖池被配置為具有分配列表和去分配列表。所述分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;以及頭指針,指向位于分配列表頭部的緩沖對象。所述去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;頭指針,指向位于去分配列表開頭的緩沖對象;以及尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針。在初始化中,去分配列表的頭指針為空,去分配列表的尾指針指向去分配列表的頭指針自身。所述緩沖資源管理方法可以包括以下接管動作的步驟:將去分配列表的頭指針賦值給分配列表的頭指針;將去分配列表的頭指針清空;以及然后令去分配列表的尾指針指向去分配列表的頭指針自身。在執(zhí)行接管動作的不同之前,所述緩沖資源管理方法可以包括以下步驟:確定分配列表是否為空;如果分配列表為空,確定去分配列表是否為空;以及否則如果去分配列表不為空,通過執(zhí)行所述接管動作的步驟,分配列表將接管去分配列表。如果去分配列表為空,分配來自堆的多個緩沖對象,并將所述多個緩沖對象鏈接至分配列表;此后,返回至消耗方任務(wù)。緩沖資源 管理方法還可以包括以下回收動作的步驟:令位于去分配列表結(jié)尾的緩沖對象的下一指針(由去分配列表的尾指針尋址)指向新的釋放的緩沖對象;以及將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。所述緩沖資源管理方法還可以包括上述回收后的以下后調(diào)制動作的步驟:在新的釋放的緩沖對象鏈接至去分配列表的結(jié)尾后,如果去分配列表的頭指針變?yōu)榭?接管發(fā)生),令去分配列表的尾指針指向去分配列表的頭指針自身,以與接管保持一致的結(jié)果。所述緩沖資源管理方法還可以包括上述后調(diào)整后的以下重回收動作的步驟:在后調(diào)整后,如果分配列表的頭指針變?yōu)榭?緩沖對象已被分配給消耗方)且新的釋放的緩沖對象仍處于釋放狀態(tài),再次執(zhí)行上述回收動作的步驟,以避免緩沖丟失。
[0054]基于以上設(shè)計原理1,緩沖池被設(shè)計為具有分別用于分配和去分配的兩個分離的列表。具體地,圖2示出了具有其緩沖對象、頭和尾的這兩個分離的列表(分配列表、去分配列表(又稱“空閑列表”))。
[0055]圖2示出了具有其緩沖對象、頭和尾的示例分配列表和示例去分配列表(又稱“空閑列表”)。參照圖2,全局指針描述如下。
[0056].alloc—head:
[0057](buffer*)指向分配列表的頭指針
[0058]〇該指針被初始化為空;
[0059]〇引用堆內(nèi)的大容量存儲;[0060]〇在接管后,其指向去分配列表的第一緩沖對象。
[0061].free head:
[0062](buffer*)指向去分配列表的頭指針
[0063]〇該指針被初始化為空;
[0064]〇其指向去分配列表的第一緩沖對象;
[0065]〇在接管后,該指針被再次重置為空。
[0066].free_tail:
[0067](buffer**)指向位于去分配列表結(jié)尾的下一指針的尾指針
[0068]〇在初始化時,該指針指向free_head ;
[0069]〇每當釋放緩沖對象,緩沖對象被鏈接至free_tail所指向的去分配列表結(jié)尾,并且free_tail被移動為指向釋放的緩沖對象的下一指針。
[0070]〇在接管后,free_tail被再次重置為free_head。
[0071]在本公開的一些實施例中,提供了具有緩沖池的電信設(shè)備,其中,緩沖池可以被配置為具有如圖2所示 的去分配列表和分配列表中的至少一個。該電信設(shè)備可以是基站(BS)、交換機或演進型節(jié)點B (eNB)。具體地,去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;頭指針(free_head),指向位于去分配列表頭部的緩沖對象;以及尾指針(free_tail),指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,尾指針是指針的指針。分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;以及頭指針(alloc_head),指向位于分配列表頭部的緩沖對象。
[0072]圖3是示出了緩沖對象的示意圖。
[0073]參照圖3,一個緩沖對象具有以下字段。
[0074].inFreeList:bool (真:空閑,假:已用)
[0075]指示緩沖對象是否在池中
[0076]該字段根據(jù)以下規(guī)則設(shè)置:
[0077]〇在初始化時,該字段被設(shè)置為真;
[0078]〇當消耗方任務(wù)分配來自池的緩沖時,最好在從分配列表解除鏈接將該字段設(shè)置為假;
[0079]〇當產(chǎn)出方任務(wù)將緩沖釋放回池時,最好在附加至去分配列表前將該字段設(shè)置為真;
[0080]〇當消耗方任務(wù)將緩沖回收至池時,最好在將該字段設(shè)置為幀前首先將緩沖插入至分配列表的起始。
[0081].content []:char []
[0082]保持傳入分組
[0083]例如,最大2,500字節(jié)。
[0084].length:
[0085]實際緩沖內(nèi)容長度
[0086].0ffset:
[0087]數(shù)組內(nèi)內(nèi)容的起始偏移,保持前綴協(xié)議首部(rocp)[0088].next:
[0089]指向后續(xù)緩沖對象的下一指針
[0090].magic number (幻數(shù)):
[0091 ] 指示緩沖所有者的可選不可見字段
[0092]該字段缺省地居于產(chǎn)出方,由于緩沖對象通常由產(chǎn)出方任務(wù)釋放,但當消耗方任務(wù)將未用緩沖釋放回池以能夠?qū)崿F(xiàn)不同處理時,能夠被修改至消耗方。
[0093]基于上述設(shè)計原理2,取代常規(guī)的if-then-else代碼模型,每個任務(wù)僅使用僅具有兩個指令的統(tǒng)一代碼模型,以實現(xiàn)關(guān)鍵資源搶占和清除工作,這實現(xiàn)了較少的指令數(shù)目。進而,極大地減少了可能的指令序列組合集,使得可以枚舉所有情況,確保算法正確性。
[0094]沖突來自兩個任務(wù)交錯執(zhí)行,因此算法需要考慮所有可能的代碼序列組合,并確保枚舉了所有可能。
[0095]假設(shè)一個任務(wù)具有M-1個指令,留出M個可能的指令交錯位置,另一任務(wù)有N個指令在此交錯,則所有可能的代碼序列組合如下:
[0096]S (N, M) = S (N-1,M) +S (N-1,M_l) +S (N-1,M-2) +......+S (N-1,I)
[0097]如果從1、2、3......枚舉N
[0098]S(l, M) = M = O(M)
[0099]S(2,M) = S(I, M)+S(I, M-1)+S(I, M-2)+.......+S(l, I) = M+M-l+M-2+......+1
=(Μ+1)*Μ/2 = 0(M2)
[0100]S(3,M) = S(2,M)+S(2,M-1)+S(2,M-2)+.......+S(2,1) = (M+l)*M/2+M*(M_l)/
2+(M-1)* (M-2)/2+......+1 = 0(M3)
[0101]
[0102]S (N,M) =O(Mn)
[0103]根據(jù)上式,可以看到:如果M和N是較大的值,代碼組合集的數(shù)目將達到極大值,極為難以覆蓋全部可能,這正是關(guān)鍵代碼序列限于較少數(shù)目指令的原因。
[0104]就此而言,如稍后詳述的,沖突操作仍可能在接管過程期間發(fā)生,即使關(guān)鍵代碼序列已減少至較少數(shù)目的指令,其中,消耗方任務(wù)被設(shè)計為僅具有兩個關(guān)鍵指令{free_head=NULL ;free_tail = &free_head},進而留出三個可能的交錯位置,并且產(chǎn)出方任務(wù)被設(shè)計為僅具有兩個關(guān)鍵指令{*free_tail = pNodeDel ;free_tail = &(pNodeDel_ > next)}。在實際情形中,消耗方任務(wù)和產(chǎn)出方任務(wù)的這些指令能夠在任意位置交錯。因此,交錯代碼組合集的總數(shù)為 S(N = 2,M = 3) = S(l,3)+S(l,2)+S(l,l) = 3+2+1 = 6。
[0105]在實際執(zhí)行中,無人明確地知道滿足哪種情形(由于不能進行檢查,否則將引入額外的交錯代碼組合集),因此最好最終代碼序列能夠確保無論哪種情形發(fā)生結(jié)果始終正確?;谏鲜鲈O(shè)計原理3,最好認真選擇動作,以在以上所有情形間保持一致。例如,在后調(diào)整期間,一旦檢測到接管,去分配列表的尾指針被拉回指向去分配列表的頭指針,由于尾指針的上述調(diào)整僅在接管和后調(diào)整過程之間一致;因此,無論接管和回收動作如何彼此交錯,始終正確。
[0106] 即使新過程采用特殊設(shè)計將爭用可能降低至較小程度,由兩個任務(wù)交錯執(zhí)行引起的副作用仍不可避免。幸運的是,可以通過認證檢查另一任務(wù)的印跡來完全消除副作用。當發(fā)現(xiàn)數(shù)據(jù)結(jié)構(gòu)已被另一任務(wù)接觸時,需要對該數(shù)據(jù)結(jié)構(gòu)執(zhí)行某種額外的調(diào)整,以消除副作用?;谠O(shè)計原理4,另一任務(wù)接觸數(shù)據(jù)結(jié)構(gòu)的檢查條件是安全的,由于一旦去分配列表的頭指針變?yōu)榭?,消耗方任?wù)將不再接觸它,并且其將始終保持為空,直到產(chǎn)出方任務(wù)故意對其進行修改,而該修改當前將不會與產(chǎn)出方任務(wù)自身沖突。進而,其確保了后調(diào)制正確性。
[0107]基于上述設(shè)計原理1-4,以下示出針對消耗方任務(wù)和產(chǎn)出方任務(wù)的操作描述以及相應(yīng)的偽碼。
[0108]
[0109]當線程通過過載的操作符,請求分配來自池的緩沖時,將根據(jù)線程角色執(zhí)行分離的處理。
[0110]-消耗方
[0111]這是通常情形。如果鏈接為空,其始終試圖將緩沖對象從分配列表頭部解除鏈接;否則,如果去分配列表不為空,其試圖從產(chǎn)出方線程接管去分配列表;否則,其調(diào)用原始的new函數(shù),以分配來自堆的大容量存儲,以構(gòu)造緩沖列表。
[0112]-產(chǎn)出方
[0113]分配來自其自身產(chǎn)出方池的緩沖(將于稍后詳述)。
[0114]消耗方任務(wù)
[0115]
【權(quán)利要求】
1.一種緩沖資源管理方法,其中,緩沖池被配置為具有分配列表和去分配列表, 所述分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;以及頭指針,指向位于分配列表頭部的緩沖對象,以及 所述去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;頭指針,指向位于去分配列表開頭的緩沖對象;以及尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針, 在初始化中,去分配列表的頭指針為空,去分配列表的尾指針指向去分配列表的頭指針自身, 所述緩沖資源管理方法包括以下接管動作的步驟: 將去分配列表的頭指針賦值給分配列表的頭指針; 將去分配列表的頭指針清空;以及 令去分配列表的尾指針指向去分配列表的頭指針自身。
2.根據(jù)權(quán)利要求1所述的緩沖資源管理方法,還包括以下步驟: 確定分配列表是否為空; 如果分配列表為空,確定去分配列表是否為空;以及 如果去分配列表不為空,執(zhí)行所述接管動作的步驟。
3.根據(jù)權(quán)利要求2所述的緩沖資源管理方法,還包括以下步驟: 如果分配列表不為空,將位于分配列表開頭的緩沖對象解除鏈接。
4.根據(jù)權(quán)利要求2所述的緩沖資源管理方法,還包括以下步驟: 如果去分配列表為空,分配來自堆的多個緩沖對象,并將所述多個緩沖對象鏈接至分配列表。
5.根據(jù)權(quán)利要求1至4中任一項所述的緩沖資源管理方法,還包括以下回收動作的步驟: 令位于去分配列表結(jié)尾的緩沖對象的下一指針指向新的釋放的緩沖對象,其中,去分配列表結(jié)尾的下一指針由去分配列表的尾指針尋址; 將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。
6.根據(jù)權(quán)利要求5所述的緩沖資源管理方法,還包括以下后調(diào)整動作的步驟: 在新的釋放的緩沖對象鏈入去分配列表后,確定去分配列表的頭指針是否為空;以及 如果去分配列表的頭指針為空,令去分配列表的尾指針指向去分配列表的頭指針自身。
7.根據(jù)權(quán)利要求6所述的緩沖資源管理方法,還包括以下重回收動作的步驟: 在所述后調(diào)整動作后,確定分配列表的頭指針是否為空以及新的釋放的緩沖對象是否仍處于釋放狀態(tài);以及 如果分配列表的頭指針為空且新的釋放的緩沖對象仍處于釋放狀態(tài),再次執(zhí)行回收動作的步驟。
8.根據(jù)權(quán)利要求5至7中任一項所述的緩沖資源管理方法,其中,接管動作的步驟和回收動作的步驟能夠在任意位置交錯。
9.一種緩沖資源管理方法,其中,緩沖池被配置為具有分配列表和去分配列表, 所述分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;以及頭指針,指向位于分配列表開頭的緩沖對象,以及 所述去分配列表包括:一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象;頭指針,指向位于去分配列表開頭的緩沖對象;以及尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針, 在初始化中,去分配列表的頭指針為空,去分配列表的尾指針指向去分配列表的頭指針自身, 所述緩沖資源管理方法包括以下回收動作的步驟: 令位于去分配列表結(jié)尾的緩沖對象的下一指針指向新的釋放的緩沖對象,其中,去分配列表結(jié)尾的下一指針由去分配列表的尾指針尋址; 將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。
10.根據(jù)權(quán)利要求9所述的緩沖資源管理方法,還包括以下后調(diào)整動作的步驟: 在新的釋放的緩沖對象鏈入去分配列表后,確定去分配列表的頭指針是否為空;以及 如果去分配列表的頭指針為空,令去分配列表的尾指針指向去分配列表的頭指針自身。
11.根據(jù)權(quán)利要求10所述的緩沖資源管理方法,還包括以下重回收動作的步驟: 在所述后調(diào)整動作后,確定分配列表的頭指針是否為空以及新的釋放的緩沖對象是否仍處于釋放狀態(tài);以及 如果分配列表的頭指針為空且新的釋放的緩沖對象仍處于釋放狀態(tài),再次執(zhí)行回收動作的步驟。
12.—種具有用于輔助電信設(shè)備中的緩沖資源管理的計算機可讀指令的計算機可讀存儲介質(zhì),所述指令能夠由計算設(shè)備執(zhí)行,以執(zhí)行根據(jù)權(quán)利要求1至11中任一項所述的方法。
13.—種包括緩沖池的電信設(shè)備,其中,所述緩沖池被配置為具有去分配列表,并且所述去分配列表包括: 一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象, 頭指針,指向位于去分配列表開頭的緩沖對象,以及 尾指針,指向位于去分配列表結(jié)尾的緩沖對象的下一指針,其中,所述尾指針是指針的指針。
14.根據(jù)權(quán)利要求13所述的電信設(shè)備,其中,在初始化中,去分配列表的頭指針為空,去分配列表的尾指針指向去分配列表的頭指針自身。
15.根據(jù)權(quán)利要求13或14所述的電信設(shè)備,其中,所述緩沖池還被配置為具有分配列表,并且所述分配列表包括: 一個或更多個緩沖對象,由前一緩沖對象中的下一指針鏈接至下一緩沖對象,以及 頭指針,指向位于分配列表頭部的緩沖對象。
16.根據(jù)權(quán)利要求13至15中任一項所述的電信設(shè)備,還包括處理器,被配置為執(zhí)行以下接管動作的步驟: 將去分配列表的頭指針賦值給分配列表的頭指針; 將去分配列表的頭指針清空;以及 令去分配列表的尾指針指向去分配列表的頭指針自身。
17.根據(jù)權(quán)利要求16所述的電信設(shè)備,其中,所述處理器還被配置為執(zhí)行以下步驟:確定分配列表是否為空; 如果分配列表為空,確定去分配列表是否為空;以及 如果去分配列表不為空,執(zhí)行所述接管動作的步驟。
18.根據(jù)權(quán)利要求17所述的電信設(shè)備,其中,所述處理器還被配置為執(zhí)行以下步驟: 如果分配列表不為空,將位于分配列表開頭的緩沖對象解除鏈接。
19.根據(jù)權(quán)利要求17所述的電信設(shè)備,其中,所述處理器還被配置為執(zhí)行以下步驟: 如果去分配列表為空,分配來自堆的多個緩沖對象,并將所述多個緩沖對象鏈接至分配列表。
20.根據(jù)權(quán)利要求13至15中任一項所述的電信設(shè)備,還包括處理器,被配置為執(zhí)行以下回收動作的步驟: 令位于去分配列表結(jié)尾的緩沖對象的下一指針指向新的釋放的緩沖對象,其中,去分配列表結(jié)尾的下一指針由去分配列表的尾指針尋址; 將去分配列表的尾指針移至新的釋放的緩沖對象的下一指針。
21.根據(jù)權(quán)利要求20所述的電信設(shè)備,其中,所述處理器還被配置為執(zhí)行以下后調(diào)整動作的步驟: 在新的釋放的緩沖對象鏈入去分配列表后,確定去分配列表的頭指針是否為空;以及 如果去分配列表的頭指針為空,令去分配列表的尾指針指向去分配列表的頭指針自身。
【文檔編號】G06F12/00GK104025515SQ201180075492
【公開日】2014年9月3日 申請日期:2011年12月14日 優(yōu)先權(quán)日:2011年12月14日
【發(fā)明者】王軍 申請人:奧普蒂斯蜂窩技術(shù)有限責任公司