第10讲任务通信与同步课件.ppt

上传人(卖家):晟晟文业 文档编号:5195038 上传时间:2023-02-16 格式:PPT 页数:76 大小:552.50KB
下载 相关 举报
第10讲任务通信与同步课件.ppt_第1页
第1页 / 共76页
第10讲任务通信与同步课件.ppt_第2页
第2页 / 共76页
第10讲任务通信与同步课件.ppt_第3页
第3页 / 共76页
第10讲任务通信与同步课件.ppt_第4页
第4页 / 共76页
第10讲任务通信与同步课件.ppt_第5页
第5页 / 共76页
点击查看更多>>
资源描述

1、第第10讲讲任务通信与同步任务通信与同步主要内容主要内容 概述概述 信号灯信号灯 消息队列消息队列 事件事件 管道管道概述概述 多任务系统中任务之间的关系多任务系统中任务之间的关系 相互独立相互独立 仅竞争仅竞争CPU资源资源 竞争除竞争除CPU外的其他资源(互斥)外的其他资源(互斥)同步同步 协调彼此运行的步调,保证协同运行的协调彼此运行的步调,保证协同运行的各个任务具有正确的执行次序各个任务具有正确的执行次序 通信通信 彼此间传递数据或信息,以协同完成某彼此间传递数据或信息,以协同完成某项工作项工作进程同步的例子进程同步的例子 只有当售票员关门之后司机才能启动车辆,只有当售票员关门之后司机

2、才能启动车辆,只有司机停车之后售票员才能开车门。司只有司机停车之后售票员才能开车门。司机和售票员的行动需要一定的协调。同样机和售票员的行动需要一定的协调。同样地,两个进程之间有时也有这样的依赖关地,两个进程之间有时也有这样的依赖关系,因此我们也要有一定的同步机制保证系,因此我们也要有一定的同步机制保证它们的执行次序它们的执行次序 任务能以以下方式与中断处理程序或其任务能以以下方式与中断处理程序或其他任务进行同步或通信:他任务进行同步或通信:单向同步或通信单向同步或通信:一个任务与另一个任务或:一个任务与另一个任务或一个一个ISR同步或通信。同步或通信。双向同步或通信双向同步或通信:两个任务相互

