OSE的HEAP和POOL的管理
1????????? OSE 的 HEAP 管理
1.1????? 功能特性
Heap Manager的基本功能如下:
分配和釋放數據緩沖區,用于存儲內核數據及動態加載模塊
釋放孤兒緩沖區
列舉 heap的相關屬性、內容
為每一個分配的緩沖區提供調試信息,如文件名及行號等信息,此項是編譯可選的
?
Heap Manager的基本特性如下:
緩沖區分配釋放時間有確定的最大值;
管理開銷比較小, 9或者 17個字節,取決于是否需要調試信息;
緩沖區具備邊界標識,便于發現異常、調試分析;
具備文件名及行號等信息;
私有或公共緩沖區屬性,私有緩沖區在進程消亡時自動釋放;
自動選擇緩沖區大小,按照 Fibonacci數列得到各個緩沖區大小,最小單元 16個字節;
緩沖區自動分割及重組,最大限度的減少內存碎片。
?
1.2????? 緩沖區大小
固定開銷最小為 9個字節( 4 bytes owner pid, 4 bytes control data and 1 byte endmark);
當需要調試信息時,需要額外 8個字節 (4 bytes of file pointer, 4 bytes of line number);
實際大小將按照 Fibonacci數列大小選擇比有效數據大的最小緩沖區大小。 Fibonacci數列共 29種大小。
?
F(n) = F(n - 1) + F(n - 2), F(1) = 1, F(0) = 1
16, 16, 32, 48, 80, 128, 208, 336, 544, 880, 1424, 2304, 3728, 6032, 9760, 15792,
25552, 41344, 66896, 108240, 175136, 283376, 458512, 741888, 1200400, 1942288,
3142688, 5084976, 8227664
最小為 16字節,最大為 8227664,接近 8M
?
1.3????? 緩沖區結構
每個緩沖區由控制頭、用戶數據、 endmark等幾部分構成。
同一個 size的 buffer在釋放后將自動構成鏈表。
用戶域的前四個字節將用在指向下一個空閑緩沖區的指針。緩沖區分配后,此四個字節將存放有效數據。控制頭將對此指針進行校驗碼計算,這樣可以有效檢查緩沖區損壞等問題;
Endmark將用于檢測緩沖區覆蓋問題;
Owner可得到緩沖區的分配者,便于定位問題;
當需要調試信息時,可添加附加字段文件名及行號等信息;
當兩個空閑緩沖區在地址上連續時可以自動組合成一個更大的 buffer塊,掛接到新的空閑鏈表上,這樣可以有效減少內存碎片
?
多個緩沖區在內存上的關系如下圖,當緩沖區分配出去時,給用戶的是 User data的首地址,當釋放時,將此指針前移特定字節時即可獲得相關的控制信息,便可得到此緩沖區的大小,從而將其掛接到相關的空閑緩沖區鏈表上。
?
緩沖區釋放時,將會檢查此指針是否有效,有以下幾個標準:
是否對齊,在設計實現上, OSE的 heap緩沖區一般是 8字節對齊的;
緩沖區地址需要在 HEAP的有效地址空間內。
?
2????????? OSE 的 POOL 管理
2.1????? 功能特性
POOL的基本功能如下:
為任務間的通信分配消息空間;
為任務分配動態棧空間。
?
和 HEAP的相同點為:
都有消息控制頭,都有 endmark用于檢查緩沖區覆蓋問題;
空閑緩沖區都會用鏈表鏈接起來
?
和 HEAP的不同點為:
Heap由單獨的用戶態的庫來管理,運行在用戶態;而 Pool的管理由內核負責,屬于系統調用;
Heap的大小個數為 29個,其為 Fibonacci數列,大小固定;而 Pool的大小由配置文件決定,大小是可變的,共 8種大小;
Heap中分配的緩沖區有文件名和行業等調試信息,而 pool中分配的緩沖區沒有;
Heap中分配的緩沖區只有 owner,但 pool中分配的緩沖區除了 owner外還有 sender,消息可在各個任務之間轉發,只有消息的 owner才能釋放消息;
Heap的大小為 Fibonacci數列,各個塊之間大小有組合關系,支持連續的空閑塊合并;而 pool中分配的緩沖區組合或者拆分可能無法形成新的空閑塊,因此一旦分配后不能重新合并,因此將增大內存碎片。
?
2.2????? 消息 pool 的管理
消息緩沖區的結構和 heap緩沖區的結構基本一致,如下:
只是控制頭中的信息稍有差別而已。
?
消息 pool的分配示意如下圖:
?
由于 8個 size大小無法控制,其由配置文件決定,因此內核無法根據緩沖區大小自動進行合并和分拆操作,緩沖區一經分配,釋放后即使空閑也不能重組。當反復的分配釋放后,可能造成新分配緩沖區時,細小的緩沖區無法滿足大塊緩沖區的需求,造成內存空間耗盡的假象。
?
因此 pool size的大小應該合理選取,均勻分布,根據實際情況調整 size的配置,以達到最佳的 pool利用率。
總結
以上是生活随笔為你收集整理的OSE的HEAP和POOL的管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Downie4.6.4视频下载工具
- 下一篇: matlab杀毒扫描不动,我的电脑每次用