新四季網

一種內存監控方法

2023-05-31 23:14:26

專利名稱:一種內存監控方法
技術領域:
本發明涉及計算機系統或者嵌入式作業系統領域,具體來說,涉及一種內存監控的方法。
背景技術:
由於計算機系統和嵌入式作業系統的迅速發展,嵌入式作業系統早已經融入我們的生活,除了日常生活中可以看到的家電產品、工業及軍事應用的獨立產品之外,許多新電腦系統,事實上也是有許許多多小的嵌入式系統組成。
使用嵌入式作業系統的產品越來越多,如何開發一個高穩定性,高效率的作業系統和應用程式是一個非常關鍵的問題。則在開發中如何優化內存管理,提高內存的使用效率,儘可能地提高運行速度,是大家所關心的問題。
系統的內存不管其容量有多大,但均是有限的,所以在使用內存時,就要時刻監視內存的使用情況。這樣可以了解應用程式佔用資源的情況、對系統的開銷大小及是否影響系統或者應用程式的穩定性等狀況。如果等到發現系統的內存不能再分配了才開始釋放內存,這時整個系統可能無法運行了。上述的方法中,對分配內存和釋放內存都未進行登記,不能夠使應用程式開發者能夠清楚地知道自己使用了多大的內存或者還有多少內存可供使用。現在也出現了一種採用內存池來對內存進行管理的方法,該方法先分配一個內存池,然後對內存池統一管理,其一般是將底層作業系統的全部內存一次性地劃分為大小不同的內存池,再將每一內存池中的內存劃分為固定的大小一致的內存塊。但是現有的這種方法,沒有對整個系統和應用程式所用的內存進行分類管理,也沒有對某個任務或者某個類別的佔用內存資源進行統計,另外也未對內存的釋放正確與否進行驗證,而且對內存池中的使用情況的掃描需花費較多時間,效率低。

發明內容
本發明要解決的技術問題在於,為克服現有的內存管理方法中不能監控系統或者應用程式佔用的內存資源的不足,而提供一種內存監控的方法,可以監控到內存使用的細節,如每個線程、每個進程、每個文件在哪一行分配的內存,是否有內存寫訪問越界等。
本發明為解決其技術問題所採用的技術方案為提供一種內存監控方法,包括如下步驟(a)建立一個內存監控鍊表的步驟,該內存監控鍊表至少包括一個內存監控鍊表節點,所述內存監控鍊表節點中包含有對應的內存塊的管理信息;(b)初始化內存監控鍊表的步驟;(c)分配內存塊的步驟當分配該內存塊時,生成一個對應於該內存塊的內存監控鍊表節點,並將該內存監控鍊表節點插入所述內存監控鍊表中;(d)釋放內存塊步驟當釋放該內存塊時,刪除與該內存對應塊的內存監控鍊表節點。
其中,所述步驟(a)中的內存監控鍊表節點的數據結構記錄有內存監控鍊表項的前一個指針、內存監控鍊表項的後一個指針、分配內存塊的文件名、分配內存塊的語句所在的文件行數、內存塊的首地址、內存塊的長度、內存塊的類型、分配內存塊的線程ID及分配內存塊的進程ID。
其中,所述步驟(b)中的初始化內存監控鍊表的步驟包括初始化內存監控全局變量成員的步驟將已經分配的內存數項數、已經分配的內存總數、釋放的內存總數、系統使用的內存總數、用戶使用的內存總數均賦值為零;將內存監控鍊表的首地址賦值為「NULL」;將內存監控程序使用的信號量設為創建信號量的返回值。
其中,所述步驟(c)包括(c1)按用戶或者系統提供的SIZE分配一塊大小為較SIZE大於預定字節的內存,並在內存塊的高地址尾部存放該預定字節的特殊標誌;(c2)根據內存監控鍊表每個內存監控鍊表節點結構建立一個與包含有該內存塊信息的內存監控鍊表節點;(c3)把該建立的內存監控鍊表節點插入內存監控鍊表中;(c4)更新內存監控全局變量中成員的信息。
其中,所述步驟(c4)進一步包括將已經分配的內存總數加一,將已經分配的內存數項數加一,根據該內存塊的使用類型,將系統使用的內存總數加一或將用戶所使用的內存總數加一。
其中,所述步驟(d)包括(d1)根據用戶或者系統提供的釋放內存塊地址在內存監控鍊表中找到相應的內存監控鍊表節點;(d2)判斷特殊標誌是否正確;(d3)如果特殊標誌正確,則釋放該內存塊;(d4)刪除步驟(d1)中所找到的內存監控鍊表節點;(d5)更新內存監控全局變量中成員的信息步。
其中,當步驟(d2)中特殊標誌不正確,則提示內存越界。
其中,所述步驟(d5)進一步包括將已分配的內存數項數減一;將釋放的內存總數加一;根據步驟(d3)中所釋放的內存塊的類型,將系統使用的內存總數減去步驟(d1)中找到的相應內存監控鍊表節點中的內存的大小,或將用戶使用的內存總數減去步驟(d1)中找到的相應內存監控鍊表節點中內存的大小。
實施本發明的內存監控的方法,具有以下有益效果在本發明中,通過採用一個雙向的內存監控鍊表,結合其中的內存監控鍊表節點與全局變量,這些保存在鍊表中的信息比較全面,因此用戶可以監控到每個線程,每個進程,每個文件在哪一行分配的內存,而且可以監控是否有內存寫訪問越界,達到真正意義上的內存監控。另外,在分配內存及釋放內存時,只需增加或刪除與該內存對應的內存監控鍊表節點。使用方便、效率高。無需對整個內存進行掃描監控。