3、同步或通信。:两个任务相互同步或通信。双向同步不能在任务与双向同步不能在任务与ISR之间进行,因为之间进行,因为ISR不能等待。不能等待。概述概述ISR xTask yPOSTPENDTask xTask yPOSTPENDPOSTPENDTask xTask yPOSTPEND 在单处理器平台上,嵌入式操作系统内在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包核提供的同步、互斥与通信机制主要包括:括:信号灯信号灯(semaphore),用于互斥与同步),用于互斥与同步 事件(组)事件(组)(event group),用于同步),用于同步 异步信号异步信号(asynchro

4、nous signal),用于),用于同步同步 邮箱邮箱(mailbox)、)、消息队列消息队列(message queue),用于消息通信),用于消息通信 管道管道(pipe),提供非结构化数据交换和实),提供非结构化数据交换和实现同步现同步 概述概述 以下一些机制也可用于同步与通信(在以下一些机制也可用于同步与通信(在单处理器或多处理器系统中):单处理器或多处理器系统中):全局变量全局变量 共享内存共享内存 套接字(套接字(Sockets)远程过程调用(远程过程调用(Remote Procedure Call)概述概述Linux下任务通信手段下任务通信手段 信号信号 消息队列消息队列 管道

5、管道 信号灯信号灯 套接字套接字 共享存储段共享存储段第一节第一节信号灯信号灯信号灯的种类及用途信号灯的种类及用途互斥信号灯互斥信号灯二值信号灯二值信号灯计数信号灯计数信号灯信号灯机制的主要数据结构信号灯机制的主要数据结构典型的信号灯操作典型的信号灯操作 信号灯信号灯(Semaphore(Semaphore或称信号量)用于实现任务或称信号量)用于实现任务与任务之间、任务与中断处理程序之间的与任务之间、任务与中断处理程序之间的同步同步与与互斥互斥。信号灯一般分为三种:信号灯一般分为三种:信号灯的种类及用途信号灯的种类及用途用于解决互斥问题。它比较特殊,可能用于解决互斥问题。它比较特殊,可能会引起

6、优先级反转问题。会引起优先级反转问题。用于解决同步问题用于解决同步问题用于解决资源计数问题用于解决资源计数问题 用互斥信号灯保护的代码区称作用互斥信号灯保护的代码区称作“临界区临界区”,临界区,临界区代码通常用于对代码通常用于对共享资源共享资源的访问。的访问。互斥信号灯的值被初始化成互斥信号灯的值被初始化成1 1,表明目前没有任务进入,表明目前没有任务进入“临界区临界区”,但最多只有一个任务可以进入,但最多只有一个任务可以进入“临界临界区区”。第一个试图进入第一个试图进入“临界区临界区”的任务将成功获得互斥信的任务将成功获得互斥信号灯,而随后试图进入用同一信号灯保护的临界区的号灯,而随后试图进

7、入用同一信号灯保护的临界区的所有其他任务就必须等待。所有其他任务就必须等待。当任务离开当任务离开“临界区临界区”时,它将释放信号灯并允许正时,它将释放信号灯并允许正在等待该信号灯的任务进入在等待该信号灯的任务进入“临界区临界区”。互斥信号灯互斥信号灯Task1Task2共享资源共享资源互斥信号灯互斥信号灯 共享资源可能是一段存储器空间、一个数据结构共享资源可能是一段存储器空间、一个数据结构或或I/OI/O设备,也可能是被两个或多个并发任务共享设备,也可能是被两个或多个并发任务共享的任何内容。的任何内容。使用互斥信号灯可以实现对共享资源的串行访问,使用互斥信号灯可以实现对共享资源的串行访问,保证

8、只有成功地获取互斥信号灯的任务才能够释保证只有成功地获取互斥信号灯的任务才能够释放它。放它。互斥信号灯是一种特殊的二值信号灯,一般它支互斥信号灯是一种特殊的二值信号灯,一般它支持持所有权所有权、递归访问递归访问、任务删除安全任务删除安全和一些和一些避免避免优先级反转、饥饿、死锁等互斥所固有问题的协优先级反转、饥饿、死锁等互斥所固有问题的协议议。互斥信号灯状态图互斥信号灯状态图互斥信号灯状态图互斥信号灯状态图开启开启锁定锁定初始化初始化值为值为1申请并获得申请并获得值为值为0释放释放值为值为1申请申请(递归递归)并获得并获得锁定数加锁定数加1释放释放(递归递归)锁定数减锁定数减1互斥信号灯互斥信

9、号灯 所有权:当一个任务通过获取互斥信号灯所有权:当一个任务通过获取互斥信号灯而将其锁定时,得到该互斥信号灯的所有而将其锁定时,得到该互斥信号灯的所有权。相反,当一个任务释放信号灯时,失权。相反,当一个任务释放信号灯时,失去对其的所有权。去对其的所有权。当一个任务拥有互斥信号灯时,其他的任当一个任务拥有互斥信号灯时,其他的任务不能再锁定或释放它,即任务要释放互务不能再锁定或释放它,即任务要释放互斥信号灯,必须事前先获取该信号灯。斥信号灯,必须事前先获取该信号灯。二值信号灯二值信号灯 二值信号灯主要用于二值信号灯主要用于任务与任务之间任务与任务之间、任务与中任务与中断服务程序断服务程序之间的同步

10、之间的同步 用于同步的二值信号灯初始值为用于同步的二值信号灯初始值为0,表示同步事件尚未,表示同步事件尚未产生;产生;任务任务申请信号灯申请信号灯以等待该同步事件的发生;以等待该同步事件的发生;另一个任务或另一个任务或ISR到达同步点时,到达同步点时,释放信号灯释放信号灯(将其值(将其值设置为设置为1)表示同步事件已发生,以唤醒等待的任务。)表示同步事件已发生,以唤醒等待的任务。Task1Task2二值信号灯二值信号灯初值为初值为0二值信号灯二值信号灯二值信号灯状态图二值信号灯状态图可获得可获得不可获得不可获得申请并获得申请并获得(值为值为0)释放释放(值为值为1)初始化初始化值为值为0Tas

11、k1()执行一些操作执行一些操作;将信号灯将信号灯sem1置置1;申请信号灯申请信号灯sem2;Task2()申请信号灯申请信号灯sem1;执行一些操作执行一些操作;将信号灯将信号灯sem2置置1;Task2申请信号灯申请信号灯sem1失败,系统失败,系统切换到切换到Task1s e m 1 被 置被 置 1 后,后,Task2得到得到sem1并并抢占抢占Task1Task2运行到某处运行到某处时因某种原因被时因某种原因被阻塞,系统切换阻塞,系统切换到到Task1计数信号灯计数信号灯 计数信号灯用于控制系统中共享资源的多计数信号灯用于控制系统中共享资源的多个实例的使用,允许多个任务同时访问同个

12、实例的使用,允许多个任务同时访问同一种资源的多个实例一种资源的多个实例 计数信号灯被初始化为计数信号灯被初始化为n(非负整数),(非负整数),n为该种共享资源的数目。为该种共享资源的数目。Task1Task2共享资源实例共享资源实例nTask m共享资源实例共享资源实例1计数信号灯计数信号灯计数信号灯状态图计数信号灯状态图可获得可获得不可获得不可获得初始化初始化值大于值大于0申请并获得申请并获得值为值为0释放释放值为值为1申请并获得申请并获得值减值减1释放释放值加值加1计数信号灯计数信号灯 1 2 3 4 n生产者任务生产者任务消费者任务消费者任务计数信号灯使用实例:生产者计数信号灯使用实例:

13、生产者-消费者问题(有界缓冲消费者问题(有界缓冲问题)问题)问题描述:问题描述:一个仓库可以存放一个仓库可以存放n件物品。生产者每生产一件产品,将件物品。生产者每生产一件产品,将产品放入仓库,仓库满了就停止生产。消费者每次从仓库中去一件物品,产品放入仓库,仓库满了就停止生产。消费者每次从仓库中去一件物品,然后进行消费,仓库空时就停止消费。然后进行消费,仓库空时就停止消费。生产者任务生产者任务do 产生一个数据项产生一个数据项申请申请empty申请申请mutex将新生成的数据项添加到缓冲中将新生成的数据项添加到缓冲中释放释放mutex释放释放full while(1);消费者任务消费者任务do

14、申请申请full申请申请mutex从缓冲中移出一个数据项的内容从缓冲中移出一个数据项的内容释放释放mutex释放释放empty消费新获得的数据项内容消费新获得的数据项内容 while(1);计数信号灯计数信号灯full:已被填充的数据项数目,取值范围:已被填充的数据项数目,取值范围0n,初始值为,初始值为0计数信号灯计数信号灯empty:空闲数据项数目,取值范围为:空闲数据项数目,取值范围为0n,初始值为,初始值为n;互斥信号灯互斥信号灯mutex:控制生产者任务和消费者任务对有界缓冲的访问,:控制生产者任务和消费者任务对有界缓冲的访问,初始值为初始值为1。哲学家就餐问题哲学家就餐问题 问题描

15、述:问题描述:一个房间内有一个房间内有5个哲学家,他们的生活就是思个哲学家,他们的生活就是思考和进食。房间里有一张圆桌,中间放着一盘考和进食。房间里有一张圆桌,中间放着一盘通心粉(假定通心粉无限多)。桌子周围放有通心粉(假定通心粉无限多)。桌子周围放有五把椅子,分别属于五位哲学家每两位哲学家五把椅子,分别属于五位哲学家每两位哲学家之间有一把叉子,哲学家进食时必须同时使用之间有一把叉子,哲学家进食时必须同时使用左右两把叉子。左右两把叉子。仅当哲学家的左右两支筷子都可用时仅当哲学家的左右两支筷子都可用时,才允才允许他拿起筷子进餐。利用信号量的保护机许他拿起筷子进餐。利用信号量的保护机制实现。通过信

16、号量制实现。通过信号量mutexmutex对就餐之前的取对就餐之前的取左侧和右侧叉子的操作进行保护,使之成左侧和右侧叉子的操作进行保护,使之成为一个原子操作,这样可以防止死锁的出为一个原子操作,这样可以防止死锁的出现。现。信号灯机制的主要数据结构信号灯机制的主要数据结构SCB1SCB2信号灯控制块信号灯控制块count信号灯名字或信号灯名字或IDTask1Task2任务等待列表任务等待列表信号灯机制的主要数据结构信号灯机制的主要数据结构 信号灯控制块信号灯控制块:管理所有创建的信号灯,内核:管理所有创建的信号灯,内核在系统运行时动态分配和回收信号灯控制块在系统运行时动态分配和回收信号灯控制块

17、互斥和二值信号灯控制块结构互斥和二值信号灯控制块结构:Binary_Semaphore_Control_BlockBinary_Semaphore_Control_Blockwait_queue任务等待队列任务等待队列attributes信号灯属性信号灯属性lock_nesting_behavior试图嵌套获得时的规则试图嵌套获得时的规则 wait_discipline任务等待信号灯的方式任务等待信号灯的方式priority_ceiling优先级天花板值优先级天花板值lock是否被占有是否被占有holder拥有者拥有者 nest_count嵌套层数嵌套层数 计数信号灯控制结构计数信号灯控制结构

18、Counting_Semaphore_Control_BlockCounting_Semaphore_Control_Block wait_queuewait_queue 任务等待队列任务等待队列 attributesattributes 计数信号灯属性计数信号灯属性 maximum_countmaximum_count 最大计数值最大计数值 wait_disciplinewait_discipline任务等待信号灯的方式任务等待信号灯的方式 countcount当前计数值当前计数值信号灯机制的主要数据结构信号灯机制的主要数据结构典型的信号灯操作典型的信号灯操作 创建信号灯创建信号灯 获取(申

19、请)信号灯获取(申请)信号灯 释放信号灯释放信号灯 删除信号灯删除信号灯 清除信号灯的任务等待列表清除信号灯的任务等待列表 获取有关信号灯的各种信息获取有关信号灯的各种信息 第二节第二节消息队列消息队列通信方式概述通信方式概述消息队列机制的主要数据结构消息队列机制的主要数据结构典型的消息队列操作典型的消息队列操作消息队列的其他典型使用消息队列的其他典型使用 任务间的通信方式任务间的通信方式 直接通信直接通信。在通信过程中双方必须明确地知。在通信过程中双方必须明确地知道(命名)彼此:道(命名)彼此:Send(P,message)发送一个消息到任务发送一个消息到任务P Receive(Q,mess

20、age)从任务从任务Q接收一个消接收一个消息息 间接通信间接通信。通信双方不需要指出消息的来源。通信双方不需要指出消息的来源或去向,而通过中间机制来通信。如:或去向,而通过中间机制来通信。如:send(A,message)发送一个消息给邮箱发送一个消息给邮箱A receive(A,message)从邮箱从邮箱A接收一个消息接收一个消息通信方式概述通信方式概述 消息队列:消息队列:属于间接通信方式属于间接通信方式 消息:消息:内存空间中一段长度可变的缓冲区,其内存空间中一段长度可变的缓冲区,其长度和内容均可以由用户定义,其内容可以是长度和内容均可以由用户定义,其内容可以是实际的数据、数据块的指针

21、或空。实际的数据、数据块的指针或空。对消息内容的解释由应用完成。对消息内容的解释由应用完成。从从操作系统观点看,消息没有定义的格式,所有的观点看,消息没有定义的格式,所有的消息都是字节流,没有特定的含义。消息都是字节流,没有特定的含义。从从应用观点看,根据应用定义的消息格式,消息被观点看,根据应用定义的消息格式,消息被解释成特定的含义。解释成特定的含义。应用可以只把消息当成一个标志,这时消息机制用应用可以只把消息当成一个标志,这时消息机制用于实现于实现同步概述概述 消息队列就是一个消息的链表。每个消息消息队列就是一个消息的链表。每个消息队列都有一个队列头,用结构队列都有一个队列头,用结构str

22、uct struct msg_queuemsg_queue来描述。队列头中包含了该消息来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值、用队列的大量信息,包括消息队列键值、用户户IDID、组、组IDID、消息队列中消息数目等等,、消息队列中消息数目等等,甚至记录了最近对消息队列读写进程的甚至记录了最近对消息队列读写进程的IDID。读者可以访问这些信息,也可以设置其中读者可以访问这些信息,也可以设置其中的某些信息。的某些信息。消息队列机制的主要数据结构消息队列机制的主要数据结构队列控制块队列控制块队列长度队列长度QCB1队列名或队列名或IDTask3Task4接收任务等待列接收任务等

23、待列表表Task1Task2发送任务等待列发送任务等待列表表最大最大消息消息长度长度QCB2消息队列及其相关的参数和支持数据结构消息队列及其相关的参数和支持数据结构 消息队列状态图消息队列状态图非空非空满满队列创建队列创建消息数为消息数为0消息队列状态图消息队列状态图消息发送消息发送消息数加消息数加1空空消息发送消息发送消息数为消息数为1消息接收消息接收消息数为消息数为0消息接收消息接收消息数减消息数减1消息接收消息接收消息数减消息数减1消息发送消息发送消息数等于队列长度消息数等于队列长度消息队列机制的主要数据结构消息队列机制的主要数据结构 消息队列控制块消息队列控制块 管理所有创建的消息队列

24、,系统运行时动态分配和回管理所有创建的消息队列,系统运行时动态分配和回收消息队列控制块收消息队列控制块 消息队列缓冲区消息队列缓冲区 存放发送到该队列的消息,接收者从缓冲区中取出消存放发送到该队列的消息,接收者从缓冲区中取出消息。息。消息的发送或接收有两种方法(影响消息缓冲区结消息的发送或接收有两种方法(影响消息缓冲区结构):构):将数据从发送任务的空间完全拷贝到接收任务的空间中(效率将数据从发送任务的空间完全拷贝到接收任务的空间中(效率较低,执行时间与消息大小有关)较低,执行时间与消息大小有关)只传递指向数据存储空间的指针(提高系统性能)只传递指向数据存储空间的指针(提高系统性能)numbe

25、r_of_messagemax_message_countnumber_of_messagemax_message_sizewait_disciplinewait_queuequeue_startqueue_inqueue_outqueue_endmessagemessagemessagemessagemessagemessagemessagemessagemessagemax_message_count消息队列消息队列控制块控制块消息队列消息队列缓冲区缓冲区消息队列机制的主要数据结构消息队列机制的主要数据结构消息队列机制的主要数据结构消息队列机制的主要数据结构max_message_coun

26、tqueue_endqueue_startqueue_outnumber_of_messagequeue_in消息指针消息指针Linux中的消息队列中的消息队列 Linux Linux 维护了一系列消息队列的维护了一系列消息队列的 msgquemsgque 向量表。向量表。其中的每一个单元都指向一个其中的每一个单元都指向一个 msqid_dsmsqid_ds 的数据的数据结构,完整描述这个消息队列。当创建消息队列结构,完整描述这个消息队列。当创建消息队列的时候,从系统内存中分配一个新的的时候,从系统内存中分配一个新的 msqid_dsmsqid_ds 的数据结构并插入到向量表中。的数据结构并插

27、入到向量表中。每一个每一个 msqid_dsmsqid_ds 数据结构都包括一个数据结构都包括一个 ipc_permipc_perm 的数据结构和进入这个队列的消息的指的数据结构和进入这个队列的消息的指针。另外,针。另外,Linux Linux 保留队列的改动时间,例如上保留队列的改动时间,例如上次队列写的时间等。次队列写的时间等。Msqid_dsMsqid_ds 队列也包括两个队列也包括两个等待队列:一个用于向消息队列写,另一个用于等待队列:一个用于向消息队列写,另一个用于读。读。每一次一个进程试图向写队列写消息,它的有效用户和组每一次一个进程试图向写队列写消息,它的有效用户和组的标识符就要

28、和队列的的标识符就要和队列的 ipc_permipc_perm 数据结构的模式比较。数据结构的模式比较。如果进程可以想这个队列写,则消息会从进程的地址空间如果进程可以想这个队列写,则消息会从进程的地址空间写到写到 msgmsg 数据结构,放到消息队列的最后。每一个消息数据结构,放到消息队列的最后。每一个消息都带有标记。因为都带有标记。因为 Linux Linux 限制写的消息的数量和长度,限制写的消息的数量和长度,可能会没有空间容纳消息。这时,进程会被放到消息队列可能会没有空间容纳消息。这时,进程会被放到消息队列的写等待队列,然后调用调度程序选择一个新的进程运行。的写等待队列,然后调用调度程序

29、选择一个新的进程运行。当一个或多个消息从这个消息队列中读出去的时候会被唤当一个或多个消息从这个消息队列中读出去的时候会被唤醒。醒。从队列中读是一个相似的过程。进程的访问权限一样被检从队列中读是一个相似的过程。进程的访问权限一样被检查。一个读进程可以选择是不管消息的类型从队列中读取查。一个读进程可以选择是不管消息的类型从队列中读取第一条消息还是选择特殊类型的消息。如果没有符合条件第一条消息还是选择特殊类型的消息。如果没有符合条件的消息,读进程会被加到消息队列的读等待进程,然后运的消息,读进程会被加到消息队列的读等待进程,然后运行调度程序。当一个新的消息写到队列的时候,这个进程行调度程序。当一个新

30、的消息写到队列的时候,这个进程会被唤醒,继续运行。会被唤醒,继续运行。典型的消息队列操作典型的消息队列操作 创建消息队列创建消息队列 发送普通消息发送普通消息 发送紧急消息发送紧急消息 发送广播消息发送广播消息 接收消息接收消息 删除消息队列删除消息队列 获取有关消息队列的各种信息获取有关消息队列的各种信息 创建消息队列创建消息队列 创建消息队列时,调用者可以指定如下参创建消息队列时,调用者可以指定如下参数:数:消息的最大长度消息的最大长度 每个消息队列中最多的消息数每个消息队列中最多的消息数 消息队列的属性消息队列的属性 任务等待消息时的排队方式:任务等待消息时的排队方式:FIFO或或PRI

31、ORITY 系统为新创建的消息队列分配唯一的系统为新创建的消息队列分配唯一的ID ID 发送消息发送消息 根据紧急程度的不同,消息通常可分为根据紧急程度的不同,消息通常可分为普通消息普通消息与与紧急消息紧急消息。如果有任务正在等待消息(即消息队列为如果有任务正在等待消息(即消息队列为空),则普通消息发送和紧急消息发送的执空),则普通消息发送和紧急消息发送的执行效果是一样的。行效果是一样的。任务从等待队列移到就绪任务从等待队列移到就绪队列中,消息被拷贝到任务提供的缓冲区中队列中,消息被拷贝到任务提供的缓冲区中(或者由接收任务得到指向消息的指针)(或者由接收任务得到指向消息的指针)。如果没有任务等

32、待,发送普通消息将消息放如果没有任务等待,发送普通消息将消息放在队列尾,而发送紧急消息将消息放在队列在队列尾,而发送紧急消息将消息放在队列头。头。发送消息发送消息Msg 3接收任务接收任务等待列表等待列表Msg 2Msg 1消息队列消息队列发送普通消息先进先出发送普通消息先进先出(FIFO)次序)次序Msg 3接收任务接收任务等待列表等待列表Msg 2Msg 1消息队列消息队列发送紧急消息后进先出发送紧急消息后进先出(LIFO)次序)次序发送消息发送消息 如果发送消息时如果发送消息时队列已被填满队列已被填满,则不同的操作,则不同的操作系统可能采取不同的处理办法:系统可能采取不同的处理办法:挂起

