日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OSE的HEAP和POOL的管理

發布時間:2024/3/26 编程问答 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。