中國信息化培訓(xùn)中心

7x24小時咨詢熱線

400-660-3310

當(dāng)前位置 : 好學(xué)校 中國信息化培訓(xùn)中心 學(xué)習(xí)資訊 資訊詳情

物聯(lián)網(wǎng)操作系統(tǒng)

2013-09-10

無線傳感器網(wǎng)絡(luò)中的操作系統(tǒng)是一個位于節(jié)點硬件和應(yīng)用程序之間的軟件層,它給應(yīng)用程序開發(fā)者提供了基本的編程理念。操作系統(tǒng)的主要作用是確保應(yīng)用程序能與硬件資源進行交互、執(zhí)行和優(yōu)化任務(wù),在多種應(yīng)用程序和服務(wù)程序之間做選擇,并試圖獲取資源。

其他功能還包括:

內(nèi)存管理。

電源管理。

文檔管理。

建立關(guān)系網(wǎng)絡(luò)。

一套編程環(huán)境和工具——命令、命令解釋器、命令編輯器、編譯器、調(diào)試器等,確保用戶能開發(fā)、調(diào)試和執(zhí)行用戶的程序。

??進入操作系統(tǒng)訪問敏感資源的合法入口,如輸入組件。

傳統(tǒng)上,操作系統(tǒng)可分為單任務(wù)、多任務(wù)、單用戶和多用戶操作系統(tǒng)。一個單任務(wù)操作系統(tǒng)一次只能執(zhí)行一個任務(wù),然而一個多任務(wù)操作系統(tǒng)能同時執(zhí)行多個任務(wù)。多任務(wù)操作系統(tǒng)需要大量的內(nèi)存來管理多個任務(wù)的狀態(tài),并使具有不同復(fù)雜性的任務(wù)并行執(zhí)行。例如,在一個無線傳感器節(jié)點中,處理器子系統(tǒng)與通信子系統(tǒng)相互作用的同時也可以與傳感器子系統(tǒng)相互作用。一個多任務(wù)操作系統(tǒng)是這種類型環(huán)境的佳選擇。然而,由于有限的資源,并行處理對資源的開銷可能無法承擔(dān)。在單任務(wù)操作系統(tǒng)中一次只能執(zhí)行一個任務(wù),因此目標(biāo)任務(wù)執(zhí)行持續(xù)時間短。在單用戶操作系統(tǒng)中,在同一時間只有一個用戶能使用系統(tǒng)里的資源,然而一個多用戶操作系統(tǒng)允許多個用戶同時共享系統(tǒng)里的資源。

一個特定操作系統(tǒng)的選擇取決于很多因素,在接下來的內(nèi)容中,將會討論典型的功能性和非功能性方面。

1.功能性方面

1)數(shù)據(jù)類型

在無線傳感器網(wǎng)絡(luò)中,不同子系統(tǒng)之間的通信是至關(guān)重要的。由于各種原因這些子系

統(tǒng)相互通信,例如交換數(shù)據(jù)、托管功能和信號。相互作用通過精心制定的協(xié)議和數(shù)據(jù)類型

而產(chǎn)生,并且它們都是由操作系統(tǒng)來支持的。復(fù)雜的數(shù)據(jù)結(jié)構(gòu)具有較強的表達能力但消耗

資源,然而簡單的數(shù)據(jù)結(jié)構(gòu)能節(jié)約資源但表達能力有限。在無線傳感器網(wǎng)絡(luò)中幾乎所有現(xiàn)

有的操作系統(tǒng)或運行環(huán)境都支持C語言編程和一些復(fù)雜的數(shù)據(jù)類型,如結(jié)構(gòu)體和枚舉的原

始數(shù)據(jù)類型。

2)調(diào)度

任務(wù)調(diào)度是操作系統(tǒng)中的一個基本功能,任務(wù)如何有效地組織、確定優(yōu)先級并執(zhí)行,這些決定了操作系統(tǒng)的效率。

從廣義上講,有兩種調(diào)度機制:基于排隊和循環(huán)調(diào)度。在排隊調(diào)度中,來自各予系統(tǒng)的任務(wù)是暫時存儲在隊列中,并根據(jù)預(yù)定義的規(guī)則串行執(zhí)行。有些操作系統(tǒng)對任務(wù)指定優(yōu)先級,使它們可以優(yōu)先被考慮。

基于隊列調(diào)度,可進一步分為先出和排序隊列。在一個先入先出的系統(tǒng)中任務(wù)是按照它們抵達的時間來執(zhí)行的:先到達的任務(wù)將會先被執(zhí)行,確保處理器是閑置的。一個非搶占的操作系統(tǒng)在另一個任務(wù)沒有完成前是不能執(zhí)行其他任務(wù)的,然而在優(yōu)先級的操作系統(tǒng)中,一個更高優(yōu)先級的任務(wù)可能中斷低優(yōu)先級任務(wù)。在一個有序的隊列計劃中,隊列中的任務(wù)是根據(jù)預(yù)定的準(zhǔn)則進行排序。一種方法是根據(jù)它們的預(yù)估時間來排序任務(wù),這種方法能防止持續(xù)時間長的任務(wù)中斷持續(xù)時間短的任務(wù),該方法也被稱為短工作優(yōu)先規(guī)則( SJF)。在SJF計劃中,排序會帶來系統(tǒng)開銷,因為每個隊列中的任務(wù)必須進行評估,估計執(zhí)行期限,并據(jù)此進行排序任務(wù)。

先入先出的系統(tǒng)( FIFO)是簡單和經(jīng)濟的,因為它會帶來低的系統(tǒng)開銷。然而,先入先出的系統(tǒng)可能對待任務(wù)不公平,因為持續(xù)時間長的任務(wù)可能會在很長一段時間內(nèi)阻礙持續(xù)時間短的任務(wù)。

循環(huán)調(diào)度是一種分時調(diào)度技術(shù),它可以并發(fā)處理多個任務(wù)。調(diào)度程序通過把時間分解成時間片來定義時間框架,并以多路復(fù)用方式把任務(wù)分配給各個時間片。這樣所有的任務(wù)都朝著完成的方向運行。

不管任務(wù)如何執(zhí)行,一個調(diào)度器可以是一個非搶占式或搶占式調(diào)度。嚴(yán)格意義上的非搶占式調(diào)度,任務(wù)從執(zhí)行一直到結(jié)束不會被另一個任務(wù)中斷。相反,嚴(yán)格意義上的搶占式調(diào)度決定任務(wù)之間的時間優(yōu)先順序,允許更高優(yōu)先級的任務(wù)中斷低優(yōu)先級的任務(wù)。也有所謂的“禮貌先發(fā)制人( politely-preemptive)”的調(diào)度,即使任務(wù)可以被中斷,但如果它是在一個關(guān)鍵部分,調(diào)度程序也不會中斷這個操作。

