- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1互斥信号量.PDF
1.互斥信号量:
互斥互斥,意思就是我用了你就不能用,你用了我就不能用。永远都只有一个人独占这个东
西~ !举个例子:比如说打印机。
我任务1 现在让他打印《静夜思》,那么在我还没打印完之前,别的任务就不能命令打印机
去打印别的东西。否则如果任务2 让他打印《春晓》,那最后打印出来的会是什么~ ????
反正肯定不是任务1 想要的,肯定也不是任务2 想要的。
上面讲的比较通俗。打印机就是共享资源,谁都可以访问他~ !但是同一时间,肯定要保证
只有1 个任务再操作打印机。那样才能得到大家想要的结果。也就是要独占共享资源的访问
权~ !
ucos2 中通过互斥信号量来解决这个问题。简单说就是任务1 开始访问打印机的时候,先去
查询这个互斥信号量是否有效,有效,说明没人在访问打印机,这时任务1 就把这个互斥信
号量置无效,然后开始操作打印机。这样,每个任务再操作打印机前都要去查询这个互斥信
号量时候有效。无效就等,等到有效才可以访问,或者等到不耐烦了(术语叫等待超时)就
不等了~ !任务一直到用完了打印机后才把信号量置有效,这时其他任务才有可能去访问,
操作打印机。
这里又有一个问题:再任务1 操作打印机器件,可能有多个任务申请打印机的所有权。那么
再任务1 结束后,我应该给谁用呢~~ ??也许我们马上就反应过来了~废话~ !!当然是排队
了~~谁先到的谁用啊~~~ 。没错,这是一种机制,谁最先等待共享资源,就给谁用。但是~ !
再ucos 里面2.52 版本还不支持这种方式。他用的另外一种方法!如果你和你 BOSS 都再等
着用打印机,你先到的,这个时候任务1 结束了对打印机的操作。你说你敢先用么~ ???
(除非你第二天不想干了~~ )你肯定先让老板先用,这就是ucos 的实现方式,基于优先级,
任务 1 结束对打印机的操作后,ucos 再等待队列中看那个等待任务优先级最高,就先给他
用~ !即使他是最晚才等待的~ !!(这就是BOSS 的威力~ !)
关于事件等待列表,有兴趣的可以去看看事件控制块 ECB 的内容,不在本文讨论。当然,
ucos 中的互斥信号量还有许多要素,比如说他的继承优先级之类的。本文旨在说明它是干
嘛用的,至于其他请参考相关书籍。
下面的图解释了互斥信号量的基本用法:(简单的两个任务,没有包含多任务等待的情况)
2.信号量:
至于信号量,和互斥信号量是用区别的,简单来说(个人理解,欢迎纠正)就是互斥信
号量再同一时刻,任务得到互斥信号量量后是独占共享资源的,在他没有释放信号量之前,
任何其他任务都是不能访问共享资源的。而信号量的不同在于。信号量可以设定一个值,允
许最多又几个任务同时去访问共享资源。比如我给他设定一个5,那么对多就有5 个任务能
同时访问共享资源。每个任务获得信号量的时候就把信号量计数器减去1,这样,再第五个
任务获取后,计数器是0.当第六个任务要去访问的时候申请信号量就只能等待了,等到之前
的任务发一个信号出来,这样第六个任务才能去访问共享资源。
互斥信号量可以看成特殊情况下的信号量,他的计数器就是0 或者1,只在这两个之间徘徊。
举个例子(不一定恰当,欢迎纠正):
现在有很多串口扩展卡,一张卡能扩展出好几个串口,比如说4 个,这个扩展卡就是一个共
享资源。现在定义一个信号量semcom,初始给他4 ,那么可以有4 个任务去访问这个资源,
他每次就给这4 个任务分配不同的串口。每个任务要访问这个扩展卡就要去测试semcom 看
看他时候有信号。这样,前4 个任务申请信号后,信号量计数器就等于0 了,这样,在第五
个任务要去访问扩展卡的时候,他也去测试这个semcom,发现信号量无效,他只能等了~ !
等到之前的任务释放一个串口为止,如果不用信号量,那么任务五可能就会去访问扩展卡上
的串口1,而串口1 之前已经分配给了任务 1 了,~造成什么后果就自己想想吧~~~~如果用
互斥信号量,那么无疑浪费了资源,~~~那你就买个扩展1 个串口的卡就行了~~你买个扩展
4 个的然后你用互斥信号量~~~不是摆明再说你是富二代么~~~
等待信号的任务在有信号以后也是按照等待列表中优先级最高的任务先得到信号处理。有关
信号量的具体数据结构参考事件控制块 ECB 的内容,具体操作参考信号量函数等。在此不
做介绍
下面这个图说明了以上的例子:(
3.事件标志组:
在理解信号量和互斥信号量的时候都可以类比,因为他们在 ucos2 里面都通过相同的时
文档评论(0)