任务通信与同步.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 消息队列允许一个或多个进程写消息,一个或多个进程读取消息。 Linux 维护了一系列消息队列的 msgque 向量表。其中的每一个单元都指向一个 msqid_ds 的数据结构,完整描述这个消息队列。当创建消息队列的时候,从系统内存中分配一个新的 msqid_ds 的数据结构并插入到向量表中 ????每一个 msqid_ds 数据结构都包括一个 ipc_perm 的数据结构和进入这个队列的消息的指针。另外, Linux 保留队列的改动时间,例如上次队列写的时间等。 Msqid_ds 队列也包括两个等待队列:一个用于向消息队列写,另一个用于读。 每一次一个进程试图向写队列写消息,它的有效用户和组的标识符就要和队列的 ipc_perm 数据结构的模式比较。如果进程可以想这个队列写,则消息会从进程的地址空间写到 msg 数据结构,放到消息队列的最后。每一个消息都带有进程间约定的,应用程序指定类型的标记。但是,因为 Linux 限制了可以写的消息的数量和长度,可能会没有空间容纳消息。这时,进程会被放到消息队列的写等待队列,然后调用调度程序选择一个新的进程运行。当一个或多个消息从这个消息队列中读出去的时候会被唤醒。 ????从队列中读是一个相似的过程。进程的访问权限一样被检查。一个读进程可以选择是不管消息的类型从队列中读取第一条消息还是选择特殊类型的消息。如果没有符合条件的消息,读进程会被加到消息队列的读等待进程,然后运行调度程序。当一个新的消息写到队列的时候,这个进程会被唤醒,继续运行。  * * * * * * * * * * * * * * * * * * 管道机制概述 管道允许有多个读者和写者。 Task1 Task5 管道 Task2 Task3 Task4 Task6 ISR1 ISR2 ISR3 公共管道操作 管道机制概述 管道与消息队列的区别 管道不存储多个消息,它存储的数据是非结构化的字节流; 管道中的数据严格地遵循先进先出的顺序; 管道支持选择(select)操作,而消息队列不支持。 管道机制概述 管道的状态 非空 满 创建管道 无写入数据 读数据,有剩余数据 空 写数据 读数据,无数据留下 写数据,有剩余空间 读数据 写数据,无剩余空间 管道机制概述 命名管道和无名管道: 一个命名管道具有一个类似于文件名的名字,并像一个文件或设备出现在文件中。任务或ISR可以用名字对其进行引用。 无名管道没有名字且不在文件系统中出现,它必须使用创建管道时系统返回调用者的描述符才能引用。 管道机制的主要数据结构 管道控制块 Byte count Data buffer Buffer size Output position Input position Task3 Task4 …… 接收任务等待列表 Task1 Task2 …… 发送任务等待列表 典型的管道操作 创建和删除一个管道; 读或写管道; 管道上的选择操作; Flush操作。 典型的管道操作 管道创建和删除 创建管道的操作给调用者返回两个描述符,后续的调用引用这些描述符。一个描述符只能用于写,而另一个只能用于读。 创建一个命名管道与创建文件类似,在命名管道建立之后,在文件系统中有一个可识别的名字,可以使用open操作打开它。因此,调用者也必须说明是采用读方式打开还是写方式打开。 与open操作相对应,close操作用于关闭并删除一个命名管道。 典型的管道操作 管道读和写 读操作把管道中的数据返回给调用者(任务)。任务应指定读多少数据。如果指定的大小超过管道中可以得到的数据量,则任务可以选择阻塞,等待剩余的数据到达。 典型的管道操作 选择(Select)操作 Select操作允许一个任务阻塞并等待一个或多个管道上的一个指定条件的发生。 Task1 ISR Task2 Task3 Pipe1 Pipe2 Pipe3 任务Task3等待从Pipe1和Pipe2这两个管道读数据并写到第三个管道Pipe3上。在这种情况下,当头两个管道中的任意一个有数据时,Select调用返回。 典型的管道操作 Flush操作 Flush操作将所有的数据从管道中清除,使管道回到最初创建的状态。 管道机制的典型应用 主要用于任务到任务或ISR到任务的数据传输 也可用于任务之间的同步 管道机制的典型应用 Task A Task B Select操作 Select操作 管道C 管道D 任务A和任务B打开两个管道作为任务间的通信方式:打开管道C作为从任务A到任务B的数据传输,打开管道D作为从任务B到任务A的回应。 谢谢! * * * * * * * * * * *

文档评论(0)

duoduoyun + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档