UC/OS-II基礎知識之任務的同步與事件

UC/OS-II基礎知識之任務的同步與事件

爲了實現各個任務之間的合作和無衝突的運行,在各任務之間必須建立起一些制約制約關係,UC/OS-II有兩種制約關係,間接制約和直接制約。直接制約關係來源於任務間的合作,間接制約關係源於對資源的共享,
1.事件
UC/OS-II使用信號量,郵箱(消息郵箱)和消息隊列這些中間環節來實現任務間的通信,爲了方便起見,這些中間環節都統稱爲事件。兩個任務通過事件進行通訊的示意圖如下所示。

任務1是發送方,任務二是受信訪,作爲發信方,任務1的責任就是把信息發送到事件上,這項操作叫做發送事件,作爲收信方,任務2的責任就是通過讀事件操作對事件進行查詢,如果有信息,則讀取信息,否則等待。讀事件操作叫做請求事件。UC/OS-II把發送事件,請求事件和其他對事件的操作都定義爲全局函數,以供其他任務調用。
2.信號量
信號量是一類事件,使用信號量的最初目的是爲了給共享資源設立一個標誌,該標誌表示共享資源被佔用情況。對於一個二值型信號我們稱之爲互斥型信號量,對於計數式的信號叫做信號量。下圖表示的是兩個任務在使用互斥型信號量進行通信。
3.消息郵箱
在多任務操作系統中,常常需要在任務與任務之間傳遞一個數據(這種數據叫做消息)的方式來進行通訊,爲了達到這個目的,可以再內存中創建一個存儲空間作爲該數據的緩衝區,如果把這個緩衝區叫做消息緩衝區,那麼在任務傳遞數據(消息)的一個最簡單的方法就是傳遞消息緩衝區的指針。因此用來傳遞消息緩衝區指針的數據結構叫做消息郵箱。下圖是兩個任務使用消息郵箱進行通訊的示意圖。讀取消息也叫消息請求。

4.消息隊列
可以傳遞多個消息的數據結構叫做消息隊列。下圖是兩個任務使用消息隊列進行通訊的示意圖。

任務1向消息隊列發送消息緩衝區指針數組的指針,這個操作叫做發送消息隊列,任務2再從消息隊列讀取消息緩衝區指針數組的指針,這個操作叫做請求消息隊列。

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