|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
問ucos-II 信號量的理解 |
| 作者:瘋子海 欄目:嵌入式系統(tǒng) |
信號量使用主要涉及三個函數(shù): OSSemCreat(), OSSemPend(), OSSemPost(); 第1個負(fù)責(zé)建立一個信號量,同時需要的參數(shù)是設(shè)定信號量的值; 第2個是等待該信號量,當(dāng)信號量值為0時,將調(diào)用改函數(shù)的任務(wù)加入該信號量的等待任務(wù)列表中,當(dāng)信號量值大于0時,該函數(shù)緊緊將信號量值減1; 第3個函數(shù)負(fù)責(zé)置位指定的信號量,當(dāng)指定的信號量是0或者大于0時,該函數(shù)將信號量值加1然后返回。此時在該信號量的等待任務(wù)列表中優(yōu)先級最高的任務(wù)進入就緒態(tài),任務(wù)調(diào)度函數(shù)進行任務(wù)調(diào)度。 看了,有些含糊,請問那位能幫忙說清除信號量怎么回事?信號量加減做什么呢? |
| 2樓: | >>參與討論 |
| 作者: 藍海深 于 2006/2/8 17:58:00 發(fā)布:
多復(fù)習(xí)一下操作系統(tǒng)這本書,你會明白的! 引入信號量的初衷是為了管理設(shè)備的臨界資源,操作系統(tǒng)書上說的很清楚! |
|
| 3樓: | >>參與討論 |
| 作者: seahai 于 2006/2/8 21:44:00 發(fā)布:
奇怪了 就是看不明白才問的。。。 |
|
| 4樓: | >>參與討論 |
| 作者: yzhu 于 2006/2/9 20:49:00 發(fā)布:
以下為個人理解,僅供參考 簡單地說: 當(dāng)信號量=0時,表示信號量代表的資源不可用,操作系統(tǒng)就調(diào)用OSSemPend()函數(shù)的任務(wù)加入該信號量的等待任務(wù)列表中; 當(dāng)信號量>0時,表示信號量代表的資源可用,OSSemPend()函數(shù)返回,任務(wù)可以使用資源。 一般地,信號量的最大值(nmax)表示資源的最大同時共享數(shù)。nmax=1,表示資源最多只能由一個任務(wù)使用,如讀寫某內(nèi)存單元時,為保證該單元不被其它任務(wù)篡改,就使用nmax=1的(二值)信號量;nmax>1,表示資源可由多個任務(wù)使用,如FIFO,一個任務(wù)寫某單元時,另一個任務(wù)可以寫其它單元,則可使用nmax>1的(多值)信號量,信號量的大小用來表示FIFO的可用單元數(shù)。 減1操作:當(dāng)該信號量=0時表示FIFO已滿,任務(wù)只能等待;當(dāng)該信號量>0時表示FIFO有空,可以使用,同時要減1表示調(diào)用OSSemPend()函數(shù)的任務(wù)已經(jīng)使用了一個資源(FIFO單元),可使用資源少了一個。 加1操作:當(dāng)某任務(wù)調(diào)用OSSemPost()從FIFO中取出一個值時,該FIFO單元就空出一個可寫單元,也就是資源多了一個,為表示這個變化,信號量要加1,一旦信號量由0->1,則把資源給等待任務(wù)列表中優(yōu)先級最高的任務(wù)(通過OSSemPend()函數(shù)的返回)。 總之,信號量的值代表共享資源的剩余量,用掉一個減1,空出一個加1。 舉個例子: 顧客(任務(wù))到銀行辦事,銀行(OS)現(xiàn)有N名業(yè)務(wù)員(共享資源)。 1. 辦事前先要取號(OSSemPend()),號條一般有“前面有xx位顧客”,表示正在等待服務(wù)(資源)的顧客(任務(wù))數(shù)。 2. 另外假設(shè)銀行有一指示牌(信號量)指示當(dāng)前空閑的業(yè)務(wù)員的數(shù)量為n(信號量的值)。 3. 當(dāng)n>0時,表示有空閑的業(yè)務(wù)員,那么顧客可以立即去業(yè)務(wù)員那辦理業(yè)務(wù)(OSSemPend()立即返回),這樣空閑的業(yè)務(wù)員就少一個,指示牌指示的數(shù)量(信號量的值)就要減1,但n只能減到N。 4. 當(dāng)n=0時,表示沒有空閑的業(yè)務(wù)員,那么顧客只能等待(OSSemPend()不返回,切換到其它任務(wù))。 5. 當(dāng)某位業(yè)務(wù)員為顧客辦完手續(xù)后,他就空閑下來,這樣空閑的業(yè)務(wù)員就多一個,指示牌指示的數(shù)量(信號量的值)就要加1,但n只能加到N。 這時銀行就會去查找有沒有正在等待的顧客,如果有,就找出其中優(yōu)先級最高的顧客,讓他來辦理業(yè)務(wù)(OSSemPend()返回)。 6. 顧客在取號時若設(shè)置了等待時間,那么在等待時間過后,銀行就會通知顧客時間到(OSSemPend()返回),顧客接著去辦其它事。 7. 也有的顧客希望:在取號時,如果有空閑的業(yè)務(wù)員他就辦事,沒有的話就走(去辦其它事),那么就要用特殊的取號方式(OSSemAccept())。 8. N=1時,表示只有一個業(yè)務(wù)員,指示牌只能指示0或1兩個值,這就是二值信號量。 不知道這個例子能不能說清楚信號量的概念,請大伙完善。 * - 本貼最后修改時間:2006-2-10 10:10:07 修改者:yzhu |
|
| 5樓: | >>參與討論 |
| 作者: ferry 于 2006/2/10 11:39:00 發(fā)布:
樓上例子不錯 再舉一個互斥的例子 一間屋子,只能一人進去。門口箱子里放著一把鑰匙。當(dāng)有鑰匙時箱子上顯示1,無鑰匙時顯示0。來人看見1就打開箱子取出鑰匙進屋,同時顯示減一為0,再來人時看見0,就知道有人在屋里,于是在外等待,屋里人出來時,把鑰匙放回箱中,顯示加1。后面的人看見1又可以進入。 這里鑰匙相當(dāng)于信號量,根據(jù)鑰匙的有無取0,1兩個值。屋子相當(dāng)于公用資源,同一時間只能由一人使用它。使用信號量保證不會有兩人同時使用公用資源 |
|
| 6樓: | >>參與討論 |
| 作者: FantasyBo 于 2006/2/10 13:08:00 發(fā)布:
樓上例子不錯 頂 |
|
| 7樓: | >>參與討論 |
| 作者: seahai 于 2006/2/10 13:11:00 發(fā)布:
回答得非常好! 全部理解了,非常感謝yzhu 和ferry ! * - 本貼最后修改時間:2006-2-10 13:12:37 修改者:seahai |
|
| 8樓: | >>參與討論 |
| 作者: 瘋子海 于 2006/2/14 12:33:00 發(fā)布:
謝謝大家回復(fù) 謝謝yzhu 我明白了。 |
|
| 9樓: | >>參與討論 |
| 作者: brm00 于 2006/2/16 18:54:00 發(fā)布:
To :yzhu yzhu你好,在你舉的例子里有一個地方?jīng)]看懂: 3. 當(dāng)n>0時,表示有空閑的業(yè)務(wù)員,那么顧客可以立即去業(yè)務(wù)員那辦理業(yè)務(wù)(OSSemPend()立即返回),這樣空閑的業(yè)務(wù)員就少一個,指示牌指示的數(shù)量(信號量的值)就要減1,但n只能減到N。 在這句話中,n代表空閑的營業(yè)員人數(shù),N代表銀行所有的營業(yè)員人數(shù)。n的最大值應(yīng)該是(n=N),就是說所有的營業(yè)員都在空閑(不知這是行長會怎么想,呵呵),n的最小值應(yīng)該是(n=0),就是說所有的營業(yè)員都在工作中。當(dāng)(n>0)時,表示有空閑的業(yè)務(wù)員,當(dāng)某一個客戶去辦理業(yè)務(wù)時(OSSemPend()立即返回),空閑的業(yè)務(wù)員就少一個,指示牌指示的數(shù)量(信號量的值)就要減1,但n應(yīng)該可以減少到0的呀,可為什么是"但n只能減到N。" :( |
|
| 10樓: | >>參與討論 |
| 作者: yzhu 于 2006/2/20 22:01:00 發(fā)布:
寫錯了,是"只能減到0":) |
|
| 11樓: | >>參與討論 |
| 作者: chb2030 于 2006/2/21 14:14:00 發(fā)布:
贊 不好意思,第一次來這個論壇,感覺yzhu和ferry回答對"信號量的理解"非常棒,終于明白是怎么回事了. |
|
| 12樓: | >>參與討論 |
| 作者: fushaobing 于 2006/2/22 8:47:00 發(fā)布:
謝謝“yzhu”和“ferry” 我剛開始學(xué)習(xí)“uC/OS-II”,也是不大明白“信號量”的概念,聽你們這么一說就清楚多了。多謝。海 |
|
| 13樓: | >>參與討論 |
| 作者: andyxhw 于 2006/2/22 14:54:00 發(fā)布:
操作系統(tǒng)書上講得很清楚 我記得 uCOS-II 的第二章也講了 |
|
| 14樓: | >>參與討論 |
| 作者: syzhou1314 于 2006/2/24 22:35:00 發(fā)布:
講的都挺好,受益非淺 講的都挺好,受益非淺 |
|
| 15樓: | >>參與討論 |
| 作者: zkking 于 2006/2/25 10:38:00 發(fā)布:
我的理解就是接力棒。誰拿到棒子誰跑。 |
|
| 16樓: | >>參與討論 |
| 作者: seahai 于 2006/2/25 17:24:00 發(fā)布:
re 好像鑰匙 |
|
| 17樓: | >>參與討論 |
| 作者: qiantao 于 2009/4/15 11:14:57 發(fā)布:
好!TKS!TKS! |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |