亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種緩存分配方法及裝置的制作方法

文檔序號(hào):7590884閱讀:128來源:國知局
專利名稱:一種緩存分配方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,具體涉及一種緩存分配方法及裝置。
背景技術(shù)
在通信、計(jì)算機(jī)編程等領(lǐng)域中,緩存有著廣泛的應(yīng)用。在很多情況下,需要對(duì)一些臨時(shí)數(shù)據(jù)進(jìn)行緩存,比如在兩個(gè)模塊之間的數(shù)據(jù)接口中經(jīng)常對(duì)數(shù)據(jù)進(jìn)行緩存,即在存儲(chǔ)單元中分配一定的存儲(chǔ)空間,用來暫時(shí)存儲(chǔ)數(shù)據(jù)。通常采用堆棧或存儲(chǔ)隊(duì)列的方式來實(shí)現(xiàn)緩存中數(shù)據(jù)的存取操作。
目前,采用存儲(chǔ)隊(duì)列實(shí)現(xiàn)的緩存系統(tǒng)中,分配緩存的方法通常有以下兩種一是采用固定分配緩存的方法,即為緩存分配固定的內(nèi)存空間,在以后的使用中,緩存的大小不發(fā)生變化。為了保證每次向緩存中存入數(shù)據(jù)時(shí)不會(huì)溢出,就要為緩存分配足夠大的空間,因此,就會(huì)造成很多情況下存儲(chǔ)空間的浪費(fèi),若事先分配的緩存空間不是足夠大,就會(huì)使某些數(shù)據(jù)丟失。
二是采用動(dòng)態(tài)分配緩存的方法。在計(jì)算機(jī)中FIFO(先進(jìn)先出)是一種先進(jìn)先出的緩存系統(tǒng),是由一個(gè)內(nèi)存指針來指向的,因此,在每次使用時(shí),根據(jù)要存儲(chǔ)的數(shù)據(jù)長度設(shè)定指針?biāo)赶虻膬?nèi)存即可改變緩存的大小。這樣雖然可減少存儲(chǔ)空間的浪費(fèi),但是,在這種方法中,需要頻繁地改變一個(gè)指針?biāo)赶虻膬?nèi)存,以滿足當(dāng)前長度數(shù)據(jù)的存儲(chǔ)要求,這樣就有可能會(huì)帶來系統(tǒng)的不穩(wěn)定,同時(shí)也降低了緩存系統(tǒng)的效率。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種緩存分配方法及裝置,以克服現(xiàn)有技術(shù)中采用固定存儲(chǔ)空間時(shí)的空間浪費(fèi)及數(shù)據(jù)溢出的問題。
本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的一種緩存分配方法,其特征在于,包括A、設(shè)定默認(rèn)緩存空間;B、獲取存儲(chǔ)數(shù)據(jù)長度和可用緩存空間;C、當(dāng)所述存儲(chǔ)數(shù)據(jù)長度大于所述可用緩存空間時(shí),按預(yù)定擴(kuò)展規(guī)則擴(kuò)展所述默認(rèn)緩存空間;D、當(dāng)所述存儲(chǔ)數(shù)據(jù)長度小于所述可用緩存空間第一預(yù)定值時(shí),按預(yù)定縮小規(guī)則縮小所述默認(rèn)緩存空間。
所述默認(rèn)緩存空間的末端包括至少一個(gè)空位。
所述步驟B包括B1、設(shè)定緩存標(biāo)識(shí)參數(shù);B2、根據(jù)所述緩存標(biāo)識(shí)參數(shù)的實(shí)際值獲取所述可用緩存空間。
所述緩存標(biāo)識(shí)參數(shù)包括已用緩存的起始指針、已用緩存的終止指針、緩存滿標(biāo)識(shí)、緩存空標(biāo)識(shí)。
所述步驟B1包括當(dāng)所述默認(rèn)緩存空間全部可用時(shí),設(shè)定所述緩存滿標(biāo)識(shí)為假、緩存空標(biāo)識(shí)為真;當(dāng)所述默認(rèn)緩存空間部分可用時(shí),設(shè)定所述緩存滿標(biāo)識(shí)為假、緩存空標(biāo)識(shí)為假;當(dāng)所述默認(rèn)緩存空間都不可用時(shí),設(shè)定所述緩存滿標(biāo)識(shí)為真、緩存空標(biāo)識(shí)為假。
所述步驟C中的預(yù)定擴(kuò)展規(guī)則包括C1、如果所述存儲(chǔ)數(shù)據(jù)長度大于所述可用緩存空間第二預(yù)定值,則將所述可用緩存空間擴(kuò)展為所述存儲(chǔ)數(shù)據(jù)長度;
C2、如果所述存儲(chǔ)數(shù)據(jù)長度小于所述可用緩存空間第二預(yù)定值,則將所述可用緩存空間擴(kuò)展為第二預(yù)定值。
所述步驟D包括當(dāng)所述存儲(chǔ)數(shù)據(jù)長度小于所述可用緩存空間的一半時(shí),將所述可用緩存空間縮小一半。
所述步驟C和步驟D中存入所述存儲(chǔ)數(shù)據(jù)時(shí),當(dāng)所述緩存滿標(biāo)識(shí)及所述緩存空標(biāo)識(shí)均為假時(shí),判斷所述已用緩存的終止指針是否到達(dá)所述默認(rèn)緩存空間末端的空位前;如果已到達(dá),則從所述默認(rèn)緩存空間的起始位置開始依次存入所述存儲(chǔ)數(shù)據(jù);如果未到達(dá),則從所述已用緩存的終止指針的下一個(gè)位置開始依次存入所述存儲(chǔ)數(shù)據(jù)。
一種緩存分配裝置,其特征在于,包括參數(shù)維護(hù)裝置,用于維護(hù)緩存標(biāo)識(shí)參數(shù);緩存空間獲取裝置,用于根據(jù)所述參數(shù)維護(hù)裝置中的緩存標(biāo)識(shí)參數(shù)獲取可用緩存空間;存儲(chǔ)數(shù)據(jù)獲取裝置,用于獲取存儲(chǔ)數(shù)據(jù)及其長度;緩存調(diào)整裝置,用于根據(jù)所述緩存空間獲取裝置和所述存儲(chǔ)數(shù)據(jù)獲取裝置的輸出調(diào)整緩存空間的長度;緩存分配單元,用于依次將所述存儲(chǔ)數(shù)據(jù)存入經(jīng)過所述緩存調(diào)整裝置調(diào)整后的可用緩存空間。
所述參數(shù)維護(hù)裝置包括參數(shù)設(shè)定裝置,用于設(shè)定所述緩存標(biāo)識(shí)參數(shù)的初始值;參數(shù)更新裝置,用于根據(jù)所述緩存調(diào)整裝置的調(diào)整結(jié)果及所述緩存分配單元的分配結(jié)果更新所述緩存標(biāo)識(shí)參數(shù)。
所述緩存調(diào)整裝置裝置包括
比較裝置,用于比較所述存儲(chǔ)數(shù)據(jù)長度和所述可用緩存空間;緩存擴(kuò)展裝置,用于根據(jù)所述比較裝置的比較結(jié)果擴(kuò)展緩存空間的長度;緩存縮小裝置,用于根據(jù)所述比較裝置的比較結(jié)果縮小緩存空間的長度。
由以上本發(fā)明提供的技術(shù)方案可以看出,本發(fā)明根據(jù)存儲(chǔ)數(shù)據(jù)長度相對(duì)于可用緩存空間變化的大小來調(diào)整緩存空間,對(duì)于較大的數(shù)據(jù)長度,分配較大的存儲(chǔ)空間,從而防止了數(shù)據(jù)的溢出;當(dāng)存儲(chǔ)數(shù)據(jù)的長度較可用緩存空間小于一預(yù)定值時(shí),才改變緩存容量,這樣就可以根據(jù)系統(tǒng)的實(shí)際配置設(shè)定調(diào)整參數(shù),既避免了緩存容量的浪費(fèi),同時(shí)又兼顧了改變緩存大小的頻率,不需要頻繁地改變緩沖區(qū)指針的位置,提高了系統(tǒng)的穩(wěn)定性及數(shù)據(jù)存取效率。


