任務間資訊互動的動態圖:

1.任務間資訊互動是什么
作業系統中每一個任務都是一個獨立自主的小程式,任務的典型形式如下:

從形式上看任務可以在自己的資源空間中獨立運行,事實上只有小部分任務完全獨立于其它任務運行,大部分任務都是需要相互之間進行耦合,共同實作一個設計需求,
這就和人類社會一樣,大部分人和他身邊的人都有著千絲萬縷的聯系,并生活在這個關系網中,只有極少數隱士選擇與世人隔離,

任務和任務之間有哪些聯系呢?我們舉例說明一下:
1、按鍵任務檢測到按鍵被按下后,需要通知顯示任務切換顯示界面,

2、傳感器讀取任務更新測量資料后需要進行資料列印,此時任務需要判斷列印資訊任務是否被占用,如果列印資訊任務未被占用則進行資料列印,

3、WIFI任務收到資料后,需要向顯示任務發送資料,顯示任務根據資料重繪顯示界面,

上面涉及到的這些都屬于任務間資訊互動,不同的作業系統中有著不同的任務間資訊互動方式,常用的任務間資訊互動分為以下3類:
1、同步
2、互斥
3、收發訊息
2.同步
為了實作多任務之間的合作運行,需要在任務間建立一些關聯讓多任務之間按照先后順序執行,這種關聯機制叫做同步,
這種機制就像我們生活中交通紅綠信號燈,汽車停在紅綠信號燈路口,當紅綠信號燈變成綠燈時,汽車啟動并通過路口,這種行為邏輯并不是紅綠信號燈亮的時候通過光電效應觸發汽車的油門讓汽車啟動,而是因為司機看到了紅綠信號燈變為綠燈,司機踩下油門啟動汽車通過路口,司機看到紅綠信號燈變為綠燈,隨后踩下油門這一組動作就是同步,

通過同步機制可以實作多個任務合作按照順序運行,作業系統中通常使用信號量實作任務同步,
例如任務A需要等待信號甲再執行一個特定操作,當信號甲為“無效”時任務A進入休眠狀態,作業系統讓任務B運行,假設任務A優先級高于任務B,當任務B將信號甲設定為“有效”的那一瞬間,作業系統會暫停任務B運行任務A,使得任務A的特定動作得以執行,機制運行圖如下:

3.互斥
一些情況下,某些資源在“同一時間”只能被一個任務使用,當這些資源被某個任務正在使用時,其它準備使用這些資源的任務,只能等待資源使用者放棄使用權后才能使用該資源,這種機制叫互斥,
互斥機制就像我們在家里使用衛生間一樣,每天早上一家人都起床了,某個人占用了衛生間,其他人就只能等待該使用者離開衛生間后,才能使用衛生間,這種情況由時候會非常痛苦,所以建議大家好好學習提高收入,買個有多衛的大房子,

互斥機制應用在同一個資源被多個任務操作的情形中,互斥機制有效的解決了多個任務共享資源而產生的競爭問題,使得共享資源能夠依次讓每個任務“獨享”這個共享資源,互斥機制有一個重要的特點就是:先用先得,低優先級任務先使用時,高優先級任務希望使用也必須等待,
例如現在有兩個優先級相同的任務,作業系統采取時間片輪詢的方法調度,我們需要用這兩個任務以9600的波特率輸出資訊,任務A輸出“i love rtos”,任務B輸出“i love money”,由于兩個任務共享了一個串口設備出現了競爭現象,導致實際輸出了“i lovi lovee monemnoeyy”這串錯誤的資訊,
使用互斥機制就可以避免這種情況,任務A和任務B都能在它們使用共享資源的時候“獨享”這個共享資源,而不被人打擾,互斥機制運行圖如下:

4.收發訊息
在使用同步和互斥機制時,任務只需要關注同步和互斥是否有效,而有些情況下任務不僅需要有同步的效果,還要關注資訊機制本身攜帶的資料,這時候就需要用到訊息佇列機制,訊息佇列可以實作多個任務之間的資料資訊通信,
訊息佇列機制就像我們正在回家的路上,老媽給你發了一個訊息“家里醬油用完了,回來的時候順路買瓶醬油”,這時候你需要按照要求先去超市買一瓶醬油,然后在回家,打醬油就這樣被完成了,

訊息佇列機制可以讓多個任務之間進行豐富的資料互動,可以讓多個任務組合成一個功能豐富的系統,
例如有一個物聯網設備平臺同4G信號與設備通信,收發4G資料的任務收到資料后,將數通過訊息佇列發送給邏輯處理任務,邏輯處理任務決議資料后產生指令,然后在利用訊息佇列將指令分發給其他任務,訊息佇列機制運行圖如下:

5.任務間資訊互動機制
任務間互動為作業系統提供了多任務之間的合作機制,同步機制實作了控制多任務執行順序,互斥機制實作了多任務共享資源時不會出現惡性競爭,收發訊息實作了多任務之間的資料傳遞,
任務間資訊互動有以下3個特點:
1、建立多任務之間的關聯,保證多任務之間實作復雜的合作
2、保證作業系統運行效率,當任務需要等待資訊時,作業系統會讓該任務進入等待狀態,并運行其他任務
3、保證作業系統實作性,當資訊被當前任務設定成“有效”時,作業系統會暫停當前任務,運行等待該資訊的高優先級任務,
使用一個動態圖展示任務間資訊互動:

未完待續…
實時作業系統系列將持續更新
創作不易希望朋友們點贊,轉發,評論,關注,
您的點贊,轉發,評論,關注將是我持續更新的動力
作者:李巍
Github:liyinuoman2017
CSDN:liyinuo2017
今日頭條:程式猿李巍
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413623.html
標籤:其他
