zoukankan      html  css  js  c++  java
  • 【操作系统】优先级反转及解决方案

    优先级反转描述:

    有3个任务,其优先级由高到低为A > B > C;其中A、C中都有对紧缺资源S的访问;由信号量控制,互斥访问紧缺资源。

    场景如下:A、B挂起等待相应事件的发生;C运行,使用资源S,锁信号量;A等待事件发生,转为就绪状态,由于优先级高于C,转运行状态;当A使用资源S时,由于其正在被C使用,所有A挂起,C开始运行;B等待事件发生,转为就绪状态,由于优先级高于C,转运行状态;B运行完毕,C开始运行;C释放资源S后,A才开始运行。

    从以上可以看出,优先级低的任务B先于优先级高的任务A运行,也即高优先级的任务被较低优先级的任务诸塞,优先级发生了反转,实时性难以得到保证。

    -------

    解决方案:

    a)优先级天花板

    描述:当任务C使用资源S时,将任务C的优先级提高到能访问资源S的最高优先级,即将C的优先级提高到资源S的优先级天花板。

    优点:简单、易行

    缺点:每次使用紧缺资源都需要改变其优先级,然后还要改回来,这无形中浪费了很多CPU时间

    b)优先级继承

    描述:任务C访问资源S,此时任务A也访问资源S,发现有人已经在使用资源S,则比较两者的优先级,发现A的优先级更高,则让C继承A的优先级,即将C的优先级提高到A的相同级别,如此类推,在C释放资源后,需要把其优先级改回来。

    优点:可以根据实际情况改变优先级,不会浪费太多的CPU时间

    缺点:有判断,过程较复杂,而且操作系统需要支持相同优先级(硬伤)

    c)优先级天花板的改进

    描述:任务C访问资源S,此时任务A也访问资源S,发现有人已经在使用资源S,则比较两者的优先级,发现A的优先级更高,则提升C的优先级至天花板,在C释放资源后,需要把其优先级改回来。

    -------------

    思考:

    b)与c)的区别:打击范围不同,b打击范围小,c打击范围大

    参考:《uC/OS优先级反转及解决》 http://blog.csdn.net/sunnybeike/article/details/6965210

  • 相关阅读:
    Java Web 047: 处理商品列表的查询
    Java Web 047:开发商品列表的模板页
    Java Web 046: 处理登录成功后的跳转
    Java Web 045: 处理登录请求
    Java Web 044: 处理注册响应
    Java Web 043: 处理注册请求
    Java Web 042: 创建UserDao控制user的相关数据库操作
    Java Web 041: 创建数据模型和模拟数据库
    Java Web 03: MVC分层架构 / JavaEE分层架构 (图解)
    Java Web 02: 单例模式
  • 原文地址:https://www.cnblogs.com/caixu/p/2682443.html
Copyright © 2011-2022 走看看