3)棧

棧是一種數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中它通過將一個數(shù)據(jù)輸入到另一個數(shù)據(jù)來暫時存儲數(shù)據(jù)結(jié)構(gòu),訪問對象遵循后進先出的原則。當(dāng)它開始執(zhí)行子程序前,處理器內(nèi)核使用棧來存儲系統(tǒng)狀態(tài)信息,運用這個方法可以記住當(dāng)子程序完成后程序返回的地址。通過存儲當(dāng)前子程序棧頂?shù)臓顟B(tài),子程序可以再一次調(diào)用其他子程序。當(dāng)該子程序完成后,處理器彈出棧頂?shù)刂?,跳回到調(diào)用入口。

在一個多線程的操作系統(tǒng)中,每個線程都需要它自己的棧管理狀態(tài)信息,這就是為什么在無線傳感器網(wǎng)絡(luò)中多線程操作系統(tǒng)如此昂貴的一個原因。

4)系統(tǒng)調(diào)用

操作系統(tǒng)提供了一些確保關(guān)注分離的基本功能,即需要訪問硬件資源和額外的底層服務(wù)的訪問機制的實施細(xì)節(jié)。用戶調(diào)用這些操作,他們希望在訪問硬件資源如傳感器、看門狗定時器或者進行無線收發(fā)時,不需要考慮硬件是如何進行訪問的。

5)中斷處理

一個中斷是由硬件設(shè)備產(chǎn)生的異步信號,使處理器中斷執(zhí)行當(dāng)前的指令,并調(diào)用相應(yīng)的中斷處理程序。處理器把進程被中斷的狀態(tài)存儲在堆棧中,并將執(zhí)行中斷處理子程序。例如,當(dāng)一個通信子系統(tǒng)收到一個需要立即處理的數(shù)據(jù)包時可能會產(chǎn)生一個中斷信號。該處理器子系統(tǒng)必須暫停當(dāng)前通信進程的執(zhí)行,在操作系統(tǒng)中調(diào)用適當(dāng)?shù)哪K來處理數(shù)據(jù)包,處理完數(shù)據(jù)包后再返回執(zhí)行通信進程。

另外,硬件設(shè)備在操作系統(tǒng)中可以定義多個中斷標(biāo)志。在某些情況下,操作系統(tǒng)本身可以產(chǎn)生周期性中斷,用處理器來監(jiān)控硬件資源的狀態(tài),發(fā)現(xiàn)硬件中斷標(biāo)志,并處理相應(yīng)的中斷事件。

任務(wù)可以有不同的優(yōu)先級,同樣,中斷信號也可以有不同的優(yōu)先級,一個高優(yōu)先級的中斷可以中斷低優(yōu)先級的中斷。在這樣的系統(tǒng)中,程序可以選擇設(shè)置中斷屏蔽來避免被中斷。中斷屏蔽可以防止程序被一些不相關(guān)的低級別中斷所中斷。但屏蔽中斷可能存在破壞數(shù)據(jù)的危險。而一些操作系統(tǒng)在關(guān)鍵的操作中必須屏蔽中斷。

6)多線程

一個線程是一個處理器或一個程序在執(zhí)行過程中所采取的路徑。在一個不可中斷操作系統(tǒng)的單一任務(wù)中,任務(wù)是單一的,并且只有一個執(zhí)行線程。在多線程環(huán)境中,一個任務(wù)可以被分為多個邏輯塊,可相互獨立的并發(fā)執(zhí)行。同樣,不同來源的多個任務(wù)也可并發(fā)執(zhí)行。如果有必要,線程的相同任務(wù)可以共享一個共同的數(shù)據(jù)和地址空間來互相溝通。

一個多線程的操作系統(tǒng)主要有兩個優(yōu)勢:

(1)任務(wù)之間互不阻止,這一點對于處理與任務(wù)有關(guān)的輸入/輸出系統(tǒng)特別重要。

(2)短期任務(wù)可以與長期任務(wù)一起執(zhí)行。

因為線程具有占有資源的性質(zhì),它們不能被無休止地創(chuàng)建。創(chuàng)建線程能降低處理器的執(zhí)行速度,可能沒有足夠的資源來分配大量的線程。因此,一些操作系統(tǒng)只能支持有限數(shù)量的線程,并把它們置入緩沖區(qū)中。緩沖區(qū)中的每一線程都等待分配任務(wù),一旦得到請求,緩沖區(qū)就會分配一個可用的線程,直到任務(wù)完成,線程就會返回到緩沖區(qū),并且等待下一次分配。如果緩沖區(qū)里所有的線程都被使用了,在下一個線程返回緩沖區(qū)之前,系統(tǒng)將會在隊列中等待即將到來的請求。以這種方式,操作系統(tǒng)能將線程數(shù)量控制在一定規(guī)模。

7)基于線程與基于事件的編程

無線傳感器網(wǎng)絡(luò),支持并發(fā)任務(wù)。其中涉及輸入/輸出系統(tǒng)的任務(wù)特別重要,應(yīng)選擇基于線程或基于事件的執(zhí)行模式。

根據(jù)分散的堆棧和建立上下文信息的大規(guī)模,選擇基于線程或基于事件的執(zhí)行模式。在一個單一的程序和單一的地址空間中,基于線程的程序使用多線程控制。這樣,當(dāng)其他任務(wù)在不同的線程中執(zhí)行時,被輸入/輸出設(shè)備阻止的線程可以被掛起。然而,程序員必須小心用鎖(lock)保護共享數(shù)據(jù)結(jié)構(gòu),并使用條件變量來協(xié)調(diào)執(zhí)行線程。在處理所有這些問題時,操作系統(tǒng)需要同步執(zhí)行程序。一般情況下,多線程環(huán)境編寫的程序代碼是復(fù)雜的、可能產(chǎn)生錯誤,并可能導(dǎo)致死鎖和惡性競爭。

在基于事件的編程中有事件和事件處理者。在操作系統(tǒng)調(diào)度中,當(dāng)~個指定的事件發(fā)生時,事件處理程序會被命名。通常內(nèi)核實現(xiàn)一個循環(huán)功能,當(dāng)事件發(fā)生時,會以輪詢的方式調(diào)用相應(yīng)的事件處理程序。一般情況下一個事件會被一次處理完,但如果碰到一個阻塞操作,它會寄存一個新的回調(diào),并向調(diào)度程序返回控制。

8)內(nèi)存分配