圖1是本發(fā)明緩存分配方法的詳細(xì)流程圖;圖2是本發(fā)明方法中的默認(rèn)緩存空間結(jié)構(gòu)的初始狀態(tài)示意圖;圖3是圖2所示的緩存空間結(jié)構(gòu)使用部分空間后的一種狀態(tài);圖4是圖2所示的緩存空間結(jié)構(gòu)使用部分空間后的另一種狀態(tài);圖5是將圖3所示的緩存空間的可用空間擴(kuò)展到存儲(chǔ)數(shù)據(jù)長度后的狀態(tài);圖6是將圖3所示的緩存空間的可用空間擴(kuò)展一倍后的狀態(tài);圖7是本發(fā)明方法中按預(yù)定縮小規(guī)則縮小緩存空間前后對(duì)照?qǐng)D;圖8是本發(fā)明緩存分配裝置的結(jié)構(gòu)示意圖;圖9是本發(fā)明在SDH類邏輯仿真激勵(lì)數(shù)據(jù)產(chǎn)生過程中的一個(gè)應(yīng)用實(shí)例。
具體實(shí)施例方式
本發(fā)明的核心在于在特定的條件下對(duì)緩存空間進(jìn)行調(diào)整,即根據(jù)存儲(chǔ)數(shù)據(jù)長度與可用緩存空間的相對(duì)差值對(duì)緩存空間按預(yù)定規(guī)則進(jìn)行擴(kuò)展或縮小當(dāng)存儲(chǔ)數(shù)據(jù)長度大于可用緩存空間時(shí),按預(yù)定擴(kuò)展規(guī)則擴(kuò)展緩存空間;當(dāng)存儲(chǔ)數(shù)據(jù)長度小于可用緩存空間第一預(yù)定值時(shí),按預(yù)定縮小規(guī)則縮小緩存空間。預(yù)定擴(kuò)展規(guī)則包括如果存儲(chǔ)數(shù)據(jù)長度大于可用緩存空間第二預(yù)定值,則將可用緩存空間擴(kuò)展為存儲(chǔ)數(shù)據(jù)長度;否則將可用緩存空間擴(kuò)展為第二預(yù)定值。這樣,使緩存空間始終保持合適容量的同時(shí)減少調(diào)整的次數(shù)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
參照?qǐng)D1,圖1描述了本發(fā)明緩存分配方法的詳細(xì)流程,包括以下步驟步驟101設(shè)定默認(rèn)緩存空間,也就是分配一定長度的計(jì)算機(jī)內(nèi)存,用于存儲(chǔ)數(shù)據(jù)。
默認(rèn)緩存空間結(jié)構(gòu)的初始狀態(tài)如圖2所示該緩存空間的默認(rèn)長度為DefaultLength;在默認(rèn)緩存空間的末端設(shè)定一個(gè)或多個(gè)空位,在為存儲(chǔ)數(shù)據(jù)分配緩存空間時(shí),該空位始終不被使用,以防止系統(tǒng)出現(xiàn)異常情況時(shí)數(shù)據(jù)溢出。在該例中包括一個(gè)空位。
步驟102設(shè)定緩存標(biāo)識(shí)參數(shù)。所述緩存標(biāo)識(shí)參數(shù)包括已用緩存的起始指針、已用緩存的終止指針、當(dāng)前指針、緩存滿標(biāo)識(shí)、緩存空標(biāo)識(shí)。其中,所述當(dāng)前指針用來指示當(dāng)前數(shù)據(jù)的位置;所述緩存滿標(biāo)識(shí)(FullFlag)表示默認(rèn)緩存空間中是否已沒有可用空間,所述緩存空標(biāo)識(shí)(EmptyFlag)表示默認(rèn)緩存空間中是否還有可用空間,因此,緩存滿標(biāo)識(shí)和緩存空標(biāo)識(shí)有以下三種組合狀態(tài)當(dāng)默認(rèn)緩存空間全部可用時(shí),緩存滿標(biāo)識(shí)為假、緩存空標(biāo)識(shí)為真;當(dāng)默認(rèn)緩存空間部分可用時(shí),緩存滿標(biāo)識(shí)為假、緩存空標(biāo)識(shí)為假;當(dāng)默認(rèn)緩存空間都不可用時(shí),緩存滿標(biāo)識(shí)為真、緩存空標(biāo)識(shí)為假。
在圖2所示的緩存空間結(jié)構(gòu)的初始狀態(tài)中,已用緩存的起始指針(StartP)和已用緩存的終止指針(EndP)均指向設(shè)定的默認(rèn)緩存空間的始端,即StartP=0,EndP=0,當(dāng)前數(shù)據(jù)指針Pointer=0,此時(shí),默認(rèn)緩存空間的總?cè)萘緼llCapacity=DefaultLength;已用空間UsedCapacity=0;可用空間EmptyCapacity=DefaultLength-l;緩存滿標(biāo)識(shí)FullFlag=false;緩存空標(biāo)識(shí)EmptyFlag=true。
圖3和圖4是圖2所示的緩存空間結(jié)構(gòu)使用部分空間后的兩種狀態(tài)默認(rèn)緩存空間使用部分空間后,已用緩存的起始指針在默認(rèn)緩存空間的起始位置,即StartP=0時(shí),緩存空間結(jié)構(gòu)的狀態(tài)如圖3所示。此時(shí),默認(rèn)緩存空間的總?cè)萘緼llCapacity=DefaultLength;已用空間UsedCapacity=EndP;可用空間EmptyCapacity=DefaultLength-l-EndP;緩存滿標(biāo)識(shí)FullFlag=false;緩存空標(biāo)識(shí)EmptyFlag=false。
默認(rèn)緩存空間使用部分空間后,已用緩存的起始指針在默認(rèn)緩存空間的中間位置,即StartP>0時(shí),緩存空間結(jié)構(gòu)的狀態(tài)如圖4所示。此時(shí),默認(rèn)緩存空間的總?cè)萘緼llCapacity=DefaultLength;已用空間UsedCapacity=EndP-StartP;可用空間EmptyCapacity=DefaultLength-l-(EndP-StartP);緩存滿標(biāo)識(shí)FullFlag=false;緩存空標(biāo)識(shí)EmptyFlag=true。
步驟103根據(jù)緩存標(biāo)識(shí)參數(shù)的實(shí)際值獲取可用緩存空間。
對(duì)于已用緩存的起始指針在默認(rèn)緩存空間的起始位置的不同,有以下兩種情況當(dāng)StartP=0時(shí),可用緩存空間EmptyCapacity=DefaultLength-EndP;當(dāng)StartP>0時(shí),可用緩存空間EmptyCapacity=DefaultLength-(EndP-StartP)。
步驟104獲取存儲(chǔ)數(shù)據(jù)長度。
步驟105判斷存儲(chǔ)數(shù)據(jù)長度是否大于可用緩存空間。
如果存儲(chǔ)數(shù)據(jù)長度大于可用緩存空間,則進(jìn)到步驟106進(jìn)一步判斷存儲(chǔ)數(shù)據(jù)長度是否大于可用緩存空間第二預(yù)定值。比如,可以設(shè)定第二預(yù)定值為2倍可用緩存空間。
如果是,則進(jìn)到步驟107將可用緩存空間擴(kuò)展為存儲(chǔ)數(shù)據(jù)長度。然后,進(jìn)到步驟111存入存儲(chǔ)數(shù)據(jù)。
如果不是,則進(jìn)到步驟108將可用緩存空間擴(kuò)展為第二預(yù)定值。然后,進(jìn)到步驟111存入存儲(chǔ)數(shù)據(jù)。
如果存儲(chǔ)數(shù)據(jù)長度小于可用緩存空間,則進(jìn)到步驟109進(jìn)一步判斷存儲(chǔ)數(shù)據(jù)長度是否小于可用緩存空間第一預(yù)定值。比如,可以設(shè)定第一預(yù)定值為二分之一可用緩存空間。
如果是,則進(jìn)到步驟110按預(yù)定縮小規(guī)則縮小默認(rèn)緩存空間。然后,進(jìn)到步驟111存入存儲(chǔ)數(shù)據(jù)。
如果不是,則不調(diào)整可用緩存空間的大小,直接進(jìn)到步驟111存入存儲(chǔ)數(shù)據(jù)。
步驟112更新緩存標(biāo)識(shí)參數(shù)。
圖3所示的緩存空間按照本發(fā)明方法中的緩存擴(kuò)展規(guī)則擴(kuò)展后的緩存空間狀態(tài)分別如圖5和圖6所示。
參照?qǐng)D5,圖5是將圖3所示的緩存空間的可用空間擴(kuò)展到存儲(chǔ)數(shù)據(jù)長度后的狀態(tài)假設(shè)擴(kuò)展前的可用空間為N,擴(kuò)展的長度為M(M>N),則此時(shí)默認(rèn)緩存空間的總?cè)萘緼llCapacity=DefaultLength+M;已用空間UsedCapacity=EndP;可用空間EmptyCapacity=0。
緩存滿標(biāo)識(shí)FullFlag=true;緩存空標(biāo)識(shí)EmptyFlag=false。
再參照?qǐng)D6,圖6是將圖3所示的緩存空間的可用空間擴(kuò)展一倍后的狀態(tài)假設(shè)擴(kuò)展前的可用空間為N,則先將可用空間擴(kuò)大一倍,然后將數(shù)據(jù)存入可用空間內(nèi),此時(shí),已用緩存的終止指針EndP更新為原EndP+存儲(chǔ)數(shù)據(jù)長度。將可用空間的大小減去存入數(shù)據(jù)長度,再檢查其大小,如果為0,則FullFlag信號(hào)置為True,其它參數(shù)保持不變。
默認(rèn)緩存空間的總?cè)萘緼llCapacity=DefaultLength+N;已用空間UsedCapacity=EndP;可用空間EmptyCapacity=DefaultLength+N-l-EndP。
緩存滿標(biāo)識(shí)FullFlag=false;緩存空標(biāo)識(shí)EmptyFlag=false。
圖7示出了按照本發(fā)明方法中緩存縮小規(guī)則(設(shè)定第一預(yù)定值為二分之一可用緩存空間時(shí))縮小緩存空間前后對(duì)照?qǐng)D先將縮小前的可用空間EmptyCapacity減小一半,并釋放掉相應(yīng)的內(nèi)存空間,存入數(shù)據(jù)后EmptyCapacity減去存入數(shù)據(jù)長度,然后檢查EmptyCapacity是否為0,如是則FullFlag為true,其他信號(hào)保持不變。
假設(shè)縮小前的可用空間為N,縮小可用空間一半并存入數(shù)據(jù)后,則此時(shí)默認(rèn)緩存空間的總?cè)萘緼llCapacity=DefaultLength+M-N/2;已用空間UsedCapacity=EndP;可用空間EmptyCapacity=DefaultLength+M-N/2-EndP。
緩存滿標(biāo)識(shí)FullFlag=false;緩存空標(biāo)識(shí)EmptyFlag=false。
為了提高緩存空間的利用率,在本發(fā)明方法中,對(duì)于緩存空間采用循環(huán)利用的方式,即已用緩存的終止指針到達(dá)默認(rèn)緩存空間末端的空位前時(shí),如果緩存空間未滿,則接著使用始端的空間。具體為
當(dāng)緩存滿標(biāo)識(shí)及緩存空標(biāo)識(shí)均為假時(shí),判斷已用緩存的終止指針是否到達(dá)默認(rèn)緩存空間末端的空位前;如果已到達(dá),則從默認(rèn)緩存空間的起始位置開始依次存入存儲(chǔ)數(shù)據(jù);如果未到達(dá),則從已用緩存的終止指針的下一個(gè)位置開始依次存入存儲(chǔ)數(shù)據(jù)。
本發(fā)明還提供了對(duì)默認(rèn)緩存空間的多種操作,比如,通過當(dāng)前數(shù)據(jù)指針Pointer從指定位置取出一定量的數(shù)據(jù)、刪除緩存空間中指定位置的一定量的數(shù)據(jù)、清空緩存空間等。同樣,在對(duì)緩存空間中部分或全部進(jìn)行刪除后,需要更新對(duì)應(yīng)的緩存標(biāo)識(shí)參數(shù)。
下面參照?qǐng)D8所示的本發(fā)明緩存分配裝置的結(jié)構(gòu)示意圖,詳細(xì)說明本發(fā)明裝置的工作過程首先由參數(shù)維護(hù)裝置81中的參數(shù)設(shè)定裝置811設(shè)定緩存標(biāo)識(shí)參數(shù)的初始值,所述緩存標(biāo)識(shí)參數(shù)用來標(biāo)識(shí)緩存空間的狀態(tài),比如可以包括存儲(chǔ)單元85的長度、已用緩存的起始指針、已用緩存的終止指針、當(dāng)前指針、緩存滿標(biāo)識(shí)、緩存空標(biāo)識(shí)等;然后,由緩存空間獲取裝置82根據(jù)參數(shù)維護(hù)裝置81中的緩存標(biāo)識(shí)參數(shù)獲取可用緩存空間;同時(shí)由存儲(chǔ)數(shù)據(jù)獲取裝置83獲取存儲(chǔ)數(shù)據(jù)及其長度;然后,分別將獲取的可用緩存空間及存儲(chǔ)數(shù)據(jù)長度傳送給緩存調(diào)整裝置84中的比較裝置841,由比較裝置841按照預(yù)定規(guī)則比較存儲(chǔ)數(shù)據(jù)長度和可用緩存空間的大小,然后,根據(jù)比較結(jié)果通知緩存擴(kuò)展裝置842或緩存縮小裝置843將存儲(chǔ)單元85擴(kuò)展或縮小到一預(yù)定值。
比如按照如下規(guī)則如果存儲(chǔ)數(shù)據(jù)長度大于可用緩存空間一預(yù)定值,則通知緩存擴(kuò)展裝置842將存儲(chǔ)單元85中的可用緩存空間擴(kuò)展為存儲(chǔ)數(shù)據(jù)長度;否則通知緩存擴(kuò)展裝置842將其擴(kuò)展為一預(yù)定長度;
如果存儲(chǔ)數(shù)據(jù)長度小于可用緩存空間一預(yù)定值,則通知緩存縮小裝置843將存儲(chǔ)單元85中的可用緩存空間縮小為一預(yù)定長度,否則不作調(diào)整。
同時(shí),緩存擴(kuò)展裝置842及緩存縮小裝置843還要將對(duì)存儲(chǔ)單元85的調(diào)整結(jié)果通知參數(shù)維護(hù)裝置81中的參數(shù)更新裝置812,參數(shù)更新裝置812根據(jù)該通知更新參數(shù)設(shè)定裝置811中的緩存標(biāo)識(shí)參數(shù)。
通過上述對(duì)存儲(chǔ)單元85的調(diào)整,使得存儲(chǔ)單元85的可用空間總是適應(yīng)存儲(chǔ)數(shù)據(jù)的長度,既不會(huì)造成數(shù)據(jù)的溢出,也不會(huì)對(duì)緩存空間造成過多的浪費(fèi)。而且對(duì)存儲(chǔ)單元的調(diào)整是在一定條件下進(jìn)行的,不需要在每次存儲(chǔ)新的數(shù)據(jù)時(shí)都進(jìn)行設(shè)定,保持了存儲(chǔ)單元的相對(duì)穩(wěn)定性,從而提高了整個(gè)系統(tǒng)工作的穩(wěn)定性。
對(duì)存儲(chǔ)單元85中的可用空間調(diào)整到適應(yīng)存儲(chǔ)數(shù)據(jù)的長度后,由緩存分配單元86將存儲(chǔ)數(shù)據(jù)獲取裝置83中獲取的存儲(chǔ)數(shù)據(jù)依次存入存儲(chǔ)單元85中。同時(shí),通知參數(shù)更新裝置812根據(jù)存儲(chǔ)數(shù)據(jù)長度更新參數(shù)設(shè)定裝置811中的緩存標(biāo)識(shí)參數(shù)。
當(dāng)需要清除存儲(chǔ)單元85中的部分或全部數(shù)據(jù)時(shí),通過緩存清除單元87根據(jù)清除命令清除指定單元的數(shù)據(jù)。同時(shí),通知參數(shù)更新裝置812根據(jù)清除命令中數(shù)據(jù)長度及數(shù)據(jù)起始位置更新參數(shù)設(shè)定裝置811中的緩存標(biāo)識(shí)參數(shù)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面描述本發(fā)明的一個(gè)具體應(yīng)用實(shí)例,如圖9所示該例為在SDH類邏輯仿真激勵(lì)數(shù)據(jù)產(chǎn)生裝置中從報(bào)文生成模塊到LAPS(鏈路訪問過程-SDH)封裝模塊之間使用緩存的例子。在該例中,本發(fā)明的數(shù)據(jù)具體為報(bào)文,為了敘述方便,有時(shí)也稱作報(bào)文數(shù)據(jù)。
在該例中,報(bào)文生成模塊用于產(chǎn)生報(bào)文數(shù)據(jù);LAPS封裝模塊用于對(duì)報(bào)文生成模塊產(chǎn)生的報(bào)文數(shù)據(jù)進(jìn)行封裝;緩存管理模塊,用于對(duì)緩存進(jìn)行管理,同時(shí)與報(bào)文生成模塊和LAPS封裝模塊進(jìn)行通訊,并保證報(bào)文生成模塊和LAPS封裝模塊協(xié)同工作;FIFO是用于存放報(bào)文數(shù)據(jù)的緩存。緩存的使用情況由緩存的狀態(tài)來標(biāo)識(shí),緩存的狀態(tài)包括緩存空間總?cè)萘?、可用空間、已用空間、緩存滿標(biāo)識(shí)、緩存空標(biāo)識(shí)、起始指針及終止指針。
根據(jù)本發(fā)明的緩存分配過程如下LAPS封裝模塊從緩存FIFO中取報(bào)文數(shù)據(jù)進(jìn)行封裝,取數(shù)據(jù)時(shí)先檢查緩存FIFO的狀態(tài),如果發(fā)現(xiàn)緩存FIFO為空,則通知緩存管理模塊,然后緩存管理模塊通知報(bào)文生成模塊產(chǎn)生報(bào)文數(shù)據(jù),報(bào)文生成模塊根據(jù)配置參數(shù)產(chǎn)生報(bào)文后放入緩存FIFO中,然后LAPS封裝模塊從緩存中取得報(bào)文數(shù)據(jù)進(jìn)行封裝。
由于報(bào)文生成模塊產(chǎn)生的報(bào)文長度變化情況直接決定著緩存FIFO的使用,下面以報(bào)文長度依次為30字節(jié)、40字節(jié)(C類報(bào)文)、50字節(jié)為例來說明緩存的狀態(tài)。
工作過程如下(1)假設(shè)在初始狀態(tài)的緩存狀態(tài)如下表1所示(假設(shè)緩存的默認(rèn)長度為100,即DefaultLength=100),LAPS封裝模塊從緩存中取報(bào)文進(jìn)行封裝,經(jīng)檢查發(fā)現(xiàn)緩存是空的,則通知緩存管理模塊;表1

(2)緩存管理模塊通知報(bào)文生成模塊,要求其開始工作產(chǎn)生報(bào)文;(3)報(bào)文生成模塊根據(jù)報(bào)文配置參數(shù)生成第一個(gè)報(bào)文,報(bào)文長度為30字節(jié),按照?qǐng)?bào)文的結(jié)構(gòu)產(chǎn)生一個(gè)30字節(jié)的報(bào)文放入緩存中,在往緩存中存放時(shí)先檢查緩存的狀態(tài),發(fā)現(xiàn)緩存為空且容量為100,經(jīng)判斷,發(fā)現(xiàn)將緩存縮小一預(yù)定值(在本例中假設(shè)為1/2)后還能夠存放該報(bào)文數(shù)據(jù),所以,需要縮小緩存,即將緩存的可用空間縮小一半再將報(bào)文數(shù)據(jù)放入緩存中,此時(shí)緩存的狀態(tài)如下表2所示表2

(4)LAPS封裝模塊從緩存中取得報(bào)文數(shù)據(jù)并更新緩存的狀態(tài),以備存放下一報(bào)文,此時(shí)緩存的狀態(tài)如下表3所示,然后按LAPS協(xié)議進(jìn)行封裝報(bào)文;表3

(5)LAPS封裝模塊進(jìn)行第二個(gè)報(bào)文的封裝,取數(shù)據(jù)時(shí)先檢查緩存的狀態(tài),如果發(fā)現(xiàn)緩存空標(biāo)識(shí)為True,則通知緩存管理模塊,然后緩存管理模塊通知報(bào)文生成模塊產(chǎn)生報(bào)文數(shù)據(jù),報(bào)文生成模塊根據(jù)配置參數(shù)產(chǎn)生報(bào)文后放入緩存中,然后LAPS封裝模塊從緩存中取得報(bào)文數(shù)據(jù)進(jìn)行封裝。報(bào)文生成模塊生成第二個(gè)報(bào)文(假設(shè)報(bào)文長度為40字節(jié))放入緩存時(shí),先檢查緩存的狀態(tài),發(fā)現(xiàn)緩存的可用空間能夠滿足要求,且不需要伸縮緩存,可以將報(bào)文數(shù)據(jù)直接存入緩存,此時(shí)的狀態(tài)如下表4所示表4

