首页> 中国专利> 多任务操作系统中任务优先级反转的检测系统及方法

多任务操作系统中任务优先级反转的检测系统及方法

摘要

本发明涉及计算机多任务操作系统领域,其公开了一种在基于任务优先级调度的多任务操作系统中任务优先级反转的检测方法,快速定位任务优先级反转的相关信息;该方法包括:a.当需要检测操作系统中任务优先级反转时,优先级反转检测管理模块根据用户接口命令向操作系统注册钩子函数,并通知任务切换记录模块;b.任务切换记录模块对操作系统中任务切换信息进行记录,并接受优先级反转检测管理模块注册钩子函数的通知,在此后发生任务切换时,调用钩子函数;c.钩子函数检测当前被调度任务是否发生优先级反转以及发生优先级反转任务的相关信息。此外,本发明还公开了相应的检测系统,适用于计算机多任务操作系统。

著录项

  • 公开/公告号CN103106111A

    专利类型发明专利

  • 公开/公告日2013-05-15

    原文格式PDF

  • 申请/专利权人 迈普通信技术股份有限公司;

    申请/专利号CN201310034828.4

  • 发明设计人 何三波;许锋;

    申请日2013-01-30

  • 分类号G06F9/48(20060101);

  • 代理机构成都虹桥专利事务所(普通合伙);

  • 代理人刘世平

  • 地址 610041 四川省成都市高新区九兴大道16号迈普大厦

  • 入库时间 2024-02-19 18:33:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-01-27

    授权

    授权

  • 2013-06-12

    实质审查的生效 IPC(主分类):G06F9/48 申请日:20130130

    实质审查的生效

  • 2013-05-15

    公开

    公开

说明书

技术领域

本发明涉及计算机多任务操作系统领域,特别涉及一种在基于任务优先级调度的多任务 操作系统中任务优先级反转的检测系统及方法。

背景技术

在vxWorks多任务操作系统中,一个低优先级任务获取某个互斥信号量后,可能被高优 先级任务抢占,发生任务切换。为了解决该问题,当某个高优先级任务也欲获取该信号量时, 操作系统将把低优先级任务的优先级反转提高到与等待该信号量的任务中最高优先级相等, 从而保证占用互斥信号量的低优先级任务优先执行,以尽快释放资源。为了防止多个任务抢 占同一个资源而导致系统崩溃,在基于优先级调度的操作系统中,这样的任务优先级的反转 是必要的,但某些时候,操作系统中发生任务优先级反转后,可能会带来一些问题,例如某 些低优先级任务由于运行时间长,如果这类低优先级任务的优先级被反转,就不能被高优先 级任务抢占,导致高优先任务得不到及时调度。因此,我们有必要知道低优先级任务反转的 相关信息:低优先级任务获取了哪个互斥信号量后,该信号量阻塞了哪个高优先级任务导致 低优先级任务的优先级反转,对于某些优先级不能被反转的低优先级任务,在软件实现时需 要与高优先级任务尽量减少资源共享,避免低优先级任务的优先级被反转。

发明内容

本发明所要解决的技术问题是:提出一种多任务操作系统中任务优先级反转的检测系统 及方法,快速定位任务优先级反转的相关信息。

本发明解决上述技术问题所采用的方案是:多任务操作系统中任务优先级反转的检测系 统,包括:

任务切换记录模块,用于对操作系统中任务切换信息进行记录,并接受优先级反转检测 管理模块注册钩子函数的通知,在此后发生任务切换时,调用钩子函数;

优先级反转检测管理模块,用于根据用户接口命令向操作系统注册或注销钩子函数,在 注册钩子函数时通知任务切换记录模块,所述钩子函数在操作系统中任务发生切换时被调用, 以检测当前被调度任务是否发生优先级反转及发生优先级反转任务的相关信息。

进一步,所述任务切换记录模块对操作系统中任务切换信息进行记录包括:通过建立环 形队列记录操作系统中的任务切换轨迹,同时使用任务切换次数变量来记录任务切换次数; 所述环形队列中的元素对应操作系统中任务切换时被调度任务的任务控制块。