內(nèi)存單元是一種寶貴的資源,這是操作系統(tǒng)的關(guān)鍵所在,此外,數(shù)據(jù)和應(yīng)用程序代碼被暫時存儲在內(nèi)存單元中。內(nèi)存怎樣分配以及分配多長時間,決定任務(wù)執(zhí)行的速度。內(nèi)存可被分配到一個靜態(tài)或動態(tài)的程序中,靜態(tài)內(nèi)存分配可以節(jié)省使用內(nèi)存,但它只能用于程序內(nèi)存的使用是預(yù)先知道的。程序啟動時分配靜態(tài)內(nèi)存,作為執(zhí)行操作的一部分,不會被釋放。因為程序的內(nèi)存是在編譯時分配的,所以內(nèi)存的使用率很高。另一方面,靜態(tài)內(nèi)存分配不允許在運行時進行。

當(dāng)程序編譯不知道所需內(nèi)存的大小和被占用時間時,就采用動態(tài)內(nèi)存分配。在使用動態(tài)數(shù)據(jù)結(jié)構(gòu)的情況下,編譯時無法知道內(nèi)存的大小,這樣的程序通常只是短暫使用內(nèi)存。當(dāng)它們不再需要特定的內(nèi)存區(qū)時,它們會占用并短暫使用一部分內(nèi)存。因為內(nèi)存的資源是有限的,不再使用的內(nèi)存可以被釋放或分配給不同的所有者。動態(tài)內(nèi)存分配確保了編程的靈活性,但產(chǎn)生了相當(dāng)大的管理開銷。

把增加節(jié)點的內(nèi)存容量作為一項策略,大多數(shù)體系結(jié)構(gòu)使用EEPROM或閃存來存儲程序代碼。因此,它可能用來部署相對復(fù)雜的應(yīng)用程序和通信協(xié)議。然而,讀寫閃存的過程是耗能很大的。

2.非功能方面的問題

1)關(guān)注點分離

因為可用的資源極度緊張,被設(shè)計用來支持資源受限的設(shè)備以及由這些設(shè)備所建立的網(wǎng)絡(luò)的操作系統(tǒng)不同于通用的操作系統(tǒng)。在通用操作系統(tǒng)中,操作系統(tǒng)和在它上面運行的應(yīng)用程序之間有一個清晰的分離,它們通過定義良好的接口和系統(tǒng)調(diào)用來互相交流。操作系統(tǒng)本身有幾個不同的服務(wù)可以獨立地進行升級、調(diào)試或刪除。在無線傳感器網(wǎng)絡(luò)中,這種方式是很難實現(xiàn)的。

在大多數(shù)情況下,操作系統(tǒng)由一個輕量級的模塊編排”( wired)在一起,創(chuàng)造一個單塊的程序模塊代碼,負(fù)責(zé)傳感、處理和通信任務(wù)?!熬幣拧毙枰诰幾g時產(chǎn)生一個單一的系統(tǒng)映像,并可以在單個節(jié)點上安裝。一些操作系統(tǒng)提供了一個不可分割的系統(tǒng)內(nèi)核以及一套庫組件來構(gòu)建一個應(yīng)用程序。也有其他的操作系統(tǒng),提供了一個內(nèi)核和一些可重構(gòu)的底層服務(wù),將其虛擬成節(jié)點的硬件組件。該服務(wù)可以在“編排”后構(gòu)成應(yīng)用程序,因為這些服務(wù)的核心功能相對獨立,即使它的功能是有限的,在一定程度上也是一個關(guān)注點分離,關(guān)注點分離確保了靈活和高效的重新編程和重新配置。更新或升級,可根據(jù)需要作為一個整體或部分。在軟件升級中,重新配置確保了通信帶寬和存儲空間的有效利用。

2)系統(tǒng)開銷

操作系統(tǒng)執(zhí)行程序代碼,需要自己的資源共享。消耗多少資源取決于它提供的更高服務(wù)級別和應(yīng)用時的規(guī)模和服務(wù)類型,操作系統(tǒng)所消耗的資源稱為系統(tǒng)的開銷( overhead)。

目前可用的無線傳感器節(jié)點擁有的資源是以幾千字節(jié)和幾百兆字節(jié)為單位來計量的,這些資源會在程序進行檢測、數(shù)據(jù)融合、自組織、網(wǎng)絡(luò)化管理和通信等方面被共享,鑒于這些任務(wù),操作系統(tǒng)的開銷應(yīng)該被理解。

3)可移植性

前面已經(jīng)闡述了不同的硬件架構(gòu)能被用于開發(fā)無線傳感器節(jié)點,在理想情況下,異構(gòu)體系結(jié)構(gòu)和操作系統(tǒng)的節(jié)點能夠共存和互相協(xié)作。然而目前現(xiàn)有的操作系統(tǒng)不提供這種類型的支持。

對于利用操作系統(tǒng)的可移植性來處理硬件架構(gòu)的快速演變的問題,無線傳感器網(wǎng)絡(luò)仍然是一門新興技術(shù)。在過去的十年中,架構(gòu)設(shè)計經(jīng)歷了顯著的變化,越來越多領(lǐng)域的應(yīng)用程序開始被研究。為了適應(yīng)無法預(yù)料的要求,這種演變的趨勢將會繼續(xù)下去。而操作系統(tǒng)應(yīng)該是便攜的和可擴展的。

4)動態(tài)編程

一旦無線傳感器網(wǎng)絡(luò)被部署,一部分應(yīng)用程序或操作系統(tǒng)可能需要重新編程,原因如下:

??在初的部署設(shè)置時,無法獲取完整部署所需的條件參數(shù),因此,網(wǎng)絡(luò)可能無法達到佳性能。

??應(yīng)用需求和網(wǎng)絡(luò)操作中物理環(huán)境的屬性會隨著時間變化。當(dāng)網(wǎng)絡(luò)正在運行時檢測和修復(fù)錯誤可能是必要的。

因為節(jié)點數(shù)量龐大,人工更換軟件是行不通的。另一種方法是開發(fā)一個操作系統(tǒng),提供支持動態(tài)編程的功能?;谶@樣的考慮,要求應(yīng)用程序和操作系統(tǒng)之間有明顯的分離界限,才可能實現(xiàn)動態(tài)重編程的功能。另一方面,如果兩者之間有界限,在原則上可以實現(xiàn)動態(tài)編程,但其實際執(zhí)行取決于幾個因素:首先,操作系統(tǒng)應(yīng)該能接收“一片接一片的(pieceby piece)”軟件更新,將它組合并存儲在臨時內(nèi)存中;其次,操作系統(tǒng)要確保這確實是一個更新版本;后,它應(yīng)該能刪去舊的軟件,并安裝和配置新的升級版本。所有這些資源的消耗可能導(dǎo)致自身錯誤。

