任务的同步与通信

任务的同步与通信

ID:39193740

大小:3.02 MB

页数:48页

时间:2019-06-26

任务的同步与通信_第1页
任务的同步与通信_第2页
任务的同步与通信_第3页
任务的同步与通信_第4页
任务的同步与通信_第5页
资源描述:

《任务的同步与通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式实时操作系统uC/OS-II的原理与应用东软人才实训中心第四章:任务的同步与通信目标:本章旨在向学员介绍任务的同步机制及通信方式,通过本章的学习,学员应该掌握如下知识:事件控制块的概念信号量及其使用消息邮箱及其使用消息队列及其使用学时:8.0学时教学方法:讲授ppt+上机练习+点评+案例分析4.1任务间的同步和事件控制块嵌入式系统中的各个任务都是以并发的方式运行,为同一个大任务服务。不可避免地要共同使用一些共享资源。多任务协作处理,需要相互的支持和限制。所以,系统必须具有完备的同步和通信机制。系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享

2、资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行。因此,操作系统必须具有对任务的运行进行协调的能力,从而使任务之间可以无冲突、流畅地同步运行,而不致导致灾难性的后果。与人们依靠通信来互相沟通,从而使人际关系和谐、工作顺利的做法一样,计算机系统是依靠任务之间的良好通信来保证任务与任务的同步的。4.1.1任务间的同步为了实现各任务之间的合作和无冲突的运行,在各任务之间必须建立一些制约关系。直接制约关系:源于任务之间的合作。间接制约关系:源于对资源的共享。在多任务合作工作的过程中,操作系统应该解决的两个问题:各任务之间的互斥

3、关系。相关的任务在执行上要有先后次序。任务之间这种制约性的合作运行机制叫做任务间的同步。任务的同步是依靠任务之间互相发送消息来保证同步的。4.1.1任务间的同步(续)直接制约关系举例:有2个任务,任务A和任务B,他们需要通过访问同一个数据缓冲区,合作完成一项工作,任务A负责向缓冲区写入数据,任务B负责从缓冲区读数据。显然,任务A还未向缓冲区写入数据时(缓冲区为空时),任务B因不能从缓冲区得到有效数据而处于等待状态。只有等任务A向缓冲区写入了数据后,才应该通知任务B去取数据。相反,当缓冲区的数据还未被任务B读取时(缓冲区还满时),任务A就不能向缓冲区写入新的数

4、据而应该处于等待状态,只有等任务B自缓冲区读取数据后,才应该通知任务A去写入数据。间接制约关系举例:任务A和任务B共享一台打印机,如果系统已经把打印机分配给了任务A,则任务B因不能获得打印机的使用权而应该处于等待状态,只有当任务A把打印机释放后,系统才能唤醒任务B使其获得打印机的使用权。解决问题1-互斥关系:即对于某个共享资源,如果一个任务正在使用,则其他任务只能等待,等到该任务释放该资源后,等待的任务之一才能使用它。解决问题2-先后次序:一个任务要等其伙伴发来通知,或建立了某个条件后才能继续执行,否则只能等待。总之,多个任务共享同一资源或有工作顺序要求时,

5、在正式工作之前要互相打招呼。4.1.2事件事件任务1任务2发送事件请求事件图4-1两个任务使用事件进行通信示意图任务间的同步依赖于任务间的通信。在uC/OS-II中,使用信号量、邮箱和消息队列这些被称作事件的中间环节来实现任务间的通信。任务1的责任是把信息发送到事件上,这项操作叫做发送事件。任务2的责任是通过事件操作对事件进行查询:如果有信息,则读取信息,如果没有,则等待。uC/OS-II把任务发送事件、请求事件以及其他对事件的操作都定义为全局函数,以供应用程序的所有任务来调用。4.1.2.1信号量使用信号量的目的:为共享资源设立一个表示该共享资源被占用情况

6、的标志。日常生活中的共享资源---公用电话亭、公共停车场的使用规则。互斥型信号量、计数式信号量。信号量任务1任务2先请求信号量图4-2两个任务使用信号量进行通信示意图后请求信号量1->0共享资源信号量任务1任务2发送信号量请求信号量0->1->0共享资源例程4-1:本例的应用程序中有2个用户任务:MyTask和YouTask。这两个任务都要访问同一个共享资源s,但YouTask访问s需要的时间长一些(本例中使用了一个循环来模拟访问的时间),而MyTask访问s的时间要短一些,这样就不可避免的出现了在任务YouTask访问s期间,任务MyTask也来访问s,从

7、而出现了干扰。在例4-1的应用程序中定义一个全局变量ac_key来作为信号量,并根据该信号量的状态来访问共享资源s,以解决冲突问题。例程4-2:如果把任务YouTask代码中的发信号语句ac_key=TRUE删掉,什么样结果?4.1.2.2消息邮箱在多任务系统中,常常需要在任务之间通过传递一个数据(这个数据叫做“消息”)的方式来进行通信。为达到这个目的,可在内存中创建一个存储空间作为该数据的缓冲区。如果把这个缓冲区叫做消息缓冲区,那么在任务间传递数据(消息)的一个最简单方法就是传递消息缓冲区的指针。用来传递消息缓冲区指针的数据结构就叫做消息邮箱。消息邮箱任务

8、1任务2发送消息(发送消息缓冲区指针)图4-3两个任

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。