ucos-II-任務(wù)通信與同步_第1頁
ucos-II-任務(wù)通信與同步_第2頁
ucos-II-任務(wù)通信與同步_第3頁
ucos-II-任務(wù)通信與同步_第4頁
ucos-II-任務(wù)通信與同步_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、任務(wù)的同步與一個通信 初解            操作系統(tǒng)就像就像一個好的家長,控制著資源的公平分配         應(yīng)用程序中的各個任務(wù),必須通過彼此之間的有效合作,才能完成一項大規(guī)模的工作。因為這些任務(wù)在運行時,經(jīng)常需要相互無沖突地訪問一個共享資源,或者需要相互支持和依賴,甚至有時候還需要互相加以必要的制約,才能保證任務(wù)的順利進行。因此操作系統(tǒng)必須具有對任務(wù)運行進行協(xié)調(diào)的能力,從而使

2、任務(wù)之間可以無沖突,流暢的同步運行,而不致導(dǎo)致災(zāi)難性的后果。     這與人們依靠通信來相互溝通,從而使人際關(guān)系和諧,工作順利的做法是一樣的,計算機系統(tǒng)依靠任務(wù)間的良好通信來保證任務(wù)與任務(wù)的同步。   任何為任務(wù)所占用的實體都可以稱為資源。資源可以是輸入輸出設(shè)備,比方打印機,鍵盤顯示器,資源也可以是一個變量,一個結(jié)構(gòu)或者是一個數(shù)組。        1任務(wù)的同步和事件     嵌入式系統(tǒng)中的各個任務(wù)

3、是為同一個大的任務(wù)效勞的子任務(wù),他們不可防止的要共同使用一些資源,并且在處理一些需要多個任務(wù)共同協(xié)同來完成的工作時,還需要相互的支持和限制。因此,對一個完善的多任務(wù)操作系統(tǒng)來說,系統(tǒng)必須具有完備的同步和通信機制         任務(wù)的同步:      為了實現(xiàn)各個任務(wù)之間的合作和無沖突的運行,在各個任務(wù)之間必須建立一些制約關(guān)系。其中一種制約關(guān)系叫做直接制約關(guān)系,另一種制約關(guān)系叫做間接制約關(guān)系      直接

4、制約關(guān)系來自任務(wù)的合作:例如,有任務(wù)A和任務(wù)B兩個任務(wù),他們需要通過訪問同一個數(shù)據(jù)緩沖區(qū)合作完成一項工作,任務(wù)A負責(zé)向緩沖區(qū)寫入數(shù)據(jù),任務(wù)B負責(zé)向緩沖區(qū)讀取該數(shù)據(jù)。顯然,當(dāng)任務(wù)A還未向緩沖區(qū)寫入數(shù)據(jù)時緩沖區(qū)為空時,任務(wù)B因不能從緩沖區(qū)得到有效地數(shù)據(jù)而應(yīng)處于等待狀態(tài);只有等任務(wù)向緩沖區(qū)寫入了數(shù)據(jù)之后,才應(yīng)該通知任務(wù)去讀取數(shù)據(jù)。相反,當(dāng)緩沖區(qū)的數(shù)據(jù)還未被任務(wù)讀取時緩沖區(qū)為滿時,任務(wù)就不能向緩沖區(qū)寫入新的數(shù)據(jù)而應(yīng)該處于等待狀態(tài);只有當(dāng)任務(wù)自緩沖區(qū)讀取數(shù)據(jù)后,才應(yīng)該通知任務(wù)寫入數(shù)據(jù)。顯然,如果這兩個任務(wù)不能如此協(xié)調(diào)工作,將勢必造成嚴(yán)重的后果。 間接制約關(guān)系源于對資源的共享:例如:任務(wù)A和任務(wù)