軟件重新編程需要多種傳輸協(xié)議代碼、壓縮和解壓縮代碼;并確保代碼的一致性和版本控制;以無線傳輸代碼的方式來提供可靠穩(wěn)定抗干擾的( robust)傳輸策略。

當(dāng)前發(fā)展中的編程工具和環(huán)境將在以后的章節(jié)中介紹。

3.原型

1TinyOS (微操作系統(tǒng).)

在無線傳感器網(wǎng)絡(luò)中微操作系統(tǒng)應(yīng)用廣泛、可選范圍豐富并且運行環(huán)境有輔助工具。此外,它經(jīng)歷了一個漫長的設(shè)計和演進過程,使其工作原理更容易理解。

微操作系統(tǒng)具有緊湊的結(jié)構(gòu),這使它能夠支持很多應(yīng)用程序,概念上的架構(gòu)包括一個調(diào)度器和一套組件,可通過定義良好的接口相互連接。組件可分為配置組件和模塊。配置組件是由兩個以上的模塊相互連接而被“編排”( wiring)組成,而模塊是微操作系統(tǒng)程序的基本構(gòu)建塊。多種配置組成一個單一的可執(zhí)行代碼,并產(chǎn)生一個微操作系統(tǒng)應(yīng)用程序,微操作系統(tǒng)在應(yīng)用和操作系統(tǒng)之間并沒有提供一個明確的關(guān)注點分離。

一個組件由一個框架、命令處理程序、事件處理程序和一套不可中斷的任務(wù)組成。組件是類似于面向?qū)ο缶幊陶Z言中的對象,它封裝了狀態(tài),并通過定義良好的接口進行交互。一個接口可以定義命令、事件處理程序和任務(wù),并以它們自己的狀態(tài)在一定框架范圍內(nèi)運行。因此,組什需明確其命令的用途和發(fā)出信號的事什,這種方式可以滿足在這個應(yīng)用程序被編譯時確定所需的資源。

組件是分層結(jié)構(gòu),并通過命令和事件互相通信:高級別的組件給低級別的組件廣播發(fā)送命令,低級別的組件給高級別的組件發(fā)送響應(yīng)事件信號。因此,高級別的組件實現(xiàn)事件處理程序,而低級別的組件控制處理器(或功能子程序)。物理硬件的組成是以層次結(jié)構(gòu)為基礎(chǔ)的,圖3.1說明了應(yīng)用程序和操作系統(tǒng)之間的邏輯邊界。

在圖3.1中可以看到,有兩個組件處于高級別,即路由組件和傳感器中的應(yīng)用組件。路由組件是負(fù)責(zé)建立和維護網(wǎng)絡(luò)的,而傳感器的應(yīng)用組件是負(fù)責(zé)傳感和處理的。通過動態(tài)交互信息,兩個組件互相通信,并與較低級別的組件異步。此外,通過發(fā)出無阻塞指令和表示對指定的事件的關(guān)注,一個高級別組件能與低級別組件相互通信。

3.2-3.4顯示了邏輯結(jié)構(gòu)部件和組件配置,在圖3.2中組件A顯示了它服務(wù)接口C的功能,反過來又提供給命令Dl和信號事件D2。在圖3.3中,組件B表示宣布調(diào)用命令Dl和提供一個事件處理程序來處理事件D2的界面。

在圖3.4中,組件A和組件B之間的綁定是通過配置E來約束的。

?

低級別組件和高級別組件的邏輯邊界

3.1??低級別組件和高級別組件的邏輯邊界

?

微操作系統(tǒng)中定義的任務(wù)、指令和事件作為微操作系統(tǒng)運行環(huán)境的基本構(gòu)建塊,是為單一的框架組件之間能進行有效通信。任務(wù)是從執(zhí)行直到完成的單一過程。換句話說,雖然它們可以被事件中斷,但它們不能被其他任務(wù)搶占,這就是為什么微操作系統(tǒng)能支持并發(fā)( concurrency),并確保任務(wù)互不干擾或破壞對方的數(shù)據(jù)的原因。

因為任務(wù)要被完整執(zhí)行,它可以分配一個單一的堆棧來存儲上下文消息。任務(wù)可以調(diào)用低級別的指令,發(fā)送信號給更高級別的事件,并調(diào)用其他任務(wù),包括它們自己。例如,負(fù)責(zé)從通信子系統(tǒng)讀取數(shù)據(jù)包的任務(wù)可以重復(fù)調(diào)用自己,直到它已經(jīng)完成讀取所有的數(shù)據(jù)包。在微操作系統(tǒng)中調(diào)用任務(wù)是以FIFO規(guī)則為基礎(chǔ)的,微操作系統(tǒng)架構(gòu)對持續(xù)時間短的任務(wù)是有效的。

指令是由高級別組件到低級別組件的非阻塞請求,為了處理潛在的長期執(zhí)行操作,微操作系統(tǒng)引入了分時操作的概念。在一個分時系統(tǒng)中,當(dāng)任務(wù)完成后,函數(shù)調(diào)用會立即返回,并且調(diào)用的函數(shù)會通知調(diào)用者。它被稱為分時是因為它將調(diào)用和執(zhí)行分割成兩個時間段來完成,一個典型的例子是數(shù)據(jù)包的傳輸任務(wù)。數(shù)據(jù)包傳輸可以阻塞任務(wù),因為接收器在數(shù)據(jù)包重發(fā)之前要等待一個超時事件( ttim。。ut)。然而,在超時信號出現(xiàn)之前如果收到一個ACK數(shù)據(jù)包,接收器會放棄等待ttime。。。的控制。在微操作系統(tǒng)中,這個任務(wù)被分解成兩個事件:超時事件和數(shù)據(jù)包接收事件。

每一個對己被命名事件感興趣的組件都應(yīng)該提供一個事件處理程序來處理它,硬件事件發(fā)生時將會調(diào)用事件處理程序。低級別的組件也能直接連接到硬件中斷的處理程序,如外部中斷、定時器事件、計數(shù)器事件。事件處理器會以不同的方式來處理可能發(fā)生的事件。它可以將后期高級別事件信息存入其結(jié)構(gòu)中,或者調(diào)用低級別指令。

在微操作系統(tǒng)中資源分配是采用靜態(tài)內(nèi)存分配來進行優(yōu)化的,因為應(yīng)用的內(nèi)存需求是在其組成時就明確了,它避免了與動態(tài)分配有關(guān)的額外開銷。由于微操作系統(tǒng)缺乏明確的關(guān)注點分離,限制了它的適應(yīng)性。此外,沒有額外支持的微操作系統(tǒng)和任何機制來動態(tài)加載和刪除組件。

