本发明涉及一种面向安全关键系统,任务故障隔离条件下,进行任务故障恢复和处理的方法。
背景技术:
对于安全关键系统,操作系统的一个重要作用,是进行故障的隔离和恢复,让用户应用层的任务,在发生故障的情况下,故障不会蔓延以致对系统造成影响,同时为用户提供故障恢复的手段。
故障的隔离,可以由操作系统的时间确定性和空间隔离性来实现。时间确定性保证了任务运行超时不会影响其它任务;空间隔离性则保证任务操作非法地址不会影响其它任务的空间。
以上两个特性,其着眼点仅在于隔绝任务故障的蔓延,将其控制在一定的范围内,对发生故障的任务本身并没有进行处理。故障的恢复,就是在发现故障的基础上,让用户可以有机会对系统进行部分重启和重新部署,从而恢复系统的功能,或者使系统降级使用。
操作系统的健康监控功能,就是操作系统针对系统运行中发生的各种异常,提供的各种处理及恢复机制。通常的异常处理,对于某一种硬件异常,仅具有唯一的处理方式。而通过操作系统对任务的时间和空间都进行了隔离后,就可以分层次,分任务地进行相应故障处理。
对于安全关键系统,其健康监控应该达到以下几个目标:
1.)异常的处理可分层级来完成,若内核态运行代码导致异常,应该由在内核态下的系统级处理来完成;而如果是用户任务引发的异常,可以在用户态下由用户挂接响应函数进行处理;
2.)任务级的异常处理不会影响系统按照时间规划的正常调度,如果异常的发生仅影响某个任务,则应该在不影响其它任务的情况下对此任务故障进行处理和恢复;
3.)系统级的故障处理方式可以根据具体要求,进行系统重启、关闭或降级重构处理,而对任务级异常,可能的处理方式包括:忽略、记录、重启、挂起及任务替换。
针对以上的需求,需要提出一种方法,能够实现操作系统的任务级健康监控功能,达到安全关键系统对于任务故障恢复功能的要求,最终提升系统的整体安全性能。
技术实现要素:
本发明的目的是,为面向安全关键系统的操作系统,提出一种实现健康监控功能的方法,使得故障发生后,不仅仅能够限制在一定的作用域之内,同时还能够根据用户设定的策略进行系统功能的恢复和重构。
本发明提供了一种面向安全关键系统,任务故障隔离条件下,进行任务故障恢复和处理的方法。本发明的技术方案为:一种基于任务调度的故障处理方法,包括:处理器、内存、中断控制器、定时器以及调度器模块;处理器能够执行故障处理任务,在工作任务创建过程中,通过处理器为工作任务指定任务执行时间,并为该工作任务创建一个任务故障处理句柄,处理器从内存中为这个句柄分配故障处理任务所需的资源,即创建故障处理任务,中断控制器提供标识故障的中断号,定时器监控任务执行时间,调度器模块用于任务调度和切换,在任务调度过程中,处理器实时检查工作任务是否出现故障。基于任务调度的软件运行健康监控方式,某一个任务的故障后处理和恢复过程,不会影响其它任务在时间规划的正常运行。基于此方法的操作系统中,具备专门的故障处理任务,以及缺省的任务故障处理过程。在任务调度过程中,操作系统会检查待调度的任务是否处于故障处理状态中,以便进行相应的处理。当任务出现故障,依次按照以下步骤处理:
步骤1):中断控制器中断任务的执行,处理器将该任务的状态置为“故障处理中”,同时工作任务标识为故障任务;
步骤2):由调度器模块进行任务切换,从出现故障的工作任务切换到故障处理任务中,故障处理任务从中断控制器的中断号中获取到此次故障的原因,在故障处理任务中,根据故障原因,选择相应的故障恢复策略,所述的故障恢复策略包括故障忽略、任务重启或任务挂起;
步骤3):故障处理任务的执行时间不超过所属出现故障的任务的剩余执行时间,故障处理任务执行过程中,若所属出现故障的任务的时间片消耗完,则调度器模块执行任务调度,切换到新的工作任务中,当操作系统根据调度策略,需要重新调度出现故障的任务时,调度器模块会先调度相应的故障处理任务,并为故障处理任务提供新的执行时间,继续执行故障处理任务。
特别的,步骤1)中故障处理任务具备特殊的任务名称和任务ID号,不会出现在正常的任务调度过程中,其属性中,其任务ID与其从属的任务ID具备特殊关系,可通过任务ID分辨出其服务的任务。
本发明还包括如下的一个任务处理流程(方法):
1.)首先,在操作系统进行健康监控模块初始化时,需要定义一个缺省的任务级健康监 控处理过程。在本例中,该处理过程首先查询当前发生的故障的类型,之后根据故障类型,进行相应的故障处理。例如,对于任务的超时故障,前5次发生的处理策略都是忽略本次故障并继续执行。发生5次之后的处理策略是任务重启执行。如果某个任务发生超时的次数超过10次,则任务挂起。
2.)之后,在每一个任务创建的过程中,用户可以针对此任务,挂接一个任务故障处理函数。由于此函数需要在处理器的用户态下执行,因此,需要将此故障处理函数,以任务的方式进行管理。因此,为任务挂接故障处理函数的过程,其本质是创建一个故障处理任务,并将此故障处理任务的句柄信息,存储到原始任务的TCB中。
3.)当系统运行过程中,发现故障时,操作系统首先判断发生故障的位置,是运行于处理器内核态的操作系统功能模块,还是运行于处理器用户态的用户任务。
若是操作系统功能模块本身运行过程中发生问题,此时可认为发现了很严重的故障,由于操作系统本身不可信,进行相关的处理也很难保证不会造成新的问题,此时仅能通过重启此计算机,或者通过系统余度管理机制进行处理的方式来保证系统功能。
4.)若发生故障的位置是用户任务。此时操作系统检查此用户任务是否曾经挂接相应的故障处理函数。若故障任务未挂接故障处理任务,则进入到缺省的任务级故障处理过程中,进行各种故障的恢复策略设定。在故障处理过程结束后,操作系统按照在处理过程中设定的恢复策略,恢复、重启或挂起故障任务。如图2所示。
5.)若在缺省的任务级故障处理过程中,之前故障任务的运行时限达到,此时将切换到新的任务执行。由于切换到的新任务运行过程中,可能发生故障并使用缺省的任务级故障处理过程,因此缺省的任务级故障处理过程必须是可重入的,不应该使用任何临界资源。
在缺省的任务级故障处理过程,因任务时限而被切出的过程中,若故障任务本身的故障状态被保持在异常处理流程中,则故障处理过程可以保存在故障任务的上下文中,并由操作系统调度器切换到新的任务中。当故障任务到了恢复执行时刻点时,故障任务的故障处理任务被恢复执行,直到恢复策略定义好之后,回到故障任务。整个过程如图3所示。
6.)在上面的步骤4.)中,若出现故障的任务,事先挂接了任务故障处理函数,则此时操作系统进行任务调度,切换到故障处理任务中执行。
本发明具有的优点和有益效果:本发明是一种面向安全关键系统,任务故障隔离条件下,进行任务故障恢复和处理的方法。通过这种方法,能够有效地达到任务级健康监控和系统级健康监控的要求,同时,健康监控的执行过程,不会对任务的正常执行造成任何影响,充分了满足了安全关键系统对操作系统健康监控功能的需求。
附图说明
图1是本发明的处理流程示意图1;
图2是本发明的处理流程示意图2;
图3是缺省的任务级故障处理过程示意图;
图4是缺省的任务级故障处理过程遇到任务时限的执行示意图;
图5是故障处理任务的运行示意图;
图6是故障处理任务遇到任务时限的调度示意图;
具体实施方式
下面结合说明书附图对本发明做详细说明,图1显示的是本方法的一个基本的处理流程图。
具体提供一种基于任务调度的故障处理方法,
包括:处理器、内存、中断控制器、定时器以及调度器模块;处理器能够执行故障处理任务,在工作任务创建过程中,通过处理器为工作任务指定任务执行时间,并为该工作任务创建一个任务故障处理句柄,处理器从内存中为这个句柄分配故障处理任务所需的资源,即创建故障处理任务,中断控制器提供标识故障的中断号,定时器监控任务执行时间,调度器模块用于任务调度和切换,在任务调度过程中,处理器实时检查工作任务是否出现故障,当任务出现故障,依次按照以下步骤处理:
步骤1):中断控制器中断任务的执行,处理器将该任务的状态置为“故障处理中”,同时工作任务标识为故障任务;
步骤2):由调度器模块进行任务切换,从出现故障的工作任务切换到故障处理任务中,故障处理任务从中断控制器的中断号中获取到此次故障的原因,在故障处理任务中,根据故障原因,选择相应的故障恢复策略,所述的故障恢复策略包括故障忽略、任务重启或任务挂起;
步骤3):故障处理任务的执行时间不超过所属出现故障的任务的剩余执行时间,故障处理任务执行过程中,若所属出现故障的任务的时间片消耗完,则调度器模块执行任务调度,切换到新的工作任务中,当操作系统根据调度策略,需要重新调度出现故障的任务时,调度器模块会先调度相应的故障处理任务,并为故障处理任务提供新的执行时间,继续执行故障处理任务。
特别的:步骤1)中故障处理任务具备特殊的任务名称和任务ID号,不会出现在正常的 任务调度过程中,其属性中,其任务ID与其从属的任务ID具备特殊关系,可通过任务ID分辨出其服务的任务。
具体提供另一种基于任务调度的软件运行故障处理方法,
包括:处理器、内存、中断控制器、定时器以及调度器模块;处理器能够执行缺省的任务故障处理过程,操作系统初始化过程中,通过处理器指定缺省的任务故障处理过程,中断控制器提供标识故障的中断号,定时器监控任务执行时间,调度器模块用于任务调度和切换,在任务调度过程中,处理器实时检查工作任务是否出现故障,当任务出现故障,依次按照以下步骤处理:
步骤1):中断控制器中断任务的执行,处理器将该任务的状态置为“故障处理中”,同时将工作任务标识为故障任务,处理器执行缺省的任务故障处理过程;
步骤2):在缺省的任务故障处理过程中,从中断控制器的中断号中获取到此次故障的原因,并根据故障原因,选择相应的故障恢复策略,所述的故障恢复策略包括故障忽略、任务重启或任务挂起;
步骤3):缺省的任务故障处理过程的执行时间不超过对应出现故障的任务的剩余执行时间,在缺省的任务故障处理过程中,对应故障任务的时间片消耗完后,调度器模块将任务故障处理过程的上下文状态保存到故障任务的上下文中,并切换到新的工作任务,当处理器根据调度策略,需要重新调度出现故障的任务时,恢复之前的故障处理过程。
特别的:在故障处理任务,或者缺省的故障处理过程结束后,操作系统会根据上述的恢复策略,进行任务调度。
本发明还可以有其它多种实施例,在不背离本发明精神和实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。