33、试图向已满的消息队列中发送消息的任务(不挂起试图向已满的消息队列中发送消息的任务(不适用于中断服务程序)适用于中断服务程序)简单地丢弃该条消息并向调用者返回错误信息简单地丢弃该条消息并向调用者返回错误信息 广播消息广播消息。在此之前所有试图从队列中接收消。在此之前所有试图从队列中接收消息的任务此时都将获得相同的消息。该功能拷息的任务此时都将获得相同的消息。该功能拷贝消息到各任务的消息缓冲中(或者让所有的贝消息到各任务的消息缓冲中(或者让所有的等待任务得到指向消息的指针),并唤醒所有等待任务得到指向消息的指针),并唤醒所有的等待任务。的等待任务。接收消息接收消息 如果指定的消息队列中有消息,则将

34、其如果指定的消息队列中有消息,则将其中的第一条消息拷贝到调用者的缓冲区中的第一条消息拷贝到调用者的缓冲区(或者将第一条消息指针传递给调用(或者将第一条消息指针传递给调用者),并从消息队列中删除它。者),并从消息队列中删除它。如果此时消息队列中没有消息,则可能如果此时消息队列中没有消息,则可能出现以下几种情况:出现以下几种情况:永远等待消息的到达永远等待消息的到达:等待消息的任务按:等待消息的任务按FIFO或优先级高低顺序排列在等待队列中或优先级高低顺序排列在等待队列中 等待消息且指定等待时限等待消息且指定等待时限:等待消息的任务:等待消息的任务按按FIFO或优先级高低顺序排列在等待队列或优先级

