欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種內(nèi)存池管理方法及裝置的制作方法

文檔序號:6429316閱讀:257來源:國知局
專利名稱:一種內(nèi)存池管理方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及內(nèi)存管理技術(shù)領(lǐng)域,尤其涉及一種內(nèi)存池管理方法及裝置。
背景技術(shù)
TD-LTE (Time Division-Long Term Evolution,時分長期演進)系統(tǒng)的基站和核心網(wǎng)之間目前均采用全I(xiàn)P化傳輸,即用戶終端UE的上下行業(yè)務(wù)數(shù)據(jù)均封裝在一個個IP報文中,在核心網(wǎng)和基站之間傳輸。對于單個小區(qū),僅下行業(yè)務(wù)數(shù)據(jù),速率就高達(dá)150MBits/S, 遠(yuǎn)遠(yuǎn)大于3G的業(yè)務(wù)量,這就對基站處理器的處理能力提出了很高要求,具體原因為對于下行方向,基站用于處理基帶數(shù)據(jù)的板卡(即基帶板)的以太模塊收到這些 IP報文后,會在內(nèi)存池中為用于攜帶該IP報文信息的消息分配內(nèi)存,之后將消息遞交給高層的PDCP(Packet Data Convergence Protocol,分組數(shù)據(jù)聚合協(xié)議)模塊,高層PDCP模塊處理完消息之后,再釋放內(nèi)存池中為該消息分配的內(nèi)存,可見在高速的情況下,單位時間內(nèi)的IP報文數(shù)量比較多,因此對需要處理器頻繁分配和釋放內(nèi)存,對處理器的要求比較高。目前的內(nèi)存池管理方法導(dǎo)致分配和釋放內(nèi)存的周期比較大,因此增加了處理器的負(fù)荷,限制了每個基帶板能夠處理的用戶。目前普通式鏈?zhǔn)絻?nèi)存池管理方法,主要采用如下機制將空閑塊按照尺寸的不同,分別掛接到了不同的空閑隊列中。對空閑內(nèi)存塊鏈表的操作需要用互斥鎖保護,以解決在多任務(wù)環(huán)境下,鏈表的一致性問題。在內(nèi)存池管理中,引入了對象互斥鎖的概念是為了保證內(nèi)存資源操作的完整性。在任一時刻,只能有一個任務(wù)可以訪問內(nèi)存池,而其它任務(wù)則不能進行內(nèi)存池的分配和釋放。使用互斥鎖本身是一個很耗時的操作,并且會增加任務(wù)間的耦合性。這樣大大增加了分配和釋放內(nèi)存塊耗時,并且耗時的不確定性大大增加。舉例來說,在一般業(yè)務(wù)模型下,IP報文的尺寸平均為500字節(jié),則150MBits/S的速率模型下,每秒鐘需要處理的IP報文個數(shù)為150M/(8*500) = 37500。則每秒鐘需要在內(nèi)存池中為37500個消息分配和釋放內(nèi)存。目前普通鏈?zhǔn)絻?nèi)存池管理方法,分配和釋放一個消息內(nèi)存塊的時間分別為2000和1000個處理器周期(cycle)。因此對主頻為IG的嵌入式處理器而言,為37500個消息分配和釋放內(nèi)存的CPU負(fù)荷為37500* (2000+1000)/1000000000 = 11.25%。因此目前的內(nèi)存池管理方法增加了處理器的負(fù)荷,能夠處理的用戶有限,缺乏一種能夠快速分配和釋放內(nèi)存,增加基站處理器能夠處理的用戶數(shù)量的有效的內(nèi)存池管理方法。

發(fā)明內(nèi)容
本發(fā)明提供一種內(nèi)存池管理方法及裝置,用以解決現(xiàn)有技術(shù)中內(nèi)存池管理算法增加處理器的負(fù)荷和能夠處理的用戶數(shù)量有限的問題。本發(fā)明提供一種內(nèi)存池管理方法,包括需要在內(nèi)存池中分配內(nèi)存時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)是否有空閑內(nèi)存塊,其中內(nèi)存池被劃分為多個子池,各子池包括數(shù)量相等個內(nèi)存塊;若有,則將所述子池內(nèi)的空閑內(nèi)存塊進行分配;若無,則通過從上至下查找多級位圖逐級縮小查找范圍,查找一個空閑子池并分配內(nèi)存塊,其中每級位圖包括多個比特值,最低級位圖的每個比特值指示內(nèi)存塊的使用情況,上級位圖的每個比特值,對應(yīng)地指示下級位圖中多個比特值所涉及的內(nèi)存塊的整體使用情況;根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新所述多級位圖中的比特值。本發(fā)明還提供一種內(nèi)存池管理裝置,包括子池空閑確定單元,用于需要在內(nèi)存池中分配內(nèi)存時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)是否有空閑內(nèi)存塊,其中內(nèi)存池被劃分為多個子池,各子池包括數(shù)量相等個內(nèi)存塊;第一分配單元,用于在上次被分配的內(nèi)存塊所在的子池內(nèi)有空閑內(nèi)存塊時,將所述子池內(nèi)的空閑內(nèi)存塊進行分配;第二分配單元,用于在上次被分配的內(nèi)存塊所在的子池內(nèi)無空閑內(nèi)存塊時,通過從上至下查找多級位圖逐級縮小查找范圍,查找一個空閑子池并分配內(nèi)存塊,其中每級位圖包括多個比特值,最低級位圖的每個比特值指示內(nèi)存塊的使用情況,上級位圖的每個比特值,對應(yīng)地指示下級位圖中多個比特值所涉及的內(nèi)存塊的整體使用情況;第一位圖更新單元,用于根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新所述多級位圖中的比特值。利用本發(fā)明提供的內(nèi)存池管理方法及裝置,具有以下有益效果基于所提出的內(nèi)存劃分及管理方式,通過多級位圖在內(nèi)存分配時實現(xiàn)空閑內(nèi)存的快速定位,如果應(yīng)用到 TD-LTE基站,則可以大大降低TD-LTE基站在多用戶、大數(shù)據(jù)量場景下處理器的負(fù)荷,使得單基帶板卡能夠處理更多的用戶。