(6)LAPS封裝模塊取走緩存中的報(bào)文數(shù)據(jù)并更新緩存的狀態(tài),此時(shí)的緩存狀態(tài)如下表5所示表5

(7)LAPS封裝模塊進(jìn)行第三個(gè)報(bào)文(50字節(jié)的報(bào)文),報(bào)文生成模塊產(chǎn)生報(bào)文放入緩存時(shí)檢查其狀態(tài),仍然發(fā)現(xiàn)緩存滿足要求而不收縮緩存,故可直接存入報(bào)文數(shù)據(jù),此時(shí)緩存的狀態(tài)如下表6所示
表6

(8)LAPS封裝模塊從緩存中取走50字節(jié)的報(bào)文數(shù)據(jù)后清空緩存,然后進(jìn)行LAPS封裝,此時(shí)緩存的狀態(tài)如下表7所示表7

(9)LAPS封裝模塊進(jìn)行第四個(gè)報(bào)文(假設(shè)報(bào)文長度為70字節(jié)),報(bào)文生成模塊產(chǎn)生報(bào)文放入緩存時(shí)檢查其狀態(tài),經(jīng)檢查,發(fā)現(xiàn)可用空間為50,則進(jìn)一步判斷報(bào)文長度是否大于可用空間一預(yù)定值(在本例中假設(shè)預(yù)定值為2倍可用空間),則將緩存擴(kuò)展一預(yù)定值(在本例中將緩存擴(kuò)展可用空間的大小,即將可用空間擴(kuò)大一倍),擴(kuò)展內(nèi)存的過程如下先建立一個(gè)臨時(shí)緩存,接著將當(dāng)前緩存中的數(shù)據(jù)備份到臨時(shí)緩存中,然后釋放當(dāng)前緩存的內(nèi)存空間,接著按本發(fā)明所確定的緩存空間大小,為當(dāng)前緩存分配內(nèi)存空間,再將臨時(shí)緩存中的數(shù)據(jù)復(fù)制到新建立的緩存中,最后釋放臨時(shí)緩存的內(nèi)存空間并更新緩存的狀態(tài)。然后將報(bào)文存入緩存中,并更新緩存的狀態(tài),此時(shí)緩存的狀態(tài)如下表8所示表8

