同步互斥与通信.ppt
《同步互斥与通信.ppt》由会员分享,可在线阅读,更多相关《同步互斥与通信.ppt(66页珍藏版)》请在三一办公上搜索。
1、嵌入式系统及应用,第六章 同步、互斥与通信,主要内容,概述信号量邮箱和消息队列管道,ISR x,Task y,POST,PEND,任务与ISR之间的同步(单向),Task x,Task y,POST,PEND,POST,PEND,任务与任务之间的同步(双向),任务与任务之间的同步(单向),Task x,Task y,POST,PEND,在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括:信号量(semaphore),用于互斥与同步事件(组)(event group),用于同步异步信号(asynchronous signal),用于同步邮箱(mailbox)、消息队列(mes
2、sage queue),用于消息通信管道(pipe),提供非结构化数据交换和实现同步,以下一些机制也可用于同步与通信(在单处理器或多处理器系统中):全局变量共享内存Sockets远程过程调用(Remote Procedure Call),第一节信号量,信号量的种类及用途信号量的定义互斥信号量二值信号量计数信号量信号量机制的主要数据结构典型的信号量操作,什么是信号量,信号量被定义为一个整形变量,在其上定义了以下三个操作:1、可以被初始化一个非负数2、wait操作(P操作)将信号量的值减1后,若该值为负,则执行wait操作的任务等待3、signal操作(V操作)将信号量的值增1后,若该值为非正,则
3、执行signal操作的任务唤醒,信号量用于实现任务与任务之间、任务与中断处理程序之间的同步与互斥。信号量一般分为三种:,信号量的种类及用途,用于解决互斥问题。它比较特殊,可能会引起优先级反转问题。,用于解决同步问题,用于解决资源计数问题,将信号量进行种类细分,可以根据其用途,在具体实现时做专门处理,提高执行效率和可靠性。,互斥信号量,计数信号量,二值信号量,互斥信号量,WaitB(S):/申请信号量if S.value1;/当前没有其他任务使用信号量 then S.value=S.value-1=0/将信号量值修改为0,独占共享资源else begin Insert(CALLER,S.L);/
4、如果当前有其他任务使用信号量,将该任务放入等待 队列 Block(CALLER);/修改该任务的状态为等待态(阻塞任务)endSignalB(S):/释放信号量if S.L queue is empty;/如果等待序列为空,没有其他任务等待使用该共享资源 then S.value=1;/释放信号量else begin Remove(S.L,id);/如果有其他任务等待使用该共享资源,则从等待队列中 将该任务移除 wakeup(id);/将该任务的状态改为就绪态(唤醒任务)end,用信号量实现任务间的互斥,var mutex:Shared Semaphore;begin mutex:=1;par
5、begin P1:P2:Pi:repeat Wait(mutex);“进程Pi的临界代码段”;Signal(mutex);forever Pn:parend end,互斥信号量状态图,互斥信号量状态图,各种互斥机制比较,二值信号量,可获得,不可获得,申请并获得(值为0),释放(值为1),初始化值为0,二值信号量状态图,Task1()执行一些操作;将信号量sem1置1;申请信号量sem2;,Task2()申请信号量sem1;执行一些操作;将信号量sem2置1;,Task2申请信号量sem1失败,系统切换到Task1,sem1被置1后,Task2得到sem1并抢占Task1,Task2运行到某处时
6、因某种原因被阻塞,系统切换到Task1,用二值信号量实现两个任务之间的双向同步Task2优先级高于Task1sem1和sem2的初始值均为0,二值信号量实现同步,计数信号量,计数信号量,计数信号量状态图,可获得,不可获得,初始化值大于0,申请并获得值为0,释放值为1,申请并获得值减1,释放值加1,计数(一般)信号量同步原语,Wait(S):S.value:=S.value-1;/有新任务来使用共享资源将信号量的值减1 if S.value0/如果信号量的值为负,表示共享资源已经分配完毕 then begin Insert(CALLER,S.L);/将该任务插入等待序列 Block(CALLER
7、);/将该任务状态改为等待态(阻塞任务)endSignal(S):S.value:=S.value+1;/任务使用完共享资源,将信号量的值加1,释放 一个信号量 if S.value=0/如果信号量为负,表示仍有等待该资源的任务被 阻塞 then begin Remove(S.L,id);/将等待队列中的一个任务从队列中移除 wakeup(id);/将该任务的状态修改为就绪态,唤醒任务 end S的绝对值表示在该信号量列表中已阻塞的任务数目,计数信号量,计数信号量使用实例:有界缓冲问题,计数信号量,Var E,F:Semaphore;mutex:binary Semaphore;begin(*
8、main program*)F:=0;E:=n;mutex=1;parbegin producer1;producern;consumer1;consumerm;parendend,生产者任务begin repeat 生产数据/生产者生产数据 Wait(E);/减少一个空缓冲区项 Wait(mutex);/分配空缓冲区和移动指针P操作是互斥的“分配空缓冲区并调整指针P的临界段”;“向空缓冲区中装入数据”Signal(mutex);/释放互斥信号量 Signal(F);/增加一个满缓冲区项 forever end,消费者任务begin repeat 消费数据/消费者取走数据 Wait(F);/减
9、少一个满缓冲区项 Wait(mutex);/分配满缓冲区和移动指针C操作是互斥的“分配满缓冲区并调整指针C的临界段”;“从满缓冲区中取走数据”Signal(mutex);/释放互斥信号量 Signal(F);/增加一个空缓冲区项 forever end,计数信号量,信号量机制的主要数据结构,信号量机制的主要数据结构,信号量控制块:管理所有创建的信号量,内核在系统运行时动态分配和回收信号量控制块互斥和二值信号量控制块结构:Binary_Semaphore_Control_Block,wait_queue任务等待队列attributes信号量属性lock_nesting_behavior 试图嵌套
10、获得时的规则 wait_discipline 任务等待信号量的方式priority_ceiling 优先级天花板值lock是否被占有holder拥有者 nest_count嵌套层数,计数信号量控制结构Counting_Semaphore_Control_Block wait_queue任务等待队列 attributes计数信号量属性 maximum_count 最大计数值 wait_discipline任务等待信号量的方式 count当前计数值,信号量机制的主要数据结构,典型的信号量操作,创建信号量获取(申请)信号量释放信号量删除信号量清除信号量的任务等待列表 获取有关信号量的各种信息,创建信
11、号量,功能:根据应用传递的参数创建一个信号量参数:信号量的名字、属性和初始值等。内核动作:从空闲信号量控制块链中分配一个信号量控制块,并初始化信号量属性。创建成功时,为其分配唯一的ID号返回给应用。如果已创建信号量数量已达到用户配置的最大数量,就返回错误。,信号量的属性,信号量的属性,信号量的类型,互斥信号量(MUTEX_SEMAPHORE),计数信号量(COUNTING_SEMAPHORE),二值信号量(BINARY_SEMAPHORE),任务等待信号量的方式,先进先出(FIFO)顺序,优先级(PRIORITY)顺序,优先级反转问题的解决方法(只适用于互斥信号量),优先级继承算法(INHER
12、IT_PRIORITY),优先级天花板算法(PRIORITY_CEILING),需给出所有可能获得此信号量的任务中优先级最高的任务的优先级。,获取(申请)信号量,功能:试图获得应用指定的信号量。该功能流程如下:if 信号量的值大于0then 将信号量的值减1else 根据接收信号量的选项,将任务放到等待 队列中,或是直接返回,获取(申请)信号量,当所申请的信号量不能被立即获得时,可以有以下几种选择:永远等待 不等待,立即返回,并返回一个错误状态码指定等待时限(可有效避免死锁)注意:不允许在ISR中选择等待当任务选择等待时,将被按FIFO或优先级顺序放置在等待队列中,释放信号量,功能:释放一个应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 同步 通信
链接地址:https://www.31ppt.com/p-5249169.html