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

一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法

文檔序號(hào):6481920閱讀:228來源:國知局
專利名稱:一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種內(nèi)存管理方法,尤其涉及一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法。

背景技術(shù)
現(xiàn)有技術(shù)中,LINUX和WINDOWS CE內(nèi)存管理方法都是基于內(nèi)存邊界識(shí)別法來實(shí)現(xiàn)的。
內(nèi)存邊界標(biāo)識(shí)法是一種傳統(tǒng)的動(dòng)態(tài)存儲(chǔ)分配算法,在每個(gè)內(nèi)存區(qū)的頭部和底部兩個(gè)邊界上分別設(shè)有標(biāo)識(shí),以識(shí)別該區(qū)域?yàn)檎加袎K或空閑塊,使得在回收用戶釋放的空閑塊時(shí)容易判別在物理位置上與其相鄰的內(nèi)存區(qū)域是否為空閑塊,以便將所有地址連續(xù)的空閑存儲(chǔ)區(qū)組合成一個(gè)盡可能大的空閑塊。
內(nèi)存塊的結(jié)構(gòu)如圖1所示,每個(gè)內(nèi)存區(qū)的頭部四個(gè)變量和底部兩個(gè)變量記錄內(nèi)存塊的信息。頭部四個(gè)變量的信息包括前驅(qū)內(nèi)存塊的地址(*llink),內(nèi)存塊空閑占用標(biāo)志(tag),內(nèi)存塊的大小(size),后繼內(nèi)存塊的地址(*rlink)。底部兩個(gè)變量的信息包括本內(nèi)存塊的地址(*uplink),內(nèi)存塊空閑占用標(biāo)志(tag)。在頭部和底部之間的空間為供用戶使用的空間。所有的空閑內(nèi)存塊鏈接起來形成雙重循環(huán)鏈表結(jié)構(gòu)。
每個(gè)內(nèi)存區(qū)中記錄內(nèi)存塊的信息的標(biāo)識(shí)的大量數(shù)據(jù)信息都要常駐在物理內(nèi)存中。由于微內(nèi)存系統(tǒng),內(nèi)存極其緊張,這種方法是不可取的,會(huì)影響微內(nèi)存系統(tǒng)的運(yùn)行速度和性能。而且該方法分配內(nèi)存需要遍歷整個(gè)內(nèi)存鏈,而鏈中節(jié)點(diǎn)分布在多個(gè)零散的內(nèi)存頁(以4K為單位)中,這意味著分配一個(gè)內(nèi)存需要導(dǎo)換多個(gè)頁面在物理內(nèi)存和nand flash中進(jìn)出,內(nèi)存分配是非常頻繁的動(dòng)作,此時(shí)頻繁導(dǎo)換的效率微內(nèi)存系統(tǒng)自然無法接受。


發(fā)明內(nèi)容
本發(fā)明目的在于提供一種適合微內(nèi)存系統(tǒng)的內(nèi)存管理方法,減少常駐內(nèi)存的數(shù)據(jù),而且分配釋放內(nèi)存無需遍歷導(dǎo)換頁數(shù)據(jù),大大提高系統(tǒng)的性能和速度。
本發(fā)明的目的可以通過以下方案實(shí)現(xiàn)一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法,其特征在于,只將內(nèi)存塊包含的部分信息常駐在內(nèi)存中,將所述的部分信息組成該內(nèi)存塊的索引表;當(dāng)內(nèi)存塊小于256K時(shí),將內(nèi)存塊狀態(tài)、內(nèi)存塊類型和內(nèi)存塊大小三個(gè)信息常駐在內(nèi)存中,組成該小內(nèi)存塊的索引表;當(dāng)內(nèi)存塊大于256K而小于4M時(shí),將內(nèi)存塊狀態(tài)、內(nèi)存塊類型、內(nèi)存塊大小和內(nèi)存塊ID索引號(hào)四個(gè)信息常駐在內(nèi)存中,組成該大內(nèi)存塊的索引表;利用小內(nèi)存的索引表和大內(nèi)存的擴(kuò)展索引表進(jìn)行內(nèi)存管理。
所述內(nèi)存塊小于256K時(shí)的索引表結(jié)構(gòu)依次劃分為一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)存塊狀態(tài),一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)存塊類型,一個(gè)14位二進(jìn)制數(shù)字記錄該內(nèi)存塊大小。所述的索引表設(shè)定為占用兩個(gè)字節(jié)空間,8位二進(jìn)制為一個(gè)字節(jié)。
所述內(nèi)存塊大于256K而小于4M時(shí)的索引表結(jié)構(gòu)依次劃分為一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)存塊狀態(tài),一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)塊存類型,一個(gè)4位二進(jìn)制數(shù)字記錄該內(nèi)存塊ID索引號(hào),一個(gè)10位二進(jìn)制數(shù)字記錄該內(nèi)存塊大小的前10位數(shù)據(jù);還需要擴(kuò)展一個(gè)8位的二進(jìn)制變量記錄內(nèi)存大小的后8位數(shù)據(jù),將該擴(kuò)展變量與所述的該內(nèi)存塊索引表組成擴(kuò)展索引表常駐在內(nèi)存中。所述的索引表設(shè)定為占用三個(gè)字節(jié)空間,8位二進(jìn)制為一個(gè)字節(jié)。
所述的小于256K的內(nèi)存塊,該索引表中記錄的類型為“小”。
所述的大于256K而小于4M的內(nèi)存塊,該索引表中記錄的類型為“大”。
本發(fā)明相對(duì)現(xiàn)有技術(shù)優(yōu)點(diǎn)在于利用了小內(nèi)存的索引表和大內(nèi)存的擴(kuò)展索引表進(jìn)行內(nèi)存管理的方法,大大減少了常駐內(nèi)存數(shù)據(jù);分配釋放內(nèi)存不需要遍歷導(dǎo)換頁數(shù)據(jù),提高了系統(tǒng)的速度和效率。