进一步,所述通过建立环形队列记录操作系统中的任务切换轨迹的方法是:在发生任务 切换时,依据任务切换变量记录的当前任务切换次数将当前被调度任务的任务控制块记录在 环形队列中对应的位置。

进一步,所述钩子函数检测当前被调度任务是否发生优先级反转的方法是:检测当前被 调度任务的任务控制块中运行优先级字段与配置优先级字段值是否相同,如果不同,则判定 该任务的优先级发生了反转。

进一步,所述发生优先级反转任务的相关信息包括:被反转任务获取的信号量及其阻塞 的高优先级任务。

此外,本发明还提出了一种多任务操作系统中任务优先级反转的检测方法,该方法包括 以下步骤:

a.当需要检测操作系统中任务优先级反转时,优先级反转检测管理模块根据用户接口命 令向操作系统注册钩子函数,并通知任务切换记录模块;

b.任务切换记录模块对操作系统中任务切换信息进行记录,并接受优先级反转检测管理 模块注册钩子函数的通知,在此后发生任务切换时,调用钩子函数;

c.钩子函数检测当前被调度任务是否发生优先级反转以及发生优先级反转任务的相关信 息。

进一步,步骤b中,所述任务切换记录模块对操作系统中任务切换信息进行记录包括: 通过建立环形队列记录操作系统中的任务切换轨迹,同时使用任务切换次数变量来记录任务 切换次数;所述环形队列中的元素对应操作系统中任务切换时被调度任务的任务控制块。

具体的,所述通过建立环形队列记录操作系统中的任务切换轨迹的方法是:在发生任务 切换时,依据任务切换变量记录的当前任务切换次数将当前被调度任务的任务控制块记录在 环形队列中对应的位置。

进一步,步骤c中,所述钩子函数检测当前被调度任务是否发生优先级反转的方法是: 检测当前被调度任务的任务控制块中运行优先级字段与配置优先级字段值是否相同,如果不 同,则判定该任务的优先级发生了反转。

进一步,所述发生优先级反转任务的相关信息包括:被反转任务获取的信号量及其阻塞 的高优先级任务,所述钩子函数检测发生优先级反转任务的相关信息的具体方法是:

钩子函数执行时若检测到当前被调度任务的优先级反转,则在任务切换轨迹中检测此前 被调度的任务:若在任务切换轨迹中,某高优先级任务被阻塞信号量的所有者为当前被调度 任务,且该高优先级任务的运行优先级等于当前被调度任务的运行优先级,则判定出该高优 先级任务被阻塞在某互斥信号量上,且该互斥信号量被当前被调度任务获取,操作系统将当 前被调度任务的优先级进行了反转。

本发明的有益效果是:检测方法简单,不需要修改操作内核代码,实现快速定位任务优 先级反转及其相关信息,进而解决由任务优先级反转带来的问题:例如某些低优先级任务由 于运行时间长,就不能被高优先级任务抢占,导致高优先任务得不到及时调度。

附图说明

图1为本发明中多任务操作系统中任务优先级反转的检测系统示意图;

图2为任务切换轨迹示意图;

图3为实施例中任务优先级被一次反转的示意图;

图4为实施例中任务优先级被多次反转的示意图;

图5为本发明中多任务操作系统中任务优先级反转的检测方法流程图。

具体实施方式

参见图1,本发明中多任务操作系统中任务优先级反转的检测系统包括任务切换记录模 块及优先级反转检测管理模块;其中,

任务切换记录模块,用于对操作系统中任务切换信息进行记录,并接受优先级反转检测 管理模块注册钩子函数的通知,在此后发生任务切换时,调用钩子函数。

优先级反转检测管理模块,用于根据用户接口命令向操作系统注册或注销钩子函数,在 注册钩子函数时通知任务切换记录模块,所述钩子函数在操作系统中任务发生切换时被调用, 以检测当前被调度任务是否发生优先级反转及发生优先级反转任务的相关信息。

实施例:

