支持網(wǎng)絡(luò )傳感器的嵌入式操作系統設計
引言
網(wǎng)絡(luò )傳感器是集傳感器技術(shù)、嵌入式計算技術(shù)、現代網(wǎng)絡(luò )及通信技術(shù)、分布式信息處理技術(shù)于一身的資源受限的嵌入式設備,是“普適計算”在微型嵌入式領(lǐng)域的一種重要應用模式。
網(wǎng)絡(luò )傳感器的研究過(guò)去一直受限于硬件平臺而發(fā)展緩慢。隨著(zhù)半導體技術(shù)、通信技術(shù)、微電子技術(shù)和微機械技術(shù)的不斷進(jìn)步,低功耗、低價(jià)格、多功能的傳感器網(wǎng)絡(luò )系統得到了快速發(fā)展,使得制作微小、有彈性、低功耗的傳感器節點(diǎn)成為現實(shí)。
背景
應用特點(diǎn)
網(wǎng)絡(luò )傳感器應用有其自身的特點(diǎn),主要有以下幾個(gè)方面:小尺寸和低功耗、并發(fā)密集操作、有限的物理并行性和控制層次、多樣化的設計和使用。一方面,傳感器資源極其有限,給底層嵌入式程序設計帶來(lái)較大的限制;另一方面,傳感器上運行的應用程序和系統內核通常是緊密結合在一起的,且運行時(shí)需要的任務(wù)數量、執行時(shí)間、執行結果以及內存消耗等是可以較好預計的。
此外,傳感器種類(lèi)繁多,針對不同應用場(chǎng)合需要不同種類(lèi)的傳感器;在軍事應用、空間探索等特定應用場(chǎng)合下,更是需要大量的不同種類(lèi)的傳感器協(xié)同合作來(lái)完成特定應用事件。因而傳感器上運行的軟件系統如果能夠具備相對較好的靈活性、可配置性和可重用性,將能更好地滿(mǎn)足應用需求。
現有嵌入式OS比較
當前存在眾多的嵌入式操作系統,其中具有代表性的如Vxwork、WindowsCE,pSOS和Neculeus等,它們的優(yōu)點(diǎn)是:功能強大;具有豐富的API和嵌入式應用軟件;具備良好的實(shí)時(shí)性能,尤以Vxwork為代表;具備良好的穩定性。缺點(diǎn)是:價(jià)格昂貴;源代碼不公開(kāi),以及由此導致的諸如對設備的支持、應用軟件的移植等一系列的問(wèn)題;另外對于傳感器器件來(lái)說(shuō),這些嵌入式OS都顯得過(guò)于“龐大”了一些。 uc/os和嵌入式Linux當前正獲得越來(lái)越廣泛的應用。
它們的優(yōu)點(diǎn)是:執行效率高、占用空間小、可擴展性能好,同時(shí)是免費且源代碼公開(kāi)的。uc/os具備良好的實(shí)時(shí)性能,嵌入式Linux的實(shí)時(shí)性能有待進(jìn)一步提高。缺點(diǎn)是:它們都是相對通用的嵌入式操作系統,不能完全適應傳感器應用領(lǐng)域的需求,如嵌入式Linux最小仍然需要上百K的ROM和RAM空間才能工作,而uc/os的內核盡管可縮減至幾K,但是對于某些傳感器應用來(lái)說(shuō),仍然顯得不夠精簡(jiǎn)。
UC Berkeley設計開(kāi)發(fā)了無(wú)線(xiàn)傳感器網(wǎng)絡(luò )應用的嵌入式操作系統TinyOS以及系統編程語(yǔ)言nesC。我們在剖析現有嵌入式OS特別是TinyOS的基礎之上,設計實(shí)現了支持網(wǎng)絡(luò )傳感器的微型嵌入式操作系統γOS,并開(kāi)發(fā)了系統編程語(yǔ)言AntC。
γOS設計
γOS是以網(wǎng)絡(luò )傳感器應用為目標的微型嵌入式操作系統,針對網(wǎng)絡(luò )傳感器的前述應用特點(diǎn),γOS的設計具備幾個(gè)特性:支持足夠微小的硬件系統,便于傳感器設備在檢測環(huán)境中的任意撒布;支持足夠低的系統功耗,保證傳感器設備具備足夠長(cháng)的生命期;支持集成可與物理世界交互的傳感設備,實(shí)現數據的采集和傳輸;同時(shí)兼顧適度靈活的可重用性、可配置性。
γOS還必須解決傳感器網(wǎng)絡(luò )的兩個(gè)突出問(wèn)題:
1)由于網(wǎng)絡(luò )傳感器操作的并發(fā)密集性,因而必須保證眾多不同數據流的并發(fā)即時(shí)傳輸;
2)系統必須提供高效的模塊化管理策略,具體硬件設備和具體應用組件必須緊密地結合在一起,減小處理和存儲開(kāi)銷(xiāo)。為此,γOS的設計重點(diǎn)主要集中在以下幾個(gè)方面:低能耗的微型內核;微線(xiàn)程的系統架構;組件化的功能設計;支持傳感通信的接口。
支持低能耗的微型內核
為了降低能耗,γOS設計了一種相對簡(jiǎn)單的內核機制,它由兩部分組成:系統初始化代碼以及一個(gè)微小的核心調度組件。系統初始化代碼具有平臺相關(guān)性;核心調度組件實(shí)現基于優(yōu)先級的兩級調度機制,它分別由兩個(gè)調度隊列組成:事件隊列和任務(wù)隊列。事件隊列優(yōu)先級高于任務(wù)隊列的優(yōu)先級,每個(gè)隊列內部基于FIFO調度機制。

