欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: LwIP TCP/IP協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)_中文譯稿(共42頁pdf下載) [打印本頁]

作者: jinyang96    時(shí)間: 2018-12-1 11:13
標(biāo)題: LwIP TCP/IP協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)_中文譯稿(共42頁pdf下載)
最近開發(fā)需要使用LwIP協(xié)議,搜集到了[瑞典]Adam Dunkels著的書籍,發(fā)現(xiàn)有中文翻譯版,分享一波。

LwIP 是 TCP/IP 協(xié)議棧的一個(gè)實(shí)現(xiàn)。它的目的是減少內(nèi)存使用率和代碼大小,使 LwIP 適用于資源受限系統(tǒng)比如嵌入式系統(tǒng)。為了減少處理和內(nèi)存需求,LwIP 使用不需要任何數(shù)據(jù)復(fù)制的經(jīng)過裁剪的 API。
本文描述了 LwIP 的設(shè)計(jì)與實(shí)現(xiàn)。描述了在協(xié)議棧實(shí)現(xiàn)中以及像內(nèi)存與緩沖管理這樣的子系統(tǒng)中使用的算法和數(shù)據(jù)結(jié)構(gòu)。本文還包括 LwIP 的參考手冊(cè)以及使用 LwIP 的代碼例子。


圖 2 所示的pbuf 是一個(gè)被鏈接的 pbuf例子,在這個(gè) pbuf 鏈中第一個(gè) pbuf是 PBUF RAM 類型,第二個(gè)是 PBUF ROM 類型,這意味著它所擁有的數(shù)據(jù)存儲(chǔ)在 pbuf子系統(tǒng)不能管理的存儲(chǔ)區(qū):

圖 2  一個(gè)PBUF RAM類型的 pbuf鏈接了一個(gè)數(shù)據(jù)存儲(chǔ)在外部存儲(chǔ)區(qū)的PBUF ROM類型的pbuf

第三種 pbuf類型,PBUF POOL,圖 3 所示,它由分配自固定大小的 pbufs池里的固定大小的 pbufs組成。一個(gè) pbuf鏈可以由 pbufs 的不同類型組成。


這三種類型擁有不同的使用目的。PBUF POOL 主要用于網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)層,因?yàn)榉峙湟粋(gè) pbuf 的操作可以快速完成,所以非常適合用于中斷處理。PBUF ROM 類型的 pbufs 用于應(yīng)用程序要發(fā)送的數(shù)據(jù)放置在應(yīng)用程序管理的存儲(chǔ)區(qū)的情況。在 pbuf已經(jīng)移交給 TCP/IP 協(xié)議棧后,這些數(shù)據(jù)是不能被編輯修改的,因此這種 pbuf 類型主要用于數(shù)據(jù)被放置在 ROM 中的情況(因此名字是 PBUF ROM)。為 PBUF ROM 類型的pbuf 數(shù)據(jù)預(yù)置的包頭存儲(chǔ)在一個(gè) PBUF RAM 類型的 pbuf中,這個(gè) pbuf 被鏈接到這個(gè) PBUF ROM 類型的pbuf 前面,如圖 2 所示。
PBUF RAM類型的pbuf還用于應(yīng)用程序發(fā)送的數(shù)據(jù)被動(dòng)態(tài)生成的情況。在這種情況下。
pbuf 系統(tǒng)不僅為應(yīng)用數(shù)據(jù)分配內(nèi)存,還要給為這些數(shù)據(jù)預(yù)置的包頭分配內(nèi)存,見圖 1。pbuf系統(tǒng)不可能預(yù)先知道為這些數(shù)據(jù)預(yù)置什么樣的包頭,因而考慮最壞的情況。包頭大小在編譯時(shí)是可配置的。其實(shí),收到的 pbufs是 PBUF POOL 類型,發(fā)送出的 pbufs是 PBUF ROM 或 PBUF RAM類型。