35、高低顺序排列在等待队列中中 不等待,强制立即返回不等待,强制立即返回接收消息接收消息 限时等待可有效预防死锁限时等待可有效预防死锁 中断服务程序接收消息时必须选择不等待,因为中断服务程序接收消息时必须选择不等待,因为中断服务程序是不能被阻塞的。中断服务程序是不能被阻塞的。如果消息队列被应用删除,则所有等待该消息队如果消息队列被应用删除,则所有等待该消息队列的任务都被返回一个错误信息,并回复到就绪列的任务都被返回一个错误信息,并回复到就绪状态。状态。接收消息接收消息Task 4High消息队列消息队列接收任务等待列表接收任务等待列表任务等待列表基于任务等待列表基于优先级的次序优先级的次序Task

36、 2mediumTask 3mediumTask 1LowTask 4High消息队列消息队列接收任务等待列表接收任务等待列表任务等待列表先进先出任务等待列表先进先出(FIFO)次序)次序Task 2mediumTask 3mediumTask 1Low删除消息队列删除消息队列 从系统中删除指定的消息队列,释放从系统中删除指定的消息队列,释放消息队列控消息队列控制块制块及及消息队列缓冲区消息队列缓冲区。任何知道此消息队列任何知道此消息队列IDID号的代码都可以删除它。号的代码都可以删除它。消息队列被删除后,所有等待从这个消息队列接消息队列被删除后,所有等待从这个消息队列接收消息的任务都回到收消

