FreeRTOS优先级翻转
优先级翻转
优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行
优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。
在使用二值信号量的时候,经常会遇到优先级翻转的问题。
举例说明

优先级翻转示意图,如上图所示,定义:任务H为优先级最高的任务,任务L为优先级中最低的任务,任务M为优先级在任务H和任务L之间的任务。
也就是说任务优先级:任务H>任务M>任务L
(1)任务H和任务M为阻塞状态,等待某一事件发生,此时任务L正在运行
(2)此时任务L要访问共享资源,因此需要获取信号量
(3)任务L成功获取信号量,并且此时信号量已无资源,任务L开始访问共享资源
(4)此时任务H就绪,抢占任务L运行
(5)任务H开始运行
(6)此时任务H要访问共享资源,因此需要获取信号量,但信号量已无资源(注:这里信号量为二值信号量),因此任务H阻塞等待信号量资源
(7)任务L继续运行
(8)此时任务M就绪,抢占任务L运行
(9)任务M正在运行
(10)任务M运行完毕,继续阻塞
(11)任务L继续运行
(12)此时任务L对共享资源的访问操作完成,释放信号量,虽有任务H因成功获取信号量,解除阻塞并抢占任务L运行
(13)任务H得以运行
从上面的优先级翻转的示例中,可以看出,任务H为优先级最高的任务,因此任务H执行的操作需要有较高的实时性,但是由于优先级翻转的问题,导致了任务H需要等到任务L释放信号量才能够运行,并且,任务L还会被其他介于任务H与任务L任务优先级之间的任务M抢占,因此任务H还需等待任务M运行完毕,这显然不符合任务H需要的高实时性的要求。
个人总结
任务优先级翻转在实时操作系统中是不允许出现的,使用互斥量的优先级继承可以解决优先级翻转的问题,但是这里只是能够降低优先级翻转带来的影响,而不能完全消除优先级翻转带来的问题,通俗的说,虽然低优先级任务优先级提高了,但是还是要等优先级低的任务执行释放操作,高优先级任务才可以得以运行,这里只是解决了介于低优先级和高优先级之间中优先级任务带来的问题。比如没有引入互斥量,高优先级需要等待L+M任务运行的时间,引入之后只有任务L运行的时间。
一句话:优先级翻转可以减轻,但不能完全消除。
相关文章:

FreeRTOS优先级翻转
优先级翻转优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未…...

服务器部署—部署springboot之Linux服务器安装jdk和tomcat【建议收藏】
我是用的xshell连接的云服务器,今天想在服务器上面部署一个前后端分离【springbootvue】项目,打开我的云服务器才发现,过期了,然后又买了一个,里面环境啥都没有,正好出一期教程,方便大家也方便自…...
golang项目----家庭收支记账软件
家庭收支记账软件实现基本功能(先使用面向过程,后面改成面向对象)项目代码实现改进面向过程源码面向对象源码utils包中main包中实现基本功能(先使用面向过程,后面改成面向对象) 编写文件TestMyAccount.go完成基本功能 功能一:先完成可以显示…...
中国LNG市场投资机会研究
中国LNG市场投资机会研究中国LNG市场是一个具有巨大潜力和发展机遇的市场,尤其是在政府大力推动清洁能源发展的背景下,LNG市场投资机会正在不断扩大。首先,政府大力支持LNG市场的发展。政府实施的“十三五”规划将LNG作为清洁能源的重要来源&…...

Elasticsearch:索引数据是如何完成的
在我在之前的文章 “Elasticsearch:彻底理解 Elasticsearch 数据操作” 文章中,我详细地描述了如何索引数据到 Elasticsearch 中。在今天的文章中,我想更进一步来描述这个流程。 Elasticsearch 是一个非常强大和灵活的分布式数据系统&#x…...

处理器管理
处理器状态处理器管理是操作系统中重要组成部分,负责管理、调度和分配计算机系统的重要资源——处理器,并控制程序执行由于处理器管理是操作系统最核心的部分,无论是应用程序还是系统程序,最终都要在处理器上执行以实现其功能&…...
跟着我从零开始入门FPGA(一周入门系列)第五
5、同步和异步设计 前面已有铺垫,同步就是与时钟同步。 同步就是走正步,一二一,该迈哪个脚就迈那个脚,跑的快的要等着跑的慢的。 异步就是搞赛跑,各显神通,尽最大力量去跑,谁跑得快,…...