作為一個基于事件的系統(tǒng),微操作系統(tǒng)不支持直接執(zhí)行上下文,因此一個復(fù)雜的程序通常需要一個狀態(tài)機。因為許多程序員認(rèn)為狀態(tài)機難以管理,所以狀態(tài)機出現(xiàn)較少,文獻中提到一個典型的例子是處理與加密操作。這些操作需要幾秒鐘的時間來完成,占用了處理器的寶貴時間,使系統(tǒng)無法響應(yīng)外部事件?;诰€程的操作系統(tǒng)用時間先決( time critical)或短周期的任務(wù)搶占來處理這種類型的情況。

2SOS

SOS嘗試在靈活性和資源效率之間建寺平衡,與微操作系統(tǒng)有所不同,它支持運行程序代碼重新配置和重新編程。操作系統(tǒng)包括內(nèi)核和一組模塊,可以裝載和卸載。在功能上模塊類似于微操作系統(tǒng)的組件,它實現(xiàn)了特定的任務(wù)或功能。此外,微操作系統(tǒng)組件能以同樣的方式“編排”建立一個應(yīng)用程序,SOS應(yīng)用程序由一個或多個互動模塊組成。不像微操作系統(tǒng)的組件,它在內(nèi)存中有一個固定存儲區(qū),在SOS模塊中是一個狀態(tài)獨立的二進制代碼,這種典型的特征確保了SOS能與其他模塊動態(tài)鏈接。

SOS內(nèi)核提供底層硬件接口,此外,它提供一個基于優(yōu)先級的調(diào)度機制,并支持動態(tài)內(nèi)存分配。

(1).交互

交互模塊通過異步通信和直接調(diào)用注冊函數(shù)(registered function),源于模塊A到模塊B的消息要先經(jīng)過位于優(yōu)先級隊列排列的調(diào)度器。然后內(nèi)核會調(diào)用模塊B中合適的消息處理程序,并把消息傳送給它。

模塊執(zhí)行特定目的存在的消息處理程序。一個模塊可以通過直接調(diào)用它的注冊函數(shù)與另一個模塊進行交互。通過函數(shù)調(diào)用的交互作用比基于消息通信的速度要快,這種方法需要模塊來明確記錄其在內(nèi)核中的公用函數(shù),所有關(guān)注這些函數(shù)的模塊需要“訂閱”( subscribe)這些函數(shù)。在模塊初始化時,注冊函數(shù)通過調(diào)用一個名為ker_register_fn的系統(tǒng)函數(shù)來產(chǎn)生,調(diào)用確保模塊通知內(nèi)核二進制映像函數(shù)被執(zhí)行了。內(nèi)核通過創(chuàng)建一個函數(shù)控制塊(FCB)來存儲函數(shù)的關(guān)鍵信息,這個信息是用來處理函數(shù)訂閱,并支持動態(tài)內(nèi)存管理和運行時的模塊更新。圖3.5說明了兩個基本類型模塊之間的交互作用。

?

SOS系統(tǒng)中模塊間的交互

??????????????????3.5??SOS系統(tǒng)中模塊間的交互

模塊通過調(diào)用名為ker_get_handle的系統(tǒng)函數(shù)來訂閱一個命名函數(shù),這樣做它們提供了帶有模塊的內(nèi)核和函數(shù)的ID,這將用于定位關(guān)注的函數(shù)控制塊。如果查找成功,內(nèi)核返回一個指向訂閱函數(shù)的函數(shù)指針的指針。訂閱者通過取消指針來訪問訂閱函數(shù),這確保了內(nèi)核通過FCB改變函數(shù)指針來重置新版本的功能,這個過程對用戶是透明的。

(2).動態(tài)重編程

以下5個基本特征確保了SOS支持動態(tài)編程。第一,模塊都是獨立的二進制文件,它們使用相對地址而不是絕對地址,因此它們可重定位。第二,模塊實現(xiàn)了兩種處理,初始化和終的消息處理程序。當(dāng)首次加載模塊時,初始化消息處理器將調(diào)用內(nèi)核。其目的是設(shè)置模塊的初始狀態(tài),包括初始化定時器、函數(shù)注冊以及函數(shù)訂閱。在卸載模塊前,內(nèi)核會調(diào)用終的消息處理器。其目的是釋放模塊擁有的所有資源,包括定時器、內(nèi)存和注冊函數(shù),使該模塊能正常退出系統(tǒng)。在終消息后,內(nèi)核會進行垃圾回收。第三,編譯過程中,在已知的偏移二進制中,SOS使用一個鏈接腳本放置初始化處理模塊,腳本在模塊插入時可輕松地連接。第四,SOS保留外部的模塊狀態(tài),這使新插入的模塊繼承了它所替換模塊的狀態(tài)信息。第五,當(dāng)模塊插入時,SOS生成和保存含有相關(guān)模塊的初始化處理程序的絕對地址的原數(shù)據(jù)包,以及指針指向保持模塊狀態(tài)的動態(tài)內(nèi)存。

SOS中,動態(tài)模塊替換發(fā)生需3個步驟。

(1)當(dāng)一個新的模塊使用時,代碼分發(fā)協(xié)議在網(wǎng)絡(luò)中發(fā)布公告,公告中包含了模塊的身份(ID)、版本號和所需內(nèi)存的大小。當(dāng)本地分發(fā)協(xié)議接收公告時,它評估數(shù)據(jù)包,決定模塊是否是已經(jīng)在本地存在更新的版本或節(jié)點對新的模塊是關(guān)注的。在這兩種情況下,它也可以確保有足夠的空間在程序存儲器中下載模塊。

(2)?一旦決定下載模塊,該協(xié)議進行下載模塊并審查第一個數(shù)據(jù)包中的元數(shù)據(jù)。元數(shù)據(jù)包含了存儲該模塊所需本地內(nèi)存的大小。如果SOS內(nèi)核決定了它不具有足夠的隨機存儲空間來滿足運行該模塊所需的本地空間,模塊插入將會立即停止。

(3)換句話說,如果任何事情都很正常,那么模塊插入將會發(fā)生。在模塊插入時,內(nèi)核創(chuàng)建的元數(shù)據(jù)用來存儲處理器的絕對地址,指向動態(tài)內(nèi)存控制模塊的狀態(tài)和信息。SOS內(nèi)核通過調(diào)度模塊的初始信息來調(diào)用模塊的處理器。

3Contiki

Contiki是一種混合的操作系統(tǒng),系統(tǒng)程序被分為內(nèi)核服務(wù)和裝載程序。默認(rèn)情況下,它的核心功能是作為一個事件驅(qū)動的內(nèi)核,并作為應(yīng)用程序庫支持多線程操作。有一個動態(tài)鏈接策略是用來匹配多線程庫和具有明確要求的應(yīng)用。

