[发明专利]嵌入式linux系统用户态任务独占的监测定位方法有效
申请号: | 201210362848.X | 申请日: | 2012-09-25 |
公开(公告)号: | CN102929770A | 公开(公告)日: | 2013-02-13 |
发明(设计)人: | 徐鑫;刘应江;刘昊;简楹;杨红霞 | 申请(专利权)人: | 烽火通信科技股份有限公司 |
主分类号: | G06F11/34 | 分类号: | G06F11/34 |
代理公司: | 北京捷诚信通专利事务所(普通合伙) 11221 | 代理人: | 魏殿绅;庞炳良 |
地址: | 430074 湖北省武*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 嵌入式 linux 系统 用户 任务 独占 监测 定位 方法 | ||
技术领域
本发明涉及嵌入式系统,具体涉及嵌入式linux系统用户态任务独占的监测定位方法。
背景技术
嵌入式linux系统是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。它继承了Linux的开放源代码资源的优点,又具有嵌入式操作系统的特性,因此,性能优异、软件移植容易、实时性能和稳定性、安全性好,使用嵌入式linux系统开发新产品周期短,如今已被广泛的应用于工业制造、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等众多领域。
Linux支持多任务(进程),通过进程调度进行调度管理。但是,如果某一个任务在执行过程中进入死循环或者始终等待其他资源,则会长时间独占CPU,从而导致整个系统死锁,任何进程都无法运行。为此,嵌入式linux系统必须对用户态任务独占进行监测,以确保系统正常运行。
目前,嵌入式系统针对任务独占监测定位主要有以下两种方法:
第一种方法:通过硬时钟中断实现。即在嵌入式软件中启动硬时钟定时器,并在定时器的中断服务例程中循环监控系统中各任务的消息处理时间是否超过预定阀值,从而判断是否有任务发生独占,之后直接打印信息通知开发人员任务独占或者向调试任务发送填充有独占的任务标识的消息,在调试任务中获取函数调用栈信息并输出。
第二种方法:通过插桩代码实现。即在系统中各任务循环体的入口处增加统计变量,每次系统调度时,该变量的值递增;然后创建一个高优先级的任务,循环遍历被监控的任务,当任务连续N次出现统计变量值不为零、统计变量值不变的时间超过规定的阀值、CPU占用率超过阀值且任务处于运行状态,则判定任务发生独占,之后输出独占的异常信息。
第一种方法有如下主要弊端:首先,要求嵌入式系统必须具有硬时钟中断功能,而嵌入式LINUX系统在用户态下不存在硬时钟中断功能;其次,对监测的任务具有局限性,只能监测到具有处理消息功能的任务。
第二种方法有如下主要弊端:首先,任务统计变量如果需要在每次调度的时候递增,则需要在系统调度时设置,而不是在任务循环体入口处设置,这就需要修改内核调度代码;其次,任务规格受限,需要循环遍历系统中所有任务,对这些任务排序并监测,当系统中任务较多时,该方法会占用较多资源,效率较低。
由此可见,现有嵌入式系统针对任务独占监测定位的方法应用到嵌入式LINUX系统上时,存在较大的缺陷。
发明内容
为了解决上述技术问题,本发明所采用的技术方案是提供一种嵌入式linux系统用户态任务独占的监测定位方法,包括以下步骤:
在任务切换时,记录正在运行的任务的ID和任务开始运行时的系统TICK;
启动高优先级监测任务循环监测系统中正在运行的任务,计算任务运行时长,并根据任务的运行时长是否大于预先设定的阀值获得该任务是否为独占任务,如该任务为独占任务,则向该任务发送控制信号,启动独占任务定位处理函数,所述运行时长为:任务当前时刻的系统TICK与任务开始运行时的系统TICK之间的差值;
根据所述控制信号启动独占任务定位处理函数获取所述独占任务的ID,并实时打印和保存所述独占任务的任务名、上下文以及函数调用关系。
在上述方法中,根据正在运行任务的任务属性和连续两次高优先级监测的任务是否发生任务切换,判断该任务是抢占式任务还是非抢占式任务;如果该任务是抢占式任务,则执行抢占式任务的独占监测;否则进行当前连续运行任务的独占监测。
在上述方法中,独占任务定位处理函数和处理流程如下:
根据所述独占任务的ID,读取/proc/目录下与所述独占任务对应的maps文件,获取所述独占任务对应的所有虚拟内存起始地址和终止地址;
根据linux内核封装的上下文信息,获取所述独占任务的当前指令地址和函数调用栈基值,根据当前指令地址和内存映射信息,获得当前指令所在静态或动态库的文件名和当前指令相对库文件的偏移地址;
根据函数调用时的入栈和出栈规律以及获取到的函数调用栈基值,逐级获取每一层函数调用栈信息,并实时打印和保存当前任务的任务名、上下文以及函数调用关系。
本发明,克服了需要操作系统提供硬时钟中断功能的限制,且不需要修改操作系统内核代码,完全在用户态下实现了任务独占监测,并通过提供多级函数调用栈信息,为精确定位任务独占发生的位置提供多级调用函数名、源文件、行号等重要信息。
附图说明
图1为本发明提供的嵌入式linux系统用户态任务独占的监测定位方法流程图;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于烽火通信科技股份有限公司,未经烽火通信科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210362848.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:带有平抑装置的LED照明装置
- 下一篇:手电筒