网站大量收购闲置独家精品文档,联系QQ:2885784924

5同步、互斥与通信.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5同步、互斥与通信

嵌入式系统及应用 主要内容 概述 信号量 邮箱和消息队列 管道 在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括: 信号量(semaphore),用于互斥与同步 事件(组)(event group),用于同步 异步信号(asynchronous signal),用于同步 邮箱(mailbox)、消息队列(message queue),用于消息通信 管道(pipe),提供非结构化数据交换和实现同步 以下一些机制也可用于同步与通信(在单处理器或多处理器系统中): 全局变量 共享内存 Sockets 远程过程调用(Remote Procedure Call) 第一节 信号量 什么是信号量 信号量被定义为一个整形变量,在其上定义了以下三个操作: 1、可以被初始化一个非负数 2、wait操作(P操作)将信号量的值减1后,若该值为负,则执行wait操作的任务等待 3、signal操作(V操作)将信号量的值增1后,若该值为非正,则执行signal操作的任务唤醒 信号量的种类及用途 信号量用于实现任务与任务之间、任务与中断处理程序之间的同步与互斥。 信号量一般分为三种: 互斥信号量 WaitB(S): /申请信号量 if S.value1; /当前没有其他任务使用信号量 then S.value=S.value-1=0/将信号量值修改为0,独占共享资源 else begin Insert(CALLER,S.L); /如果当前有其他任务使用信号量,将该任务放入等待 队列 Block(CALLER); /修改该任务的状态为等待态(阻塞任务) end SignalB(S): /释放信号量 if S.L queue is empty; /如果等待序列为空,没有其他任务等待使用该共享资源 then S.value=1; /释放信号量 else begin Remove(S.L,id); /如果有其他任务等待使用该共享资源,则从等待队列中 将该任务移除 wakeup(id); /将该任务的状态改为就绪态(唤醒任务) end 用信号量实现任务间的互斥 var mutex:Shared Semaphore; begin mutex:=1; parbegin P1:…… P2:…… …… Pi:repeat Wait(mutex); “进程Pi的临界代码段”; Signal(mutex); forever Pn:…… parend end 互斥信号量状态图 各种互斥机制比较 二值信号量 计数信号量 计数信号量 计数(一般)信号量同步原语 Wait(S): S.value:= S.value-1; /有新任务来使用共享资源将信号量的值减1 if S.value0 /如果信号量的值为负,表示共享资源已经分配完毕 then begin Insert(CALLER,S.L);/将该任务插入等待序列 Block(CALLER); /将该任务状态改为等待态(阻塞任务) end Signal(S): S.value:= S.value+1; /任务使用完共享资源,将信号量的值加1,释放 一个信号量 if S.value=0 /如果信号量为负,表示仍有等待该资源的任务被 阻塞 then begin Remove(S.L,id); /将等待队列中的一个任务从队列中移除 wakeup(id); /将该任务的状态修改为就绪态,唤醒任务 end S的绝对值表示在该信号量列表中已阻塞的任务数目 计数信号量 计数信号量 Var E,F:

文档评论(0)

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

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

1亿VIP精品文档

相关文档