【IoT美学】《物联网操作系统原理(LiteOS)》——任务同步
今天,我们分享的内容主要是物联网操作系统中的任务同步。
在正式阅读博文之前,按惯例,我们需要思考几个问题:
什么是任务同步?
什么是任务互斥?
同步和互斥的联系是什么?
如果你认真的思考了上面的问题,那么请你阅读下面的分享,也希望你能Get到属于自己的盲点知识!
一、任务同步背景
1.存在的问题
a.全局资源的共享存在潜在风险
b.操作系统很难对任务进行最优化分配
c.操作系统为多任务的同步和互斥提供了多种机制
互斥锁
读写锁
自旋锁
事件标识
信号量
2.任务同步
系统中某任务需要在时间上相互合作,共同完成一项应用
3.任务互斥
A任务在L临界区访问共享资源时,其他任务不能进入L临界区访问任何共享资源
4.同步与互斥的联系
同步是一种更为复杂的互斥
互斥是一种特殊的同步
二、临界区问题
1.临界资源
共享资源中,具有无法同时被多个任务访问的特性,且一次只允许一个任务调用的资源
2.临界区
访问临界资源的代码段
3.同步机制准则
空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区
忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待
有限等待:对请求访问的进程,因保证其在有限时间内进入临界区
让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待
三、同步方案
1.软件同步方案
a.在代码逻辑中控制对临界区的访问
b.实现方法
1).单标志法
缺陷:违背“空闲让进”原则,造成资源利用的不充分
2).双标志先检查法
优点:满足“空闲让进”原则
缺陷:违背“忙则等待”原则
3).双标志后检查法
优点:满足“忙则等待”原则
缺陷:违背“空闲让进”、“有限等待”原则
4).Peterson算法
优点:遵循“空闲让进“、”忙则等待“、”有限等待“原则
缺陷:违背”让权等待“原则
2.硬件同步方案
a.借用计算机提供的特殊硬件指令
b.实现方法
1).中断屏蔽法
缺陷:限制中断,使CPU失去交替执行任务的能力,严重降低CPU执行程序的效率
2).TestAndSet指令
可以将指定标志设置为真值
3).Swap指令
可以交换两个标志的内容
什么是信号量?
物联网操作系统中为什么要用到信号量?
互斥锁和信号量有关系吗?
四、信号量
1.机械信号机制
2.实例:铁路系统,铁轨被多辆列车共用时,需要特殊装置提供互斥机制。当轨道被使用时,该装置通过关闭特殊装置来阻止列车进入该轨道。反之,轨道未被使用时,则打开特殊装置让等待的列车继续 前进。
对比物联网操作系统
列车——任务
列车沿轨道行驶的过程——任务执行的过程
共用的铁轨——临界资源
3.荷兰 计算机科学家E.W.Dijkstra 1959年提出信号量在软件上实现互斥
4.分类
a.二进制信号量
Binary Semaphores
只能取0和1
b.计数型信号量
Counting Semaphores
取值由其制约机制的位数决定
5.信号量实现原理
通过计数机制实现任务之间的同步或临界资源的互斥访问
6.Huawei LiteOS中信号量的运作原理
usSemStat /**是否使用标志位**/
uwSemCount /**信号量索引号**/
usMaxSemCount /**信号量最大数**/
usSemID /**信号量当前计数**/
stSemList /**任务链表**/
注意:中断申请信号量必须使用无阻塞模式
7.互斥锁实现原理
a.互斥锁又称互斥信号量
b.一种特殊的二进制信号量,用于实现对共享资源的独占式处理
c.互斥锁状态
开锁(任务释放互斥锁)
闭锁(任务持有互斥锁)
d.当一个任务持有互斥锁时,其他任务将不能再对该互斥锁进行开锁或持有
8.Huawei LiteOS中互斥锁的运作原理
Huawei LiteOS互斥锁申请模式
a.无阻塞模式
b.永久阻塞模式
c.定时阻塞模式
物联网操作系统需要保证任务调度的实时性,尽量避免任务的长时间阻塞,在获得互斥锁后应尽快释放互斥锁
注意:互斥锁不能在中断服务程序中使用
9.优先级翻转问题
当使用信号量控制共享资源的访问时,可能会出现信号量被低优先级占有的情况,造成高优先级任务被低优先级任务阻塞,难以保证实时性
10.优先级继承
为了解决优先级翻转问题,而提出的优化机制
低优先级任务获取共享资源时,临时提升其优先级,使其能更快的执行并释放资源,在释放后恢复任务原先的优先级
优先级的提升幅度取决于等待该共享资源的最高优先级任务的优先级
基于你现有的知识定义事件和死锁?
死锁是否可以避免?如果可以避免,它的避免策略有哪些?
什么是物联网操作系统的原子操作?
五、事件
1.一种实现任务间通信的机制
2.事件通信只能是事件类型的通信,无数据传输
3.常用于实现任务之间的同步
4.事件内部结构
a.以Huawei LiteOS为例的事件,仅用于任务之间的同步,不能提供数据传输功能
b.多次向任务发送同一事件类型时,等效于只发送一次
c.Huawei LiteOS的事件集合与任务不相关联,任务可以通过创建事件控制块来实现对事件的触发和等待操作
5.事件读取模式
所有事件(LOS_WAITMODE_AND)
任一事件(LOS_WAITMODE_OR)
清除事件(LOS_WAITMODE_CLR)
6.事件唤醒任务
a.逻辑或:只要等待中的任意事件发生,任务即会被唤醒并执行
b.逻辑与:只有当所有等待的特定事件都发生后,任务才会被唤醒并继续执行
c.等待事件通过读事件函数实现,事件发生通过写事件函数实现
六、死锁
1.多任务环境中,错误处理任务同步可能会导致死锁
2.死锁原理
a.定义:一组相互竞争系统资源或进行通信间”永久“阻塞
b.产生死锁的4个必要条件
互斥条件:一次只有一个任务可以使用一个资源,其他任务不能访问已分配的资源
请求和保持条件:当一个任务继续等待其他任务时,继续占有已经分配的资源
不可抢占条件:不能强行抢占任务已占有的资源
循环等待条件:存在一个封闭的任务链,使得每个任务都在等待任务链中的其他任务
3.死锁预防
a.设计一种系统来排除发生死锁的可能性
b.分类
间接的死锁预防:防止前面列出的前3个必要条件中任何一个的发生
直接的死锁预防:防止循环等待的发生
c.破坏互斥条件
d.破坏请求和保持条件
e.破坏不可抢占条件
f.破坏循坏等待条件
4.死锁避免
在资源动态分配的过程中,防止系统进入不安全的状态,以避免发生死锁
安全状态:指系统能按某种任务推进顺序为每个任务分配其所需资源
银行家算法(最著名的死锁避免算法)
5.死锁检测
a.优势
尽早的检测死锁情况
算法相对比较简单
b.死锁解除的主要方法
资源剥夺法:挂起某些死锁任务,并抢占它的资源
撤销任务法:强制撤销部分甚至全部死锁任务并剥夺这些任务的资源
任务回退法:让一个或多个任务回退到足以回避死锁的地步,任务回退时自愿释放资源而不是被剥夺
七、原子操作
1.原子操作能确保对同一组数据的的”读取—修改—写入“操作在执行期间不被打断
2.物联网操作系统可以通过对ARMv6架构中的LDREX和STREX指令进行封装实现原子操作接口
- 点赞
- 收藏
- 关注作者
评论(0)