嵌入式系统课件 5-embedded opration systmes(2).ppt

嵌入式系统课件 5-embedded opration systmes(2).ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 嵌入式系统 第五讲 嵌入式操作系统-任务通信 任务间通信 任务间通信(Intertask Communication):任务之间为了协调工作,需要相互交换数据和控制信息; 任务间通信的方式: 共享内存(shared memory); 消息传递(message passing); 管道(pipe); 信号(signal)。 共享内存 各个任务共享它们地址空间当中的某些部分,即 共享内存。在此区域,可以任意读写和使用任意的数据结构(缓冲区); 一组任务向共享内存中写数据,另一组任务从中读数据,通过此方式实现它们之间的信息交换。 内存 共享数据 任务1 任务2 任务3 消息传递 消息:由若干数据位组成; 消息传递:任务之间通过发送和接收消息来交换信息; 消息机制由OS来维护,包括定义寻址方式、认证协议、消息的大小等。一般提供两个操作: send( ),发送一条消息; receive( ),接收一条消息。 如果两个任务P和Q想要进行通信,它们需要 在两者之间建立一个通信链路; 使用send( )和receive( )交换信息。 直接通信 直接通信:通信双方必须指明与之通信的对象。 send(P, message):发送一条消息给任务P; receive(Q, message):从任务Q那里接收一条 消息。如果没有收到消息,可以阻塞起来等 待消息的到来,也可以立即返回; 通信双方之间存在一条通信链路 通信链路是自动建立的,由OS来维护; 每条链路只涉及两个任务,每对任务之间仅存在一条链路; 通信链路可以是单向或双向的。 间接通信1 间接通信:通信时不必指明发送或接收的对象,而是通过共享的邮箱来发送和接收消息。 send(A, message):发送一条消息给邮箱A; receive(A, message):从邮箱A接收一条消息。 间接通信的特点 对于一对任务,只有当它们共享一个公共邮箱时才能进行通信; 一个邮箱可以被多个任务访问,每对任务也可以使用多个邮箱来通信; 可以是单向或双向的。 间接通信2 邮箱只能存放单条消息,其状态只有两种:空或满。另一种间接通信机制是:消息队列。 消息队列与邮箱类似,但可以同时存放若干条消息,提供了一种任务间缓冲通信的方法。 任务1 任务2 消息 消息队列1 消息 消息队列2 管道(pipe) 管道通信由UNIX首创,由于其有效性,后来的 一些系统相继引入了管道技术; 管道通信以文件系统为基础,所谓管道即连接两 个任务之间的一个打开的共享文件,专用于任务 之间的数据通信; 发送任务从管道的一端写入数据流,接收任务从 管道的另一端按先进先出的顺序读出数据流; 管道的读写操作即为文件操作fwrite/fread,数据 流的长度和格式没有限制。 信号(signal) 信号(异步信号)是任务的一个标识,表明某个异步事件已经发生了,该事件可能来自于外部(如其他的任务、硬件或定时器),也可能来自于内部(如执行指令出错); 信号机制用于任务与任务之间、任务与中断服务程序ISR之间的异步操作,异步信号被任务(或ISR)用来通知其他任务某个事件的出现; 当任务收到一个信号后,将暂停执行其自身的代码,转而去运行相应的信号处理程序。 信号与中断 相同点 具有中断性; 有相应的处理程序; 可以屏蔽响应; 不同点 中断由硬件或特定的指令产生,信号由系统调用产生; 中断触发后,硬件会根据中断向量找到相应的处理程序去执行;信号通过发送信号的系统调用触发,但系统不一定马上对它进行处理; 中断处理程序是在系统内核的上下文中运行,是全局的;而信号处理程序是在相关任务的上下文中运行,是任务的一个组成部分。 同步与互斥 多数操作系统(包括分时和实时)都是多任务系统,允许多个任务同时运行; 当两个或多个任务在访问共享资源(如共享内存)的时候,如何确保它们不会相互妨碍 —— 任务互斥问题; 当两个或多个任务之间存在着某种依存关系时,如何来调整它们的运行次序 —— 任务同步问题。 竞争条件(race condition): 两个或多个任务对同一共享数据同时进行读写 操作,而最后的结果是不可预测的,它取决于 各个任务的具体运行情况。 解决之道: 在同一时刻,只允许一个任务访问该共享数据, 即如果当前已有一个任务正在使用该数据,那么 其他任务暂时不能访问。这就是互斥的概念。 可重入函数-1 可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数只使用局部变量,即变量保存在CPU寄存器或栈中。 一个不可重入型函数的例子 int temp; void swap(int *x, int *y) { temp = *x; *x = *y;

您可能关注的文档

文档评论(0)

卖报的小行家 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档