圖1 γOS的內核調度示意圖
此外,為了降低能耗,在借鑒TinyOS的能耗管理算法的基礎之上,設計實(shí)現了能耗控制組件:動(dòng)態(tài)電源管理DPM組件和動(dòng)態(tài)電壓調整DVS組件。
{{分頁(yè)}}
微線(xiàn)程的系統架構

圖2 微線(xiàn)程的系統架構
如圖2所示,γOS的通過(guò)組件來(lái)實(shí)現基于事件驅動(dòng)模式的微線(xiàn)程系統架構,采用事件觸發(fā)去喚醒相應的功能組件工作。每個(gè)功能組件可以由以下幾個(gè)部分組成:事件處理函數 用以實(shí)現對底層硬件中斷的處理,如MCU外部中斷、定時(shí)器中斷等,它可以向核心調度組件提交任務(wù),但并不等待任務(wù)的執行。事件優(yōu)先級高,可搶占任務(wù)執行,可以傳遞。它提供了一個(gè)簡(jiǎn)明的方法用于抽象軟硬件之間的邊界,使得支持硬件中斷變得非常簡(jiǎn)單。
命令 用以執行對底層組件的操作,是非阻塞的,且必須向調用者返回命令執行的結果(成功或失敗)。
任務(wù) 用于表示組件中計算相對集中的一組操作。任務(wù)不具有搶占性,任務(wù)與任務(wù)之間是原子化的,以先進(jìn)先出的方式執行,即一個(gè)任務(wù)必須執行完之后才能執行下一個(gè)任務(wù)。但任務(wù)可以被事件處理函數搶占。
組件狀態(tài) 用以表示組件當前的工作狀態(tài),可以被自己的功能函數或其他組件所參考。
利用微線(xiàn)程的系統架構,γOS可有效降低上下文切換代價(jià);同時(shí),通過(guò)引入原子語(yǔ)句來(lái)處理任務(wù)和事件,甚至事件和事件之間的并發(fā)操作,實(shí)現微線(xiàn)程異步通訊機制,有效地避免阻塞、輪詢(xún)和數據資源競爭。
組件化的功能設計
在特定應用場(chǎng)合下,需要大量的不同種類(lèi)的傳感器協(xié)同合作來(lái)完成特定應用事件,因而傳感器上運行的軟件系統具備相對較好的靈活性和可配置性。
為此,γOS提供了對組件化的功能設計方式的支持。γOS可分解為一個(gè)核心調度組件和若干功能組件?,F有的功能組件主要包括:能耗控制組件如動(dòng)態(tài)電源管理 DPM組件和動(dòng)態(tài)電壓調整DVS組件,AntIP協(xié)議(支持微型嵌入式TCP/IP協(xié)議)組件,USB驅動(dòng)組件,網(wǎng)卡驅動(dòng)組件和XML分析器組件等。
根據不同應用配置不同的功能組件,以實(shí)現特定的目標。γOS支持靜態(tài)配置和動(dòng)態(tài)加載兩種方式。靜態(tài)配置組件最少可只包括一個(gè)核心調度組件,而其他的功能組件可根據相應的應用需求選擇預先靜態(tài)配置方式或者動(dòng)態(tài)加載方式。

