6 LwIP協議規範翻譯 緩衝及記憶體管理

2022-02-20 13:02:40 字數 2339 閱讀 9679

在乙個通訊系統中,記憶體緩衝管理系統必須容納各種大小的緩衝資料,其範圍從包含具有數百個位元組的資料的全尺寸tcp段到只有幾個位元組的短icmp回覆包。此外,為了避免拷貝,應該讓資料內容緩衝駐留不被網路子系統管理的記憶體中。例如應用程式記憶體或或者rom。

包緩衝是lwip乙個資料報的記憶體呈現,專門滿足特殊需求而設計的最小的堆疊。pbufs類似於bsd實現中使用的mbufs。pbuf結構體支援記憶體動態分配和靜態記憶體存放包資料。所有pbufs被一起鏈結到鍊錶中稱為pbuf鏈,乙個資料報可以跨越好幾pbufs。(乙個資料報存放連續的好幾個節點中儲存)

pbufs有三種型別,分別是pbuf_ram, pbuf rom, and pbuf_pool.圖1顯示的是pbuf_ram型別的pbuf,包資料已經儲存pbuf子系統管理的記憶體中了。如下圖1所示:

圖1圖2表示乙個pbuf鏈的例子,在鏈中第乙個pbuf的類新是pbuf_ram。第二個是pbuf_rom型別。這意味著它具有位於記憶體中的資料而不被pbuf子系統管理。如下圖2所示.

圖2第三種型別是pbuf_pool,如下圖3所示,包含在乙個固定大小的緩衝池中分配來的固定大小的pbuf,該pbuf鍊錶包含了多種型別的pbuf。

這三種型別有不同的使用者,

pbuf_pool主要用於網路裝置驅動程式,因為可以快速分配單個pbuf,所以適合在中斷程式中使用。

pbuf_rom用於應用程式傳送資料,該資料**由應用程式管理的記憶體。這些資料在pbuf移交給tcp/tp後不能被修改,因此這種類主要用於資料儲存於rom中。(因此命名為pbuf_rom).

在pbuf_rom附加頭的資料被儲存在pbuf_ram中,並被連線到pbuf_rom 的前面如圖2所示。

pbuf_ram型別的pbuf也用於當應用程式傳送動態生成的資料時。在這種情況下,pbuf系統不僅僅為應用程式資料分配記憶體,也為添=付加到該資料的頭分配。如圖1所示。pbuf系統無法預先知道在這些資料前面會附加哪樣的頭,以及假定最壞的情況。這些頭的大小在編譯的時候都是可以配置的。

本質上,傳入進來的pbuf是pbuf_pool的型別,傳出去的pbuf型別是pbuf_rom或者pbuf_ram 型別。pbuf的內部結構可以在圖1和圖3中看到。pbuf結構包含了兩個指標,兩個長度字段,乙個標誌欄位和乙個引用計數。在pbuf鏈中,next欄位是指向下乙個pbuf的指標。payload指標指向的是pbuf中資料的起始位置。len欄位表示的是在pbuf中資料內容的長度。tot_len欄位包含當前pbuf和在pbuf鏈中所有後續pbuf中len欄位總和。換句話說,tot_len欄位是len欄位和pbuf鏈中後續pbuf中的len字段值的總和。flags欄位表示pbuf的型別,ref欄位包含引用計數。 next和payload欄位是本機指標,其大小取決於所使用的處理器體系結構。兩個length欄位是16位無符號整數,flag和ref欄位是4位寬。

pbuf模組提供了操作pbuf的功能。pbuf的分配由函式pbuf_alloc()完成,它可以分配上述三種型別中的任何一種的pbuf。函式pbuf_ref()增加引用計數。通過函式pbuf_free()進行解除分配,它首先減少pbuf的引用計數。如果引用計數達到零,則釋放pbuf。 函式pbuf_realloc()縮小了pbuf,使其占用足夠的記憶體來覆蓋資料的大小。 函式pbuf_header()調整有效負載指標和長度字段,以便可以將標頭新增到pbuf中的資料之前。 函式pbuf_chain()和pbuf_dechain()用於鏈結pbuf。

支援pbuf方案的記憶體管理器是非常簡單的,它處理分配和釋放連續記憶體區並能縮減之前所分配的記憶體塊的大小。記憶體管理器使用系統中總記憶體的專用部分。這樣子可以確保網路系統不會使用所有的可以用的記憶體,且其他應用程式也不會干擾到網路系統已經使用的記憶體。

在記憶體,記憶體管理器會在每個申請的記憶體塊的頂部放置乙個小結構體來跟蹤已經分配的記憶體。這個結構體(圖4)儲存兩個指標next指標和prev,next指向下乙個已申請的記憶體空間,prev指向前乙個已申請的記憶體空間,且使用used標識來指示是否已經分配好了分配塊。

記憶體分配是通過在儲存器中搜尋足夠大以滿足所需要分配的未使用的分配塊。使用首次適應原則以便足夠大的第乙個塊被使用。當已分配的塊被釋放時,used標識被置為0。為了防止碎片,應該要檢查下乙個和上乙個分配塊的used標識,如果其中任何乙個未使用,則將塊組合成乙個較大的未使用塊。

圖4

1 LwIP協議棧規範翻譯 簡介

在過去幾年中,計算機和計算機支援裝置接之間的互聯到無線網路日趨增加。計算機已經越來越無縫的整合在了日常的裝置且 也在下降。同時,無線網路技術例如藍芽 hni 98 和ieee802.11b wlan big 97 也在新起。這就可以運用到一些極具吸引力方案區域上例如健康管理,安防,運輸,工業處理。小...

LWIP架構及LWIP協議棧

1 不管是裸機還是os 都分為三個模組 上層協議棧 包括發資料 收資料下面只考慮收資料在中斷中.os 這三者之間是 通過 mbox 通訊 sem 同步的.這三者分別屬於三個執行緒 其中乙個是中斷 裸機三者之間是通過函式呼叫實現的,這三者在同乙個執行緒內.其中乙個是中斷 2 上層 協議棧 收資料之間的...

LwIP協議棧介面

協議棧api函式 1 netconn new udp tcp struct netconn netconn new enum netconn type t 為新連線申請乙個連線結構netconn空間 2 netconn delete udp tcp err t netconn delete stru...