圖1是現(xiàn)有技術(shù)中內(nèi)存邊界識(shí)別法的內(nèi)存邊界表示圖; 圖2是本發(fā)明實(shí)施例的內(nèi)存空間分布示意圖; 圖3是本發(fā)明的內(nèi)存塊地址偏移示意圖; 圖4是本發(fā)明的內(nèi)存分配、釋放示意圖。

具體實(shí)施例方式 首先分配內(nèi)存空間假定一個(gè)堆容量為10個(gè)分配塊,每個(gè)分配塊長度為32字節(jié),如圖2所示,每個(gè)編號(hào)行代表一個(gè)狀態(tài)。一個(gè)連續(xù)內(nèi)存空間,分為空閑空間和分配空間兩種 分配空間如編號(hào)5里的以(2,-4)開頭的連續(xù)4個(gè)塊空間,逗號(hào)前的2表示前面一個(gè)已分配空間的偏移地址,逗號(hào)后的-4表示從本塊開始連續(xù)4個(gè)塊為分配空間。
空閑空間如編號(hào)5里的以(0,+3)開頭的連續(xù)3個(gè)塊空間,逗號(hào)前的0表示前面一個(gè)已分配空間的偏移地址,逗號(hào)后的+3表示從本塊開始連續(xù)3個(gè)塊為空閑空間。
然后提取內(nèi)存塊的索引表把每個(gè)內(nèi)存塊信息內(nèi)容用一個(gè)雙字節(jié)整數(shù)(shortint類型)來表示,記錄了代表的一個(gè)內(nèi)存塊的大小等相關(guān)信息 第一個(gè)數(shù)字1位,表示該內(nèi)存塊狀態(tài)(“使用”或者“空閑”); 第二個(gè)數(shù)字1位,表示該內(nèi)存塊類型(“大”或者“小”); 第三個(gè)數(shù)字14個(gè)位,表示內(nèi)存塊類型是“小”時(shí),該內(nèi)存塊大小≤(214-1)×16=256K。
該雙字節(jié)變量就作為對(duì)應(yīng)內(nèi)存塊的索引表,同時(shí)雙字節(jié)變量也限定了小內(nèi)存塊的大小為256K。
如果內(nèi)存塊大小大于256K時(shí),也就是內(nèi)存塊類型是“大”,那么上面的小內(nèi)存塊就不能滿足要求,需要把索引表的第三個(gè)數(shù)字14位分成兩個(gè)部分4位和10位 第一個(gè)數(shù)字1位,表示該內(nèi)存塊狀態(tài)(“使用”或者“空閑”); 第二個(gè)數(shù)字1位,表示該內(nèi)存塊類型(“大”或者“小”); 第三個(gè)數(shù)字4位,用來表示關(guān)聯(lián)的內(nèi)存塊ID索引號(hào),內(nèi)存塊個(gè)數(shù)為7個(gè); 第四個(gè)數(shù)字10位,用來表示該內(nèi)存塊大小的前10位數(shù)據(jù); 大內(nèi)存塊需要的額外的大小可由一個(gè)字符變量(char類型)來表示,字符變量用來表示該內(nèi)存塊大小的后8位數(shù)據(jù),這樣,內(nèi)存塊類型是“大”時(shí),該內(nèi)存塊大小≤(218-1)×16=4096K=4M。
該擴(kuò)展字符變量與上述的索引表組成了大內(nèi)存塊的擴(kuò)展索引表。即雙字節(jié)與字符變量組成的擴(kuò)展索引表所表示的內(nèi)存塊大小在256K~4M之間。
系統(tǒng)內(nèi)存塊個(gè)數(shù)小內(nèi)存塊個(gè)數(shù)為503,大內(nèi)存塊個(gè)數(shù)為6。所以常駐所有索引表需要的最大內(nèi)存為sizeof(GMEMInfo)=503*2+6*3=1024字節(jié)=1K,該1K大小的數(shù)據(jù)常駐內(nèi)存。因此采用雙字節(jié)變量作為索引表可以大大減少內(nèi)存空間。此時(shí)分配釋放內(nèi)存無需遍歷導(dǎo)換頁數(shù)據(jù)。
如圖3、4所示,由于每個(gè)內(nèi)存塊只有一個(gè)雙字節(jié)整數(shù)變量,只紀(jì)錄了代表的一個(gè)內(nèi)存塊的大小等相關(guān)信息,而沒有記錄該內(nèi)存塊的起始地址信息。因此所有的內(nèi)存塊也必須是物理相連的。
只需要把內(nèi)存開始地址順序的加上所有某個(gè)內(nèi)存塊之前大小,就得到了每個(gè)內(nèi)存塊的起始地址。從而為每個(gè)內(nèi)存塊節(jié)省一個(gè)長整型的偏移地址信息。
這樣,當(dāng)內(nèi)存塊n分裂為2個(gè)內(nèi)存塊時(shí),(或內(nèi)存塊n與內(nèi)存塊n+1合并為1個(gè)內(nèi)存塊時(shí)),我們需要在有效內(nèi)存塊個(gè)數(shù)內(nèi)移動(dòng)內(nèi)存塊數(shù)組。
盡管每次內(nèi)存塊分裂或合并都要搬移一次內(nèi)存塊,但由于內(nèi)存塊搬移的平均大小為250*2=500字節(jié),所以在內(nèi)存管理單元系統(tǒng)中,該代價(jià)是可以接受的。
下面給出此方案下的內(nèi)存分配策略和內(nèi)存釋放策略的操作流程。
當(dāng)需要分配內(nèi)存塊時(shí),采用內(nèi)存分配函數(shù) 1)首先從上次分配內(nèi)存塊處開始向前尋找足夠大的可分配內(nèi)存塊; 2)判斷該內(nèi)存塊是否是當(dāng)前有效的內(nèi)存管理單元映射頁; 3)是則分裂該內(nèi)存塊為2個(gè)內(nèi)存塊,跳至步驟5; 4)否則繼續(xù)向前尋找內(nèi)存塊。如果到內(nèi)存塊數(shù)組最大維數(shù)仍未分配成功,則從頭開始遍歷至上次分配內(nèi)存塊處(該過程重復(fù)步驟1,2,3或4,并記錄第一個(gè)滿足分配要求的內(nèi)存塊);如果仍未分配成功,則取第一個(gè)滿足分配要求的內(nèi)存塊,此時(shí)不再判斷內(nèi)存塊是否是當(dāng)前有效的內(nèi)存管理單元映射頁; 5)向后移動(dòng)整個(gè)內(nèi)存塊數(shù)組,重置上次分配內(nèi)存塊處(當(dāng)前分配內(nèi)存塊的下一個(gè)內(nèi)存塊處)。
當(dāng)需要釋放內(nèi)存塊時(shí),采用內(nèi)存釋放函數(shù) 1)首先遍歷內(nèi)存塊數(shù)組找到當(dāng)前內(nèi)存塊內(nèi)存偏移值等于欲釋放內(nèi)存值的內(nèi)存塊。
2)判斷當(dāng)前內(nèi)存塊的前后內(nèi)存塊是否處于釋放狀態(tài)。
是則將內(nèi)存塊的失效首地址前移到左對(duì)齊頁(判斷是否落于前內(nèi)存塊范圍內(nèi),否則失效首地址不移動(dòng)),失效末地址后移到右對(duì)齊頁(判斷是否落于后內(nèi)存塊范圍內(nèi),否則失效首地址不移動(dòng)); 否則合并這些內(nèi)存塊為1個(gè)內(nèi)存塊; 3)失效從首地址到末地址之間的對(duì)齊內(nèi)存頁; 4)向前移動(dòng)整個(gè)內(nèi)存塊數(shù)組,重置上次分配內(nèi)存塊處(當(dāng)前釋放合并后的內(nèi)存塊處)。
通過本發(fā)明的方法,每個(gè)內(nèi)存塊只用一個(gè)雙字節(jié)整數(shù)變量來標(biāo)識(shí)內(nèi)存塊大小等信息,大大減少了常駐在內(nèi)存中的數(shù)據(jù)量,提高了系統(tǒng)的性能和速度。
權(quán)利要求
1.一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法,其特征在于,只將內(nèi)存塊包含的部分信息常駐在內(nèi)存中,將所述的部分信息組成該內(nèi)存塊的索引表;當(dāng)內(nèi)存塊小于256K時(shí),將內(nèi)存塊狀態(tài)、內(nèi)存塊類型和內(nèi)存塊大小三個(gè)信息常駐在內(nèi)存中,組成該小內(nèi)存塊的索引表;當(dāng)內(nèi)存塊大于256K而小于4M時(shí),將內(nèi)存塊狀態(tài)、內(nèi)存塊類型、內(nèi)存塊大小和內(nèi)存塊ID索引號(hào)四個(gè)信息常駐在內(nèi)存中,組成該大內(nèi)存塊的索引表;利用小內(nèi)存的索引表和大內(nèi)存的擴(kuò)展索引表進(jìn)行內(nèi)存管理。
2.根據(jù)權(quán)利要求1所述的一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法,其特征在于,所述內(nèi)存塊小于256K時(shí)的索引表結(jié)構(gòu)依次劃分為一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)存塊狀態(tài),一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)存塊類型,一個(gè)14位二進(jìn)制數(shù)字記錄該內(nèi)存塊大小。
3.根據(jù)權(quán)利要求2所述的一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法,其特征在于,所述的索引表設(shè)定為占用兩個(gè)字節(jié)空間,8位二進(jìn)制為一個(gè)字節(jié)。
4.根據(jù)權(quán)利要求1所述的一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法,其特征在于,所述內(nèi)存塊大于256K而小于4M時(shí)的索引表結(jié)構(gòu)依次劃分為一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)存塊狀態(tài),一個(gè)1位二進(jìn)制數(shù)字記錄該內(nèi)塊存類型,一個(gè)4位二進(jìn)制數(shù)字記錄該內(nèi)存塊ID索引號(hào),一個(gè)10位二進(jìn)制數(shù)字記錄該內(nèi)存塊大小的前10位數(shù)據(jù);還需要擴(kuò)展一個(gè)8位的二進(jìn)制變量記錄內(nèi)存大小的后8位數(shù)據(jù),將該擴(kuò)展變量與所述的該內(nèi)存塊索引表組成擴(kuò)展索引表常駐在內(nèi)存中。
5.根據(jù)權(quán)利要求4所述的一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法,其特征在于,所述的索引表設(shè)定為占用三個(gè)字節(jié)空間,8位二進(jìn)制為一個(gè)字節(jié)。
全文摘要
本發(fā)明公開了一種微內(nèi)存系統(tǒng)的內(nèi)存管理方法,只將內(nèi)存塊包含的部分信息常駐在內(nèi)存中,將所述的部分信息組成該內(nèi)存塊的索引表;當(dāng)內(nèi)存塊小于256K時(shí),將內(nèi)存塊狀態(tài)、內(nèi)存塊類型和內(nèi)存塊大小三個(gè)信息常駐在內(nèi)存中,組成該小內(nèi)存塊的索引表;當(dāng)內(nèi)存塊大于256K而小于4M時(shí),將內(nèi)存塊狀態(tài)、內(nèi)存塊類型、內(nèi)存塊大小和內(nèi)存塊ID索引號(hào)四個(gè)信息常駐在內(nèi)存中,組成該大內(nèi)存塊的索引表;利用小內(nèi)存的索引表和大內(nèi)存的擴(kuò)展索引表進(jìn)行內(nèi)存管理。本發(fā)明相對(duì)現(xiàn)有技術(shù)優(yōu)點(diǎn)在于利用了小內(nèi)存的索引表和大內(nèi)存的擴(kuò)展索引表進(jìn)行內(nèi)存管理的方法,大大減少了常駐內(nèi)存數(shù)據(jù);分配釋放內(nèi)存不需要遍歷導(dǎo)換頁數(shù)據(jù),提高了系統(tǒng)的速度和效率。
文檔編號(hào)G06F12/06GK101826054SQ200910037588
公開日2010年9月8日 申請(qǐng)日期2009年3月4日 優(yōu)先權(quán)日2009年3月4日
發(fā)明者趙俊化, 張木軍, 胡勝發(fā) 申請(qǐng)人:安凱(廣州)軟件技術(shù)有限公司
凤城市| 陆良县| 临城县| 冀州市| 伊宁市| 乡城县| 东山县| 洛川县| 武冈市| 浦北县| 大田县| 博客| 昔阳县| 武夷山市| 梅州市| 宿州市| 伊宁市| 镇巴县| 新营市| 铜山县| 通山县| 钟山县| 营山县| 临朐县| 西昌市| 霍林郭勒市| 云霄县| 神木县| 揭阳市| 马鞍山市| 昌图县| 司法| 城步| 拉孜县| 杭锦旗| 门头沟区| 太仆寺旗| 宁陵县| 云南省| 正镶白旗| 深水埗区|