專利名稱:一種緩存管理方法及裝置的制作方法
技術領域:
本發明涉及數據緩存技術,特別涉及一種緩存管理方法及裝置。
背景技術:
在邏輯設計中常常需要使用動態隨機存儲器(DRAM)、靜態隨機存儲器(SRAM)或現場可編程門陣列(FPGA)內部的隨機存儲器來對數據進行緩存,如何管理緩存空間是邏輯設計中非常重要的一個環節。通常,緩存資源的管理采用先進先出(FIFO)的方式,即依次將報文存入FIFO隊列,然后再從FIFO隊列中依次取出。為了滿足時延要求,FIFO—般采用尾丟棄機制,即在收到包入隊請求后,首先判 斷FIFO是否有空間能夠存儲一個最大包,如果有,則將收到的數據包放入緩存;否則直接丟棄該數據包。也就是說,只要FIFO所剩空間不能容納一個最大包,那么就直接丟棄后續包。在需要入緩存的包較小的情況下,這種做法容易造成本來可以存入緩存的包被錯誤丟棄,同時也造成了緩存空間的浪費。另外,對于多個通道的報文同時入緩存的情況,為了避免某個通道的報文出現擁塞而導致其他通道的報文也無法讀出的情況發生,即為了避免隊頭堵塞的情況發生,需要為每個通道分別例化FIF0,也就是說,為各個通道分別分配一定的緩存空間。在這種情況下,會出現某個通道的緩存空間被用完了,而其他通道有空閑的緩存空間卻不能被拿來使用,這同樣會造成緩存空間的浪費。
發明內容
本發明實施例提供了一種緩存管理方法,提高緩存資源利用率,節省緩存管理資源。一種緩存管理方法,包括將緩存空間劃分為緩存塊,將每個緩存塊劃分為多個小塊,所述緩存塊的長度小于最大包長度;按照小塊的長度將數據包分成多個數據塊,將分成的數據塊根據緩存塊對應的寫緩存大塊地址指針和小塊對應的塊內地址指針逐個寫入空閑的小塊中。本發明實施例還提供了一種緩存管理裝置,提高緩存資源利用率,節省緩存管理資源。一種緩存管理裝置,包括存儲模塊、切割模塊、緩存管理模塊以及緩存模塊,其中,存儲模塊,用于按數據塊從入通道讀取需要緩存的數據包,每讀取一個數據塊,根據緩存管理模塊對寫緩存已用資源的查詢情況,以及對大塊地址指針的申請判斷情況,在收到緩存管理模塊返回的寫緩存大塊地址指針和塊內地址指針后,將讀取的數據塊寫入緩存模塊中與該寫緩存大塊地址指針和塊內地址指針對應的小塊中;并且在寫入緩存模塊的數據塊為包尾時,將該包信息發送給切割模塊,其中,所述包信息包括包的首位大地址指針和數據塊個數信息;
緩存管理模塊,用于在存儲模塊向緩存模塊寫入數據塊時,確定當前要寫入數據塊所對應的大塊地址指針和塊內地址指針;還用于在切割模塊向緩存模塊讀取數據塊時,確定當前要讀取數據塊所對應的大塊地址指針和塊內地址指針;還用于在收到切割模塊發送來的地址釋放請求后,根據其中攜帶的首位大地址指針、數據塊個數及自身建立的地址指針鏈表釋放該包所占用的所有大塊地址指針;切割模塊,用于根據收到的包信息,根據緩存管理模塊對讀緩存已用資源的查詢情況,以及對地址指針鏈表的查詢判斷情況,在收到緩存管理模塊返回的讀緩存大塊地址指針和塊內地址指針后,依次從緩存模塊中讀出該包的所有數據塊并發送出去,并向緩存管理模塊發送攜帶該包的首位大地址指針和數據塊個數的地址指針釋放請求,請求緩存管理模塊釋放該包所占用的所有大塊地址指針; 緩存模塊,由長度小于最大包長度的緩存塊組成,每個緩存塊由多個小塊組成。本發明實施例將整個緩存空間進行兩級劃分,即整個緩存空間由長度小于最大包長度的緩存塊組成,每個緩存塊又由多個小塊組成,并按照小塊的大小將數據包分成若干個數據塊進行緩存的方案,能夠有效利用緩存空間,提高緩存資源的利用率,避免短包被錯誤丟棄。另外,根據大塊(緩存塊)地址指針和塊內(小塊)地址指針進行報文存取的方式非常便利,各個用戶之間的數據不會相互影響,即使在多通道報文同時入緩存的情況下也不會發生隊頭堵塞的情況,這樣,就無需進行FIFO例化,不會出現某個通道的緩存空間被用完了,而其他通道有空閑的緩存空間卻不能拿來使用的情況,從而提高了緩存資源的利用率。而且,重要的是,本發明實施例將整個緩存空間進行兩級劃分的方法,只需要將第一級劃分的緩存塊所對應的大塊地址指針之間建立地址指針鏈表,而第二級劃分的小塊所對應的塊內地址指針之間不需要建立地址指針鏈表,直接累加,這樣不但節省小塊地址指針之間建立鏈表的管理空間,而且,第一級劃分緩存塊的粒度可以更大一些,粒度越大,緩存塊的數量越少,大塊地址指針之間建立鏈表的管理空間越少,從而大大節省緩存管理資源。
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。圖I為本發明實施例緩存管理裝置的結構示意圖。圖2為本發明實施例緩存管理裝置工作過程示意圖。圖3為緩存管理模塊的結構示意圖。圖4為本發明實施例寫入緩存塊一側緩存管理方法的流程示意圖。圖5為本發明實施例讀取緩存塊一側緩存管理方法的流程示意圖。
具體實施例方式本發明實施例的核心思想是在緩存管理模塊中增加已用資源記錄模塊和已用資源查詢判斷模塊,通過兩級地址指針共同指向數據塊,在寫入數據塊時,將數據塊根據寫緩存大塊地址指針和塊內地址指針逐個寫入空閑的小塊中;在讀取數據塊時,根據讀緩存大塊地址指針和塊內地址指針讀取。其中,緩存塊和小塊的大小可以根據實際需求進行劃分,但緩存塊的長度應小于最大包長度。假設最大包長度為16Kbyte (字節),整個緩存空間的大小為8Gbit (比特),則第一級劃分的緩存塊粒度可以為32K字節,第二級劃分的小塊粒度可以為64字節,這樣就可以把整個緩存空間劃分為8Gbit/32KByte=32K個緩存塊,接著,將每個緩存塊劃分為32Kbyte/64Byte=512個小塊。也就是說,記錄當前已寫入/讀取數據塊所對應的大塊地址指針,需要位寬15比特(32K為2的15次方,折算成位寬信息為15bit);記錄當前已寫入/讀取數據塊所對應的塊內地址指針,需要位寬9比特(512為2的9次方換算成位寬信息為9bit)。在這種情況下如果某個需要進行緩存的數據包的長度為64K字節,則可以將該數據包分成2個長度均為32K字節的緩存塊,再將每個緩存塊分成512個長度均為64字節的小塊,即每個數據塊占用一個64字節的小塊。
為使本發明的目的、技術方案、及優點更加清楚明白,以下參照附圖并舉實施例,對本發明進一步詳細說明。圖I為本發明實施例緩存管理裝置的結構示意圖,包括存儲模塊101、緩存模塊102、切割模塊103和緩存管理模塊(BM) 104。其中,簡單地講存儲模101,用于從入通道接收報文,并將收到的報文寫入緩存模塊102中;緩存模塊102,用于緩存存儲模塊101寫入的報文;切割模塊103,用于從緩存模塊102中讀取報文,并將讀取的報文發送出去;緩存管理模塊104,用于管理緩存模塊102中各個緩存塊和小塊所對應的地址指針,負責緩存塊所對應的大塊地址指針的申請和釋放。下面對圖I中各個模塊的工作過程進行詳細說明。參見圖2所示,該過程主要包括以下步驟步驟201、存儲模塊按數據塊從入通道讀取需要緩存的數據包,每讀取一個數據塊,向緩存管理模塊查詢該數據塊對應的寫緩存大塊地址指針和塊內地址指針。其中,將數據包劃分成數據塊的操作由存儲模塊之前的入通道模塊(圖中未示)完成。入通道模塊負責按照小塊的長度將數據包分成數據塊,存儲模塊在進行數據包緩存時,依次讀取構成該包的各個數據塊。步驟202、存儲模塊根據緩存管理模塊對寫緩存已用資源的查詢情況,以及對大塊地址指針的申請判斷情況,在收到緩存管理模塊返回的寫緩存大塊地址指針和塊內地址指針后,將讀取的數據塊寫入緩存模塊中與該寫緩存大塊地址指針和塊內地址指針對應的小塊中。具體方法為緩存管理模塊查詢當前已寫入數據塊所對應的大塊地址指針和塊內地址指針,確定是否需要申請空閑大塊地址指針,如果有可用塊內地址指針,則將數據包的數據塊寫入到當前已寫入數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊中,并且將寫緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則再申請一個空閑大塊地址指針,將數據包的數據塊寫入到當前申請的大塊地址指針和偏移值為O的塊內地址指針所對應的小塊中,并且將寫緩存塊內地址指針置O后回填,將寫緩存大塊地址指針置為當前申請到的指針對應值。同時,緩存管理模塊會將申請的大地址指針記錄為上一個空閑大塊地址指針的下一個大塊地址指針,建立起地址指針鏈表。
并且,在寫入緩存模塊的數據塊為包尾時,存儲模塊還需要將該包信息發送給切割模塊。其中,所述包信息包括包的首位大地址指針和數據塊個數信息,以及一些相關信息。所述首位大地址指針,指的是第一個數據塊所對應的大地址指針;所述相關信息包括報文類型、源媒質接入控制(MAC )地址、目的MAC地址、端口號等。步驟203、切割模塊根據收到的包信息,根據緩存管理模塊對讀緩存已用資源的查詢情況,以及對地址指針鏈表的查詢判斷情況,在收到緩存管理模塊返回的讀緩存大塊地址指針和塊內地址指針后,依次從緩存模塊中讀出該包的所有數據塊并發送出去。具體方法為切割模塊根據包信息中攜帶的首位大地址指針從緩存模塊中讀出該包的第一個數據塊并發送出去。如果該包的數據塊個數大于1,則還需要向緩存管理模塊查詢當前已讀取數據塊所對應的大塊地址指針和塊內地址指針,緩存管理模塊確定是否需要查詢下一個大塊地址指針,如果有可用塊內地址指針,則讀出當前已讀取數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊內的數據塊,并且將讀緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則查詢下一個大塊地址指針,讀出該下一個大塊地址指針和偏移值為O的塊內地址指針所對應的小塊內的數據塊,并且將讀 緩存塊內地址指針置O后回填,將讀緩存大塊地址指針置為當前查詢到的指針對應值。在數據包的所有數據塊被寫入緩存的同時,數據包所有大塊地址指針形成一個地址指針鏈表,因此,下一個大塊地址指針通過緩存管理模塊自身維護的地址指針鏈表獲得。步驟204、在該數據包被從緩存塊中發送出去之后,切割模塊向緩存管理模塊發送攜帶該包的首位大地址指針和數據塊個數的地址指針釋放請求,請求緩存管理模塊釋放該包所占用的所有大塊地址指針。步驟205、緩存管理模塊在收到切割模塊發送來的地址釋放請求后,根據其中攜帶的首位大地址指針、數據塊個數及自身建立的地址指針鏈表釋放該包所占用的所有大塊地址指針。由上述描述可見,進一步對本發明實施例緩存管理裝置進行說明存儲模塊101,用于按數據塊從入通道讀取需要緩存的數據包,每讀取一個數據塊,根據緩存管理模塊對寫緩存已用資源的查詢情況,以及對大塊地址指針的申請判斷情況,在收到緩存管理模塊返回的寫緩存大塊地址指針和塊內地址指針后,將讀取的數據塊寫入緩存模塊中與該寫緩存大塊地址指針和塊內地址指針對應的小塊中;并且在寫入緩存模塊的數據塊為包尾時,將該包信息發送給切割模塊,其中,所述包信息包括包的首位大地址指針和數據塊個數信息;緩存管理模塊104,用于在存儲模塊向緩存模塊寫入數據塊時,確定當前要寫入數據塊所對應的大塊地址指針和塊內地址指針;還用于在切割模塊向緩存模塊讀取數據塊時,確定當前要讀取數據塊所對應的大塊地址指針和塊內地址指針;還用于在收到切割模塊發送來的地址釋放請求后,根據其中攜帶的首位大地址指針、數據塊個數及自身建立的地址指針鏈表釋放該包所占用的所有大塊地址指針;切割模塊103,用于根據收到的包信息,根據緩存管理模塊對讀緩存已用資源的查詢情況,以及對地址指針鏈表的查詢判斷情況,在收到緩存管理模塊返回的讀緩存大塊地址指針和塊內地址指針后,依次從緩存模塊中讀出該包的所有數據塊并發送出去,并向緩存管理模塊發送攜帶該包的首位大地址指針和數據塊個數的地址指針釋放請求,請求緩存管理模塊釋放該包所占用的所 有大塊地址指針;緩存模塊102,由長度小于最大包長度的緩存塊組成,每個緩存塊由多個小塊組成。本發明實施例主要是對緩存管理模塊進行的改進,下面對緩存管理模塊的結構及具體工作過程進行詳細說明。圖3為本發明實施例緩存管理模塊的結構示意圖。其包括地址申請模塊、地址指針建鏈模塊、地址釋放模塊、地址鏈表查詢模塊、鏈表信息存儲模塊、空閑大塊地址指針存儲模塊、已用資源記錄模塊和已用資源查詢判斷模塊。空閑大塊地址指針存儲模塊301,用于存儲空閑的大塊地址指針;鏈表信息存儲模塊302,用于存儲大地址指針鏈表信息;地址申請模塊303,用于在已用資源查詢判斷模塊確定需要申請空閑大塊地址指針時,從空閑大塊地址指針存儲模塊中讀出一個空閑的大塊地址指針通過已用資源查詢判斷模塊返回給存儲模塊,并將該返回的大塊地址指針發送給地址指針建鏈模塊;地址指針建鏈模塊304,用于在收到地址申請模塊發送來的大塊地址指針后,將該大塊地址指針記錄為上一個空閑大塊地址指針的下一個大塊地址指針,建立起地址指針鏈表,存儲到鏈表信息存儲模塊中;地址鏈表查詢模塊305,用于在收到已用資源查詢判斷模塊發送來的地址指針查詢請求后,通過查詢鏈表信息存儲模塊中的大地址指針鏈表信息獲取該地址查詢請求中攜帶的大塊地址指針所對應的下一個大塊地址指針,并將獲取的下一個大塊地址指針通過已用資源查詢判斷模塊返回給切割模塊;還用于在地址指針釋放請求中攜帶的數據塊數量大于一個緩存塊中包含的小塊的數量時,接收攜帶有大地址指針的地址指針釋放請求,以獲取下一個大地址指針寫入空閑大塊地址指針存儲模塊;地址釋放模塊306,用于根據切割模塊的地址指針釋放請求,將地址指針釋放請求中攜帶的首位大地址指針寫入空閑大塊地址指針存儲模塊;如果地址指針釋放請求中攜帶的數據塊數量大于一個緩存塊中包含的小塊的數量時,則通過查詢鏈表信息存儲模塊獲取下一個大地址指針寫入空閑大塊地址指針存儲模塊;且重復執行該步驟直到數據包所占用的所有大塊地址指針都被釋放完畢為止;已用資源記錄模塊307,用于記錄當前已寫入數據塊所對應的大地址指針和塊內地址指針;還用于記錄當前已讀取數據塊所對應的大地址指針和塊內地址指針;其中,已用資源記錄模塊又包括已寫緩存大塊地址指針記錄單元WR_PTR,用于記錄當前已寫入數據塊所對應的大塊地址指針;已寫緩存塊內地址指針記錄單元WR_ADDR,用于記錄當前已寫入數據塊所對應的塊內地址指針;已讀緩存大塊地址指針記錄單元RD_PTR,用于記錄當前已讀取數據塊所對應的大塊地址指針;已讀緩存塊內地址指針記錄單元RD_ADDR,用于記錄當前已讀取數據塊所對應的塊內地址指針。如果以上述劃分粒度為例,整個緩存空間的大小為SG比特,第一級劃分的緩存塊粒度可以為32K字節,第二級劃分的小塊粒度可以為64字節,則已寫緩存大塊地址指針記錄單元和已讀緩存大塊地址指針記錄單元各自用15比特表示一個大塊地址指針,已寫緩存塊內地址指針記錄單元和已讀緩存塊內地址指針記錄單元各自用9比特表示一個塊內地址指針。
進一步地,已用資源記錄模塊還可以包括已占用緩存塊數目記錄單元Q_NUM,用于記錄每個通道當前各自占用的緩存塊數目。這個存儲信息有一個作用可以根據這個參數知道各個通道的緩存占用情況,然后用來限制各個通道的可以申請的緩存塊數目。已用資源查詢判斷模塊308,用于在存儲模塊向緩存模塊寫入數據塊時,先查詢當前已寫入數據塊所對應的大塊地址指針和塊內地址指針,根據已用資源記錄模塊的記錄,判斷是否需要向地址申請模塊申請空閑大塊地址指針;如果有可用塊內地址指針,則通知存儲模塊將數據包的數據塊寫入到當前已寫入數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊中,通知已用資源記錄模塊將寫緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則向地址申請模塊申請空閑大塊地址指針,通知存儲模塊將數據包的數據塊寫入到當前申請的大塊地址指針和偏移值為O的塊內地址指針所對應的小塊中,通知已用資源記錄模塊將寫緩存塊內地址指針置O后回填,將寫緩存大塊地址指針置為當前申請到的指針對應值;還用于在切割模塊向緩存模塊讀取數據塊時,先查詢當前已讀取數據塊所對應的大塊地址指針和塊內地址指針,根據已用資源記錄模塊的記錄,判斷是否需要向地址鏈表查詢模塊查詢下一個大塊地址指針;如果有可用塊內地址指針,則通知切割模塊讀出當前已讀取數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊內的數據塊,通知已用資源記錄模塊將讀緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則向地址鏈表查詢模塊查詢下一個大塊地址指針,通知切割模塊讀出該下一個大塊地址指針和偏移值為O的塊內地址指針所對應的小塊內的數據塊,通知已用資源記錄模塊將讀緩存塊內地址指針置O后回填,將讀緩存大塊地址指針置為當前查詢到的指針對應值。仍然以上述劃分粒度為例,為清楚理解本發明,下面參見圖4和圖5從讀寫兩側對緩存管理方法進行詳細說明。圖4為本發明實施例寫入緩存塊一側緩存管理方法的流程示意圖。上電之后首先執行步驟401、判斷是否有報文入緩存或者當前接收報文未存儲完畢,如果否,則結束該流程;如果是,則執行步驟402 ;步驟402、判斷通道對應的寫緩存塊內地址指針是否用完? (WR_ADDR=1FF )如果9bit的塊內地址指針非全1,即WR_ADDR IFF,也即小塊內仍然有地址指針可用,則執行步驟403 :將寫緩存塊內地址指針累加I后回填WR_ADDR ;如果9bit的塊內地址指針全1,即WR_ADDR=1FF,那么為這個緩存塊內所有塊內地址指針全被申請出去了,這時候需要執行步驟404 :申請下一個大塊地址指針;接下來執行步驟405 將寫緩存塊內地址指針置O后回填WR_ADDR,將寫緩存大塊地址指針置為當前申請到的指針對應值,如果已用資源記錄模塊還包括已占用緩存塊數目記錄單元,則同時將Q_NUM的數目加一。圖5為本發明實施例讀取緩存塊一側緩存管理方法的流程示意圖。
上電之后首先執行步驟501、判斷通道的Q_NUM數目非零?如果否,則結束該流程;如果是,則執行步驟502、繼續判斷通道對應的讀緩存塊內地址指針是否用完? (RD_ADDR=IFF )如果9bit的塊內地址指針非全1,即RD_ADDR IFF,也即小塊內仍然有地址指針可用,則執行步驟503 :將讀緩存塊內地址指針累加I后回填RD_ADDR ;如果9bit的塊內地址指針全1,即RD_ADDR=1FF,那么為這個緩存塊內所有塊內地址指針全被讀取,這時候需要執行步驟504 :查詢下一個大塊地址指針;接下來執行步驟505 將讀緩存塊內地址指針置O后回填RD_ADDR,將讀緩存大塊地址指針置為當前查詢到的指針對應值,如果已用資源記錄模塊還包括已占用緩存塊數目記錄單元,則同時將Q_NUM的數目減一。進一步地,如果存儲模塊對應多個入通道,則每個數據塊對應攜帶一個入通道信息,如端口號。相應的,鏈表信息存儲模塊中存儲有每個通道對應的大塊地址指針形成的鏈表;已用資源記錄模塊中的已寫緩存大塊地址指針記錄單元WR_PTR,記錄每個通道當前已寫入數據塊所對應的大塊地址指針,如果有8K個通道,則占8KX15比特=120K比特的空間;已讀緩存大塊地址指針記錄單元RD_PTR,記錄每個通道當前已讀取數據塊所對應的大塊地址指針,如果有8K個通道,同樣占8KX15比特=120K比特的空間;已寫緩存塊內地址指針記錄單元WR_ADDR,記錄每個通道當前已寫入數據塊所對應的塊內地址指針,如果有8K個通道,則占8KX9比特=72K比特的空間;已讀緩存塊內地址指針記錄單元RD_ADDR,記錄每個通道當前已讀取數據塊所對應的塊內地址指針,如果有8K個通道,同樣占8KX9比特=72K比特的空間。為顯示本發明實施例緩存管理方法的資源開銷較少,以上述劃分粒度及通道數量為例,下面計算緩存管理模塊所占用的存儲空間要建立地址指針鏈表,形成鏈表信息存儲模塊,還需要32ΚΧ15比特=480Κ比特的鏈表空間,其中,32Κ為緩存塊的數量,15比特為位寬;當然還需要用來指示當前各個數據塊是否被申請出去的指示,需要32Kbit的信息位;緩存塊數目信息Q_NUM需要耗費8KX15=120Kbit的空間;再加上資源記錄模塊中WR_PTR占120K比特;RD_PTR占120K比特;WR_ADDR占72K比特;RD_ADDR占72K比特;共144Kbit+480kbit+240Kbit+32Kbit+120Kbit = 1016kbit如果將緩存的粒度劃的更大一點的話就更節省管理所消耗的RAM資源了。需要說明的是,如果報文長度大于64Bytes,即報文有多個突發寫緩存,每讀取一個突發,則將數據包的數據塊寫入到當前已寫入數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊中,并且將寫緩存塊內地址指針累加I后回填。例如一個數據包長度為65Bytes,存入緩存模塊中占2個小塊,讀到第65Byte時,就把塊內地址指針加一回填。本發明實施例以64位的DDR3 SDRRMC 8倍速率同步動態隨機存儲器)接口 burst8(突發8)為例,來設置塊內地址粒度的。對于其它內存接口或者芯片內部緩存需要根據具、體情況來設置塊內地址粒度大小。本發明實施例可以根據時間情況對需要的管理資源進行壓縮,對于更多個通道的情況,可以外掛RLDRAM (縮短讀潛伏時間的動態隨機存儲器)或者DDR SDRAM (雙倍速率同步動態隨機存儲器)來實現緩存管理。綜上所述,本發明通過緩存管理模塊的已用資源查詢判斷模塊確定當前要寫入數據塊所對應的大塊地址指針和塊內地址指針;在切割模塊向緩存模塊讀取數據塊時,確定當前要讀取數據塊所對應的大塊地址指針和塊內地址指針,但只在大塊地址指針之間建立地址指針鏈表,而塊內地址指針之間不需要建立地址指針鏈表,直接累加,因此不但提高了緩存資源的利用率,而且節省了建立鏈表的管理空間。其次,由于在緩存管理模塊的已用資源記錄模塊中增加了已占用緩存塊數目記錄單元,對每個用戶的緩存資源進行統計,報文存儲時可以根據各個通道的情況來分配其對應的緩存大小。以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精 神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明保護的范圍之內。
權利要求
1.一種緩存管理方法,其特征在于,包括 將緩存空間劃分為緩存塊,將每個緩存塊劃分為多個小塊,所述緩存塊的長度小于最大包長度; 按照小塊的長度將數據包分成多個數據塊,將分成的數據塊根據緩存塊對應的寫緩存大塊地址指針和小塊對應的塊內地址指針逐個寫入空閑的小塊中。
2.如權利要求I所述的方法,其特征在于,將分成的數據塊根據寫緩存大塊地址指針和塊內地址指針逐個寫入空閑的小塊中具體包括 查詢當前已寫入數據塊所對應的大塊地址指針和塊內地址指針,確定是否需要申請空閑大塊地址指針,如果有可用塊內地址指針,則將數據包的數據塊寫入到當前已寫入數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊中,并且將寫緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則再申請一個空閑大塊地址指針,將數據包的數據塊寫入到當前申請的大塊地址指針和偏移值為O的塊內地址指針所對應的小塊中,并且將寫緩存塊內地址指針置O后回填,將寫緩存大塊地址指針置為當前申請到的指針對應值;并且重復執行該步驟,直到數據包的所有數據塊都被緩存完畢為止。
3.如權利要求I所述的方法,其特征在于,該方法還包括 將數據包所有大塊地址指針形成一個地址指針鏈表,在該數據包被從緩存塊中發送出去之后,根據該地址指針鏈表信息釋放該數據包所占用的所有大塊地址指針。
4.如權利要求2所述的方法,其特征在于,數據包的所有數據塊都被緩存完畢后還包括讀出所述數據包的所有數據塊的步驟,具體方法為 查詢當前已讀取數據塊所對應的大塊地址指針和塊內地址指針,確定是否需要查詢下一個大塊地址指針,如果有可用塊內地址指針,則讀出當前已讀取數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊內的數據塊,并且將讀緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則查詢下一個大塊地址指針,讀出該下一個大塊地址指針和偏移值為O的塊內地址指針所對應的小塊內的數據塊,并且將讀緩存塊內地址指針置O后回填,將讀緩存大塊地址指針置為當前查詢到的指針對應值;并且重復執行該步驟,直到讀出數據包的所有數據塊。
5.一種緩存管理裝置,其特征在于,包括存儲模塊、切割模塊、緩存管理模塊以及緩存模塊,其中, 存儲模塊,用于按數據塊從入通道讀取需要緩存的數據包,每讀取一個數據塊,根據緩存管理模塊對寫緩存已用資源的查詢情況,以及對大塊地址指針的申請判斷情況,在收到緩存管理模塊返回的寫緩存大塊地址指針和塊內地址指針后,將讀取的數據塊寫入緩存模塊中與該寫緩存大塊地址指針和塊內地址指針對應的小塊中;并且在寫入緩存模塊的數據塊為包尾時,將該包信息發送給切割模塊,其中,所述包信息包括包的首位大地址指針和數據塊個數信息; 緩存管理模塊,用于在存儲模塊向緩存模塊寫入數據塊時,確定當前要寫入數據塊所對應的大塊地址指針和塊內地址指針;還用于在切割模塊向緩存模塊讀取數據塊時,確定當前要讀取數據塊所對應的大塊地址指針和塊內地址指針;還用于在收到切割模塊發送來的地址釋放請求后,根據其中攜帶的首位大地址指針、數據塊個數及自身建立的地址指針鏈表釋放該包所占用的所有大塊地址指針;切割模塊,用于根據收到的包信息,根據緩存管理模塊對讀緩存已用資源的查詢情況,以及對地址指針鏈表的查詢判斷情況,在收到緩存管理模塊返回的讀緩存大塊地址指針和塊內地址指針后,依次從緩存模塊中讀出該包的所有數據塊并發送出去,并向緩存管理模塊發送攜帶該包的首位大地址指針和數據塊個數的地址指針釋放請求,請求緩存管理模塊釋放該包所占用的所有大塊地址指針; 緩存模塊,由長度小于最大包長度的緩存塊組成,每個緩存塊由多個小塊組成。
6.如權利要求5所述的裝置,其特征在于,所述緩存管理模塊包括地址申請模塊、地址指針建鏈模塊、地址釋放模塊、地址鏈表查詢模塊、鏈表信息存儲模塊、空閑大塊地址指針存儲模塊、已用資源記錄模塊和已用資源查詢判斷模塊; 空閑大塊地址指針存儲模塊,用于存儲空閑的大塊地址指針; 鏈表信息存儲模塊,用于存儲大地址指針鏈表信息; 地址申請模塊,用于在已用資源查詢判斷模塊確定需要申請空閑大塊地址指針時,從空閑大塊地址指針存儲模塊中讀出一個空閑的大塊地址指針通過已用資源查詢判斷模塊返回給存儲模塊,并將該返回的大塊地址指針發送給地址指針建鏈模塊; 地址指針建鏈模塊,用于在收到地址申請模塊發送來的大塊地址指針后,將該大塊地址指針記錄為上一個空閑大塊地址指針的下一個大塊地址指針,建立起地址指針鏈表,存儲到鏈表信息存儲模塊中; 地址釋放模塊,用于根據切割模塊的地址指針釋放請求,將地址指針釋放請求中攜帶的首位大地址指針寫入空閑大塊地址指針存儲模塊;如果地址指針釋放請求中攜帶的數據塊數量大于一個緩存塊中包含的小塊的數量時,則通過查詢鏈表信息存儲模塊獲取下一個大地址指針寫入空閑大塊地址指針存儲模塊;且重復執行該步驟直到數據包所占用的所有大塊地址指針都被釋放完畢為止; 地址鏈表查詢模塊,用于在收到已用資源查詢判斷模塊發送來的地址指針查詢請求后,通過查詢鏈表信息存儲模塊中的大地址指針鏈表信息獲取該地址查詢請求中攜帶的大塊地址指針所對應的下一個大塊地址指針,并將獲取的下一個大塊地址指針通過已用資源查詢判斷模塊返回給切割模塊;還用于在地址指針釋放請求中攜帶的數據塊數量大于一個緩存塊中包含的小塊的數量時,接收攜帶有大地址指針的地址指針釋放請求,以獲取下一個大地址指針寫入空閑大塊地址指針存儲模塊; 已用資源記錄模塊,用于記錄當前已寫入數據塊所對應的大地址指針和塊內地址指針;還用于記錄當前已讀取數據塊所對應的大地址指針和塊內地址指針; 已用資源查詢判斷模塊,用于在存儲模塊向緩存模塊寫入數據塊時,先查詢當前已寫入數據塊所對應的大塊地址指針和塊內地址指針,根據已用資源記錄模塊的記錄,判斷是否需要向地址申請模塊申請空閑大塊地址指針;如果有可用塊內地址指針,則通知存儲模塊將數據包的數據塊寫入到當前已寫入數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊中,通知已用資源記錄模塊將寫緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則向地址申請模塊申請空閑大塊地址指針,通知存儲模塊將數據包的數據塊寫入到當前申請的大塊地址指針和偏移值為O的塊內地址指針所對應的小塊中,通知已用資源記錄模塊將寫緩存塊內地址指針置O后回填,將寫緩存大塊地址指針置為當前申請到的指針對應值;還用于在切割模塊向緩存模塊讀取數據塊時,先查詢當前已讀取數據塊所對應的大塊地址指針和塊內地址指針,根據已用資源記錄模塊的記錄,判斷是否需要向地址鏈表查詢模塊查詢下一個大塊地址指針;如果有可用塊內地址指針,則通知切割模塊讀出當前已讀取數據塊所對應的大塊地址指針和將偏移值加I的塊內地址指針所對應的小塊內的數據塊,通知已用資源記錄模塊將讀緩存塊內地址指針累加I后回填;如果沒有可用塊內地址指針,則向地址鏈表查詢模塊查詢下一個大塊地址指針,通知切割模塊讀出該下一個大塊地址指針和偏移值為O的塊內地址指針所對應的小塊內的數據塊,通知已用資源記錄模塊將讀緩存塊內地址指針置O后回填,將讀緩存大塊地址指針置為當前查詢到的指針對應值。
7.如權利要求6所述的裝置,其特征在于,已用資源記錄模塊包括 已寫緩存大塊地址指針記錄單元,用于記錄當前已寫入數據塊所對應的大塊地址指針; 已寫緩存塊內地址指針記錄單元,用于記錄當前已寫入數據塊所對應的塊內地址指針; 已讀緩存大塊地址指針記錄單元,用于記錄當前已讀取數據塊所對應的大塊地址指針; 已讀緩存塊內地址指針記錄單元,用于記錄當前已讀取數據塊所對應的塊內地址指針。
8.如權利要求7所述的裝置,其特征在于,已用資源記錄模塊還包括已占用緩存塊數目記錄單元,用于記錄每個通道當前各自占用的緩存塊數目。
9.如權利要求7所述的裝置,其特征在于,當所述存儲模塊對應一個以上的入通道時,每個數據塊對應攜帶一個入通道信息。
全文摘要
本發明提供了一種緩存管理方法,包括將緩存空間劃分為緩存塊,將每個緩存塊劃分為多個小塊,所述緩存塊的長度小于最大包長度;按照小塊的長度將數據包分成多個數據塊,將分成的數據塊根據緩存塊對應的寫緩存大塊地址指針和小塊對應的塊內地址指針逐個寫入空閑的小塊中。本發明還提供了一種緩存管理裝置。采用本發明能夠提高緩存資源利用率,節省緩存管理資源。
文檔編號H04L12/56GK102638412SQ20121013842
公開日2012年8月15日 申請日期2012年5月4日 優先權日2012年5月4日
發明者王彬 申請人:杭州華三通信技術有限公司