37、息的任务都回到就绪态就绪态,并得到一个错误信,并得到一个错误信息表明消息队列已被删除。息表明消息队列已被删除。消息队列的其他典型使用消息队列的其他典型使用 紧耦合的单向数据通信:发送任务发送消紧耦合的单向数据通信:发送任务发送消息后要求一个响应信号,表明接收任务已息后要求一个响应信号,表明接收任务已经成功接收到消息。经成功接收到消息。Task1Task2 消息队列的其他典型使用消息队列的其他典型使用 紧耦合的双向数据通信紧耦合的双向数据通信 :如果数据需要在:如果数据需要在任务之间双向流动,则可以采用紧耦合的任务之间双向流动,则可以采用紧耦合的双向数据通信模式(也称为全双工通信)。双向数据通信

38、模式(也称为全双工通信)。Task1Task2第三节第三节事事 件件概述概述事件机制的主要数据结构事件机制的主要数据结构典型的事件操作典型的事件操作事件机制的典型应用事件机制的典型应用 在嵌入式实时内核中,事件是指一种表明预先在嵌入式实时内核中,事件是指一种表明预先定义的系统事件已经发生的机制。定义的系统事件已经发生的机制。事件机制用于任务与任务之间、任务与事件机制用于任务与任务之间、任务与ISRISR之之间的同步。其主要的特点是可实现间的同步。其主要的特点是可实现一对多的同一对多的同步步。一个事件就是一个标志,不具备其它信息。一个事件就是一个标志,不具备其它信息。一个或多个事件构成一个事件集