以vxWorks操作系统为例,在vxWorks操作系统中,使用一个结构体来管理任务,可以 称此结构体为任务控制块,任务控制块和任务一一对应,任务控制块中有任务运行的各项信 息字段,包括:任务运行优先级字段、配置优先级字段和被阻塞互斥信号量字段,配置优先 级在系统运行过程不变,除非用户强制修改,而运行优先级在系统运行过程中可以被系统反 转,在任务的运行优先级没有被反转的情形下,运行优先级与配置优先级相等;被阻塞互斥 信号量字段表示此任务由于取不到某互斥信号量而阻塞在此互斥信号量上。并且,在vxWorks 操作系统中,也使用一个结构体来管理信号量,可以称此结构体为信号量控制块。对于互斥 信号量来说,信号量控制块中,所有者字段表示已经获取该信号量的任务的任务控制块。

本实施例中采用一个元素个数为n的环形队列T={T[0],T[1],…,T[n-1]}记录操作系统 最近n次任务切换轨迹。其中队列的元素T[i](i=0,1,2,…n-1)表示操作系统某次调度的任 务的任务控制块。此外,本实施例还使用一个全局变量j记录钩子函数被注册后任务切换的 次数。钩子函数执行时根据j值在环形队列中对应位置记录当前调度任务的控制块,设置钩 子函数执行时的当前任务控制块为Tj,则T[j%n]=Tj,接着更新j的值:j=j+1。如此, 经过操作系统的任务多次切换后,便形成了如图2所示的任务切换轨迹:即操作系统第0次 任务切换时,当前调度任务控制块为T0,则T[0]=T0;第1次任务切换时,当前调度任务的 控制块T1,T[1]=T1;…;第n-1次调度时,当前调度任务控制块为Tn-1,T[n-1]=Tn-1;第 n次任务切换时,当前调度任务控制块Tn,T[(n)%n]=T[0]=Tn;第n+1次任务切换时, 当前调度任务的控制块Tn+1,T[(n+1)%n]=T[1]=Tn+1;以此类推;

钩子函数在发生任务切换时被调用,检测当前被调度任务是否发生优先级反转:检测当 前被调度任务的任务控制块中运行优先级字段与配置优先级字段值是否相同,如果不同,则 判定该任务的优先级发生了反转;若检测到当前被调度任务发生了优先级反转,则在任务切 换轨迹中检测此前被调度的任务:若在任务切换轨迹中,某高优先级任务被阻塞信号量的所 有者为当前被调度任务,且该高优先级任务的运行优先级等于当前被调度任务的运行优先级, 则判定出该高优先级任务被阻塞在某互斥信号量上,且该互斥信号量被当前被调度任务获取, 操作系统将当前被调度任务的优先级进行了反转。

图3给出了任务优先级被一次反转的情形,如图3所示,操作系统第n次任务切换时, 被调度任务为低优先级任务task0,其控制块为tcb0,则T[n%n]=T[0]=tcb0,task0获 取信号量SEM_XXX后,SEM_XXX的所有者为Task0;接着操作系统发生第n+1次任务切换,此 时被调度任务Task1的控制块为tcb1,T[(n+1)%n]=T[1]=tcb1,任务Task1欲取信号量 SEM_XXX,但取不到,把任务Task0的优先级进行反转,阻塞在信号量SEM_XXX上;接着发生 第n+2次,n+3,n+4次任务切换;其中在n+4次任务切换时,被调度任务为Task0,显然, T[(n+4)%n]=T[4]=tcb0,此时Task0的优先级已经被反转;

在钩子函数检测到当前任务Task0的优先级发生了反转时,则逆向依次检测任务控制块 T[3],T[2],T[1];则会检测到任务Task1被阻塞信号量SEM_XXX的所有者为Task0,且Task1 的运行优先级与任务Task0的运行优先级相等,则说明:高优先级任务Task1欲获取信号量 SEM_XXX,但SEM_XXX时已经被任务Task0获取,操作系统将当前Task0的优先级进行了反转。