【第42天】Arrays.sort 与 Collections.sort 应用 | 整形数组与集合的排序
本文已收录于专栏🌸《Java入门一百练》🌸学习指引序、专栏前言一.sort函数二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析二、【例题1】1、题目描述2、解题思路3、模板代码4、代码解析三、推荐专栏序、专栏前言 本专栏开启,目的…...
LeetCode第334场周赛
2023.2.26LeetCode第334场周赛 A. 左右元素和的差值 思路 前缀和后缀和 代码 class Solution { public:vector<int> leftRigthDifference(vector<int>& nums) {int n nums.size();vector<int> l(n), r(n), ans(n);for (int i 1; i < n; i )l[…...
基于深度学习的三维重建网络PatchMatchNet(三):PatchMatchNet配置及代码主要运行流程
目录 1.PatchMatchNet环境配置 2. PatchMatchNet的大致执行流程(eval.py) 2.1 深度图的保存...
【一天一门编程语言】设计一门编程语言,给出基础语法代码示例,SDK设计。
文章目录设计一门编程语言,给出基础语法代码示例,SDK设计。一、编程语言设计1.1 语言名称1.2 数据类型1.3 基本运算符1.4 控制语句二、SDK设计2.1 基础库2.2 第三方库三、例子用 Mango 这门语言实现斐波那契数列。基础语法代码示例SDK 设计使用 Mango 语…...
ubuntu 下 python 安装 venv
ubuntu 下 python 安装 venv1.首先,确保您的系统已安装 Python3 和 pip3,如果没有安装,可以使用以下命令安装:2. 接着,安装 virtualenv 包,使用以下命令:3.创建 Python 虚拟环境,使用…...

HTML#1快速入门
一. 简介HTML是一门语言, 所有的网页都是用HTML编写的HTML(Hyper Text Markup Language): 超文本(超越了文本限制,除了文字信息还可以定义图片,音频,视频等)标记语言(有标签构成的语言)W3C标准: 网页主要由三部分组成(1) 结构: HTML(2) 表现: CSS(3) 行为: JavaScript二. 快速入…...

【MySQL】事务隔离级别是怎么实现的?
事务隔离级别是怎么实现的? 四种隔离级别具体的实现方式 对于「读未提交」:直接读取最新的数据就好。对于「串行化」:通过加读写锁的方式来避免并行访问。对于「读提交」和「可重复读」:通过 Read View 来实现,主要区…...

JSP网上书店系统用myeclipse定制开发mysql数据库B/S模式java编程计算机网页
一、源码特点 JSP 网上书店系统 是一套完善的系统源码,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。研究的基本内容是基于网上书店系 统,使用JSP作为页面开发工具。Web服务的运…...

配置 Haproxy 负载均衡群集
配置 haproxy 负载均衡群集 🏆荣誉认证:51CTO博客专家博主、TOP红人、明日之星;阿里云开发者社区专家博主、技术博主、星级博主。 💻微信公众号:微笑的段嘉许 📌本文由微笑的段嘉许原创! &#…...

计算机网络笔记 | 第一章:计算机网络概述(1.1-1.4小节知识点整理)
从专栏将讲述有关于计算机网络相关知识点,如果有想学习Java的小伙伴可以点击下方连接查看专栏,还有JavaEE部分 本专栏地址(持续更新中):🔥计算机网络 MyBatis:✍️MyBatis Java入门篇࿱…...
Flutter3引用原生播放器-Android篇
接上篇:Flutter3引用原生播放器-IOS(Swift)篇 安卓端原生播放器的接入思路与ios基本一致,所以本篇就不废话了,直接上代码: 创建插件VideoViewPlugin实现FlutterPlugin: package io.flutter.plugins.videoplayer;imp…...

SerenityOS 操作系统类 Unix 操作系统
创建于2018年的SerenityOS是一个类似Unix的操作系统,但是带有图形化界面,适合X86台式计算机,,其界面类似90 年代的Win98/NT。几乎由一个人完成额操作系统。这几天其Web浏览器通过了 Acid3 浏览器。 Kernel features 具有抢占式多…...

Bean作用域和生命周期
目录 Bean作用域的例子 作用域定义 Bean的六种作用域 设置作用域 Spring的执行过程和Bean的生命周期 Spring的主要执行流程 Bean的生命周期 在上篇博客中我们使用Spring存储和获取Bean,因此Bean是Spring中最重要的资源,今天这篇博客就深入了解Bean对象 Bean作用域的例子 …...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...