Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解FreeRTOS:嵌入式多任务系统的优先级继承和优先级天花板(理论篇—10)

详解FreeRTOS:嵌入式多任务系统的优先级继承和优先级天花板(理论篇—10)

作者头像
不脱发的程序猿
发布于 2023-07-05 02:09:36
发布于 2023-07-05 02:09:36
6460
举报


优先级反转问题的核心原因在于共享资源的访问规则,即共享资源只能被一个任务占用,被占用后其他任务不能强制使用这个资源。在优先级反转问题上,高优先级任务被低优先级任务阻塞是必定的,但被中优先级任务阻塞则是很无奈的。为了避免因为中优先级任务挟持低优先级任务从而阻塞高优先级任务的现象,可以采用一些必要的算法。

有两种经典的防止优先级反转的算法:

  • 优先级继承策略(Priority inheritance):当一个任务占有了资源并且随后阻塞了其他申请该资源的任务时,该任务将临时改变它的优先级为所有申请该资源的任务中的最高优先级,并以这个临时优先级在临界区执行。当任务释放资源后,则恢复它原有的优先级。从行为上看,占有资源的任务的优先级将是“水涨船高"式的多次改变,因为它的优先级最高,所以它不会被曾经比它优先级高的那些任务抢占。操作系统从优先级角度安排它尽快执行,尽快释放资源,但是这样做操作系统却牺牲了中等优先级任务的调度机会;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入解析互斥锁(Mutex):并发编程中的关键同步机制