SOS -樣,Contiki實現(xiàn)了把由內(nèi)核支持的基本系統(tǒng)與動態(tài)可裝載和可重編程服務(wù)的剩余部分分離。通過內(nèi)核發(fā)布公告,服務(wù)程序之間相互通信。內(nèi)核本身不提供任何硬件抽象,相反,它允許設(shè)備驅(qū)動程序和應(yīng)用程序直接與硬件通信。這個內(nèi)核的范圍有限,很容易重新編程和更換服務(wù)。

每一個Contiki通過一個私有內(nèi)存來管理自己的狀態(tài),保留一個指針來運行狀態(tài)。然而,服務(wù)與服務(wù)之間共享相同的地址空間,它還實現(xiàn)了一個事件處理程序和一個可選的輪詢處理器。圖3.6說明了ROMRAM的內(nèi)存分配。

?

Contiki操作系統(tǒng)的內(nèi)存分配

3.6??Contiki操作系統(tǒng)的內(nèi)存分配

如圖3.6所示,Contiki在編譯時被分成兩個主要部分:一部分是虛線內(nèi)的服務(wù),包括核心服務(wù);另一部分是這些虛線外的可動態(tài)裝載服務(wù)。核心由內(nèi)核、程序加載器、驅(qū)動通信硬件設(shè)備的通信協(xié)議棧和其他經(jīng)常使用的服務(wù)組成。這些服務(wù)被編譯成一個二進制映像,并運行在無線傳感器節(jié)點上。這種操作系統(tǒng)只能被特殊的啟動引導(dǎo)加載器(boot loader)覆蓋或修改,其他情況下是不能被動態(tài)修改的。

該程序加載器負(fù)責(zé)將驅(qū)動程序下載到活動內(nèi)存(active memory),它可以通過遠(yuǎn)程數(shù)據(jù)的通信服務(wù)或直接從本地存儲來得到二進制文件。通常程序二進制文件存儲在EEPROM中。

內(nèi)核是操作系統(tǒng)的核心要素,其基本任務(wù)是調(diào)度事件和定期輪詢處理。隨后,Contiki的程序執(zhí)行由內(nèi)核或通過輪詢機制調(diào)度事件來觸發(fā)。在沒有被中斷或被其他機制所搶占的情況下,事件處理程序完成一個完整的事件處理。當(dāng)Contiki在多線程環(huán)境中運行時,可能會出現(xiàn)一個線程搶占另一個線程的情況。

內(nèi)核支持同步和異步事件,同步事件被盡可能快地派遣到目標(biāo)進程,一旦事件的進程結(jié)束,控制返回到張貼過程(posting process)。另一方面,異步事件在合適的時候被派遣。除了這些事件外,內(nèi)核提供了一種輪詢機制,定期對硬件組件的狀態(tài)進行采樣。在這段時間內(nèi),調(diào)查處理器通過硬件設(shè)備的優(yōu)先級來確定目標(biāo)。

(1).服務(wù)架構(gòu)

Contiki操作系統(tǒng)一個很有趣的特征是其支持動態(tài)加載和重新配置的服務(wù),這是通過定義服務(wù)、服務(wù)接口、服務(wù)存根和服務(wù)層來實現(xiàn)的。Contiki服務(wù)模塊是針對微操作系統(tǒng)的。?Contiki服務(wù)包括服務(wù)接口及其實現(xiàn),也就是所謂的過程。服務(wù)接口包括一個版本號,以及實現(xiàn)該接口的功能的指針函數(shù)的列表。服務(wù)存根通過服務(wù)接口與服務(wù)的動態(tài)通信來完成一個應(yīng)用程序,服務(wù)層類似于查詢服務(wù)或注冊表服務(wù)。主動服務(wù)通過提供服務(wù)接口、地址信息和版本號來對服務(wù)進行描述,這樣一來,服務(wù)層保持跟蹤所有進行的服務(wù)。圖3.7.說明了應(yīng)用程序與Contiki服務(wù)是如何進行交互的。

?

 Contiki服務(wù)交互架構(gòu)

3.7??Contiki服務(wù)交互架構(gòu)

因為程序是通過服務(wù)接口存根調(diào)用服務(wù)的,所以這種操作沒必要知道有關(guān)的實施細(xì)節(jié)或服務(wù)在內(nèi)存中的地址。當(dāng)服務(wù)接口被調(diào)用時,服務(wù)接口存根查詢服務(wù)層,并獲得一個服務(wù)接口的指針。一旦獲得服務(wù)的接口描述與服務(wù)的存根版本號配對,那么該接口存根就會調(diào)用執(zhí)行所請求的功能。服務(wù)與使用該服務(wù)的程序的松散耦合使操作系統(tǒng)可以更新服務(wù),而不需要修改應(yīng)用程序。

(2).協(xié)議線程( Proto Thread)

Contiki通過結(jié)合一些事件和線程的功能來介紹協(xié)議線程的概念,協(xié)議線程可以視為輕量級(無堆棧的)線程,但它們也可以作為基于事件編程的中斷任務(wù)。一個協(xié)議線程提供有條件的阻塞等待聲明,PT__ WAIT_UNTILQ需要一個條件語句塊實例,直到該語句評估正確為止。當(dāng)協(xié)議線程到達PT WAIT_UNTIL()聲明時,如果條件聲明是正確的,那么它不中斷地繼續(xù)執(zhí)行。PT—WAIT_UNTIL()指令不需要任何條件聲明,包括復(fù)雜的布爾表達式。

因為協(xié)議線程是無堆棧的,只有明確的PT WAIT_UNTIL()聲明能阻塞這個線程,所以從調(diào)度的角度來看,系統(tǒng)中的所有協(xié)議線程在相同的堆棧中運行,上下文切換是通過堆棧彈出來實現(xiàn)的。通過分別使用PT__ BEGINPT END聲明來明確宣告協(xié)議線程的開始和結(jié)束,協(xié)議線程可以通過PT EXIT語句提前結(jié)束。

協(xié)議線程概念并沒有明確指明它什么時候或以什么方式來被調(diào)用或調(diào)度,在Contiki的實施中,運行在事件驅(qū)動內(nèi)核頂層的過程被當(dāng)作一個協(xié)議線程來執(zhí)行,因此,當(dāng)過程收到一個事件時協(xié)議線程被調(diào)用,例如,在過程從其他過程或計時器事件收到消息的時候。同樣,協(xié)議線程概念不預(yù)先確定內(nèi)存是如何劃撥給管理協(xié)議線程狀態(tài)的。與調(diào)度一樣,這也是在特定條件下實現(xiàn)的。例如,只有預(yù)先知道操作系統(tǒng)是由基于一組固定的協(xié)議線程組成,才能通過提前靜態(tài)分配內(nèi)存來進行狀態(tài)管理。如果協(xié)議線程的數(shù)量沒有提前知道,內(nèi)存也可以以一種動態(tài)方式來分配。在Contiki執(zhí)行中,靜態(tài)內(nèi)存分配是一種典型的設(shè)置,并且協(xié)議線程狀態(tài)保存在進程控制塊中。

