專利名稱:共享內(nèi)存管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種共享內(nèi)存管理方法。
背景技術(shù):
隨著移動通訊纟支術(shù)的不斷發(fā)展,用戶對移動環(huán)境下的速率需求
也越來越高。目前,高速無線通信系統(tǒng)中最重要的部分就是高速翁: 據(jù)4妾入(High Speed Packet Access,簡稱為HSPA )以及無線長期演 進(Long-Term Evolution,簡稱為LTE )系統(tǒng)。
在高速通信系統(tǒng)中,無線用戶面的設(shè)計對速率性能以及容量指 標(biāo)影響很大,這是因為,所有的數(shù)據(jù)包都將在用戶面進行緩存,因 此流量越大,內(nèi)存消耗也就越多。
在傳統(tǒng)的內(nèi)存分配方式中,按照用戶的業(yè)務(wù)類型以及最大速率 進4亍靜態(tài)的內(nèi)存分配,當(dāng)該用戶實際沒有進4亍業(yè)務(wù)時,會造成內(nèi)存 資源的浪費。
在高速通信系統(tǒng)中,可能每個用戶的最大速率都非常高,但是 由于受到系統(tǒng)能力的限制,所有用戶同時達到滿速率的概率非常低。 并且,空口資源帶寬本身就是共享的,所以無線用戶面應(yīng)當(dāng)采用共 享的數(shù)據(jù)緩沖區(qū),各用戶根據(jù)實際需要動態(tài)分配共享內(nèi)存。
但是,動態(tài)分配本身也有需要克服的問題,如果都按照實際需 要來進行內(nèi)存資源的索取,必然會造成內(nèi)存碎片問題;如果劃定幾種不同大小的內(nèi)存塊,則當(dāng)較小的內(nèi)存塊用盡之后,直接使用更大 的內(nèi)存塊,形成資源浪費,并且可能造成所有用戶的業(yè)務(wù)數(shù)據(jù)包都 非常小時,系統(tǒng)容量得不到保證,從而增加了內(nèi)存塊預(yù)先規(guī)劃方法 實施的難度。發(fā)明內(nèi)容本發(fā)明旨在提供一種共享內(nèi)存管理方法,以解決現(xiàn)有技術(shù)中的 動態(tài)分配內(nèi)存方式浪費內(nèi)存資源的問題。根據(jù)本發(fā)明,提供了一種共享內(nèi)存管理方法。根據(jù)本發(fā)明的共享內(nèi)存管理方法包括將共享緩存區(qū)按照2的 整凄t次冪分成多個內(nèi)存塊,其中,相鄰的兩個內(nèi)存塊中的后一內(nèi)存 塊的大小是前一內(nèi)存塊的大小的2xn倍,n為大于等于1的整數(shù); 4妄收數(shù)據(jù)包,才艮據(jù)數(shù)據(jù)包的大小4安照內(nèi)存塊的大小順序遍歷可選內(nèi) 存塊,其中,可選內(nèi)存塊為等于或大于數(shù)據(jù)包的大小的內(nèi)存塊;使 用最先遍歷到的空閑可選內(nèi)存塊保存數(shù)據(jù)包。優(yōu)選地,在空閑可選內(nèi)存塊的大小等于數(shù)據(jù)包的大小的情況下, 使用最先遍歷到的空閑可選內(nèi)存塊保存數(shù)據(jù)包具體包括直接使用 空閑可選內(nèi)存塊4呆存數(shù)據(jù)包。優(yōu)選地,具有相同大小的內(nèi)存塊以鏈狀排列,形成內(nèi)存塊《連表。優(yōu)選地,在空閑可選內(nèi)存塊的大小大于翁:據(jù)包的大小的情況下, 使用最先遍歷到的空閑可選內(nèi)存塊保存數(shù)據(jù)包具體包括對空閑可 選內(nèi)存塊執(zhí)行用于將內(nèi)存塊均分為具有相同大小的兩個子內(nèi)存塊的 分裂操作,得到具有相同大小的兩個子內(nèi)存塊;根據(jù)第二個子內(nèi)存 塊的大小將其加入相應(yīng)的內(nèi)存塊鏈表;判斷第一個子內(nèi)存塊是否為 可用內(nèi)存塊,在判斷結(jié)果為是的情況下,使用第一個子內(nèi)存塊保存數(shù)據(jù)包,在判斷結(jié)果為否的情況下,對第一個子內(nèi)存塊執(zhí)行分裂操 作,直到分裂得到可用內(nèi)存塊,并使用可用內(nèi)存塊保存數(shù)據(jù)包,其 中,可用內(nèi)存塊的大小等于數(shù)據(jù)包的大小,或者大于數(shù)據(jù)包的大小 且小于數(shù)據(jù)包的大小的兩倍。優(yōu)選地,在執(zhí)行分裂操作時,預(yù)先設(shè)置允許執(zhí)行的分裂操作的 級數(shù)閾值。優(yōu)選地,在進行分裂操作后,該方法還包括對于執(zhí)行分裂操 作得到的加入內(nèi)存塊鏈表的各個內(nèi)存塊,分別設(shè)置分裂標(biāo)記,其中, 分裂標(biāo)記用于標(biāo)識內(nèi)存塊為分裂得到的內(nèi)存塊,以及內(nèi)存塊對應(yīng)的 分裂級數(shù)。優(yōu)選地,在保存有數(shù)據(jù)包的內(nèi)存塊釋》文其保存的數(shù)據(jù)包的情況 下,該方法還包括沖企查內(nèi)存塊是否攜帶有分裂標(biāo)記,在判斷結(jié)果 為是的情況下,進一步查找是否有與其大小相同且物理地址連續(xù)的 空閑的內(nèi)存塊;在查找到空閑的內(nèi)存塊的情況下,將攜帶有分裂標(biāo) 記的內(nèi)存塊與查找到的內(nèi)存塊進行合并,將合并得到的內(nèi)存塊根據(jù) 大小加入相應(yīng)的內(nèi)存塊鏈表,其中,在分裂標(biāo)記標(biāo)識的分裂級數(shù)為 一級分裂的情況下,刪除分裂標(biāo)記,在分裂標(biāo)記標(biāo)識的分裂級凄史大 于一級的情況下,將分裂標(biāo)記的分裂級f史減一。優(yōu)選地,在查找不到空閑的數(shù)據(jù)塊的情況下,將內(nèi)存塊根據(jù)大 小加入與其對應(yīng)的數(shù)據(jù)塊鏈表。優(yōu)選地,優(yōu)先選4奪沒有攜帶分裂標(biāo)記的內(nèi)存塊執(zhí)4亍分裂才喿作。優(yōu)選地,共享緩存區(qū)的最小內(nèi)存塊為32字節(jié)。優(yōu)選i也,在上述的方法中,n=l。通過本發(fā)明提供的共享內(nèi)存管理方法,能夠?qū)?nèi)存進行有效利 用,兼顧不同業(yè)務(wù)類型對數(shù)據(jù)包緩沖的大小以及數(shù)量的要求,提高 了系統(tǒng)的歲文率。
此處所說明的附圖用來^是供對本發(fā)明的進一步理解,構(gòu)成本申 請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中圖1是根據(jù)本發(fā)明實施例的共享內(nèi)存管理方法的流程圖;圖2是才艮據(jù)本發(fā)明實施例的共享內(nèi)存管理方法的實現(xiàn)實例的示 意圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行說明,應(yīng)當(dāng)理解,此 處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本 發(fā)明。本發(fā)明實施例提供了一種共享內(nèi)存管理方法。圖1是才艮據(jù)本發(fā)明實施例的共享內(nèi)存管理方法的流程圖。如圖 l所示,上述方法包4舌以下處理步驟S102,將共享緩存區(qū)按照2的整數(shù)次冪分成多個內(nèi)存塊, 其中,相鄰的兩個內(nèi)存塊中的后一內(nèi)存塊的大小是前一內(nèi)存塊的大 小的2xn倍,n為大于等于l的整數(shù);優(yōu)選地,n=l,即,將共享 緩沖區(qū)的分塊大小要按照2的整數(shù)次冪進行劃分,最小的塊大小可以才艮據(jù)系統(tǒng)的實際需要進行分塊,比如32字節(jié),然后依次劃分為 32, 64, 128, 256, 512, 1K, 2K, 4K, 8K, 16K等;步驟S104,接收數(shù)據(jù)包,根據(jù)數(shù)據(jù)包的大小按照內(nèi)存塊的大小 順序遍歷可選內(nèi)存塊,這里^:到的可選內(nèi)存塊為等于或大于數(shù)據(jù)包 的大小的內(nèi)存塊;步驟S106,使用最先遍歷到的空閑可選內(nèi)存塊保存數(shù)據(jù)包。該實施例通過將共享緩沖區(qū)按照2的整數(shù)次冪進行分塊,能夠 通過循環(huán)移位找到該數(shù)字的最高非O位,容易根據(jù)實際需要選擇內(nèi) 存塊大小,加快了查找速度。根據(jù)步驟S104中遍歷到的空閑可選內(nèi)存塊的大小的不同,步 艱《S106中的處理也有所差異。具體地,在空閑可選內(nèi)存塊的大小等 于數(shù)據(jù)包的大小的情況下,步驟S106具體包括直接使用空閑可選 內(nèi)存塊保存數(shù)據(jù)包。另外需要"i兌明的是,在本發(fā)明實施例中,優(yōu)選地,具有相同大 小的內(nèi)存塊以鏈狀排列,形成內(nèi)存塊鏈表(或者稱為數(shù)據(jù)塊鏈表)?;诖?,在空閑可選內(nèi)存塊的大小大于數(shù)據(jù)包的大小的情況下, 步驟S106具體包括對空閑可選內(nèi)存塊執(zhí)行分裂操作,得到具有相 同大小的兩個子內(nèi)存塊(第一個字內(nèi)存塊和第二個子內(nèi)存塊),本發(fā) 明中,分裂操作用于將內(nèi)存塊均分為具有相同大小的兩個子內(nèi)存塊; 并且將第二個子內(nèi)存塊(即,后一個子內(nèi)存塊)加入與其具有相同 大小的內(nèi)存塊組成的內(nèi)存塊鏈表;并且,判斷第一個子內(nèi)存塊是否 為可用內(nèi)存塊,在判斷結(jié)果為是的情況下,使用第一個子內(nèi)存塊保 存數(shù)據(jù)包,在判斷結(jié)果為否的情況下,對第一個子內(nèi)存塊執(zhí)行分裂 操作,直到分裂得到可用內(nèi)存塊,并使用可用內(nèi)存塊保存數(shù)據(jù)包,其中,可用內(nèi)存塊的大小等于數(shù)據(jù)包的大小,或者大于數(shù)據(jù)包的大 小且小于數(shù)據(jù)包的大小的兩倍。乂人上面的描述可以看出,^y亍分裂的次凄t越少,則系統(tǒng)的效率 最高,因此,在初始規(guī)劃內(nèi)存塊時,可以根據(jù)系統(tǒng)實際情況預(yù)先設(shè)置允許執(zhí)行的分裂操作的級數(shù)閾值,只能進行l(wèi)級或n級分裂,否則就直接使用而不分裂。設(shè)置分裂操作的級數(shù)閾值,按照可能申請 內(nèi)存塊大小的相克率來進行,可以通過內(nèi)存塊分裂的統(tǒng)計試-驗進4亍頭見 劃,盡量減少內(nèi)存分裂。通過本發(fā)明l是供的共享內(nèi)存管理方法,能夠?qū)?nèi)存進4亍有效利 用,兼顧不同業(yè)務(wù)類型對數(shù)據(jù)包緩沖的大小以及數(shù)量的要求,提高 了系統(tǒng)的歲丈率。針對具體的通信系統(tǒng),例如HSPA和LTE的系統(tǒng),數(shù)據(jù)包大 量i也纟爰存在凄史才居包匯聚十辦i義(Packet Data Convergence Protocol ,簡 稱為PDCP )子層和無線鏈路控制(Radio Link Control,簡稱為RLC ) 子層中;業(yè)務(wù)速率越高,RLC子層的窗口越大,則消4毛的包越多。 以PDCP子層為例,才艮據(jù)本發(fā)明實施例的共享內(nèi)存管理方法包括以 下步驟步驟1. PDCP子層收到大小為p字節(jié)的數(shù)據(jù)包,向l乘作系統(tǒng)申 請p字節(jié)內(nèi)存;步驟2.操作系統(tǒng)計算大于p字節(jié)的最小2的整數(shù)次冪,比如 為q,則查找q對應(yīng)的ft據(jù)塊《連表,如果有空閑凄t據(jù)塊,則向PDCP 子層返回數(shù)據(jù)指針,跳轉(zhuǎn)到步驟6,否則繼續(xù)步驟3;步驟3.查找2q對應(yīng)的內(nèi)存塊鏈表,如果有空閑內(nèi)存塊,則將 其分裂成同樣大小的2塊,前一塊返回給PDCP子層,后一塊掛到 大小為q的內(nèi)存塊鏈表尾,跳轉(zhuǎn)到步驟6,否則繼續(xù)步驟4;步驟4.查找4q對應(yīng)的內(nèi)存塊鏈表,如果有空閑內(nèi)存塊,則將 其分裂成同樣大小的2塊,后一塊掛到大小為2q的內(nèi)存塊鏈表中去, 前一塊繼續(xù)分裂成大小為q的兩塊,前一塊返回給PDCP子層,后 一塊掛到大小為q的內(nèi)存塊列表中去;步-驟5.以此類推,如果所有大于q的內(nèi)存塊都沒有空閑,那 么表示申請空間失敗,給PDCP返回空指針;步驟6. PDCP子層獲得指針后,將收到的4fet據(jù)復(fù)制到該地址 所指向的空間。該實施例根據(jù)實際需要內(nèi)存選擇共享緩沖區(qū)中相應(yīng)大小的內(nèi)存 塊進4亍存儲,當(dāng)該內(nèi)存塊用盡時,可以通過更大一級內(nèi)存塊等分分 裂得到;如果更大一級的內(nèi)存塊也已用盡,則可循環(huán)這一過程,直 到得到所需的內(nèi)存塊。通過上述實施例不僅加快了查找速度,并且 既不會浪費內(nèi)存空間,也不會造成內(nèi)存^f爭片。此外,在進行分裂操作后,根據(jù)本發(fā)明實施例的共享內(nèi)存管理 方法還包括如下處理對于執(zhí)行分裂操作得到的加入內(nèi)存塊鏈表的 各個內(nèi)存塊,分別i殳置分裂標(biāo)記,其中,分裂標(biāo)記用于標(biāo)識內(nèi)存塊 為分裂得到的內(nèi)存塊,以及內(nèi)存塊對應(yīng)的分裂級數(shù)。這樣是為了便 于后續(xù)的內(nèi)存塊回收處理,在進4亍內(nèi)存回收時,對分裂得到的內(nèi)存 塊要進行合并,根據(jù)設(shè)置的分裂標(biāo)記,可以找到相關(guān)的內(nèi)存塊。其中,在保存有數(shù)據(jù)包的內(nèi)存塊釋放其保存的數(shù)據(jù)包的情況下, 根據(jù)本發(fā)明實施例的共享內(nèi)存管理方法還包括檢查內(nèi)存塊是否攜 帶有分裂標(biāo)記,在判斷結(jié)果為是的情況下,進一步查找是否有與其 大小相同的空閑的內(nèi)存塊,即,查找該內(nèi)存塊對應(yīng)的分裂得到的另 一個內(nèi)存塊是否空閑;在查找到的情況下,將攜帶有分裂標(biāo)記的內(nèi) 存塊與查找到的內(nèi)存塊進行合并,將合并得到的內(nèi)存塊根據(jù)大小加入相應(yīng)的內(nèi)存塊鏈表,其中,在分裂標(biāo)記標(biāo)識的分裂級數(shù)為一級分裂的情況下,刪除分裂標(biāo)記,在分裂標(biāo)記標(biāo)識的分裂級^:大于一級 的情況下,將分裂標(biāo)記的分裂級數(shù)減一。優(yōu)選地,優(yōu)先選擇沒有攜帶分裂標(biāo)記的內(nèi)存塊執(zhí)行分裂操作。具體地,下行數(shù)據(jù)包處理完畢,需要釋放占用的內(nèi)存塊,根據(jù) 本發(fā)明實施例的共享內(nèi)存管理方法包括以下步驟步驟1. PDCP子層要釋放內(nèi)存塊大小為q的數(shù)據(jù)包;步驟2.檢查該內(nèi)存塊是否為分裂所得,如果不是,則直接掛 到大小為q的內(nèi)存塊鏈表中去,處理結(jié)束;如果是分裂所得,那么 查找該內(nèi)存塊對應(yīng)分裂的另一個內(nèi)存塊是否空閑,如果不空閑,那 么直接掛到大小為q的內(nèi)存塊列表中去,處理結(jié)束,如果空閑,繼 續(xù)步驟3;步驟3.將地址連續(xù)的兩塊q大小的內(nèi)存塊合并,放入到2q對 應(yīng)的內(nèi)存塊鏈表中去,如果仍然為分裂所得,則按照上面的過程繼 續(xù)合并,否則處理結(jié)束。通過該實施例,將需要釋放內(nèi)存的較小的內(nèi)存塊合并成較大的 內(nèi)存塊,達到了系統(tǒng)的動態(tài)自適應(yīng)平4軒。下面參考圖2進一步描述本發(fā)明實施例。圖2示出了才艮據(jù)本發(fā) 明實施例的共享內(nèi)存管理方法的實現(xiàn)實例的示意圖。將共享緩沖區(qū) 按照2的整凄t次冪分為32、 64、 128、 256、 512、 1K、 2K、 4K、 8K、 16K等多個數(shù)組,每個數(shù)組對應(yīng)一個固定大小內(nèi)存塊的鏈表,每次 內(nèi)存申請的時候,則從對應(yīng)大小的鏈表頭取出空閑內(nèi)存塊,內(nèi)存返 還的時4矣,;改到隊列尾部。內(nèi)存塊中打上分裂標(biāo)志FI。如果沒有空閑的2K的內(nèi)存塊,那么繼續(xù)獲得4K的內(nèi)存塊,首 先將4K的內(nèi)存塊分為2個2K的內(nèi)存塊,在后一個內(nèi)存塊上打上 FI,》文入2K內(nèi)存塊鏈表。然后,將前一個2K的分成兩個1K的內(nèi) 存塊,4吏用第一個,而將后一個打上FI,》文入1K內(nèi)存塊鏈表。由于每次都是在后一個內(nèi)存塊上打上FI,當(dāng)某個內(nèi)存塊被釋放 時,如果發(fā)現(xiàn)有FI標(biāo)志,則按照其相等長度,根據(jù)物理地址查找空 閑隊列中是否有其前一個內(nèi)存塊,如果發(fā)現(xiàn),則合并成一個更大的 內(nèi)存塊,放入大一級的內(nèi)存塊鏈表中,并去掉FI標(biāo)志。在選取大一級內(nèi)存塊進行分裂的時候,盡量選擇沒有打過FI 標(biāo)志的,因為對于打過FI標(biāo)志的內(nèi)存塊,再進行分裂時,需要在后 一個分裂塊中打上FI2標(biāo)志,這里的FI2 —方面表示該內(nèi)存塊是通 過分裂所得,另一方面也表示是通過二級分裂所得。這樣,在合并 時, 一個打著FI2標(biāo)志的內(nèi)存塊和它的前一個(物理地址連續(xù))相 同大小的內(nèi)存塊如果都空閑,則可以合并,那么合并之后的內(nèi)存塊, 如果其相同大小的前一個內(nèi)存塊空閑,則繼續(xù)合并,否則,還需要 打上FI標(biāo)志,等4寺下一次返還時試圖合并,以此類4侓。乂人上面的描述可以看出,如果分裂越少,則系統(tǒng)的歲文率最高, 可以根據(jù)系統(tǒng)實際情況定制。因此,在初始規(guī)劃內(nèi)存塊的時候,需 要盡可能科學(xué)的規(guī)劃,按照可能申請內(nèi)存塊大小的概率來進行,可 以通過內(nèi)存塊分裂的統(tǒng)計試-驗來進行失見劃,盡量減少內(nèi)存分裂。從策略上來說,應(yīng)該在初始分配的時候,盡量分配多一些的較 大數(shù)據(jù)塊,因為高速系統(tǒng)需要大量較大的數(shù)據(jù)塊,同時較小數(shù)據(jù)塊 可以從較大的數(shù)據(jù)塊分裂得到。但是較小的數(shù)據(jù)塊也必須同時保證 一定基本的數(shù)量,這些小數(shù)據(jù)塊是不能被合并的,同時占用的內(nèi)存 總量也不是特別大。/人處理的復(fù)雜度上看,系統(tǒng)具有明顯的自適應(yīng)性,當(dāng)系統(tǒng)中的 某類長度數(shù)據(jù)包業(yè)務(wù)特別多的時候,該數(shù)據(jù)包大小的內(nèi)存塊單元將 明顯減少,當(dāng)用盡時,則需要從更大一級的數(shù)據(jù)包分裂得到,如果持續(xù)使用的量非常大,那么被分裂的內(nèi)存塊,也就是帶FI的內(nèi)存塊, 和其前面的另 一個內(nèi)存塊同時空閑的概率很小,合并的概率就會很 小,從而避免了反復(fù)的分裂合并;其次,由于大量使用時,空閑的 內(nèi)存塊很少,所以搜索FI內(nèi)存塊對應(yīng)同樣大小的另一個內(nèi)存塊是否 空閑,也將變得簡單。當(dāng)該類大小的數(shù)據(jù)包業(yè)務(wù)減少的時候,空閑的^^幾率增加,合并 的概率將大大增加,從而達到系統(tǒng)的動態(tài)自適應(yīng)平衡,恢復(fù)到系統(tǒng) 啟動時的平衡內(nèi)存塊分配狀態(tài)。例如系統(tǒng)為每類大小的內(nèi)存塊都預(yù)先分了 10塊,現(xiàn)在所有的 業(yè)務(wù)都需要1K大小的內(nèi)存塊,則1K的內(nèi)存塊很快就被用完了 ,此 時就要2K的內(nèi)存塊去分裂,如果全部分裂完畢,那么整個系統(tǒng)可 以用10 + 20 = 30個1K的內(nèi)存塊,如果還是不夠那么繼續(xù)分裂4K 的內(nèi)存塊,整個系統(tǒng)可以用10 + 20 + 40的1K內(nèi)存塊,由于Jt時 1K的內(nèi)存塊空閑鏈表很短,因此當(dāng)1K的內(nèi)存塊返回時,很容易就 能搜索完整個鏈表,看是否需要內(nèi)存塊的合并。當(dāng)1K大小的業(yè)務(wù) 十曼十曼少了的時候,隨著1K內(nèi)存塊的逐漸釋》文合并,系統(tǒng)又會恢復(fù) 原先的每類大小的內(nèi)存塊都為IO塊的狀態(tài)。綜上所述,通過本發(fā)明提供的共享內(nèi)存管理方法,能夠?qū)?nèi)存 進行有效利用,兼顧不同業(yè)務(wù)類型對數(shù)據(jù)包緩沖的大小以及數(shù)量的 要求,提高了系統(tǒng)的效率。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或 各步艱《可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算 裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們 可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成 電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模 塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。以上所述^又為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明, 只寸于本4貞i或的^支術(shù)人員來i兌,本發(fā)明可以有各種更改和變^f匕。凡在 本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等, 均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種共享內(nèi)存管理方法,其特征在于,包括將共享緩存區(qū)按照2的整數(shù)次冪分成多個內(nèi)存塊,其中,相鄰的兩個內(nèi)存塊中的后一內(nèi)存塊的大小是前一內(nèi)存塊的大小的2×n倍,n為大于等于1的整數(shù);接收數(shù)據(jù)包,根據(jù)所述數(shù)據(jù)包的大小按照內(nèi)存塊的大小順序遍歷可選內(nèi)存塊,其中,所述可選內(nèi)存塊為等于或大于所述數(shù)據(jù)包的大小的內(nèi)存塊;使用最先遍歷到的空閑可選內(nèi)存塊保存所述數(shù)據(jù)包。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述空閑可選內(nèi) 存塊的大小等于所述數(shù)據(jù)包的大小的情況下,所述使用最先遍 歷到的空閑可選內(nèi)存塊保存所述數(shù)據(jù)包具體包括直接使用所述空閑可選內(nèi)存塊保存所述數(shù)據(jù)包。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,具有相同大小的內(nèi) 存塊以鏈狀排列,形成內(nèi)存塊鏈表。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,在所述空閑可選內(nèi) 存塊的大小大于所述數(shù)據(jù)包的大小的情況下,所述使用最先遍 歷到的空閑可選內(nèi)存塊保存所述凄t據(jù)包具體包括對所述空閑可選內(nèi)存塊執(zhí)4亍用于將內(nèi)存塊均分為具有相 同大小的兩個子內(nèi)存塊的分裂操:作,得到具有相同大小的兩個 子內(nèi)存塊;根據(jù)第二個子內(nèi)存塊的大小將其加入相應(yīng)的內(nèi)存塊鏈表;判斷第一個子內(nèi)存塊是否為可用內(nèi)存塊,在判斷結(jié)果為是 的情況下,使用所述第一個子內(nèi)存塊保存所述數(shù)據(jù)包,在判斷 結(jié)果為否的情況下,對所述第 一個子內(nèi)存塊執(zhí)行所述分裂操 作,直到分裂得到可用內(nèi)存塊,并使用所述可用內(nèi)存塊保存所 述數(shù)據(jù)包,其中,所述可用內(nèi)存塊的大小等于所述數(shù)據(jù)包的大 小,或者大于所述數(shù)據(jù)包的大小且小于所述數(shù)據(jù)包的大小的兩 倍。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,在執(zhí)行所述分裂操 作時,預(yù)先設(shè)置允許執(zhí)行的分裂操作的級數(shù)閾值。
6. 根據(jù)權(quán)利要求4所述的方法,其特征在于,在進行所述分裂操 作后,所述方法還包括對于#1行所述分裂才喿作得到的加入內(nèi)存塊《連表的各個內(nèi) 存塊,分別i殳置分裂標(biāo)記,其中,所述分裂標(biāo)記用于標(biāo)識所述 內(nèi)存塊為分裂得到的內(nèi)存塊,以及所述內(nèi)存塊對應(yīng)的分裂級 數(shù)。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,在保存有數(shù)據(jù)包的 內(nèi)存塊釋》文其保存的數(shù)據(jù)包的情況下,所述方法還包括檢查所述內(nèi)存塊是否攜帶有分裂標(biāo)記,在判斷結(jié)果為是的 情況下,進一步查找是否有與其大小相同且物理地址連續(xù)的空 閑的內(nèi)存塊;在查找到所述空閑的內(nèi)存塊的情況下,將攜帶有分裂標(biāo)記 的內(nèi)存塊與查找到的內(nèi)存塊進行合并,將合并得到的內(nèi)存塊根 據(jù)大小加入相應(yīng)的內(nèi)存塊鏈表,其中,在所述分裂標(biāo)記標(biāo)識的 分裂級lt為一級分裂的情況下,刪除所述分裂標(biāo)記,在所述分 裂標(biāo)記標(biāo)識的分裂級凄t大于一級的情況下,將所述分裂標(biāo)記的 分裂級數(shù)減一。
8. 根據(jù)權(quán)利要求7所述的方法,其特征在于,在查找不到所述空 閑的數(shù)據(jù)塊的情況下,將所述內(nèi)存塊才艮據(jù)大小加入與其對應(yīng)的 凄t據(jù)塊鏈表。
9. 根據(jù)權(quán)利要求6所述的方法,其特征在于,優(yōu)先選擇沒有攜帶 所述分裂標(biāo)記的內(nèi)存塊執(zhí)行所述分裂操作。
10. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述共享緩存區(qū)的 最小內(nèi)存塊為32字節(jié)。
11. 根據(jù)權(quán)利要求2至10中任一項所述的方法,其特征在于,n = L
全文摘要
本發(fā)明公開了一種共享內(nèi)存管理方法,該方法包括將共享緩存區(qū)按照2的整數(shù)次冪分成多個內(nèi)存塊,其中,相鄰的兩個內(nèi)存塊中的后一內(nèi)存塊的大小是前一內(nèi)存塊的大小的2×n倍,n為大于等于1的整數(shù);接收數(shù)據(jù)包,根據(jù)數(shù)據(jù)包的大小按照內(nèi)存塊的大小順序遍歷可選內(nèi)存塊,其中,可選內(nèi)存塊為等于或大于數(shù)據(jù)包的大小的內(nèi)存塊;使用最先遍歷到的空閑可選內(nèi)存塊保存數(shù)據(jù)包。通過本發(fā)明,能夠提高系統(tǒng)效率。
文檔編號H04L1/00GK101630992SQ20081013794
公開日2010年1月20日 申請日期2008年7月14日 優(yōu)先權(quán)日2008年7月14日
發(fā)明者阮象華, 侃 黃 申請人:中興通訊股份有限公司