在计算机科学领域,随着多线程和多进程程序的广泛应用,如何有效地管理对共享资源的访问成为一个核心问题。互斥锁(Mutex,mutual exclusion的缩写)作为一种基本的同步原语,旨在确保在任意时刻,只有一个线程或进程能够访问特定的共享资源,从而防止数据竞争和不一致性。
编程小妖女
2025/06/08
1370
深入解析互斥锁(Mutex):并发编程中的关键同步机制
大疆嵌入式一面问题集合
答:栈溢出发生的时候,栈顶指针(SP - Stack Pointer)一定会超出栈的范围,所以也可以在发生线程切换的时候,检测SP指向的地址是否超过了栈的内存限定。
Adam_chen
2022/09/01
1.1K0
线程优先级翻转,如何避免?
概述 最近在开发过程中,遇到一个问题线程优先级翻转的问题。那什么原因导致优先级翻转呢? 在RTOS开发中,优先级翻转问题也是值得我们去关注留意的。避免代码瘫痪。 什么是优先级翻转 所谓的优先级翻转问题:即当一个高优先级线程通过信号量机制访问共享资源时,该型号量以被一个低优先级线程占有,而这个低优先级的任务在访问共享资源时可能又被一个中等优先级任务抢占。从上面的描述,高优先级线程被许多较低优先级的任务阻塞,导致高优先级的实时性得不到保证。 举例:有三个线程分别为:A、B、C。优先级A > B > C,线程A和
Rice加饭
2022/05/10
1.3K0
线程优先级翻转,如何避免?
Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
死锁(deadlock) 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件。 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。 2)请求和保持条
三丰SanFeng
2018/01/16
2.9K1
Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
从零开始学习UCOSII操作系统15–总结篇[通俗易懂]
前言:在大学的时候,我们班级上面都有很多人觉得学习UCOSII(包括UCOSIII)是没什么厉害的,因为很多人都喜欢去学习Linux操作系统,但是,但是,真实的对整个UCOSII操作系统进行学习,我可以保证,如果你是基于源码级别的阅读的话,绝对是不简单的。仅仅是调用几个API的话,是永远用不好UCOSII的操作系统的。还有你真正学通了UCOSII操作系统的话,那么你对Linux操作系统的内核也不会有太大的难度。
全栈程序员站长
2022/08/18
1.4K0
从零开始学习UCOSII操作系统15–总结篇[通俗易懂]
OSEK OS介绍
OSEK OS描述了一种应用于汽车的实时操作系统概念。不同的相似类(Conformance classes),不同的调度机制和配置功能使得OSEK OS适用于广泛的应用程序和硬件。
xbai921031
2024/03/04
9610
OSEK OS介绍
如何设计嵌入式系统?带你理解一个小型嵌入式操作系统的精髓
1 多任务机制 其实在单一CPU 的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用CPU,所以本质上还是单任务的。但由于CPU执行速度非常快,加上任务切换十分频繁并且切换的很快,所以我们感觉好像有很多任务同时在运行一样。这就是所谓的多任务机制。 实时系统的特征是延时可预测,能够在一个规定的时间内(通常是 ms 级别的)对某些信号做出反应。 2 任务的状态 任务有下面的特性:任务并不是随时都可以运行的,而一个已经运行的任务并不能保证一直占有 CPU 直到运行完。一般有就绪态,运行态,挂起态等
刘盼
2018/03/16
1.4K0
如何设计嵌入式系统?带你理解一个小型嵌入式操作系统的精髓
iOS 知识点回顾(二)
温故而知新 目录 Runtime 消息发送机制 isMemberOfClass 和 isKindOfClass Super 和 Self @synthesize/@dynamic RunLoop 线程和进程 什么是优先级反转自旋锁、互斥锁比较 1. Runtime OC是一门动态性比较强的编程语言,允许很多操作推迟到程序运行时再进行;OC的动态性就是由Runtime来支撑和实现的,Runtime是一套C语言的API,封装了很多动态性相关的函数;平时编写的OC代码,底层都是转换成了Runtime API
且行且珍惜_iOS
2020/01/02
4830
韦东山freeRTOS系列教程之【第七章】互斥量(mutex)
在多任务系统中,任务A正在使用某个资源,还没用完的情况下任务B也来使用的话,就可能导致问题。
韦东山
2021/12/08
1.5K0
韦东山freeRTOS系列教程之【第七章】互斥量(mutex)
嵌入式技术栈之RTOS的优先级翻转问题
优先级翻转就是一个中断优先级的任务在某种情况下,比高优先级任务优先执行,造成了一种任务优先级翻转的现象。
心跳包
2022/04/13
8310
嵌入式技术栈之RTOS的优先级翻转问题
Binder驱动优先级调整机制的技术解析与思考
​​在Android系统的内核设计中,Binder机制作为进程间通信(IPC)的核心框架,其调度策略直接影响着系统整体响应效率。
Yangsh888
2025/06/02
900
深入理解 Java 多线程核心知识:跳槽面试必备概念梳理线程的生命周期线程的优先级为什么要用线程池ThreadPoolExecutorExecutors
多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平时工作中如若使用不当会出现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关重要。
美的让人心动
2018/08/10
4050
深入理解 Java 多线程核心知识:跳槽面试必备概念梳理线程的生命周期线程的优先级为什么要用线程池ThreadPoolExecutorExecutors
无锁编程基础[通俗易懂]
活锁、死锁本质上是一样的,原因是在获取临界区资源时,并发多个进程/线程声明资源占用(加锁)的顺序不一致,死锁是加不上就死等,活锁是加不上就放开已获得的资源重试,其实单机场景活锁不太常见。举个例子资源A和B,进程P1和P2,
全栈程序员站长
2022/06/28
1.1K0
无锁编程基础[通俗易懂]
谈一谈 iOS 的锁
翻看目前关于 iOS 开发锁的文章,大部分都起源于 ibireme 的 《不再安全的 OSSpinLock》,我在看文章的时候有一些疑惑。这次主要想解决这些疑问:
猿_人类
2019/09/12
1.3K0
嵌入式系统架构浅谈:编程设计模式 (二)---嵌入并发和资源管理的设计模式
嵌入并发,意味着多线程或者多任务,基本上都是使用了系统,linux系统或RTOS系统之类的实现。RTOS系统里任务的调度主要有抢占式和时间片调度两种,具体的区别这里就不详细说明了。此篇章包含了并发的一些术语,如并发性,临界性,资源,死锁等的概念。最好是详细阅读RTOS系统的书籍。
杨源鑫
2021/01/26
1.3K0
Java面试集锦(一)之操作系统
进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
凯哥Java
2022/12/16
4540
Java面试集锦(一)之操作系统
混部之殇-论云原生资源隔离技术之CPU隔离(一)
蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友。目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作。 导语 混部,通常指在离线混部(也有离在线混部之说),意指通过将在线业务(通常为延迟敏感型高优先级任务)和离线任务(通常为 CPU 消耗型低优先级任务)同时混合部署在同一个节点上,以期提升节点的资源利用率。其中的关键难点在于底层资源隔离技术,严重依赖于 OS 内核,而现有的原生 Linux kernel 提供的资源隔离能力在面对混部需求时,再次显得有些捉襟见肘(
腾讯云原生
2021/05/10
3.4K1
FreeRTOS系列第6篇---FreeRTOS内核配置说明
FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS内核。
李肖遥
2020/06/24
3.2K0
FreeRTOS系列第6篇---FreeRTOS内核配置说明
操作系统中的进程调度策略有哪几种「建议收藏」
4、高响应比优先调度算法:在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为:
全栈程序员站长
2022/11/11
7180
操作系统中的进程调度策略有哪几种「建议收藏」
FreeRTOS学习笔记 | 基础知识体系梳理
我发现学习 RTOS 是学习 Linux 内核的好方法。大有弯道超车的可能。 1. 任务堆栈 1.1 任务栈大小确定 1.2 栈溢出检测机制 2. 任务状态 3. 任务优先级 3.1任务优先级说明 3.2 任务优先级分配方案 3.3 任务优先级与终端优先级的区别 4. 任务调度 4.1 调度器 5. 临界区、锁与系统时间 5.1 临界区与开关中断 5.2 锁 5.3 FreeRTOS 系统时钟节拍和时间管理 一、 单任务系统(裸机) 主要是采用超级循环系统(前后台系统),应用程序是一个无限的循环,循环中调用
刘盼
2022/09/20
3.8K0
FreeRTOS学习笔记 | 基础知识体系梳理
推荐阅读
相关推荐
深入解析互斥锁(Mutex):并发编程中的关键同步机制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档