




已閱讀5頁,還剩61頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統及應用,第六章同步、互斥與通信,主要內容,概述信號量郵箱和消息隊列管道,ISRx,Tasky,POST,PEND,任務與ISR之間的同步(單向),Taskx,Tasky,POST,PEND,POST,PEND,任務與任務之間的同步(雙向),任務與任務之間的同步(單向),Taskx,Tasky,POST,PEND,在單處理器平臺上,嵌入式操作系統內核提供的同步、互斥與通信機制主要包括:信號量(semaphore),用于互斥與同步事件(組)(eventgroup),用于同步異步信號(asynchronoussignal),用于同步郵箱(mailbox)、消息隊列(messagequeue),用于消息通信管道(pipe),提供非結構化數據交換和實現同步,以下一些機制也可用于同步與通信(在單處理器或多處理器系統中):全局變量共享內存Sockets遠程過程調用(RemoteProcedureCall),第一節信號量,信號量的種類及用途信號量的定義互斥信號量二值信號量計數信號量信號量機制的主要數據結構典型的信號量操作,什么是信號量,信號量被定義為一個整形變量,在其上定義了以下三個操作:1、可以被初始化一個非負數2、wait操作(P操作)將信號量的值減1后,若該值為負,則執行wait操作的任務等待3、signal操作(V操作)將信號量的值增1后,若該值為非正,則執行signal操作的任務喚醒,信號量用于實現任務與任務之間、任務與中斷處理程序之間的同步與互斥。信號量一般分為三種:,信號量的種類及用途,用于解決互斥問題。它比較特殊,可能會引起優先級反轉問題。,用于解決同步問題,用于解決資源計數問題,將信號量進行種類細分,可以根據其用途,在具體實現時做專門處理,提高執行效率和可靠性。,互斥信號量,計數信號量,二值信號量,互斥信號量,WaitB(S):/申請信號量ifS.value1;/當前沒有其他任務使用信號量thenS.value=S.value-1=0/將信號量值修改為0,獨占共享資源elsebeginInsert(CALLER,S.L);/如果當前有其他任務使用信號量,將該任務放入等待隊列Block(CALLER);/修改該任務的狀態為等待態(阻塞任務)endSignalB(S):/釋放信號量ifS.Lqueueisempty;/如果等待序列為空,沒有其他任務等待使用該共享資源thenS.value=1;/釋放信號量elsebeginRemove(S.L,id);/如果有其他任務等待使用該共享資源,則從等待隊列中將該任務移除wakeup(id);/將該任務的狀態改為就緒態(喚醒任務)end,用信號量實現任務間的互斥,varmutex:SharedSemaphore;beginmutex:=1;parbeginP1:P2:Pi:repeatWait(mutex);“進程Pi的臨界代碼段”;Signal(mutex);foreverPn:parendend,互斥信號量狀態圖,互斥信號量狀態圖,各種互斥機制比較,二值信號量,可獲得,不可獲得,申請并獲得(值為0),釋放(值為1),初始化值為0,二值信號量狀態圖,Task1()執行一些操作;將信號量sem1置1;申請信號量sem2;,Task2()申請信號量sem1;執行一些操作;將信號量sem2置1;,Task2申請信號量sem1失敗,系統切換到Task1,sem1被置1后,Task2得到sem1并搶占Task1,Task2運行到某處時因某種原因被阻塞,系統切換到Task1,用二值信號量實現兩個任務之間的雙向同步Task2優先級高于Task1sem1和sem2的初始值均為0,二值信號量實現同步,計數信號量,計數信號量,計數信號量狀態圖,可獲得,不可獲得,初始化值大于0,申請并獲得值為0,釋放值為1,申請并獲得值減1,釋放值加1,計數(一般)信號量同步原語,Wait(S):S.value:=S.value-1;/有新任務來使用共享資源將信號量的值減1ifS.value0/如果信號量的值為負,表示共享資源已經分配完畢thenbeginInsert(CALLER,S.L);/將該任務插入等待序列Block(CALLER);/將該任務狀態改為等待態(阻塞任務)endSignal(S):S.value:=S.value+1;/任務使用完共享資源,將信號量的值加1,釋放一個信號量ifS.value=0/如果信號量為負,表示仍有等待該資源的任務被阻塞thenbeginRemove(S.L,id);/將等待隊列中的一個任務從隊列中移除wakeup(id);/將該任務的狀態修改為就緒態,喚醒任務endS的絕對值表示在該信號量列表中已阻塞的任務數目,計數信號量,計數信號量使用實例:有界緩沖問題,計數信號量,VarE,F:Semaphore;mutex:binarySemaphore;begin(*mainprogram*)F:=0;E:=n;mutex=1;parbeginproducer1;producern;consumer1;consumerm;parendend,生產者任務beginrepeat生產數據/生產者生產數據Wait(E);/減少一個空緩沖區項Wait(mutex);/分配空緩沖區和移動指針P操作是互斥的“分配空緩沖區并調整指針P的臨界段”;“向空緩沖區中裝入數據”Signal(mutex);/釋放互斥信號量Signal(F);/增加一個滿緩沖區項foreverend,消費者任務beginrepeat消費數據/消費者取走數據Wait(F);/減少一個滿緩沖區項Wait(mutex);/分配滿緩沖區和移動指針C操作是互斥的“分配滿緩沖區并調整指針C的臨界段”;“從滿緩沖區中取走數據”Signal(mutex);/釋放互斥信號量Signal(F);/增加一個空緩沖區項foreverend,計數信號量,信號量機制的主要數據結構,信號量機制的主要數據結構,信號量控制塊:管理所有創建的信號量,內核在系統運行時動態分配和回收信號量控制塊互斥和二值信號量控制塊結構:Binary_Semaphore_Control_Block,wait_queue任務等待隊列attributes信號量屬性lock_nesting_behavior試圖嵌套獲得時的規則wait_discipline任務等待信號量的方式priority_ceiling優先級天花板值lock是否被占有holder擁有者nest_count嵌套層數,計數信號量控制結構Counting_Semaphore_Control_Blockwait_queue任務等待隊列attributes計數信號量屬性maximum_count最大計數值wait_discipline任務等待信號量的方式count當前計數值,信號量機制的主要數據結構,典型的信號量操作,創建信號量獲取(申請)信號量釋放信號量刪除信號量清除信號量的任務等待列表獲取有關信號量的各種信息,創建信號量,功能:根據應用傳遞的參數創建一個信號量參數:信號量的名字、屬性和初始值等。內核動作:從空閑信號量控制塊鏈中分配一個信號量控制塊,并初始化信號量屬性。創建成功時,為其分配唯一的ID號返回給應用。如果已創建信號量數量已達到用戶配置的最大數量,就返回錯誤。,信號量的屬性,信號量的屬性,信號量的類型,互斥信號量(MUTEX_SEMAPHORE),計數信號量(COUNTING_SEMAPHORE),二值信號量(BINARY_SEMAPHORE),任務等待信號量的方式,先進先出(FIFO)順序,優先級(PRIORITY)順序,優先級反轉問題的解決方法(只適用于互斥信號量),優先級繼承算法(INHERIT_PRIORITY),優先級天花板算法(PRIORITY_CEILING),需給出所有可能獲得此信號量的任務中優先級最高的任務的優先級。,獲取(申請)信號量,功能:試圖獲得應用指定的信號量。該功能流程如下:if信號量的值大于0then將信號量的值減1else根據接收信號量的選項,將任務放到等待隊列中,或是直接返回,獲取(申請)信號量,當所申請的信號量不能被立即獲得時,可以有以下幾種選擇:永遠等待不等待,立即返回,并返回一個錯誤狀態碼指定等待時限(可有效避免死鎖)注意:不允許在ISR中選擇等待當任務選擇等待時,將被按FIFO或優先級順序放置在等待隊列中,釋放信號量,功能:釋放一個應用指定的信號量。if沒有任務等待這個信號量then信號量的值加1else將信號量分配給一個等待任務(將相應的任務移出等待隊列,使其就緒)如果使用了優先級繼承或優先級天花板算法,那么執行該功能(系統調用)的任務的優先級將恢復到原來的高度。,刪除信號量,功能:從系統中刪除應用指定的一個信號量內核動作:將信號量控制塊返還給系統刪除信號量的不一定是創建信號量的任務如果有任務正在等待獲得該信號量,執行此功能將使所有等待這個信號量的任務回到就緒隊列中,且返回一個狀態碼指示該信號量已被刪除,清除信號量的任務等待列表,為了清除等待一個信號量的所有任務,某些內核支持Flush操作,以便釋放信號量等待任務列表中的所有任務。當多個任務的執行必須在某些點相遇時,需要這樣的機制。,第二節郵箱和消息隊列,通信方式概述消息隊列機制的主要數據結構典型的消息隊列操作,任務間的通信方式,任務間的通信方式:直接通信間接通信消息:內存空間中一段長度可變的緩沖區,其長度和內容均可以由用戶定義,其內容可以是實際的數據、數據塊的指針或空。消息進一步分為:郵箱和消息隊列,消息隊列機制的主要數據結構,消息隊列及其相關的參數和支持數據結構,發送和接收消息的消息拷貝和內存使用這種消息傳遞方法效率低、占用空間大一種效率更高的方式是傳遞消息指針,消息的發送或接收的兩種方法,number_of_message,max_message_count,消息隊列控制塊,消息隊列緩沖區,消息隊列機制的主要數據結構,消息隊列的環形緩沖,消息隊列機制的主要數據結構,max_message_count,queue_end,queue_start,queue_out,number_of_message,queue_in,消息指針,消息隊列狀態圖,非空,滿,隊列創建消息數為0,消息隊列狀態圖,消息發送消息數加1,空,消息發送消息數為1,消息接收消息數為0,消息接收消息數減1,消息接收消息數減1,消息發送消息數等于隊列長度,典型的消息隊列操作,創建消息隊列發送普通消息發送緊急消息發送廣播消息接收消息刪除消息隊列獲取有關消息隊列的各種信息,創建消息隊列,創建消息隊列時,調用者可以指定如下參數:消息的最大長度每個消息隊列中最多的消息數消息隊列的屬性任務等待消息時的排隊方式:FIFO或PRIORITY系統為新創建的消息隊列分配唯一的ID,發送消息,接收消息,刪除消息隊列,從系統中刪除指定的消息隊列,釋放消息隊列控制塊及消息隊列緩沖區。任何知道此消息隊列ID號的代碼都可以刪除它。消息隊列被刪除后,所有等待從這個消息隊列接收消息的任務得到一個錯誤信息表明消息隊列已被刪除都回到并回到就緒態。,消息隊列的其他典型使用,緊耦合的單向數據通信:發送任務發送消息后要求一個響應信號,表明接收任務已經成功接收到消息。,消息隊列的其他典型使用,緊耦合的雙向數據通信:如果數據需要在任務之間雙向流動,則可以采用緊耦合的雙向數據通信模式(也稱為全雙工通信)。,第三節管道,概述管道機制的主要數據結構典型的管道操作管道機制的典型應用,管道機制概述,管道(pipe)是提供非結構化數據交換和實現任務間同步的內核對象。在傳統的實現中,管道是單向數據交換設施。,Task1,Task2,管道,管道中的數據,寫描述符,讀描述符,向管道寫數據,從管道讀數據,數據在管道內像一個非結構字節流,按FIFO的次序從管道中讀出。當管道空時,阻塞讀者,當管道滿時,阻塞寫者。,管道機制概述,管道允許有多個讀者和寫者。,管道,管道的狀態轉換圖,非空,滿,創建管道無寫入數據,讀數據,有剩余數據,空,寫數據,讀數據,無數據留下,寫數據,有剩余空間,讀數據,寫數據,無剩余空間,管道機制的主要數據結構,典型的管道操作,選擇(Select)操作Select操作允許一個任務阻塞并等待一個或多個管道上的一個指定條件的發生。,Task1,ISR,Task2,Task3,任務Task3等待從Pipe1和Pipe2這兩個管道讀數據并寫到第三個管道Pipe3上。在這種情況下,當頭兩個管道中的任意一個有數據時,Select調用返回。,管道機制的典型應用,TaskA,TaskB,Select操作,Select操作,管道C,管道D,任務A和任務B打開兩個管道作為任務間的通信方式:打開管道C作為從任務A到任務B的數據傳輸,打開管道D作為從任務B到任務A的回應。任務A等待管道C編程可寫,也等待管道D上來自任務B的回應。,兩個任務之間的同步,管道主要用于任務到任務或ISR到任務的數據傳輸,第四節事件,概述事件機制的主要數據結構典型的事件操作事件機制的典型應用,在嵌入式實時內核中,事件是指一種表明預先定義的系統事件已經發生的機制。事件機制用于任務與任務之間、任務與ISR之間的同步。其主要的特點是可實現一對多的同步。一個事件就是一個標志,不具備其它信息。一個或多個事件構成一個事件集。事件集可以用一個指定長度的變量(比如一個8bit,16bit或32bit的無符號整型變量,不同的操作系統其具體實現不一樣)來表示,而每個事件由在事件集變量中的某一位來代表。,概述,事件及事件集有以下特點:事件間相互獨立事件僅用于同步,不提供數據傳輸功能事件無隊列,即多次發送同一事件,在未經過任何處理的情況下,其效果等同于只發送一次。提供事件機制的意義在于:當某任務要與多個任務或中斷服務同步時,就需要使用事件機制。若任務需要與一組事件中的任意一個發生同步,可稱為獨立型同步(邏輯“或”關系)。任務也可以等待若干事件都發生時才同步,稱為關聯型同步(邏輯“與”關系)。,概述,“或”同步和“與”同步,概述,任務,任務,任務,任務,ISR,ISR,OR,AND,“與”型同步,“或”型同步,事件集,事件集,POST,POST,PEND,PEND,用多個事件的組合發信號給多個任務,概述,任務,任務,任務,ISR,OR,AND,事件集,事件集,事件集(8,16或32位),POST,PEND,PEND,術語:發送事件集。指在一次發送過程中發往接收者(比如任務)的一個或多個事件的組合。待處理事件集。指已被發送到一個接收者但還沒有被接收(即正在等待處理)的所有事件的集合。事件條件。指事件接收者在一次接收過程中期待接收的一個或多個事件的集合。“或”同步:待處理事件集只要包括事件條件中的任一事件即可滿足要求;“與”同步:其二是待處理事件集必須包括事件條件中的全部事件方可滿足要求。,概述,事件機制的主要數據結構,(1)事件集控制塊結構(Event_set_Control_Block):attribute事件集的屬性(排隊方式:FIFO或PRIORITY)event_set當前事件集(指示被置位且未被接受的事件標志位)eventset_condition_queue_and事件集”與”等待隊列eventset_condition_queue_or事件集”或”等待隊列內核為每個等待事件集的任務生成一個“任務事件集等待控制塊”(2)任務事件集等待控制塊結構(Event_set_Task_Waited_Buddy)task等待任務的控制塊指針event_set任務當前等待的事件集flag_node_array任務等待標志節點數組任務等待標志節點數組的長度等于事件集的位數,其中每個節點元素對應一個等待的事件標志,典型的事件操作,創建事件集刪除事件集發送事件(集)接收事件(集)獲取有關事件集的各
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高精度數字電流表項目提案報告模板
- 綠化養護試題及答案
- javawebservice面試題及答案
- 電路史詩考試題及答案
- java面試讓寫面試題及答案
- ssop考試題及答案
- 地理優勢面試題及答案
- 新分教師培訓
- 2025年軌道車輛門系統項目申請報告
- 重癥肺炎的觀察與護理
- (完整版)附:《檔案目錄清單》
- 有機硅化學課件-有機硅化學概述
- 丹尼森組織文化模型
- 中藥煎藥室應急預案
- 華東師大版七年級數學上冊教學課件
- 中國航天(航天科普知識)PPT
- GB/T 27806-2011環氧瀝青防腐涂料
- GB/T 17949.1-2000接地系統的土壤電阻率、接地阻抗和地面電位測量導則第1部分:常規測量
- 《出生醫學證明》單親母親情況聲明
- 4配電柜安全風險點告知牌
- 旋挖機操作手知識試卷含參考答案
評論
0/150
提交評論