Categories
程式開發

實踐分享丨物聯網操作系統中的任務管理


今天,我們分享的內容主要是物聯網操作系統中的任務管理。

在開始正式的閱讀分享帖之前,按慣例,我們需要思考幾個問題:

1.進程和線程,你是否了解其區別與聯繫?

2.什麼是任務?

3.物聯網操作系統中的任務管理主要包含那幾個方面?

如果你認真的思考了上面的問題,那麼請你閱讀下面的分享,也希望你能Get到屬於自己的盲點知識!

一、任務管理基本概念

進程:正在運行程序的一個實例

線程:進程中的一個實體,是被系**立調度和分派的基本單位

進程與線程的區別

線程是程序執行的最小單位,進程是操作系統分配資源的最小單位

一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線

進程之間相互獨立,同一進程下的各個線程共享程序的內存空間

任務概念

從系統的角度看,任務是競爭系統資源的最小運行單元;任務可以使用或等待CPU、使用內存空間等系統資源,並獨立於其它任務運行

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

Huawei LiteOS是一個支持多任務的操作系統,在LiteOS中一個任務表示一個線程

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

二、任務管理原理

任務:由一組元素組成的實體

元素(用於管理每一個任務)

標識符:和任務相關的唯一標識符

任務名:任務名稱

任務狀態:用於表示當前任務正在執行或等待

優先級:代表任務執行的優先順序

上下文棧指針:任務即將被執行的下一條指令地址

任務控制塊(TCB:Task Control Block)

任務狀態

用於描述任務所表現出的行為

就緒態(Ready):該任務在就緒列表中,就緒的任務已經具備執行的能力,只等待調度器進行調度,新創建的任務會初始化為就緒態

運行態(Running):該狀態表明任務正在執行,此時它佔用處理器,LiteOS調度器選擇運行的永遠是處於最高優先級的就緒態任務,當任務被運行的一刻,它的任務狀態就變成了運行態

阻塞態(Blocked):如果任務當前正在等待某個時序或外部中斷,我們就說這個任務處於阻塞狀態,該任務不在就緒列表中。包含任務被掛起、任務被延時、任務正在等待信號量、讀寫隊列或者等待讀寫事件等

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

任務狀態間的遷移

實踐分享丨物聯網操作系統中的任務管理 1

就緒—>運行態

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

運行—>阻塞態

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

阻塞—>就緒態

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

就緒—>阻塞態

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

運行—>就緒態

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

運行—>退出態

運行中的任務運行結束,內核自動將此任務刪除,任務狀態由運行態變為退出態

阻塞—>退出態

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

任務棧

任務棧的大小按8字節對齊

作用

任務切斷或響應中斷時,任務棧用於保存CPU寄存器的內容

任務運行時,任務棧用於保存一些局部變量、函數參數等

任務優先級

優先級表示任務執行的優先順序

任務的優先級決定了在發生任務切換時即將要執行的任務

在就緒列表中的最高優先級的任務將得到執行

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

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

三、任務調度

任務上下文

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

任務切換

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

調度算法

搶占式調度機制

時間片輪轉調度機制

四、任務運行

創建任務

LOS_TaskCreateOnly:創建任務進入suspend態,不進行任務調度

LOS_TaskCreate:創建任務進入就緒態,進行任務調度

終止任務

LOS_TaskDelete:刪除指定的任務

五、任務間通信

任務之間通過消息隊列進行信息傳輸,實現任務間的通信

消息隊列

用於任務間通信的數據結構

用於接收來自任務或中斷的非固定長度消息

可根據不同的接口選擇消息是否存放在自己的空間中

實踐分享丨物聯網操作系統中的任務管理 2

點擊關注,第一時間了解華為雲新鮮技術~