国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      網(wǎng)絡處理器中使用緩沖區(qū)的方法

      文檔序號:6438296閱讀:258來源:國知局
      專利名稱:網(wǎng)絡處理器中使用緩沖區(qū)的方法
      技術(shù)領域
      本發(fā)明涉及數(shù)據(jù)傳輸網(wǎng)中的數(shù)據(jù)交換,具體涉及一種網(wǎng)絡處理器中使用緩沖區(qū)的方法。
      背景技術(shù)
      網(wǎng)絡處理器今天已得到廣泛應用,它在各種網(wǎng)絡業(yè)務和不同性能級別的應用中擔任著不同的任務。在未來的網(wǎng)絡中,網(wǎng)絡處理器能力的拓展將取決于NGN(下一代網(wǎng)絡)設備帶來的業(yè)務智能化水平。完全融合IP(因特網(wǎng)協(xié)議)網(wǎng)絡技術(shù)的NGN需要在以同等效率提供數(shù)據(jù)、語音和視頻業(yè)務的同時,還將為分布式內(nèi)容、廣播級視頻等新興的帶寬密集型服務提供基礎平臺,這些都給網(wǎng)絡處理器提出了新的任務要求。網(wǎng)絡技術(shù)及應用的發(fā)展,對網(wǎng)絡設備的容量及單板的處理能力的要求越來越高。在網(wǎng)絡處理器中通常需要多個協(xié)處理器同時并行工作,一個數(shù)據(jù)包的處理要經(jīng)過多個模塊,由幾個協(xié)處理器協(xié)同完成。為了緩和不同模塊間速度不匹配的矛盾,減少對各模塊中CPU的中斷頻率,以及提高CPU和輸入/輸出單元之間的并行性,需要引入緩沖,對各模塊的收發(fā)數(shù)據(jù)進行緩存。
      通常,對通信設備內(nèi)部緩沖區(qū)的管理有以下兩種方式(1)采用靜態(tài)分配的方式。在設計時對設備內(nèi)每個模塊分配固定大小的內(nèi)存作為數(shù)據(jù)發(fā)送和接收時的專用緩沖區(qū),在數(shù)據(jù)收發(fā)過程中反復使用。
      這種靜態(tài)分配方式雖然處理簡單,但由于各模塊處理功能和處理速度不同,其數(shù)據(jù)流量也處于不斷變化之中,因此,有可能會使得某些內(nèi)存空間長時間空閑,而有些內(nèi)存空間又會擁擠,甚至溢出。可見,這種方式會造成存儲空間的浪費,嚴重時還會引起正常數(shù)據(jù)的丟失。
      (2)采用動態(tài)管理的方式。為了提高緩沖區(qū)的利用率,設計一個緩沖區(qū)池,將所有可利用的緩沖區(qū)空間放入該緩沖區(qū)池,池中的緩沖區(qū)可供多個模塊共享。
      對于既可用于輸入和輸出的公用緩沖區(qū),至少應含有以下三種類型的緩沖區(qū)空閑緩沖區(qū);裝滿輸入數(shù)據(jù)的緩沖區(qū);裝滿輸出數(shù)據(jù)的緩沖區(qū)。為了管理上的方便,建立空緩沖隊列。當某模塊發(fā)送數(shù)據(jù)時,首先向緩沖區(qū)池中請緩存空間,從空緩沖隊列中為其分配緩存空間,并將該緩存空間鏈接到輸出隊列中;當下一個模塊接收該數(shù)據(jù)時,向緩沖區(qū)池申請緩存空間,從空緩沖隊列中為其分配緩存空間,并根據(jù)輸出隊列從對應的緩存空間讀取該數(shù)據(jù)并寫到為其分配的緩存空間,同時,將輸出隊列中對應的緩存空間釋放并鏈接到空緩沖隊列中,將寫入數(shù)據(jù)后的緩存空間鏈接到輸入隊列中。
      由于多個模塊共享緩沖區(qū)池,因此,有可能會因某個模塊出現(xiàn)故障而造成內(nèi)存碎片,嚴重時還可能會耗盡系統(tǒng)的資源。而且,當設備內(nèi)模塊較多時,對緩沖區(qū)的管理實現(xiàn)復雜,問題難以定位。
      可見,對存放數(shù)據(jù)包的緩沖區(qū)的管理直接關(guān)系到整個處理流程的結(jié)構(gòu)設計,不合理的設計架構(gòu)會影響到網(wǎng)絡設備的處理能力和速度,影響系統(tǒng)的可靠性。

      發(fā)明內(nèi)容
      本發(fā)明要解決的技術(shù)問題是提供一種網(wǎng)絡處理器中使用緩沖區(qū)的方法,以克服現(xiàn)有技術(shù)中單純采用靜態(tài)或動態(tài)分配緩沖區(qū)的方式引起的系統(tǒng)資源浪費及影響系統(tǒng)可靠性的缺點,簡單有效地實現(xiàn)對緩沖區(qū)的可靠管理。
      為此,本發(fā)明提供如下的技術(shù)方案一種網(wǎng)絡處理器中使用緩沖區(qū)的方法,包括A、配置所述網(wǎng)絡處理器中相鄰模塊間所需緩沖區(qū);
      B、將每個所述緩沖區(qū)劃分為預定個數(shù)的子緩沖區(qū)并使其構(gòu)成環(huán)形鏈表;C、當所述相鄰模塊收/發(fā)數(shù)據(jù)需要緩沖區(qū)時,依次從所述環(huán)形鏈表中獲取所需數(shù)量的子緩沖區(qū)讀出/寫入數(shù)據(jù)。
      所述步驟B包括B1、設置每個子緩沖區(qū)對應的緩沖區(qū)描述符,所述緩沖區(qū)描述符的信息包括標志位、狀態(tài)、偏移值、長度、緩沖區(qū)指針、鏈表指針;B2、根據(jù)所述緩沖區(qū)描述符的信息建立所述環(huán)形鏈表。
      所述步驟B2包括B21、根據(jù)所述緩沖區(qū)描述符中的鏈表指針建立存放空閑緩沖區(qū)描述符的空閑鏈表;B22、將所述緩沖區(qū)指針指向其所在緩沖區(qū)描述符對應的子緩沖區(qū)。
      所述步驟C包括C1、分別建立讀指針和寫指針;C2、當所述相鄰模塊需要發(fā)送數(shù)據(jù)時,通過所述寫指針獲取空閑子緩沖區(qū)并寫入所述數(shù)據(jù);C3、當所述相鄰模塊需要接收數(shù)據(jù)時,通過所述讀指針獲取存儲所述數(shù)據(jù)的子緩沖區(qū)并讀出需要接收的數(shù)據(jù)。
      所述步驟C2包括C21、獲取所述寫指針指向的當前緩沖區(qū)描述符;C22、根據(jù)所述當前緩沖區(qū)描述符中的標志位獲取所述環(huán)形鏈表中的空閑子緩沖區(qū);C23、將所述數(shù)據(jù)寫入所述空閑子緩沖區(qū);C24、修改所述當前緩沖區(qū)描述符中的信息;C25、將所述寫指針下移。
      所述步驟C22包括
      根據(jù)所述當前緩沖區(qū)描述符中的標志位判斷所述環(huán)形鏈表中的當前緩沖區(qū)是否空閑;如果不是空閑,則丟棄所述數(shù)據(jù);如果是空閑,則根據(jù)所述緩沖區(qū)描述符中的緩沖區(qū)指針獲取對應的空閑子緩沖區(qū)。
      所述步驟C24包括將所述當前緩沖區(qū)描述符中的標志位設置為滿狀態(tài);根據(jù)寫入數(shù)據(jù)的偏移位置及實際長度填寫所述當前緩沖區(qū)描述符中的偏移值和長度域;如果寫入所述空閑子緩沖區(qū)中的數(shù)據(jù)出錯,則設置所述當前緩沖區(qū)描述符中的狀態(tài)域為錯誤狀態(tài)。
      所述步驟C3包括C31、獲取所述讀指針指向的當前緩沖區(qū)描述符;C32、根據(jù)所述當前緩沖區(qū)描述符中的標志位獲取所述環(huán)形鏈表中已存儲數(shù)據(jù)的子緩沖區(qū);C33、根據(jù)所述當前緩沖區(qū)描述符中的信息讀取所述已存儲數(shù)據(jù)的子緩沖區(qū)中的數(shù)據(jù);C34、清除所述當前緩沖區(qū)描述符中的標志信息;C35、將所述讀指針下移。
      所述步驟C32包括根據(jù)所述當前緩沖區(qū)描述符中的標志位判斷所述環(huán)形鏈表中的當前子緩沖區(qū)是否存儲了數(shù)據(jù);如果沒有,則結(jié)束;如果有,則根據(jù)所述緩沖區(qū)描述符中的緩沖區(qū)指針獲取對應的已存儲數(shù)據(jù)的子緩沖區(qū)。
      所述步驟C33包括當所述當前緩沖區(qū)描述符中的狀態(tài)域為錯誤狀態(tài)時,則丟棄所述已存儲數(shù)據(jù)的子緩沖區(qū)中的數(shù)據(jù);當所述當前緩沖區(qū)描述符中的狀態(tài)域為正常狀態(tài)時,讀取所述已存儲數(shù)據(jù)的子緩沖區(qū)中的數(shù)據(jù)。
      由以上本發(fā)明提供的技術(shù)方案可以看出,本發(fā)明結(jié)合靜態(tài)和動態(tài)分配緩沖區(qū)各自的優(yōu)點,采用靜態(tài)和動態(tài)相結(jié)合的方式對緩沖區(qū)進行管理,在配置時動態(tài)分配緩沖區(qū)的數(shù)量,處理中靜態(tài)操作。也就是說,在配置每兩個相鄰模塊之間所需緩沖區(qū)時是動態(tài)分配的,可根據(jù)實際需要,確定其所需緩沖區(qū)的大?。辉摼彌_區(qū)配置好后,對其進行的存取操作是靜態(tài)的,不需要申請釋放過程。協(xié)處理器及模塊之間接口統(tǒng)一、簡單,各模塊間緩沖區(qū)格式一致,因而實現(xiàn)簡單、結(jié)構(gòu)清晰、可靠性高;由于不需要申請釋放過程,一旦某個模塊出現(xiàn)問題不會影響到整個系統(tǒng),而且通過對不同模塊及緩沖區(qū)建立對應關(guān)系,使得出現(xiàn)問題時定位簡單,方便了系統(tǒng)維護。利用本發(fā)明,可以在提高緩沖區(qū)利用率的同時保證系統(tǒng)穩(wěn)定可靠地運行。


      圖1是本發(fā)明方法的實現(xiàn)流程圖;圖2是緩沖區(qū)描述符的結(jié)構(gòu)示意圖;圖3是緩沖區(qū)描述符的空閑鏈表的結(jié)構(gòu)示意圖;圖4是向緩沖區(qū)寫入數(shù)據(jù)的流程圖;圖5是從緩沖區(qū)讀出數(shù)據(jù)的流程圖。
      具體實施例方式
      本發(fā)明的核心在于根據(jù)實際需要,將網(wǎng)絡處理器的緩沖區(qū)劃分為大小相同或不同的多個緩沖區(qū),分別分配給相鄰模塊使用,也就是說,每兩個相鄰模塊之間有一個固定大小的緩沖區(qū)可以使用,實現(xiàn)相鄰模塊間所需緩沖區(qū)靜態(tài)配置;對于每個這樣的緩沖區(qū)采用相同的管理方式首先將其劃分為多個子緩沖區(qū);設置每個子緩沖區(qū)對應的緩沖區(qū)描述符;根據(jù)緩沖區(qū)描述符的信息使子緩沖區(qū)構(gòu)成一個環(huán)形鏈表。當對應的相鄰模塊收/發(fā)數(shù)據(jù)時,就可以依次從該環(huán)形鏈表中獲取相應的子緩沖區(qū)讀出/寫入數(shù)據(jù),實現(xiàn)對每個模塊所需緩沖區(qū)的動態(tài)分配。
      為了使本技術(shù)領域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和實施方式對本發(fā)明作進一步的詳細說明。
      參照圖1,圖1是本發(fā)明方法的流程圖,包括以下步驟步驟101配置網(wǎng)絡處理器中相鄰模塊間所需緩沖區(qū)。
      本發(fā)明與現(xiàn)有技術(shù)的根本區(qū)別點之一在于根據(jù)實際需要,將網(wǎng)絡處理器的緩沖區(qū)劃分為大小相同或不同的多個緩沖區(qū),分別分配給相鄰模塊使用,也就是說,每兩個相鄰模塊之間有一個固定大小的緩沖區(qū)可以使用,實現(xiàn)相鄰模塊間所需緩沖區(qū)靜態(tài)配置,這樣,將全部緩沖區(qū)分割使用,使某個模塊出現(xiàn)問題時不會影響到整個系統(tǒng)。
      對于每個這樣的緩沖區(qū)采用相同的管理方式進行管理,即將其劃分為多個子緩沖區(qū)并設置對應的緩沖區(qū)描述符;根據(jù)緩沖區(qū)描述符的信息使子緩沖區(qū)構(gòu)成一個環(huán)形鏈表。
      因此,進到步驟102將每個緩沖區(qū)劃分為預定個數(shù)的子緩沖區(qū)。每個子緩沖區(qū)作為一個存儲單位使用。由于每個緩沖區(qū)的大小是固定的,因此,如果模塊間傳送的數(shù)據(jù)包較長,則可以將每個子緩沖區(qū)的容量設定的大一些,相應的子緩沖區(qū)的個數(shù)就較少;反之,如果模塊間傳送的數(shù)據(jù)包較短,則可以將每個子緩沖區(qū)的容量設定的小一些,相應的子緩沖區(qū)的個數(shù)就多。這樣,就可以避免子緩沖區(qū)劃分不當造成的實現(xiàn)復雜或?qū)彌_空間的浪費。比如,如果子緩沖空間劃分過小,一個數(shù)據(jù)包就需要占用多個子緩沖區(qū);如果子緩沖空間過大,遠遠大于一個數(shù)據(jù)包的長度時,由于每個子緩沖區(qū)是作為一個存儲單位使用,因此就會浪費很多緩沖區(qū)資源。
      步驟103設置每個子緩沖區(qū)對應的緩沖區(qū)描述符,該緩沖區(qū)描述符用于存放對應的子緩沖區(qū)的信息數(shù)據(jù),其信息數(shù)據(jù)包括標志位、狀態(tài)信息、偏移值、長度、緩沖區(qū)指針、鏈表指針。
      例如,可以采用如圖2所示緩沖區(qū)描述符的格式,其中標志位表示該子緩沖區(qū)是否已經(jīng)存放了數(shù)據(jù);狀態(tài)信息表示該子緩沖區(qū)中存放的數(shù)據(jù)的狀態(tài),比如,存放的數(shù)據(jù)是否正確;在一個數(shù)據(jù)包需要多個子緩沖區(qū)時該子緩沖區(qū)是否為存放某數(shù)據(jù)包的最后一個子緩沖區(qū)等;偏移值表示數(shù)據(jù)開始存放位置的偏移值,該值是相對于子緩沖區(qū)起始位置的一個偏移值;長度表示對應的子緩沖區(qū)中存放數(shù)據(jù)的實際長度;緩沖區(qū)指針表示該緩沖區(qū)描述符對應的子緩沖區(qū)的地址;鏈表指針表示指向存放空閑緩沖區(qū)描述符的空閑鏈表中下一個緩沖區(qū)描述符的指針。
      步驟104根據(jù)緩沖區(qū)描述符的信息建立子緩沖區(qū)的環(huán)形鏈表。
      因為每個緩沖區(qū)描述符通過鏈表指針與下一個緩沖區(qū)描述符相連,因此通過鏈表指針即可將這些緩沖區(qū)描述符構(gòu)成一個環(huán),由于每個緩沖區(qū)描述符通過其緩沖區(qū)指針對應唯一的子緩沖區(qū),這樣就可以建立起子緩沖區(qū)的環(huán)形鏈表。將所有的緩沖區(qū)描述符都作為資源,構(gòu)造空閑緩沖區(qū)描述符資源池,所有的子緩沖區(qū)即組成該空閑緩沖區(qū)描述符資源池對應的空閑緩沖區(qū)資源池。
      在系統(tǒng)初始化時,首先初始化緩沖區(qū)描述符的各個字段和子緩沖區(qū)中的數(shù)據(jù)區(qū),同時將緩沖區(qū)描述符與子緩沖區(qū)一一對應起來,使每個緩沖區(qū)描述符都指向一個子緩沖區(qū)。然后,構(gòu)造一個空閑鏈表,其中存放空閑緩沖區(qū)描述符的指針。當需要緩沖區(qū)讀寫數(shù)據(jù)時,通過該指針及描述符中的信息即可找到對應的子緩沖區(qū),然后,就可以對該子緩沖區(qū)進行相應的操作。
      即進到步驟105當相鄰模塊收/發(fā)數(shù)據(jù)需要緩沖區(qū)時,依次從其對應的環(huán)形鏈表中獲取相應的子緩沖區(qū)讀出/寫入數(shù)據(jù)。
      在上述對子緩沖區(qū)操作過程中,主要是通過空閑鏈表來實現(xiàn)的,緩沖區(qū)描述符的空閑鏈表的結(jié)構(gòu)如圖3所示。
      比如,在ATM(異步傳輸模式)系統(tǒng)中,網(wǎng)絡處理器需要配置VC(虛連接)。這時,可以根據(jù)實際流量和突發(fā)量的大小,從空閑鏈表中取出不同數(shù)量的緩沖區(qū)描述符及對應的緩沖區(qū)分配給VC。由于這些緩沖區(qū)通過緩沖區(qū)描述符中的鏈表指針連接成一個環(huán)狀的單向鏈表,形成單向隊列結(jié)構(gòu),所以可以靈活地分配不同的數(shù)量,如果需要緩存能力強,就多分配一些。在刪除VC時,則將VC使用的所有緩沖區(qū)描述符環(huán)形鏈表中的緩沖區(qū)描述符再加入到空閑鏈表中。
      為了簡化設計,本發(fā)明對緩沖區(qū)的操作通過讀、寫指針來實現(xiàn)。
      仍然參照圖3所示的緩沖區(qū)描述符的空閑鏈表,讀指針和寫指針的狀態(tài)有以下兩種情況(1)如果從讀指針到寫指針之間的緩沖區(qū)描述符的標志位都為1,則表示這兩個指針之間的緩沖區(qū)描述符都是滿狀態(tài),即對應的子緩沖區(qū)中都已經(jīng)存放了數(shù)據(jù),讀指針指向第一個滿的緩沖區(qū)描述符;
      (2)如果從寫指針到讀指針之間的緩沖區(qū)描述符的標志位都為0,則表示這兩個指針之間的緩沖區(qū)描述符都是空狀態(tài),即對應的子緩沖區(qū)中沒有存放任何數(shù)據(jù),寫指針指向第一個空的緩沖區(qū)描述符。
      讀指針始終位于寫指針的后面,兩個指針都是每處理一個緩沖區(qū)描述符向下移動指向下一個緩沖區(qū)描述符,讀指針永遠不會也不能超過寫指針。
      如果讀、寫指針指向同一個緩沖區(qū)描述符,有兩種可能,一種可能是所有的緩沖區(qū)描述符都是空的,另一種可能是所有的緩沖區(qū)描述符都是滿的。這時就需要根據(jù)指針所指向的緩沖區(qū)描述符的標志位來判斷是滿還是空。
      系統(tǒng)初始化時,讀指針和寫指針指向緩沖區(qū)描述符空閑鏈表中的同一個緩沖區(qū)描述符。
      本技術(shù)領域人員知道,在網(wǎng)絡處理器中,一個模塊接到數(shù)據(jù)后,首先需要進行相應的協(xié)議處理,然后存放在緩沖區(qū)中,傳給下一個模塊進行處理。這個過程在本發(fā)明中就是通過上述寫指針和讀指針來完成的。下面將對此進行詳細描述。
      向緩沖區(qū)寫入數(shù)據(jù)的過程如圖4所示,包括以下步驟步驟401接收數(shù)據(jù)。
      步驟402獲取寫指針指向的當前緩沖區(qū)描述符。
      步驟403取出當前緩沖區(qū)描述符中的標志位。根據(jù)該標志位即可得知當前緩沖區(qū)描述符對應的子緩沖區(qū)是否為空,也就是說是否還有空閑的緩沖區(qū)間來存儲接收的數(shù)據(jù)。
      因此,進到步驟404判斷標志位是否為滿狀態(tài)。
      如果是,則表示已沒有空閑的緩沖區(qū)間,這時,進到步驟405丟棄當前數(shù)據(jù)。然后,進到步驟412處理過程結(jié)束。
      如果不是,則表示仍有空閑的緩沖區(qū)間,這時,進到步驟406按照相關(guān)協(xié)議對數(shù)據(jù)進行處理。
      然后,進到步驟407判斷數(shù)據(jù)處理過程中是否出錯。
      如果數(shù)據(jù)處理出錯,則進到步驟408丟棄當前數(shù)據(jù)并設置狀態(tài)域中的錯誤標志。
      然后,進到步驟411修改當前緩沖區(qū)描述符中的信息并將寫指針下移,使其指向下一個緩沖區(qū)描述符,即將當前緩沖區(qū)描述符中鏈表指針的值賦給寫指針。
      緩沖區(qū)描述符中的信息修改如下將標志位設置為滿狀態(tài);根據(jù)寫入數(shù)據(jù)的偏移位置及實際長度填寫當前緩沖區(qū)描述符中的偏移值和長度域;設置狀態(tài)域為錯誤狀態(tài)。
      如果數(shù)據(jù)處理正常,則進到步驟409根據(jù)緩沖區(qū)描述符中的緩沖區(qū)指針獲取對應的空閑子緩沖區(qū)。
      步驟410將數(shù)據(jù)寫入空閑子緩沖區(qū)。
      然后,進到步驟411修改當前緩沖區(qū)描述符中的信息并將寫指針下移,使其指向下一個緩沖區(qū)描述符,即將當前緩沖區(qū)描述符中鏈表指針的值賦給寫指針。
      緩沖區(qū)描述符中的信息修改如下將標志位設置為滿狀態(tài);根據(jù)寫入數(shù)據(jù)的偏移位置及實際長度填寫當前緩沖區(qū)描述符中的偏移值和長度域。
      最后,進到步驟412處理過程結(jié)束。
      從緩沖區(qū)中讀出數(shù)據(jù)的過程如圖5所示,包括以下步驟首先,在步驟501獲取讀指針指向的當前緩沖區(qū)描述符。
      進到步驟502讀取當前緩沖區(qū)描述符中的標志位。
      步驟503判斷標志位是否為滿狀態(tài),也就是說判斷環(huán)形鏈表中是否有已存儲數(shù)據(jù)的子緩沖區(qū)。
      如果不是,則進到步驟511處理過程結(jié)束。
      如果是,則說明當明緩沖區(qū)描述符對應的子緩沖區(qū)中有數(shù)據(jù)要處理,此時,進到步驟504讀取當前緩沖區(qū)描述符中的狀態(tài)域。
      進到步驟505根據(jù)狀態(tài)域中的錯誤標志判斷數(shù)據(jù)是否出錯。
      如果出錯,則進到步驟506丟棄當前數(shù)據(jù)并進行出錯統(tǒng)計。
      然后,進到步驟510清除當前緩沖區(qū)描述符中的標志信息并將讀指針下移,使其指向下一個緩沖區(qū)描述符,即將當前緩沖區(qū)描述符中鏈表指針的值賦給讀指針。
      如果未出錯,則進到步驟507讀取當前緩沖區(qū)描述符中的長度和偏移值。
      步驟508根據(jù)緩沖區(qū)描述符中的緩沖區(qū)指針獲取對應的已存儲數(shù)據(jù)的子緩沖區(qū)。
      步驟509對已存儲數(shù)據(jù)的子緩沖區(qū)中的數(shù)據(jù)進行相關(guān)協(xié)議處理。
      然后,進到步驟510清除子緩沖區(qū)對應的緩沖區(qū)描述符中的標志信息并將讀指針下移。緩沖區(qū)描述符中的標志信息包括標志位、長度、偏移值和狀態(tài)域,將其全部清零。
      然后,進到步驟511處理過程結(jié)束。
      當接收的數(shù)據(jù)包較大時,需要多個子緩沖區(qū)存儲這些數(shù)據(jù)。為了便于正確識別完整的數(shù)據(jù)包,可以在狀態(tài)域中設置一個數(shù)據(jù)起始標志位FIRST和一個數(shù)據(jù)結(jié)束標志位LAST,分別表示存儲數(shù)據(jù)包的起始和最后一個子緩沖區(qū)。
      這樣,對較長的數(shù)據(jù)包可以采用以下兩種方式進行處理(1)上級模塊發(fā)送數(shù)據(jù)時,如果沒有足夠的緩沖區(qū)存儲數(shù)據(jù),即丟棄該數(shù)據(jù)包。
      首先,根據(jù)需要發(fā)送的數(shù)據(jù)長度計算所需子緩沖區(qū)的數(shù)量。因為每個子緩沖區(qū)的大小是固定的,當模塊接收數(shù)據(jù)包后,根據(jù)計算即可獲知該數(shù)據(jù)包需要占用的子緩沖區(qū)的數(shù)量。然后,以當前緩沖區(qū)描述符為起點,根據(jù)緩沖區(qū)描述符中的標志位判斷空閑鏈表中是否有足夠的子緩沖區(qū)。如果有,則依次將數(shù)據(jù)存入各緩沖區(qū)描述符中緩沖區(qū)指針指向的空閑子緩沖區(qū)。如果沒有,則丟棄該數(shù)據(jù)包。
      采用這種方式,所存儲的數(shù)據(jù)包都是完整的。下級模塊讀取數(shù)據(jù)時,根據(jù)狀態(tài)域中的數(shù)據(jù)起始標志位FIRST和數(shù)據(jù)結(jié)束標志位LAST即可獲得完整的數(shù)據(jù)包。但這種方式每次接收數(shù)據(jù)后,都需要檢測是否有足夠的緩沖區(qū),效率較低。
      將數(shù)據(jù)依次寫入子緩沖區(qū),在讀取時,丟棄存儲不完整的數(shù)據(jù)包。
      (2)上級模塊發(fā)送數(shù)據(jù)時,將數(shù)據(jù)依次寫入子緩沖區(qū),下級模塊接收數(shù)據(jù)時,丟棄存儲不完整的數(shù)據(jù)包。
      發(fā)送數(shù)據(jù)時,不需要計算存儲該數(shù)據(jù)所需子緩沖區(qū)的個數(shù),而是只判斷當前寫指針指向的緩沖區(qū)描述符是否空閑,如果空閑,則將需要發(fā)送的數(shù)據(jù)寫入其對應的子緩沖區(qū),并設置數(shù)據(jù)起始標志位FIRST,表明是該數(shù)據(jù)包的第一個子緩沖區(qū),然后,再根據(jù)當前緩沖區(qū)描述符中的鏈表指針判斷下一個緩沖區(qū)描述符是否空閑,如果空閑,則將數(shù)據(jù)寫入其對應的子緩沖區(qū)。重復該過程,如果有足夠空間,則在寫最后一個子緩沖區(qū)后,設置其對應的緩沖區(qū)描述符中的數(shù)據(jù)結(jié)束標志位LAST;如果沒有足夠空間,則將后面的數(shù)據(jù)丟棄。
      這樣,就會存儲一個不完整的數(shù)據(jù)包。下級模塊讀取數(shù)據(jù)時,根據(jù)狀態(tài)域中的數(shù)據(jù)起始標志位FIRST獲知該數(shù)據(jù)包的起點,但不能得到對應于該起點的數(shù)據(jù)結(jié)束標志位LAST。當讀到下一個緩沖區(qū)描述符中的數(shù)據(jù)起始標志位FIRST時,將前面讀取的不完整數(shù)據(jù)包丟棄。
      可見,不論采用哪種方式,都能獲得一個完整的數(shù)據(jù)包,保證了數(shù)據(jù)傳遞的正確性。
      由上述對緩沖區(qū)操作的過程可見,本發(fā)明借助于緩沖區(qū)描述符中的緩沖區(qū)指針,建立起緩沖區(qū)描述符和子緩沖區(qū)之間的對應關(guān)系,可以方便數(shù)據(jù)的直接交換;通過緩沖區(qū)描述符中的鏈表指針使子緩沖區(qū)構(gòu)成環(huán)形鏈表,可以靈活地配置緩沖區(qū)的數(shù)量;通過讀、寫指針不需對緩沖區(qū)進行申請和釋放過程即可完成對緩沖區(qū)的操作,可以提高緩沖區(qū)管理的可靠性。子緩沖區(qū)構(gòu)成環(huán)形鏈表循環(huán)使用,最大限度地利用緩沖資源。
      雖然通過實施例描繪了本發(fā)明,本領域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。
      權(quán)利要求
      1.一種網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述方法包括A、配置所述網(wǎng)絡處理器中相鄰模塊間所需緩沖區(qū);B、將每個所述緩沖區(qū)劃分為預定個數(shù)的子緩沖區(qū)并使其構(gòu)成環(huán)形鏈表;C、當所述相鄰模塊收/發(fā)數(shù)據(jù)需要緩沖區(qū)時,依次從所述環(huán)形鏈表中獲取所需數(shù)量的子緩沖區(qū)讀出/寫入數(shù)據(jù)。
      2.根據(jù)權(quán)利要求1所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟B包括B1、設置每個子緩沖區(qū)對應的緩沖區(qū)描述符,所述緩沖區(qū)描述符的信息包括標志位、狀態(tài)、偏移值、長度、緩沖區(qū)指針、鏈表指針;B2、根據(jù)所述緩沖區(qū)描述符的信息建立所述環(huán)形鏈表。
      3.根據(jù)權(quán)利要求2所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟B2包括B21、根據(jù)所述緩沖區(qū)描述符中的鏈表指針建立存放空閑緩沖區(qū)描述符的空閑鏈表;B22、將所述緩沖區(qū)指針指向其所在緩沖區(qū)描述符對應的子緩沖區(qū)。
      4.根據(jù)權(quán)利要求3所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟C包括C1、分別建立讀指針和寫指針;C2、當所述相鄰模塊需要發(fā)送數(shù)據(jù)時,通過所述寫指針獲取空閑子緩沖區(qū)并寫入所述數(shù)據(jù);C3、當所述相鄰模塊需要接收數(shù)據(jù)時,通過所述讀指針獲取存儲所述數(shù)據(jù)的子緩沖區(qū)并讀出需要接收的數(shù)據(jù)。
      5.根據(jù)權(quán)利要求4所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟C2包括C21、獲取所述寫指針指向的當前緩沖區(qū)描述符;C22、根據(jù)所述當前緩沖區(qū)描述符中的標志位獲取所述環(huán)形鏈表中的空閑子緩沖區(qū);C23、將所述數(shù)據(jù)寫入所述空閑子緩沖區(qū);C24、修改所述當前緩沖區(qū)描述符中的信息;C25、將所述寫指針下移。
      6.根據(jù)權(quán)利要求5所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟C22包括根據(jù)所述當前緩沖區(qū)描述符中的標志位判斷所述環(huán)形鏈表中的當前緩沖區(qū)是否空閑;如果不是空閑,則丟棄所述數(shù)據(jù);如果是空閑,則根據(jù)所述緩沖區(qū)描述符中的緩沖區(qū)指針獲取對應的空閑子緩沖區(qū)。
      7.根據(jù)權(quán)利要求5所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟C24包括將所述當前緩沖區(qū)描述符中的標志位設置為滿狀態(tài);根據(jù)寫入數(shù)據(jù)的偏移位置及實際長度填寫所述當前緩沖區(qū)描述符中的偏移值和長度域;如果寫入所述空閑子緩沖區(qū)中的數(shù)據(jù)出錯,則設置所述當前緩沖區(qū)描述符中的狀態(tài)域為錯誤狀態(tài)。
      8.根據(jù)權(quán)利要求4所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟C3包括C31、獲取所述讀指針指向的當前緩沖區(qū)描述符;C32、根據(jù)所述當前緩沖區(qū)描述符中的標志位獲取所述環(huán)形鏈表中已存儲數(shù)據(jù)的子緩沖區(qū);C33、根據(jù)所述當前緩沖區(qū)描述符中的信息讀取所述已存儲數(shù)據(jù)的子緩沖區(qū)中的數(shù)據(jù);C34、清除所述當前緩沖區(qū)描述符中的標志信息;C35、將所述讀指針下移。
      9.根據(jù)權(quán)利要求8所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟C32包括根據(jù)所述當前緩沖區(qū)描述符中的標志位判斷所述環(huán)形鏈表中的當前子緩沖區(qū)是否存儲了數(shù)據(jù);如果沒有,則結(jié)束;如果有,則根據(jù)所述緩沖區(qū)描述符中的緩沖區(qū)指針獲取對應的已存儲數(shù)據(jù)的子緩沖區(qū)。
      10.根據(jù)權(quán)利要求8所述的網(wǎng)絡處理器中使用緩沖區(qū)的方法,其特征在于,所述步驟C33包括當所述當前緩沖區(qū)描述符中的狀態(tài)域為錯誤狀態(tài)時,則丟棄所述已存儲數(shù)據(jù)的子緩沖區(qū)中的數(shù)據(jù);當所述當前緩沖區(qū)描述符中的狀態(tài)域為正常狀態(tài)時,讀取所述已存儲數(shù)據(jù)的子緩沖區(qū)中的數(shù)據(jù)。
      全文摘要
      本發(fā)明公開了一種網(wǎng)絡處理器中使用緩沖區(qū)的方法,包括配置網(wǎng)絡處理器中相鄰模塊間所需緩沖區(qū);將每個所述緩沖區(qū)劃分為預定個數(shù)的子緩沖區(qū)并使其構(gòu)成環(huán)形鏈表;當相鄰模塊收/發(fā)數(shù)據(jù)需要緩沖區(qū)時,依次從所述環(huán)形鏈表中獲取相應的子緩沖區(qū)讀出/寫入數(shù)據(jù)。使用本發(fā)明,有利于軟件中出現(xiàn)問題的定位,簡單有效地實現(xiàn)對緩沖區(qū)的可靠管理,對緩沖區(qū)的維護方便、可靠。
      文檔編號G06F12/02GK1780254SQ20041009121
      公開日2006年5月31日 申請日期2004年11月17日 優(yōu)先權(quán)日2004年11月17日
      發(fā)明者馬繼彬 申請人:華為技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1