39、。事件集可以一个或多个事件构成一个事件集。事件集可以用一个指定长度的变量(用一个指定长度的变量(比如一个比如一个8bit,8bit,16bit16bit或或32bit32bit的无符号整型变量的无符号整型变量,不同的,不同的操作系统其具体实现不一样)来表示,而每个操作系统其具体实现不一样)来表示,而每个事件由在事件集变量中的某一位来代表。事件由在事件集变量中的某一位来代表。概述概述 事件及事件集有以下特点:事件及事件集有以下特点:事件间相互独立事件间相互独立 事件仅用于同步,不提供数据传输功能事件仅用于同步,不提供数据传输功能 事件无队列,即多次发送同一事件,在未经过任何事件无队列,即多次发送

40、同一事件,在未经过任何处理的情况下,其效果等同于只发送一次。处理的情况下,其效果等同于只发送一次。提供事件机制的意义在于:提供事件机制的意义在于:当某任务要与多个任务或中断服务同步时,就需要当某任务要与多个任务或中断服务同步时,就需要使用事件机制。使用事件机制。若任务需要与一组事件中的任意一个发生同步,可若任务需要与一组事件中的任意一个发生同步,可称为称为独立型同步独立型同步(逻辑(逻辑“或或”关系)。关系)。任务也可以等待若干事件都发生时才同步,称为任务也可以等待若干事件都发生时才同步,称为关关联型同步联型同步(逻辑(逻辑“与与”关系)。关系)。概述概述概述概述任务任务任务任务任务任务任务任

