專利名稱:內存分配方法及系統的制作方法
技術領域:
本發(fā)明涉及內存管理領域,特別是涉及一種內存分配方法及系統。
背景技術:
內存是計算機系統中儲存指令代碼和各種數據的主要部件,如果內存短缺或者管理不當,將導致整個系統反應遲緩,甚至崩潰。所以,建立穩(wěn)定、高效的內存管理策略是一個很重要的且必須面對的問題。在現有的Linux操作系統的伙伴算法中,先將所有空閑頁面分為10個塊組,每組中,各內存塊包含2的冪次方個空閑頁面,例如,第O組中各內存塊各自均包含2°=1個空閑頁面,第I組中各內存塊各自均包含2^2個空閑頁面,……第9組中各內存塊各自均包含29=512個空閑頁面,且每一內存塊組的內存塊形成一個鏈表??梢?,在該種算法中,每一內存塊組中各內存塊包含的空閑頁面數量是相同的。以下將通過一個簡單的例子來說明該Linux操作系統的伙伴算法的工作過程:假如現操作系統需要一包含128個空閑頁面的內存塊,則該伙伴算法系統先在包含128個空閑頁面的內存塊組的鏈表中查找,以確定是否有包含128個空閑頁面的內存塊,如果有,就直接提供該操作系統使用;如果沒有,該伙伴算法系統會在包含256個空閑頁面的內存塊構成的內存塊組的鏈表中查找,如果該內存塊組中有可用的空閑內存塊,該伙伴算法系統會把該空閑內存塊的256個空閑頁面分為兩等份,一份提供給操作系統使用,另一份插入到包含128個空閑頁面的內存塊構成的內存塊組中。如果在包含256個空閑頁面的內存塊組的鏈表中也沒有找到可用的空閑頁塊,就繼續(xù)在更大的塊組,即在包含256個空閑頁面的內存塊構成的內存塊組的鏈表中查找,如果該內存塊組中有可用的空閑內存塊,該伙伴算法系統會把該空閑內存塊的512個空閑頁面分出128個頁面提供給操作系統使用,然后從剩余的384個頁面中取出256個頁面插入到塊大小為256個頁面的鏈表中,然后把剩余的128個頁面插入到塊大小為128個頁面的鏈表中;如果512個頁面的鏈表中還沒有可用的空閑內存塊,該伙伴算法系統就放棄查詢,并發(fā)出出錯信號。內存的釋放是分配的逆過程,也可以看作是伙伴的合并過程。當釋放一個被占用的內存塊時,先在其對應的鏈表中考查是否有伙伴內存塊存在,如果沒有伙伴內存塊,就直接把該要釋放的內存塊掛入鏈表頭;如果有,則從鏈表中摘下伙伴內存塊,并合并成形成合并內存塊,然后繼續(xù)考查合并后的合并內存塊在所屬內存塊組的鏈表中是否還有伙伴內存塊存在,直到合并至已包含29=512個頁面為止。其中,滿足以下條件的兩個內存塊互為伙伴內存塊:(1)兩個內存塊各自包含的頁面數量相同;(2)兩個內存塊的物理地址連續(xù)。上述伙伴算法的優(yōu)點是分配和回收速度快、算法簡單,當一個大小為2"字節(jié)的內存塊釋放后,存儲管理系統只需要搜索2n字節(jié)大小的內存塊以判定是否需要合并。雖然伙伴算法是有名的經典算法,但也并非完美無缺;首先,從伙伴算法原理可知,所有的內存請求都必須以2的冪次方大小為單位,若需要一個包含129個頁面的內存塊時,系統必須提供包含256個頁面的空閑內存塊來使用,由于實際僅使用129個頁面,剩余的127個頁面顯然被浪費了,也就是近50%的內存資源被浪費,可見,該種算法容易導致內存利用率較低。此外,伙伴算法的效率也容易出現問題:由于伙伴算法涉及比較多的計算、以及鏈表和位圖的操作,導致開銷比較大;例如,如果每次2n大小的伙伴塊合并到2n+1的鏈表隊列中,那么2n大小的鏈表中的內存塊就會因為合并操作而減少,由此,當系統需要2"大小的內存塊時,就需要將2n+1大小的內存塊又進行拆分,可見,如此合并又拆分的過程是無效率的。因而,如何提出一種新的內存分配方法,既能很好的繼承伙伴算法的優(yōu)點又能克服伙伴算法的不足,實現快速分配、回收內存,同時提高內存使用效率,實為本領域從業(yè)者亟待解決的問題。
發(fā)明內容
鑒于以上所述現有技術的缺點,本發(fā)明的目的在于提供一種內存使用效率高的內存分配方法及系統。為實現上述目的及其他相關目的,本發(fā)明提供一種內存分配方法,其至少包括:-將包含I個空閑頁面的各內存塊歸為一組空閑內存塊組、包含2個空閑頁面的各內存塊歸為一組空閑內存塊組、包含空閑頁面數量大于等于2H+1且小于等于21的各內存塊歸為一組空閑內存塊組,i為大于或等于2的整數;并基于空閑內存塊組內各個空閑塊的相關信息建立相應的空閑塊索引記錄,以便查詢。優(yōu)選地,所述內存分配方法還包括步驟:-基于內存需求來確定待查詢的空閑內存塊組;-由待查詢的空閑內存塊組開始進行查詢,以提供能滿足內存需求的可用空閑內存塊,并修改可用空閑內存塊的索引記錄。優(yōu)選地,當該可用空閑內存塊的存儲容量超過所述內存需求時,則將該可用空閑內存塊拆分為滿足所述內存需求的第一伙伴內存塊與第二伙伴內存塊,再基于第二伙伴內存塊包含的空閑頁面數量來確定該第二伙伴內存塊所屬的空閑內存塊組,并基于所述第一伙伴內存塊的相關信息來建立該內存塊相對應的已分配索弓I記錄、基于第二伙伴內存塊的相關信息來建立新的空閑內存塊索引記錄,并刪除該可用空閑內存塊相對應的空閑塊索引記錄。優(yōu)選地,當該可用空閑內存塊的存儲容量等于所述內存需求時,提供該可用空閑內存塊以滿足所述內存需求,并將可用空閑內存塊相對應的空閑塊索引記錄刪除,并添加該內存塊相對應的已分配索引記錄。優(yōu)選地,當該可用空閑內存塊僅包含一個空閑頁面時,若其存儲容量超過所述內存需求時,直接提供該可用空閑內存塊以滿足所述內存需求,并將該可用空閑內存塊相對應的空閑塊索引記錄刪除,并添加該內存塊相對應的已分配索引記錄。優(yōu)選地,所述內存分配方法還包括步驟:-基于待回收內存塊的索引記錄來確定是否存在伙伴內存塊;-若存在伙伴內存塊,則確定該伙伴內存塊是否已被占用,若是,則基于該待回收內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加該待回收內存塊相對應的空閑塊索引記錄,并刪除該待回收內存塊相對應的已分配索引記錄;若否,則將該待回收內存塊與伙伴內存塊合并,并基于該合并后的內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加合并后的內存塊相對應的空閑塊索引記錄,并刪除待回收內存塊的已分配索引記錄以及該伙伴內存塊相對應的空閑塊索引記錄。本發(fā)明還提供一種內存分配系統,其至少包括:分組模塊,用于將包含I個空閑頁面的各內存塊歸為一組空閑內存塊組、包含2個空閑頁面的各內存塊歸為一組空閑內存塊組、包含空閑頁面數量大于等于2H+1且小于等于21的各內存塊歸為一組空閑內存塊組,i為大于或等于2的整數;并基于空閑內存塊組內各個空閑塊的相關信息建立相應的空閑塊索引記錄,以便查詢。優(yōu)選地,所述內存分配系統還包括:確定模塊,用于基于內存需求來確定待查詢的空閑內存塊組;提供模塊,用于由待查詢的空閑內存塊組開始進行查詢,以提供能滿足內存需求的可用空閑內存塊。優(yōu)選地,當該可用空閑內存塊的存儲容量超過所述內存需求時,則提供模塊將該可用空閑內存塊拆分為滿足所述內存需求的第一伙伴內存塊與第二伙伴內存塊,分組模塊再基于第二伙伴內存塊包含的空閑頁面數量來確定該第二伙伴內存塊所屬的空閑內存塊組,并基于所述第一伙伴內存塊的相關信息來建立該內存塊相對應的已分配索引記錄、基于第二伙伴內存塊的相關信息來建立新的空閑內存塊索引記錄,并刪除該可用空閑內存塊相對應的空閑塊索引記錄。優(yōu)選地,當該可用空閑內存塊的存儲容量等于所述內存需求時,提供模塊提供該可用空閑內存塊以滿足所述內存需求,分組模塊將該可用空閑內存塊相對應的空閑塊索引記錄刪除,并添加該內存塊相對應的已分配索引記錄。優(yōu)選地,當該可用空閑內存塊僅包含一個空閑頁面時,若其存儲容量超過所述內存需求時,提供模塊直接提供該可用空閑內存塊以滿足所述內存需求,分組模塊將該可用空閑內存塊相對應的空閑塊索引記錄刪除,并添加該內存塊相對應的已分配索引記錄。優(yōu)選地,所述內存分配系統還包括:回收模塊,用于基于待回收內存塊的索引記錄來確定是否存在伙伴內存塊;若存在伙伴內存塊,則回收模塊確定該伙伴內存塊是否已分配,若是,則分組模塊基于該待回收內存塊包含的頁面數量來確定其所屬的空閑內存塊組,在相應的空閑內存塊組中增加該待回收內存塊相對應的空閑塊索引記錄,并刪除該待回收內存塊相對應的已分配索引記錄;若否,則回收模塊將該待回收內存塊與伙伴內存塊合并,分組模塊基于該合并后的內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加合并后的內存塊相對應的空閑塊索引記錄,并刪除待回收內存塊相對應的已分配索引記錄以及該伙伴內存塊相對應的空閑塊索引記錄。如上所述,本發(fā)明的內存分配方法及系統,具有以下有益效果:可實現內存的快速分配、回收,同時提高內存使用效率。
圖1顯示為本發(fā)明的內存分配方法的內存塊分組流程圖。圖2顯示為本發(fā)明的內存分配方法的提供內存塊以滿足內存需求的流程圖。圖3顯示為本發(fā)明的內存分配方法的回收內存塊的流程圖。圖4顯示為本發(fā)明的內存分配系統的一種優(yōu)選示意圖。圖5顯示為本發(fā)明的內存分配系統的又一種優(yōu)選示意圖。圖6顯示為本發(fā)明的內存分配系統的再一種優(yōu)選示意圖。元件標號說明I內存分配系統11分組模塊12確定模塊13提供模塊14回收模塊S11、S21、S22、S31、S32 步驟
具體實施例方式以下通過特定的具體實例說明本發(fā)明的實施方式,本領域技術人員可由本說明書所揭露的內容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的具體實施方式
加以實施或應用,本說明書中的各項細節(jié)也可以基于不同觀點與應用,在沒有背離本發(fā)明的精神下進行各種修飾或改變。請參閱圖1至圖6。需要說明的是,本實施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構想,遂圖式中僅顯示與本發(fā)明中有關的組件而非按照實際實施時的組件數目、形狀及尺寸繪制,其實際實施時各組件的型態(tài)、數量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復雜。如圖所示,本發(fā)明提供一種內存分配方法。其中,根據本發(fā)明的方法主要通過計算機設備中的內存分配系統來完成,該內存分配系統包括但不限于安裝在計算機設備中且能夠實現本發(fā)明方案的諸如應用模塊、操作系統、處理控制器等。其中,該計算機設備包括但不限于:1)用戶設備;2)網絡設備。所述用戶設備包括但不限于計算機、智能手機、PDA等;所述網絡設備包括但不限于單個網絡服務器、多個網絡服務器組成的服務器組或基于云計算(Cloud Computing)的由大量計算機或網絡服務器構成的云,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。在步驟Sll中,所述內存分配系統將包含I個空閑頁面的各內存塊歸為一組空閑內存塊組、包含2個空閑頁面的各內存塊歸為一組空閑內存塊組、包含空閑頁面數量大于等于2H+1且小于等于21的各內存塊歸為一組空閑內存塊組,i為大于或等于2的整數,并基于空閑內存塊組內各個空閑塊的相關信息建立相應的空閑塊索引記錄,以便查詢。其中,所述空閑內存塊的相關信息包括與空閑內存塊相關聯的信息,優(yōu)選地,包括但不限于:空閑內存塊 包含的空閑頁面數量及起始地址等。例如,所述內存分配系統將包含I個空閑頁面的各內存塊歸為第O組、包含2個空閑頁面的各內存塊歸為第I組、包含3或4個空閑頁面的各內存塊歸為第2組、……包含2^+1=257,258,……或29=512個空閑頁面的各內存塊歸為第9組;并基于第O組包含的各內存塊各自包含的空閑頁面數量及起始地址來建立第O組的空閑內存塊索引記錄、基于第I組包含的各內存塊各自包含的空閑頁面數量及起始地址來建立第O組的空閑內存塊索引記錄、……基于第9組包含的各內存塊各自包含的空閑頁面數量及起始地址來建立第9組的空閑內存塊索引記錄。優(yōu)選地,所述內存分配系統將每一組空閑內存塊組的空閑內存塊索引記錄依照各自記錄的空閑內存塊的空閑頁面數量以升序方式排列。例如,一組空閑內存塊組中,包含空閑內存塊A11、A12、A13、A14,其中,空閑內存塊All包含5個空閑頁面,空閑內存塊A12包含7個空閑頁面,空閑內存塊A13包含8個空閑頁面,空閑內存塊A14包含6個空閑頁面,則所述內存分配系統將空閑內存塊All的索引記錄XI1、空閑內存塊A12的索引記錄X12空閑內存塊A13的索引記錄X13、空閑內存塊A14的索引記錄X14按如下升序 順序排列:Xll ;X14 ;X12 ;Xl3。請參見圖2,其為基于內存需求來提供相應內存塊的流程圖。在步驟S21中,所述內存分配系統基于內存需求來確定待查詢的空閑內存塊組。例如,應用程序系統Lll需要包含8個空閑頁面的內存塊,則所述內存分配系統基于該內存需求確定包含8個空閑頁面的內存塊屬于第3組,則將第3組空閑內存塊組作為待查詢的空閑內存塊組。接著,在步驟S22中,所述內存分配系統由待查詢的空閑內存塊組開始進行查詢,以提供能滿足內存需求的可用空閑內存塊,并修改相應的內存塊的索引記錄。例如,應用程序系統L21需要包含3個空閑頁面的內存塊,所述內存分配系統基于該應用程序系統L21的內存需求確定第2組空閑內存塊組為待查詢的空閑內存塊組,則由第2組開始查詢是否存在包含3個空閑頁面的內存塊,若存在,則將該包含3個空閑頁面的內存塊直接提供給該應用程序系統L21,并將該包含3個空閑頁面的內存塊相對應的空閑塊索引記錄刪除,接著再添加該包含3個空閑頁面的內存塊相對應的已分配索引記錄。又例如,應用程序系統L22需要包含0.5個空閑頁面的內存塊,所述內存分配系統基于該應用程序系統L22的內存需求確定待查詢的空閑內存塊組為第O組,則由第O組開始查詢,并確定第O組中包含I個空閑頁面的空閑內存塊A21可用,則將該包含I個空閑頁面的空閑內存塊A21直接提供給該應用程序系統L22,并將該空閑內存塊A21相對應的空閑塊索引刪除,接著再添加該內存塊A21相對應的已分配索引記錄。再例如,應用程序系統L23需要包含7個空閑頁面的內存塊,所述內存分配系統確定第3組空閑內存塊組為待查詢的空閑內存塊組,則由第3組開始查詢,并確定第3組中已無任何可用的空閑內存塊,則所述內存分配系統繼續(xù)在下一組(例如為第4組)中進行查詢,并確定第4組中包含12個空閑頁面的空閑內存塊A22可用,則將該空閑內存塊A22拆分為包含7個空閑頁面的第一伙伴內存塊A221及包含5個空閑頁面的第二伙伴內存塊A222,并將第一伙伴內存塊A221提供給應用程序系統L23使用,同時基于第二伙伴內存塊A222包含5個空閑頁面來確定該第二伙伴內存塊A222屬于第3組空閑內存塊組,接著再基于所述第一伙伴內存塊A221的相關信息來建立內存塊A221相對應的已分配索引記錄、基于第二伙伴內存塊A222的相關信息在第3組中建立新的空閑內存塊索引記錄,并刪除該可用空閑內存塊A22相對應的空閑塊索引記錄。其中,伙伴內存塊的相關信息包括與伙伴內存塊相關聯的信息,優(yōu)選地,包括但不限于:伙伴內存塊自身包含的空閑頁面數量、起始地址、以及對應的伙伴內存塊所屬的空閑內存塊組與起始地址等。例如,在前述第一伙伴內存塊A221的索引記錄中,記錄有第一伙伴內存塊A221已被分配、其包含的頁面數量、起始地址、以及對應的伙伴內存塊A222所屬的空閑內存塊組與起始地址;在第二伙伴內存塊A222的索引記錄中,記錄有第二伙伴內存塊A222的包含的頁面數量、起始地址、以及對應的伙伴內存塊A221所屬的空閑內存塊組與起始地址。請參見圖3,其為回收內存塊的流程圖。在步驟S31中,所述內存分配系統基于待回收內存塊的索引記錄來確定是否存在伙伴內存塊。接著,在步驟S32中,若存在伙伴內存塊,則所述內存分配系統確定該伙伴內存塊是否已分配,若是,則基于該待回收內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加該待回收內存塊相對應的空閑塊索引記錄,并刪除該待回收內存塊相對應的已分配索引記錄;若否,則將該待回收內存塊與伙伴內存塊合并,并基于該合并后的內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加合并后的內存塊相對應的空閑塊索引記錄,并刪除待回收內存塊相對應的已分配索弓I記錄以及該伙伴內存塊相對應的空閑塊索引記錄。例如,所述內存分配系統基于待回收內存塊A31的索引記錄確定不存在伙伴內存塊,則基于待回收內存塊A31包含18個頁面確定其屬于第5組,則在第5組的空閑內存塊記錄中增加內存塊A31相對應的空閑塊索引記錄,并刪除該待回收內存塊A31相對應的已分配索引記錄。又例如,所述內存分配系統基于待回收內存塊A32的索引記錄確定存在伙伴內存塊A33。伙伴內存塊A33屬于第2組,則所述內存分配系統在第2組的內存塊索引記錄中查詢確定伙伴內存塊A33已分配,則所述內存分配系統基于待回收內存塊A32包含2個頁面確定其屬于第I組,則在第I組的空閑內存塊記錄中增加內存塊A32相對應的空閑塊索引記錄,并刪除該待回收內存塊A32相對應的已分配索引記錄。再例如,所述內存分配系統基于待回收內存塊A34的索引記錄確定存在伙伴內存塊A35,伙伴內存塊A35屬于第5組,則所述內存分配系統在第5組的內存塊索引記錄中查詢確定伙伴內存塊A35未被分配,則所述內存分配系統將待回收內存塊A34與伙伴內存塊A35合并形成合并內存塊A36,并基于該內存塊合并內存塊A36包含68個頁面確定其屬于第7組,則在第7組的空閑內存塊記錄中增加合并內存塊A36相對應的空閑塊索引記錄,并刪除該內存塊A34相對應的已分配索引記錄以及伙伴內存塊A35相對應的空閑塊索引記錄。如圖4所示,本發(fā)明提供一種內存分配系統。其中,該內存分配系統I至少包括:分組模塊11。
所述分組模塊11將包含I個空閑頁面的各內存塊歸為一組空閑內存塊組、包含2個空閑頁面的各內存塊歸為一組空閑內存塊組、包含空閑頁面數量大于等于2H+1且小于等于21的各內存塊歸為一組空閑內存塊組,i為大于或等于2的整數;基于空閑內存塊組內各個空閑塊的相關信息建立相應的空閑塊索引記錄,以便查詢。其中,所述空閑內存塊的相關信息包括與空閑內存塊相關聯的信息,優(yōu)選地,包括但不限于:空閑內存塊包含的空閑頁面數量及起始地址等。例如,所述分組模塊11將包含I個空閑頁面的各內存塊歸為第O組、包含2個空閑頁面的各內存塊歸為第I組、包含3或4個空閑頁面的各內存塊歸為第2組、……包含2^+1=257,258,……或29=512個空閑頁面的各內存塊歸為第9組;并基于第O組包含的各內存塊各自包含的空閑頁面數量及起始地址來建立第O組的空閑內存塊索引記錄、基于第I組包含的各內存塊各自包含的空閑頁面數量及起始地址來建立第I組的空閑內存塊索引記錄、……基于第9組包含的各內存塊各自包含的空閑頁面數量及起始地址來建立第9組的空閑內存塊索引記錄。優(yōu)選地,所述分組模塊11將每一組空閑內存塊組的空閑內存塊索引記錄依照各自記錄的空閑內存塊的空閑頁面數量以升序方式排列。例如,一組空閑內存塊組中,包含空閑內存塊A11、A12、A13、A14,其中,空閑內存塊All包含5個空閑頁面,空閑內存塊A12包含7個空閑頁面,空閑內存塊A13包含8個空閑頁面,空閑內存塊A14包含6 個空閑頁面,則所述分組模塊11將空閑內存塊All的索引記錄XI1、空閑內存塊A12的索引記錄X12空閑內存塊A13的索引記錄X13、空閑內存塊A14的索引記錄X14按如下升序順序排列:Xll ;X14 ;Xl2 ;Xl 3。請參見圖5,所述內存分配系統I還包括:確定模塊12及提供模塊13。所述確定模塊12基于內存需求來確定待查詢的空閑內存塊組。例如,應用程序系統Lll需要包含8個空閑頁面的內存塊,則所述確定模塊12基于該內存需求確定包含8個空閑頁面的內存塊屬于第3組,則將第3組空閑內存塊組作為待查詢的空閑內存塊組。接著,所述提供模塊13由待查詢的空閑內存塊組開始進行查詢,以提供能滿足內存需求的可用空閑內存塊,并修改相應的內存塊的索引記錄。例如,應用程序系統L21需要包含3個空閑頁面的內存塊,所述確定模塊12基于該應用程序系統L21的內存需求確定第2組空閑內存塊組為待查詢的空閑內存塊組,則提供模塊13由第2組開始查詢是否存在包含3個空閑頁面的內存塊,若存在,則將該包含3個空閑頁面的內存塊直接提供給該應用程序系統L21,分組模塊11將該包含3個空閑頁面的內存塊相對應的空閑塊索引記刪除,接著再添加該內存塊相對應的已分配索引記錄。又例如,應用程序系統L22需要包含0.5個空閑頁面的內存塊,所述確定模塊12基于該應用程序系統L22的內存需求確定待查詢的空閑內存塊組為第O組,則提供模塊13由第O組開始查詢,并確定第O組中包含I個空閑頁面的空閑內存塊A21可用,則將該包含I個空閑頁面的空閑內存塊A21直接提供給該應用程序系統L22,分組模塊11將該空閑內存塊A21的相對應的空閑塊索引記錄刪除,接著再添加該內存塊相對應的已分配索引記錄。再例如,應用程序系統L23需要包含7個空閑頁面的內存塊,所述確定模塊12確定第3組空閑內存塊組為待查詢的空閑內存塊組,則提供模塊13由第3組開始查詢,并確定第3組中已無任何可用的空閑內存塊,則所述提供模塊13繼續(xù)在下一組(例如為第4組)中進行查詢,并確定第4組中包含12個空閑頁面的空閑內存塊A22可用,則將該空閑內存塊A22拆分為包含7個空閑頁面的第一伙伴內存塊A221及包含5個空閑頁面的第二伙伴內存塊A222,并將第一伙伴內存塊A221提供給應用程序系統L23使用,同時分組模塊11基于第二伙伴內存塊A222包含5個空閑頁面來確定該第二伙伴內存塊A222屬于第3組空閑內存塊組,接著分組模塊11再基于所述第一伙伴內存塊A221的相關信息建立相對應的已分配索引記錄、基于第二伙伴內存塊A222的相關信息在第3組中建立新的空閑內存塊索引記錄,并刪除可用空閑內存塊A22相對應的空閑塊索引記錄。其中,伙伴內存塊的相關信息包括與伙伴內存塊相關聯的信息,優(yōu)選地,包括但不限于:伙伴內存塊自身包含的空閑頁面數量、起始地址、以及對應的伙伴內存塊所屬的空閑內存塊組與起始地址等。例如,在前述第一伙伴內存塊A221的索引記錄中,記錄有第一伙伴內存塊A221已分配、其包含的頁面數量、起始地址、以及對應的伙伴內存塊A222所屬的空閑內存塊組與起始地址;在第二伙伴內存塊A222的索引記錄中,記錄有第二伙伴內存塊A222的包含的頁面數量、起始地址、以及對應的伙伴內存塊A221所屬的空閑內存塊組與起始地址。請參見圖6,所述內存分配系統I還包括:回收模塊14。所述回收模塊14基于待回收內存塊的索引記錄來確定是否存在伙伴內存塊。接著,若存在伙伴內存塊,則所述回收模塊14確定該伙伴內存塊是否已被分配,若是,則分組模塊11基于該待回收內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加該待回收內存塊相對應的空閑塊索引記錄,并刪除該待回收內存塊相對應的已分配索引記錄;若否,則回收模塊14將該待回收內存塊與伙伴內存塊合并,分組模塊11基于該合并后的內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加合并后的內存塊相對應的空閑塊索引記錄,并刪除待回收內存塊相對應的已分配索弓I記錄以及該伙伴內存塊相對應的空閑塊索引記錄。例如,所述回收模塊14基于待回收內存塊A31的索引記錄確定不存在伙伴內存塊,則分組模塊11基于待回收內存塊A31包含18個頁面確定其屬于第5組,則在第5組的空閑內存塊記錄中增加內存塊A31相對應的空閑塊索引記錄,并刪除該待回收內存塊A31相對應的已分配索引記錄。又例如,所述回收模塊14基于待回收內存塊A32的索引記錄確定存在伙伴內存塊A33、伙伴內存塊A33屬于第2組,則所述回收模塊14在第2組的內存塊索引記錄中查詢確定伙伴內存塊A33已被分配,則所述分組模塊11基于待回收內存塊A32包含2個頁面確定其屬于第I組,則在第I組的空閑內存塊記錄中增加內存塊A32相對應的空閑塊索引記錄,并刪除該待回收內存塊A32相對應的已分配索引記錄。再例如,所述回收模塊14基于待回收內存塊A34的索引記錄確定存在伙伴內存塊A35、伙伴內存塊A35屬于第5組,則所述回收模塊14進一步在第5組的內存塊索引記錄中查詢確定伙伴內存塊A35未被分配,則所述回收模塊15再將待回收內存塊A34與伙伴內存塊A35合并形成合并內存塊A36,分組模塊11基于該內存塊合并內存塊A36包含68個頁面確定其屬于第7組,則在第7組的空閑內存塊記錄中增加合并內存塊A36相對應的空閑塊索引記錄,并刪除該內存塊A34相對應的已分配索引記錄以及伙伴內存塊A35相對應的空閑塊索引記錄。綜上所述,本發(fā)明的內存分配方法及系統以頁面為管理單位,將包含不同數量頁面,尤其是包含非2的冪次方個頁面的空閑內存塊分組,由此即便面對需要非2的冪次方個頁面的內存需求,也能提供包含非2的冪次方個頁面的空閑內存塊,以滿足需求,極大提高內存使用效率。所以,本發(fā)明有效克服了現有技術中的種種缺點而具高度產業(yè)利用價值。上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾或改變。因此,舉凡所屬技術領域中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術思想下所完成的一切等效修飾或改變,仍應由本發(fā)明的權利要求所涵蓋。
權利要求
1.一種內存分配方法,其特征在于,所述內存分配方法至少包括: -將包含I個空閑頁面的各內存塊歸為一組空閑內存塊組、包含2個空閑頁面的各內存塊歸為一組空閑內存塊組、包含空閑頁面數量大于等于2H+1且小于等于21的各內存塊歸為一組空閑內存塊組,i為大于或等于2的整數,并基于空閑內存塊組內各個空閑塊的相關信息建立相應的空閑塊索引記錄,以便查詢。
2.根據權利要求1所述的內存分配方法,其特征在于還包括步驟: -基于內存需求來確定待查詢的空閑內存塊組; -由待查詢的空閑內存塊組開始進行查詢,以提供能滿足內存需求的可用空閑內存塊, 并修改可用空閑內存塊的索引記錄。
3.根據權利要求2所述的內存分配方法,其特征在于: -當該可用空閑內存塊的存儲容量超過所述內存需求時,則將該可用空閑內存塊拆分為滿足所述內存需求的第一伙伴內存塊與第二伙伴內存塊,再基于第二伙伴內存塊包含的空閑頁面數量來確定該第二伙伴內存塊所屬的空閑內存塊組,并基于所述第一伙伴內存塊的相關信息來建立該內存塊相對應的已分配索引記錄、基于第二伙伴內存塊的相關信息來建立新的空閑內存塊索引記錄,并刪除該可用空閑內存塊相對應的空閑塊索引記錄。
4.根據權利要求2所述的內存分配方法,其特征在于: -當該可用空閑內存塊的存儲容量等于所述內存需求時,提供該可用空閑內存塊以滿足所述內存需求,并將該可用空閑內存塊相對應的空閑塊索引記錄刪除,并添加該內存塊相對應的已分配索引記錄。
5.根據權利要求2所述的內存分配方法,其特征在于: -當該可用空閑內存塊僅包含一個空閑頁面時,若其存儲容量超過所述內存需求時,直接提供該可用空閑內存塊以滿足所述內存需求,并將該可用空閑內存塊相對應的空閑塊索引記錄刪除,接著再添加該內存塊相對應的已分配索引記錄。
6.根據權利要求1所述的內存分配方法,其特征在于還包括步驟: -基于待回收內存塊的索引記錄來確定是否存在伙伴內存塊; -若存在伙伴內存塊,則確定該伙伴內存塊是否已分配,若是,則基于該待回收內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加該待回收內存塊相對應的空閑塊索引記錄,并刪除該待回收內存塊相對應的已分配索引記錄;若否,則將該待回收內存塊與伙伴內存塊合并,并基于該合并后的內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加合并后的內存塊相對應的空閑塊索引記錄,并刪除待回收內存塊相對應的已分配索引記錄以及該伙伴內存塊相對應的空閑塊索引記錄。
7.根據權利要求1所述的內存分配方法,其特征在于:每一組空閑內存塊組的空閑內存塊索引記錄依照各自記錄的空閑內存塊包含的空閑頁面數量以升序方式排列。
8.根據權利要求1所述的內存分配方法,其特征在于:2< i < 9。
9.一種內存分配系統,其特征在于,所述內存分配系統至少包括: 分組模塊,用于將包含I個空閑頁面的各內存塊歸為一組空閑內存塊組、包含2個空閑頁面的各內存塊歸為一組空閑內存塊組、包含空閑頁面數量大于等于2H+1且小于等于21的各內存塊歸為一組空閑內存塊組,i為大于或等于2的整數;并基于空閑內存塊組內各個空閑塊的相關信息建立相應的空閑塊索引記錄,以便查詢。
10.根據權利要求9所述的內存分配系統,其特征在于還包括: 確定模塊,用于基于內存需求來確定待查詢的空閑內存塊組; 提供模塊,用于由待查詢的空閑內存塊組開始進行查詢,以提供能滿足內存需求的可用空閑內存塊。
11.根據權利要求10所述的內存分配系統,其特征在于: 當該可用空閑內存塊的存儲容量超過所述內存需求時,則提供模塊將該可用空閑內存塊拆分為滿足所述內存需求的第一伙伴內存塊與第二伙伴內存塊,分組模塊再基于第二伙伴內存塊包含的空閑頁面數量來確定該第二伙伴內存塊所屬的空閑內存塊組,并基于所述第一伙伴內存塊的相關信息來建立該內存塊相對應的已分配索引記錄、基于第二伙伴內存塊的相關信息來建立新的空閑內存塊索引記錄,并刪除該可用空閑內存塊相對應的空閑塊索引記錄。
12.根據權利要求10所述的內存分配系統,其特征在于: 當該可用空閑內存塊的存儲容量等于所述內存需求時,提供模塊提供該可用空閑內存塊以滿足所述內存需求,分組模塊將該可用空閑內存塊相對應的空閑塊的索引記錄刪除,并添加該內存塊相對應的已分配索引記錄。
13.根據權利要求10所述的內存分配系統,其特征在于: 當該可用空閑內存塊僅包含一個空閑頁面時,若其存儲容量超過所述內存需求時,提供模塊直接提供該可用空閑內存塊以滿足所述內存需求,分組模塊將該可用空閑內存塊相對應的空閑塊索引記錄刪除,并添加該內存塊相對應的已分配索引記錄。
14.根據權利要求9所述的內存`分配系統,其特征在于還包括: 回收模塊,用于基于待回收內存塊的索引記錄來確定是否存在伙伴內存塊; 若存在伙伴內存塊,則回收模塊確定該伙伴內存塊是否已被分配,若是,則分組模塊基于該待回收內存塊包含的頁面數量來確定其所屬的空閑內存塊組,在相應的空閑內存塊組中增加該待回收內存塊的相對應的空閑塊索引記錄,并刪除該待回收內存塊相對應的已分配索引記錄;若否,則回收模塊將該待回收內存塊與伙伴內存塊合并,分組模塊基于該合并后的內存塊包含的頁面數量來確定其所屬的空閑內存塊組,并在相應的空閑內存塊組中增加合并后的內存塊相對應的空閑塊索引記錄,并刪除待回收內存塊相對應的已分配的索引記錄以及該伙伴內存塊相對應的空閑塊索引記錄。
15.根據權利要求9所述的內存分配系統,其特征在于:每一組空閑內存塊組的空閑內存塊索引記錄依照各自記錄的空閑內存塊包含的空閑頁面數量以升序方式排列。
16.根據權利要求9所述的內存分配系統,其特征在于:2< i < 9。
全文摘要
本發(fā)明提供一種內存分配方法及系統。根據本發(fā)明的方法,將包含1個空閑頁面的各內存塊歸為一組空閑內存塊組、包含2個空閑頁面的各內存塊歸為一組空閑內存塊組、包含空閑頁面數量大于等于2i-1+1且小于等于2i的各內存塊歸為一組空閑內存塊組,i為大于或等于2的整數,并基于空閑內存塊組內各個空閑塊的相關信息建立相應的空閑塊索引記錄,以便查詢,由此能提供包含非2的冪次方個頁面的空閑內存塊,以滿足需求,極大提高內存使用效率。
文檔編號G06F12/02GK103106147SQ201310074180
公開日2013年5月15日 申請日期2013年3月8日 優(yōu)先權日2013年3月8日
發(fā)明者李順芬, 陳小剛, 周密, 宋志棠 申請人:中國科學院上海微系統與信息技術研究所