CN102929770A - 嵌入式linux系统用户态任务独占的监测定位方法 - Google Patents
嵌入式linux系统用户态任务独占的监测定位方法 Download PDFInfo
- Publication number
- CN102929770A CN102929770A CN201210362848XA CN201210362848A CN102929770A CN 102929770 A CN102929770 A CN 102929770A CN 201210362848X A CN201210362848X A CN 201210362848XA CN 201210362848 A CN201210362848 A CN 201210362848A CN 102929770 A CN102929770 A CN 102929770A
- Authority
- CN
- China
- Prior art keywords
- task
- monopolizing
- monitoring
- function
- positioning method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种嵌入式linux系统用户态任务独占的监测定位方法,包括以下步骤:在任务切换时,记录正在运行的任务的ID和任务开始运行时TICK;启动高优先级监测任务循环监测系统中正在运行的任务,并根据任务的运行时长是否大于预先设定的阀值获得该任务是否为独占任务,如该任务为独占任务,则向该任务发送控制信号,启动独占任务定位处理函数,获取所述独占任务的ID,并实时打印和保存所述独占任务的任务名、上下文以及函数调用关系。本发明,克服了需要操作系统提供硬时钟中断功能的限制,且不需要修改操作系统内核代码,完全在用户态下实现了任务独占监测和定位。
Description
技术领域
本发明涉及嵌入式系统,具体涉及嵌入式linux系统用户态任务独占的监测定位方法。
背景技术
嵌入式linux系统是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。它继承了Linux的开放源代码资源的优点,又具有嵌入式操作系统的特性,因此,性能优异、软件移植容易、实时性能和稳定性、安全性好,使用嵌入式linux系统开发新产品周期短,如今已被广泛的应用于工业制造、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等众多领域。
Linux支持多任务(进程),通过进程调度进行调度管理。但是,如果某一个任务在执行过程中进入死循环或者始终等待其他资源,则会长时间独占CPU,从而导致整个系统死锁,任何进程都无法运行。为此,嵌入式linux系统必须对用户态任务独占进行监测,以确保系统正常运行。
目前,嵌入式系统针对任务独占监测定位主要有以下两种方法:
第一种方法:通过硬时钟中断实现。即在嵌入式软件中启动硬时钟定时器,并在定时器的中断服务例程中循环监控系统中各任务的消息处理时间是否超过预定阀值,从而判断是否有任务发生独占,之后直接打印信息通知开发人员任务独占或者向调试任务发送填充有独占的任务标识的消息,在调试任务中获取函数调用栈信息并输出。
第二种方法:通过插桩代码实现。即在系统中各任务循环体的入口处增加统计变量,每次系统调度时,该变量的值递增;然后创建一个高优先级的任务,循环遍历被监控的任务,当任务连续N次出现统计变量值不为零、统计变量值不变的时间超过规定的阀值、CPU占用率超过阀值且任务处于运行状态,则判定任务发生独占,之后输出独占的异常信息。
第一种方法有如下主要弊端:首先,要求嵌入式系统必须具有硬时钟中断功能,而嵌入式LINUX系统在用户态下不存在硬时钟中断功能;其次,对监测的任务具有局限性,只能监测到具有处理消息功能的任务。
第二种方法有如下主要弊端:首先,任务统计变量如果需要在每次调度的时候递增,则需要在系统调度时设置,而不是在任务循环体入口处设置,这就需要修改内核调度代码;其次,任务规格受限,需要循环遍历系统中所有任务,对这些任务排序并监测,当系统中任务较多时,该方法会占用较多资源,效率较低。
由此可见,现有嵌入式系统针对任务独占监测定位的方法应用到嵌入式LINUX系统上时,存在较大的缺陷。
发明内容
为了解决上述技术问题,本发明所采用的技术方案是提供一种嵌入式linux系统用户态任务独占的监测定位方法,包括以下步骤:
在任务切换时,记录正在运行的任务的ID和任务开始运行时的系统TICK;
启动高优先级监测任务循环监测系统中正在运行的任务,计算任务运行时长,并根据任务的运行时长是否大于预先设定的阀值获得该任务是否为独占任务,如该任务为独占任务,则向该任务发送控制信号,启动独占任务定位处理函数,所述运行时长为:任务当前时刻的系统TICK与任务开始运行时的系统TICK之间的差值;
根据所述控制信号启动独占任务定位处理函数获取所述独占任务的ID,并实时打印和保存所述独占任务的任务名、上下文以及函数调用关系。
在上述方法中,根据正在运行任务的任务属性和连续两次高优先级监测的任务是否发生任务切换,判断该任务是抢占式任务还是非抢占式任务;如果该任务是抢占式任务,则执行抢占式任务的独占监测;否则进行当前连续运行任务的独占监测。
在上述方法中,独占任务定位处理函数和处理流程如下:
根据所述独占任务的ID,读取/proc/目录下与所述独占任务对应的maps文件,获取所述独占任务对应的所有虚拟内存起始地址和终止地址;
根据linux内核封装的上下文信息,获取所述独占任务的当前指令地址和函数调用栈基值,根据当前指令地址和内存映射信息,获得当前指令所在静态或动态库的文件名和当前指令相对库文件的偏移地址;
根据函数调用时的入栈和出栈规律以及获取到的函数调用栈基值,逐级获取每一层函数调用栈信息,并实时打印和保存当前任务的任务名、上下文以及函数调用关系。
本发明,克服了需要操作系统提供硬时钟中断功能的限制,且不需要修改操作系统内核代码,完全在用户态下实现了任务独占监测,并通过提供多级函数调用栈信息,为精确定位任务独占发生的位置提供多级调用函数名、源文件、行号等重要信息。
附图说明
图1为本发明提供的嵌入式linux系统用户态任务独占的监测定位方法流程图;
图2为本发明中高优先级监测任务的一次处理流程。
具体实施方式
下面结合附图对本发明作出详细的说明。
本发明提出的嵌入式linux系统用户态任务独占的监测定位方法,首先设定如下多个参数变量:
(1)定义并初始化用于记录任务独占环境的数组变量,数组中每一个元素用于记录一次任务独占时的环境信息,包括独占任务的ID、任务名、任务开始TICK、任务总运行时长、堆栈中函数调用关系等;
(2)定义并初始化描述当前任务状态的结构变量,包括任务ID,任务开始TICK,任务运行时长;
(3)定义并初始化描述待监测的抢占式任务的结构变量,包括任务ID,任务开始TICK,任务运行时长,是否进行任务独占监测标识;
(4)定义任务独占的阀值,包括抢占式任务阀值A1和非抢占式任务阀值A2。
(5)定义可靠信号SIG_MONOPOLY,用于启动独占任务的定位处理函数。
请参见图1,本发明提供的嵌入式linux系统用户态任务独占的监测定位方法包括以下步骤:
步骤1:在任务切换时,根据新切换任务的属性以及连续两次监测是否发生任务切换,判断该任务是抢占式任务还是非抢占式任务;当任务为非抢占式任务时,设置描述当前任务状态的结构变量的任务ID为该任务,并设置该任务的开始运行的TICK为当前系统TICK;否则设置描述待监测的抢占式任务的结构变量的任务ID为该任务ID,任务开始运行TICK为当前系统TICK,并设置是否进行任务独占监测的标识为TRUE。
步骤2:创建并启动高优先级监测任务,循环监测系统中正在运行的任务,根据被监测任务当前时刻的系统TICK与任务开始运行时的系统TICK之间的差值,计算当前被监测的任务运行时长,并根据任务的运行时长是否大于预先设定的阀值获得该任务是否为独占任务,如该任务为独占任务,则调用pthread_kill接口向该任务发送控制信号SIG_MONOPOLY,启动独占任务定位处理函数。
步骤3:通过独占任务定位处理函数,即信号SIG_MONOPOLY的信号处理函数,在该函数内获取当前独占任务ID,并实时打印和保存所述独占任务的任务名、上下文以及函数调用关系,重置描述当前任务状态的结构变量中任务的开始运行TICK为当前TICK。
在系统退出时,保存记录的系统任务独占环境信息到存储介质,可以方便离线查询和定位。
本发明在步骤1中,首先根据任务的属性判断该任务是抢占式任务还是非抢占式任务,其目的在于:(1)为抢占式任务和非抢占式任务分别设置不同的任务运行时长阀值;(2)如果已经检测到有抢占式任务独占,则高优先级监测任务不会再循环监测系统中所有任务是否发生抢占式独占,提高系统监测效率。
在步骤2中,高优先级监测任务的一次处理流程如图2所示,根据抢占式任务和非抢占式任务分为两部分:当前连续运行的任务独占监测和抢占式任务独占监测。
连续运行的任务独占监测的具体实现步骤如下:
步骤S201:根据当前任务在监测发生时的系统TICK与任务开始运行的系统TICK之间的差值,获得当前任务连续运行的运行时长。
步骤S202:判断运行时长是否大于预先设定的阀值A2。若大于预先设定的阀值A2,则表示发生了独占;否则,跳转至抢占式任务的独占监测。
步骤S203:从描述系统任务独占环境的数组变量中获取用于记录本次独占信息的数组索引,保存当前任务ID、任务名、任务开始运行TICK和任务总运行TICK。
步骤S204:向当前任务发送控制信号SIG_MONOPOLY,启动独占任务定位处理函数。
抢占式任务的独占监测的具体实现步骤如下:
步骤S301:根据待监测的抢占式任务的结构变量中是否进行任务独占监测标识,判断待监测的抢占式任务是否需要进行独占式监测,若需要,则执行步骤S302,否则,跳至步骤S304。
步骤S302:判断抢占式任务运行时长是否大于预先设定的阀值A1,若大于预先设定的阀值A1,则表示发生独占,执行步骤S303;否则,跳至步骤S305;
步骤S303:从描述系统任务独占环境的数组变量中获取用于记录本次独占任务的数组索引,保存当前任务ID、任务名、任务开始运行TICK和运行时长。
步骤S304:向当前任务发送控制信号SIG_MONOPOLY,启动独占任务定位处理函数,并退出监测任务。
步骤S305:设置下一轮待监测的抢占式任务,重置待监测的抢占式任务的结构变量为下一次系统监测的任务。
在步骤3中,独占任务定位处理函数和处理流程如下:
根据独占任务的ID读取/proc/目录下与所述独占任务对应的maps文件,获取所述独占任务对应的所有虚拟内存起始地址和终止地址;
根据linux内核封装的上下文信息,获取所述独占任务的当前指令地址和函数调用栈基值,根据当前指令地址和内存映射信息,获得当前指令所在静态或动态库的文件名和当前指令相对库文件的偏移地址;
根据函数调用时的入栈和出栈规律以及获取到的函数调用栈基值,逐级获取每一层函数调用栈信息,并实时打印和保存当前任务的任务名、上下文以及函数调用关系。
本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。
Claims (3)
1.嵌入式linux系统用户态任务独占的监测定位方法,其特征在于,包括以下步骤:
在任务切换时,记录正在运行的任务的ID和任务开始运行时系统TICK;
启动高优先级监测任务循环监测当前系统中正在运行的任务,计算任务运行时长,并根据任务的运行时长是否大于预先设定的阀值判断该任务是否为独占任务,如该任务为独占任务,则向该独占任务发送控制信号,所述运行时长为:任务当前时刻的系统TICK与任务开始运行时的系统TICK之间的差值;
根据所述控制信号启动独占任务定位处理函数,获取所述独占任务的ID,并实时打印和保存所述独占任务的任务名、上下文以及函数调用关系。
2.如权利要求1所述的嵌入式linux系统用户态任务独占的监测定位方法,其特征在于,
根据正在运行任务的任务属性和连续两次监测是否发生任务切换,判断该任务是抢占式任务还是非抢占式任务;
如果该任务是抢占式任务,则执行抢占式任务的独占监测;否则进行当前连续运行任务的独占监测。
3.如权利要求1所述的嵌入式linux系统用户态任务独占的监测定位方法,其特征在于,独占任务定位处理函数和处理流程如下:
根据所述独占任务的ID读取/proc/目录下与所述独占任务对应的maps文件,获取所述独占任务对应的所有虚拟内存起始地址和终止地址;
根据信号处理函数输入的上下文信息,获取所述独占任务的当前指令地址和函数调用栈基值,根据当前指令地址和内存映射信息,获得当前指令所在静态或动态库的文件名和当前指令相对库文件的偏移地址;
根据函数调用时的入栈和出栈规律以及获取到的函数调用栈基值,逐级获取每一层函数调用栈信息,并实时打印和保存当前任务的任务名、上下文以及函数调用关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362848.XA CN102929770B (zh) | 2012-09-25 | 2012-09-25 | 嵌入式linux系统用户态任务独占的监测定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210362848.XA CN102929770B (zh) | 2012-09-25 | 2012-09-25 | 嵌入式linux系统用户态任务独占的监测定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929770A true CN102929770A (zh) | 2013-02-13 |
CN102929770B CN102929770B (zh) | 2015-07-29 |
Family
ID=47644574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210362848.XA Active CN102929770B (zh) | 2012-09-25 | 2012-09-25 | 嵌入式linux系统用户态任务独占的监测定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102929770B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103744772A (zh) * | 2014-01-28 | 2014-04-23 | 北京经纬恒润科技有限公司 | 一种检测任务运行性能的方法和系统 |
CN106126404A (zh) * | 2016-06-21 | 2016-11-16 | 上海新炬网络技术有限公司 | 一种cpu高消耗的db2进程/线程快速定位方法 |
CN106528318A (zh) * | 2016-11-29 | 2017-03-22 | 迈普通信技术股份有限公司 | 线程死循环检测方法和装置 |
CN107608885A (zh) * | 2017-09-13 | 2018-01-19 | 郑州云海信息技术有限公司 | 内存泄漏点的定位方法、装置、系统及可读存储介质 |
CN109634834A (zh) * | 2017-10-09 | 2019-04-16 | 展讯通信(上海)有限公司 | 一种同步多线程系统中独占访存的验证方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1477512A (zh) * | 2002-08-20 | 2004-02-25 | 华为技术有限公司 | 嵌入式软件任务死循环监控方法 |
JP2006011686A (ja) * | 2004-06-24 | 2006-01-12 | Fuji Xerox Co Ltd | マルチタスクシステムの異常検知方法 |
CN101853191A (zh) * | 2010-06-23 | 2010-10-06 | 迈普通信技术股份有限公司 | 检测操作系统中任务死循环的方法及操作系统 |
-
2012
- 2012-09-25 CN CN201210362848.XA patent/CN102929770B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1477512A (zh) * | 2002-08-20 | 2004-02-25 | 华为技术有限公司 | 嵌入式软件任务死循环监控方法 |
JP2006011686A (ja) * | 2004-06-24 | 2006-01-12 | Fuji Xerox Co Ltd | マルチタスクシステムの異常検知方法 |
CN101853191A (zh) * | 2010-06-23 | 2010-10-06 | 迈普通信技术股份有限公司 | 检测操作系统中任务死循环的方法及操作系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103744772A (zh) * | 2014-01-28 | 2014-04-23 | 北京经纬恒润科技有限公司 | 一种检测任务运行性能的方法和系统 |
CN106126404A (zh) * | 2016-06-21 | 2016-11-16 | 上海新炬网络技术有限公司 | 一种cpu高消耗的db2进程/线程快速定位方法 |
CN106126404B (zh) * | 2016-06-21 | 2019-03-19 | 上海新炬网络技术有限公司 | 一种cpu高消耗的db2进程/线程快速定位方法 |
CN106528318A (zh) * | 2016-11-29 | 2017-03-22 | 迈普通信技术股份有限公司 | 线程死循环检测方法和装置 |
CN106528318B (zh) * | 2016-11-29 | 2020-02-04 | 迈普通信技术股份有限公司 | 线程死循环检测方法和装置 |
CN107608885A (zh) * | 2017-09-13 | 2018-01-19 | 郑州云海信息技术有限公司 | 内存泄漏点的定位方法、装置、系统及可读存储介质 |
CN109634834A (zh) * | 2017-10-09 | 2019-04-16 | 展讯通信(上海)有限公司 | 一种同步多线程系统中独占访存的验证方法及装置 |
CN109634834B (zh) * | 2017-10-09 | 2021-10-26 | 展讯通信(上海)有限公司 | 一种同步多线程系统中独占访存的验证方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102929770B (zh) | 2015-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2816467A2 (en) | Method and device for checkpoint and restart of container state | |
US8381230B2 (en) | Message passing with queues and channels | |
CN102929770B (zh) | 嵌入式linux系统用户态任务独占的监测定位方法 | |
CN105045632A (zh) | 一种多核环境下实现免锁队列的方法和设备 | |
CN110162344B (zh) | 一种隔离限流的方法、装置、计算机设备及可读存储介质 | |
CN112099800A (zh) | 代码数据的处理方法、装置和服务器 | |
CN110134504A (zh) | 一种基于有限状态机的操作系统需求层形式化建模方法及装置 | |
CN108196950A (zh) | 一种应用于窄带物联网的实时化操作系统及其方法 | |
CN113010265A (zh) | Pod的调度方法、调度器、存储插件及系统 | |
CN107977275B (zh) | 基于消息队列的任务处理方法及相关设备 | |
CN103257922A (zh) | 一种快速测试bios与os接口代码可靠性的方法 | |
CN110659104B (zh) | 一种业务监控方法及相关设备 | |
US8543722B2 (en) | Message passing with queues and channels | |
CN112905668B (zh) | 基于分布式数据流处理引擎的数据库导数方法、设备和介质 | |
CN110837446A (zh) | 应用于嵌入式系统的设备管理方法及装置、介质以及嵌入式设备 | |
CN113032119A (zh) | 一种任务调度方法、装置、存储介质及电子设备 | |
CN114564241B (zh) | 硬件设备的访问方法、装置、计算机设备和存储介质 | |
CN116594734A (zh) | 容器迁移方法、装置、存储介质及电子设备 | |
WO2022237419A1 (zh) | 任务执行方法、装置及存储介质 | |
CN106681812B (zh) | 一种分区调度方法 | |
CN115809126A (zh) | 混合部署场景下的作业调度方法、装置及电子设备 | |
CN109408265A (zh) | 一种ios运行异常的保护方法、装置、终端设备及存储介质 | |
CN112784276B (zh) | 可信度量的实现方法及装置 | |
CN111433738A (zh) | 控制器事件队列 | |
CN105183668A (zh) | 缓存刷新方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200818 Address after: 430000 part of the third floor of cable building, Guandong science and Technology Park, Donghu New Technology Development Zone, Wuhan, Hubei Province Patentee after: Wuhan Changjiang Computing Technology Co., Ltd Address before: China Science and Technology Park Dongxin road East Lake Development Zone 430074 Hubei Province, Wuhan City, No. 5 Patentee before: FIBERHOME TELECOMMUNICATION TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |