版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng)第五講 嵌入式操作系統(tǒng)-任務(wù)通信北京航空航天大學(xué)機(jī)電工程及自動(dòng)化系魏洪興任務(wù)間通信任務(wù)間通信(Intertask Communication):任務(wù)之間為了協(xié)調(diào)工作,需要相互交換數(shù)據(jù)和控制信息;任務(wù)間通信的方式:共享內(nèi)存(shared memory);消息傳遞(message passing);管道(pipe);信號(hào)(signal)。共享內(nèi)存各個(gè)任務(wù)共享它們地址空間當(dāng)中的某些部分,即共享內(nèi)存。在此區(qū)域,可以任意讀寫和使用任意的數(shù)據(jù)結(jié)構(gòu)(緩沖區(qū));一組任務(wù)向共享內(nèi)存中寫數(shù)據(jù),另一組任務(wù)從中讀數(shù)據(jù),通過(guò)此方式實(shí)現(xiàn)它們之間的信息交換。 內(nèi)存 共享數(shù)據(jù)任務(wù)1任務(wù)2任務(wù)3消息傳遞消息:由若干數(shù)
2、據(jù)位組成;消息傳遞:任務(wù)之間通過(guò)發(fā)送和接收消息來(lái)交換信息;消息機(jī)制由OS來(lái)維護(hù),包括定義尋址方式、認(rèn)證協(xié)議、消息的大小等。一般提供兩個(gè)操作:send( ),發(fā)送一條消息;receive( ),接收一條消息。如果兩個(gè)任務(wù)P和Q想要進(jìn)行通信,它們需要在兩者之間建立一個(gè)通信鏈路;使用send( )和receive( )交換信息。直接通信直接通信:通信雙方必須指明與之通信的對(duì)象。send(P, message):發(fā)送一條消息給任務(wù)P;receive(Q, message):從任務(wù)Q那里接收一條消息。如果沒(méi)有收到消息,可以阻塞起來(lái)等待消息的到來(lái),也可以立即返回;通信雙方之間存在一條通信鏈路通信鏈路是自動(dòng)
3、建立的,由OS來(lái)維護(hù);每條鏈路只涉及兩個(gè)任務(wù),每對(duì)任務(wù)之間僅存在一條鏈路;通信鏈路可以是單向或雙向的。間接通信1間接通信:通信時(shí)不必指明發(fā)送或接收的對(duì)象,而是通過(guò)共享的郵箱來(lái)發(fā)送和接收消息。send(A, message):發(fā)送一條消息給郵箱A;receive(A, message):從郵箱A接收一條消息。間接通信的特點(diǎn)對(duì)于一對(duì)任務(wù),只有當(dāng)它們共享一個(gè)公共郵箱時(shí)才能進(jìn)行通信;一個(gè)郵箱可以被多個(gè)任務(wù)訪問(wèn),每對(duì)任務(wù)也可以使用多個(gè)郵箱來(lái)通信;可以是單向或雙向的。間接通信2郵箱只能存放單條消息,其狀態(tài)只有兩種:空或滿。另一種間接通信機(jī)制是:消息隊(duì)列。消息隊(duì)列與郵箱類似,但可以同時(shí)存放若干條消息,提供了
4、一種任務(wù)間緩沖通信的方法。任務(wù)1 任務(wù)2 消息 消息隊(duì)列1消息 消息隊(duì)列2管道(pipe)管道通信由UNIX首創(chuàng),由于其有效性,后來(lái)的一些系統(tǒng)相繼引入了管道技術(shù);管道通信以文件系統(tǒng)為基礎(chǔ),所謂管道即連接兩個(gè)任務(wù)之間的一個(gè)打開(kāi)的共享文件,專用于任務(wù)之間的數(shù)據(jù)通信;發(fā)送任務(wù)從管道的一端寫入數(shù)據(jù)流,接收任務(wù)從管道的另一端按先進(jìn)先出的順序讀出數(shù)據(jù)流;管道的讀寫操作即為文件操作fwrite/fread,數(shù)據(jù)流的長(zhǎng)度和格式?jīng)]有限制。信號(hào)(signal)信號(hào)(異步信號(hào))是任務(wù)的一個(gè)標(biāo)識(shí),表明某個(gè)異步事件已經(jīng)發(fā)生了,該事件可能來(lái)自于外部(如其他的任務(wù)、硬件或定時(shí)器),也可能來(lái)自于內(nèi)部(如執(zhí)行指令出錯(cuò));信號(hào)機(jī)
5、制用于任務(wù)與任務(wù)之間、任務(wù)與中斷服務(wù)程序ISR之間的異步操作,異步信號(hào)被任務(wù)(或ISR)用來(lái)通知其他任務(wù)某個(gè)事件的出現(xiàn);當(dāng)任務(wù)收到一個(gè)信號(hào)后,將暫停執(zhí)行其自身的代碼,轉(zhuǎn)而去運(yùn)行相應(yīng)的信號(hào)處理程序。信號(hào)與中斷相同點(diǎn)具有中斷性;有相應(yīng)的處理程序;可以屏蔽響應(yīng);不同點(diǎn)中斷由硬件或特定的指令產(chǎn)生,信號(hào)由系統(tǒng)調(diào)用產(chǎn)生; 中斷觸發(fā)后,硬件會(huì)根據(jù)中斷向量找到相應(yīng)的處理程序去執(zhí)行;信號(hào)通過(guò)發(fā)送信號(hào)的系統(tǒng)調(diào)用觸發(fā),但系統(tǒng)不一定馬上對(duì)它進(jìn)行處理;中斷處理程序是在系統(tǒng)內(nèi)核的上下文中運(yùn)行,是全局的;而信號(hào)處理程序是在相關(guān)任務(wù)的上下文中運(yùn)行,是任務(wù)的一個(gè)組成部分。同步與互斥多數(shù)操作系統(tǒng)(包括分時(shí)和實(shí)時(shí))都是多任務(wù)系統(tǒng),
6、允許多個(gè)任務(wù)同時(shí)運(yùn)行;當(dāng)兩個(gè)或多個(gè)任務(wù)在訪問(wèn)共享資源(如共享內(nèi)存)的時(shí)候,如何確保它們不會(huì)相互妨礙 任務(wù)互斥問(wèn)題;當(dāng)兩個(gè)或多個(gè)任務(wù)之間存在著某種依存關(guān)系時(shí),如何來(lái)調(diào)整它們的運(yùn)行次序 任務(wù)同步問(wèn)題。競(jìng)爭(zhēng)條件(race condition):兩個(gè)或多個(gè)任務(wù)對(duì)同一共享數(shù)據(jù)同時(shí)進(jìn)行讀寫操作,而最后的結(jié)果是不可預(yù)測(cè)的,它取決于各個(gè)任務(wù)的具體運(yùn)行情況。解決之道:在同一時(shí)刻,只允許一個(gè)任務(wù)訪問(wèn)該共享數(shù)據(jù),即如果當(dāng)前已有一個(gè)任務(wù)正在使用該數(shù)據(jù),那么其他任務(wù)暫時(shí)不能訪問(wèn)。這就是互斥的概念??芍厝牒瘮?shù)-1可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞。可重入型函數(shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行,而相
7、應(yīng)數(shù)據(jù)不會(huì)丟失??芍厝胄秃瘮?shù)只使用局部變量,即變量保存在CPU寄存器或棧中。一個(gè)不可重入型函數(shù)的例子int temp;void swap(int *x, int *y) temp = *x; *x = *y; *y = temp;可重入函數(shù)-2一個(gè)可重入型函數(shù)的例子void swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp;不可重入函數(shù)被中斷破壞把一個(gè)任務(wù)在運(yùn)行過(guò)程中所做的事情分為兩類:任務(wù)內(nèi)部的計(jì)算或其他的一些事情,肯定不會(huì)導(dǎo)致競(jìng)爭(zhēng)條件的出現(xiàn);對(duì)共享內(nèi)存或共享文件的訪問(wèn),可能會(huì)導(dǎo)致競(jìng)爭(zhēng)條件的出現(xiàn)。我們把完成這類事情的那段
8、代碼稱為“臨界區(qū)”(Critical Region),把需要互斥訪問(wèn)的共享資源稱為“臨界資源”。如果我們能設(shè)計(jì)出某種方法,使得任何兩個(gè)任務(wù)都不會(huì)同時(shí)出現(xiàn)在臨界區(qū)中,就可以避免競(jìng)爭(zhēng)條件的出現(xiàn)。競(jìng)爭(zhēng)條件問(wèn)題的抽象描述關(guān)閉中斷的解決方案 把關(guān)閉中斷的權(quán)力授予用戶任務(wù),是很不聰明 的。而且假設(shè)系統(tǒng)有多個(gè)CPU,則此法無(wú)效; 對(duì)內(nèi)核任務(wù)而言,是一種方便有效的辦法。結(jié)論:適用于內(nèi)核任務(wù),但不適用于用戶任務(wù),不能作為一種普遍適用的互斥實(shí)現(xiàn)方法。當(dāng)一個(gè)任務(wù)進(jìn)入臨界區(qū)后,關(guān)閉所有的中斷;當(dāng)它退出臨界區(qū)時(shí),再打開(kāi)中斷?;诜泵Φ却慕鉀Q方案while (TestAndSet (lock);臨界區(qū)lock = FA
9、LSE;非臨界區(qū)基于繁忙等待策略的方法 浪費(fèi)CPU時(shí)間可以采用各種基于繁忙等待(busy waiting)的策略,基本思路是:當(dāng)一個(gè)任務(wù)想要進(jìn)入它的臨界區(qū)時(shí),首先檢查一下是否允許它進(jìn)入,若允許,就直接進(jìn)入了;若不允許,就在那里循環(huán)地等待,一直等到允許它進(jìn)入。信號(hào)量1965年由著名的荷蘭計(jì)算機(jī)科學(xué)家Dijkstra提出,其基本思路是用一種新的變量類型(semaphore)來(lái)記錄當(dāng)前可用資源的數(shù)量。有兩種實(shí)現(xiàn)方式:1)semaphore的取值必須大于或等于0。0表示當(dāng)前已沒(méi)有空閑資源,而正數(shù)表示當(dāng)前空閑資源的數(shù)量;2)semaphore的取值可正可負(fù),負(fù)數(shù)的絕對(duì)值表示正在等待進(jìn)入臨界區(qū)的任務(wù)個(gè)數(shù)。
10、信號(hào)量是由操作系統(tǒng)來(lái)維護(hù)的,任務(wù)只能通過(guò)初始化和兩個(gè)標(biāo)準(zhǔn)原語(yǔ)(P、V原語(yǔ))來(lái)訪問(wèn)。初始化可指定一個(gè)非負(fù)整數(shù),即空閑資源總數(shù)。 P、V原語(yǔ)作為操作系統(tǒng)內(nèi)核代碼的一部分,是一 種不可分割的原子操作(atomic action),在其 運(yùn)行時(shí),不會(huì)被時(shí)鐘中斷所打斷; P、V原語(yǔ)包含有任務(wù)的阻塞和喚醒機(jī)制,因此 在任務(wù)等待進(jìn)入臨界區(qū)時(shí)不會(huì)浪費(fèi)CPU時(shí)間; P原語(yǔ):P是荷蘭語(yǔ)Proberen(測(cè)試)的首字母。 申請(qǐng)一個(gè)空閑資源(把信號(hào)量減1),若成功, 則退出;若失敗,則該任務(wù)被阻塞; V原語(yǔ):V是荷蘭語(yǔ)Verhogen(增加)的首字母。 釋放一個(gè)被占用的資源(把信號(hào)量加1),如果 發(fā)現(xiàn)有被阻塞的任務(wù),
11、則選擇一個(gè)喚醒之。信號(hào)量和P、V原語(yǔ)的實(shí)現(xiàn)信號(hào)量結(jié)構(gòu)體類型的定義typedef struct int count;/ 計(jì)數(shù)變量 struct TCB *queue;/ 進(jìn)程等待隊(duì)列 semaphore;P原語(yǔ):申請(qǐng)一個(gè)資源P( semaphore S) -S.count;/表示申請(qǐng)一個(gè)資源; if (S.count 0)/表示沒(méi)有空閑資源; 該任務(wù)進(jìn)入等待隊(duì)列S.queue末尾; 阻塞該任務(wù); V原語(yǔ):釋放一個(gè)資源V( semaphore S) +S.count;/表示釋放一個(gè)資源; if (S.count = 0)/表示有進(jìn)程被阻塞; 從等待隊(duì)列S.queue中取出一個(gè)進(jìn)程; 把該進(jìn)程改為就
12、緒狀態(tài),插入就緒隊(duì)列 Windows 2000CreateSemaphore(創(chuàng)建信號(hào)量)WaitForSingleObject(P操作)ReleaseSemaphore(V操作)uCOSosSemCreate(創(chuàng)建信號(hào)量)osSemPend (P操作)osSemPost(V操作)semaphore mutex;mutex.count = 1;/ N = 1P(mutex);臨界區(qū)V(mutex);非臨界區(qū)利用信號(hào)量來(lái)實(shí)現(xiàn)進(jìn)程互斥任務(wù)同步任務(wù)間的同步是指多個(gè)任務(wù)中發(fā)生的事件存在某種時(shí)序關(guān)系,因此在各個(gè)任務(wù)之間必須協(xié)同合作,相互配合,使各個(gè)任務(wù)按一定的速度執(zhí)行,以共同完成某一項(xiàng)工作?!纠印?司
13、機(jī)與售票員while(上班時(shí)間) 發(fā)動(dòng)汽車; 正常運(yùn)行; 到站停車;while(上班時(shí)間) 關(guān)閉車門; 售票; 打開(kāi)車門;公車司機(jī)售票員只有關(guān)閉車門以后,才能啟動(dòng)汽車;只有停車以后,才能打開(kāi)車門。while(上班時(shí)間) P(S_DoorClose); 發(fā)動(dòng)汽車; 正常運(yùn)行; 到站停車; V(S_Stop); 公車司機(jī)while(上班時(shí)間) 關(guān)閉車門; V(S_DoorClose); 售票; P(S_Stop); 打開(kāi)車門;售票員semaphore S_DoorClose;/ 初始為0semaphore S_Stop;/ 初始為0先關(guān)門后開(kāi)車先停車后開(kāi)門基于信號(hào)量的任務(wù)同步semaphore S, Q; /初始值均為1任務(wù)1 任務(wù)2P(S); P(Q);P(Q); P(S);V(S); V(Q);V(Q); V(S);信號(hào)量使用不當(dāng)造成死鎖死鎖!內(nèi)存布局.text:代碼段,包含操作系統(tǒng)和應(yīng)用程序的所有代碼;.data:數(shù)據(jù)段,存放了操作系統(tǒng)和應(yīng)用程序當(dāng)中所有帶有初始值的全局變量;.bss:bss段,存放
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年外教服務(wù)合同
- 柜臺(tái)租賃合同的稅務(wù)處理
- 工程拆遷房屋合同模板
- 公司股權(quán)承包合同-合同范本
- 項(xiàng)目合作協(xié)議書格式模板
- 專業(yè)內(nèi)部施工承包合同模板
- 2024年二人股權(quán)購(gòu)買協(xié)議
- 2024合伙開(kāi)公司合同范本
- 廣告公司經(jīng)營(yíng)權(quán)買賣合同
- 2024年超市用工協(xié)議樣本
- 林木種質(zhì)資源調(diào)查表(新表)
- 蔬菜出口基地備案管理課件
- 子宮異常出血的護(hù)理
- 高考英語(yǔ)單詞3500記憶短文40篇
- 《耳穴療法治療失眠》課件
- 詢盤分析及回復(fù)
- 氯化工藝安全培訓(xùn)課件
- 指導(dǎo)巡察工作精細(xì)科學(xué)
- 企業(yè)法律知識(shí)培訓(xùn)消費(fèi)者權(quán)益保護(hù)實(shí)務(wù)
- 快樂(lè)讀書吧-讀后分享課:《十萬(wàn)個(gè)為什么》教學(xué)案列
- 2024年 貴州茅臺(tái)酒股份有限公司招聘筆試參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論