5、B共享一臺打印機,如果系統(tǒng)已經(jīng)把打印機分配給了任務(wù)A,那么任務(wù)B因不能獲得打印機的使用權(quán)而應(yīng)該處于等待狀態(tài);只有當(dāng)任務(wù)A把打印機釋放后,系統(tǒng)才能喚醒任務(wù)B使其獲得打印機的使用權(quán)。如果這兩個系統(tǒng)不這樣做,那么也會造成嚴(yán)重的后果。        由此可知:在多任務(wù)合作工作的過程中,操作系統(tǒng)應(yīng)該解決兩個問題:一是各任務(wù)之間應(yīng)該具有一種互斥的關(guān)系,即對于某個共享資源,如果一個任務(wù)正在使用,那么其他任務(wù)只能等待,等到這個任務(wù)釋放該資源后,等待的任務(wù)之一才能使用它;二是相關(guān)的任務(wù)在執(zhí)行上要有先后順序,一個任務(wù)要等其伙伴發(fā)來通知,或建立了

6、某個條件后才能繼續(xù)進行,否那么只能等待。          任務(wù)間的這種制約性的合作運行機制叫做任務(wù)間的同步2 事件     ucos使用信號量,郵箱和消息隊列這些中間環(huán)節(jié)來實現(xiàn)任務(wù)間的通信。為了方便起見,這些中間環(huán)節(jié)統(tǒng)一被稱作“事件        這是兩個任務(wù)通過事件進行通信的示意圖。任務(wù)1是發(fā)信方,任務(wù)2是收信方。作為發(fā)信方,任務(wù)1的責(zé)任是把信息發(fā)到事件上,這項操

7、作叫做發(fā)送事件。作為收信方,任務(wù)2的責(zé)任是通過讀事件操作對事件進行查詢:如果有信息,那么讀取信息;否那么等待。讀事件操作叫做請求事件。   ucos把任務(wù)發(fā)送事件,請求事件以及其他對事件的操作都定義成全局函數(shù)      1信號量     信號量是一類事件。使用信號量的最初目的,是為了給共享資源設(shè)立一個標(biāo)志,該標(biāo)志表示該共享資源被占用的情況。這樣,當(dāng)一個任務(wù)在訪問共享資源之前,就可以先對這個標(biāo)志進行查詢,從而在了解資源被占用的情況之后,來決定自己的行為。  信號量說白

8、了就是一個說明共享資源占用情況的標(biāo)志量。     觀察一下人們得日常生活,常用到的共享資源-公用 亭的使用規(guī)那么,就會發(fā)現(xiàn)這種規(guī)那么很適合在協(xié)調(diào)某種資源用戶關(guān)系時使用。    如果一個 亭只允許一個人進去打 ,那么 亭的門上就應(yīng)該有一個變換顏色的牌子。例如,紅色表示有人,綠色表示沒人當(dāng)有人進去時,牌子就會變成紅色;出來時牌子就會變成綠色。這樣打 的人就可以根據(jù)牌子的顏色來了解 亭的被占用情況。例如,如果有一個人去 亭打 時,見到牌子上的顏色是綠色的,那么他就可以進去打 ;如果見到牌子上的顏色是紅色的,那么他只好等待

9、;如果又陸續(xù)來了很多人,那么就要排隊等待。顯然 亭的牌子就是一個表示 亭是否已被占用的標(biāo)志。由于這種標(biāo)志特別像交叉路口的信號燈,所以人們最初給這種標(biāo)志起的名稱就是信號燈。后來因為它含有了量得概念,所以又叫做信號量。   如果 亭可以允許多個人打 ,那么 亭門前就不應(yīng)該是那種只有紅綠兩種顏色的牌子。而應(yīng)該是一個計數(shù)器,該計數(shù)器每進去一個人時就會自動減一。而每出去一個人時,就會自動加一。如果其初值按 亭的最大容量來設(shè)置,那么來人只要見到計數(shù)器的值大于0,就可以進去打 ;否那么,只好等待。這種計數(shù)式的信號叫做信號量。    這是兩個任務(wù)是用互斥型信號