41、务ISRISRORAND“与与”型同步型同步“或或”型同步型同步事件集事件集事件集事件集POSTPOSTPENDPEND概述概述任务任务任务任务任务任务ISRORAND事件集事件集事件集事件集事件集事件集(8,16或或32位)位)POSTPENDPEND 术语:术语:发送事件集发送事件集。指在一次发送过程中发往接。指在一次发送过程中发往接收者(比如任务)的一个或多个事件的组合。收者(比如任务)的一个或多个事件的组合。待处理事件集待处理事件集。指已被发送到一个接收者但。指已被发送到一个接收者但还没有被接收(即正在等待处理)的所有事还没有被接收(即正在等待处理)的所有事件的集合。件的集合。事件条件

42、事件条件。指事件接收者在一次接收过程中。指事件接收者在一次接收过程中期待接收的一个或多个事件的集合。期待接收的一个或多个事件的集合。“或或”同步:待处理事件集只要包括事件条件中同步:待处理事件集只要包括事件条件中的任一事件即可满足要求;的任一事件即可满足要求;“与与”同步:其二是待处理事件集必须包括事件同步:其二是待处理事件集必须包括事件条件中的全部事件方可满足要求条件中的全部事件方可满足要求。概述概述事件机制的主要数据结构事件机制的主要数据结构 事件集控制块:管理所有事件集控制块:管理所有创建创建的事件集的事件集或者或者 事件集附属于任务,事件集附属于任务,不需创建不需创建,其相关参,其相关

