欢迎来到天天文库
浏览记录
ID:39436661
大小:689.10 KB
页数:66页
时间:2019-07-03
《《同步互斥与通信》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式系统及应用第六章同步、互斥与通信主要内容概述信号量邮箱和消息队列管道ISRxTaskyPOSTPEND任务与ISR之间的同步(单向)TaskxTaskyPOSTPENDPOSTPEND任务与任务之间的同步(双向)任务与任务之间的同步(单向)TaskxTaskyPOSTPEND在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括:信号量(semaphore),用于互斥与同步事件(组)(eventgroup),用于同步异步信号(asynchronoussignal),用于同步邮箱(
2、mailbox)、消息队列(messagequeue),用于消息通信管道(pipe),提供非结构化数据交换和实现同步以下一些机制也可用于同步与通信(在单处理器或多处理器系统中):全局变量共享内存Sockets远程过程调用(RemoteProcedureCall)第一节信号量信号量的种类及用途信号量的定义互斥信号量二值信号量计数信号量信号量机制的主要数据结构典型的信号量操作什么是信号量信号量被定义为一个整形变量,在其上定义了以下三个操作:1、可以被初始化一个非负数2、wait操作(P操作)将信号量的
3、值减1后,若该值为负,则执行wait操作的任务等待3、signal操作(V操作)将信号量的值增1后,若该值为非正,则执行signal操作的任务唤醒信号量用于实现任务与任务之间、任务与中断处理程序之间的同步与互斥。信号量一般分为三种:信号量的种类及用途用于解决互斥问题。它比较特殊,可能会引起优先级反转问题。用于解决同步问题用于解决资源计数问题将信号量进行种类细分,可以根据其用途,在具体实现时做专门处理,提高执行效率和可靠性。互斥信号量计数信号量二值信号量互斥信号量WaitB(S):/申请信号量ifS.v
4、alue1;/当前没有其他任务使用信号量thenS.value=S.value-1=0/将信号量值修改为0,独占共享资源elsebeginInsert(CALLER,S.L);/如果当前有其他任务使用信号量,将该任务放入等待队列Block(CALLER);/修改该任务的状态为等待态(阻塞任务)endSignalB(S):/释放信号量ifS.Lqueueisempty;/如果等待序列为空,没有其他任务等待使用该共享资源thenS.value=1;/释放信号量elsebeginRemove(S.L,id)
5、;/如果有其他任务等待使用该共享资源,则从等待队列中将该任务移除wakeup(id);/将该任务的状态改为就绪态(唤醒任务)end用信号量实现任务间的互斥varmutex:SharedSemaphore;beginmutex:=1;parbeginP1:……P2:…………Pi:repeatWait(mutex);“进程Pi的临界代码段”;Signal(mutex);foreverPn:……parendendTask1Task2共享资源互斥信号量状态图互斥信号量状态图开启锁定初始化值为1申请并获得值为0
6、释放值为1申请(递归)并获得锁定数加1释放(递归)锁定数减1各种互斥机制比较比较项目关中断使用测试并置位指令禁止任务切换使用信号量锁定范围互斥力度最强,锁定所有外部可屏蔽中断,凡是以中断形式到达的外部事件以及与之相关联的任务或处理过程均得不到执行凡是使用该指令访问共享资源的代码所有的任务只影响竞争共享资源的任务对系统响应时间的影响如果关中断的时间较长,对系统的响应性能有很大影响较小如果禁止切换的时间过长,则影响系统的响应性能对系统响应性能有一定影响,可能导致优先级反转实现时的系统开销小小小较大注意事项
7、关中断时间要尽量短不是所有的处理器都具备这种指令,影响可移植性关调度的时间要尽量短需采用一定的策略解决优先级反转问题二值信号量可获得不可获得申请并获得(值为0)释放(值为1)初始化值为0二值信号量状态图Task1(){……执行一些操作;将信号量sem1置1;申请信号量sem2;…………}Task2(){……申请信号量sem1;执行一些操作;将信号量sem2置1;…………}Task2申请信号量sem1失败,系统切换到Task1sem1被置1后,Task2得到sem1并抢占Task1Task2运行到某处时
8、因某种原因被阻塞,系统切换到Task1用二值信号量实现两个任务之间的双向同步Task2优先级高于Task1sem1和sem2的初始值均为0二值信号量实现同步计数信号量Task1Task2共享资源实例nTaskm共享资源实例1…………计数信号量计数信号量状态图可获得不可获得初始化值大于0申请并获得值为0释放值为1申请并获得值减1释放值加1计数(一般)信号量同步原语Wait(S):S.value:=S.value-1;/有新任务来使用共享资源将信号量的值减1
此文档下载收益归作者所有