【IoT】Huawei LiteOS 基礎詳解

1、Huawei LiteOS 的內核淺析

內核分爲兩個層次:

第一層是基礎內核,第二層是擴展內核。

基礎內核提供的能力包括:

任務調度

內存管理

中斷機制

隊列管理

事件管理

IPC 機制

時間管理

軟定時器

雙向鏈表等常用數據結構

擴展內核提供的能力包括:

運行-暫停機制

動態框架

基於這兩層內核,Huawei LiteOS 的主要特徵如下:

實時內核

輕量級

低功耗

快速啓動

可裁剪

分散加載

三個上層開發框架及其意義:

1)傳感器協同控制與管理框架

該框架有如下三方面主要特徵:

實時傳感器事件機制:

以事件處理的形式將實時傳感器所涉及的數據感應管理起來;

多傳感器數據融合算法:

不僅僅是依次簡單處理單個傳感器的傳感數據,而是採用數據融合算法將多個傳感器的傳感數據融合處理獲取維度更廣的實時數據,以支撐系統做出智能決策;

傳感器管理:

鑑於物聯網時代的智能設備絕對不僅僅集成數量極少的傳感器,而很有可能是數量龐大的傳感器,那如何有效的管理這些傳感器就成爲了一個極有挑戰性的話題。

該框架所代表的意義:

以事件機制來管理實時傳感器數據,可以簡化編程模型,對於未來的智能設備開發者多有裨益;

以多傳感器數據融合算法爲基礎,可以在更多傳感器數據基礎上得到更加智能的系統決策;

更進一步設想,在將來的 AR、VR 和 MR 時代中,此類多傳感器的使用場景不在少數,而該框架爲這類場景提供了最佳的解決方案基石。

2)聯接引擎框架

該框架具備如下特徵:

多場景互聯支持:支持智慧家庭、設備、工業環境等;

多協議互聯支持:支持多種聯接協議;

多樣距離互聯支持 - 支持多種長距或短距聯接協議。

該框架的意義在於:

可以同時支持多種聯接協議,而不必擔心會被既有的使用某些特定物聯網協議的開發者所遺棄;

可以最大程度上滿足現有物聯網領域開發者的需求,從而極大拓展自身的生態圈。

3)運行時引擎

該框架主要包含如下模塊:

輕量級 JavaScript 引擎:構建於 Huawei LiteOS 內核之上,支撐 JavaScript 運行時環境;

JavaScript 開發框架:物聯網領域開發者可以基於該框架開發應用;

JavaScript 運行時引擎的意義包括:

可以將爲數衆多 JavaScript 程序員作爲目標羣體,並且可以有效降低物聯網領域開發者的入門門檻;

構建於低功耗內核之上的運行時引擎可以與內核協同優化性能和功耗;

如果說 Android 成功的一個主要原因是它採用 Java 作爲主要開發語言的話,那麼 JavaScript 作爲 Huawei LiteOS 開發語言的意義絕不亞於Java 之於 Android。

2、基本概念

從系統的角度看,任務是競爭系統資源的最小運行單元。

任務可以使用或等待 CPU、使用內存空間等系統資源,並獨立於其它任務運行。

Huawei LiteOS 的任務模塊可以給用戶提供多個任務,實現了任務之間的切換和通信,幫助用戶管理業務程序流程。

Huawei LiteOS 是一個支持多任務的操作系統。

在 Huawei LiteOS 中,一個任務表示一個線程。

Huawei LiteOS 中的任務是搶佔式調度機制,同時支持時間片輪轉調度方式。

高優先級的任務可打斷低優先級任務,低優先級任務必須在高優先級任務阻塞或結束後才能得到調度。

Huawei LiteOS 的任務一共有 32 個優先級(0-31),最高優先級爲 0,最低優先級爲 31。

3、任務相關概念

3.1、任務狀態

Huawei LiteOS 系統中的每一任務都有多種運行狀態。

系統初始化完成後,創建的任務就可以在系統中競爭一定的資源,由內核進行調度。

任務狀態通常分爲以下四種:

就緒(Ready):該任務在就緒列表中,只等待 CPU;

運行(Running):該任務正在執行;

阻塞(Blocked):該任務不在就緒列表中。包含任務被掛起、任務被延時、任務正在等待信號量、讀寫隊列或者等待讀寫事件等;

退出態(Dead):該任務運行結束,等待系統回收資源。

