




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、7C/OS-II中任務的同步和通信1任務之間的關系相互獨立 任務之間唯一的相關性是競爭CPU資源。互斥 不允許兩個以上的任務共享某一公有資源稱為任務的互斥。 同步 在異步環境下的多個任務因直接制約,互相發送消息,并進行互相合作、互相等待,使得各任務按一定速度執行的過程稱為任務間的同步。 通信 任務之間存在協作和分工,需要相互傳遞各種數據和信息,才能完成各種的功能,這個過程稱為任務的通信。系統中的多個任務在運行時,經常需要互相無沖突地訪問同一個共享資源,或者需要互相支持和依賴,甚至有時還要互相加以必要的限制和制約,才保證任務的順利運行。因此,操作系統必須具有對任務的運行進行協調的能力,從而使任務
2、之間可以無沖突、流暢地同步運行,而不致導致災難性的后果。與人們依靠通信來互相溝通,從而使人際關系和諧、工作順利的做法一樣,計算機系統是依靠任務之間的良好通信來保證任務與任務的同步的。 例如,兩個任務:任務A和任務B,它們需要通過訪問同一個數據緩沖區合作完成一項工作,任務A負責向緩沖區寫入數據,任務B負責從緩沖區讀取該數據。顯然,當任務A還未向緩沖區寫入數據時(緩沖區為空時),任務B因不能從緩沖區得到有效數據而應該處于等待狀態,只有等任務A向緩沖區寫入了數據之后,才應該通知任務B去取數據。(同步)再例如,任務A和任務B共享一臺打印機,如果系統已經把打印機分配給了任務A,則任務B因不能獲得打印機的
3、使用權而應該處于等待狀態,只有當任務A把打印機釋放后,系統才能喚醒任務B使其獲得打印機的使用權。如果這兩個任務不這樣做,那么也會造成極大的混亂 。(互斥)互斥和同步的區別:互斥具有唯一性和排它性,但互斥并不限制任務的運行順序,即任務是無序的。而同步的任務之間則有順序關系。總之,多個任務共享同一資源或有工作順序要求時,在正式工作之前要互相打招呼 (通信,具體而言,是通過所謂的事件實現的)。2任務間的同步依賴于任務間的通信。在C/OS-II中,是使用信號量、郵箱(消息郵箱)和消息隊列這些被稱作事件的中間環節來實現任務之間的通信的。 事件的概念發送事件是為了釋放資源,請求事件是為了占用資源;事件是資
4、源的管理者。3信號量的概念若一個電話亭之允許一個人進去打電話,則電話亭門上應有一個可以變換顏色的牌子(如紅色表示“有人”,綠色表示“無人”)。打電話的人可以根據牌子的顏色來了解電話亭被占用的情況。例如,某個人去電話亭打電話時若發現牌子為綠色,則他可以進去打電話;若為紅色,只好等待;若隨后又來了很多人,那么就要排隊等待。顯然這個牌子就是表示電話亭是否被占用的標志。cos信號量就是用了這個原理,先創建一個信號量(牌子),當有任務申請信號量(有人來打電話),若信號量不為0(綠色),那么系統會登記一下(將牌子變為紅色),然后任務獲得資源(電話亭)的使用權,等任務運行完(打完電話)了之后,就把信號量交給
5、系統(釋放資源),系統就再登記下,將信號量設為1(綠色),這樣就達到了控制一些任務對共享資源的使用沖突了。4信號量和P,V原語信號量實際上是一種約定機制,用于:控制共享資源的使用權。標志某事件的發生。使兩個任務的行為同步。信號量包括:二進制型信號量計數器型信號量5信號量(Sem)的物理意義:信號量(Sem)是一整數;當sem 0時代表可供任務使用的資源實體的數目;當sem 0時則表示正在等待使用資源的任務數目。信號量使用時應注意的問題:用于任務互斥的信號量sem的初值應該大于零;建立一個信號量時必須說明所建信號量所代表的意義(物理)并賦初值。信號量和P,V原語6信號量是由操作系統維護的,任務不
6、能直接修改它的值,只能通過初始化和兩個標準原語(P、V)來對它進行訪問。所謂原語,是操作系統內核代碼的一部分。通常由若干條語句組成,用來實現某個特定操作。通常實現其功能的代碼是不可分割或不可中斷的。原語的不可中斷性是通過在其執行過程中關閉中斷實現的。信號量和P,V原語7P原語的主要功能是申請一個空閑的資源,把信號量減一;若成功,就退出原語;若失敗,任務就被阻塞起來。流程圖:信號量和P,V原語YesNo8V原語的主要功能是釋放一個被占用的資源,把信號量加一;若發現有被阻塞的任務,就從中選擇一個把它喚醒。流程圖:信號量和P,V原語YesNo9事件控制塊為了把描述事件的數據結構統一起來,C/OS-I
7、I使用叫做事件控制塊ECB的數據結構來描述諸如信號量、郵箱(消息郵箱)和消息隊列這些事件。事件控制塊中包含包括等待任務表在內的所有有關事件的數據 。typedef struct INT8U OSEventType;/事件的類型 INT16U OSEventCnt;/信號量計數器 void *OSEventPtr; /消息或消息隊列的指針 INT8U OSEventGrp; /等待事件的任務組 INT8U OSEventTbl OS_EVENT_TBL_SIZE ;/任務等待表 OS_EVENT;把一個任務置于等待狀態要調用OS_EventTaskWait( )函數。該函數的原型為:void O
8、S_EventTaskWait ( OS_EVENT *pevent ); /其中參數為事件控制塊的指針函數OS_EventTaskWait ( ),將在任務調用函數OSPend( ) 請求一個事件時,被OSPend( )所調用。 如果一個正在等待的任務具備了可以運行的條件,那么就要使它進入就緒狀態。這時要調用OS_EventTaskRdy( )函數。該函數的作用就是把調用這個函數的任務在任務等待表中的位置清0(解除等待狀態)后,再把任務在任務就緒表中對應的位置1,然后引發一次任務調度。OS_EventTaskRdy( )函數的原型為:INT8U OS_EventTaskRdy ( OS_EV
9、ENT *pevent, /事件控制塊的指針 void *msg, /未使用 INT8U msk /清除TCB狀態標志掩碼 );函數OS_EventTaskRdy ( )將在任務調用函數OSPost ( ) 發送一個事件時,被函數OSPost ( )所調用。 如果一個正在等待事件的任務已經超過了等待的時間,卻仍因為沒有獲取事件等原因而未具備可以運行的條件,卻又要使它進入就緒狀態,這時要調用OS_EventTO( )函數。OS_EventTO( )函數的原型為:void OS_EventTO ( OS_EVENT *pevent /事件控制塊的指針 );函數OS_EventTO ( )將在任務調
10、用OSPend( ) 請求一個事件時,被函數OSPend( )所調用。 10在C/OS-II初始化時,系統會在初始化函數OSInit( )中按應用程序使用事件的總數OS_MAX_EVENTS(在文件OS_CFG.H中定義),創建OS_MAX_EVENTS個空事件控制塊并借用成員OSEventPtr作為鏈接指針,把這些空事件控制塊鏈接成一個單向鏈表。由于鏈表中的所有控制塊尚未與具體事件相關聯,故該鏈表叫做空事件控制塊鏈表。以后,每當應用程序創建一個事件時,系統就會從鏈表中取出一個空事件控制塊,并對它進行初始化以描述該事件。而當應用程序刪除一個事件時,就會將該事件的控制塊歸還給空事件控制塊鏈表 空
11、事件控制塊鏈表 11在使用信號量之前,應用程序必須調用函數OSSemCreate( )來創建一個信號量,OSSemCreate( )的原型為:OS_EVENT *OSSemCreate ( INT16U cnt/信號量計數器初值 );函數的返回值為已創建的信號量的指針。 任務通過調用函數OSSemPend( )請求信號量,函數OSSemPend( )的原型如下:void OSSemPend ( OS_EVENT *pevent,/信號量的指針 INT16U timeout, /等待時限 INT8U *err /錯誤信息 );參數pevent是被請求信號量的指針。為防止任務因得不到信號量而處于長
12、期的等待狀態,函數OSSemPend允許用參數timeout設置一個等待時間的限制,當任務等待的時間超過timeout時可以結束等待狀態而進入就緒狀態。如果參數timeout被設置為0,則表明任務的等待時間為無限長。任務獲得信號量,并在訪問共享資源結束以后,必須要釋放信號量,釋放信號量也叫做發送信號量,發送信號量需調用函數OSSemPost ( )。OSSemPost ( )函數在對信號量的計數器操作之前,首先要檢查是否還有等待該信號量的任務。如果沒有,就把信號量計數器OSEventCnt加一;如果有,則調用調度器OS_Sched( )去運行等待任務中優先級別最高的任務。函數OSSemPost
13、 ( )的原型為:INT8U OSSemPost ( OS_EVENT *pevent/信號量的指針 );調用函數成功后,函數返回值為OS_ON_ERR,否則會根據具體錯誤返回OS_ERR_EVENT_TYPE、OS_SEM_OVF。 應用程序如果不需要某個信號量了,那么可以調用函數OSSemDel( )來刪除該信號量,這個函數的原型為:OS_EVENT *OSSemDel ( OS_EVENT *pevent, /信號量的指針 INT8U opt, /刪除條件選項 INT8U *err /錯誤信息 ); 信號量及其操作 12互斥型信號量和任務優先級反轉 在可剝奪型內核中,當任務以獨占方式使用
14、共享資源時,會出現低優先級任務先于高優先級任務而被運行的現象,這種現象叫做任務優先級反轉。在一般情況下是不允許出現這種任務優先級反轉現象的,下面就對優先級的反轉現象做一個詳細的分析,以期找出原因及解決方法。 下圖描述了A、B、C三個任務的運行情況。其中,任務A的優先級別高于任務B,任務B的優先級別高于任務C。任務A和任務C都要使用同一個共享資源S,而用于保護該資源的信號量在同一時間只能允許一個任務以獨占的方式對該資源進行訪問,即這個信號量是一個互斥型信號量。 通過例子可以發現,使用信號量的任務是否能夠運行是受任務的優先級別和是否占用信號量兩個條件約束的,而信號量的約束高于優先級別的約束。于是當
15、出現低優先級別的任務與高優先級別的任務使用同一個信號量,而系統中還存有別的中等優先級別的任務時,如果低優先級別的任務先獲得了信號量,就會使高級別的任務處于等待狀態,而那些不使用該信號量的中等級別的任務卻可以剝奪低優先級別的任務的CPU使用權而先于高優先級別的任務而運行了。 解決問題的辦法之一,是使獲得信號量任務的優先級別在使用共享資源期間暫時提升到所有任務最高優先級的高一個級別上,以使該任務不被其他的任務所打斷,從而能盡快地使用完共享資源并釋放信號量,然后在釋放了信號量之后再恢復該任務原來的優先級別。 13互斥型信號量 在描述互斥型信號量的事件控制塊中,除了成員OSEventType要賦以常數
16、OS_EVENT_TYPE_MUTEX以表明這是一個互斥型信號量和仍然沒有使用成員OSEventPtr之外,成員OSEventCnt被分成了低位和高位兩部分:低位用來存放信號值(該值為0 xFF時,信號為有效,否則信號為無效),高位用來存放為了避免出現優先級反轉現象而要提升的優先級別prio。 創建互斥型信號量需要調用函數OSMutexCreate( )。函數OSMutexCreate( )的原型如下:OS_EVENT *OSMutexCreate ( INT8U prio,/優先級別 INT8U *err/錯誤信息 );函數OSMutexCreate( )從空事件控制塊鏈表獲取一個事件控制塊
17、,把成員OSEventType賦以常數OS_EVENT_TYPE_MUTEX以表明這是一個互斥型信號量,然后再把成員OSEventCnt的高8位賦以prio(欲提升的優先級別),低8位賦以常數OS_MUTEX_AVAILABLE(該常數值為0 xFFFF)的低8位(0 xFF)以表明信號量尚未被任何任務所占用,處于有效狀態。 當任務需要訪問一個獨占式共享資源時,就要調用函數OSMutexPend( )來請求管理這個資源的互斥型信號量,如果信號量有信號(OSEventCnt的低8位為0 xFF),則意味著目前尚無任務占用資源,于是任務可以繼續運行并對該資源進行訪問,否則就進入等待狀態,直至占用這
18、個資源的其他任務釋放了該信號量。 函數OSMutexPend( )的原型為:void OSMutexPend ( OS_EVENT *pevent, /互斥型信號量指針 INT16U timeout, /等待時限 INT8U *err /錯誤信息 ); 任務可以通過調用函數OSMutexPost( )發送一個互斥型信號量,這個函數的原型為:INT8U OSMutexPost ( OS_EVENT *pevent /互斥型信號量指針 );14消息郵箱及其操作 如果把數據緩沖區的指針賦給一個事件控制塊的成員OSEventPrt,同時使事件控制塊的成員OSEventType為常數OS_EVENT_TYPE_MBOX,則該事件控制塊就叫做消息郵箱,消息郵箱是在兩個需要通信的任務之間通過傳遞數據緩沖區指針的方法來通信的。 創建郵箱
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鐵道工程與管理專業資格考試試題及答案
- 2025年物流管理資格考試試題及解析
- 老齡化相關面試題及答案
- 托業模擬測試題及答案
- 2025年高中生化學期末考試試題及答案
- 35年java面試題及答案
- 雪球java面試題及答案
- 經濟學微觀經濟學知識要點與試題
- 網絡工程師職業素養在工作中的體現試題及答案
- 網絡風險評估的步驟與工具試題及答案
- 2025中考語文常考作文押題主題附范文
- 河道漂流設計施工方案
- 2025年新媒體職位面試題及答案
- 《跨境電商》課件-跨境電商行業發展
- 2025年陜西煤業化工建設集團有限公司招聘筆試參考題庫含答案解析
- 公立醫院成本核算指導手冊
- 餐飲連鎖管理制度
- 產品制程不良率統計表
- 2024年01月廣東2024年珠海華潤銀行社會招考(125)筆試歷年參考題庫附帶答案詳解
- 人教版小學數學三年級下冊《奧數競賽試卷》
- 《非遺苗族蠟染》少兒美術教育繪畫課件創意教程教案
評論
0/150
提交評論