音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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)
問ucos-II 信號量的理解
信號量使用主要涉及三個函數(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樓: >>參與討論
藍海深
多復(fù)習(xí)一下操作系統(tǒng)這本書,你會明白的!
引入信號量的初衷是為了管理設(shè)備的臨界資源,操作系統(tǒng)書上說的很清楚!

3樓: >>參與討論
seahai
奇怪了
就是看不明白才問的。。。

4樓: >>參與討論
yzhu
以下為個人理解,僅供參考
簡單地說:
    當(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
樓上例子不錯
再舉一個互斥的例子
一間屋子,只能一人進去。門口箱子里放著一把鑰匙。當(dāng)有鑰匙時箱子上顯示1,無鑰匙時顯示0。來人看見1就打開箱子取出鑰匙進屋,同時顯示減一為0,再來人時看見0,就知道有人在屋里,于是在外等待,屋里人出來時,把鑰匙放回箱中,顯示加1。后面的人看見1又可以進入。
這里鑰匙相當(dāng)于信號量,根據(jù)鑰匙的有無取0,1兩個值。屋子相當(dāng)于公用資源,同一時間只能由一人使用它。使用信號量保證不會有兩人同時使用公用資源

6樓: >>參與討論
FantasyBo
樓上例子不錯


7樓: >>參與討論
seahai
回答得非常好!
全部理解了,非常感謝yzhu 和ferry !

* - 本貼最后修改時間:2006-2-10 13:12:37 修改者:seahai

8樓: >>參與討論
瘋子海
謝謝大家回復(fù)
謝謝yzhu
我明白了。

9樓: >>參與討論
brm00
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
寫錯了,是"只能減到0":)
 
11樓: >>參與討論
chb2030

不好意思,第一次來這個論壇,感覺yzhu和ferry回答對"信號量的理解"非常棒,終于明白是怎么回事了.

12樓: >>參與討論
fushaobing
謝謝“yzhu”和“ferry”
我剛開始學(xué)習(xí)“uC/OS-II”,也是不大明白“信號量”的概念,聽你們這么一說就清楚多了。多謝。海

13樓: >>參與討論
andyxhw
操作系統(tǒng)書上講得很清楚
我記得 uCOS-II  的第二章也講了

14樓: >>參與討論
syzhou1314
講的都挺好,受益非淺
講的都挺好,受益非淺

15樓: >>參與討論
zkking
我的理解就是接力棒。誰拿到棒子誰跑。
 
16樓: >>參與討論
seahai
re
好像鑰匙

17樓: >>參與討論
qiantao

好!TKS!TKS!

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
MG12864點陣圖型液晶模塊
那位大蝦有LINUX的關(guān)于MAKEFILE編寫的詳細介紹
教學(xué)中使用AT89S51 OR AT89S52怎么樣?
分體式空調(diào)室內(nèi)部份的軟件設(shè)計需要的知識??
做軟件的怎樣向硬件轉(zhuǎn)行??
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號