任務狀態遷移說明:

就緒態→運行態:

任務創建後進入就緒態,發生任務切換時,就緒列表中最高優先級的任務被執行,從而進入運行態,但此刻該任務依舊在就緒列表中。

運行態→阻塞態:

正在運行的任務發生阻塞(掛起、延時、讀信號量等待)時,該任務會從就緒列表中刪除,任務狀態由運行態變成阻塞態,然後發生任務切換,運行就緒列表中剩餘最高優先級任務。

阻塞態→就緒態(阻塞態→運行態):

阻塞的任務被恢復後(任務恢復、延時時間超時、讀信號量超時或讀到信號量等),此時被恢復的任務會被加入就緒列表,從而由阻塞態變成就緒態;此時如果被恢復任務的優先級高於正在運行任務的優先級,則會發生任務切換,將該任務由就緒態變成運行態。

就緒態→阻塞態:

任務也有可能在就緒態時被阻塞(掛起),此時任務狀態會有就緒態轉變爲阻塞態,該任務從就緒列表中刪除,不會參與任務調度,直到該任務被恢復。

運行態→就緒態:

有更高優先級任務創建或者恢復後,會發生任務調度,此刻就緒列表中最高優先級任務變爲運行態,那麼原先運行的任務由運行態變爲就緒態,依然在就緒列表中。

運行態→退出態:

運行中的任務運行結束,任務狀態由運行態變爲退出態。退出態包含任務運行結束的正常退出以及impossible狀態。例如,未設置分離屬性(LOS_TASK_STATUS_DETACHED)的任務,運行結束後對外呈現的是impossible狀態,即退出態。

阻塞態→退出態:

阻塞的任務調用刪除接口,任務狀態由阻塞態變爲退出態。

3.2、任務 ID

任務 ID,在任務創建時通過參數返回給用戶,作爲任務的一個非常重要的標識。用戶可以通過任務ID對指定任務進行任務掛起、任務恢復、查詢任務名等操作。

3.3、任務優先級

優先級表示任務執行的優先順序。任務的優先級決定了在發生任務切換時即將要執行的任務。在就緒列表中的最高優先級的任務將得到執行。

3.4、任務入口函數

每個新任務得到調度後將執行的函數。

該函數由用戶實現,在任務創建時,通過任務創建結構體指定。

3.5、任務控制塊 TCB

每一個任務都含有一個任務控制塊(TCB)。

TCB 包含了任務上下文棧指針(stack pointer)、任務狀態、任務優先級、任務 ID、任務名、任務棧大小等信息。

TCB 可以反映出每個任務運行情況。

3.6、任務棧

每一個任務都擁有一個獨立的棧空間,我們稱爲任務棧。棧空間裏保存的信息包含局部變量、寄存器、函數參數、函數返回地址等。任務在任務切換時會將切出任務的上下文信息保存在自身的任務棧空間裏面,以便任務恢復時還原現場,從而在任務恢復後在切出點繼續開始執行。

3.7、任務上下文

任務在運行過程中使用到的一些資源,如寄存器等,我們稱爲任務上下文。當這個任務掛起時,其他任務繼續執行,在任務恢復後,如果沒有把任務上下文保存下來,有可能任務切換會修改寄存器中的值,從而導致未知錯誤。

因此,Huawei LiteOS在任務掛起的時候會將本任務的任務上下文信息,保存在自己的任務棧裏面,以便任務恢復後,從棧空間中恢復掛起時的上下文信息,從而繼續執行被掛起時被打斷的代碼。

3.8、任務切換

任務切換包含獲取就緒列表中最高優先級任務、切出任務上下文保存、切入任務上下文恢復等動作。

3.9、運作機制

Huawei LiteOS 任務管理模塊提供任務創建、任務延時、任務掛起和任務恢復、鎖任務調度和解鎖任務調度、根據任務控制塊查詢任務ID、根據ID查詢任務控制塊信息功能。

在用戶創建任務之前,系統會先申請任務控制塊需要的內存空間,如果系統可用的內存空間小於其所需要的內存空間,任務模塊就會初始化失敗。如果任務初始化成功,則系統對任務控制塊內容進行初始化。

用戶創建任務時,系統會將任務棧進行初始化,預置上下文。此外,系統還會將“任務入口函數”地址放在相應位置。這樣在任務第一次啓動進入運行態時,將會執行“任務入口函數”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章