首页 > 其他分享 >优先级翻转问题(转)

优先级翻转问题(转)

时间:2024-08-04 16:39:40浏览次数:5  
标签:信号量 优先级 问题 任务 等待 CPU 翻转

前面提到了二值信号量的概念,但是在多个不同优先级的任务想要同时Take和Give二值信号量时,往往会因为被占用的问题,使得高优先级任务的执行顺序与低优先级任务一样。这种情况被称为优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。

(1) 任务H和任务M处于挂起状态,等待某一事件的发生,任务 L正在运行。
(2) 某一时刻任务 L想要访问共享资源,在此之前它必须先获得对应该资源的信号量。
(3) 任务 L获得信号量并开始使用该共享资源。
(4) 由于任务H优先级高,它等待的事件发生后便剥夺了任务 L的CPU使用权。
(5) 任务H开始运行。
(6) 任务H运行过程中也要使用任务 L正在使用着的资源,由于该资源的信号量还被任务L占用着,任务H只能进入挂起状态,等待任务 L释放该信号量。
(7) 任务 L继续运行。
(8) 由于任务M的优先级高于任务 L,当任务M等待的事件发生后,任务M剥夺了任务L的CPU 使用权。
(9) 任务M处理该处理的事。
(10) 任务M执行完毕后,将 CPU使用权归还给任务L。
(11) 任务 L继续运行。
(12) 最终任务 L完成所有的工作并释放了信号量,到此为止,由于实时内核知道有个高优先级的任务在等待这个信号量,故内核做任务切换。
(13) 任务H得到该信号量并接着运行。

在这种情况下,任务H的优先级实际上降到了任务L的优先级水平。因为任务H要一直等待直到任务 L释放其占用的那个共享资源。由于任务M剥夺了任务 L的CPU 使用权,使得任务H的情况更加恶化,这样就相当于任务M的优先级高于任务H,导致优先级翻转。

原文链接:https://blog.csdn.net/qq_39397153/article/details/125040287

标签:信号量,优先级,问题,任务,等待,CPU,翻转
From: https://www.cnblogs.com/xddisme/p/18341927

相关文章

  • 蒙特卡洛模拟(3)————求解有约束的非线性规划问题
    目录前言一、问题提出二、蒙特卡罗模拟的大体思路1.求出每个变量的大致范围2.生成随机数进行模拟试验三、手动计算每个变量的大致范围1.处理等式问题————进行降维2.处理不等式问题————得到大致范围(1)先处理简单的约束,得到变量范围(2)对复杂的约束进行放缩,得到变量范围四、代......
  • 使用 django 的 EmailMessage 发送波斯语电子邮件时出现问题
    我对django相当陌生,并尝试使用django.core.mail.EmailMessage发送包含波斯语字母的电子邮件。这是我的代码:fromdjango.core.mailimportEmailMessagefromdjango.confimportsettingsdefcustom_sender(subject:str,body:str,recipient_list:list[str],......
  • 【嵌入式之RTOS】什么是优先级反转
            优先级反转(PriorityInversion)是实时操作系统(RTOS)中一个常见的问题,特别是在采用优先级调度算法的系统中。这个问题通常发生在多个任务共享一个资源(如一个互斥锁或信号量)时,低优先级的任务意外地阻塞了高优先级的任务。什么是优先级反转?        想象......
  • aiohttp 存在超时问题,但请求没有超时问题
    我正在尝试使用两种不同的方法在Python中获取网页:requests和aiohttprequests方法工作正常,但aiohttp方法会导致超时。代码如下:importasyncioimportaiohttpimportrequestsheaders={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x6......
  • 蒙特卡洛模拟(2)————排队问题
    目录一、基础知识补充1.normrnd(MU,SIGMA)2.exprnd(M)3.tic与toc二、问题提出三、模型建立1.引入符号2.引入符号后,我们可以由题目得到一些递推关系,由这个递推关系做出一个循环进行我们的模拟四、第一问代码求解1.字符初始化2.带入模型进行循环3.输出结果五、第二问代码求解一、基......
  • RS485问题记录
    RS485正确调用方式 HAL_UART_Receive_IT(&huart3,RxBuffer,MAX_RX_BUFFER_SIZE); HAL_UARTEx_ReceiveToIdle_IT(&huart3,RxBuffer,MAX_RX_BUFFER_SIZE);//两次激活while(1){ HAL_UARTEx_ReceiveToIdle_IT(&huart3,RxBuffer,MAX_RX_BUFFER_SIZE);//重复激活 i......
  • 利用琼斯矩阵求解一般偏振问题
           ......
  • P2763 试题库问题
    原题链接题解很抽象的建模,我一开始想的是韦恩图,然后韦恩图里选取若干个点,还要保证每个图都能选上,然后把韦恩图抽象成点,图中的点抽象成待匹配的点,然后就是二分图匹配了code#include<bits/stdc++.h>#definelllonglong#definelblongdouble#definelowbit(x)((x)&(-x)......
  • 优案评析(昆明五华区法院)--保修期间发包人主张维修费用的前提是质量问题的责任在于承包
    (2019)云0102民初2541号  云南云安房地产开发有限公司诉昆明中策装饰(集团)有限公司装饰装修合同纠纷案裁判要旨违约责任的归责原则是过错责任,守约方必须也仅需证明存在损害结果。本案建设工程发包人欲追究承包人的工程质量保修责任,但在未作证据保全的情况下自行修复,损害结果的事......
  • mysql 慢查询 常时间 执行 问题排查
    1、metadatalock导致大量线程卡住  步骤1:showfullprocesslist命令查看线程状态 步骤2:performance_schema.events_statements_current中的未提交事务 步骤3:   查询正在执行的事务SELECT*FROMinformation_schema.innodb_trx; inn......