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