- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第讲嵌入式OS内核任务通信与同步
第10讲任务通信与同步 主要内容 概述 信号灯 消息队列 事件 管道 概述 多任务系统中任务之间的关系 相互独立 仅竞争CPU资源 竞争除CPU外的其他资源(互斥) 同步 协调彼此运行的步调,保证协同运行的各个任务具有正确的执行次序 通信 彼此间传递数据或信息,以协同完成某项工作 进程同步的例子 只有当售票员关门之后司机才能启动车辆,只有司机停车之后售票员才能开车门。司机和售票员的行动需要一定的协调。同样地,两个进程之间有时也有这样的依赖关系,因此我们也要有一定的同步机制保证它们的执行次序 概述 任务能以以下方式与中断处理程序或其他任务进行同步或通信: 单向同步或通信:一个任务与另一个任务或一个ISR同步或通信。 双向同步或通信:两个任务相互同步或通信。双向同步不能在任务与ISR之间进行,因为ISR不能等待。 概述 在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括: 信号灯(semaphore),用于互斥与同步 事件(组)(event group),用于同步 异步信号(asynchronous signal),用于同步 邮箱(mailbox)、消息队列(message queue),用于消息通信 管道(pipe),提供非结构化数据交换和实现同步 概述 以下一些机制也可用于同步与通信(在单处理器或多处理器系统中): 全局变量 共享内存 套接字(Sockets) 远程过程调用(Remote Procedure Call) Linux下任务通信手段 信号 消息队列 管道 信号灯 套接字 共享存储段 第一节信号灯 信号灯的种类及用途 信号灯(Semaphore或称信号量)用于实现任务与任务之间、任务与中断处理程序之间的同步与互斥。 信号灯一般分为三种: 互斥信号灯 用互斥信号灯保护的代码区称作“临界区”,临界区代码通常用于对共享资源的访问。 互斥信号灯的值被初始化成1,表明目前没有任务进入“临界区”,但最多只有一个任务可以进入“临界区”。 第一个试图进入“临界区”的任务将成功获得互斥信号灯,而随后试图进入用同一信号灯保护的临界区的所有其他任务就必须等待。 当任务离开“临界区”时,它将释放信号灯并允许正在等待该信号灯的任务进入“临界区”。 互斥信号灯 共享资源可能是一段存储器空间、一个数据结构或I/O设备,也可能是被两个或多个并发任务共享的任何内容。 使用互斥信号灯可以实现对共享资源的串行访问,保证只有成功地获取互斥信号灯的任务才能够释放它。 互斥信号灯是一种特殊的二值信号灯,一般它支持所有权、递归访问、任务删除安全和一些避免优先级反转、饥饿、死锁等互斥所固有问题的协议。 互斥信号灯状态图 互斥信号灯 所有权:当一个任务通过获取互斥信号灯而将其锁定时,得到该互斥信号灯的所有权。相反,当一个任务释放信号灯时,失去对其的所有权。 当一个任务拥有互斥信号灯时,其他的任务不能再锁定或释放它,即任务要释放互斥信号灯,必须事前先获取该信号灯。 二值信号灯 二值信号灯主要用于任务与任务之间、任务与中断服务程序之间的同步 用于同步的二值信号灯初始值为0,表示同步事件尚未产生; 任务申请信号灯以等待该同步事件的发生; 另一个任务或ISR到达同步点时,释放信号灯(将其值设置为1)表示同步事件已发生,以唤醒等待的任务。 二值信号灯 计数信号灯 计数信号灯 计数信号灯 哲学家就餐问题 问题描述: ??一个房间内有5个哲学家,他们的生活就是思考和进食。房间里有一张圆桌,中间放着一盘通心粉(假定通心粉无限多)。桌子周围放有五把椅子,分别属于五位哲学家每两位哲学家之间有一把叉子,哲学家进食时必须同时使用左右两把叉子。 仅当哲学家的左右两支筷子都可用时,才允许他拿起筷子进餐。利用信号量的保护机制实现。通过信号量mutex对就餐之前的取左侧和右侧叉子的操作进行保护,使之成为一个原子操作,这样可以防止死锁的出现。 信号灯机制的主要数据结构 信号灯机制的主要数据结构 信号灯控制块:管理所有创建的信号灯,内核在系统运行时动态分配和回收信号灯控制块 互斥和二值信号灯控制块结构: Binary_Semaphore_Control_Block 计数信号灯控制结构Counting_Semaphore_Control_Block wait_queue 任务等待队列 attributes 计数信号灯属性 maximum_count 最大计数值 wait_discipline 任务等待信号灯的方式 count 当前计数值 典型的信号灯操作 创建信号灯 获取(申请)信号灯 释放信号灯 删除信号灯 清除信号灯的任务等待列表 获取有关信号灯的各种信息 第二节消
文档评论(0)