圖3 γOS組件示意圖
{{分頁(yè)}}
支持傳感通信的接口
γOS通過(guò)AntIP組件實(shí)現對傳感器通信的接口支持,主要有支持傳感器節點(diǎn)間的對等(Peer-To-Peer)通信和組播通信模式,支持傳感器節點(diǎn)與PC間的對等通信模式和支持基于事件的異步通信處理模式。
AntIP是一個(gè)適用于8/16位機的微型嵌入式TCP/IP協(xié)議棧,它盡管去掉了許多全功能協(xié)議棧中不常用的功能,但仍然保留了網(wǎng)絡(luò )通信所必要的協(xié)議機制,支持ARP,IP,ICMP,TCP,UDP等協(xié)議,并且提供了簡(jiǎn)易的應用層接口和設備驅動(dòng)層接口。AntIP的設計借鑒了uip的設計思想。
典型應用

圖4 硬件平臺示意圖
γOS是以網(wǎng)絡(luò )傳感器應用為目標的,它可以運行在多種目標傳感器上。我們采用γOS機制,針對圖像數據采集方面的應用,設計了一套較典型的網(wǎng)絡(luò )圖像傳感器系統。該系統主要由主控模塊、存儲模塊、USBhost模塊、以太網(wǎng)模塊、攝像頭模塊和串口模塊(預留接口)組成,采用的芯片分別為Philips公司的 P89C60X2(80C51芯片)、USB控制芯片SL811HS、RAM芯片62256和NIC芯片RTL8019AS。
平臺部分初始化代碼(AntC語(yǔ)言)如下:
useSL811HS
useCamera
useRTL8019
classPlatform
{
publicstaticintInit()
{
RTL8019.Init();
if(SL811HS.UsbInit()==FALSE)
return-1;
if(Camera.CameraInit()==FALSE)
return-1;
if(Camera.CameraStart()==FALSE)
return-1;
{{分頁(yè)}}
AntIP.Init();
return1;
}
publicstaticvoidStart()
{
postAntIP.Run;
}
publicstaticvoidmain()
{
Init();
Start();
}
}
該部分代碼做了網(wǎng)卡模塊、USB模塊以及攝像頭模塊的初始化工作。
結語(yǔ)
采用γOS的網(wǎng)絡(luò )圖像傳感器的各模塊的代碼量及所需數據空間大小如表1所示。從該表中可看出γOS的核心代碼量基本接近TinyOS的核心代碼量。
表1 模塊代碼量與所需數據空間

在這篇文章中,我們簡(jiǎn)要闡述了網(wǎng)絡(luò )傳感器在普適計算環(huán)境下的應用特點(diǎn),介紹了一個(gè)以網(wǎng)絡(luò )傳感器為應用目標的嵌入式操作系統γOS的設計和幾個(gè)特點(diǎn),并建立了一個(gè)典型應用平臺,最后簡(jiǎn)要給出了γOS在該平臺上的性能。
評論