亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

提高系統(tǒng)內(nèi)存利用率的方法

文檔序號:9597717閱讀:3321來源:國知局
提高系統(tǒng)內(nèi)存利用率的方法
【技術領域】
[0001]本發(fā)明涉及系統(tǒng)內(nèi)存領域,尤其涉及一種提高系統(tǒng)內(nèi)存利用率的方法。
【背景技術】
[0002]堆棧是內(nèi)存的一個工作區(qū),會隨著程序運行的需要而增長或縮小,隨著計算機水平的不斷提高,軟件規(guī)模越來越龐大,函數(shù)嵌套調(diào)用的層次越來越深,導致堆??臻g的波動幅度增大。如果沒有啟用Linux交換技術,堆棧空間中沒有使用的內(nèi)存就被浪費了。很多嵌入式設備使用Linux系統(tǒng),而且沒有啟用Linux交換技術,堆??臻g中沒有使用的內(nèi)存就被浪費了,系統(tǒng)中的進程數(shù)量較多的時候,浪費的內(nèi)存就更多了。

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

[0003]針對現(xiàn)有技術中內(nèi)存利用率較低等問題,本發(fā)明提供了一種提高系統(tǒng)內(nèi)存利用率的方法,及時釋放堆棧空間中沒有使用的內(nèi)存,提高Linux系統(tǒng)內(nèi)存利用率。
[0004]本發(fā)明采用如下技術方案:
[0005]—種提高系統(tǒng)內(nèi)存利用率的方法,應用于Linux系統(tǒng)中,所述方法包括:
[0006]步驟S1,緩存釋放線程調(diào)用堆棧收縮函數(shù);
[0007]步驟S2,創(chuàng)建新進程后,在所述新進程的數(shù)據(jù)結(jié)構中添加一定時器,并將所述定時器的到期函數(shù)設置為堆棧收縮函數(shù);
[0008]步驟S3,當所述Linux系統(tǒng)的內(nèi)存不足時,所述定時器開始計時;
[0009]步驟S4,在所述定時器計時期間,所述Linux系統(tǒng)中的所有用戶進程調(diào)用所述堆棧收縮函數(shù),以釋放所有所述用戶進程堆棧中的內(nèi)存;
[0010]步驟S5,在所述定時器到期時,所述Linux系統(tǒng)的CPU執(zhí)行所述堆棧收縮函數(shù),以釋放所述新進程堆棧中的內(nèi)存;其中,
[0011]所述步驟S4中的所述所有用戶進程不包括所述新進程。
[0012]優(yōu)選的,所述方法中:
[0013]所述定時器的定時時間為1-10秒。
[0014]優(yōu)選的,所述步驟S1具體包括:
[0015]步驟S11,在所述堆棧收縮函數(shù)中,增加對所述所有用戶線程調(diào)用所述堆棧收縮函數(shù)的代碼。
[0016]優(yōu)選的,所述步驟S2具體包括:
[0017]步驟S21,在Linux進程數(shù)據(jù)結(jié)構中增加堆桟時間域,Linux內(nèi)核創(chuàng)建所述新進程時,在所述堆棧時間域上添加所述定時器。
[0018]優(yōu)選的,所述步驟S2具體包括:
[0019]步驟S22:通過add timer函數(shù)添加所述定時器。
[0020]優(yōu)選的,所述方法還包括:
[0021]步驟S6:于所述步驟S5之后,所述緩存釋放線程運行后,對所述所有用戶進程的用戶態(tài)堆棧內(nèi)存情況進行檢查并調(diào)用所述堆棧收縮函數(shù),以釋放所述用戶態(tài)堆棧內(nèi)存。
[0022]優(yōu)選的,所述方法還包括:
[0023]步驟S7:于所述步驟S6之后,當堆棧指針連續(xù)N次向上穿過頁邊界地址時,所述CPU中斷并執(zhí)行所述堆棧收縮函數(shù),以釋放當前運行進程堆棧的內(nèi)存;其中,
[0024]所述N為預設值,同時所述N為正整數(shù)并且大于1。
[0025]優(yōu)選的,所述步驟S7具體包括:
[0026]步驟S71:在系統(tǒng)初始化函數(shù)trap init中,通過set trap gate函數(shù)設置所述堆棧收縮函數(shù)的封裝函數(shù)為中斷處理函數(shù)。
[0027]本發(fā)明的有益效果是:
[0028]本發(fā)明在進程數(shù)據(jù)結(jié)構中添加堆棧檢查定時器,同時在釋放堆棧中被浪費內(nèi)存的堆棧收縮函數(shù)(stack shrink),即可以應對軟件規(guī)模的增長、函數(shù)嵌套層次的加深而導致堆??臻g波動幅度增大,堆棧收縮技術也能及時釋放堆棧中被浪費的內(nèi)存,提高Linux系統(tǒng)內(nèi)存利用率。
【附圖說明】
[0029]圖1為本發(fā)明提尚系統(tǒng)內(nèi)存利用率實施例一的方法不意圖;
[0030]圖2為本發(fā)明提高系統(tǒng)內(nèi)存利用率的線程收縮技術實施例二的原理圖。
【具體實施方式】
[0031]需要說明的是,在不沖突的情況下,下述技術方案,技術特征之間可以相互組合。
[0032]下面結(jié)合附圖對本發(fā)明的【具體實施方式】作進一步的說明:
[0033]實施例一
[0034]圖1為本發(fā)明提尚系統(tǒng)內(nèi)存利用率實施例一的方法不意圖,如圖1所不,本實施例為一種提高系統(tǒng)內(nèi)存利用率的方法,涉及Linux進程用戶態(tài)堆棧收縮技術,應用于Linux系統(tǒng)中,方法包括:
[0035]步驟S1:緩存釋放線程調(diào)用堆棧收縮函數(shù);
[0036]步驟S2:創(chuàng)建新進程,在新進程的數(shù)據(jù)結(jié)構中添加一定時器,定時器的到期函數(shù)設置為堆棧收縮函數(shù);
[0037]步驟S3:當內(nèi)存不足時,Linux系統(tǒng)中的所有用戶進程調(diào)用收縮函數(shù),以釋放所有用戶進程堆棧中的內(nèi)存;
[0038]步驟S4:定時器到期,CPU執(zhí)行堆棧收縮函數(shù),以釋放新進程堆棧中的內(nèi)存;其中,
[0039]步驟S3中的所有用戶進程不包括新進程。
[0040]本實施例中,在Linux系統(tǒng)的緩存釋放線程中,增加對堆棧收縮函數(shù)的調(diào)用,在
Linux創(chuàng)建進程時,在進程數(shù)據(jù)結(jié)構中添加一個定時器,定時1秒,也可以是2s, 3s,......或者是10秒,此時的定時時間可以根據(jù)具體的情況進行設定,定時器到期函數(shù)設置為堆棧收縮函數(shù),Linux內(nèi)核分配內(nèi)存,發(fā)現(xiàn)內(nèi)存緊缺,對系統(tǒng)中所有用戶進程調(diào)用堆棧收縮函數(shù),釋放所有進程堆棧中浪費的內(nèi)存,這一步可以同步地釋放被堆棧浪費的內(nèi)存,進程定時器到期,CPU執(zhí)行堆棧收縮函數(shù),釋放該進程堆棧中浪費的內(nèi)存。
[0041]本發(fā)明一個較佳的實施例中,緩存釋放線程開始運行,對所有進程的用戶態(tài)堆棧內(nèi)存浪費情況作檢查,調(diào)用堆棧收縮函數(shù),釋放浪費的內(nèi)存。
[0042]本發(fā)明一個較佳的實施例中,在硬件支持堆棧收縮檢查的情況下,將堆棧收縮函數(shù)設置為中斷處理函數(shù),當堆棧指針連續(xù)數(shù)次向上穿過頁邊界地址時,中斷CPU,通知CPU執(zhí)行堆棧收縮函數(shù),從而釋放當前運行進程堆棧浪費的內(nèi)存。
[0043]循環(huán)釋放進程堆棧中被浪費的內(nèi)存,堆棧收縮函數(shù)的偽代碼如下所示:
[0044]Void stack_shrink (struct vm_area_struct*vma_stack)
[0045]{
[0046]Void*esp ;/*esp 堆桟指針 */
[0047]Void*tmp ;/* 用于循環(huán) */
[0048]/*vma_stack->vm_start是堆桟空間的結(jié)束位置,
[0049]Esp是堆棧實際使用的堆棧空間的位置,
[0050]這兩個位置之間的空隙就是被浪費的內(nèi)存*/
[0051]For (tmp = es
當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1