下面將結合附圖及實施例對本發明作進一步說明,附圖中圖1是本發明一種內存監控方法的系統框圖;圖2是本發明一種內存監控方法的初始化內存監控鍊表步驟的流程圖;圖3是本發明一種內存監控方法的分配內存步驟的流程圖;圖4是本發明一種內存監控方法的釋放內存步驟的流程圖。
具體實施例方式
本發明提供一種內存監控的方法,用來監控計算機系統或嵌入式系統的系統內存和用戶分配內存的情況。在本發明中,對內存監控是採用一種雙向鍊表的方式來實現的。
如圖1示出了本發明中對內存進行監控的雙向鍊表(下稱為內存監控鍊表)的示意圖。在該內存監控鍊表中,包括有多個用於存放物理內存管理的信息的內存監控鍊表節點(可稱為內存監控鍊表節點)。其是在當系統或用戶每分配一塊內存時,就在該鍊表中創建一個用於登記該內存的內存監控鍊表節點。這些內存監控鍊表節點在圖1中記作內存監控鍊表節點1(對應內存塊1)、內存監控鍊表節點2(對應內存塊2)、…及內存監控鍊表節點N(對應內存塊N)等。其中虛線框表示可以在該內存監控鍊表中添加或刪除內存監控鍊表節點。
各內存監控鍊表節點的數據結構如圖1中右側的方框所示,包括有pPrev、pNext、Name、LineNum、Addr、Len、Type、ThreadID及ProcessID。其中,pPrev記錄內存監控鍊表項的前一個指針;pNext記錄內存監控鍊表項的後一個指針;Name記錄分配內存塊的文件名;LineNum記錄分配內存塊的語句所在的文件行數;Addr記錄內存塊的首地址;Len記錄內存塊的長度;Type記錄內存塊的類型(例如,是系統使用還是由用戶使用);ThreadID記錄分配內存塊的線程ID;ProcessID記錄分配內存塊的進程ID。
通過每一個內存監控鍊表節點中pPrev和pNext內所存放的指針,將多個內存監控鍊表節點組成一個雙向鍊表(內存監控鍊表)。
在本發明中,首先需要定義一些全局變量,在這些全局變量中,包括諸如,記錄已經分配的內存總數、釋放的內存總數、系統使用的內存總數、用戶使用的內存總數等信息。結合每個內存監控鍊表節點中所記錄的分配內存塊的文件名、分配內存塊的語句所在的文件行數、內存塊的首地址、內存塊的長度、內存塊的類型、分配內存塊的線程ID及分配內存塊的進程ID等信息。故使保存在鍊表中的信息已經比較全面,通過這些信息可以讓用戶監控到每個線程,每個進程,每個文件在哪一行分配的內存,而且可以監控是否有內存寫訪問越界,達到真正意義上的內存監控。具體來說,內存監控全局變量包括有MemItemCount、MallocCount、FreeCount、SysUsedCount、UserUsedCount、Hmem_Sema及MemItemHead。
其中,MemItemCount用於記錄已分配還未釋放的內存數項數;MallocCount用於記錄已經分配的內存總數,這個數是累加的;FreeCount用於記錄釋放的內存總數,這個數也是累加的;SysUsedCount用於記錄系統使用的內存總數;UserUsedCount用於記錄用戶使用的內存總數;Hmem_Sema用於記錄內存監控程序使用的信號量;MemItemHead用於記錄內存監控鍊表的首地址。
在本發明中,至少包括有初始化內存監控鍊表步驟、分配內存步驟以及釋放內存步驟。
如圖2所示,所述的初始化內存監控鍊表步驟主要包括初始化全局變量的所有成員,將MemItemHead賦值為「NULL」,將MemItemCount、MallocCount、FreeCount、SysUsedCount及UserUsedCount均賦值為零。而將Hmem_Sema設為創建信號量的返回值(步驟S20)。
在對內存監控鍊表進行初始化之後,就可以進行內存分配的步驟。如圖3所示,所述的分配內存的流程圖包含按用戶或者系統提供的大小(SIZE)分配一塊較之大於一定字節的內存,在本發明的一個實施例中,所分配的內存大小為SIZE+4,並在該內存塊的高地址尾部存放該超出的4個字節的特殊標誌(例如0x3d0x3d0x3d0x3d),在其他的實施例中,不限於4個字節,存放的特殊標誌也不限於0x3d0x3d0x3d0x3d(步驟S31);根據內存監控鍊表每個內存監控鍊表節點結構建立一個與包含有該內存塊信息(如Name、LineNum、Addr、Len、Type等)的內存監控鍊表節點(步驟S32);把步驟S32中所建立的內存監控鍊表節點插入內存監控鍊表中,在本發明的一個最佳實施例中,是插入內存監控鍊表的頭部。在其他的實施例中,也可插入內存監控鍊表的尾部,或者其它地方,但是插入頭部是最快,最有效率的,因為頭節點不用查找,可以直接引用全局變量;更新內存監控全局變量中成員的信息,即將MallocCount加一,將MemItemCount加一,視該內存塊的使用類型(用戶或系統使用)將SysUsedCount加一或將UserUsedCount加一。
當需要對物理內存進行釋放時,在本發明中要刪除與該內存對應的內存監控鍊表節點及更新全局變量成員。
如圖4所示,所述的釋放內存的流程圖包括根據用戶或者系統提供的釋放內存塊地址,在內存監控鍊表中找到相應的內存監控鍊表節點(步驟S41);判斷該內存塊中的特殊標誌是否正確(步驟S42);如果該特殊標誌出現改變,則轉入步驟S44,提示內存越界,起到報警作用;如果該特殊標誌正確,則執行步驟S43,根據用戶或者系統提供的釋放內存地址釋放物理內存;則在步驟S45中,將與該內存對的內存監控鍊表節點從內存監控鍊表中刪除。因為在內存監控鍊表中刪除了一個內存監控鍊表節點,則要相應更新內存監控全局變量中的成員信息,將MemItemCount減一;將FreeCount加一;如果該釋放的內存的使用類型為系統使用,則將SysUsedCount減去步驟S41中找到的相應內存監控鍊表節點中內存的大小,如果該釋放的內存的使用類型為用戶使用,則將UserUsedCount減去步驟S41中找到的相應內存監控鍊表節點中內存的大小(步驟S46)。然後流程結束。
在本發明中,通過採用一個雙向的內存監控鍊表,結合其中的內存監控鍊表節點與全局變量,這些保存在鍊表中的信息比較全面,因此用戶可以監控到每個線程,每個進程,每個文件在哪一行分配的內存,而且可以監控是否有內存寫訪問越界,達到真正意義上的內存監控。另外,在分配內存及釋放內存時,只需增加或刪除與該內存對應的內存監控鍊表節點。使用方便、效率高。無需對整個內存進行掃描監控。
權利要求
1.一種內存監控方法,其特徵在於,包括如下步驟(a)建立一個內存監控鍊表的步驟,該內存監控鍊表至少包括一個內存監控鍊表節點,所述內存監控鍊表節點中包含有對應的內存塊的管理信息;(b)初始化內存監控鍊表的步驟;(c)分配內存塊的步驟當分配該內存塊時,生成一個對應於該內存塊的內存監控鍊表節點,並將該內存監控鍊表節點插入所述內存監控鍊表中;(d)釋放內存塊步驟當釋放該內存塊時,刪除與該內存對應塊的內存監控鍊表節點。
2.根據權利要求1所述的內存監控方法,其特徵在於,所述步驟(a)中的內存監控鍊表節點的數據結構記錄有內存監控鍊表項的前一個指針、內存監控鍊表項的後一個指針、分配內存塊的文件名、分配內存塊的語句所在的文件行數、內存塊的首地址、內存塊的長度、內存塊的類型、分配內存塊的線程ID及分配內存塊的進程ID。
3.根據權利要求2所述的內存監控方法,其特徵在於,所述步驟(b)中的初始化內存監控鍊表的步驟包括初始化內存監控全局變量成員的步驟將已經分配的內存數項數、已經分配的內存總數、釋放的內存總數、系統使用的內存總數、用戶使用的內存總數均賦值為零;將內存監控鍊表的首地址賦值為「NULL」;將內存監控程序使用的信號量設為創建信號量的返回值。
4.根據權利要求3所述的內存監控方法,其特徵在於,所述步驟(c)包括(c1)按用戶或者系統提供的SIZE分配一塊大小為較SIZE大於預定字節的內存,並在內存塊的高地址尾部存放該預定字節的特殊標誌;(c2)根據內存監控鍊表每個內存監控鍊表節點結構建立一個與包含有該內存塊信息的內存監控鍊表節點;(c3)把該建立的內存監控鍊表節點插入內存監控鍊表中;(c4)更新內存監控全局變量中成員的信息。
5.根據權利要求4所述的內存監控方法,其特徵在於,所述步驟(c4)進一步包括將已經分配的內存總數加一,將已經分配的內存數項數加一,根據該內存塊的使用類型,將系統使用的內存總數加一或將用戶所使用的內存總數加一。
6.根據權利要求4或5任一項所述的內存監控方法,其特徵在於,所述步驟(d)包括(d1)根據用戶或者系統提供的釋放內存塊地址在內存監控鍊表中找到相應的內存監控鍊表節點;(d2)判斷特殊標誌是否正確;(d3)如果特殊標誌正確,則釋放該內存塊;(d4)刪除步驟(d1)中所找到的內存監控鍊表節點;(d5)更新內存監控全局變量中成員的信息步。
7.根據權利要求6所述的內存監控方法,其特徵在於,當步驟(d2)中特殊標誌不正確,則提示內存越界。
8.根據權利要求6所述的內存監控方法,其特徵在於,所述步驟(d5)進一步包括將已分配的內存數項數減一;將釋放的內存總數加一;根據步驟(d3)中所釋放的內存塊的類型,將系統使用的內存總數減去步驟(d1)中找到的相應內存監控鍊表節點中的內存的大小,或將用戶使用的內存總數減去步驟(d1)中找到的相應內存監控鍊表節點中內存的大小。
全文摘要
本發明涉及一種內存監控方法,包括(a)建立一個內存監控鍊表的步驟,該內存監控鍊表至少包括一個內存監控鍊表節點,所述內存監控鍊表節點中包含有對應的內存塊的管理信息;(b)初始化內存監控鍊表的步驟;(c)分配內存塊的步驟當分配該內存塊時,生成一個對應於該內存塊的內存監控鍊表節點,並將該內存監控鍊表節點插入所述內存監控鍊表中;(d)釋放內存塊步驟當釋放該內存塊時,刪除與該內存對應塊的內存監控鍊表節點。採用本發明,在分配內存及釋放內存時,只需增加或刪除與該內存對應的內存監控鍊表節點。通過內存監控鍊表可以監控到內存使用的細節,另外,使用方便、效率高。
文檔編號G06F12/02GK1936859SQ20051010018
公開日2007年3月28日 申請日期2005年9月30日 優先權日2005年9月30日
發明者胡本平 申請人:康佳集團股份有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