ucos之互斥信号量及优先级反转
在ucos常使用共享资源来作为任务之间的通信方式,其中有:消息队列,信号量,邮箱,事件。信号量中又分二值信号,多值信号,互斥信号。这次主要讲二值信号与互斥信号之间区别和使用。
首先了解一下ucos的任务要得到运行需要满足什么条件:进入就绪状态、优先级最高且得到信号量(需要信号量的任务)。
二值信号量作用:任务通过OSSemPend() 函数获得一个信号量,如果信号量有效(不为0),则任务继续运行,否则进入等待状态(挂起)。
互斥信号量作用:任务通过OSMutexPend()函数获得互斥信号量,如果互斥信号有效(不为0)则继续运行,否则进入等待。
那么他们之间区别在哪?
假设有三个任务A,B,C,他们的优先级分别为10、20、30,而任务A和C共同使用一个二值信号量。现在任务C得到信号进入运行,这时候任务B也进入就绪,由于B优先级比C高,就会剥夺任务C的CPU控制权,如果这时候任务A需要运行,可是因为信号量被任务C获得还没释放被任务B挂起,所以A得不到运行,这样即使任务A优先级比B高也无法得到运行,这就是优先级反转。如果任务A是比较紧急的任务,那么就会影响实时性。
为了解决二值信号带来的这个问题,于是出现了互斥信号,它的机制就是:当一个优先级较低的任务获得了一个互斥信号时,系统会把这个任务的优先级提高到最高,让它不被抢占,这样这个任务就会更快运行完而释放互斥信号提交给更高的任务使用,之后这个任务的优先级就会回到原来的等级。还是A、B、C举例,任务C首先得到一个互斥信号,这时系统会把C的优先级提高到最高,这样就不会被B抢占,从而尽快运行完释放信号,之后回到原来优先级。期间即使A任务需要运行,也能够尽快得到信号运行。
不过也看出互斥信号只是缓解了优先级反转问题而已,如果任务A很紧急,也还是要等任务C运行完才可以运行,还是没能很好解决实时性的问题。
ucos之互斥信号量及优先级反转的更多相关文章
- ucos互斥信号量解决优先级反转问题
		
在可剥夺性的内核中,当任务以独占方式使用共享资源的时候,会出现低优先级任务高于高优先级任务运行的情况,这种情况叫做优先级反转,对于实时操作系统而言,这是一场灾难,下面我们来说说优先级反转的典型环境. ...
 - 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
		
RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_se ...
 - ucos事件邮箱信号量队列详解
		
Ucos的事件分为时钟,信号量,互斥性信号量,消息队列,以及消息邮箱 首先说信号量 信号量在ucos中的类型定义为OS_EVENT_TYPE_SEM,在任务控制块ecb中,主要是用到的是信号量计数器O ...
 - 【iCore4 双核心板_uC/OS-II】例程七:互斥信号量
		
一.实验说明: 在介绍互斥信号量前,我们先简单地描述一下什么是优先级反转.使用实时内核心,优先级反转问题是实时系统中出现得最多的问题.假设任务H优先级高于任务M,任务M优先级高于任务L.任务H和任务M ...
 - UCOSIII互斥信号量
		
互斥信号量可以解决优先级反转问题 优化后现象 优化方法:L和H等待同一个信号量的时候,将L任务优先级提至H相同优先级 实验举例 void start_task(void *p_arg) { OS_CR ...
 - UCOSIII优先级反转
		
反转现象 任务优先级:H>M>L 绿色部分:任务占用共享资源 理想状态:7释放信号量后,最高优先级H任务抢占CPU 反转原因:H和L等待同一个信号量,H的任务优先级被降至和L相同优先级,此 ...
 - 【原创】xenomai内核解析--同步互斥机制(一)--优先级倒置
		
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 一.xenomai 资源管理简要 二.优先级倒 ...
 - 【freertos】011-信号量、互斥量及优先级继承机制源码分析
		
目录 前言 11.1 任务同步 11.2 信号量概念 11.3 二值信号量 11.3.1 二值信号量概念 11.3.2 优先级翻转 11.3.3 二值信号量运作机制 11.4 计数信号量 11.4.1 ...
 - Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
		
死锁(deadlock) 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进 ...
 
随机推荐
- centos6.5-VMware虚拟机-双网卡绑定
			
1 添加多张网卡(生产环境中有多个卡槽,可用ifconfig查看) 2 编辑两张虚拟机的网卡和物理机的连接方式,这里两张都使用NAT即可 3 打开虚拟机查看所有的网卡(网络接口),修改配置网卡配置文件 ...
 - [WC2006]水管局长
			
原题链接 前言 搞不懂为什么要写LCT,搞不懂为什么要加强数据.像这道题是用父亲表示法来做的.虽然复杂度不是log,但是现在下面这份代码却是无论从空间,还是代码量,还是时间都是优秀不止一点. 而且这样 ...
 - asp.net  按钮执行前后台方法——前台弹出提示信息,确认后继续执行后台方法,取消则不执行后台方法
			
我们做一个测试的web页面,只需要一个button+一个label就ok啦,通过button按钮的后台事件修改label的text属性值来测试是否执行了后台事件里的代码 前台 写一个js方法: < ...
 - layui layui.open弹窗后按enter键不停弹窗问题的解决
			
问题描述:layui.open弹窗后,点击enter键会不停弹窗,背景颜色变得越来越深 解决办法:1.使用回调函数让按钮失去焦点 var info = layer.open({ type: 2 , t ...
 - python之format函数
			
自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和 ...
 - .NET MVC  表主外键关系    JSON  无限循环  方案二(推荐)
			
public class JsonResultObject:JsonResult { private Newtonsoft.Json.JsonSerializerSettings Settings { ...
 - Azure CosmosDB (10) Azure Cosmos DB体系结构
			
<Windows Azure Platform 系列文章目录> Azure Cosmos DB的体系结构分为以下几个部分: 1.Database Accounts Database Acc ...
 - SqlServer高版本数据备份还原到低版本(转)
			
原文地址:https://www.jb51.net/article/96454.htm 想要将Sqlserver2014高版本备份的数据还原到低版本SqlServer2008R2上去,但是这在SqlS ...
 - CentOS 6 update curl
			
touch /etc/yum.repos.d/city-fan.repo vi /etc/yum.repos.d/city-fan.repo add the following: [CityFan] ...
 - 服务器变更IP地址后SSH链接失败的解决办法
			
客户端未变,服务器端变更IP地址,导致客户端链接失败,这种情况提示如下: 原因是服务器端更改IP地址后,秘钥也需更新 在客户端输入以下格式的命令: ssh-keygen-f"/home/用户 ...