圖1為本發(fā)明實施例中內(nèi)存池管理方法流程圖;圖2為本發(fā)明實施例中的三級BITMAP示意圖;圖3為本發(fā)明實施例內(nèi)存池管理方法中內(nèi)存分配流程圖;圖4為本發(fā)明實施例內(nèi)存池管理方法中內(nèi)存釋放流程圖;圖5為本發(fā)明實施例中內(nèi)存池管理裝置結(jié)構(gòu)圖。
具體實施例方式下面結(jié)合附圖和實施例對本發(fā)明提供的內(nèi)存池管理方法及裝置進行更詳細(xì)地說明。目前普通鏈?zhǔn)絻?nèi)存池管理方法,分配和釋放一個消息內(nèi)存塊的時間分別為2000 和1000個處理器周期(cycle)。因此增加了處理器的負(fù)荷,能夠處理的用戶有限。本發(fā)明實施例提供一種能夠快速進行內(nèi)存分配的內(nèi)存池管理方法,增加基站處理器能夠處理的用戶數(shù)量。本發(fā)明實施例提供的內(nèi)存池管理方法,如圖1所示,該方法包括步驟S101,需要在內(nèi)存池中分配內(nèi)存時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)
7是否有空閑內(nèi)存塊,其中內(nèi)存池被劃分為多個子池,各子池包括數(shù)量相等個內(nèi)存塊,若有, 執(zhí)行步驟S102,如無,執(zhí)行步驟S103 ;本發(fā)明實施例中內(nèi)存池被劃分為多個子池,子池中內(nèi)存塊數(shù)量是相等,對于一個子池來說,該子池中內(nèi)存塊的尺寸是相同的,各子池間的內(nèi)存塊大小也可以相同,當(dāng)然,為了提升內(nèi)存使用效率,可以規(guī)劃各子池間的內(nèi)存塊大小不同,但優(yōu)選地,一個子池中內(nèi)存塊的大小是相同的。步驟S102,將所述子池內(nèi)的空閑內(nèi)存塊進行分配;S卩,如果上次使用的子池中內(nèi)存塊未使用完時,優(yōu)選使用上次所使用子池中的內(nèi)存塊。步驟S103,通過從上至下查找多級位圖逐級縮小查找范圍,查找一個空閑子池并分配內(nèi)存塊,其中每級位圖包括多個比特值,最低級位圖的每個比特值指示內(nèi)存塊的使用情況,上級位圖的每個比特值,對應(yīng)地指示下級位圖中多個比特值所涉及的內(nèi)存塊的整體使用情況;S卩,在上次使用的子池已用完時,再重新找一個空閑子池,本發(fā)明實施例所指的空閑子池,具體為子池內(nèi)所有內(nèi)存塊未被使用的子池。本發(fā)明實施例提供的多級位圖,實現(xiàn)內(nèi)存的層次化管理,由于上級位圖的每個比特值,對應(yīng)地指示下級位圖中多個比特值所涉及的內(nèi)存塊的整體使用情況,因此,最低級位圖的每個比特值指示內(nèi)存塊的使用情況,如果從上至下查找多級位圖,可以逐漸縮小查找范圍,快速定位空閑子池實現(xiàn)內(nèi)存的分配。步驟S104,根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新多級位圖中的比特值。如果內(nèi)存塊被分配,應(yīng)更新多級位圖中的比特值,使各級位圖指示的內(nèi)存占用情況與實際的占用情況一致。本發(fā)明實施例所提供的內(nèi)存池管理方法,給出了內(nèi)存池的新的劃分方法,并提出采用多級位圖分層次實現(xiàn)內(nèi)存的管理,如一級位圖的每個比特值用于指示多個子池的占用情況,而下一級位圖用于指示一個子池的占用情況等,最終采用快速定位方法迅速找到空閑子池,且如果上一個子池未用完時,不需要查找多級位圖而直接進行內(nèi)存分配。本發(fā)明實施例所提供的內(nèi)存池管理方法,可以快速地進行內(nèi)存分配,從而將為一個任務(wù)分配內(nèi)存的周期大大降低,從而減輕了處理器的負(fù)荷,如果將該方法應(yīng)用到TD-LTE系統(tǒng)基站,則可以使基站能夠處理更多的用戶。關(guān)于基于本發(fā)明實施例提供的內(nèi)存池管理方法,對于內(nèi)存的釋放,則可以在釋放內(nèi)存時,根據(jù)所釋放的內(nèi)存塊的位置,對應(yīng)更新多級位圖中的比特值,使各級位圖指示的內(nèi)存占用情況與實際的占用情況一致。優(yōu)選地,為了進一步實現(xiàn)內(nèi)存的管理,內(nèi)存池中第一個內(nèi)存塊的索引為0并連續(xù)編號,定義一個全局索引Blockjndex,通過Blockjndex記錄上次所分配的內(nèi)存塊在內(nèi)存池中索引相關(guān)信息,根據(jù)該索引相關(guān)信息確定上次所分配的內(nèi)存塊所在的子池是否有空閑內(nèi)存塊。優(yōu)選地,采用如下方式初始時Blockjndex初始化為零;則在進行內(nèi)存分配時,確定Blockjndexl索引的內(nèi)存塊不是子池的第一個內(nèi)存塊時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)有空閑內(nèi)存塊,并將Blockjndexl索引的內(nèi)存塊進行分配,分配后將當(dāng)前Blockjndex加1 ;確定Blockjndexl索引的內(nèi)存塊為子池的第一個內(nèi)存塊時,通過從上至下查找多級位圖逐級縮小查找范圍,查找一個所有內(nèi)存塊為空閑的空閑子池,并將空閑子池內(nèi)的第一個內(nèi)存塊進行分配,分配完內(nèi)存塊之后,將所分配的內(nèi)存塊在整個內(nèi)存池中的索引加1 并賦值給BlockJndex。上述Blockjndex的作用是為了指示上次所分配的內(nèi)存塊是否為子池的最后一個內(nèi)存塊,當(dāng)然,在內(nèi)存池中內(nèi)存塊的索引編號方式發(fā)生改變時,如第一個內(nèi)存塊的索引為 1,則相應(yīng)地應(yīng)將Blockjndex初始化為1。每次分配后,將所分配的內(nèi)存塊在整個內(nèi)存池中的索引加1并賦值給Blockjndex,從而使Blockjndex執(zhí)向上次分配的內(nèi)存塊的下一個內(nèi)存塊,從而通過確定其是否執(zhí)行子池的第一個內(nèi)存塊確定上次使用的子池是否使用完。當(dāng)然,也可以不對Blockjndex進行加1操作,而直接將所分配的內(nèi)存塊在整個內(nèi)存池中的索引賦值給Blockjndex,從而使BlockJndex指向上次所分配的內(nèi)存塊,通過BlockJndex 是否指向子池的最后一個內(nèi)存塊,確定上次所分配的內(nèi)存塊所在的子池是否有空閑內(nèi)存塊。為了進一步方便對內(nèi)存的管理,提高內(nèi)存分配和釋放速度,優(yōu)選地,所述各子池中內(nèi)存塊的數(shù)量等于內(nèi)存池管理執(zhí)行主體的處理機位數(shù)N。這樣,對于上述第一種方式, 在Blockjndexl為N的整數(shù)倍時,確定Blockjndexl索引的內(nèi)存塊為子池的第一個內(nèi)存塊,否則確定Blockjndexl索引的內(nèi)存塊不是子池的第一個內(nèi)存塊。對于第二種方式,在 Blockjndexl為N的整數(shù)倍時,確定Blockjndexl索引的內(nèi)存塊為子池的最后一個內(nèi)存塊,否則確定Blockjndexl索引的內(nèi)存塊不是子池的最后一個內(nèi)存塊。進一步優(yōu)選地,同一上級位圖的每個比特值,對應(yīng)地指示下級位圖中N個比特值所涉及的內(nèi)存塊的整體使用情況,當(dāng)然,也可以是其它整數(shù)值。進一步優(yōu)選地,每一級位圖中的比特值存儲在長度為N的數(shù)組中,在數(shù)組長度大于位圖中比特值個數(shù)時,將數(shù)組中除位圖中比特值外的其余比特值設(shè)置為無效,如將其始終設(shè)置為指示占用。本發(fā)明實施例中,需要釋放所分配的內(nèi)存塊時,優(yōu)選地,根據(jù)要釋放的內(nèi)存塊在內(nèi)存池中的索引及內(nèi)存池的基地址,確定該內(nèi)存塊在每級位圖中對應(yīng)的比特值索引,如對于最低一級位圖,確定指示該內(nèi)存塊占用情況的比特值索引,對于比特值支持一個子池占用情況的位圖,確定指示該內(nèi)存塊所在子池占用情況的比特值索引;根據(jù)該內(nèi)存塊在每級位圖中對應(yīng)的比特值索引,從下至上對應(yīng)更新所述多級位圖中的比特值,從而使每級位圖指示的內(nèi)存占用情況與實際的占用情況一致。本發(fā)明實施例中,在同一時刻,僅允許為一個任務(wù)分配內(nèi)存,但允許釋放為多個任務(wù)所分配的內(nèi)存塊。如果存在多個任務(wù)分配的需求,可以通過給每個任務(wù)規(guī)劃一個內(nèi)存池來解決。本發(fā)明實施例在不使用互斥鎖的情況下可以應(yīng)用于多任務(wù)操作系統(tǒng)環(huán)境。由于不使用互斥鎖操作,大大降低了分配釋放內(nèi)存塊的耗時,并且降低了耗時的不確定性。本發(fā)明實施例巧妙的利用空間的隔離避免了任務(wù)同時訪問內(nèi)存池時可能的沖突。在現(xiàn)有技術(shù)中,eNB使用以前的普通鏈?zhǔn)絻?nèi)存管理方法,在業(yè)務(wù)滿負(fù)荷情況下,僅業(yè)務(wù)報文消息分配和釋放一項,就耗掉了 CPU 11. 25%的時間片資源。使用本發(fā)明實施例的
9內(nèi)存池管理方法后,將該值降低到了 0. 7%,大大節(jié)省了 CPU的時間片資源。使得單板可以處理更多的用戶,為公司節(jié)省了成本。同時本內(nèi)存池分配算法,優(yōu)先選擇剛剛被釋放的內(nèi)存塊,提高了 cache的命中率。本發(fā)明實施例中多級位圖為三級位圖,第一級位圖BITMAP1的每個比特值指示內(nèi)存塊的使用情況,第二級位圖BITMAP2的每個比特值指示每個子池的整體使用情況,第三級位圖BITMAP3的每個比特值指示包括多個子池的子池群整體使用情況。內(nèi)存塊被使用時,BITMAP1中對應(yīng)的比特值指示占用,否則指示空閑;子池中任一內(nèi)存塊在BITMAP1中對應(yīng)的比特值指示占用時,該子池在BITMAP2中對應(yīng)的比特值指示占用,否則指示空閑;子池群中所有子池在BITMAP2對應(yīng)的比特值指示占用時,則該子池群在BITMAP3 中對應(yīng)的比特值指示占用,否則指示空閑。本發(fā)明實施例中各子池中內(nèi)存塊的數(shù)量等于內(nèi)存池管理執(zhí)行主體的處理機位數(shù) N,同一上級位圖的每個比特值,對應(yīng)地指示下級位圖中N個比特值所涉及的內(nèi)存塊的整體使用情況;每一級位圖中的比特值存儲在長度為N的數(shù)組中,在數(shù)組長度大于位圖中比特值個數(shù)時,將數(shù)組中除位圖中比特值外的其余比特值設(shè)置為無效。本發(fā)明實施例中確定Blockjndexl索引的內(nèi)存塊為子池的第一個內(nèi)存塊時,查找一個空閑子池,具體包括查找BITMAP3中第一個指示空閑的比特值,根據(jù)查找到的比特值在BITMAP3中的索引Al,查找存儲BITMAP2中比特值的第Al個數(shù)組;查找第Al個數(shù)組中第一個指示空閑的比特值,根據(jù)查找到的比特值在BITMAP2中的索引A2,查找存儲BITMAP1中比特值的第A2個數(shù)組;在第A2個數(shù)組中的所有比特值指示空閑時,確定查找到空閑子池,將該空閑子池內(nèi)的第一個內(nèi)存塊進行分配,并更新Blockjndex的值。優(yōu)選地,本發(fā)明實施例中根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新所述多級位圖中的比特值,具體包括僅在Blockjndexl索引的內(nèi)存塊為子池的第一個內(nèi)存塊的情況下,分配第 Blockjndex個內(nèi)存塊后,將BITMAP1中指示該內(nèi)存塊使用的比特值設(shè)置為指示占用,將 BITMAP2中第A2個比特值設(shè)置為指示占用,即根據(jù)本發(fā)明提供的更新機制下,在使用上次所有的子池中內(nèi)存塊,可以不進行位圖更新;進一步確定存儲BITMAP2中比特值的第Al個數(shù)組中所有比特值指示占用時,將 BITMAP3的第Al個比特值設(shè)置為指示占用,否則結(jié)束。進一步地,若在第Al個數(shù)組中未找到第一個指示空閑的比特值,或者第A2個數(shù)組中不是所有比特值指示空閑時,返回重新查找BITMAP3中第一個指示空閑的比特值,重復(fù)上述查找空閑子池的過程。在多級位圖為三級位圖,根據(jù)所述比特值索引從下至上對應(yīng)更新所述多級位圖中的比特值,具體包括根據(jù)該內(nèi)存塊在BITMAP1位圖中對應(yīng)的比特值索引,將BITMAP1中指示該內(nèi)存塊占用情況的比特值設(shè)置為指示空閑;確定該內(nèi)存塊所在子池中不是所有內(nèi)存塊空閑時,確定釋放內(nèi)存成功,否則,根據(jù)
10該內(nèi)存塊在BITMAP2位圖中對應(yīng)的比特值索引,將BITMAP2中指示該內(nèi)存塊所在子池使用情況的比特值置為指示空閑;并根據(jù)該內(nèi)存塊在BITMAP2位圖中對應(yīng)的比特值索弓丨,將BITMAP3中該內(nèi)存塊所在子池群使用情況的比特值置為指示空閑。本發(fā)明實施例提供的內(nèi)存池管理方法,在內(nèi)存池中能夠快速的分配和釋放內(nèi)存塊。分配和釋放操作的耗時保證在處理器的100個cycle之內(nèi)完成,以降低TD-LTE基站在多用戶、大數(shù)據(jù)量場景下處理器的負(fù)荷,使得單基帶板卡能夠處理更多的用戶。實施例現(xiàn)有基站多為32位處理機,下面以N為32為例,給出本發(fā)明實施例的優(yōu)選方式。本發(fā)明實施例中內(nèi)存池管理原則如下1)整個內(nèi)存池由M個子池組成,M為大于1的整數(shù);每個子池又由32個等尺寸的內(nèi)存塊BLK組成;2)整個內(nèi)存池的管理通過三級BITMAP組成,記做BITMA1、BITMAP2、BITMAP3,每級 BITMAP中比特值存儲在double word類型的數(shù)組表示,該數(shù)組包括32個比特值;3)如圖2所示,BITMAP1中的每個double word成員,用于記錄double word對應(yīng)子池的使用情況,double word成員中的每個比特值BIT分別對應(yīng)該子池中每個內(nèi)存塊BLK 的分配使用情況。優(yōu)先地,每個BIT置1表示BLK空閑,BIT清0表示BLK正在被使用;因此 BITMAP1 是由 N 個 double word 組成;4)如圖2所示,BITMAP2中的每個BIT對應(yīng)一個子池,用于記錄整個子池的可用狀態(tài),置1表示整個子池可用,清0表示整個子池正在被使用;子池只有當(dāng)其中的32個BLK 全部為空閑狀態(tài)時,子池才會被標(biāo)記為可用狀態(tài);因此BITMAP2是由M’個double word組成,其中,在M/32為整數(shù)時,Μ’ = M,在M/32不為整數(shù),將M/32取整并加1得到M’,對于后一種情況,最后一個double word的某些BIT可能不會被使用到,初始化清0即可;5)如圖2所示,BITMAP3由一個double word表示,其中的每個bit對應(yīng)BITMAP2 中的一個double word成員,置1表示其對應(yīng)BITMAP2中的double word成員中至少有一個bit為1 ;清0表示其對應(yīng)BITMAP2中的double word成員中的所有bit均為0。可見,BITMAP2和BITMAP3中BIT為1或者0的含義是不同的,BITMAP2中BIT為 1代表整個子池可用,而BITMAP3中BIT為1代表子池群中至少有一個子池可用。內(nèi)存池中擁有BLK的最大個數(shù)為32*32*32 = 32768,已能夠滿足目前處理器的需求,當(dāng)然,如果內(nèi)存池中內(nèi)存塊個數(shù)超過該數(shù)值時,還可以再增加一級位圖,該位圖中每個 BIT可以指示32個子池群的使用情況等。本發(fā)明實施例Blockjndex用于記錄內(nèi)存分配過程中正在分配的BLK的全局索引。本發(fā)明實施例中,在進行內(nèi)存初始化時,執(zhí)行如下操作1) BITMAP3, BITMAP2, BITMAP1中的有效BIT全部置1,將無效BIT全部清零,如上所述,BITMAP2中的最后一個double word成員中某些BIT可能無用;2)將 Block_Index 清 0 ;3)所有的BLK在內(nèi)存中是連續(xù)存放的,可以用一個全局?jǐn)?shù)組來表示或者動態(tài)分配。
為了保證操作的原子性,本發(fā)明實施例需要處理機支持原子操作一個BIT的機制;及在一個字節(jié)word中查找第一個為1的bit的指令。如圖3所示,本發(fā)明實施例中內(nèi)存管理方法中,采用如下流程實現(xiàn)內(nèi)存分配,具體包括步驟S301,需要進行內(nèi)存分配時,確定Blockjndex是否為32的整數(shù)倍,如果不是,則跳轉(zhuǎn)到步驟S314,若是,執(zhí)行步驟S302 ;步驟S302,確定是否能夠查找到BITMAP3中第一個置1的BIT,若是,執(zhí)行步驟 S303,否則執(zhí)行步驟S315 ;步驟S303,將該 BIT 在 BITMAP3 中的 BIT 索引記做BITMAP3_BIT_INDEX ;步驟S304,用 BITMAP3_BIT_INDEX 作為索引在 BITMAP2 的 double word 數(shù)組中,索弓I至丨J一個double word成員;步驟S305,判斷在該double word中是否查找第一個置1的BIT,若是,執(zhí)行步驟 S306,若未查到,說明BITMAP3指示有誤,將BITMAP3中的第BITMAP3_BIT_INDEX個bit清 0,則返回步驟S302重新查找;步驟S306,將查到的 BIT 在 BITMAP2 中的 BIT 索引記做 BITMAP2_BIT_INDEX ;步驟S307,將 BITMAP2_BIT_INDEX 記做 BITMAP1_W0RD_INDEX,找到 BITMAP1 中的第 BITMAP1_TORD_INDEX 個 double word ;步驟S308,判斷該double word是否等于OxFFFFFFFF,若不等于,則說明BITMAP2 指示有誤,將BITMAP2中的第BITMAP2_BIT_INDEX個bit清0,跳轉(zhuǎn)到步驟S302重新查找; 若等于,執(zhí)行步驟S309;步驟S309,說明該子池空閑,BlockJndex = BITMAP1_W0RD_INDEX*32,從而索引到該空閑子池內(nèi)的第一個內(nèi)存塊;步驟S310,清空BITMAP2中的第BITMAP2_BIT_INDEX個BIT,用于標(biāo)示該子池為不可用狀態(tài);步驟S311,判斷 BITMAP2 中的第 BITMAP3_BIT_INDEX 個 double word 是否等于 0, 若不是0,則跳轉(zhuǎn)到步驟S213 ;若是,則執(zhí)行步驟S212 ;步驟S312,清空 BITMAP3 中的第 BITMAP3_BIT_INDEX 個 BIT ;步驟S313,將 BITMAP1 中的第 BITMAP1_W0RD_INDEX 個 double word 置為 0,用于標(biāo)示該子池為不可用狀態(tài);步驟S314,查找結(jié)束,返回第Blockjndex個內(nèi)存塊進行分配,并將Blockjndex 加1 ;步驟S315,內(nèi)存池耗盡,分配失敗。本發(fā)明實施例中整個內(nèi)存池僅支持一個任務(wù)進行分配,不能多任務(wù)分配,但支持多個任務(wù)的內(nèi)存釋放。本發(fā)明實施例中的內(nèi)存池的釋放過程,如圖4所示,包括步驟S401,由要釋放內(nèi)存塊的索引和內(nèi)存池的基地址,可以快速算出需要操作的 BITMAP 中每一級位圖的 BIT 索弓丨,記做BITMAP3_BIT_INDEX、BITMAP2_BIT_INDEX、 BITMAP1_BIT_INDEX步驟S402,將 BITMAP1 中的第 BITMAP1_BIT_INDEX 個 BIT 位置 1 ;
步驟S403,判斷該BLK所在子池的內(nèi)存塊是否均已被釋放,如果不是,則內(nèi)存塊被成功釋放,結(jié)束,如果是,執(zhí)行步驟S404 ;步驟S404,將 BITMAP2 中的第 BITMAP2_BIT_INDEX 個 BIT 位置 1 ;步驟S405,將BITMAP3中的第BITMAP3_BIT_INDEX個BIT位置1,內(nèi)存塊被成功釋
放,結(jié)束。本發(fā)明實施例允許多個任務(wù)釋放內(nèi)存塊,且只有當(dāng)整個子池中的所有BLK全部被釋放后,整個子池才能被標(biāo)記為可用。本發(fā)明實施例中整個內(nèi)存的釋放和分配過程無需使用互斥鎖;由于每個內(nèi)存塊都唯一的對應(yīng)BITMAP1中的一個BIT,因此只要保證設(shè)置和清除BIT時是原子操作,即可保證 BITMAP1的一致性;通過嵌入式匯編,并使用處理器的原子操作機制,可以保證這一點。雖然對BITMAP2和BITMAP3中的BIT置位和清零操作也是原子的,但是每個分配過程和每個釋放過程既會操作BITMAP2,也會操作BITMAP3 ;僅僅保證對單個BIT的原子操作不能同時保證BITMAP2和BITMAP3的一致性。當(dāng)不使用互斥鎖時,就要求分配任務(wù)不能完全相信BITMAP2和BITMAP3中的BIT指示,需要檢查BITMAP2和BITMAP3的一致性,如果發(fā)現(xiàn)不一致需要修正之后重新查找。使用本發(fā)明實施例提供的內(nèi)存池管理方法,可以保證分配和釋放內(nèi)存塊在200個處理器周期(cycle)內(nèi)完成,可以將處理器負(fù)荷降低到0.7%,使每個基帶板能夠處理更多的用戶,相對于普通鏈?zhǔn)絻?nèi)存管理方法占用3000個處理器周期(cycle)的耗時而言,處理
周期大大降低。本發(fā)明實施例方法使用前后數(shù)據(jù)對比如下
權(quán)利要求
1.一種內(nèi)存池管理方法,其特征在于,包括需要在內(nèi)存池中分配內(nèi)存時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)是否有空閑內(nèi)存塊,其中內(nèi)存池被劃分為多個子池,各子池包括數(shù)量相等個內(nèi)存塊;若有,則將所述子池內(nèi)的空閑內(nèi)存塊進行分配;若無,則通過從上至下查找多級位圖逐級縮小查找范圍,查找一個空閑子池并分配內(nèi)存塊,其中每級位圖包括多個比特值,最低級位圖的每個比特值指示內(nèi)存塊的使用情況,上級位圖的每個比特值,對應(yīng)地指示下級位圖中多個比特值所涉及的內(nèi)存塊的整體使用情況;根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新所述多級位圖中的比特值。
2.如權(quán)利要求1所述的方法,其特征在于,內(nèi)存池中內(nèi)存塊的索引連續(xù)編號,定義一個全局索引Blockjndex,通過Blockjndex記錄上次所分配的內(nèi)存塊在內(nèi)存池中索引相關(guān)信息,根據(jù)Blockjndex確定上次所分配的內(nèi)存塊所在的子池是否有空閑內(nèi)存塊。
3.如權(quán)利要求2所述的方法,其特征在于,內(nèi)存池中第一個內(nèi)存塊的索引為0,初始時, Block_Index初始化為零;內(nèi)存分配時,確定Blockjndexl索引的內(nèi)存塊不是子池的第一個內(nèi)存塊時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)有空閑內(nèi)存塊,并將Blockjndexl索引的內(nèi)存塊進行分配, 分配后將當(dāng)前Blockjndex加1 ;確定Blockjndexl索引的內(nèi)存塊為子池的第一個內(nèi)存塊時,通過從上至下查找多級位圖逐級縮小查找范圍,查找一個所有內(nèi)存塊為空閑的空閑子池,并將空閑子池內(nèi)的第一個內(nèi)存塊進行分配,分配完內(nèi)存塊之后,將所分配的內(nèi)存塊在整個內(nèi)存池中的索引加1并賦值給 BlockJndex。
4.如權(quán)利要求2所述的方法,其特征在于,所述各子池中內(nèi)存塊的數(shù)量等于內(nèi)存池管理執(zhí)行主體的處理機位數(shù)N,同一上級位圖的每個比特值,對應(yīng)地指示下級位圖中N個比特值所涉及的內(nèi)存塊的整體使用情況。
5.如權(quán)利要求4所述的方法,其特征在于,每一級位圖中的比特值存儲在長度為N的數(shù)組中,在數(shù)組長度大于位圖中比特值個數(shù)時,將數(shù)組中除位圖中比特值外的其余比特值設(shè)置為無效。
6.如權(quán)利要求5所述的方法,其特征在于,所述N為32。
7.如權(quán)利要求5所述的方法,其特征在于,所述多級位圖為三級位圖,第一級位圖 BITMAP1的每個比特值指示內(nèi)存塊的使用情況,第二級位圖BITMAP2的每個比特值指示每個子池的整體使用情況,第三級位圖BITMAP3的每個比特值指示包括多個子池的子池群整體使用情況。
8.如權(quán)利要求7所述的方法,其特征在于,內(nèi)存塊被使用時,BITMAP1中對應(yīng)的比特值指示占用,否則指示空閑;子池中任一內(nèi)存塊在BITMAP1中對應(yīng)的比特值指示占用時,該子池在BITMAP2中對應(yīng)的比特值指示占用,否則指示空閑;子池群中所有子池在BITMAP2對應(yīng)的比特值指示占用時,則該子池群在BITMAP3中對應(yīng)的比特值指示占用,否則指示空閑。
9.如權(quán)利要求8所述的方法,其特征在于,確定上次被分配的內(nèi)存塊所在的子池內(nèi)沒有空閑內(nèi)存塊,查找一個空閑子池,具體包括查找BITMAP3中第一個指示空閑的比特值,根據(jù)查找到的比特值在BITMAP3中的索引 Al,查找存儲BITMAP2中比特值的第Al個數(shù)組;查找第Al個數(shù)組中第一個指示空閑的比特值,根據(jù)查找到的比特值在BITMAP2中的索引A2,查找存儲BITMAP1中比特值的第A2個數(shù)組;在第A2個數(shù)組中的所有比特值指示空閑時,確定找到空閑子池,將該子池的第一個空閑塊進行分配,并更新Blockjndex的值。
10.如權(quán)利要求8所述的方法,其特征在于,根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新所述多級位圖中的比特值,具體包括在確定上次被分配的內(nèi)存塊所在的子池內(nèi)沒有空閑內(nèi)存塊的情況下,分配內(nèi)存塊后, 將存儲BITMAP1中第A2個數(shù)組中所有比特值設(shè)置為指示占用,將BITMAP2中第A2個比特值設(shè)置為指示占用;進一步確定存儲BITMAP2中比特值的第Al個數(shù)組中所有比特值指示占用時,將 BITMAP3的第Al個比特值設(shè)置為指示占用,否則結(jié)束;在確定上次被分配的內(nèi)存塊所在的子池內(nèi)有空閑內(nèi)存塊的情況下,分配第內(nèi)存塊后不進行多級位圖更新。
11.如權(quán)利要求9所述的方法,其特征在于,若在第Al個數(shù)組中未找到第一個指示空閑的比特值,或者第A2個數(shù)組中不是所有比特值指示空閑時,返回重新查找BITMAP3中第一個指示空閑的比特值。
12.如權(quán)利要求1 11任一所述的方法,其特征在于,進一步包括需要釋放所分配的內(nèi)存塊時,根據(jù)要釋放的內(nèi)存塊在內(nèi)存池中的索引及內(nèi)存池的基地址,確定該內(nèi)存塊在每級位圖中對應(yīng)的比特值索引;根據(jù)該內(nèi)存塊在每級位圖中對應(yīng)的比特值索引,從下至上對應(yīng)更新所述多級位圖中的比特值。
13.如權(quán)利要求12所述的方法,其特征在于,所述多級位圖為三級位圖,根據(jù)所述比特值索弓I從下至上對應(yīng)更新所述多級位圖中的比特值,具體包括根據(jù)該內(nèi)存塊在BITMAP1位圖中對應(yīng)的比特值索引,將BITMAP1中指示該內(nèi)存塊占用情況的比特值設(shè)置為指示空閑;確定該內(nèi)存塊所在子池中不是所有內(nèi)存塊空閑時,確定釋放內(nèi)存成功,否則,根據(jù)該內(nèi)存塊在BITMAP2位圖中對應(yīng)的比特值索引,將BITMAP2中指示該內(nèi)存塊所在子池使用情況的比特值置為指示空閑;并根據(jù)該內(nèi)存塊在BITMAP2位圖中對應(yīng)的比特值索引,將BITMAP3中該內(nèi)存塊所在子池群使用情況的比特值置為指示空閑。
14.如權(quán)利要求12所述的方法,其特征在于,在同一時刻,僅允許為一個任務(wù)分配內(nèi)存,但允許釋放為多個任務(wù)所分配的內(nèi)存塊。
15.一種內(nèi)存池管理裝置,其特征在于,包括子池空閑確定單元,用于需要在內(nèi)存池中分配內(nèi)存時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)是否有空閑內(nèi)存塊,其中內(nèi)存池被劃分為多個子池,各子池包括數(shù)量相等個內(nèi)存塊;第一分配單元,用于在上次被分配的內(nèi)存塊所在的子池內(nèi)有空閑內(nèi)存塊時,將所述子池內(nèi)的空閑內(nèi)存塊進行分配;第二分配單元,用于在上次被分配的內(nèi)存塊所在的子池內(nèi)無空閑內(nèi)存塊時,通過從上至下查找多級位圖逐級縮小查找范圍,查找一個空閑子池并分配內(nèi)存塊,其中每級位圖包括多個比特值,最低級位圖的每個比特值指示內(nèi)存塊的使用情況,上級位圖的每個比特值, 對應(yīng)地指示下級位圖中多個比特值所涉及的內(nèi)存塊的整體使用情況;第一位圖更新單元,用于根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新所述多級位圖中的比特值。
16.如權(quán)利要求15所述的裝置,其特征在于,內(nèi)存池中內(nèi)存塊的索引連續(xù)編號,定義一個全局索引Blockjndex,通過Blockjndex記錄上次所分配的內(nèi)存塊在內(nèi)存池中索引相關(guān)信息,第一分配單元和第二分配單元根據(jù)Blockjndex確定上次所分配的內(nèi)存塊所在的子池是否有空閑內(nèi)存塊。
17.如權(quán)利要求16所述的裝置,其特征在于,內(nèi)存池中第一個內(nèi)存塊的索引為0,初始時,BlockJndex初始化為零;第一分配單元,內(nèi)存分配時,確定Blockjndexl索引的內(nèi)存塊不是子池的第一個內(nèi)存塊時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)有空閑內(nèi)存塊,并將Blockjndexl索引的內(nèi)存塊進行分配,分配后將當(dāng)前Blockjndex加1 ;第二分配單元,確定Blockjndexl索引的內(nèi)存塊為子池的第一個內(nèi)存塊時,通過從上至下查找多級位圖逐級縮小查找范圍,查找一個所有內(nèi)存塊為空閑的空閑子池,并將空閑子池內(nèi)的第一個內(nèi)存塊進行分配,分配完內(nèi)存塊之后,將所分配的內(nèi)存塊在整個內(nèi)存池中的索引加1并賦值給Blockjndex。
18.如權(quán)利要求16所述的裝置,其特征在于,所述各子池中內(nèi)存塊的數(shù)量等于內(nèi)存池管理裝置的處理機位數(shù)N,同一上級位圖的每個比特值,對應(yīng)地指示下級位圖中N個比特值所涉及的內(nèi)存塊的整體使用情況。
19.如權(quán)利要求18所述的裝置,其特征在于,每一級位圖中的比特值存儲在長度為N的數(shù)組中,在數(shù)組長度大于位圖中比特值個數(shù)時,將數(shù)組中除位圖中比特值外的其余比特值設(shè)置為無效。
20.如權(quán)利要求19所述的裝置,其特征在于,所述多級位圖為三級位圖,第一級位圖 BITMAP1的每個比特值指示內(nèi)存塊的使用情況,第二級位圖BITMAP2的每個比特值指示每個子池的整體使用情況,第三級位圖BITMAP3的每個比特值指示包括多個子池的子池群整體使用情況。
21.如權(quán)利要求20所述的裝置,其特征在于,內(nèi)存塊被使用時,BITMAP1中對應(yīng)的比特值指示占用,否則指示空閑;子池中任一內(nèi)存塊在BITMAP1中對應(yīng)的比特值指示占用時,該子池在BITMAP2中對應(yīng)的比特值指示占用,否則指示空閑;子池群中所有子池在BITMAP2對應(yīng)的比特值指示占用時,則該子池群在BITMAP3中對應(yīng)的比特值指示占用,否則指示空閑。
22.如權(quán)利要求21所述的裝置,其特征在于,第二分配單元具體用于查找BITMAP3中第一個指示空閑的比特值,根據(jù)查找到的比特值在BITMAP3中的索引Al,查找存儲BITMAP2中比特值的第Al個數(shù)組;查找第Al個數(shù)組中第一個指示空閑的比特值,根據(jù)查找到的比特值在BITMAP2中的索引A2,查找存儲BITMAP1中比特值的第A2個數(shù)組;在第A2個數(shù)組中的所有比特值指示空閑時,確定找到空閑子池,將該子池的第一個空閑塊進行分配,并更新Blockjndex的值。
23.如權(quán)利要求21所述的裝置,其特征在于,第一位圖更新單元用于在確定上次被分配的內(nèi)存塊所在的子池內(nèi)沒有空閑內(nèi)存塊的情況下,分配內(nèi)存塊后, 將存儲BITMAP1中第A2個數(shù)組中所有比特值設(shè)置為指示占用,將BITMAP2中第A2個比特值設(shè)置為指示占用;進一步確定存儲BITMAP2中比特值的第Al個數(shù)組中所有比特值指示占用時,將 BITMAP3的第Al個比特值設(shè)置為指示占用,否則結(jié)束;在確定上次被分配的內(nèi)存塊所在的子池內(nèi)有空閑內(nèi)存塊的情況下,分配第內(nèi)存塊后不進行多級位圖更新。
24.如權(quán)利要求22所述的裝置,其特征在于,第二分配單元,若在第Al個數(shù)組中未找到第一個指示空閑的比特值,或者第A2個數(shù)組中不是所有比特值指示空閑時,返回重新查找 BITMAP3中第一個指示空閑的比特值。
25.如權(quán)利要求15 M任一所述的裝置,其特征在于,還包括索引確定單元,用于需要釋放所分配的內(nèi)存塊時,根據(jù)要釋放的內(nèi)存塊在內(nèi)存池中的索引及內(nèi)存池的基地址,確定該內(nèi)存塊在每級位圖中對應(yīng)的比特值索引;第二位圖更新單元,用于根據(jù)該內(nèi)存塊在每級位圖中對應(yīng)的比特值索引,從下至上對應(yīng)更新所述多級位圖中的比特值。
26.如權(quán)利要求25所述的裝置,其特征在于,所述多級位圖為三級位圖,第二位圖更新單元,具體用于根據(jù)該內(nèi)存塊在BITMAP1位圖中對應(yīng)的比特值索引,將BITMAP1中指示該內(nèi)存塊占用情況的比特值設(shè)置為指示空閑;確定該內(nèi)存塊所在子池中不是所有內(nèi)存塊空閑時,確定釋放內(nèi)存成功,否則,根據(jù)該內(nèi)存塊在BITMAP2位圖中對應(yīng)的比特值索引,將BITMAP2中指示該內(nèi)存塊所在子池使用情況的比特值置為指示空閑;并根據(jù)該內(nèi)存塊在BITMAP2位圖中對應(yīng)的比特值索引,將BITMAP3中該內(nèi)存塊所在子池群使用情況的比特值置為指示空閑。
27.如權(quán)利要求25所述的裝置,其特征在于,在同一時刻,僅允許為一個任務(wù)分配內(nèi)存,但允許釋放為多個任務(wù)所分配的內(nèi)存塊。
28.如權(quán)利要求15所述的裝置,其特征在于,所述內(nèi)存池管理裝置為基站。
全文摘要
本發(fā)明公開了一種內(nèi)存池管理方法及裝置,該方法包括需要在內(nèi)存池中分配內(nèi)存時,確定上次被分配的內(nèi)存塊所在的子池內(nèi)是否有空閑內(nèi)存塊;若有,則將所述子池內(nèi)的空閑內(nèi)存塊進行分配;若無,則通過從上至下查找多級位圖逐級縮小查找范圍,查找一個空閑子池并分配內(nèi)存塊,其中每級位圖包括多個比特值,最低級位圖的每個比特值指示內(nèi)存塊的使用情況,上級位圖的每個比特值,對應(yīng)地指示下級位圖中多個比特值所涉及的內(nèi)存塊的整體使用情況;根據(jù)所分配的內(nèi)存塊的位置,對應(yīng)更新所述多級位圖中的比特值。本發(fā)明內(nèi)存管理免互斥鎖,可以大大降低基站在多用戶、大數(shù)據(jù)量場景下處理器的負(fù)荷,能夠處理更多的用戶。
文檔編號G06F12/08GK102253897SQ20111021042
公開日2011年11月23日 申請日期2011年7月26日 優(yōu)先權(quán)日2011年7月26日
發(fā)明者韓耕 申請人:大唐移動通信設(shè)備有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
措美县| 苏州市| 墨玉县| 年辖:市辖区| 迁安市| 垣曲县| 诸城市| 德钦县| 乾安县| 宁乡县| 西昌市| 锡林郭勒盟| 林芝县| 日土县| 墨竹工卡县| 青龙| 深水埗区| 淮北市| 朝阳区| 盐边县| 准格尔旗| 石阡县| 额尔古纳市| 海兴县| 定远县| 庆云县| 浠水县| 宁乡县| 监利县| 子长县| 东辽县| 顺昌县| 霍邱县| 西乌珠穆沁旗| 方城县| 九台市| 漳平市| 分宜县| 寿光市| 民和| 社旗县|