因為協(xié)議線程減少了明確的狀態(tài)機和狀態(tài)轉(zhuǎn)換,所以簡化了事件驅(qū)動的編程狀態(tài)機的設(shè)計。協(xié)議線程的成本是與內(nèi)存開銷和幾個處理器的開銷有關(guān)的,為了說明協(xié)議線程的實用性,考慮一個MAC協(xié)議,定期關(guān)閉無線收發(fā)子系統(tǒng),但要確保無線收發(fā)子系統(tǒng)在進入休眠狀態(tài)前完成通信。這種行為歸納如下:

(1)此時無線收發(fā)子系統(tǒng)打開。

(2)無線收發(fā)子系統(tǒng)周期性地保持收發(fā)狀態(tài)。

(3)?一旦超過,無線收發(fā)子系統(tǒng)就會關(guān)閉,但是它已完成一項正在進行的通信。

(4)如果通信沒有完成,那么MAC協(xié)議就要等待twait max時刻到達,相當(dāng)于一個完整的通信周期。

(5)如果通信完成或超過大等待時間,無線收發(fā)子系統(tǒng)就會關(guān)閉,并且會保持休眠一個周期。

(6)這個過程(通信一休眠)不斷重復(fù)。

3.8和圖3.9分別顯示了基于事件與基于協(xié)議線程實現(xiàn)的通信子系統(tǒng)的睡眠調(diào)度。狀態(tài)機的實現(xiàn)需要一個明確的狀態(tài)變量,可以采用開啟、等待和關(guān)閉。有條件的if語句是用來執(zhí)行不同的動態(tài)變量的值,代碼可以放置在事件處理函數(shù)中,無論什么時候事件發(fā)生都可以被調(diào)用。在這種情況下可能發(fā)生的事件是定時時間到時和通信結(jié)束。在圖3.8中可以看出,控制狀態(tài)機的代碼量超過總代碼量的三分之一,此外,該機制的6個步驟的結(jié)構(gòu)不能直接從代碼中顯現(xiàn)出來。

協(xié)議線程實施休眠的時間安排顯然是更短、更直觀的。

?

4LiteOS

LiteOS是一種基于多線程的操作系統(tǒng),并且支持多個應(yīng)用程序。它是基于一個操作系統(tǒng)和在它上面運行的應(yīng)用程序之間完全分離的原則,不同于所有其他的操作系統(tǒng),LiteOS并沒有提供用來“編排”起來建立應(yīng)用程序的組件或模塊。就LiteOS而言,開發(fā)建立阻塞和確定它們彼此交互的方式,完全是應(yīng)用程序開發(fā)人員的任務(wù)。

LiteOS提供幾種系統(tǒng)調(diào)用的方式:來自用戶的分離系統(tǒng)的殼調(diào)用,分層文件管理系統(tǒng),動態(tài)重編程技術(shù)。

整個系統(tǒng)仿照分布式文件系統(tǒng),在基站端的用戶可以使用安裝在資源豐富的計算機上的殼調(diào)用來實現(xiàn)對已命名節(jié)點的識別、交互,以及重編程。網(wǎng)絡(luò)中的每個節(jié)點運行一個多線程的內(nèi)核,其中有3個主要組件:一個調(diào)度器、一套系統(tǒng)調(diào)用和二進制安裝器。內(nèi)核的系統(tǒng)調(diào)用,使遠(yuǎn)程用戶可以訪問和管理本地文件和目錄。本地文件分為傳感器數(shù)據(jù)、設(shè)備驅(qū)動程序和應(yīng)用程序二進制文件。在系統(tǒng)內(nèi)的層次結(jié)構(gòu)中,一個節(jié)點是一個無指定的組件。

3.10說明了LiteOS的系統(tǒng)架構(gòu)。

?

LiteOS操作系統(tǒng)架構(gòu)

3.10??LiteOS操作系統(tǒng)架構(gòu)

1).殼和系統(tǒng)調(diào)用

殼繼承了Linux操作系統(tǒng)的幾個特點。殼向一個距其有一跳距離的無線節(jié)點提供了一種安裝機制,使整個網(wǎng)絡(luò)可被視為一個分布式和分層文件系統(tǒng)。用戶可以像使用本地資源那樣訪問一個指定節(jié)點的資源。殼支持大量的可以在分布式文件系統(tǒng)上執(zhí)行的Linux指令。

這樣,LiteOSLinux用戶提供了一個熟悉的界面。

命令被分為五大類:文件命令、處理命令、調(diào)試命令、環(huán)境命令和設(shè)備命令。文件中的命令用于瀏覽分層文件系統(tǒng),以及移動、復(fù)制、刪除文件和目錄。下面給出一個使用文件命令操作的例子。

$ pwd

Current directory is /snOl/node101/apps

$ cp /c/Blink.lhex Blink.lhex

Copy complete

$ exec Blink.lhex

File Blink.‘lhex successfully started

$ ps

Name State

Blink Sleep

在這個例子中,pwd命令在sn01節(jié)點中打印了工作目錄,這就是node101/apps。接下來,使用cp指令,Blink.lhex文件從資源豐富的計算機的根日錄被復(fù)制到指定節(jié)點的sn01目錄。然后,通過使用exec指令,文件就會被執(zhí)行。ps指令報告進程狀態(tài),在這種情況下表示一個休眠的線程。

該過程命令對管理、創(chuàng)建、暫停、終止線程是非常有用的。在LiteOS中可以同時使用多達8個線程,調(diào)適指令確保能建立調(diào)適環(huán)境來調(diào)適程序代碼。環(huán)境指令給管理操作系統(tǒng)環(huán)境提供了支持、顯示交互的歷史記錄,并提供命令手冊。后,設(shè)備命令提供對硬件設(shè)備(如傳感器和無線收發(fā)子系統(tǒng))的直接訪問。

2.LiteFS

LiteFS是一種分布式文件系統(tǒng),它是LiteOS的本質(zhì)特征。通過LiteFS,用戶可以直接訪問傳感器網(wǎng)絡(luò),可以規(guī)劃和管理各個節(jié)點。類似于Linux中的文件,LiteOS中的文件代表數(shù)據(jù)、應(yīng)用程序二進制和設(shè)各驅(qū)動程序。本地文件系統(tǒng)的組織結(jié)構(gòu)如下:RAM包含被開放( opened)文件的列表以及內(nèi)存分配和閃存EEPROM中的有關(guān)信息。文件系統(tǒng)的結(jié)構(gòu)被存儲在EEPROM存儲器中,實際文件被存儲在閃存中,如圖3.11所示。

