1. 程式人生 > >DSP——DSP/BIOS學習筆記之(三)——TSK和MBX

DSP——DSP/BIOS學習筆記之(三)——TSK和MBX

1、它們都是任務間通訊的手段,但是應用場合不同
 訊號量用作任務同步或者資源的互斥訪問
至於郵箱,名副其實的,可以“郵寄”一些東東給別的任務
舉個例子的話,我覺得可以說訊號量就像別人打你電話只響一下(具體代表什麼含義在於你們之間的約定),而郵箱就像簡訊哇,寫啥都行。當然,二進位制訊號量也可以用郵箱實現。
2、任務與事件的概念不同
 任務作為一個競爭系統資源的單位,各個待執行的任務被系統統一排程;
而任務之間(或者任務與中斷之間)的互動體現在訊號上,也就是事件。某些事件的發生可以使任務的執行狀態發生變化。
比如兩個任務A、B同時競爭某個資源,以訊號量為途徑實現互斥。
在A獲得了訊號量後,在使用資源的時候,B由於等待訊號量而處於阻塞狀態。

A使用完畢資源後,告知B“我用完了,你們用吧”,這個事件的傳達是通過訊號量完成的。
3、這個問題懶得敲了,複製貼上之
 “對訊號量的初始計數值賦值。該初始值為0到65,535之間的一個數。如果訊號量是用來表示一個或者多個事件的發生,那麼該訊號量的初始值應設為0。如果訊號量是用於對共享資源的訪問,那麼該訊號量的初始值應設為1(例如,把它當作二值訊號量使用)。最後,如果該訊號量是用來表示允許任務訪問n個相同的資源,那麼該初始值顯然應該是n,並把該訊號量作為一個可計數的訊號量使用。”

  可以一個任務對應多個事件吧,看你怎麼設計了,比較簡單的情況的話,一個任務可能也就關注一個事件。 關於初始值的問題,你說的應該是訊號量的初始值吧,訊號量最大的作用就是共享和競爭資源
初始值為n的情況,比如有n臺印表機,每個時間點上一臺印表機只有一個任務可以訪問,如果有m個任務都想使用印表機,而且m>n的話,就有資源的徵用問題,引入一個初始值為n的訊號量,此訊號量的數值所代表的就是“當前還有多少印表機可以使用”。想用印表機的任務去看訊號量,如果還有的話就Take之,否則就等待(阻塞)或者先幹別的去(不等待立即返回),同樣的,使用過印表機的就Give之,以便其他任務可以使用印表機。
  初值為0的情況也是普遍存在的,例如一個數據處理系統,任務A產生資料,快取到一定數目後交給任務B做處理,這個事件使用訊號量做通知的手段。那麼系統初始化時,對B而言,是沒有資料要處理的,那麼訊號量自然為0了。每當任務A提交一次資料,對訊號量加1(做SemGive),任務B發現訊號量非0後,就去處理資料,處理一個,對訊號量減1(做SemTake)