国产精品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)的制作方法

      文檔序號:9646523閱讀:875來源:國知局
      一種內(nèi)存塊合并方法與系統(tǒng)的制作方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及Linux系統(tǒng)內(nèi)存管理領(lǐng)域,特別是涉及一種內(nèi)存塊合并方法與系統(tǒng)。
      【背景技術(shù)】
      [0002]現(xiàn)在服務(wù)器或PC機(jī)在運(yùn)行一段時(shí)間后,都會變得運(yùn)行緩慢,卡頓現(xiàn)象時(shí)常出現(xiàn)。這是由于系統(tǒng)給進(jìn)程分配運(yùn)行內(nèi)存的時(shí)候效率降低所致。而導(dǎo)致內(nèi)存分配效率降低的原因則是因?yàn)殚L時(shí)間的運(yùn)行后,系統(tǒng)內(nèi)的可用連續(xù)大內(nèi)存已經(jīng)變得極少了,基本上都是被分隔開的小內(nèi)存塊,當(dāng)進(jìn)程申請內(nèi)存的時(shí)候,系統(tǒng)不得不到處拼湊這些小內(nèi)存塊以滿足進(jìn)程的正常運(yùn)行。
      [0003]原有的內(nèi)存塊合并方法為伙伴算法,兼?zhèn)湟韵聴l件的內(nèi)存塊才能相合并:(1)兩個(gè)內(nèi)存塊連續(xù);(2)兩個(gè)內(nèi)存塊大小相等;合并后再繼續(xù)迭代以上條件,直到?jīng)]有符合要求的為至。這樣的合并方法,如果出現(xiàn)lk 2k lk 4k的情況,伙伴算法將無法合并此內(nèi)存塊,合并效率較低。

      【發(fā)明內(nèi)容】

      [0004]有鑒于此,本發(fā)明的主要目的在于提供一種內(nèi)存合并方法與系統(tǒng),可以高效地合并內(nèi)存碎片。
      [0005]為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種內(nèi)存塊合并方法,包括:
      [0006]步驟A:掃描內(nèi)存大小小于預(yù)設(shè)內(nèi)存閾值的內(nèi)存塊,將內(nèi)存小于或等于預(yù)設(shè)碎片內(nèi)存閾值的內(nèi)存塊確定為內(nèi)存碎片;
      [0007]步驟B:獲取所述內(nèi)存碎片的地址;
      [0008]步驟C:以所述內(nèi)存碎片的地址為起點(diǎn),判斷連續(xù)地址上的空閑塊的內(nèi)存之和是否可達(dá)到預(yù)設(shè)的合并內(nèi)存閾值,如果是,則將內(nèi)存之和達(dá)到預(yù)設(shè)的合并內(nèi)存閾值的空閑塊合并,得到大內(nèi)存塊,進(jìn)入步驟E,否則進(jìn)入步驟D ;
      [0009]步驟D:將當(dāng)前合并內(nèi)存閾值一半的內(nèi)存值,視為新的合并內(nèi)存閾值,判斷當(dāng)前合并內(nèi)存閾值是否大于所述內(nèi)存碎片的內(nèi)存值,如果否,則進(jìn)入步驟E,如果是,則判斷連續(xù)地址上的空閑塊的內(nèi)存之和是否可達(dá)到當(dāng)前合并內(nèi)存閾值,如果是,則將內(nèi)存之和達(dá)到當(dāng)前合并內(nèi)存閾值的空閑塊合并,得到大內(nèi)存塊,進(jìn)入步驟E,否則返回步驟D;
      [0010]步驟E:將全局中內(nèi)存大小且相鄰的內(nèi)存塊進(jìn)行合并。
      [0011]優(yōu)選地,所述預(yù)設(shè)碎片內(nèi)存閾值為128k?256k。
      [0012]優(yōu)選地,所述預(yù)設(shè)的合并內(nèi)存閾值為1024k。
      [0013]優(yōu)選地,判斷連續(xù)地址上的空閑塊的內(nèi)存之和是否可達(dá)到預(yù)設(shè)的合并內(nèi)存閾值之前還包括:
      [0014]確定以所述內(nèi)存碎片的地址為起點(diǎn)的連續(xù)地址上預(yù)設(shè)數(shù)量的空閑塊的內(nèi)存大小。
      [0015]本發(fā)明還提供了一種內(nèi)存塊合并系統(tǒng),包括:內(nèi)存碎片確定模塊,碎片地址獲取模塊,第一合并模塊,第二合并模塊和伙伴合并模塊;
      [0016]所述內(nèi)存碎片確定模塊用于掃描內(nèi)存大小小于預(yù)設(shè)內(nèi)存閾值的內(nèi)存塊,將內(nèi)存小于或等于預(yù)設(shè)碎片內(nèi)存閾值的內(nèi)存塊確定為內(nèi)存碎片;
      [0017]所述碎片地址獲取模塊用于獲取所述內(nèi)存碎片的地址;
      [0018]所述第一合并模塊用于以所述內(nèi)存碎片的地址為起點(diǎn),判斷連續(xù)地址上的空閑塊的內(nèi)存之和是否可達(dá)到預(yù)設(shè)的合并內(nèi)存閾值,如果是,則將內(nèi)存之和達(dá)到預(yù)設(shè)的合并內(nèi)存閾值的空閑塊合并,得到大內(nèi)存塊,所述伙伴合并模塊執(zhí)行操作,否則所述第二合并模塊執(zhí)行操作;
      [0019]所述第二合并模塊用于將當(dāng)前合并內(nèi)存閾值一半的內(nèi)存值,視為新的合并內(nèi)存閾值,判斷當(dāng)前合并內(nèi)存閾值是否大于所述內(nèi)存碎片的內(nèi)存值,如果否,則所述伙伴合并模塊執(zhí)行操作,如果是,則判斷連續(xù)地址上的空閑塊的內(nèi)存之和是否可達(dá)到當(dāng)前合并內(nèi)存閾值,如果是,則將內(nèi)存之和達(dá)到當(dāng)前合并內(nèi)存閾值的空閑塊合并,得到大內(nèi)存塊,所述伙伴合并模塊執(zhí)行操作,否則所述第二合并模塊執(zhí)行操作;
      [0020]所述伙伴合并模塊用于將全局中內(nèi)存大小且相鄰的內(nèi)存塊進(jìn)行合并。
      [0021]優(yōu)選地,所述預(yù)設(shè)碎片內(nèi)存閾值為128k?256k。
      [0022]優(yōu)選地,所述預(yù)設(shè)的合并內(nèi)存閾值為1024k。
      [0023]優(yōu)選地,所述內(nèi)存塊合并系統(tǒng)還包括:
      [0024]連續(xù)碎片大小確定模塊,用于確定以所述內(nèi)存碎片的地址為起點(diǎn)的連續(xù)地址上預(yù)設(shè)數(shù)量的空閑塊的內(nèi)存大小。
      [0025]應(yīng)用本發(fā)明提供的一種內(nèi)存塊合并方法與系統(tǒng),掃描所有小于一定大小的內(nèi)存塊,并視為內(nèi)存碎片,從首地址開始,找到一個(gè)內(nèi)存碎片后就返回其地址。將返回的內(nèi)存碎片地址作為起點(diǎn),向后查看預(yù)設(shè)數(shù)量個(gè)塊是否都是空閑塊,如果是則合并為一塊,如果不是,則查找預(yù)設(shè)數(shù)量一半的塊是否都是空閑塊,如果是,則合并。以此類推,保證得到盡可能大的內(nèi)存塊以減小內(nèi)存碎片的數(shù)量,最后全局并合并相鄰且大小相同的內(nèi)存塊,可以盡可能地合并內(nèi)存碎片,得到盡可能大的可用空閑塊,提高了碎片合并效率。
      【附圖說明】
      [0026]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
      [0027]圖1為本發(fā)明一種內(nèi)存塊合并方法實(shí)施例的原理示意圖;
      [0028]圖2為本發(fā)明一種內(nèi)存塊合并系統(tǒng)實(shí)施例的結(jié)構(gòu)示意圖。
      【具體實(shí)施方式】
      [0029]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
      [0030]實(shí)施例一:
      [0031]本發(fā)明實(shí)施例提供了一種內(nèi)存塊合并方法,包括:
      [0032]步驟A:掃描內(nèi)存大小小于預(yù)設(shè)內(nèi)存閾值的內(nèi)存塊,將內(nèi)存小于或等于預(yù)設(shè)碎片內(nèi)存閾值的內(nèi)存塊確定為內(nèi)存碎片;
      [0033]如設(shè)定預(yù)設(shè)碎片閾值為1024k,小于1024k且為2的η次方值的內(nèi)存塊視為內(nèi)存碎片。
      [0034]步驟Β:獲取所述內(nèi)存碎片的地址;
      [0035]從首地址開始,找到一個(gè)內(nèi)存碎片后就返回其地址。
      [0036]步驟C:以所述內(nèi)存碎片的地址為起點(diǎn),判斷連續(xù)地址上的空閑塊的內(nèi)存之和是否可達(dá)到預(yù)設(shè)的合并內(nèi)存閾值,如果是,則將內(nèi)存之和達(dá)到預(yù)設(shè)的合并內(nèi)存閾值的空閑塊合并,得到大內(nèi)存塊,進(jìn)入步驟Ε,否則進(jìn)入步驟D ;
      [0037]步驟D:將當(dāng)前合并內(nèi)存閾值一半的內(nèi)存值,視為新的合并內(nèi)存閾值,判斷當(dāng)前合并內(nèi)存閾值是否大于所述內(nèi)存碎片的內(nèi)存值,如果否,則進(jìn)入步驟Ε,如果是,則判斷連續(xù)地址上的空閑塊的內(nèi)存之和是否可達(dá)到當(dāng)前合并內(nèi)存閾值,如果是,則將內(nèi)存之和達(dá)到當(dāng)前合并內(nèi)存閾值的空閑塊合并,得到大內(nèi)存塊,進(jìn)入步驟Ε,否則返回步驟D;
      [0038]如圖1所示,每行的4Μ的數(shù)據(jù)塊為正在使用的內(nèi)存塊,其他為已經(jīng)釋放且可用的空閑塊。第一個(gè)內(nèi)存塊碎片的大小為128k,確定以所述內(nèi)存碎片的地址為起點(diǎn)的連續(xù)地址上預(yù)設(shè)數(shù)量的空閑塊的內(nèi)存大小,然后檢測其連續(xù)地址上的內(nèi)存碎片大小之和是否達(dá)到合并內(nèi)存閾值,如1024k,如圖1中第二行所示,將128k、256k、256k和128k合并為一個(gè)1024k的大內(nèi)存塊;如果這里沒有1024k,則檢測是否能達(dá)到1024k的一半,即512k,如果是,則將內(nèi)存之和達(dá)到預(yù)設(shè)的合并內(nèi)存閾值的空閑塊合并,得到大內(nèi)存塊,否則進(jìn)入步驟E,并以此迭代下去直到大小和第一個(gè)內(nèi)存碎片大小相同為至。
      [0039]步驟E:將全局中內(nèi)存大小且相鄰的內(nèi)存塊進(jìn)行合并。
      [0040]成功合并成大內(nèi)存塊后,再全局檢測相鄰內(nèi)存塊間是
      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1