图4给出了任务优先级被多次反转的情形,如图4所示,在第n次任务切换时,被调度 任务为低优先级任务Task0,其任务控制块为tcb0,T[(n)%n]=T[0]=tcb0;Task0获取 信号量SEM_XXX后,SEM_XXX的所有者为Task0;接着发生第n+1次任务切换,被调度任务为 Task1,其它任务控制块为tcb1,T[(n+1)%n]=T[1]=tcb1,Task1获取信号量SEM_YYY后, SEM_YYY的所有者为Task1,Task1欲获取信号量SEM_XXX,将task0的优先级反转,并阻塞 在信号量SEM_XXX上;接着发生第n+2次任务切换,被调度任务为Task2,其任务控制块为 tcb2,T[(n+2)%n]=T[2]=tcb2;Task2欲取信号量SEM_YYY,将Task1的任务优先级进行 反转,还要将Task0的优先级进行反转,并被阻塞在信号量SEM_YYY上;第n+3次任务切换 时,被调度任务为Task0,T[(n+3)%n]=T[3]=tcb0,Task0的优先级已经被反转;第n+4 次任务切换时,被调度任务为task1,T[(n+4)%n]=T[4]=tcb1,Task1的任务优先级已经 被反转。

在钩子函数检测到Task0的优先级已经反转时,则逆向依次检测任务控制块T[2],T[1]。 则会检测到任务Task1的被阻塞信号量SEM_XXX的所有者为Task0,且Task1的运行优先级 与任务Task0的运行优先级相等,则说明:高优先级任务Task1欲获取信号量SEM_XXX,但 SEM_XXX时已经被任务Task0获取,操作系统将当前Task0的优先级进行了反转。

在钩子函数检测到Task1的优先级已经反转时,则逆向依次检测任务控制块T[3],T[2]。 则会检测到任务Task2的被阻塞信号量SEM_YYY的所有者为Task1,且Task2的运行优先级 与任务Task1的运行优先级相等,则说明:高优先级任务Task2欲获取信号量SEM_YYY,但 SEM_YYY时已经被任务Task1获取,操作系统将当前Task1的优先级进行了反转。

本发明中的多任务操作系统中任务优先级反转的检测方法流程如图5所示,其包括:

501.当需要检测操作系统中任务优先级反转时,优先级反转检测管理模块根据用户接口 命令向操作系统注册钩子函数,并通知任务切换记录模块;

502.任务切换记录模块对操作系统中任务切换信息进行记录,并接受优先级反转检测管 理模块注册钩子函数的通知,在此后发生任务切换时,调用钩子函数;

503.钩子函数检测当前被调度任务是否发生优先级反转以及发生优先级反转任务的相关 信息。

在步骤502中,所述任务切换记录模块对操作系统中任务切换信息进行记录包括:通过 建立环形队列记录操作系统中的任务切换轨迹,同时使用任务切换次数变量来记录任务切换 次数;所述环形队列中的元素对应操作系统中任务切换时被调度任务的任务控制块。

具体的,所述通过建立环形队列记录操作系统中的任务切换轨迹的方法是:在发生任务 切换时,依据任务切换变量记录的当前任务切换次数将当前被调度任务的任务控制块记录在 环形队列中对应的位置。

在步骤503中,所述钩子函数检测当前被调度任务是否发生优先级反转的方法是:检测 当前被调度任务的任务控制块中运行优先级字段与配置优先级字段值是否相同,如果不同, 则判定该任务的优先级发生了反转。

在步骤503中,所述发生优先级反转任务的相关信息包括:被反转任务获取的信号量及 其阻塞的高优先级任务,所述钩子函数检测发生优先级反转任务的相关信息的具体方法是:

钩子函数执行时若检测到当前被调度任务的优先级反转,则在任务切换轨迹中检测此前 被调度的任务:若在任务切换轨迹中,某高优先级任务被阻塞信号量的所有者为当前被调度 任务,且该高优先级任务的运行优先级等于当前被调度任务的运行优先级,则判定出该高优 先级任务被阻塞在某互斥信号量上,且该互斥信号量被当前被调度任务获取,操作系统将当 前被调度任务的优先级进行了反转。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号