10、量進行通信,從而使這兩個任務(wù)無沖突地訪問一個共享資源。任務(wù)1在訪問共享資源之前先進行請求信號量的操作,當(dāng)任務(wù)1發(fā)現(xiàn)信號量的標(biāo)志為“1時,他一方面把信號量的標(biāo)志由1改為0,另一方面進行共享資源的訪問。如果任務(wù)2在任務(wù)1已經(jīng)獲得信號之后來請求信號量,那么由于他獲得的信號量的標(biāo)志是0,所以任務(wù)2就只有等待而不能訪問共享資源了。顯然,這種做法可以有效地防止兩個任務(wù)同時訪問一個共享資源所造成的沖突。   那么任務(wù)2何時才能訪問共享資源呢?當(dāng)然是任務(wù)1使用完共享資源之后,由任務(wù)1向信號量發(fā)信號是信號量的標(biāo)志由0變?yōu)?時,任務(wù)2就有時機訪問共享資源了。和任務(wù)1一樣,任務(wù)2一旦獲得了共享資

11、源的使用權(quán),那么在訪問共享資源之前一定要把信號量的標(biāo)志由1置為0。     對任哲書120頁程序的說明          在程序YourTask有以上一段話。   OSTime是記錄時鐘節(jié)拍數(shù)的一個全局變量。因為在MyTask中OSTimeDly(200),因為MyTask的優(yōu)先級更高,所以在YourTask()運行等待500個時鐘節(jié)拍的過程中,會被MyTask中斷兩次, 因為沒有對共享資源全局變量char *s進行保護,所以

12、每次中斷都會被MyTask修改,這時YourTask得到的就是“錯誤的信息            在任哲書123頁程序中在MyTask和YourTask中都加上了這樣一段話這里的ac_key充當(dāng)?shù)木褪切盘柫康淖饔谩6鴄c_key =FALSE,  ac_key = TRUE這兩句話充當(dāng)?shù)木褪侨蝿?wù)1在訪問共享資源之前先進行請求信號量的操作,當(dāng)任務(wù)1發(fā)現(xiàn)信號量的標(biāo)志為“1時,他一方面把信號量的標(biāo)志由1改為0,另一方面進行共享資源的訪問。如果任務(wù)2在任務(wù)1已經(jīng)獲得信號之后來請求信號

13、量,那么由于他獲得的信號量的標(biāo)志是0,所以任務(wù)2就只有等待而不能訪問共享資源了。顯然,這種做法可以有效地防止兩個任務(wù)同時訪問一個共享資源所造成的沖突。    那么任務(wù)2何時才能訪問共享資源呢?當(dāng)然是任務(wù)1使用完共享資源之后,由任務(wù)1向信號量發(fā)信號是信號量的標(biāo)志由0變?yōu)?時,任務(wù)2就有時機訪問共享資源了。和任務(wù)1一樣,任務(wù)2一旦獲得了共享資源的使用權(quán),那么在訪問共享資源之前一定要把信號量的標(biāo)志由1置為0。的作用存在的問題    如果把任務(wù)YourTask中發(fā)信號語句ac_key = TRUE 刪掉,在運行這個程序時,由于任務(wù)Y

14、ourTask不發(fā)信號,所以就使得高優(yōu)先級別的任務(wù)MyTask雖然獲得了CPU的使用權(quán),但由于始終得不到信號量而不能運行,當(dāng)然,也就沒有時機讓出CPU的使用權(quán),從而導(dǎo)致任務(wù)YouTask也不能運行,于是應(yīng)用程序就死掉了   解決方案:   解決上述問題的一個合理方法就是給等待信號量的任務(wù)設(shè)置一個等待時限。當(dāng)?shù)却盘柫康娜蝿?wù)因等待某信號的時間超過這個時限時,就可以使等待任務(wù)脫離等待狀態(tài)而繼續(xù)運行。這樣就不會出現(xiàn)上述死機現(xiàn)象。 消息郵箱   在多任務(wù)操作系統(tǒng)中,常常需要在任務(wù)與任務(wù)之間通過傳遞一個數(shù)據(jù)消息的方式來通信。為了到達這個目的,可以在內(nèi)存中創(chuàng)立一個存儲空間作為該數(shù)據(jù)的緩沖區(qū)。如果把這個緩沖區(qū)叫做消息緩沖區(qū),那么,在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論