嵌入式实时操作系统12——信号,互斥,消息_什么是按键任务

任务间信息交互的动态图:
请添加图片描述

1.任务间信息交互是什么

操作系统中每一个任务都是一个独立自主的小程序。任务的典型形式如下:
在这里插入图片描述
从形式上看任务可以在自己的资源空间中独立运行,事实上只有小部分任务完全独立于其它任务运行,大部分任务都是需要相互之间进行耦合,共同实现一个设计需求

这就和人类社会一样,大部分人和他身边的人都有着千丝万缕的联系,并生活在这个关系网中,只有极少数隐士选择与世人隔离。
在这里插入图片描述
任务和任务之间有哪些联系呢?我们举例说明一下:
1、按键任务检测到按键被按下后,需要通知显示任务切换显示界面。
在这里插入图片描述
2、传感器读取任务更新测量数据后需要进行数据打印,此时任务需要判断打印信息任务是否被占用,如果打印信息任务未被占用则进行数据打印。
在这里插入图片描述
3、WIFI任务收到数据后,需要向显示任务发送数据,显示任务根据数据刷新显示界面。
在这里插入图片描述
上面涉及到的这些都属于任务间信息交互,不同的操作系统中有着不同的任务间信息交互方式,常用的任务间信息交互分为以下3类:

1、同步
2、互斥
3、收发消息

2.同步

为了实现多任务之间的合作运行,需要在任务间建立一些关联让多任务之间按照先后顺序执行,这种关联机制叫做同步

这种机制就像我们生活中交通红绿信号灯。汽车停在红绿信号灯路口,当红绿信号灯变成绿灯时,汽车启动并通过路口。这种行为逻辑并不是红绿信号灯亮的时候通过光电效应触发汽车的油门让汽车启动,而是因为司机看到了红绿信号灯变为绿灯,司机踩下油门启动汽车通过路口。司机看到红绿信号灯变为绿灯,随后踩下油门这一组动作就是同步
在这里插入图片描述
通过同步机制可以实现多个任务合作按照顺序运行,操作系统中通常使用信号量实现任务同步。

例如任务A需要等待信号甲再执行一个特定操作,当信号甲为“无效”时任务A进入休眠状态,操作系统让任务B运行,假设任务A优先级高于任务B,当任务B将信号甲设置为“有效”的那一瞬间,操作系统会暂停任务B运行任务A,使得任务A的特定动作得以执行。机制运行图如下:
在这里插入图片描述

3.互斥

一些情况下,某些资源在“同一时间”只能被一个任务使用,当这些资源被某个任务正在使用时,其它准备使用这些资源的任务,只能等待资源使用者放弃使用权后才能使用该资源,这种机制叫互斥

互斥机制就像我们在家里使用卫生间一样,每天早上一家人都起床了,某个人占用了卫生间,其他人就只能等待该使用者离开卫生间后,才能使用卫生间。这种情况由时候会非常痛苦,所以建议大家好好学习提高收入,买个有多卫的大房子。
在这里插入图片描述
互斥机制应用在同一个资源被多个任务操作的情形中,互斥机制有效的解决了多个任务共享资源而产生的竞争问题,使得共享资源能够依次让每个任务“独享”这个共享资源。互斥机制有一个重要的特点就是:先用先得,低优先级任务先使用时,高优先级任务希望使用也必须等待。

例如现在有两个优先级相同的任务,操作系统采取时间片轮询的方法调度。我们需要用这两个任务以9600的波特率输出信息,任务A输出“i love rtos”,任务B输出“i love money”。由于两个任务共享了一个串口设备出现了竞争现象,导致实际输出了“i lovi lovee monemnoeyy”这串错误的信息。

使用互斥机制就可以避免这种情况,任务A和任务B都能在它们使用共享资源的时候“独享”这个共享资源,而不被人打扰。互斥机制运行图如下:
在这里插入图片描述

4.收发消息

在使用同步和互斥机制时,任务只需要关注同步和互斥是否有效,而有些情况下任务不仅需要有同步的效果,还要关注信息机制本身携带的数据,这时候就需要用到消息队列机制。消息队列可以实现多个任务之间的数据信息通信。

消息队列机制就像我们正在回家的路上,老妈给你发了一个消息“家里酱油用完了,回来的时候顺路买瓶酱油”,这时候你需要按照要求先去超市买一瓶酱油,然后在回家,打酱油就这样被完成了。
在这里插入图片描述
消息队列机制可以让多个任务之间进行丰富的数据交互,可以让多个任务组合成一个功能丰富的系统。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值