公开/公告号CN103218291A
专利类型发明专利
公开/公告日2013-07-24
原文格式PDF
申请/专利权人 迈普通信技术股份有限公司;
申请/专利号CN201310108697.X
申请日2013-03-29
分类号
代理机构成都宏顺专利代理事务所(普通合伙);
代理人李顺德
地址 610041 四川省成都市高新区九兴大道16号迈普大厦
入库时间 2024-02-19 19:37:31
法律状态公告日
法律状态信息
法律状态
2016-05-04
授权
授权
2013-08-21
实质审查的生效 IPC(主分类):G06F11/36 申请日:20130329
实质审查的生效
2013-07-24
公开
公开
技术领域
本发明涉及计算机多任务操作系统领域,特别涉及多任务操作系统中互斥信号量异常的 检测技术。
背景技术
信号量(Semaphore),有时也称为信号灯,是在多线程环境下使用的一种设施,它负责 协调各个线程,以保证它们能够正确、合理的使用公共资源。在vxWorks操作系统中,一般 使用互斥信号量来保护临界资源。如果在软件实现的使用互斥信号量过程中,任务获取互斥 信号量后不释放就退出,其它的来获取该互斥信号量的任务将永远阻塞在该互斥信号量上, 这样将使系统工作异常。
可以在软件的编码过程中提高编码质量部分解决此问题,但软件编码中的此类编码问题 也难于全部解决,而且人工排查此类问题的效率有限。
发明内容
本发明所要解决的技术问题,就是提供一种多任务操作系统中互斥信号量异常的检测方 法及装置,在软件开发过程中高效的发现互斥信号量的使用问题,提高软件质量。
本发明解决所述技术问题,采用的技术方案是,多任务操作系统中互斥信号量异常的检 测方法,其特征在于,
构造互斥信号量管理列表,创建互斥信号量时将互斥信号量加入互斥信号量管理列表, 删除互斥信号量时将互斥信号量从互斥信号量管理列表中删除;
创建一个优先级最高的互斥信号量状态检测任务,周期性检测信互斥信号量管理列表中 的互斥信号量的状态信息,所述状态信息包括互斥信号量占有者任务及其获取该互斥信号量 的次数。
进一步的,通过检测信号量控制块中的占有者任务字段来判断所述互斥信号量占有者任 务是否合法。
具体的,如果检测到某互斥信号量占有者任务不合法,说明互斥信号量占有者任务在取 得该信号量后已经被删除,向用户输出错误信息。
具体的,如果连续检测到某互斥信号量占有者任务字段没有变化,且占有者任务处于就 绪状态,进一步判断:
如果占有者任务的PC指针在变化,则占有者任务取得该信号量后出现了死循环,根据 PC指针输出所述占有者任务的死循环轨迹;
如果占有者任务的PC指针没有变化,则该占有者任务取得该信号量后,系统中出现了 更高优先级任务的死循环。
具体的,如果连续检测到某互斥信号量占有者任务字段没有变化,且该互斥信号量的递 归嵌套调用字段的值在增加,则占有者任务取得互斥信号量和释放互斥信号量的次数不对称, 取得互斥信号量的次数大于释放互斥信号量的次数;
如果连续检测到某互斥信号量占有者任务字段没有变化,且占有者任务处于阻塞状态, 则占有者任务获取所述互斥信号量后阻塞在了其它信号量上,输出占有者任务的PC指针, 根据PC指针查找占有者任务阻塞在哪个信号量上。
本发明的另一个目的,提供一种多任务操作系统中互斥信号量异常的检测装置,其特征 在于,包括列表管理模块和状态检测模块;
所述列表管理模块,用于构造互斥信号量管理列表,创建互斥信号量时将互斥信号量加 入互斥信号量管理列表,删除互斥信号量时将互斥信号量从互斥信号量管理列表中删除;
所述状态检测模块,用于创建一个优先级最高的互斥信号量状态检测任务,周期性检测 信互斥信号量管理列表中的互斥信号量的状态信息,所述状态信息包括互斥信号量占有者任 务及其获取该互斥信号量的次数。
进一步的,所诉状态检测模块,用于通过检测信号量控制块中的占有者任务字段来判断 所述互斥信号量占有者任务是否合法。
具体的,所述状态检测模块,用于判断如果检测到某互斥信号量占有者任务不合法,说 明互斥信号量占有者任务在取得该信号量后已经被删除,向用户输出错误信息。
具体的,所述状态检测模块,用于判断如果连续检测到某互斥信号量占有者任务字段没 有变化,且占有者任务处于就绪状态,进一步判断:
如果占有者任务的PC指针在变化,则占有者任务取得该信号量后出现了死循环,根据 PC指针输出所述占有者任务的死循环轨迹;
如果占有者任务PC指针没有变化,则该占有者任务取得该信号量后,系统中出现了更 高优先级任务的死循环。
具体的,所述状态检测模块,用于判断如果连续检测到某互斥信号量占有者任务字段没 有变化,且该互斥信号量的递归嵌套调用字段的值在增加,则占有者任务取得互斥信号量和 释放互斥信号量的次数不对称,取得互斥信号量的次数大于释放互斥信号量的次数;
如果连续检测到某互斥信号量占有者任务字段没有变化,且占有者任务处于阻塞状态, 则占有者任务获取所述互斥信号量后阻塞在了其它信号量上,输出占有者任务的PC指针, 根据PC指针查找占有者任务阻塞在哪个信号量上。
本发明的有益效果是,可以高效的检测系统中互斥信号量的错误使用,这些错误使用包 括:信号量的获取和释放不配对,某次获取后没有释放;或者某任务获取互斥信号量后出现 死循环;或者某任务获取互斥信号量后永远阻塞在其它信号量上。
附图说明
图1是信号量控制块示意图;
图2是本发明的方法流程图;
图3是本发明的装置结构示意图。
具体实施方式
下面结合附图详细描述本发明的技术方案。
如图1,vxWorks操作系统中,使用一个结构体来管理信号量,称此结构体为信号量控制 块(Semaphore Control Block,简称为SCB)。对于互斥信号量来说,信号量控制块中:占有 者任务字段表示已经获取该信号量的任务的任务控制块指针;递归嵌套调用字段表示占有者 递归获取该互斥信号量的次数。
检测信号量占有者流程如图2所示:
(1)统一管理互斥信号量
构造互斥信号量管理列表,系统创建互斥信号量时将互斥信号量加入互斥信号量管理列 表,系统删除互斥信号量时将互斥信号量从互斥信号量管理列表中删除。
(2)利用检测任务检测所有互斥信号量
在系统中创建一个具有最高优先级的互斥信号量检测任务,检测信互斥信号量管理列表 中的互斥信号量的状态信息,包括互斥信号量占有者任务及其获取该互斥信号量的次数。
通过检测信号量控制块中的占有者任务字段来判断互斥信号量占有者任务是否合法。
(3)互斥信号量检测任务周期性检测信号量管理列表中的互斥信号量的占有者任务及该 占有者任务获取互斥信号量的次数。
(301)如果检测某个互斥信号量的占有者任务字段不合法,则该控制块不合法,说明占 有者任务在取得该信号量后已经被删除,向用户输出错误信息。
(302)如果连续检测到某互斥信号量占有者任务字段没有变化,且该互斥信号量的递归 嵌套调用字段的值在增加,说明占有者任务取得互斥信号量和释放互斥信号量的次数不对称, 取得互斥信号量的次数大于释放互斥信号量的次数;
如果连续检测到某互斥信号量的占有者任务字段没有变化,且占有者任务处于阻塞状态, 则说明占有者任务获取所述互斥信号量后阻塞在了其它信号量上,可以输出占有者任务的PC (Program Counter)指针,根据PC指针查找占有者任务阻塞在哪个信号量上。
(303)如果连续检测到某信号量的占有者任务字段没有变化,且占有者任务处于就绪状 态,如果占有者任务的PC指针在变化,则说明可能是占有者任务取得该信号量后出现了死 循环,可以根据PC指针输出占有者任务的死循环轨迹;
如果占有者任务的PC指针没有变化。则说明该占有者任务取得该信号量后,系统中出 现了更高优先级任务的死循环。
本发明基于同样构思的多任务操作系统中互斥信号量异常的检测装置,结构如图3所示, 包括列表管理模块1和状态检测模块2。
列表管理模块1,用于构造互斥信号量管理列表,创建互斥信号量时将互斥信号量加入 互斥信号量管理列表,删除互斥信号量时将互斥信号量从互斥信号量管理列表中删除。
状态检测模块2,用于创建一个优先级最高的互斥信号量状态检测任务,周期性检测信 互斥信号量管理列表中的互斥信号量的状态信息,所述状态信息包括互斥信号量占有者任务 及其获取该互斥信号量的次数。
状态检测模块2,通过检测信号量控制块中的占有者任务字段来判断所述互斥信号量占 有者任务是否合法。
如果状态检测模块2检测到某互斥信号量占有者任务不合法,说明互斥信号量占有者任 务在取得该信号量后已经被删除,向用户输出错误信息。
如果状态检测模块2连续检测到某互斥信号量占有者任务字段没有变化,且占有者任务 处于就绪状态:
如果状态检测模块2还检测到占有者任务的PC指针在变化,则占有者任务取得该信号 量后出现了死循环,根据PC指针输出所述占有者任务的死循环轨迹;
如果状态检测模块2检测到占有者任务PC指针没有变化,则该占有者任务取得该信号 量后,系统中出现了更高优先级任务的死循环。
如果状态检测模块2连续检测到某互斥信号量占有者任务字段没有变化,且该互斥信号 量的递归嵌套调用字段的值在增加,则占有者任务取得互斥信号量和释放互斥信号量的次数 不对称,取得互斥信号量的次数大于释放互斥信号量的次数;
如果状态检测模块2连续检测到某互斥信号量占有者任务字段没有变化,且占有者任务 处于阻塞状态,则占有者任务获取所述互斥信号量后阻塞在了其它信号量上,输出占有者任 务的PC指针,根据PC指针查找占有者任务阻塞在哪个信号量上。
机译: 在多任务操作系统环境中处理异常的装置和方法
机译: 在多任务计算机系统中对共享资源进行互斥访问的碰撞安全实施方法和装置
机译: 在多任务计算机系统中对共享资源进行互斥访问的碰撞安全实施方法和装置