(10)LAPS封裝模塊從緩存中取走70字節(jié)的報(bào)文數(shù)據(jù)后清空緩存,然后進(jìn)行LAPS封裝,此時(shí)緩存的狀態(tài)如下表9所示表9

上述例子在使用自動(dòng)伸縮的緩存時(shí)每次用完后都清空緩存中的數(shù)據(jù)。在實(shí)際應(yīng)用中,緩存中的數(shù)據(jù)可能不是即時(shí)清空,而是在一定條件下清空。在這種情況下對(duì)緩存空間的維護(hù)與上面類似,在此不再詳細(xì)描述。
從上述例子可以看出,在緩存的使用過程中,其大小總是在盡量適應(yīng)被存入數(shù)據(jù)的長度,而又不會(huì)頻繁的去改變內(nèi)存的大小,一般情況下只是在第一次使用緩存的大小(讓緩存的大小盡量適應(yīng)存放數(shù)據(jù)的長度),只要以后存入的數(shù)據(jù)長度之間相差不到一倍的大小,緩存就不需要自動(dòng)伸縮,這樣既有效地節(jié)約了內(nèi)存空間,又不需要頻繁地去操作內(nèi)存空間(申請(qǐng)和釋放),提高了程序的可靠性;如果在此過程中使用一般的動(dòng)態(tài)緩存,每次都需要改變緩存的大小以適應(yīng)存入數(shù)據(jù)的長度,這樣雖然在一定程序上節(jié)省了內(nèi)存空間,但頻繁地操作內(nèi)存可能會(huì)帶來程序的不穩(wěn)定,如果使用靜態(tài)緩存(即緩存大小固定),則在存入數(shù)據(jù)長度很小時(shí)會(huì)有較大的內(nèi)存空間浪費(fèi)。
在本發(fā)明中,由于采用動(dòng)態(tài)分配存儲(chǔ)空間,對(duì)于較大的數(shù)據(jù)長度,緩存分配單元會(huì)分配較大的存儲(chǔ)空間,從而防止了數(shù)據(jù)的溢出。
同時(shí),由于緩存分配單元根據(jù)數(shù)據(jù)長度與可用緩存容量是否小于一預(yù)定值,來決定是否將緩存縮小一預(yù)定值,這樣就會(huì)使可用緩存容量不會(huì)超過數(shù)據(jù)長度太多,從而不會(huì)太多地浪費(fèi)存儲(chǔ)空間。
再者,當(dāng)數(shù)據(jù)長度較可用緩存容量小于某一特定值范圍時(shí),就不改變緩存容量,與現(xiàn)有的動(dòng)態(tài)分配緩存技術(shù)相比,減小了改變緩存大小的頻率,因而提高了系統(tǒng)的效率。
雖然通過實(shí)施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。
權(quán)利要求
1.一種緩存分配方法,其特征在于,包括如下步驟A、設(shè)定默認(rèn)緩存空間;B、獲取存儲(chǔ)數(shù)據(jù)長度和可用緩存空間;C、當(dāng)所述存儲(chǔ)數(shù)據(jù)長度大于所述可用緩存空間時(shí),按預(yù)定擴(kuò)展規(guī)則擴(kuò)展所述默認(rèn)緩存空間;D、當(dāng)所述存儲(chǔ)數(shù)據(jù)長度小于所述可用緩存空間第一預(yù)定值時(shí),按預(yù)定縮小規(guī)則縮小所述默認(rèn)緩存空間。
2.如權(quán)利要求1所述的緩存分配方法,其特征在于,所述默認(rèn)緩存空間的末端包括至少一個(gè)空位。
3.如權(quán)利要求1或2所述的緩存分配方法,其特征在于,所述步驟B包括B1、設(shè)定緩存標(biāo)識(shí)參數(shù);B2、根據(jù)所述緩存標(biāo)識(shí)參數(shù)的實(shí)際值獲取所述可用緩存空間。
4.如權(quán)利要求3所述的緩存分配方法,其特征在于,所述緩存標(biāo)識(shí)參數(shù)包括已用緩存的起始指針、已用緩存的終止指針、緩存滿標(biāo)識(shí)、緩存空標(biāo)識(shí)。
5.如權(quán)利要求4所述的緩存分配方法,其特征在于,所述步驟B1包括當(dāng)所述默認(rèn)緩存空間全部可用時(shí),設(shè)定所述緩存滿標(biāo)識(shí)為假、緩存空標(biāo)識(shí)為真;當(dāng)所述默認(rèn)緩存空間部分可用時(shí),設(shè)定所述緩存滿標(biāo)識(shí)為假、緩存空標(biāo)識(shí)為假;當(dāng)所述默認(rèn)緩存空間都不可用時(shí),設(shè)定所述緩存滿標(biāo)識(shí)為真、緩存空標(biāo)識(shí)為假。
6.如權(quán)利要求1或2所述的緩存分配方法,其特征在于,所述步驟C中的預(yù)定擴(kuò)展規(guī)則包括C1、如果所述存儲(chǔ)數(shù)據(jù)長度大于所述可用緩存空間第二預(yù)定值,則將所述可用緩存空間擴(kuò)展為所述存儲(chǔ)數(shù)據(jù)長度;C2、如果所述存儲(chǔ)數(shù)據(jù)長度小于所述可用緩存空間第二預(yù)定值,則將所述可用緩存空間擴(kuò)展為第二預(yù)定值。
7.如權(quán)利要求1或2所述的緩存分配方法,其特征在于,所述步驟D包括當(dāng)所述存儲(chǔ)數(shù)據(jù)長度小于所述可用緩存空間的一半時(shí),將所述可用緩存空間縮小一半。
8.如權(quán)利要求5所述的緩存分配方法,其特征在于,所述步驟C和步驟D中存入所述存儲(chǔ)數(shù)據(jù)時(shí),當(dāng)所述緩存滿標(biāo)識(shí)及所述緩存空標(biāo)識(shí)均為假時(shí),判斷所述已用緩存的終止指針是否到達(dá)所述默認(rèn)緩存空間末端的空位前;如果已到達(dá),則從所述默認(rèn)緩存空間的起始位置開始依次存入所述存儲(chǔ)數(shù)據(jù);如果未到達(dá),則從所述已用緩存的終止指針的下一個(gè)位置開始依次存入所述存儲(chǔ)數(shù)據(jù)。
9.一種緩存分配裝置,其特征在于,包括參數(shù)維護(hù)裝置,用于維護(hù)緩存標(biāo)識(shí)參數(shù);緩存空間獲取裝置,用于根據(jù)所述參數(shù)維護(hù)裝置中的緩存標(biāo)識(shí)參數(shù)獲取可用緩存空間;存儲(chǔ)數(shù)據(jù)獲取裝置,用于獲取存儲(chǔ)數(shù)據(jù)及其長度;緩存調(diào)整裝置,用于根據(jù)所述緩存空間獲取裝置和所述存儲(chǔ)數(shù)據(jù)獲取裝置的輸出調(diào)整緩存空間的長度;緩存分配單元,用于依次將所述存儲(chǔ)數(shù)據(jù)存入經(jīng)過所述緩存調(diào)整裝置調(diào)整后的可用緩存空間。
10.如權(quán)利要求9所述的緩存分配裝置,其特征在于,所述參數(shù)維護(hù)裝置包括參數(shù)設(shè)定裝置,用于設(shè)定所述緩存標(biāo)識(shí)參數(shù)的初始值;參數(shù)更新裝置,用于根據(jù)所述緩存調(diào)整裝置的調(diào)整結(jié)果及所述緩存分配單元的分配結(jié)果更新所述緩存標(biāo)識(shí)參數(shù)。
11.如權(quán)利要求9所述的緩存分配裝置,其特征在于,所述緩存調(diào)整裝置裝置包括比較裝置,用于比較所述存儲(chǔ)數(shù)據(jù)長度和所述可用緩存空間;緩存擴(kuò)展裝置,用于根據(jù)所述比較裝置的比較結(jié)果擴(kuò)展緩存空間的長度;緩存縮小裝置,用于根據(jù)所述比較裝置的比較結(jié)果縮小緩存空間的長度。
全文摘要
本發(fā)明公開了一種緩存分配方法及裝置,該方法包括設(shè)定默認(rèn)緩存空間;獲取存儲(chǔ)數(shù)據(jù)長度和可用緩存空間;當(dāng)存儲(chǔ)數(shù)據(jù)長度大于可用緩存空間時(shí),按預(yù)定擴(kuò)展規(guī)則擴(kuò)展默認(rèn)緩存空間;當(dāng)存儲(chǔ)數(shù)據(jù)長度小于可用緩存空間第一預(yù)定值時(shí),按預(yù)定縮小規(guī)則縮小默認(rèn)緩存空間。本發(fā)明提供的裝置包括參數(shù)維護(hù)裝置、緩存空間獲取裝置、比較裝置、緩存調(diào)整裝置、緩存分配單元。利用本發(fā)明,可以有效地避免數(shù)據(jù)的溢出及緩存空間的浪費(fèi),同時(shí)減少緩存動(dòng)態(tài)調(diào)整的頻率,提高系統(tǒng)整體效率。
文檔編號(hào)H04L12/54GK1677946SQ200410030669
公開日2005年10月5日 申請(qǐng)日期2004年4月2日 優(yōu)先權(quán)日2004年4月2日
發(fā)明者程智輝, 李偉東 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1