pbuf 的內(nèi)部結(jié)構(gòu)參見圖 1 到圖3。pbuf結(jié)構(gòu)包括兩個(gè)指針,兩個(gè)長(zhǎng)度字段,一個(gè)標(biāo)志字段和一個(gè)引用計(jì)數(shù)(reference count)。next 字段是一個(gè)指向 pbuf 鏈中下一個(gè) pbuf 的指針。payload 指針指向 pbuf 中數(shù)據(jù)的開始位置。len 字段包含 pbuf中數(shù)據(jù)內(nèi)容的長(zhǎng)度。tot_len 字段包含當(dāng)前 pbuf 的長(zhǎng)度與在這個(gè) pbuf 鏈中隨后的所有 pbufs 的 len 字段之和。換句話說,tot_len 字段是 len 字段與 pbuf 鏈中隨后一個(gè) pbuf 的 tot_len 字段的和。flags 字段標(biāo)識(shí) pbuf的類型,ref字段包含一個(gè)引用計(jì)數(shù)。next 和payload 字段是本地指針,它們占用的字節(jié)數(shù)與所使用的處理器架構(gòu)有關(guān)。兩個(gè)長(zhǎng)度字段為 16 位無符號(hào)整形,flags 和 ref 字段是 4 位寬。pbuf 結(jié)構(gòu)的實(shí)際大小與所使用的處理器架構(gòu)下的指針大小及最小對(duì)齊方式有關(guān)。在 32 位指針及 4 字節(jié)對(duì)齊的架構(gòu)里,pbuf 的大小為 16 個(gè)字節(jié)長(zhǎng),在 16 位指針及 1 字節(jié)對(duì)齊的架構(gòu)里,pbuf 為9 個(gè)字節(jié)長(zhǎng)。 pbuf 模塊提供了操作 pbufs 的函數(shù)。分配一個(gè) pbuf 使用 pbuf_alloc()函數(shù),該函數(shù)能夠分配上面描述的三種類型中的任一類型 pbufs。pbuf_ref()函數(shù)增加引用計(jì)數(shù)。回收 pbuf 使用pbuf_free()函數(shù),該函數(shù)首先要減少 pbuf 索引計(jì)數(shù)(reference count)。如果引用計(jì)數(shù)已經(jīng)減為 0,這個(gè) pbuf 被回收。pbuf_realloc()函數(shù)可以收縮 pbuf 大小,以恰好夠用的內(nèi)存封裝數(shù)據(jù)。pbuf_header()函數(shù)調(diào)整 payload 指針和長(zhǎng)度字段以便為 pbuf 中的數(shù)據(jù)預(yù)置包頭。pbuf_chain()與 pbuf_dechain()函數(shù)用于鏈接 pbufs。

6.2 內(nèi)存管理
內(nèi)存管理模塊支撐的 pbuf 機(jī)制很簡(jiǎn)單。它負(fù)責(zé)處理內(nèi)存連續(xù)區(qū)域的分配和回收以及收縮已分配內(nèi)存塊的大小。內(nèi)存管理模塊使用系統(tǒng)內(nèi)存的一部分作為自己的專用區(qū)域,這確保了網(wǎng)絡(luò)系統(tǒng)不會(huì)使用系統(tǒng)中所有可用內(nèi)存,即使網(wǎng)絡(luò)系統(tǒng)使用了所有自己的內(nèi)存,也不會(huì)擾亂其它程序的操作。
在內(nèi)部,內(nèi)存管理模塊通過在每一個(gè)內(nèi)存分配塊的頂部放置一個(gè)比較小的結(jié)構(gòu)體來保存內(nèi)存分配紀(jì)錄。這個(gè)結(jié)構(gòu)體擁有三個(gè)成員變量,兩個(gè)指針一個(gè)標(biāo)志,見圖 4。next 與 prev分別指向內(nèi)存的下一個(gè)和上一個(gè)分配塊,used標(biāo)志標(biāo)示該內(nèi)存塊是否已被分配。

完整的pdf格式文檔51黑下載地址(共42頁):
LwIP協(xié)議棧的設(shè)計(jì)與實(shí)現(xiàn)_中文譯稿.pdf (618.87 KB, 下載次數(shù): 80)



作者: jxchen    時(shí)間: 2019-1-31 18:39
感謝!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: woaiproteus    時(shí)間: 2019-2-14 12:51
感謝!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: hellowC8051    時(shí)間: 2019-2-15 08:34
謝謝分享!!!
作者: clover12345678    時(shí)間: 2019-5-14 19:29
謝謝分享,。。。。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1