?

LiteFS的文件系統(tǒng)結(jié)構(gòu)

3.11??LiteFS的文件系統(tǒng)結(jié)構(gòu)

RAM中可同時打開多達8個文件,LiteFS使用兩位向量來跟蹤EEPROM和閃存分配。8B用于前者,32B用于后者,這相當(dāng)于RAM104B。在EEPROM中每個文件代表一個32B的控制塊,控制塊的可用空問被劃分為65塊。第一塊是根塊,它在文件系統(tǒng)格式化時都被初始化,其余的區(qū)塊是目錄塊(圖中的D)或文件塊(圖中的F)。文件控制塊多可尋址10個邏輯FLASH頁,每一頁包含2KB的數(shù)據(jù)(或8個物理FLASH頁)。當(dāng)一個文件占用超過20KB時,LiteFS為這個文件分配另一個控制塊,并且在以前的控制塊中存儲一個新的控制塊的地址。

3).動態(tài)重編程

LiteOS支持用戶應(yīng)用程序的動態(tài)更換和重新編程,無論是否提供源代碼都可以完成。如果源代碼是提供給操作系統(tǒng)的,它將被一個新的內(nèi)存設(shè)置重新編譯,同時所有引用和指向舊版本的指針將被重新定向。如果源代碼不是提供給操作系統(tǒng)的,LiteOS采用差別修補( differential patching)”機制,以取代舊版本的二進制代碼。該方法是通過插入差別修補程序,并將差別修補程序連同二迸制映像文件一起分發(fā),來直接將重定位信息編碼到二進制應(yīng)用程序代碼中。

有一種描述差別修補的數(shù)學(xué)模型已經(jīng)被提出,該模型具有3個參數(shù)。該模型的參數(shù)是閃存的二進制可執(zhí)行文件的起始地址、RAM中已分配內(nèi)存的起始地址、棧頂。堆棧屬于內(nèi)存的一部分,只是在實際執(zhí)行的過程中內(nèi)存的某個區(qū)域被指定作為堆棧。當(dāng)這些參數(shù)已知時,就有可能將更新的程序插入到舊的二進制映像中。模型參數(shù)是憑借經(jīng)驗和節(jié)點架構(gòu)的知識來獲得的,這限制了修補計劃的實用性。

4.評價

與所有的排名一樣,對操作系統(tǒng)的性能進行排名是一個困難的任務(wù),排名需要從一個合適的角度進行。在無線傳感器網(wǎng)絡(luò)中,有關(guān)于開發(fā)、部署、運行性能和代碼更新的若干問題。如果以設(shè)計為主題,可能存在以下的問題:由操作系統(tǒng)提供的用來訪問硬件設(shè)備的接口有多豐富?由操作系統(tǒng)支持的編程環(huán)境有多靈活和富有表現(xiàn)性?由操作系統(tǒng)支持的并有利于構(gòu)建應(yīng)用程序的模塊、組件和庫文件是否有多樣的選擇?操作系統(tǒng)便攜到什么程度?應(yīng)用程序代碼的可管理性如何?

如果以部署為主題,主要的方面是動態(tài)代碼的安裝和動態(tài)代碼的傳送。在大量的節(jié)點上對代碼進行安裝和測試是一個繁重的任務(wù)。同樣,如果就代碼的更新而言,動態(tài)代碼的傳送和重編程是重要的因素。

如果以運行方式為主題,主要的方面是操作系統(tǒng)的效率,特別是緊湊性和功耗。

在這些方面,TinyOS在規(guī)模上是緊湊的,在資源利用上是高效的,因為管理分散體的開銷成為單一管理純二進制數(shù),但更換或重新編程成本高。SOSContikiLiteOS靈活地支持了動態(tài)重編程,因此非常適合應(yīng)用程序可能進行頻繁的更新和升級過程。然而,圖像傳送的成本比較高。LiteOS被視為一個分布式文件系統(tǒng)網(wǎng)絡(luò)的方式很有趣,因為它為用戶提供了一個直觀的網(wǎng)絡(luò)瀏覽方式。然而,因為節(jié)點是無狀態(tài)的,所有的更新記錄應(yīng)存儲在用戶觸手可及的地方,它會導(dǎo)致網(wǎng)絡(luò)上額外的流量被用于傳送命令和狀態(tài)信息。

通常,無線傳感器網(wǎng)絡(luò)是一種新的技術(shù)領(lǐng)域。操作環(huán)境以及應(yīng)用要求可能變得更加緊湊和精致,但還存在一些后續(xù)的問題,如動態(tài)編程和代碼更換之間的平衡,另外還有代碼的執(zhí)行效率與其他諸多因素的平衡。

????3.1和表3.2提供了本章提出的4個操作系統(tǒng)的功能和非功能方面的摘要。

?

當(dāng)前操作系統(tǒng)非功能方面的比較

3.2當(dāng)前操作系統(tǒng)非功能方面的比較

操作系統(tǒng)
小系統(tǒng)開銷
關(guān)注分離
動態(tài)重編程
可移植性
?
TinyOs
?
332字節(jié)
操作系統(tǒng)和應(yīng)用程序之間沒有明顯的區(qū)別,在編譯過程中,一個特定的配置生成了一個單片的可執(zhí)行代碼
?
要求軟件支持

?
?
SOS
?
Ca116字節(jié)
可替代模塊被編譯生成一個可執(zhí)行代碼,這在操作系統(tǒng)和應(yīng)用程序之間沒有明顯的區(qū)別
?
支持
?
中等到低
?
Contiki
?
Ca810字節(jié)
模塊被編譯生成一個可重編程和可執(zhí)行的代碼,但這并不是應(yīng)用程序和操作系統(tǒng)的分離
?
支持
?
?
中等
?
?
LiteOS
?
不可用
應(yīng)用程序被分割成若干實體:它們是獨立于操作系統(tǒng)開發(fā)的
?
支持

?
收藏
分享到:

相關(guān)課程

中國信息化培訓(xùn)中心

中國信息化培訓(xùn)中心

認(rèn)證等級

信譽良好,可安心報讀

中國信息化培訓(xùn)中心

已獲好學(xué)校V2信譽等級認(rèn)證

信譽值

  • (60-80)基礎(chǔ)信譽積累,可放心報讀
  • (81-90)良好信譽積累,可持續(xù)信賴
  • (91-100)充分信譽積累,推薦報讀

與好學(xué)校簽訂讀書保障協(xié)議:

  • 100%
  • 15
  • 14526
在線咨詢
;