43、参数成为任务控制块的一部分数成为任务控制块的一部分典型的事件操作典型的事件操作 创建事件集创建事件集 删除事件集删除事件集 发送事件(集)发送事件(集)接收事件(集)接收事件(集)获取有关事件集的各种信息获取有关事件集的各种信息 设置事件设置事件设置事件设置事件Task1ISR来自某设备的来自某设备的中断中断Task2消息队列消息队列Q事件标志集事件标志集信号灯信号灯S01000100发送消息发送消息释放信号灯释放信号灯接收消息接收消息获取信号获取信号量量事件机制的典型应用事件机制的典型应用 解决复杂的应用设计问题解决复杂的应用设计问题发送方(发送方(Task1Task1或或ISRISR)发送

44、信息(消息或信号发送信息(消息或信号灯);灯);发送方(发送方(Task1Task1或或ISRISR)设置相应的事件标志设置相应的事件标志(指示消息或信号灯的(指示消息或信号灯的发送);发送);接收方(接收方(Task2Task2)检)检测事件标志集,判断是测事件标志集,判断是否满足其接收条件否满足其接收条件(“与与”条件接收或条件接收或“或或”条件接收);条件接收);接收方(接收方(Task2Task2)根)根据事件标志集的指示定据事件标志集的指示定向接收信息(消息或信向接收信息(消息或信号灯),达到和不同发号灯),达到和不同发送方(送方(Task1Task1或或ISRISR)同)同步或通信

45、的目的。步或通信的目的。第四节第四节管道管道概述概述管道机制的主要数据结构管道机制的主要数据结构典型的管道操作典型的管道操作管道机制的典型应用管道机制的典型应用管道机制概述管道机制概述 管道(管道(pipepipe)是提供非结构化数据交换和)是提供非结构化数据交换和实现任务间同步的内核对象。在传统的实实现任务间同步的内核对象。在传统的实现中,管道是单向数据交换设施。现中,管道是单向数据交换设施。Task1Task2管道管道管道中的数据管道中的数据写描述符写描述符读描述符读描述符向管道向管道写数据写数据从管道从管道读数据读数据数据在管道内像一个非结构字节流,按数据在管道内像一个非结构字节流,按F

46、IFOFIFO的次序从管道的次序从管道中读出。当管道空时,阻塞读者,当管道满时,阻塞写者。中读出。当管道空时,阻塞读者,当管道满时,阻塞写者。管道机制概述管道机制概述 管道允许有多个读者和写者。管道允许有多个读者和写者。Task1Task5管道管道Task2Task3Task4Task6ISR1ISR2ISR3公共管道操作公共管道操作管道机制概述管道机制概述管道与消息队列的区别管道与消息队列的区别管道不存储多个消息,它存储的数据是非结管道不存储多个消息,它存储的数据是非结构化的字节流;构化的字节流;管道中的数据严格地遵循先进先出的顺序;管道中的数据严格地遵循先进先出的顺序;管道支持选择(管道支

47、持选择(select)操作,而消息队列)操作,而消息队列不支持。不支持。管道机制概述管道机制概述 管道的状态管道的状态非空非空满满创建管道创建管道无写入数无写入数据据读数据,有读数据,有剩余数据剩余数据空空写数据写数据读数据,读数据,无数据留无数据留下下写数据,有写数据,有剩余空间剩余空间读数据读数据写数据,无写数据,无剩余空间剩余空间管道机制概述管道机制概述 命名管道和无名管道:命名管道和无名管道:一个一个命名管道具有一个类似于文件名的名字,具有一个类似于文件名的名字,并像一个文件或设备出现在文件中。任务或并像一个文件或设备出现在文件中。任务或ISR可以用名字对其进行引用。可以用名字对其进行

48、引用。无名管道没有名字且不在文件系统中出现,它没有名字且不在文件系统中出现,它必须使用创建管道时系统返回调用者的描述符必须使用创建管道时系统返回调用者的描述符才能引用。才能引用。管道机制的主要数据结构管道机制的主要数据结构管道控制块管道控制块Byte countData bufferBuffer sizeOutput positionInput positionTask3Task4接收任务等待列表接收任务等待列表Task1Task2发送任务等待列表发送任务等待列表典型的管道操作典型的管道操作 创建和删除一个管道;创建和删除一个管道;读或写管道;读或写管道;管道上的选择操作;管道上的选择操作;F

49、lushFlush操作。操作。典型的管道操作典型的管道操作 管道创建和删除管道创建和删除 创建管道的操作给调用者返回两个描述符,后创建管道的操作给调用者返回两个描述符,后续的调用引用这些描述符。一个描述符只能用续的调用引用这些描述符。一个描述符只能用于写,而另一个只能用于读。于写,而另一个只能用于读。创建一个命名管道与创建文件类似,在命名管创建一个命名管道与创建文件类似,在命名管道建立之后,在文件系统中有一个可识别的名道建立之后,在文件系统中有一个可识别的名字,可以使用字,可以使用open操作打开它。因此,调用者操作打开它。因此,调用者也必须说明是采用读方式打开还是写方式打开。也必须说明是采用

50、读方式打开还是写方式打开。与与open操作相对应,操作相对应,close操作用于关闭并删操作用于关闭并删除一个命名管道。除一个命名管道。典型的管道操作典型的管道操作 管道读和写管道读和写 读操作把管道中的数据返回给调用者(任务)。读操作把管道中的数据返回给调用者(任务)。任务应指定读多少数据。如果指定的大小超过任务应指定读多少数据。如果指定的大小超过管道中可以得到的数据量,则任务可以选择阻管道中可以得到的数据量,则任务可以选择阻塞,等待剩余的数据到达。塞,等待剩余的数据到达。典型的管道操作典型的管道操作 选择(选择(SelectSelect)操作)操作 Select操作允许一个任务阻塞并等待一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第10讲任务通信与同步课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|