專利名稱:一種內(nèi)存管理方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,尤其涉及一種內(nèi)存管理方法及其系統(tǒng)。
背景技術(shù):
一個軟件系統(tǒng)中,內(nèi)存大部分是動態(tài)申請的,即在使用的時候申請內(nèi)存,使用之后釋放內(nèi)存給系統(tǒng),以便其他模塊使用。在嵌入式系統(tǒng)中,為了保證系統(tǒng)運行效率,系統(tǒng)中運行的所有模塊使用相同的內(nèi)存空間,也就是整個系統(tǒng)的內(nèi)存統(tǒng)一管理,內(nèi)存可以被任何一個模塊申請使用。這樣,一旦某個模塊代碼的錯誤出現(xiàn)內(nèi)存泄漏,或者受到攻擊,這個模塊可能會將整個系統(tǒng)的內(nèi)存消耗掉,其它模塊申請不到內(nèi)存,引起整個系統(tǒng)運行異常。嵌入系統(tǒng)中,所有模塊共用系統(tǒng)內(nèi)存。每個模塊申請內(nèi)存的時候,帶上模塊的標
識。系統(tǒng)將模塊的標識記錄到系統(tǒng)的內(nèi)存管理信息部分??梢酝ㄟ^查看系統(tǒng)的內(nèi)存管理信息,查看哪些模塊占用的內(nèi)存較多,具體占用了多少。由此可見,目前的內(nèi)存管理機制,對于內(nèi)存只記錄跟蹤情況,只能在出現(xiàn)問題后通過管理信息追查到各模塊所占用的內(nèi)存大小,而沒有對模塊的內(nèi)存分配進行控制的機制。
發(fā)明內(nèi)容
本發(fā)明實施例提供了一種內(nèi)存管理方法及其系統(tǒng),用以實現(xiàn)對應(yīng)用系統(tǒng)中的各模塊進行內(nèi)存分配控制。本發(fā)明實施例提供的內(nèi)存管理方法,包括根據(jù)應(yīng)用系統(tǒng)中的各模塊所需內(nèi)存和重要程度,分別為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù);當接收到模塊申請內(nèi)存的請求時,獲取為所述模塊設(shè)置的內(nèi)存分配控制參數(shù),并根據(jù)獲取到的內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制。本發(fā)明實施例提供的內(nèi)存管理系統(tǒng),包括參數(shù)設(shè)置單元,用于根據(jù)應(yīng)用系統(tǒng)中的各模塊所需內(nèi)存和重要程度,分別為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù);內(nèi)存分配單元,用于當接收到模塊申請內(nèi)存的請求時,獲取為所述模塊設(shè)置的內(nèi)存分配控制參數(shù),并根據(jù)獲取到的內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制。本發(fā)明實施例的上述實施例通過為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù),從而在為模塊分配內(nèi)存時,可根據(jù)為該模塊設(shè)置的內(nèi)存分配控制參數(shù)對該模塊的內(nèi)存分配進行控制,與現(xiàn)有技術(shù)相比,實現(xiàn)了對模塊的內(nèi)存分配控制,而不僅僅是記錄內(nèi)存分配結(jié)
果O
圖I為本發(fā)明實施例提供的內(nèi)存分配流程示意圖;圖2為本發(fā)明實施例提供的內(nèi)存釋放流程示意圖;圖3為本發(fā)明實施例提供的內(nèi)存管理系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式本發(fā)明實施例為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù),使得不會一個模塊出現(xiàn)內(nèi)存泄漏或者受到攻擊時,消耗掉整個應(yīng)用系統(tǒng)的內(nèi)存,引起整個系統(tǒng)崩潰。下面結(jié)合附圖對本發(fā)明實施例進行詳細描述。本實施例中,分別為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù),內(nèi)存分配控制參數(shù)用于對相應(yīng)模塊的內(nèi)存分配控制。內(nèi)存分配控制參數(shù)至少包括相應(yīng)模塊的內(nèi)存使用上限max_mem_size,該參數(shù)可以byte (字節(jié))為單位?!獋€模塊的max_mem_size的取值,可遵循以下原則之一或任意組合
(I) 一個模塊的max_mem_size取值要大于該模塊極端情況下的內(nèi)存使用量最大值。(2)max_mem_size的值可以根據(jù)分析來設(shè)置,比如某個模塊的功能主要是保存數(shù)據(jù),每條數(shù)據(jù)占用內(nèi)存最大IK byte,系統(tǒng)規(guī)格保存IOK條數(shù)據(jù),再考慮到運行過程中的其他內(nèi)存使用,這個模塊的max_mem_size設(shè)為30M比較合適。(3)對于內(nèi)存占用比較多,但是分配不到內(nèi)存不會引起系統(tǒng)異常的模塊,可將該模塊的max_mem_size設(shè)置比較大,或者不做限制。(4)對于分配不到內(nèi)存就會影響整個系統(tǒng),而且可能會占用內(nèi)存較多的模塊,可在maX_mem_Size缺省值的基礎(chǔ)上進行調(diào)整。比如,網(wǎng)絡(luò)設(shè)備中,對于板間通信的模塊,需要將max_mem_size設(shè)置得比缺省值大。在具體實施時,可為各模塊設(shè)置缺省max_mem_size,然后根據(jù)以上原則之一或組合,對缺省設(shè)置的maX_mem_Size進行調(diào)整。也可以根據(jù)實際應(yīng)用過程中收集到的該模塊已申請的內(nèi)存的最大值進行設(shè)置,比如,可以先不限制模塊的maX_mem_Size(即對該模塊可申請的內(nèi)存量不做限制),然后模擬該模塊使用內(nèi)存的極端情況,記錄該模塊內(nèi)存使用量的最大值,然后將該內(nèi)存使用量的最大值乘以一個系數(shù)作為該模塊的maX_mem_Size值?;谝陨蟽?nèi)存分配控制參數(shù)進行內(nèi)存分配控制的操作可由應(yīng)用系統(tǒng)中的內(nèi)存管理系統(tǒng)執(zhí)行。當某個模塊(如模塊I)需要申請內(nèi)存時,模塊I向內(nèi)存管理系統(tǒng)請求申請內(nèi)存;內(nèi)存管理系統(tǒng)獲取為該模塊設(shè)置的max_mem_size,并將該max_mem_size與模塊I當前白勺內(nèi)存使用量 current_mem_size 進 比較,若 current_mem_size > max_mem_size,貝U表明該模塊可用的內(nèi)存已經(jīng)達到上限,此種情況下內(nèi)存管理系統(tǒng)拒絕為該模塊分配內(nèi)存,并可進一步給出相應(yīng)的提示信息,返回分配失敗;若current_mem_size ( max_mem_size,內(nèi)存管理系統(tǒng)為模塊I分配內(nèi)存,進一步的根據(jù)為模塊I分配的內(nèi)存大小,更新該模塊當前的內(nèi)存使用量 current_mem_size。通過以上描述可以看出,當某個模塊受到攻擊或者出現(xiàn)內(nèi)存泄漏的時候,能夠通過max_mem_size對該模塊的內(nèi)存分配進行限制,保證該模塊不會將整個系統(tǒng)的內(nèi)存耗盡,而影響系統(tǒng)其他模塊的正常運行。當懷疑某個模塊對內(nèi)存不足的情況保護不足的時候,能夠?qū)⒃撃K的maX_mem_Size設(shè)置較低,從而很快模擬內(nèi)存不足的情況,還能通過逐個模塊設(shè)置max_mem_size的方式,找出具體哪個模塊有保護不足的情況。在本發(fā)明的另一實施例中,為模塊設(shè)置的內(nèi)存控制參數(shù)中除了 max_mem_size,還可包括系統(tǒng)內(nèi)存高門限global_mem_gate_high,該參數(shù)可以byte為單位,當整個系統(tǒng)內(nèi)存使用量超過global_mem_gate_high的時候,內(nèi)存管理系統(tǒng)將不再為這個模塊分配內(nèi)存?!獋€模塊的global_mem_gate_high的取值,可遵循以下原則根據(jù)該模塊在系統(tǒng)中的重要程度進行設(shè)置,重要程度越高,這個值就越大。具體的,如果某個模塊分配不到內(nèi)存,僅僅是部分功能暫時不可用,這個值可以設(shè)的低一些;如果某個模塊比較重要但內(nèi)存占用不多(比如命令行模塊),則可提高這個參數(shù)值來保證該模塊內(nèi)存分配的高優(yōu)先級;如果分配不到內(nèi)存會影響整個系統(tǒng),而且可能會占用內(nèi)存較多,則可將這個參數(shù)值設(shè)置得比缺省值大;如果某個模塊分配不到內(nèi)存會引起整個系統(tǒng)癱瘓,則可不對這個值進行限制。模塊I申請內(nèi)存時,內(nèi)存管理系統(tǒng)獲取到模塊I的current_mem_size和global_mem_gate_high 之后,若判斷 current_mem_size > max_mem_size,或者 global_current_mem_size >系統(tǒng)當前內(nèi)存使用量global_mem_gate_high,則拒絕為模塊I分配內(nèi)存;否則,為模塊I分配內(nèi)存。 通過以上描述可以看出,在根據(jù)max_mem_size進行內(nèi)存分配控制的基礎(chǔ)上,進一步根據(jù)global_mem_gate_high進行內(nèi)存分配控制,使得內(nèi)存分配更為合理,并進一步降低內(nèi)存泄露對應(yīng)用系統(tǒng)的影響。在本發(fā)明的另一實施例中,為模塊設(shè)置的內(nèi)存控制參數(shù)中除了 max_mem_size、global_mem_gate_high,還可包括系統(tǒng)內(nèi)存低門限global_mem_gate_low,該參數(shù)可以byte為單位,當整個系統(tǒng)內(nèi)存達到過global_mem_gate_high限后,系統(tǒng)內(nèi)存降到低于global_mem_gate_low之后,才繼續(xù)為該模塊分配內(nèi)存。此外,內(nèi)存管理系統(tǒng)還為該模塊設(shè)置一變量over_high_gate,用來記錄該模塊的內(nèi)存分配狀態(tài),例如,當系統(tǒng)使用的內(nèi)存超過global_mem_gate_high的時候,且該模塊試圖申請過內(nèi)存,將該變量置位(如將該變量賦值為I)。—個模塊的global_mem_gate_low的取值,可遵循以下原則根據(jù)該模塊在系統(tǒng)中的重要程度進行設(shè)置,重要程度越高,這個值就越大,而且global_mem_gate_high ^ global_mem_gate_low。具體的,如果某個模塊分配不到內(nèi)存,僅僅是部分功能暫時不可用,這個值可以設(shè)的低一些;如果某個模塊比較重要但內(nèi)存占用不多(比如命令行模塊),則可提高這個參數(shù)值來保證該模塊內(nèi)存分配的高優(yōu)先級;如果分配不到內(nèi)存會影響整個系統(tǒng),而且可能會占用內(nèi)存較多,則可將這個參數(shù)值設(shè)置得比缺省值大;如果某個模塊分配不到內(nèi)存會引起整個系統(tǒng)癱瘓,則需要不對這個值進行限制。模塊I申請內(nèi)存時,內(nèi)存管理系統(tǒng)獲取到模塊I的current_mem_size、global_mem_gate_high和global_mem_gate_low之后,若判斷滿足以下條件之一,則拒絕為模塊I分配內(nèi)存current—mem—size > max—mem—size ;global_current—mem—size > global—mem—gate—high ;over—high_gat = I 且 global_current—mem—size > global—mem—gate_low ;若判斷滿足以下條件,則為模塊I分配內(nèi)存current—mem—size ^ max—mem—size ;global_current—mem—size ^ global—mem—gate—high ;over—high_gat = 0 或 global_current—mem—size ^ global—mem—gate_low。通過以上描述可以看出,當內(nèi)存消耗較多的時候,某個模塊受到攻擊,可以通過global_mem_gate_low 和 global_mem_gate_high 的差值減少系統(tǒng)內(nèi)存的壓力。下面結(jié)合本發(fā)明的優(yōu)選實施例,進一步對本發(fā)明進行描述。在本發(fā)明的優(yōu)選實施例中,為應(yīng)用系統(tǒng)中的各模塊進行如下定義struct tag_module_attr{ unsigned long module_id ;// 定義模塊的唯一標識 module_idunsigned long current_mem_size ;//定義用于記錄該模塊當前使用的內(nèi)存大小的變量 current_mem_sizeunsigned long over_high_gate ;//定義用于記錄該模塊的內(nèi)存分配狀態(tài)的變量over_high_gateunsigned long max_mem_size ;//定義該模塊允許使用的內(nèi)存上限unsigned long global_mem_gate_high ;// 定義該模塊的系統(tǒng)內(nèi)存高門限unsigned long global_mem_gate_low ;//定義該模塊的系統(tǒng)內(nèi)存低門限......};上述參數(shù)的含義以及設(shè)置原則和設(shè)置方法,與前述實施例相同,比如max_mem_size為系統(tǒng)可用內(nèi)存的10%, global_mem_gate_high為系統(tǒng)可用內(nèi)存的95 %, global_mem_gate_low為系統(tǒng)可用內(nèi)存的92%。例如,對于一個可用內(nèi)存為512M的系統(tǒng),max_mem_size 缺省為 50M, global_mem_gate_high 為 486M, global_mem_gate_low 為 471M。不做特殊調(diào)整的模塊,內(nèi)存參數(shù)按照缺省值進行設(shè)置。再比如內(nèi)存占用比較多,但是分不到內(nèi)存不會引起系統(tǒng)異常的模塊,將max_mem_size設(shè)置比較大,或者不做限制;比如對于網(wǎng)絡(luò)設(shè)備中的路由模塊,不修改缺省的global_mem_gate_high 和 global_mem_gate_low ;對于比較重要但內(nèi)存占用不多的模塊,比如命令行模塊,通過提高內(nèi)存門限來保證模塊內(nèi)存分配的高優(yōu)先級,如將global_mem_gate_high設(shè)為100%, global_mem_gate_low設(shè)為99%,這樣對于一個可用內(nèi)存512M的系統(tǒng),global_mem_gate_high實際為512M,global_mem_gate_low實際為507M,這樣,當系統(tǒng)中內(nèi)存所剩無幾的時候,可以讓其它模塊停止申請內(nèi)存,對于命令行這種重要的模塊,還能繼續(xù)分配內(nèi)存,繼續(xù)正常運轉(zhuǎn);對于內(nèi)存分配不到會影響整個系統(tǒng),而且可能會占用內(nèi)存較多的模塊,這些內(nèi)存參數(shù)需要在缺省值的基礎(chǔ)上進行調(diào)整,比如網(wǎng)絡(luò)設(shè)備中,對于實現(xiàn)板間通信的模塊,將max_mem_size、global_mem_gate_high 矛口 global_mem_gate_low 者β設(shè)得比缺省值大。當某個模塊申請內(nèi)存時,其流程可如圖I所示,包括步驟101,根據(jù)申請內(nèi)存的模塊的modulejd(即模塊標識),找到系統(tǒng)中記錄的為該模塊設(shè)置的內(nèi)存分配控制參數(shù)。步驟102,讀取 max_mem_size,并比較 current_mem_size 和 max_mem_size ;若max_mem_size ! = 0,而且 current_mem_size > max_mem_size,則表明該模塊可用的內(nèi)存已經(jīng)達到上限,轉(zhuǎn)入步驟103 ;否則轉(zhuǎn)入步驟104。其中,若max_mem_size = O,則表明對該模塊的內(nèi)存使用上限不做限制。
步驟103,給出相應(yīng)的提示信息,返回分配失敗。步驟104,讀取 global_mem_gate_high,并比較 global_mem_gate_high 和 global—current_mem_size ;若 global_mem_gate_high ! = O,而且 global_current_mem_size >global_mem_gate_high,則系統(tǒng)已經(jīng)沒有內(nèi)存給該模塊使用,轉(zhuǎn)入步驟105,否則轉(zhuǎn)入步驟106。其中,若global_mem_gate_high = O,則表明對該參數(shù)不做限制。步驟105,設(shè)置over_high_gate = I,給出相應(yīng)的提示信息,返回分配失敗。步驟IO6,讀取 over_high_gate,并比較 global_current_mem_size 和 global—mem_gate_low ;若 over_high_gate = 1,而且 global_current_mem_size > global_mem_gate_loW,則表明系統(tǒng)還不能給該模塊分配內(nèi)存,轉(zhuǎn)入步驟107,否則轉(zhuǎn)入步驟108。步驟107,給出相應(yīng)的提示信息,返回分配失敗。
步驟108,將over_high_gate設(shè)置為O,為該模塊分配內(nèi)存,將新分配的內(nèi)存大小計入current_mem_size和global_current_mem_size,將分配的內(nèi)存地址返回給該模塊。當某個模塊釋放內(nèi)存時,其流程可如圖2所示,包括步驟201,根據(jù)請求釋放內(nèi)存的模塊的module_id,找到系統(tǒng)中記錄的該模塊的內(nèi)
存信息;步驟202,根據(jù)內(nèi)存信息頭中記錄的內(nèi)存大小,將釋放的內(nèi)存大小從current_mem_size 和 global_current_mem_size 中減掉;步驟203,釋放這部分內(nèi)存;步驟204 205,如果該模塊的 global_current_mem_size < = global_mem_gate_low,則將 over_high_gate 設(shè)置為 O。由于應(yīng)用系統(tǒng)使用的環(huán)境和要求千變?nèi)f化,用戶可能需要根據(jù)實際情況修改內(nèi)存參數(shù)的設(shè)置。本發(fā)明實施例允許用戶根據(jù)需要對模塊的內(nèi)存分配控制參數(shù)進行修改或重新設(shè)置。在對模塊的內(nèi)存分配控制參數(shù)進行修護或重新設(shè)置的時候,需要保證global_mem_gate_low < = global_mem_gate_high。下面分別分析一下修改max_mem_size、global_mem_gate_high 和 global_mem_gate_low三種參數(shù)的過程和影響。(I)修改 max_mem_size修改max_mem_size后,若max_mem_size < current_mem_size,則下次為該模塊分配內(nèi)存的時候,圖I所示流程中的第一個判斷步驟的判斷結(jié)果為否,直接返回分配失敗。修改后max_mem_size,若 max_mem_size > = current_mem_size,則下次為該模塊分配內(nèi)存的時候,圖I所示流程中的第一個判斷步驟的判斷結(jié)果為是,進入到后續(xù)流程。釋放內(nèi)存的時候,max_mem_size不影響流程。(2)修改 global_mem_gate_high修改 global_mem_gate_high 后,若 global_mem_gate_high < global_current_mem_Size,則下次為該模塊分配內(nèi)存的時候,圖I所示流程中的第二個判斷步驟的判斷結(jié)果為否,會設(shè)置over_high_gate,并返回分配失敗。修改 global_mem_gate_high 后,若 global_mem_gate_high > = global_current_mem_Size,則下次為該模塊分配內(nèi)存的時候,圖I所示流程中的第二個判斷步驟的判斷結(jié)果為是,會進入到后續(xù)流程。
釋放內(nèi)存的時候,global_mem_gate_high不影響流程。(3)修改 global_mem_gate_low修改global_mem_gate_low后,若over_high_gate = O,則下次為該模塊分配內(nèi)存的時候,圖I所示流程中的第三個判斷步驟的判斷結(jié)果為是,進入后續(xù)流程,分配內(nèi)存。修改 global_mem_gate_low 后 ,若 global_mem_gate_low < global_current_mem_size,此時如果over_high_gate = I,則下次為該模塊分配內(nèi)存的時候,圖I所示流程中的第三個判斷步驟的判斷結(jié)果為否,返回分配失敗。修改 global_mem_gate_low 后,若 global_mem_gate_low > = global_current_mem_Size,則下次為該模塊分配內(nèi)存的時候,圖I所示流程中的第三個判斷步驟的判斷結(jié)果為是,進入到后續(xù)流程,分配內(nèi)存。下次釋放內(nèi)存的時候,會將over_high_gate設(shè)為O。需要說明的是,本發(fā)明實施例所涉及的應(yīng)用系統(tǒng)可包括軟件方式實現(xiàn)的應(yīng)用系統(tǒng),也可包括軟硬件結(jié)合方式實現(xiàn)的應(yīng)用系統(tǒng)。本發(fā)明實施例既可適用于嵌入式系統(tǒng),也可適用于非嵌入式系統(tǒng)。當應(yīng)用于嵌入式系統(tǒng)時,可將內(nèi)存分配管理前移到為模塊分配內(nèi)存時,而不僅僅跟蹤記錄內(nèi)存分配和使用情況;當應(yīng)用于非嵌入式系統(tǒng)時,可避免復(fù)雜的對進程進行調(diào)度切換的過程,降低系統(tǒng)開銷。綜上所述,本發(fā)明實施例當系統(tǒng)資源消耗較大,大部分模塊申請不到內(nèi)存的時候,能夠保證重要的模塊申請到內(nèi)存,系統(tǒng)重要的功能還能運轉(zhuǎn)?;谙嗤募夹g(shù)構(gòu)思,本申請實施例還提供了一種內(nèi)存管理系統(tǒng)。參見圖3,為本發(fā)明實施例提供的內(nèi)存管理系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)可包括參數(shù)設(shè)置單元301、內(nèi)存分配單元302,還可進一步包括內(nèi)存回收單元303,其中參數(shù)設(shè)置單元301,用于根據(jù)應(yīng)用系統(tǒng)中的各模塊所需內(nèi)存和重要程度,分別為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù);內(nèi)存分配單元302,用于當接收到模塊申請內(nèi)存的請求時,獲取為所述模塊設(shè)置的內(nèi)存分配控制參數(shù),并根據(jù)獲取到的內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制;內(nèi)存回收單元303用于在模塊釋放內(nèi)存時回收模塊釋放的內(nèi)存。具體的,參數(shù)設(shè)置單元301所設(shè)置的內(nèi)存分配控制參數(shù)包括內(nèi)存使用上限。相應(yīng)的,內(nèi)存分配單元302在進行內(nèi)存分配時,比較所述模塊的內(nèi)存使用上限與所述模塊當前使用的內(nèi)存大小,若前者小于后者,則拒絕為所述模塊分配內(nèi)存。進一步的,參數(shù)設(shè)置單元301在為模塊設(shè)置內(nèi)存使用上限時對于內(nèi)存占用多,但是分配不到內(nèi)存不會引起應(yīng)用系統(tǒng)異常的模塊,將該模塊的內(nèi)存使用上限設(shè)置為高于缺省值;對于分配不到內(nèi)存就會影響應(yīng)用系統(tǒng),而且占用內(nèi)存多的模塊,將該模塊的內(nèi)存使用上限設(shè)置為高于缺省值。具體的,參數(shù)設(shè)置單元301所設(shè)置的內(nèi)存分配控制參數(shù)包括該模塊的內(nèi)存使用上限和系統(tǒng)內(nèi)存高門限。相應(yīng)的,內(nèi)存分配單元302在進行內(nèi)存分配時,比較所述模塊的內(nèi)存使用上限與所述模塊當前使用的內(nèi)存大小,比較所述模塊的系統(tǒng)內(nèi)存高門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大?。蝗羲瞿K的內(nèi)存使用上限小于所述模塊當前使用的內(nèi)存大小,或者所述模塊的系統(tǒng)內(nèi)存高門限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則拒絕為所述模塊分配內(nèi)存。進一步的,參數(shù)設(shè)置單元301為模塊設(shè)置系統(tǒng)內(nèi)存高門限時對于分配不到內(nèi)存會導(dǎo)致部分功能不可用的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為低于缺省值;或者,對于內(nèi)存占用不多但執(zhí)行重要功能的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為高于缺省值;或者,對于分配不到內(nèi)存會影響應(yīng)用系統(tǒng)運行的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為高于缺省值。具體的,參數(shù)設(shè)置單元301所設(shè)置的內(nèi)存分配控制參數(shù)還包括系統(tǒng)內(nèi)存低門限,一個模塊的系統(tǒng)內(nèi)存低門限不大于該模塊的系統(tǒng)內(nèi)存高門限。相應(yīng)的,內(nèi)存分配單元301還用于當接收到模塊申請內(nèi)存的請求時,若因所述模塊的系統(tǒng)內(nèi)存使用上限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小而被拒絕分配內(nèi)存,則將該模塊的內(nèi)存分配狀態(tài)標志置位;內(nèi)存分配單元301在進行內(nèi)存分配時,若所述模塊的系統(tǒng)內(nèi)存使用上限不小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則獲取所述模塊的內(nèi)存分配狀態(tài)標志,并比較所述模塊的系統(tǒng)內(nèi)存低門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,若所述內(nèi)存分配狀態(tài)標志被置位,并且所述模塊的系統(tǒng)內(nèi)存低門限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則拒絕為所述模塊分配內(nèi)存。進一步的,參數(shù)設(shè)置單元301為模塊設(shè)置系統(tǒng)內(nèi)存低門限時對于分配不到內(nèi)存會導(dǎo)致部分功能不可用的 模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為低于缺省值;或者,對于內(nèi)存占用不多但執(zhí)行重要功能的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為高于缺省值;或者,對于分配不到內(nèi)存會影響應(yīng)用系統(tǒng)運行的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為高于缺省值。具體的,當模塊釋放占用的內(nèi)存時,內(nèi)存回收單元303比較所述模塊的系統(tǒng)內(nèi)存低門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,若前者不小于后者,則取消對所述模塊的內(nèi)存分配狀態(tài)標志的置位。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視本發(fā)明的保護范圍。
權(quán)利要求
1.一種內(nèi)存管理方法,其特征在于,該方法包括 根據(jù)應(yīng)用系統(tǒng)中的各模塊所需內(nèi)存和重要程度,分別為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù); 當接收到模塊申請內(nèi)存的請求時,獲取為所述模塊設(shè)置的內(nèi)存分配控制參數(shù),并根據(jù)獲取到的內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制。
2.如權(quán)利要求I所述的方法,其特征在于,模塊的內(nèi)存分配控制參數(shù)包括內(nèi)存使用上限; 所述根據(jù)獲取到的內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制,具體為 比較所述模塊的內(nèi)存使用上限與所述模塊當前使用的內(nèi)存大小,若前者小于后者,則拒絕為所述模塊分配內(nèi)存。
3.如權(quán)利要求2所述的方法,其特征在于,為模塊設(shè)置內(nèi)存使用上限時 對于內(nèi)存占用多,但是分配不到內(nèi)存不會引起應(yīng)用系統(tǒng)異常的模塊,將該模塊的內(nèi)存使用上限設(shè)置為高于缺省值; 對于分配不到內(nèi)存就會影響應(yīng)用系統(tǒng),而且占用內(nèi)存多的模塊,將該模塊的內(nèi)存使用上限設(shè)置為高于缺省值。
4.如權(quán)利要求I所述的方法,其特征在于,模塊的內(nèi)存分配控制參數(shù)包括該模塊的內(nèi)存使用上限和系統(tǒng)內(nèi)存高門限; 所述根據(jù)獲取到的內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制,包括 比較所述模塊的內(nèi)存使用上限與所述模塊當前使用的內(nèi)存大小,比較所述模塊的系統(tǒng)內(nèi)存高門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大小; 若所述模塊的內(nèi)存使用上限小于所述模塊當前使用的內(nèi)存大小,或者所述模塊的系統(tǒng)內(nèi)存高門限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則拒絕為所述模塊分配內(nèi)存。
5.如權(quán)利要求4所述的方法,其特征在于,為模塊設(shè)置系統(tǒng)內(nèi)存高門限時 對于分配不到內(nèi)存會導(dǎo)致部分功能不可用的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為低于缺省值;或者 對于內(nèi)存占用不多但執(zhí)行重要功能的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為高于缺省值;或者 對于分配不到內(nèi)存會影響應(yīng)用系統(tǒng)運行的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為高于缺省值。
6.如權(quán)利要求4所述的方法,其特征在于,模塊的內(nèi)存分配控制參數(shù)還包括系統(tǒng)內(nèi)存低門限,一個模塊的系統(tǒng)內(nèi)存低門限不大于該模塊的系統(tǒng)內(nèi)存高門限;該方法還包括 當接收到模塊申請內(nèi)存的請求時,若因所述模塊的系統(tǒng)內(nèi)存使用上限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小而被拒絕分配內(nèi)存,則將該模塊的內(nèi)存分配狀態(tài)標志置位; 當接收到模塊申請內(nèi)存的請求時,若所述模塊的系統(tǒng)內(nèi)存使用上限不小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則獲取所述模塊的內(nèi)存分配狀態(tài)標志,并比較所述模塊的系統(tǒng)內(nèi)存低門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,若所述內(nèi)存分配狀態(tài)標志被置位,并且所述模塊的系統(tǒng)內(nèi)存低門限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則拒絕為所述模塊分配內(nèi)存。
7.如權(quán)利要求6所述的方法,其特征在于,為模塊設(shè)置系統(tǒng)內(nèi)存低門限時 對于分配不到內(nèi)存會導(dǎo)致部分功能不可用的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為低于缺省值;或者 對于內(nèi)存占用不多但執(zhí)行重要功能的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為高于缺省值;或者 對于分配不到內(nèi)存會影響應(yīng)用系統(tǒng)運行的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為高于缺省值。
8.如權(quán)利要求6所述的方法,其特征在于,該方法還包括 當釋放模塊占用的內(nèi)存時,比較所述模塊的系統(tǒng)內(nèi)存低門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,若前者不小于后者,則取消對所述模塊的內(nèi)存分配狀態(tài)標志的置位。
9.一種內(nèi)存管理系統(tǒng),其特征在于,包括 參數(shù)設(shè)置単元,用于根據(jù)應(yīng)用系統(tǒng)中的各模塊所需內(nèi)存和重要程度,分別為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù); 內(nèi)存分配単元,用于當接收到模塊申請內(nèi)存的請求時,獲取為所述模塊設(shè)置的內(nèi)存分配控制參數(shù),井根據(jù)獲取到的內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述參數(shù)設(shè)置單元所設(shè)置的內(nèi)存分配控制參數(shù)包括內(nèi)存使用上限; 所述內(nèi)存分配単元具體用于,比較所述模塊的內(nèi)存使用上限與所述模塊當前使用的內(nèi)存大小,若前者小于后者,則拒絕為所述模塊分配內(nèi)存。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述參數(shù)設(shè)置單元具體用于,為模塊設(shè)置內(nèi)存使用上限吋對于內(nèi)存占用多,但是分配不到內(nèi)存不會引起應(yīng)用系統(tǒng)異常的模塊,將該模塊的內(nèi)存使用上限設(shè)置為高于缺省值;對于分配不到內(nèi)存就會影響應(yīng)用系統(tǒng),而且占用內(nèi)存多的模塊,將該模塊的內(nèi)存使用上限設(shè)置為高于缺省值。
12.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述參數(shù)設(shè)置單元所設(shè)置的內(nèi)存分配控制參數(shù)包括該模塊的內(nèi)存使用上限和系統(tǒng)內(nèi)存高門限; 所述內(nèi)存分配単元具體用于,比較所述模塊的內(nèi)存使用上限與所述模塊當前使用的內(nèi)存大小,比較所述模塊的系統(tǒng)內(nèi)存高門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大??;若所述模塊的內(nèi)存使用上限小于所述模塊當前使用的內(nèi)存大小,或者所述模塊的系統(tǒng)內(nèi)存高門限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則拒絕為所述模塊分配內(nèi)存。
13.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述參數(shù)設(shè)置單元具體用于,為模塊設(shè)置系統(tǒng)內(nèi)存高門限時對于分配不到內(nèi)存會導(dǎo)致部分功能不可用的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為低于缺省值;或者,對于內(nèi)存占用不多但執(zhí)行重要功能的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為高于缺省值;或者,對于分配不到內(nèi)存會影響應(yīng)用系統(tǒng)運行的模塊,將該模塊的系統(tǒng)內(nèi)存高門限設(shè)置為高于缺省值。
14.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述參數(shù)設(shè)置單元所設(shè)置的內(nèi)存分配控制參數(shù)還包括系統(tǒng)內(nèi)存低門限,一個模塊的系統(tǒng)內(nèi)存低門限不大于該模塊的系統(tǒng)內(nèi)存高門限; 所述內(nèi)存分配単元還用于,當接收到模塊申請內(nèi)存的請求時,若因所述模塊的系統(tǒng)內(nèi)存使用上限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小而被拒絕分配內(nèi)存,則將該模塊的內(nèi)存分配狀態(tài)標志置位; 所述內(nèi)存分配単元具體用于,當接收到模塊申請內(nèi)存的請求時,若所述模塊的系統(tǒng)內(nèi)存使用上限不小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則獲取所述模塊的內(nèi)存分配狀態(tài)標志,并比較所述模塊的系統(tǒng)內(nèi)存低門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,若所述內(nèi)存分配狀態(tài)標志被置位,并且所述模塊的系統(tǒng)內(nèi)存低門限小于應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,則拒絕為所述模塊分配內(nèi)存。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述參數(shù)設(shè)置單元具體用于,為模塊設(shè)置系統(tǒng)內(nèi)存低門限時對于分配不到內(nèi)存會導(dǎo)致部分功能不可用的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為低于缺省值;或者,對于內(nèi)存占用不多但執(zhí)行重要功能的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為高于缺省值;或者,對于分配不到內(nèi)存會影響應(yīng)用系統(tǒng)運行的模塊,將該模塊的系統(tǒng)內(nèi)存低門限設(shè)置為高于缺省值。
16.如權(quán)利要求14所述的系統(tǒng),其特征在于,還包括 內(nèi)存回收単元,用于當模塊釋放占用的內(nèi)存時,比較所述模塊的系統(tǒng)內(nèi)存低門限與應(yīng)用系統(tǒng)當前使用的內(nèi)存大小,若前者不小于后者,則取消對所述模塊的內(nèi)存分配狀態(tài)標志的置位。
全文摘要
本發(fā)明公開了一種內(nèi)存管理方法及其系統(tǒng),該方法包括根據(jù)應(yīng)用系統(tǒng)中的各模塊所需內(nèi)存和重要程度,分別為應(yīng)用系統(tǒng)中的各模塊設(shè)置內(nèi)存分配控制參數(shù);當接收到模塊申請內(nèi)存的請求時,根據(jù)內(nèi)存分配控制參數(shù)以及當前內(nèi)存的使用情況,對所述模塊進行內(nèi)存分配控制。采用本發(fā)明可實現(xiàn)對應(yīng)用系統(tǒng)中的各模塊進行內(nèi)存分配控制,避免因為代碼錯誤或者惡意攻擊引起內(nèi)存不足,造成系統(tǒng)崩潰。
文檔編號G06F12/02GK102662850SQ20121008975
公開日2012年9月12日 申請日期2012年3月30日 優(yōu)先權(quán)日2012年3月30日
發(fā)明者鄭上閩 申請人:杭州華三通信技術(shù)有限公司