摘要:在內存需求分析的基礎上,闡述了LwIP TCP/IP協議棧中pbuf結構的基本原理和內存管理機制的實現。這對在嵌入式系統中實現TCP/IP協議棧,進行網絡連接有重要意義。
關鍵詞:TCP/IP協議LwIP協議棧內存管理pbuf結構
    目前,在嵌入式系統中引入TCP/IP協議棧及將嵌入式設備接入網絡,">

欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

技術頻道

嵌入式LwIP協議棧的內存管理

摘要:在內存需求分析的基礎上,闡述了LwIP TCP/IP協議棧中pbuf結構的基本原理和內存管理機制的實現。這對在嵌入式系統中實現TCP/IP協議棧,進行網絡連接有重要意義。
關鍵詞:TCP/IP協議LwIP協議棧內存管理pbuf結構
目前,在嵌入式系統中引入TCP/IP協議棧及將嵌入式設備接入網絡,已經成為嵌入式領域重要的發展方向。
TCP/IP是一種基于OSI參考模型的分層網絡體系結構,它由應用層、運輸層、網絡層、數據鏈路層、物理層組成。各層之間消息的傳遞通過數據報的形式進行。由于各層之間報頭長度不一樣。當數據在不同協議層之間傳遞時.對數據進行封裝和去封裝、增加和刪除操作將十分頻繁。
在嵌入式系統開發中也經常遇到類似問題。用戶數據從本地嵌入式設備傳輸到遠程主機的過程中,要經過各層協議,對消息的封裝、去封裝和拷貝操作幾乎是不可避免的。而通常所采用的用一段連續的內存區來存儲、傳遞數據的做法會有以下的缺陷:
(1)當從上層向下層傳遞數據時,下層協議需要對數據進行封裝,而上層在申請內存時沒有(也不應該)考慮下層的需要。這樣會導致下層協議處理時需要重新申請內存并進行內存拷貝,從而影響程序的效率。
(2)當從下層向上層傳遞數據時,下層協議專有的數據結構應當對上層協議不可見。因此也需要重新申請內存并進行內存拷貝。
(3)隨著數據的逐層處理,其內容可能有所增減,而連續內存很難處理這種動態的數據增刪。
因此,必須有一種能適應數據動態增刪、但在邏輯上又呈現連續性的數據結構,以滿足在各協議層之間傳遞數據而不需要進行內存拷貝。嵌入式TCP/IP協議棧要求簡單高效,并減少對內存的需求。這些都需要相應的內存管理機制實現。
1 LwIP協議棧中pbuf介紹
LwIP(Light weight IP)是瑞士計算機科學院Adam Dunkels等開發的一套用于嵌入式系統的開放源代碼TCP/IP協議棧。LwlP可以移植到操作系統上,也可以在無操作系統的情況下獨立運行。LwIP TCP/IP實現的重點是:在保持TCP協議主要功能的基礎上,減少對RAM的占用。這使LwIP協議棧適合在低端嵌入式系統中使用。
LwIP利用pbuf結構實現數據傳遞,它與BSD中的Mbuf很相似。pbuf的主要用途是保存在應用程序和同絡接口間互相傳遞的用戶數據。


2 LwIP內存管理的實現
在運行TCT/IP協議棧的嵌入式系統中。可以把整個系統的存儲區域分為協議棧管理的存儲器和應用程序管理的存儲器兩部分。
2.1 協議棧管理的存儲器
協議棧管理的存儲器是指TCP/IP內核能夠操作的內存區域,主要用于裝載待接收和發送的網絡數據分組。當接收到分組或者有分組要發送時,TCP/IP協議棧為這些分組分配緩存;接收到的分組交付給應用程序或者分組已經發送完畢后,對分配的緩存回收重用。協議棧分配的緩存必須能容納各種大小的報文,例如從僅僅幾個字節的ICMP回答報文到幾百個字節的TCP分段報文。
LwIP中的pbuf有四種類型:PBuF_POOL、PBUF__RAM、PBUF_ROM、PBUF_REF。這四種類型的pbuf都是從TCP/IP協議棧管理的存儲器中分配的,其中PBUF_ROM和PBUF_REF與應用程序管理的存儲區域密切相關。
PBUF_POOL是具有固定容量的pbuf,主要供網絡設備驅動使用,為收到的數據分組分配緩存。在協議棧管理的內存中初始化了一個pbuf池(PBUF_P00L),具有相同尺寸的pbuf都是從這個pbuf池中分配得到。一般使用多個PBUF_POOL鏈接成一個鏈表,用于存儲數據分組。如圖1所示。

LwIP用一個宏定義一個PBUF_P00L的大小。一個分組需要分配幾個PBUF_POOL,而在數據較少時分配一個PBUF_POOL即可。由于分配一個PBUF_P00L類型的pbuf很快,適合在中斷處理中使用,所以PBUF_POOL主要供網絡設備驅動使用,為收到的數據分組分配緩存。
應用程序發送動態產生的數據時.可以用PBUF_RAM類型的pbuf。PBUF_RAM在事先劃分好的內存堆中分配。對該內存堆的操作類似于C語言中的malloc/free。內存堆分配的結構如圖2所示。圖2中每個被分配的存儲塊附帶了一個小結構,該結構的兩個指針指向相鄰的內存塊。used標識位用來指示該內存塊的分配情況,陰影部分表示已經被分配了,此時used為1。當需要一塊N字節的存儲塊時,就對整個存儲堆進行搜索。如果找到一塊未用的(used=O)并且容量不小于N字節的區域就表示分配成功,并且置used為1。而分配的內存塊使用完后需要釋放,為了不產生碎片,相鄰且未用的內存塊需要進行合并。

PBUF_P00L和PBUF_RAM都可以根據需要從存儲器中動態分配,這種分配機制又稱為動態存儲器分配機制。該分配機制不僅能為應用程序的數據分配存儲空間,而且能為協議首部分配存儲空間。在層與層之間傳遞數據時,真正需要修改的只是數據的格式,使之符合各層的規范,而數據本身不需要變動。實際上數據格式反應的是各層的首部,當數據在各層之間傳送時,需要動態地添加和移去相應的首部,用動態分配機制可以很好地實現。
2.2 應用程序管理的存儲器
應用程序管理的存儲器是指應用程序管理、操作的存儲區域.一般從該區域為應用程序發送數據分配緩存。雖然該存儲區域不由TCP/IP協議棧管理,但在不嚴格分層的協議棧中,該存儲區域必須與TCP/IP管理的存儲器協同工作。為節省內存,LwIP不采取分級訪問模式,而是通過指針訪問數據。這樣就不需要為數據的傳遞分配存儲空間。應用程序發送的數據在交付LwIP后,LwIP就認為這些數據是不能被改動的,因此應用程序的數據被認為是永遠存在并且不能被改變的。這一點與ROM很相似.類型名PBUF_ROM也由此而來。
如圖3所示,PBUF_ROM的數據指針payload指向External memory(外部存儲區)。Extemal memory指不由TCP/IP協議棧管理的存儲區,它可以是應用程序管理的存儲器為用戶數據分配的緩存,也可以是ROM區域,如靜態網頁中的字符串常量等。由于由應用程序交付的數據不能被改動,因此就需要動態地分配一個PBUF_RAM來裝載協議的首部,然后將PBUF_RAM(首部)添加到PBUF_ROM(數據)的前面。這樣就構成了一個完整的數據分組。

圖3中的PBUF_ROM還可以是PBUF_REF。PBUF_REF和PBUF_ROM的特性非常相似,都可以實現數據的零拷貝。但是當發送的數據需要排隊時就表現出PBUF_REF的特性了。例如在發送分組時,待發送的分組需要在ARP隊列中排隊,假如這些分組中有PBUF_ROM類型的pbuf,則說明該類型pbuf中的數據位于應用程序的存儲區域,是通過指針被PBUF_ROM引用的。這樣直到分組被處理之前,被引用的應用程序的這塊存儲區域都不能另作它用。在此情況下要用到PBUF_REF類型的pbuf。在排隊時,LwIP會為PBUF_REF類型的pbuf分配緩存(PBUF_POOL或PBUF_RAM),并將引用的應用程序的數據拷貝到分配的緩存中。這樣應用程序中被引用數據的存儲區域就能被釋放。
pbuf結構實現了層與層之間的數據傳遞,但其非常消耗內存,并且需要TCP/IP協議棧為之分配存儲空間,例如協議控制udp_pcb、tep_pcb等。通常,嵌入式TCP/IP協議棧都不是嚴格分層的,盡量減少對內存的需求是實現嵌入式TCP/IP的重點,內核的內存管理機制直接關系到嵌入式TCP/IP協議棧的性能。

文章版權歸西部工控xbgk所有,未經許可不得轉載。

欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

      国产精品成人免费| 欧美一级在线视频| 国产欧美在线播放| 久久一区二区三区四区| 亚洲一卡二卡三卡四卡五卡| 影音先锋亚洲电影| 国产亚洲亚洲| 国产精品美女| 欧美日韩国产欧| 欧美电影资源| 久久阴道视频| 久久久精品免费视频| 亚洲欧美日韩精品久久亚洲区| 亚洲国产免费| 在线欧美一区| 激情六月婷婷综合| 国产日韩欧美日韩大片| 欧美系列精品| 国产精品国产三级国产a| 欧美激情视频免费观看| 美女视频一区免费观看| 久久人91精品久久久久久不卡| 午夜精品久久久久久久蜜桃app| 99xxxx成人网| 99精品福利视频| 一本色道婷婷久久欧美| av成人免费| 洋洋av久久久久久久一区| 亚洲精品一区二区三区av| 在线日韩中文字幕| 亚洲人在线视频| 亚洲理论在线| 亚洲一级黄色av| 亚洲欧美日韩天堂一区二区| 亚洲尤物在线视频观看| 亚洲欧美国产三级| 欧美综合国产| 毛片一区二区| 欧美日韩国产影院| 国产精品亚洲视频| 国产午夜精品一区二区三区欧美| 国产日韩欧美日韩大片| 一区二区在线免费观看| 亚洲东热激情| 一区二区三区视频观看| 午夜精品一区二区三区在线| 欧美一区二区三区在线视频| 久久久久综合网| 久久精品水蜜桃av综合天堂| 麻豆精品一区二区综合av| 欧美精品成人| 国产欧美日韩免费| 亚洲国产日韩综合一区| 一区二区三区精品在线| 欧美一级久久| 欧美精品v日韩精品v韩国精品v| 欧美性猛交xxxx乱大交蜜桃| 韩国亚洲精品| 亚洲无亚洲人成网站77777 | 久久国产日韩欧美| 欧美国产高潮xxxx1819| 国产欧美精品一区二区色综合| 精品二区视频| 亚洲摸下面视频| 你懂的网址国产 欧美| 国产精品久久久久一区| 亚洲国产成人久久| 欧美亚洲系列| 欧美日韩亚洲91| 一区二区在线视频播放| 亚洲欧美日韩在线播放| 裸体女人亚洲精品一区| 国产日韩欧美夫妻视频在线观看| 日韩视频免费观看| 免费欧美电影| 激情综合在线| 午夜精品电影| 欧美视频一区二区在线观看| 亚洲国产精品传媒在线观看| 欧美一区二区三区播放老司机| 欧美精品成人在线| 激情久久久久久久| 久久大逼视频| 国产亚洲精品久久久| 亚洲一区二区三区午夜| 欧美日韩中文| 99精品国产福利在线观看免费| 久久综合精品一区| 国产一区在线观看视频| 欧美中文字幕视频| 国产欧美日韩视频| 亚洲中无吗在线| 国产精品欧美日韩一区二区| 亚洲午夜高清视频| 欧美视频精品一区| 中文av字幕一区| 国产精品扒开腿做爽爽爽视频| 99精品99| 国产精品美女主播| 亚洲综合三区| 国产日韩精品一区| 欧美在线免费一级片| 国模吧视频一区| 久久色在线播放| 亚洲成人中文| 欧美日本在线看| 亚洲图片欧洲图片日韩av| 国产精品成人av性教育| 亚洲专区在线| 国模大胆一区二区三区| 免费视频最近日韩| 日韩一级在线观看| 国产精品毛片a∨一区二区三区| 亚洲欧美国产高清| 国语自产精品视频在线看8查询8 | 国产午夜精品全部视频播放| 欧美一区二区三区日韩| 韩国精品一区二区三区| 欧美激情精品久久久久久大尺度| 日韩亚洲精品在线| 国产精品一区二区三区四区五区| 欧美一乱一性一交一视频| 国产精品男人爽免费视频1| 欧美自拍偷拍午夜视频| 亚洲欧洲三级| 国产欧美一区二区精品性| 美玉足脚交一区二区三区图片| 亚洲免费精彩视频| 国产视频一区二区三区在线观看| 老牛影视一区二区三区| 国产精品99久久久久久www| 在线播放国产一区中文字幕剧情欧美 | 国产一区二区黄| 欧美激情在线有限公司| 午夜久久99| 亚洲精品视频在线看| 国产伦精品一区二区三区高清| 久久尤物视频| 午夜精品一区二区三区在线| 在线观看国产欧美| 国产日韩欧美一区在线| 欧美视频成人| 欧美激情综合色综合啪啪| 翔田千里一区二区| 一区二区三区欧美日韩| 亚洲经典视频在线观看| 国产亚洲一区二区三区在线播放| 欧美激情欧美激情在线五月| 久久久久久久波多野高潮日日| 亚洲午夜影视影院在线观看| 日韩视频国产视频| 亚洲国产欧美一区二区三区久久 | 在线观看日韩av电影| 国产欧美精品xxxx另类| 欧美日韩一区二区视频在线观看| 免费亚洲电影在线| 久久久精品午夜少妇| 先锋影音久久| 欧美亚洲在线观看| 午夜精品视频在线| 香港久久久电影| 亚洲欧美中文另类| 午夜亚洲视频| 小黄鸭精品aⅴ导航网站入口| 一本久久a久久精品亚洲| 亚洲另类视频| 日韩亚洲欧美高清| 一卡二卡3卡四卡高清精品视频| 亚洲激情网站| 亚洲九九爱视频| 在线亚洲一区观看| 亚洲中字黄色| 午夜欧美大片免费观看| 午夜精品区一区二区三| 性欧美video另类hd性玩具| 亚洲免费视频网站| 欧美专区亚洲专区| 久久久亚洲成人| 欧美国产综合| 欧美日韩三区四区| 国产精品一级在线| 好吊日精品视频| 亚洲国产成人精品女人久久久 | 这里只有精品电影| 中国日韩欧美久久久久久久久| 亚洲一区二区3| 久久成人免费| 欧美国产一区二区| 国产精品美女黄网| 黄色亚洲网站| 这里只有精品视频在线| 性色av一区二区三区在线观看| 久久精品欧美日韩精品| 欧美第十八页| 国产精品女主播在线观看| 激情综合亚洲| 亚洲女同在线| 欧美成人免费网| 国产免费观看久久黄| 亚洲韩国一区二区三区|