国产精品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>

      一種內(nèi)存管理系統(tǒng)及其分配方法

      文檔序號(hào):6569770閱讀:253來源:國知局
      專利名稱:一種內(nèi)存管理系統(tǒng)及其分配方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種內(nèi)存管理系統(tǒng)及其分配方法。
      (二)現(xiàn)有技術(shù)通常,操作系統(tǒng)提供的動(dòng)態(tài)使用內(nèi)存的管理方法是根據(jù)一般情況制作的內(nèi)存管理,即為內(nèi)存的申請(qǐng)和釋放,該方法一般來說可以用鏈表或堆棧來實(shí)現(xiàn)。鏈表方法把空閑塊以鏈表形式排列,如果有申請(qǐng)內(nèi)存的情況出現(xiàn),就從鏈表的頭部開始搜索空閑的內(nèi)存塊,若此內(nèi)存塊小于申請(qǐng)內(nèi)存所需大小,則延著鏈表繼續(xù)搜索,直到找到足夠大小的內(nèi)存塊,并分配使用;如果有釋放內(nèi)存的情況出現(xiàn),就將內(nèi)存塊放到空閑隊(duì)列的尾部。堆棧方法在申請(qǐng)內(nèi)存時(shí)同隊(duì)列方法類似,只不過是從棧頂取出空閑內(nèi)存塊;釋放時(shí)把內(nèi)存塊放到棧頂。這兩種方法都存在一個(gè)共同的特征,即分配內(nèi)存時(shí)從較大的內(nèi)存塊中分出申請(qǐng)所需大小的內(nèi)存塊,并將剩余部分作為一個(gè)空閑內(nèi)存塊繼續(xù)保存在空閑內(nèi)存鏈表中。
      在很多應(yīng)用場合,操作系統(tǒng)動(dòng)態(tài)使用內(nèi)存的頻率很高,每次申請(qǐng)的內(nèi)存大小又不固定,并且需要不間斷執(zhí)行很長時(shí)間。如果使用這種操作系統(tǒng)提供的內(nèi)存管理方法,由于長時(shí)間不間斷地申請(qǐng)和釋放內(nèi)存,到最后,必然會(huì)產(chǎn)生大量的很小的空閑塊。這時(shí)如果通過某種工具來看內(nèi)存情況,會(huì)發(fā)現(xiàn)總的可以使用的內(nèi)存量還有很多,但要申請(qǐng)一塊比較大的內(nèi)存塊時(shí),系統(tǒng)卻回答沒有足夠的內(nèi)存。
      如圖1,使用操作系統(tǒng)提供的內(nèi)存管理方式,當(dāng)申請(qǐng)內(nèi)存時(shí),首先從空閑內(nèi)存鏈表的頭部開始尋找大小足夠的內(nèi)存塊,第一空閑內(nèi)存1和第二空閑內(nèi)存2的大小不夠,第三空閑內(nèi)存3的大小超過申請(qǐng)內(nèi)存要求的大小,故從空閑內(nèi)存3中分配內(nèi)存(代表本次內(nèi)存申請(qǐng)分配的內(nèi)存)后,第三空閑內(nèi)存3的剩余部分是一塊很小的內(nèi)存塊,成為內(nèi)存碎片4。當(dāng)應(yīng)用系統(tǒng)長時(shí)間運(yùn)行后,內(nèi)存中存在大量的內(nèi)存碎片4,不僅影響申請(qǐng)內(nèi)存所需時(shí)間,也將最終導(dǎo)致內(nèi)存耗盡,沒有足夠大的空閑內(nèi)存用于較大的內(nèi)存分配。
      通常上述情況的解決方式是通過某個(gè)程序?qū)崿F(xiàn)內(nèi)存空閑塊合并,但是當(dāng)執(zhí)行該程序時(shí),系統(tǒng)的性能會(huì)大幅度下降。而應(yīng)用系統(tǒng)是一直在運(yùn)行的,因此帶來的系統(tǒng)性能的下降是不可接受的。尤其某些對(duì)內(nèi)存管理、系統(tǒng)性能有較高要求的應(yīng)用系統(tǒng),如頻繁要求動(dòng)態(tài)使用內(nèi)存的信令系統(tǒng)等,這種內(nèi)存管理辦法顯然是無法滿足系統(tǒng)要求的。

      發(fā)明內(nèi)容本發(fā)明的目的在于提供一種內(nèi)存管理系統(tǒng)及其分配方法,以適用于需要頻繁動(dòng)態(tài)使用內(nèi)存的應(yīng)用系統(tǒng),從而大大減少系統(tǒng)運(yùn)行中產(chǎn)生的內(nèi)存碎片,提高內(nèi)存使用的效率,提高應(yīng)用系統(tǒng)的性能,同時(shí)也提高了內(nèi)存管理的速度和內(nèi)存使用時(shí)的安全性。
      本發(fā)明所提供的一種內(nèi)存管理系統(tǒng),包括內(nèi)存管理模塊接口、與內(nèi)存管理模塊接口相連的若干個(gè)內(nèi)存塊管理模塊、以及與各內(nèi)存塊管理模塊相連的若干個(gè)內(nèi)存塊管理單元,其中內(nèi)存管理模塊接口,由一組函數(shù)組成,完成結(jié)構(gòu)的初始化、內(nèi)存申請(qǐng)、內(nèi)存釋放功能,是應(yīng)用程序訪問內(nèi)存的接口;內(nèi)存塊管理單元,是內(nèi)存管理的基本單元,每個(gè)內(nèi)存塊管理單元對(duì)應(yīng)于一個(gè)被管理的內(nèi)存塊,保存這個(gè)內(nèi)存塊的相關(guān)信息;內(nèi)存塊管理模塊,通過鏈表維護(hù)和管理一組內(nèi)存塊管理單元,這組內(nèi)存塊管理單元所對(duì)應(yīng)的內(nèi)存塊大小相同。
      上述的內(nèi)存管理系統(tǒng),其中,內(nèi)存塊管理模塊所處理的信息包括內(nèi)存塊的大?。粌?nèi)存塊的總塊數(shù);空閑內(nèi)存塊的塊數(shù);內(nèi)存塊的使用峰值;第一個(gè)空閑塊的標(biāo)號(hào);最后一個(gè)空閑塊的標(biāo)號(hào);第一個(gè)內(nèi)存單元的指針;第一個(gè)內(nèi)存塊管理單元的指針;以及內(nèi)存塊的信號(hào)燈。
      上述的內(nèi)存管理系統(tǒng),其中,內(nèi)存塊管理單元所處理的信息包括內(nèi)存塊空閑標(biāo)志位;下一空閑塊標(biāo)號(hào);內(nèi)存塊實(shí)際使用長度;內(nèi)存塊申請(qǐng)者標(biāo)識(shí);內(nèi)存塊釋放者標(biāo)識(shí)。
      本發(fā)明所提供的一種內(nèi)存分配方法,根據(jù)內(nèi)存申請(qǐng)要求進(jìn)入內(nèi)存分配過程,包括下列步驟1)根據(jù)所申請(qǐng)的內(nèi)存大小,由小到大選擇最適合的內(nèi)存塊管理模塊;2)判斷該內(nèi)存管理模塊中是否存在空閑的內(nèi)存塊(1)若存在,則從該內(nèi)存塊管理模塊中提取第一個(gè)空閑內(nèi)存塊,其步驟包括a)選定該組中第一個(gè)空閑內(nèi)存塊;b)將該內(nèi)存塊從空閑鏈表中刪除;c)對(duì)該內(nèi)存塊管理模塊的空閑內(nèi)存塊鏈表進(jìn)行操作,并更新所對(duì)應(yīng)的內(nèi)存塊管理單元的信息;d)將該內(nèi)存塊地址返回,本次內(nèi)存申請(qǐng)成功;(2)若不存在,判斷是否有更大的內(nèi)存塊管理模塊a)若存在,則選擇下一個(gè)內(nèi)存塊管理模塊,并返回至步驟2);b)若不存在,則本次內(nèi)存申請(qǐng)失敗。
      本發(fā)明采用了上述技術(shù)解決方案,用內(nèi)存塊管理數(shù)組與內(nèi)存塊鏈表相結(jié)合的方式實(shí)現(xiàn)內(nèi)存管理,并采用內(nèi)存預(yù)分配和分類管理的機(jī)制,以達(dá)到高實(shí)時(shí)性和消除內(nèi)存碎片的目的,因而大大地改善了應(yīng)用系統(tǒng)的性能。本發(fā)明是對(duì)現(xiàn)有內(nèi)存管理機(jī)制的一個(gè)很好的補(bǔ)充與完善。


      圖1是現(xiàn)有操作系統(tǒng)提供的內(nèi)存管理方式示意2是本發(fā)明內(nèi)存管理系統(tǒng)結(jié)構(gòu)示意3是內(nèi)存分配方法流程圖具體實(shí)施方式
      如圖2所示,本發(fā)明,即一種內(nèi)存管理系統(tǒng),包括內(nèi)存管理模塊接口5、與內(nèi)存管理模塊接口5相連的若干個(gè)內(nèi)存塊管理模塊6、以及與各內(nèi)存塊管理模塊6相連的若干個(gè)內(nèi)存塊管理單元7。
      內(nèi)存管理模塊接口5,由一組函數(shù)組成,完成結(jié)構(gòu)的初始化、內(nèi)存申請(qǐng)、內(nèi)存釋放功能,是應(yīng)用程序訪問內(nèi)存的接口。
      內(nèi)存塊管理單元7,是內(nèi)存管理的基本單元,每個(gè)內(nèi)存塊管理單元對(duì)應(yīng)于一個(gè)被管理的內(nèi)存塊,保存這個(gè)內(nèi)存塊的相關(guān)信息。所處理的信息包括內(nèi)存塊空閑標(biāo)志位;下一空閑塊標(biāo)號(hào);內(nèi)存塊實(shí)際使用長度;內(nèi)存塊申請(qǐng)者標(biāo)識(shí);內(nèi)存塊釋放者標(biāo)識(shí)。
      內(nèi)存塊管理模塊6,通過鏈表維護(hù)和管理一組內(nèi)存塊管理單元7,這組內(nèi)存塊管理單元7所對(duì)應(yīng)的內(nèi)存塊大小相同。所處理的信息包括內(nèi)存塊的大??;內(nèi)存塊的總塊數(shù);空閑內(nèi)存塊的塊數(shù);內(nèi)存塊的使用峰值;第一個(gè)空閑塊的標(biāo)號(hào);最后一個(gè)空閑塊的標(biāo)號(hào);第一個(gè)內(nèi)存單元的指針;第一個(gè)內(nèi)存塊管理單元的指針;以及內(nèi)存塊的信號(hào)燈。
      本發(fā)明應(yīng)用于通信系統(tǒng)的內(nèi)存管理中,假定有兩個(gè)內(nèi)存塊管理模塊,分別管理大小為16個(gè)字節(jié)數(shù)量為1000的一組內(nèi)存塊和大小為32個(gè)字節(jié)數(shù)量為2000的另一組內(nèi)存塊,每個(gè)16字節(jié)或32字節(jié)的內(nèi)存塊都對(duì)應(yīng)有自己的內(nèi)存塊管理單元。內(nèi)存管理模塊接口是管理公共內(nèi)存塊的入口。
      內(nèi)存塊管理模塊中的第一個(gè)空閑塊的標(biāo)識(shí)、最后一個(gè)空閑塊的標(biāo)識(shí)、以及內(nèi)存塊管理單元中的下一空閑塊標(biāo)識(shí)分別將大小為16和32的兩組內(nèi)存空閑塊鏈接起來,成為鏈表。
      如圖3所示,本發(fā)明的內(nèi)存分配方法,包括下列步驟1)根據(jù)所申請(qǐng)的內(nèi)存大小,由小到大選擇最適合的內(nèi)存塊管理模塊;2)判斷該內(nèi)存管理模塊中是否存在空閑的內(nèi)存塊(1)若存在,則從該內(nèi)存塊管理模塊中提取第一個(gè)空閑內(nèi)存塊,其步驟包括a)選定該組中第一個(gè)空閑內(nèi)存塊;b)將該內(nèi)存塊從空閑鏈表中刪除;c)對(duì)該內(nèi)存塊管理模塊的空閑內(nèi)存塊鏈表進(jìn)行操作,并更新所對(duì)應(yīng)的內(nèi)存塊管理單元的信息;d)將該內(nèi)存塊地址返回,本次內(nèi)存申請(qǐng)成功;(2)若不存在,判斷是否有更大的內(nèi)存塊管理模塊a)若存在,則選擇下一個(gè)內(nèi)存塊管理模塊,并返回至步驟2);b)若不存在,則本次內(nèi)存申請(qǐng)失敗。
      當(dāng)應(yīng)用程序申請(qǐng)內(nèi)存時(shí),內(nèi)存管理模塊接口中的內(nèi)存申請(qǐng)部分首先根據(jù)申請(qǐng)內(nèi)存的大小,由小到大選擇最適合的內(nèi)存塊管理模塊。再從該內(nèi)存塊管理模塊中的空閑內(nèi)存塊管理單元鏈表中取出空閑內(nèi)存塊管理單元,將此內(nèi)存塊管理單元對(duì)應(yīng)的內(nèi)存塊即為本次內(nèi)存申請(qǐng)分配的內(nèi)存。如果該內(nèi)存塊管理模塊中沒有空閑內(nèi)存塊,則依次申請(qǐng)更大的內(nèi)存塊。如果更大的內(nèi)存塊管理模塊中均無空閑內(nèi)存塊,則申請(qǐng)失敗。
      權(quán)利要求
      1.一種內(nèi)存管理系統(tǒng),包括內(nèi)存管理模塊接口、與內(nèi)存管理模塊接口相連的若干個(gè)內(nèi)存塊管理模塊、以及與各內(nèi)存塊管理模塊相連的若干個(gè)內(nèi)存塊管理單元,其中內(nèi)存管理模塊接口,由一組函數(shù)組成,完成結(jié)構(gòu)的初始化、內(nèi)存申請(qǐng)、內(nèi)存釋放功能,是應(yīng)用程序訪問內(nèi)存的接口;內(nèi)存塊管理單元,是內(nèi)存管理的基本單元,每個(gè)內(nèi)存塊管理單元對(duì)應(yīng)于一個(gè)被管理的內(nèi)存塊,保存這個(gè)內(nèi)存塊的相關(guān)信息;內(nèi)存塊管理模塊,通過鏈表維護(hù)和管理一組內(nèi)存塊管理單元,這組內(nèi)存塊管理單元所對(duì)應(yīng)的內(nèi)存塊大小相同。
      2.根據(jù)權(quán)利要求1所述的內(nèi)存管理系統(tǒng),其特征在于,所述的內(nèi)存塊管理模塊所處理的信息包括內(nèi)存塊的大小;內(nèi)存塊的總塊數(shù);空閑內(nèi)存塊的塊數(shù);內(nèi)存塊的使用峰值;第一個(gè)空閑塊的標(biāo)號(hào);最后一個(gè)空閑塊的標(biāo)號(hào);第一個(gè)內(nèi)存單元的指針;第一個(gè)內(nèi)存塊管理單元的指針;以及內(nèi)存塊的信號(hào)燈。
      3.根據(jù)權(quán)利要求1所述的內(nèi)存管理系統(tǒng),其特征在于,所述的內(nèi)存塊管理單元所處理的信息包括內(nèi)存塊空閑標(biāo)志位;下一空閑塊標(biāo)號(hào);內(nèi)存塊實(shí)際使用長度;內(nèi)存塊申請(qǐng)者標(biāo)識(shí);內(nèi)存塊釋放者標(biāo)識(shí)。
      4.一種內(nèi)存分配方法,根據(jù)內(nèi)存申請(qǐng)要求進(jìn)入內(nèi)存分配過程,包括下列步驟1)根據(jù)所申請(qǐng)的內(nèi)存大小,由小到大選擇最適合的內(nèi)存塊管理模塊;2)判斷該內(nèi)存管理模塊中是否存在空閑的內(nèi)存塊(1)若存在,則從該內(nèi)存塊管理模塊中提取第一個(gè)空閑內(nèi)存塊,其步驟包括a)選定該組中第一個(gè)空閑內(nèi)存塊;b)將該內(nèi)存塊從空閑鏈表中刪除;c)對(duì)該內(nèi)存塊管理模塊的空閑內(nèi)存塊鏈表進(jìn)行操作,并更新所對(duì)應(yīng)的內(nèi)存塊管理單元的信息;d)將該內(nèi)存塊地址返回,本次內(nèi)存申請(qǐng)成功;(2)若不存在,判斷是否有更大的內(nèi)存塊管理模塊a)若存在,則選擇下一個(gè)內(nèi)存塊管理模塊,并返回至步驟2);b)若不存在,則本次內(nèi)存申請(qǐng)失敗。
      全文摘要
      一種內(nèi)存管理系統(tǒng)及其分配方法,其內(nèi)存管理系統(tǒng)包括內(nèi)存管理模塊接口、若干個(gè)內(nèi)存塊管理模塊、以及與各內(nèi)存塊管理模塊相連的若干個(gè)內(nèi)存塊管理單元,其中內(nèi)存管理模塊接口,由一組函數(shù)組成,完成結(jié)構(gòu)的初始化、內(nèi)存申請(qǐng)、內(nèi)存釋放功能,是應(yīng)用程序訪問內(nèi)存的接口;內(nèi)存塊管理單元,是內(nèi)存管理的基本單元,每個(gè)內(nèi)存塊管理單元對(duì)應(yīng)于一個(gè)被管理的內(nèi)存塊,保存這個(gè)內(nèi)存塊的相關(guān)信息;內(nèi)存塊管理模塊,通過鏈表維護(hù)和管理一組內(nèi)存塊管理單元,這組內(nèi)存塊管理單元所對(duì)應(yīng)的內(nèi)存塊大小相同。本發(fā)明用內(nèi)存塊管理數(shù)組與內(nèi)存塊鏈表相結(jié)合的方式實(shí)現(xiàn)內(nèi)存管理,并采用內(nèi)存預(yù)分配和分類管理的機(jī)制,以達(dá)到高實(shí)時(shí)性和消除內(nèi)存碎片,因而大大地改善了應(yīng)用系統(tǒng)的性能。
      文檔編號(hào)G06F12/08GK1427342SQ01139150
      公開日2003年7月2日 申請(qǐng)日期2001年12月21日 優(yōu)先權(quán)日2001年12月21日
      發(fā)明者陳力軍, 魏永軍, 迮超 申請(qǐng)人:上海貝爾有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1