[發明專利]一種用于嵌入式系統的內存控制方法有效
| 申請號: | 201210360255.X | 申請日: | 2012-09-25 |
| 公開(公告)號: | CN102915276A | 公開(公告)日: | 2013-02-06 |
| 發明(設計)人: | 陶琴;王凌斐 | 申請(專利權)人: | 武漢郵電科學研究院 |
| 主分類號: | G06F12/02 | 分類號: | G06F12/02 |
| 代理公司: | 武漢科皓知識產權代理事務所(特殊普通合伙) 42222 | 代理人: | 嚴彥 |
| 地址: | 430074 湖*** | 國省代碼: | 湖北;42 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 用于 嵌入式 系統 內存 控制 方法 | ||
1.一種用于嵌入式系統的內存控制方法,其特征在于:從操作系統中申請一塊內存,內存的一部分作為內存池,另一部分作為預留內存區域;內存池采用池式管理,為每個線程配置一個線程緩存;預留內存區域采用TLSF算法管理;
進行內存初始化操作時,執行以下步驟,
步驟1.1,初始化內存池,包括將內存池切割成不同大小的內存塊,為同等大小的內存塊維護一個內存管理頭結構;為每個內存塊分配一個內存管理單元;
步驟1.2,初始化預留內存區域,包括按照TLSF算法的數據結構組織預留內存區域,并維護兩個內存管理頭結構,一個用來管理小內存塊,另一個用來管理大內存塊,小內存塊和大內存塊根據預設參數劃分;?
步驟1.3,初始化各線程緩存的內存管理頭結構,為任一線程申請的內存中同等大小的內存塊維護一個內存管理頭結構;
步驟1.4,初始化每個線程的一個內存統計鏈表,所述內存統計鏈表是用于連接任一線程申請的所有內存塊;?
內存池、預留內存區域和各線程緩存的內存管理頭結構均包括空閑內存塊的個數、已使用內存塊的個數、空閑鏈表、已使用鏈表和互斥鎖;內存池和預留內存區域的各內存塊的內存管理單元的域包括內存池雙向鏈表、線程緩存鏈表、內存塊狀態、線程使用內存統計鏈表、內存管理參數和指向內存塊的指針,內存管理參數包括內存塊的大小size,所述內存池雙向鏈表為空閑鏈表或已使用鏈表;預留內存區域中,用來管理小內存塊的內存管理頭結構中已使用鏈表稱為小內存鏈表,預留內存區域中,用來管理大內存塊的內存管理頭結構中已使用鏈表稱為大內存鏈表;
進行內存分配操作時,執行以下步驟,
步驟2.1,根據應用程序申請的內存大小,向上調整到內存池中切割內存塊的大小,記為目標size;查看線程緩存對應大小內存塊的空閑鏈表中是否是合適的內存塊,
如果有,將內存塊從線程緩存的空閑鏈表中刪除,掛在線程緩存的已使用鏈表中,并更新該內存塊的內存管理單元的相關信息,包括狀態更新為已使用,并標記為從內存池中分配,返回內存塊的首地址,將此內存塊加入到線程的內存統計鏈表中,完成分配;
否則,進入步驟2.2;
步驟2.2,查看內存池中是否有目標size的空閑內存塊,
如果有,將空閑的內存塊從內存池的空閑鏈表中移除,掛在內存池的使用鏈表中,并更新內存管理單元的相關信息,包括狀態更新為已使用,并標記為從內存池中分配,返回內存塊首地址,將此內存塊加入到線程的內存統計鏈表中,完成分配;
否則,進入步驟2.3;
步驟2.3,查找比目標size大一個size的內存塊,?
如果有,將空閑內存塊從內存池的空閑鏈表中移除,掛在內存池的使用鏈表中,并更新內存管理單元的相關信息,尤其是狀態更新為已使用,并標記為從內存池中分配,返回內存塊首地址,將此內存塊加入到線程的內存統計鏈表中,完成分配;
否則,根據應用程序申請的內存大小從預留內存區域中申請內存塊,并分配相應的內存管理單元;設置內存管理單元的相關信息,包括狀態為已使用,并標記為從預留內存區域中分配;返回內存塊首地址,將此內存塊加入到線程的內存統計鏈表中;根據應用程序申請的內存大小和預設參數,確定申請的內存塊是小內存塊還是大內存塊;如果申請的是小內存塊,將申請的內存塊掛到小內存鏈表中,并更新哈希表的信息,將此內存塊插入到二級哈希結構中,完成分配;如果申請的是大內存塊,將申請的內存塊掛到大內存鏈表中;
進行內存釋放操作時,執行以下步驟,
步驟3.1,由輸入地址找到對應的內存管理單元;
步驟3.2,根據內存管理單元中的內存塊狀態域來判斷,
如果是從內存中的內存池申請的,轉入步驟3.3;
如果是從預留內存區域分配的,將內存管理單元從預留內存區域的對應內存管理頭結構的已使用鏈表中刪除,將內存塊從線程的內存統計鏈表中刪除,如果是小內存塊則更新哈希查找結構的信息;并采用TLSF算法的free函數釋放內存塊和相應內存管理單元,完成釋放;
步驟3.3,將內存管理單元從內存池的使用鏈表中移除,掛到線程緩存的空閑鏈表中,并更新狀態域為空閑狀態,將此內存塊從線程的內存統計鏈表中刪除,完成釋放;
步驟3.4,檢查線程緩存中空閑內存塊數目與使用內存塊數目的比值,
如果小于一定閾值,則將內存管理單元從線程緩存的使用鏈表中移除,掛到線程緩存的空閑鏈表中,并更新狀態域為空閑狀態,將此內存塊從線程的內存統計鏈表中刪除,完成釋放;
否則,將內存管理單元從線程緩存的使用鏈表中移除,掛到內存池的空閑鏈表中,并更新狀態域為空閑狀態,將此內存塊從線程的內存統計鏈表中刪除,完成釋放。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于武漢郵電科學研究院,未經武漢郵電科學研究院許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210360255.X/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種熱轉印結構
- 下一篇:一種顯示面板及制作方法、顯示裝置





