iT邦幫忙

2021 iThome 鐵人賽

DAY 14
1

之前,我們都在討論排程、號誌的觀念,在有效的排程之後,就能讓任務很順利的運作,達到一個有效的即時系統。但是,任務跟任務之間還是需要互相交換訊息,有交換訊息的功能,才能達成一個有效的即時系統,所以Kernel就提供一項訊息佇列(message queue)的功能。

維基百科對於訊息佇列的定義如下:

在電腦科學中,訊息佇列(英語:Message queue)是一種行程間通訊或同一行程的不同執行緒間的通信方式,軟體的貯列用來處理一系列的輸入,通常是來自使用者。訊息佇列提供了非同步的通信協定,每一個貯列中的紀錄包含詳細說明的資料,包含發生的時間,輸入裝置的種類,以及特定的輸入參數,也就是說:訊息的傳送者和接收者不需要同時與訊息佇列互動。訊息會儲存在佇列中,直到接收者取回它。一個 WIMP 環境像是 Microsoft Windows,藉由優先的某些形式(通常是事件的時間或是重要性的順序)來儲存使用者產生的事件到一個事件貯列中。系統把每個事件從事件貯列中傳遞給目標的應用程式。

簡單說,訊息佇列有點像是一個緩衝區,也就是上述所說,兩個任務需要溝通時,就透過訊息佇列交換訊息,這個是不是就很像是一個韌體的溝通功能,只是溝通的對象不同而已。

訊息佇列的組成:一個控制區塊QCB(Queue control block)、給予一個特定的名稱、一個唯一的ID、儲存器緩衝區、給予一個佇列長度、一個最大訊息長度以及單工或多工任務的等待列表。

訊息佇列也是依照二進位的邏輯存在,如果沒有任務的情況下,他就處於0的狀態,當有訊息進來時,就會慢慢的將訊息放到佇列裡面,直到訊息存滿的狀態,此時,新的訊息就不可能再繼續存入,要等待訊息佇列將裡面的訊息釋放出去之後,會有新的空間出現,當然也有可能裡面的訊息是錯誤的,或者在發送時出現錯誤,這些情況,我們後續再討論,邏輯上大致是如此。


上一篇
Day 13 同步、多個任務或者迴圈存取同步
下一篇
Day 15 訊息佇列的儲存、接收及傳送
系列文
ARM 組合語言:30天學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言