RTOS-Chapter3-1.ppt

  1. 1、本文档共103页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 任务的同步与通信 主要内容 概述 任务同步(互斥) 信号量 任务通信 μc-os-II的任务的同步、互斥和通信 概述-多任务系统中任务之间的关系 相互独立:仅竞争CPU资源 竞争除CPU外的其他资源(互斥) 同步:协调彼此运行的步调 通信:彼此间传递数据或信息,以协同完成某项工作 概述-通信与同步方式 单向同步或通信:一个任务与另一个任务或一个ISR同步或通信。 双向同步或通信:两个任务相互同步或通信。双向同步不能在任务与ISR之间进行,因为ISR不能等待。 第二章的前驱图 概述 在嵌入式多任务系统中,任务间的耦合程度是不一样的: 耦合程度较高:任务之间需要进行大量的通信,相应的系统开销较大; 耦合程度较低:任务之间不存在通信需求,其间的同步关系很弱甚至不需要同步或互斥,系统开销较小。 研究任务间耦合程度的高低对于合理地设计应用系统、划分任务有很重要的作用。 概述-通信与同步的解决方法 嵌入式操作系统内核提供的同步、互斥与通信机制主要包括: 信号量(semaphore),用于互斥与同步 事件(组)(event group),用于同步 异步信号(asynchronous signal),用于同步 邮箱(mailbox)、消息队列(message queue)或管道(pipe),用于消息通信 概述-一些其他解决方法 以下一些机制也可用于同步与通信(在单处理器或多处理器系统中): 全局变量 共享内存 Sockets(TCP/IP) 远程过程调用(Remote Procedure Call)(也是基于TCP/IP 本节结束 任务同步 产生原因:引入任务后,提高了系统的吞吐量和利用率,但是可能会产生混乱,尤其是很多任务在访问一些临界资源(共享资源)时。 任务同步的主要任务:使并发执行的任务之间能有效地共享资源和互相合作,从而使程序的执行具有可再现性。 任务同步的基本概念 两种形式的制约关系:直接制约和间接制约 临界资源 临界区 同步机制应遵循的规则 1.两种形式的制约关系 间接制约关系:这是由于竞争相同资源(共享资源)而引起的,得到资源的程序段可以投入运行,而得不到资源的程序段就是暂时等待,直至获得可用资源时再继续运行 (打印机不能后台工作) 直接制约关系:由于任务之间的合作。 2.临界资源 在计算机中有许多资源只允许一个任务使用,如果有多个任务同时去使用这类资源就会产生严重的错误。 几个任务若共享同一临界资源,它们必须以互斥的方式使用这个临界资源,即当一个任务正在使用临界资源且尚未使用完毕时,则其他任务必须推迟对该资源的进一步操作,在当前任务的使用完成之前,不能从中插进去使用这个临界资源,否则将会造成信息混乱和操作出错(打印机)。 临界资源举例:生产者-消费者问题 著名的任务同步问题。 临界资源不仅仅是打印机,内存变量也可以是临界资源。 问题描述 一个生产者任务生产产品,并将这些产品提供给消费者任务去使用。为使生产者任务与消费者任务能并发执行,在两者之间设置了一个具有N个缓冲区的缓冲池,生产者任务将它所生产的每一个产品都放入一个缓冲区;消费者任务可从一个缓冲区中每次取走一个产品进行消费。 ?直接制约关系-如果处理不好也会产生间接制约关系 问题的限制-同步规则 两个任务之间可以异步执行,但是它们之间必须保持同步,同步规则如下: 不允许消费者任务去一个空缓冲区取产品 也不允许生产者任务往装满产品的缓冲区放置产品。 数学模型 用空间为n的数组表示缓冲池 用指针in指示下一个可投放产品的缓冲区; 用指针out指示下一个可从中获取产品的缓冲区;counter用于表示缓冲池内部可用产品数。 In、out和counter的初始值都为0。 数学模型 每放入一个产品in+1 -in=(in+1) % N; 每取一个产品out+1 -out = (out+1) % N; counter = 0 -表示池空 counter = N - 表示池满 数学模型 每放入一个产品in+1 -in=(in+1) % N; 每取一个产品out+1 -out = (out+1) % N; in = out -表示池空 (in+1) % N = out - 表示池满 变量定义 #define N 10 int buffer[N]; int in,out int counter; 生产者程序 void producer(void) { for(;;) { … Produce an item in nextp; //nextp局部变量 … while (counter == N) {} buffer[in] = nextp; in = (in+1) % N; counter = counter +1 ; } } 消费者程序

文档评论(0)

msb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8134116003000000

1亿VIP精品文档

相关文档