CN104391754A - 一种任务异常的处理方法及装置 - Google Patents

一种任务异常的处理方法及装置 Download PDF

Info

Publication number
CN104391754A
CN104391754A CN201410540133.8A CN201410540133A CN104391754A CN 104391754 A CN104391754 A CN 104391754A CN 201410540133 A CN201410540133 A CN 201410540133A CN 104391754 A CN104391754 A CN 104391754A
Authority
CN
China
Prior art keywords
task
abnormal
described task
deadlock
execution time
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
Application number
CN201410540133.8A
Other languages
English (en)
Other versions
CN104391754B (zh
Inventor
梁恩波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Star Net Ruijie Networks Co Ltd
Original Assignee
Beijing Star Net Ruijie Networks Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Star Net Ruijie Networks Co Ltd filed Critical Beijing Star Net Ruijie Networks Co Ltd
Priority to CN201410540133.8A priority Critical patent/CN104391754B/zh
Publication of CN104391754A publication Critical patent/CN104391754A/zh
Application granted granted Critical
Publication of CN104391754B publication Critical patent/CN104391754B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供一种任务异常的处理方法及装置,涉及计算机领域,能够对任务的异常进行自动排错处理,防止系统出现混乱或者崩溃,节约人力和物力。任务异常的处理方法用于处理器,包括:若当前任务的执行时间大于预设执行时间时,确定任务发生死循环异常或死锁异常,当确定任务发生死锁异常时,释放任务占用的资源,继续执行任务,当确定任务发生死循环异常时,修改任务的循环体的代码或修改任务的循环体中的数据变量的值,继续执行任务。本发明实施例用于任务异常的处理。

Description

一种任务异常的处理方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种任务异常的处理方法及装置。
背景技术
操作系统(Operating System,OS)是管理和控制计算机硬件与软件资源的计算机程序。在操作系统中可以同时运行多个小的程序模块,每一个程序模块可以称之为一个任务。多个任务可以按照执行的先后顺序被添加到任务链表中,然后处理器按照任务在任务链表中的先后位置顺序执行任务,在任务的运行过程中,可能由于一些不可预知的原因,执行了非法指令,导致该任务无法正常进行,进而引起系统出现混乱或者崩溃。
出现异常的任务一般有两种情况:死循环和死锁。死循环指的是无法靠自身的控制终止的循环。当一个任务在运行过程中,由于运行了一些非法指令,而使程序中的循环判断条件一直无法得到满足,循环一直进行,这时就出现了死循环。死锁指的是两个或两个以上的任务在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外部操作,它们都将无法继续运行下去,而处于一直等待的状态。一般情况下,由于任务链表中的任务是顺序执行的,如果一个任务出现死循环或者死锁,将会导致后面的任务无法得到执行,严重时可能导致整个系统故障。
现有技术中,当处理器当前执行的任务出现异常时,处理器无法对该异常任务进行自动排错处理,而是会输出针对该异常任务的调用栈信息,然后程序员会根据该异常任务的调用栈信息对异常任务的出错位置进行定位,并进行排错处理,这样会耗费较多的人力物力。而且,当该异常任务较严重时,如果程序员无法对异常任务进行及时处理,可能会导致系统出现混乱或者崩溃,进而导致处理器对系统进行重启,影响正常任务的执行。
发明内容
本发明的实施例提供一种任务异常的处理方法及装置,能够对任务的异常进行自动排错处理,防止系统出现混乱或者崩溃,节约人力和物力。
为达到上述目的,本发明的实施例采用如下技术方案:
本发明实施例一方面提供一种任务异常的处理方法,用于处理器,包括:
若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常;
当确定所述任务发生死锁异常时,释放所述任务占用的资源,继续执行所述任务;
当确定所述任务发生死循环异常时,修改所述任务的循环体的代码或修改所述任务的循环体中的数据变量的值,继续执行所述任务。
可选的,在所述若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常之前,所述方法还包括:
获取所述任务的数据状态信息,所述数据状态信息包括至少两个寄存器信息,所述至少两个寄存器信息为所述任务发生死循环异常或死锁异常后,所述处理器继续执行所述任务时,在第一预设时长中每隔第二预设时长记录的所述处理器的寄存器状态信息;
所述若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常包括:
若当前任务的执行时间大于预设执行时间时,根据所述数据状态信息,确定所述任务发生死循环异常或死锁异常。
可选的,所述若当前任务的执行时间大于预设执行时间时,根据所述数据状态信息,确定所述任务发生死循环异常或死锁异常包括:
若所述数据状态信息中包括的至少两个寄存器信息完全相同时,确定所述任务发生死锁异常;
若所述数据状态信息中包括的至少两个寄存器信息不完全相同时,确定所述任务发生死循环异常。
可选的,在所述获取所述任务的数据状态信息之前,所述方法还包括:
若当前任务的执行时间大于预设执行时间时,将所述任务从任务链表中删除,并添加到恢复链表中,所述恢复链表是用于存储出现异常的任务的链表。
可选的,所述当确定所述任务发生死锁异常时,释放所述任务占用的资源,继续执行所述任务包括:
当确定所述任务发生死锁异常时,释放所述任务占用的资源;
第三预设时长后,在所述恢复链表中执行所述任务;
当所述任务没有再次发生死锁异常时,将所述任务从恢复链表中删除,并重新添加到任务链表中,继续执行所述任务;
当所述任务再次发生死锁异常时,再次释放所述任务占用的资源,并且在所述第三预设时长后,再次在所述恢复链表中执行所述任务。
可选的,所述当确定所述任务发生死循环异常时,修改所述任务的循环体的代码或修改所述任务的循环体中的数据变量的值,继续执行所述任务包括:
当确定所述任务发生死循环异常时,根据所述任务的特征信息和监控信息,判断所述任务的循环体的代码是否出现错误;所述特征信息记录了所述循环体的基准值和修正值;所述基准值为所述循环体中数据变量的初始值;所述修正值为所述循环体满足终止条件时,所述循环体中数据变量的值;所述监控信息记录了所述任务的执行过程中所述循环体中的数据变量的值的变化信息;
若所述任务的循环体的代码出现错误,根据所述特征信息、所述监控信息和所述数据状态信息,修改所述任务的循环体的代码,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务;
若所述任务的循环体的代码未出现错误,根据所述数据状态信息和所述特征信息,修改所述任务的循环体中的数据变量的值,使得所述数据变量的值满足所述循环体的终止条件,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务。
可选的,在所述将所述任务从任务链表中删除,并添加到恢复链表中之前,所述方法还包括:
将所述任务添加到任务链表中;
扫描所述任务的代码,获取所述任务的所述特征信息,所述特征信息还包括预设执行时间,所述预设执行时间为所述任务的正常执行时间;
执行所述任务;
获取所述任务的所述监控信息和所述任务的执行时间。
本发明的实施例另一方面提供一种任务异常的处理装置,包括:
确定单元,用于若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常;
第一处理单元,用于当所述确定单元确定所述任务发生死锁异常时,释放所述任务占用的资源,继续执行所述任务;
第二处理单元,用于当所述确定单元确定所述任务发生死循环异常时,修改所述任务的循环体的代码或修改所述任务的循环体中的数据变量的值,继续执行所述任务。
可选的,所述任务异常的处理装置还包括:
获取单元,用于获取所述任务的数据状态信息,所述数据状态信息包括至少两个寄存器信息,所述至少两个寄存器信息为所述任务发生死循环异常或死锁异常后,所述处理器继续执行所述任务时,在第一预设时长中每隔第二预设时长记录的所述处理器的寄存器状态信息;
所述确定单元具体用于:
若当前任务的执行时间大于预设执行时间时,根据所述数据状态信息,确定所述任务发生死循环异常或死锁异常。
可选的,所述确定单元具体用于:
若所述数据状态信息中包括的至少两个寄存器信息完全相同时,确定所述任务发生死锁异常;
若所述数据状态信息中包括的至少两个寄存器信息不完全相同时,确定所述任务发生死循环异常。
可选的,所述任务异常的处理装置还包括:
添加单元,用于若当前任务的执行时间大于预设执行时间时,将所述任务从任务链表中删除,并添加到恢复链表中,所述恢复链表是用于存储出现异常的任务的链表;
可选的,所述第一处理单元具体用于:
当确定所述任务发生死锁异常时,释放所述任务占用的资源;
第三预设时长后,在所述恢复链表中执行所述任务;
当所述任务没有再次发生死锁异常时,将所述任务从恢复链表中删除,并重新添加到任务链表中,继续执行所述任务;
当所述任务再次发生死锁异常时,再次释放所述任务占用的资源,并且在所述第三预设时长后,再次在所述恢复链表中执行所述任务。
可选的,所述第二处理单元具体用于:
当确定所述任务发生死循环异常时,根据所述任务的特征信息和监控信息,判断所述任务的循环体的代码是否出现错误;所述特征信息记录了所述循环体的基准值和修正值;所述基准值为所述循环体中数据变量的初始值;所述修正值为所述循环体满足终止条件时,所述循环体中数据变量的值;所述监控信息记录了所述任务的执行过程中所述循环体中的数据变量的值的变化信息;
若所述任务的循环体的代码出现错误,根据所述特征信息、所述监控信息和所述数据状态信息,修改所述任务的循环体的代码,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务;
若所述任务的循环体的代码未出现错误,根据所述数据状态信息和所述特征信息,修改所述任务的循环体中的数据变量的值,使得所述数据变量的值满足所述循环体的终止条件,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务。
本发明实施例提供的任务异常的处理方法及装置,用于处理器,包括:若当前任务的执行时间大于预设执行时间时,确定任务发生死循环异常或死锁异常,当确定任务发生死锁异常时,释放任务占用的资源,继续执行任务,当确定任务发生死循环异常时,修改任务的循环体的代码或修改任务的循环体中的数据变量的值,继续执行任务。相较于现有技术中需要程序员对出现异常的任务进行排错处理,然后指示处理器继续执行处理后的任务,本发明实施例提供的方案在确定任务发生死循环异常或死锁异常后,处理器可以自动的并且有针对性的对死循环异常或死锁异常进行排错处理,然后继续执行处理后的任务。这样不需要程序员的参与,就可以对发生死循环异常和死锁异常的任务进行自动排错处理,从而防止了系统出现混乱或者崩溃,节约了人力和物力。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种任务异常的处理方法流程图;
图2为本发明实施例提供的一种确定任务异常情况流程图;
图3为本发明另一实施例提供的一种任务异常的处理方法流程图;
图4为本发明实施例提供的一种任务异常的处理装置框图;
图5为本发明另一实施例提供的一种任务异常的处理装置框图;
图6为本发明又一实施例提供的一种任务异常的处理装置框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种任务异常的处理方法,用于处理器,如图1所示,所述方法包括:
步骤101、若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常。
实际应用中,所述预设执行时间可以根据具体情况进行设定,示例的,所述预设执行时间可以为任务正常执行的时间,即正常情况下执行完整个任务所需的时间。具体的,处理器在执行任务时,首先会将任务添加到任务链表中,然后扫描任务的整个代码,并根据扫描结果获得正常情况下执行完整个任务所需的时间,该时间即为预设执行时间。
在确认任务的执行时间是否大于预设执行时间时,若一个任务的预设执行时间为T1,当该任务在运行过程中的累计的执行时间到达T1时,该任务还没有运行结束,则可知该任务实际的执行时间大于预设执行时间,此时可以认为该任务出现异常,一般情况下,任务发生异常有两种情况:死循环异常和死锁异常。死循环异常指的是任务中的循环体无法靠自身的控制终止循环的现象。这种情况的出现一般是由于任务在执行的过程中执行了一些非法指令,而导致程序中的循环判断条件一直无法得到满足。死锁异常指的是两个或两个以上的任务在执行过程中,因争夺资源而造成的一种互相等待的现象。示例的,当前有A任务和B任务同时执行,并且A任务和B任务都需要获得资源C和资源D,此时A任务已经获取了资源C,等待资源D,B任务已经获取了资源D,等待资源C,由于资源占用是互斥的,A任务无法获取资源D会一直等待,B任务无法获取资源C也会一直等待,导致A任务和B任务都无法继续执行下去,这时A任务和B任务陷入死锁状态。
由于任务陷入死循环和陷入死锁时的异常原理不同,所以与之对应的处理方法也不同。在确认任务发生死锁异常和死循环异常后,可以根据不同的情况对任务进行处理。
步骤102、当确定任务发生死锁异常时,释放任务占用的资源,继续执行任务。
当确定任务发生死锁异常时,表示该任务执行过程中所需资源被别的任务部分占用或全部占用,并且该任务也可能占用了别的任务在执行过程中所需的部分资源或全部资源。由于一个任务在执行完毕后会释放掉之前获取的全部资源,所以在相关任务都无法执行下去的情况下,该任务可以先释放掉占用的资源,等待别的任务执行完毕后,重新获取该任务在执行过程中所需的全部资源,继续执行该任务。
步骤103、当确定任务发生死循环异常时,修改任务的循环体的代码或修改任务的循环体中的数据变量的值,继续执行任务。
当确定任务发生死循环异常时,可以根据在向任务链表添加任务的过程中记录的循环体的基准值和修正值,以及在任务链表中执行任务的过程中记录的数据变量的值的变化信息,来综合判断任务的循环体的代码是否出现错误,若发现代码出错,对出错的代码进行修改;若未发现代码出错,利用数据变量的返回值和修正值对任务的循环体中的数据变量的值进行修改,以满足循环体的终止条件,跳出该循环体。
这样一来,相较于现有技术中需要程序员对出现异常的任务进行排错处理,然后指示处理器继续执行处理后的任务,本发明实施例提供的方案在确定任务发生死循环异常或死锁异常后,处理器可以自动的并且有针对性的对死循环异常或死锁异常进行排错处理,然后继续执行处理后的任务。这样不需要程序员的参与,就可以对发生死循环异常和死锁异常的任务进行自动排错处理,从而防止了系统出现混乱或者崩溃,节约了人力和物力。
进一步的,在若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常之前,所述方法还包括:获取任务的数据状态信息,数据状态信息包括至少两个寄存器信息,至少两个寄存器信息为任务发生死循环异常或死锁异常后,处理器继续执行任务时,在第一预设时长中每隔第二预设时长记录的处理器的寄存器状态信息。
若当前任务的执行时间大于预设执行时间时,确定任务发生死循环异常或死锁异常包括:若当前任务的执行时间大于预设执行时间时,根据数据状态信息,确定任务发生死循环异常或死锁异常。
需要说明的是,所述第一预设时长和所述第二预设时长都为预先设定的值。优选的,所述第一预设时长可以设置为所述任务中循环体的预设执行时间的2或3倍,一般认为这个时间段里所获得的寄存器信息已经记录了任务中出错处代码的信息,即根据这个时间段里所获得的寄存器信息已经能够判断出任务发生死循环异常还是死锁异常。当然也可以将第一预设时长设置为其它数值,本发明实施例对此不做限定,只要在第一预设时长里所获得的寄存器信息能够确定任务发生死循环异常还是死锁异常即可。优选的,所述第二预设时长可以设定为处理器的调度周期,一般处理器的调度周期为10ms。
所述寄存器状态信息一般包括PC(Program Counter,程序计数器)指针信息、数据变量的返回值、数据变量的地址信息、上一行代码的相关信息等。
进一步的,若当前任务的执行时间大于预设执行时间时,根据数据状态信息,确定任务发生死循环异常或死锁异常包括:若数据状态信息中包括的至少两个寄存器信息完全相同时,确定任务发生死锁异常;若数据状态信息中包括的至少两个寄存器信息不完全相同时,确定任务发生死循环异常。
由于一个程序发生死锁异常时,表现为程序执行到死锁处时,代码的运行停滞不前,所以在第一预设时长中每隔第二预设时长记录的多个处理器的寄存器状态信息应该是完全相同的。然而当一个程序发生死循环异常时,表现为程序一直在循环执行,这时在第一预设时长中每隔第二预设时长记录的多个处理器的寄存器状态信息不会完全相同,可能会是PC指针信息、数据变量的返回值、数据变量的地址信息、上一行代码的相关信息等中的一个或者多个信息不相同,这样根据所获得的寄存器信息是否完全相同就可以确定任务发生死循环异常还是死锁异常。
进一步的,在获取所述任务的数据状态信息之前,方法还包括:若当前任务的执行时间大于预设执行时间时,将任务从任务链表中删除,并添加到恢复链表中,恢复链表是用于存储出现异常的任务的链表。
所述恢复链表为新创建的一个任务链表,用于存放出现异常的任务。当确定任务发生死循环异常或死锁异常后,有两种处理方式,其一是在当前的任务链表中对出现异常的任务进行排错处理,其二是将任务从任务链表中删除,并添加到恢复链表中,在恢复链表对出现异常的任务进行排错处理。虽然这两种方式都是可行的,但是优选的是后一种方式。因为采用前一种方式,即在当前的任务链表中对出现异常的任务进行排错处理,就必须等到当前任务排错处理成功且被正常执行完毕后,任务链表中的后续任务才可以执行,这样需要较长的等待时间,会影响处理器处理任务的效率。若采用后一种方式,创建一个恢复链表,将出现异常的任务从当前的任务链表中删除后,当前的任务链表中的后续任务就可以正常执行了,无需花费等待时间,这样可以提高处理器处理任务的效率。
进一步的,当确定任务发生死锁异常时,释放任务占用的资源,继续执行任务包括:当确定任务发生死锁异常时,释放任务占用的资源;第三预设时长后,在恢复链表中执行任务;当任务没有再次发生死锁异常时,将任务从恢复链表中删除,并重新添加到任务链表中,继续执行任务;当任务再次发生死锁异常时,再次释放任务占用的资源,并且在第三预设时长后,再次在恢复链表中执行任务。
进一步的,当确定任务发生死循环异常时,修改任务的循环体的代码或修改任务的循环体中的数据变量的值,继续执行任务包括:当确定任务发生死循环异常时,根据任务的特征信息和监控信息,判断任务的循环体的代码是否出现错误;特征信息记录了循环体的基准值和修正值;基准值为循环体中数据变量的初始值;修正值为循环体满足终止条件时,循环体中数据变量的值;监控信息记录了任务的执行过程中循环体中的数据变量的值的变化信息。
若任务的循环体的代码出现错误,根据特征信息、监控信息和数据状态信息,修改任务的循环体的代码,得到修改后的任务;将修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行任务。
若任务的循环体的代码未出现错误,根据数据状态信息和特征信息,修改任务的循环体中的数据变量的值,使得数据变量的值满足循环体的终止条件,得到修改后的任务。
将修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行任务。
当确定任务发生死循环异常时,可以根据特征信息中记录的循环体的基准值和修正值,以及监控信息中记录的数据变量的值的变化信息,来综合判断任务的循环体的代码是否出现错误,若发现代码出错,对出错的代码进行修改;若未发现代码出错,利用数据状态信息中的数据变量的返回值和特征信息中的修正值对任务的循环体中的数据变量的值进行修改,以满足循环体的终止条件,跳出该循环体。
在实际应用中,还有可能存在既不属于死锁异常也不属于死循环异常的情况,即数据状态信息不完全相同时,可能是死循环异常,也有可能是一些未知错误类型,在这种情况下,我们还可以判断当获得的任务数据状态信息不完全相同时,该任务是否发生死循环异常。此时可以通过PC指针的地址信息进行判断。具体方法为:首先获取所有数据状态信息中的PC指针的地址,然后比较相邻两次PC指针的地址值的大小,若后一个PC指针的地址值小于或者等于前一个PC指针的地址值,则可判断出该任务发生死循环异常。原理为:首先PC指针指向的是当前程序的运行点,它里面的值是当前程序的运行点的地址,一个程序模块中,从上往下代码的PC指针的地址是递增的,即如果程序一直往下运行,则PC指针的地址应该是一直增大的,如果当后一个PC指针的地址值小于或者等于前一个PC指针的地址值时,说明程序又回到了之前的代码行进行了执行,即程序进行了循环。进而可以确定任务发生死循环异常。示例的,假设当前有5组数据状态信息,首先获取到这5组数据状态信息中的PC指针的地址,假设分别为{0002,0005,0009,0003,0007},然后分别比较获取的相邻两个PC指针的地址值的大小,由于PC指针的地址值0003小于PC指针的地址值0009,所以可以判断在代码运行到PC指针的地址值为0003和PC指针的地址值为0009之间时,代码进行了一次循环,进而说明该段代码进行了循环执行,此时可确定任务发生死循环异常。
进一步的,在将任务从任务链表中删除,并添加到恢复链表中之前,该方法还包括:将任务添加到任务链表中;扫描任务的代码,获取任务的特征信息,所述特征信息还包括预设执行时间,所述预设执行时间为任务的正常执行时间;执行任务;获取任务的监控信息和任务的执行时间。
在实际应用中,由于操作系统中有很多任务,每个任务的优先级不同,所以一般将任务按照优先级从高到低的顺序添加到任务链表中,即优先级高的任务添加到任务链表的靠前部分,优先级低的任务添加到任务链表的靠后部分,然后处理器顺序执行任务链表中的任务即可。在将任务添加到任务链表的过程中,扫描任务的代码,获取任务的特征信息,即记录任务中每一个循环体的基准值和修正值,以及循环体中包含函数的权限信息等,所述特征信息还包括预设执行时间,所述预设执行时间为任务的正常执行时间。然后执行所述任务,获取任务的监控信息和任务的执行时间,所述监控信息为在执行任务的过程中,记录的任务的数据变量的值的变化信息,以便之后利用特征信息和监控信息找出程序中出错的代码。所述任务的执行时间为任务当前实际执行时间。当任务当前的执行时间大于预设执行时间时,说明该任务在预设执行时间时没有执行完毕,此时可以确定该任务发生死锁异常或者死循环异常。
在实际应用中,处理器还包括定时器,任务还设置有累计变量,任务未执行时,累计变量为0,在任务的执行过程中,定时器每发生一次中断,累计变量加1,定时器的中断时间为处理器的调度周期。首先获取任务的累计变量的值;然后判断任务的累计变量的值是否大于预设数值,所述预设数值为任务的预设执行时间与中断时间的比值;当任务的累计变量大于预设数值时,确定任务发生死循环异常或死锁异常。
需要说明的是,所述定时器可以为硬件定时器,也可以为软件定时器。由于硬件定时器的可靠性更高,所以优选的是硬件定时器,例如可以是看门狗定时器。定时器都设有中断模式,即每隔一个固定时间段发出一个信号,此信号称为中断信号,本发明实施例中采用处理器的调度时间作为定时器的中断时间。一般情况下,处理器的调度周期为10ms。
累计变量可理解为一个计数变量,示例的,当定时器发生一次中断,累计变量加1,此时累计变量为1,说明此时任务已经被执行了10ms,当定时器再发生一次中断,累计变量再次加1,此时累计变量为2,说明此时任务已经被执行了20ms,由此可知,任务当前的执行时间为当前的累计变量值与定时器的中断时间的乘积,而预设执行时间为预设数值与定时器的中断时间的乘积。进而可知,当任务的累计变量大于预设数值时,确定任务发生死循环异常或死锁异常,也就是当任务当前的执行时间大于预设执行时间时,确定任务发生死循环异常或死锁异常。
本发明实施例提供的任务异常的处理方法,用于处理器,包括:若当前任务的执行时间大于预设执行时间时,确定任务发生死循环异常或死锁异常,当确定任务发生死锁异常时,释放任务占用的资源,继续执行任务,当确定任务发生死循环异常时,修改任务的循环体的代码或修改任务的循环体中的数据变量的值,继续执行任务。相较于现有技术中需要程序员对出现异常的任务进行排错处理,然后指示处理器继续执行处理后的任务,本发明实施例提供的方案在确定任务发生死循环异常或死锁异常后,处理器可以自动的并且有针对性的对死循环异常或死锁异常进行排错处理,然后继续执行处理后的任务。这样不需要程序员的参与,就可以对发生死循环异常和死锁异常的任务进行自动排错处理,从而防止了系统出现混乱或者崩溃,节约了人力和物力。
本发明另一实施例提供一种任务异常的处理方法,如图2所示,该方法步骤包括:
步骤201、初始化定时器。执行步骤202。
在本步骤中,初始化定时器包括两个部分,第一部分是获取处理器的调度周期,将处理器的调度周期作为定时器的中断时间。示例的,处理器的调度周期可以为10ms。第二部分是将定时器的工作模式设置为中断模式。
步骤202、创建恢复链表。执行步骤203。
恢复链表用于存放出现异常的任务。
步骤203、将任务添加到任务链表中。执行步骤204。
步骤204、扫描任务的代码,获取任务的特征信息。执行步骤205。
所述特征信息可以包括任务中每一个循环体的基准值和修正值,以及循环体中包含函数的权限信息等。其中基准值为循环体中数据变量的初始值;修正值为循环体满足终止条件时,循环体中数据变量的值。以下面的程序模块1为例进行说明。
for(int x=0,y=1;(x!=3||y!=7);)//数据变量x的初始值为0,数据变量y的初始值为1,当数据变量x的值不等于3,或者数据变量y的值不等于7时,循环一直进行
在程序模块1包含的循环体中,包含数据变量x和数据变量y,数据变量x的初始值为0,数据变量y的初始值为1,所以特征信息中的基准值分别为0和1,由上述代码可知,数据变量x的值等于3,且数据变量y的值等于7时,循环停止,所以数据变量x和数据变量y的修正值分别为3和7。
步骤205、执行任务,获取任务的监控信息。执行步骤206。
所述监控信息记录了任务的数据变量的值的变化信息。依然以程序模块1为例进行说明,当每一次循环过程中,数据变量x进行加1操作,数据变量y进行加2操作后,数据变量x和数据变量y的值都发生了变化,此时监控信息会记录每一次数据变量x和数据变量y的值的变化信息。
步骤206、获取任务的执行时间和预设执行时间。执行步骤207。
所述任务的预设执行时间为正常情况下执行完整个任务所需的时间。
步骤207、判断任务当前的执行时间是否大于预设执行时间。若任务当前的执行时间大于预设执行时间,执行步骤208;若任务当前的执行时间小于或等于预设执行时间,执行步骤209。
依然以程序模块1为例进行说明,假设包含程序模块1的任务在正常情况下执行完毕所需时间为T2,即该任务的预设执行时间为T2,若该任务当前的执行时间大于T2,则可确定该任务出现异常。
步骤208、将任务从任务链表中删除,并添加到恢复链表中。执行步骤210。
当确定任务出现异常后,如果直接在任务链表中对出现异常的任务进行排错处理,那么任务链表中的后续任务就必须等到当前任务排错处理结束且被正常执行后才可以进行执行,这样需要较长的等待时间,会影响处理器处理任务的效率。而将出现异常的任务从任务链表中删除后,任务链表中的后续任务就可以继续执行了,这样无需花费等待时间,提高了处理器处理任务的效率。然后将删除的任务添加到恢复链表中,在恢复链表中对该出现异常的任务进行排错处理,最后将排错处理后的任务重新添加到之前的任务链表中即可。
步骤209、执行下一个任务。
步骤210、将恢复链表中的任务执行第一预设时长,获取任务的数据状态信息。执行步骤211。
所述数据状态信息包括至少两个寄存器信息,至少两个寄存器信息为任务出现异常后,处理器继续执行任务时,在第一预设时长中每隔第二预设时长记录的处理器的寄存器状态信息。所述第一预设时长可以设置为所述任务中循环体的预设执行时间的2或3倍,所述第二预设时长可以设定为处理器的调度周期,一般处理器的调度周期为10ms。所述寄存器状态信息一般包括PC指针信息、数据变量的返回值、数据变量的地址信息、上一行代码的相关信息等。
步骤211、判断任务的数据状态信息是否完全相同。若任务的数据状态信息完全相同,执行步骤212;若数据状态信息不完全相同,执行步骤213。
依然以程序模块1为例进行说明,假设该循环体的正常执行时间为30ms,现在将第一预设时长设置为60ms,第二预设时长为10ms,在第一预设时长中每隔第二预设时长记录一次处理器的寄存器状态信息,则可以得到6组数据状态信息,如果这6组数据状态信息完全相同,则可确定任务发生死锁异常;如果这6组数据状态信息不完全相同,则可确定任务发生死循环异常。
步骤212、确定任务发生死锁异常。
示例的,假设上面得到的6组数据状态信息中包含的PC指针信息和数据变量的地址信息分别为(0002;1001,1002),(0002;1001,1002),(0002;1001,1002),(0002;1001,1002),(0002;1001,1002),(0002;1001,1002),其中0002代表PC指针的地址信息,1001代表数据变量x的地址信息,1002代表数据变量y的地址信息。由于这6组数据状态信息完全相同,即PC指针信息和数据变量的地址信息完全没变,此时还需考虑数据状态信息中记录的别的信息,如果所有信息都相同,则说明此时代码运行处于停滞不前的状态,则可以确定该任务发生死锁异常。
步骤213、确定任务发生死循环异常。
示例的,假设上面得到的6组数据状态信息中包含的PC指针信息和数据变量的地址信息分别为(0001;1001,1002),(0003;1001,1002),(0002;1001,1002),(0001;1001,1002),(0003;1001,1002),(0002;1001,1002),由于这6组数据状态信息中PC指针的地址一直在变动,即6组数据状态信息不完全相同,说明此时代码在不断的运行过程中,则可确定该任务发生死循环异常。
本发明实施例提供一种任务异常的处理方法,如图3所示,当确定任务发生死循环异常或死锁异常后,该方法步骤还包括:
步骤214、当确定任务发生死锁异常时,释放任务占用的资源。执行步骤215。
当确定任务发生死锁异常时,表示该任务执行过程中所需资源被别的任务部分占用或全部占用,并且该任务也可能占用了别的任务在执行过程中所需的部分资源或全部资源。由于一个任务在执行完毕后会释放掉之前获取的全部资源,所以在相关任务都无法执行下去的情况下,该任务可以先释放掉占用的资源,等待别的任务执行完毕后,重新获取该任务在执行过程中所需的全部资源。
步骤215、第三预设时长后,在恢复链表中执行任务。执行步骤216。
所述第三预设时长为预先设定的值。本发明实施例对第三预设时长的具体数值不做限定。优选的,所述第三预设时长可以设定为处理器的调度周期。在实际应用中,释放掉任务占用的资源后,可以等待一个处理器的调度周期后,执行该任务,获取该任务所需的全部资源。
步骤216、判断任务是否发生死锁异常。若任务发生死锁异常,执行步骤214,若任务没有发生死锁异常,执行步骤220。
执行任务时,尝试获取该任务所需的全部资源,如果成功获取到该任务所需的全部资源,说明此时该任务已经解锁,即该任务可以被正常执行,此时可以将任务从恢复链表中删除,并重新添加到任务链表中等待执行即可;如果没有获取到该任务所需的全部资源,则说明该任务依然处于死锁状态,这时需要重新释放掉占用的资源,再次等待一个处理器的调度周期的时间,然后执行该任务,再次尝试获取该任务所需的全部资源,以此进行循环,直到该任务获取到所需的全部资源,死锁解除为止。
步骤217、当确定任务发生死循环异常时,获取任务的特征信息和监控信息。
所述特征信息可以包括任务中每一个循环体的基准值和修正值,以及循环体中包含函数的权限信息等。以程序模块1为例进行说明,数据变量x的基准值为0,数据变量y的基准值为1,数据变量x的修正值为3,数据变量y的修正值为7,假设循环体中的函数g的权限是只能调用数据变量x,不能改变数据变量x的值。所述监控信息记录了循环体在执行的过程中,每一步中数据变量x和数据变量y的值的变化信息。
步骤218、根据任务的特征信息和监控信息,判断任务的循环体的代码是否出现错误。若任务的循环体的代码出现错误,执行步骤219;若任务的循环体的代码未出现错误,执行步骤220。
由于监控信息记录了任务在执行过程中每个数据变量的变化信息,而特征信息记录了任务中循环体的基准值和修正值,以及相关的权限信息,这些信息综合考虑后,可以判断出每个数据变量的变化是否正确合法,所以可以根据监控信息和特征信息来判断任务中的代码是否出错。
以程序模块1为例进行说明,正常情况下,该循环体第一次循环后,数据变量x的值为1,数据变量y的值为3;第二次循环后,数据变量x的值为2,数据变量y的值为5;第三次循环后,数据变量x的值为3,数据变量y的值为7,然后满足终止条件,退出该循环。在异常情况下,假设函数g调用数据变量x时,非法的对数据变量x进行了加1操作,这样导致该循环体第一次循环后,数据变量x的值为2,数据变量y的值为3;第二次循环后,数据变量x的值为4,数据变量y的值为5;第三次循环后,数据变量x的值为6,数据变量y的值为7,不满足终止条件,循环依然继续,第四次循环后,数据变量x的值为8,数据变量y的值为9,依然不满足循环终止条件,随着循环的进行,数据变量x的值和数据变量y的值越变越大,一直也无法满足循环终止条件,此时确定该循环体发生死循环异常。这时可以根据特征信息和监控信息判断该循环体中的代码是否出错,具体的,在循环体中,执行完第一句代码时,在监控信息里记录了数据变量x加了1,在特征信息里记录了此句代码的合法操作就是对数据变量x加1,则可以判断此句代码正确。下面接着执行第二句代码,执行完第二句代码时,在监控信息里记录了数据变量x加了1,在特征信息里记录了此句代码的合法操作是函数g调用数据变量x,不改变数据变量x的值,从这两个信息可以判断出函数g对数据变量x进行加1操作属于非法操作,进而判定第二句代码出错。
假设在上例中,函数g没有对数据变量进行非法的加1操作,即在执行完第二句代码时,在监控信息里记录了数据变量x的值没有变化,在特征信息里记录了此句代码的合法操作是函数g调用数据变量x,不改变数据变量x的值,从这两个信息可以判断出第二句代码正确执行,用同样的方法判断出第三句代码也正确执行了,但是该循环体依然陷入了死循环,这时可能是由于一些别的错误,例如硬件的电位跳变,导致程序陷入死循环,然而监控信息只能监控软件更改,对于硬件更改无法监控,所以这种情况下利用特征信息和监控信息无法判断出代码错误。
步骤219、根据特征信息、监控信息和数据状态信息,修改任务的循环体的代码,得到修改后的任务,执行步骤221。
以步骤218中的例子进行说明,当判断出循环体中的第二句代码出错,即函数g对数据变量x进行了非法的加1操作,对应修改时,在函数g中对数据变量x进行减1操作即可。
步骤220、根据数据状态信息和特征信息,修改任务的循环体中的数据变量的值,使得数据变量的值满足循环体的终止条件,得到修改后的任务。执行步骤221。
以步骤218中的例子进行说明,当无法判断出循环体中的代码出错时,利用特征信息中的修正值对数据状态信息中数据变量的返回值进行修改即可,具体的,由于该循环体中数据变量x的修正值为3,数据变量y的修正值为7,则将3赋给数据变量x,将7赋给数据变量y,则可以满足循环终止条件,退出该循环。
步骤221、将任务从恢复链表中删除,并重新添加到任务链表中。
将修改后的任务从恢复链表中删除,并重新添加到任务链表的尾部,等待执行即可。
本发明实施例提供的任务异常的处理方法,用于处理器,包括:若当前任务的执行时间大于预设执行时间时,确定任务发生死循环异常或死锁异常,当确定任务发生死锁异常时,释放任务占用的资源,继续执行任务,当确定任务发生死循环异常时,修改任务的循环体的代码或修改任务的循环体中的数据变量的值,继续执行任务。相较于现有技术中需要程序员对出现异常的任务进行排错处理,然后指示处理器继续执行处理后的任务,本发明实施例提供的方案在确定任务发生死循环异常或死锁异常后,处理器可以自动的并且有针对性的对死循环异常或死锁异常进行排错处理,然后继续执行处理后的任务。这样不需要程序员的参与,就可以对发生死循环异常和死锁异常的任务进行自动排错处理,从而防止了系统出现混乱或者崩溃,节约了人力和物力。
本发明另一实施例提供一种任务异常的处理装置40,如图4所示,包括:
确定单元401,用于若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常;
第一处理单元402,用于当所述确定单元401确定所述任务发生死锁异常时,释放所述任务占用的资源,继续执行所述任务;
第二处理单元403,用于当所述确定单元401确定所述任务发生死循环异常时,修改所述任务的循环体的代码或修改所述任务的循环体中的数据变量的值,继续执行所述任务。
这样一来,相较于现有技术中需要程序员对出现异常的任务进行排错处理,然后指示处理器继续执行处理后的任务,本发明实施例提供的方案在确定任务发生死循环异常或死锁异常后,处理器可以自动的并且有针对性的对死循环异常或死锁异常进行排错处理,然后继续执行处理后的任务。这样不需要程序员的参与,就可以对发生死循环异常和死锁异常的任务进行自动排错处理,从而防止了系统出现混乱或者崩溃,节约了人力和物力。
进一步的,如图5所示,任务异常的处理装置40还包括:
获取单元404,用于获取所述任务的数据状态信息,所述数据状态信息包括至少两个寄存器信息,所述至少两个寄存器信息为所述任务发生死循环异常或死锁异常后,所述处理器继续执行所述任务时,在第一预设时长中每隔第二预设时长记录的所述处理器的寄存器状态信息;
确定单元401具体用于:若当前任务的执行时间大于预设执行时间时,根据所述数据状态信息,确定所述任务发生死循环异常或死锁异常。
进一步的,确定单元401具体用于:若所述数据状态信息中包括的至少两个寄存器信息完全相同时,确定所述任务发生死锁异常;若所述数据状态信息中包括的至少两个寄存器信息不完全相同时,确定所述任务发生死循环异常。
进一步的,如图6所示,任务异常的处理装置40还包括:
添加单元405,用于若当前任务的执行时间大于预设执行时间时,将所述任务从任务链表中删除,并添加到恢复链表中,所述恢复链表是用于存储出现异常的任务的链表。
进一步的,第一处理单元402具体用于:当确定所述任务发生死锁异常时,释放所述任务占用的资源;第三预设时长后,在所述恢复链表中执行所述任务;当所述任务没有再次发生死锁异常时,将所述任务从恢复链表中删除,并重新添加到任务链表中,继续执行所述任务;当所述任务再次发生死锁异常时,再次释放所述任务占用的资源,并且在所述第三预设时长后,再次在所述恢复链表中执行所述任务。
进一步的,第二处理单元403具体用于:当确定所述任务发生死循环异常时,根据所述任务的特征信息和监控信息,判断所述任务的循环体的代码是否出现错误;所述特征信息记录了所述循环体的基准值和修正值;所述基准值为所述循环体中数据变量的初始值;所述修正值为所述循环体满足终止条件时,所述循环体中数据变量的值;所述监控信息记录了所述任务的执行过程中所述循环体中的数据变量的值的变化信息;若所述任务的循环体的代码出现错误,根据所述特征信息、所述监控信息和所述数据状态信息,修改所述任务的循环体的代码,得到修改后的任务;将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务;若所述任务的循环体的代码未出现错误,根据所述数据状态信息和所述特征信息,修改所述任务的循环体中的数据变量的值,使得所述数据变量的值满足所述循环体的终止条件,得到修改后的任务;将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务。
本发明实施例提供的任务异常的处理装置,包括:若当前任务的执行时间大于预设执行时间时,利用确定单元确定所述任务发生死循环异常或死锁异常,当确定单元确定任务发生死锁异常时,第一处理单元释放任务占用的资源,继续执行任务,当确定单元确定任务发生死循环异常时,第二处理单元修改任务的循环体的代码或修改任务的循环体中的数据变量的值,继续执行任务。相较于现有技术中需要程序员对出现异常的任务进行排错处理,然后指示处理器继续执行处理后的任务,本发明实施例提供的方案在确定任务发生死循环异常或死锁异常后,处理器可以自动的并且有针对性的对死循环异常或死锁异常进行排错处理,然后继续执行处理后的任务。这样不需要程序员的参与,就可以对发生死循环异常和死锁异常的任务进行自动排错处理,从而防止了系统出现混乱或者崩溃,节约了人力和物力。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (13)

1.一种任务异常的处理方法,用于处理器,其特征在于,包括:
若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常;
当确定所述任务发生死锁异常时,释放所述任务占用的资源,继续执行所述任务;
当确定所述任务发生死循环异常时,修改所述任务的循环体的代码或修改所述任务的循环体中的数据变量的值,继续执行所述任务。
2.根据权利要求1所述的方法,其特征在于,在所述若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常之前,所述方法还包括:
获取所述任务的数据状态信息,所述数据状态信息包括至少两个寄存器信息,所述至少两个寄存器信息为所述任务发生死循环异常或死锁异常后,所述处理器继续执行所述任务时,在第一预设时长中每隔第二预设时长记录的所述处理器的寄存器状态信息;
所述若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常包括:
若当前任务的执行时间大于预设执行时间时,根据所述数据状态信息,确定所述任务发生死循环异常或死锁异常。
3.根据权利要求2所述的方法,其特征在于,
所述若当前任务的执行时间大于预设执行时间时,根据所述数据状态信息,确定所述任务发生死循环异常或死锁异常包括:
若所述数据状态信息中包括的至少两个寄存器信息完全相同时,确定所述任务发生死锁异常;
若所述数据状态信息中包括的至少两个寄存器信息不完全相同时,确定所述任务发生死循环异常。
4.根据权利要求2或3所述的方法,其特征在于,在所述获取所述任务的数据状态信息之前,所述方法还包括:
若当前任务的执行时间大于预设执行时间时,将所述任务从任务链表中删除,并添加到恢复链表中,所述恢复链表是用于存储出现异常的任务的链表。
5.根据权利要求4所述的方法,其特征在于,
所述当确定所述任务发生死锁异常时,释放所述任务占用的资源,继续执行所述任务包括:
当确定所述任务发生死锁异常时,释放所述任务占用的资源;
第三预设时长后,在所述恢复链表中执行所述任务;
当所述任务没有再次发生死锁异常时,将所述任务从恢复链表中删除,并重新添加到任务链表中,继续执行所述任务;
当所述任务再次发生死锁异常时,再次释放所述任务占用的资源,并且在所述第三预设时长后,再次在所述恢复链表中执行所述任务。
6.根据权利要求4所述的方法,其特征在于,
所述当确定所述任务发生死循环异常时,修改所述任务的循环体的代码或修改所述任务的循环体中的数据变量的值,继续执行所述任务包括:
当确定所述任务发生死循环异常时,根据所述任务的特征信息和监控信息,判断所述任务的循环体的代码是否出现错误;所述特征信息记录了所述循环体的基准值和修正值;所述基准值为所述循环体中数据变量的初始值;所述修正值为所述循环体满足终止条件时,所述循环体中数据变量的值;所述监控信息记录了所述任务的执行过程中所述循环体中的数据变量的值的变化信息;
若所述任务的循环体的代码出现错误,根据所述特征信息、所述监控信息和所述数据状态信息,修改所述任务的循环体的代码,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务;
若所述任务的循环体的代码未出现错误,根据所述数据状态信息和所述特征信息,修改所述任务的循环体中的数据变量的值,使得所述数据变量的值满足所述循环体的终止条件,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务。
7.根据权利要求6所述的方法,其特征在于,在所述将所述任务从任务链表中删除,并添加到恢复链表中之前,所述方法还包括:
将所述任务添加到任务链表中;
扫描所述任务的代码,获取所述任务的所述特征信息,所述特征信息还包括预设执行时间,所述预设执行时间为所述任务的正常执行时间;
执行所述任务;
获取所述任务的所述监控信息和所述任务的执行时间。
8.一种任务异常的处理装置,其特征在于,包括:
确定单元,用于若当前任务的执行时间大于预设执行时间时,确定所述任务发生死循环异常或死锁异常;
第一处理单元,用于当所述确定单元确定所述任务发生死锁异常时,释放所述任务占用的资源,继续执行所述任务;
第二处理单元,用于当所述确定单元确定所述任务发生死循环异常时,修改所述任务的循环体的代码或修改所述任务的循环体中的数据变量的值,继续执行所述任务。
9.根据权利要求8所述的装置,其特征在于,所述任务异常的处理装置还包括:
获取单元,用于获取所述任务的数据状态信息,所述数据状态信息包括至少两个寄存器信息,所述至少两个寄存器信息为所述任务发生死循环异常或死锁异常后,所述处理器继续执行所述任务时,在第一预设时长中每隔第二预设时长记录的所述处理器的寄存器状态信息;
所述确定单元具体用于:
若当前任务的执行时间大于预设执行时间时,根据所述数据状态信息,确定所述任务发生死循环异常或死锁异常。
10.根据权利要求9所述的装置,其特征在于,
所述确定单元具体用于:
若所述数据状态信息中包括的至少两个寄存器信息完全相同时,确定所述任务发生死锁异常;
若所述数据状态信息中包括的至少两个寄存器信息不完全相同时,确定所述任务发生死循环异常。
11.根据权利要求9或10所述的装置,其特征在于,所述任务异常的处理装置还包括:
添加单元,用于若当前任务的执行时间大于预设执行时间时,将所述任务从任务链表中删除,并添加到恢复链表中,所述恢复链表是用于存储出现异常的任务的链表。
12.根据权利要求11所述的装置,其特征在于,
所述第一处理单元具体用于:
当确定所述任务发生死锁异常时,释放所述任务占用的资源;
第三预设时长后,在所述恢复链表中执行所述任务;
当所述任务没有再次发生死锁异常时,将所述任务从恢复链表中删除,并重新添加到任务链表中,继续执行所述任务;
当所述任务再次发生死锁异常时,再次释放所述任务占用的资源,并且在所述第三预设时长后,再次在所述恢复链表中执行所述任务。
13.根据权利要求11所述的装置,其特征在于,
所述第二处理单元具体用于:
当确定所述任务发生死循环异常时,根据所述任务的特征信息和监控信息,判断所述任务的循环体的代码是否出现错误;所述特征信息记录了所述循环体的基准值和修正值;所述基准值为所述循环体中数据变量的初始值;所述修正值为所述循环体满足终止条件时,所述循环体中数据变量的值;所述监控信息记录了所述任务的执行过程中所述循环体中的数据变量的值的变化信息;
若所述任务的循环体的代码出现错误,根据所述特征信息、所述监控信息和所述数据状态信息,修改所述任务的循环体的代码,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务;
若所述任务的循环体的代码未出现错误,根据所述数据状态信息和所述特征信息,修改所述任务的循环体中的数据变量的值,使得所述数据变量的值满足所述循环体的终止条件,得到修改后的任务;
将所述修改后的任务从恢复链表中删除,并添加到任务链表中,继续执行所述任务。
CN201410540133.8A 2014-10-13 2014-10-13 一种任务异常的处理方法及装置 Active CN104391754B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410540133.8A CN104391754B (zh) 2014-10-13 2014-10-13 一种任务异常的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410540133.8A CN104391754B (zh) 2014-10-13 2014-10-13 一种任务异常的处理方法及装置

Publications (2)

Publication Number Publication Date
CN104391754A true CN104391754A (zh) 2015-03-04
CN104391754B CN104391754B (zh) 2017-08-25

Family

ID=52609662

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410540133.8A Active CN104391754B (zh) 2014-10-13 2014-10-13 一种任务异常的处理方法及装置

Country Status (1)

Country Link
CN (1) CN104391754B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106250316A (zh) * 2016-08-09 2016-12-21 东软集团股份有限公司 一种死循环检测方法及装置
CN106569891A (zh) * 2016-11-09 2017-04-19 郑州云海信息技术有限公司 一种存储系统中任务调度执行的方法和装置
CN106681809A (zh) * 2016-12-05 2017-05-17 上海斐讯数据通信技术有限公司 一种基于锁的线程管理方法及装置
CN107515772A (zh) * 2016-06-15 2017-12-26 中兴通讯股份有限公司 一种检测kvm虚拟机挂死的方法及装置
WO2021000656A1 (zh) * 2019-07-04 2021-01-07 中兴通讯股份有限公司 死锁检测控制方法、装置、通信设备及计算机存储介质
CN112685181A (zh) * 2020-12-29 2021-04-20 成都科来网络技术有限公司 一种均衡cpu资源的推送任务调度方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4189771A (en) * 1977-10-11 1980-02-19 International Business Machines Corporation Method and means for the detection of deadlock among waiting tasks in a multiprocessing, multiprogramming CPU environment
JPH0277960A (ja) * 1988-09-14 1990-03-19 Toshiba Corp 分散型データベースにおける一貫性制御のデッドロック防止方式
CN1477512A (zh) * 2002-08-20 2004-02-25 华为技术有限公司 嵌入式软件任务死循环监控方法
CN1811719A (zh) * 2006-02-22 2006-08-02 福建师范大学 一种单线程微处理器的死锁检测与干预方法
CN101504615A (zh) * 2009-03-24 2009-08-12 杭州华三通信技术有限公司 为任务死循环提供定位信息的方法和装置
CN101561778A (zh) * 2008-04-15 2009-10-21 中兴通讯股份有限公司 一种检测多任务操作系统任务死循环的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4189771A (en) * 1977-10-11 1980-02-19 International Business Machines Corporation Method and means for the detection of deadlock among waiting tasks in a multiprocessing, multiprogramming CPU environment
JPH0277960A (ja) * 1988-09-14 1990-03-19 Toshiba Corp 分散型データベースにおける一貫性制御のデッドロック防止方式
CN1477512A (zh) * 2002-08-20 2004-02-25 华为技术有限公司 嵌入式软件任务死循环监控方法
CN1811719A (zh) * 2006-02-22 2006-08-02 福建师范大学 一种单线程微处理器的死锁检测与干预方法
CN101561778A (zh) * 2008-04-15 2009-10-21 中兴通讯股份有限公司 一种检测多任务操作系统任务死循环的方法
CN101504615A (zh) * 2009-03-24 2009-08-12 杭州华三通信技术有限公司 为任务死循环提供定位信息的方法和装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107515772A (zh) * 2016-06-15 2017-12-26 中兴通讯股份有限公司 一种检测kvm虚拟机挂死的方法及装置
CN106250316A (zh) * 2016-08-09 2016-12-21 东软集团股份有限公司 一种死循环检测方法及装置
CN106569891A (zh) * 2016-11-09 2017-04-19 郑州云海信息技术有限公司 一种存储系统中任务调度执行的方法和装置
CN106569891B (zh) * 2016-11-09 2021-01-29 苏州浪潮智能科技有限公司 一种存储系统中任务调度执行的方法和装置
CN106681809A (zh) * 2016-12-05 2017-05-17 上海斐讯数据通信技术有限公司 一种基于锁的线程管理方法及装置
WO2021000656A1 (zh) * 2019-07-04 2021-01-07 中兴通讯股份有限公司 死锁检测控制方法、装置、通信设备及计算机存储介质
CN112685181A (zh) * 2020-12-29 2021-04-20 成都科来网络技术有限公司 一种均衡cpu资源的推送任务调度方法及系统

Also Published As

Publication number Publication date
CN104391754B (zh) 2017-08-25

Similar Documents

Publication Publication Date Title
CN104391754A (zh) 一种任务异常的处理方法及装置
CN102804134B (zh) 处理异常事件的装置和方法
EP3432140A1 (en) Android-based pop-up prompt method and device
JP4903149B2 (ja) コンピュータシステム上でコンピュータプログラムを処理する方法
CN102567090B (zh) 在计算机处理器中创建执行线程的方法和系统
CN101788949A (zh) 一种实现嵌入式系统函数监控的方法及装置
CN105279021A (zh) 执行不可屏蔽中断的方法和装置
CN107179982B (zh) 一种跨进程调试方法和装置
US8332069B2 (en) Fault tolerance method and apparatus for robot software component
JP2009129463A (ja) 車両制御装置のリアルタイムシステムにおける一時的エラーの処理方法
CN105224403A (zh) 一种中断处理方法及装置
CN105474174A (zh) 控制时间密集的指令
CN110941503A (zh) 故障处理方法、装置及电子设备
JP6318214B2 (ja) 汎用マイクロプロセッサを用いたplcのデバッグ方法
EP3091437A1 (en) Method and apparatus for monitoring a control flow of a computer program
CN112673354A (zh) 一种系统状态检测方法、系统状态装置及终端设备
CN111026526B (zh) 程序的定时器配置方法、装置、存储介质及终端设备
CN109669721B (zh) 一种可二次开发软件的方法
US8984518B2 (en) Apparatus and method for executing components based on thread pool
CN109308215B (zh) 一种基于纤程的交互方法、交互系统及计算机装置
CN110046004B (zh) 一种适配自动引用计数arc特性的方法、装置及电子设备
CN109200581B (zh) 通过python代码控制游戏角色的方法、电子设备
KR102095224B1 (ko) 프로그램 제공 장치 및 그에 의한 프로그램의 실행을 처리하는 cpu모듈
CN107870812B (zh) 一种基于单线程并发多定时器应用管理方法
JP2008077388A (ja) マルチプロセッサ制御システム、方法、およびプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant