基于和欣嵌入式操作系統的構件化網絡協議棧
目前有兩個關鍵因素影響網絡協議棧的開發,一是性能和效率,二是開發調試方便。傳統的操作系統一般只能顧及其中的一個方面。例如在Linux、FreeBSD中,網絡協議棧作為系統內核的一部分實現,通常具有較高的通信效率,但是不方便用戶添加實現新的用戶協議及根據特殊需要對協議的實現細節調整,同時對協議代碼的維護、調試和開發也不方便。這個缺點在嵌入式領域表現得尤為突出。
由于嵌入式設備的多樣性和通信需求的多樣性,嵌入式領域的網絡協議棧的復用率非常低。本文將構件技術引入網絡協議棧的開發,并在國產和欣操作系統上實現了一個構件化的網絡協議棧,很好地解決了開發與效率的問題。
1 和欣嵌入式操作系統和CAR構件技術
1.1 和欣嵌入式操作系統
和欣操作系統基于微內核,服務動態加載。內核包括硬件驅動(串口、USB、以太網卡、無線通信模塊)、內存管理等系統基本服務,如圖1所示。TCP/IP協議棧完全由構件實現,是運行在構件平臺之上的一個服務構件。底層網卡、串口等設備得到數據之后將數據交上層服務構件處理。
和欣嵌入式操作系統是基于構件化軟件模型,構件化軟件設計思想貫穿了整個系統的設計與實現,系統實現本身就是構件模式。除內核中最底層控制部分外,所有系統功能都以構件接口形式提供。另外,操作系統對構件化軟件模型提供了必要的運行環境,來源不同的構件可以在該環境上實現互操作。系統提供了構件自動尋址/自動加載機制,用戶不必知道調用的構件程序是本地的還是來自于網上,即構件運行環境對用戶透明。構件化系統的實現,使得操作系統本身具有高度的靈活性和擴展性。和欣采用了CAR構件技術。

1.2 CAR構件技術
CAR構件技術是在總結面向對象編程、面向構件編程技術的發展歷史和經驗的基礎上,為更好地支持面向以Web服務為代表的下一代網絡應用軟件開發而發明的。CAR(Component Assembly Runtime)構件技術定義了一套網絡編程時代的構件編程模型和編程規范,它規定了一組構件間相互調用的標準,使二進制構件可自描述并能夠在運行時動態鏈接。
CAR構件技術通過二進制的封裝及動態鏈接技術解決軟件的動態升級和軟件的動態替換問題。面向構件技術對一組類的組合進行封裝,并代表完成一個或多個功能的特定服務,同時為用戶提供多個接口。整個構件隱藏了具體的實現,只用接口提供服務。這樣,在不同層次上,構件均可以將底層多個邏輯組合成高層次上粒度更大的新構件。構件之間通過約定的接口進行數據交換和信息傳遞,構件的位置相互透明,可以在同一個或不同的用戶進程空間、不同的機器甚至不同的構件上用不同的語言編寫,只要其符合事先約定的構件規范。
2 和欣操作系統上的TCP/IP協議棧的特點與實現
2.1 和欣嵌入式操作系統上TCP/IP協議棧的特點
由于嵌入式系統在硬件資源的占有量以及處理器的處理能力等方面的限制,使得TCP/IP協議的嵌入式實現與其在通用操作系統中的實現有很大不同。首先,由于嵌入式處理器的時鐘頻率低,地址、數據總線窄,導致嵌入式系統對一個通用IP 包的處理要花費更多的處理機時間,從而影響其他任務的執行。因此需要對龐大復雜的TCP/IP協議棧進行裁剪,使之具有簡單、高效的特點。同時在設計嵌入式TCP/IP協議棧時要合理控制中斷處理程序的大小,使得中斷處理程序的運行時間盡可能短;同時把那些無實時性要求和費時的工作移到主程序中執行,從而保證協議的正確執行。具體來說,就是把TCP/IP協議的處理工作放到主程序中,對網絡接口的控制芯片采用循環查詢方式,在其他中斷任務的執行間隙處理TCP/IP協議,以犧牲系統的響應時間換取系統的可靠性。再者由于嵌入式系統的存儲空間有限,一般情況下只能開辟幾KB字節的緩存區接收數據包,并且其存儲空間固定,不是動態分配的。因此,在遇到大數據包時就會出現緩沖區溢出的錯誤。通常,嵌入式系統接收的數據包類型僅為系統狀態配置包、控制動作命令包、通信控制包等,這些包容量較小。由實時數據或網頁向網絡發送的數據包比較長,但可以通過設計格式加以控制。
和欣操作系統是基于微內核的操作系統,其上的TCP/IP協議棧既可以運行在用戶態,也可以運行在內核態,具有通用接口和方便的框架,方便用戶開發適合自己領域或特殊需要的網絡協議棧。因為和欣操作系統提供了高效的進程上下文切換功能和進程間通信,所以整個網絡協議棧作為一個用戶態進程提供服務。使用前先創建網絡構件實例,然后向操作系統注冊服務。此后用戶就可以使用網絡編程接口了。如果用戶對網絡協議棧有更高的效率要求,則可以將該協議棧加載到內核態。
tcp/ip相關文章:tcp/ip是什么
評論