zoukankan      html  css  js  c++  java
  • ucos2.86的任务调度漏洞

      Ucos2.86版本有一个任务调度的漏洞,该漏洞在2.88之后的版本已经修改过来了,今天我们来看看这个漏洞, 漏洞在官方2.88的文档中如下

        这两个函数都是调度器函数,也就是说调度器有漏洞,但是看官方文档的说明,只有cortex-m3有这个bug,那我们就将2.88的代码和2.91的代码对比看看改变了哪些

    2.86中的代码是这样的:

    void  OS_Sched (void)

    {

    #if OS_CRITICAL_METHOD == 3                          

        OS_CPU_SR  cpu_sr = 0;

    #endif

        OS_ENTER_CRITICAL();

        if (OSIntNesting == 0) {                          

            if (OSLockNesting == 0) {                     

                OS_SchedNew();

                if (OSPrioHighRdy != OSPrioCur) {         

                    OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];

    #if OS_TASK_PROFILE_EN > 0

                    OSTCBHighRdy->OSTCBCtxSwCtr++;        

    #endif

                    OSCtxSwCtr++;                          

                    OS_TASK_SW();                         

                }

            }

        }

        OS_EXIT_CRITICAL();

    }

        到了2.91中,代码变成了这样

    void  OS_Sched (void)

    {

    #if OS_CRITICAL_METHOD == 3u                          

    OS_CPU_SR  cpu_sr = 0u;

    #endif

     

    OS_ENTER_CRITICAL();

    if (OSIntNesting == 0u) {                         

        if (OSLockNesting == 0u) {                    

           OS_SchedNew();

           OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];

           if (OSPrioHighRdy != OSPrioCur) {         

    #if OS_TASK_PROFILE_EN > 0u

               OSTCBHighRdy->OSTCBCtxSwCtr++;        

    #endif

               OSCtxSwCtr++;                        

               OS_TASK_SW();                        

           }

        }

    }

    OS_EXIT_CRITICAL();

    }

        通过比较我们发现,代码中仅仅做了一件事情,将

    OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];

        放在了比较任务优先级的动作的前面,那这样的修改是为什么呢?官方的解释是之前的代码会造成高优先级任务无法切换,低优先级长期占有cpu,最后导致整个程序只有空闲任务还在运行.

    至于造成这个中断的具体原因,我个人觉得这和cortex-m3的晚到中断和咬尾中断特性有关系,但是具体关系也还没想明白,直觉….容我三思  

  • 相关阅读:
    View Controller 生命周期的各个方法的用法
    IOS开发之Post 方式获取服务器数据
    委托代理
    Function
    SKPhysicsContactDelegate协议
    UITouch附加
    Remove Duplicates from Sorted Array II
    4Sum
    [Text Justification
    Count and Say
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4324922.html
Copyright © 2011-2022 走看看