基于Linux的软件异常处理系统及方法
技术领域
本发明涉及一种软件异常处理系统,特别是涉及一种基于Linux的软件异常处理系统及方法。
背景技术
随着科技的迅猛发展,现代化计算机技术的更是日新月异的快速发展,CPU早已迈入了多核时代,操作系统也已经最大程度地支持多执行流程并行运行,但是,众所周知传统的应用程序至今仍然是基于单处理流程设计的,软件异常系统更是如此,并没有充分利用前述多核CPU所带来的性能上的提升。
即,传统应用程序是基于单处理流程设计,操作系统的软件异常系统也是单处理流程的,异常处理代码与应用程序代码在同一个流程中运行会损害高速缓存,因而并没能充分利用多核CPU所带来的性能提升。
鉴于上述问题的存在,一种新的、便捷而有效的改善软件异常处理的方法和系统的发明是势在必行的,以此可以充分利用前述多核CPU所带来的性能上的提升。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种异常处理代码在独立的执行流程中运行,以此充分利用多核CPU的优势,同时可以有效避免污染应用程序的高速缓存。
为实现上述目的及其他相关目的,本发明提供一种基于Linux的软件异常处理系统,其至少包括:
异常分析模块,检测系统异常时对所述异常进行分析并将分析后的异常节点存放在异常节点表中;
异常处理模块,开启新的运行于实时优先级的异常处理流程运行异常处理系统,设置各种异常处理函数形成异常处理函数表;异常处理流程从所述异常分析模块的异常节点表中取得异常节点后,查找所述异常处理函数表,并调用执行异常处理函数。
于本发明的一实施例中,所述的基于Linux的软件异常处理系统,所述异常处理函数表是由用户根据自身需求设置的。
于本发明的一实施例中,所述的基于Linux的软件异常处理系统,其所述异常处理函数将异常按严重程度分为三类,即第一类异常、第二类异常和第三类异常;所述异常处理函数首先获取异常类型,然后对不同异常做不同的处理,与系统相关的操作由内核进行,需要根据用户需求而变化的操作,提交给异常处理流程。
于本发明的一实施例中,所述的基于Linux的软件异常处理系统,其所述第一类异常与当前应用程序高度关联,并且已经或即将破坏应用程序的数据,因此必须终止当前应用程序;
所述第二类异常与当前应用程序相关联,需唤醒相关的睡眠应用程序,并以出错的形式返回,相关的代码检查到这个出错退出后,选择退出应用程序或重新执行系统调用,然后把异常放在异常节点表中;
所述第三类异常与当前应用程序无关,只是刚好发生应用程序运行时,因此可以直接把异常放在异常节点表。
于本发明的一实施例中,所述的基于Linux的软件异常处理系统,其所述异常处理流程循环处理异常节点表中的节点,首先取出异常节点,再由查找对应的异常处理函数,然后运行查找到的函数。
为实现上述目的及其他相关目的,本发明还提供一种基于Linux的软件异常处理方法,其至少包括如下步骤:
检测系统异常时对所述异常进行分析并将分析后的异常节点存放在异常节点表中;
在系统运行应用程序前,开启新的运行于实时优先级的异常处理流程运行异常处理系统,设置各种异常处理函数形成异常处理函数表;异常处理流程从所述异常节点表中取得异常节点后,查找所述异常处理函数表,并调用执行异常处理函数。
于本发明的一实施例中,所述的基于Linux的软件异常处理方法,其所述异常处理函数表是由用户根据自身需求设置的。
于本发明的一实施例中,所述的基于Linux的软件异常处理方法,其所述异常处理函数将异常按严重程度分为三类,即第一类异常、第二类异常和第三类异常;所述异常处理函数首先获取异常类型,然后对不同异常做不同的处理,与系统相关的操作由内核进行,需要根据用户需求而变化的操作,提交给异常处理流程。
于本发明的一实施例中,所述的基于Linux的软件异常处理方法,其所述第一类异常与当前应用程序高度关联,并且已经或即将破坏应用程序的数据,因此必须终止当前应用程序;
所述第二类异常与当前应用程序相关联,需唤醒相关的睡眠应用程序,并以出错的形式返回,相关的代码检查到这个出错退出后,选择退出应用程序或重新执行系统调用,然后把异常放在异常节点表中;
所述第三类异常与当前应用程序无关,只是刚好发生应用程序运行时,因此可以直接把异常放在异常节点表。
于本发明的一实施例中,所述的基于Linux的软件异常处理方法,其所述异常处理流程循环处理异常节点表中的节点,首先取出异常节点,再由查找对应的异常处理函数,然后运行查找到的函数。
如上所述,本发明的一种基于Linux的软件异常处理系统及方法,具有以下有益效果:
本发明通过异常处理代码在独立的执行流程中运行,在异常处理模块中启动新的执行流程处理异常,并以实时优先级运行;并且,在异常分析模块中对异常按严重程度分别处理,系统相关的操作在内核运行,应用相关的操作交由异常处理模块运行;如此,充分利用了多核CPU的优势,同时可以有效避免污染应用程序的高速缓存。
附图说明
图1显示为本发明基于Linux的软件异常处理系统的框架结构示意图。
图2显示为本发明基于Linux的软件异常处理方法的异常处理函数对三种异常按严重程度分别处理的原理示意图。
图3显示为本发明基于Linux的软件异常处理方法的异常处理函数的伪代码示意图。
图4显示为本发明基于Linux的软件异常处理方法的异常处理流程的伪代码流程示意图。
元件标号说明
100 异常处理系统
101 异常分析模块
102 异常处理模块
S21-S25 步骤S21-S25
S11-S15 步骤S11-S15
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
请参阅图1至图4所示,本发明提供一种基于Linux的软件异常处理方法及系统,本发明通过异常处理代码在独立的执行流程中运行,在异常处理模块中启动新的执行流程处理异常,并以实时优先级运行;并且,在异常分析模块中对异常按严重程度分别处理,系统相关的操作在内核运行,应用相关的操作交由异常处理模块运行;如此,充分利用了多核CPU的优势,同时可以有效避免污染应用程序的高速缓存。
本发明提供的一种基于Linux的软件异常处理方法,在实施过程中大致包括以下执行步骤:
执行步骤S11,系统在运行应用程序前,开启一个新的执行流程,运行异常处理系统,并运行于实时优先级,保证异常事件被及时处理。
执行步骤S12,在应用程序中,用户根据自身需求设置各种异常处理函数。异常处理流程从异常分析模块取得异常节点后,会查找异常处理函数表,并调用这里设置的异常处理函数。
执行步骤S13,内核检测到异常时,调用上述异常分析模块,所述异常分析模块将分析后的结果存放在异常节点表中;
执行步骤S14,异常处理流程运行于实时优先级,如此可以保证异常事件被及时处理。当异常分析模块将异常添加到异常节点表后,系统会及时取得该异常;
执行步骤S15,查询异常处理函数表,并执行查找到的异常处理函数。所述异常处理函数表是由用户根据自身需求设置的。
参考上述处理方法的执行步骤S11-S15,当内核检测到异常事件会调用异常处理函数exp_analysis,该函数对异常事件做具体分析后,会通过exp_put_node将异常事件存放在异常节点表中,异常处理流程exp_task会具体处理该异常事件。
请参考附图2、附图3所示,其分别是异常处理函数exp_analysis的原理图和伪代码图。
异常处理函数exp_analysis将异常按严重程度分为3类。即第一类异常、第二类异常和第三类异常。所述异常处理函数exp_analysis首先调用函数exp_type获取异常类型,然后对不同异常做不同的处理,与系统相关的操作由内核通过函数abort_app或wake_up进行,需要根据用户需求而变化的操作,通过exp_put_node提交给异常处理流程,方便用户修改异常处理方法。
所述第一类异常与当前应用程序高度关联,并且已经或即将破坏应用程序的数据,因此必须通过函数abort_app终止当前应用程序。
所述第二类异常与当前应用程序相关联,需要通过函数wake_up唤醒相关的睡眠应用程序,并且应用程序的系统调用会以出错的形式返回,相关的代码检查到这个出错退出后,可以选择退出应用程序或重新执行系统调用,然后通过函数exp_put_node把异常放在异常节点表中。
所述第三类异常与当前应用程序无关,只是刚好发生应用程序运行时,因此可以直接通过函数exp_put_node把异常放在异常节点表。
请参考图4所示,其是异常处理流程exp_task的伪代码流程图。
所述异常处理流程exp_process循环处理异常节点表中的节点。首先通过函数exp_get_node取出异常节点,再由函数exp_get_func查找对应的异常处理函数,然后通过(*func)()运行查找到的函数。
下面是本发明方案具体实施例之一的整体实现方式,具体请参见图1所示。本发明提供的一种基于Linux的软件异常处理系统100,该异常处理系统100在整体上可以分为异常分析模块101、异常处理模块102两部分。所述异常分析模块101,开启新的运行于实时优先级的异常处理流程运行异常处理系统,设置各种异常处理函数形成异常处理函数表;异常处理流程从所述异常分析模块的异常节点表中取得异常节点后,查找所述异常处理函数表,并调用执行异常处理函数;所述异常处理模块102,检测系统异常时对所述异常进行分析并将分析后的异常节点存放在异常节点表中。
下面具体结合基于Linux的软件异常处理系统100,详细表述本发明基于Linux的软件异常处理方法的具体执行步骤:
执行步骤S21,系统在启用应用程序app_task之前,通过库函数pthread创建新的执行流程exp_task。exp_task运行于实时优先级,当异常分析模块101异常处理模块102提交异常后,异常处理流程exp_task会及时运行,保证异常事件被及时处理;
执行步骤S22,应用程序app_task根据用户自身的需求,通过函数exp_set_func给各种异常设置异常处理函数。异常处理流程exp_task从异常分析模块101取得异常节点后,会查找异常处理函数表,并调用这里设置的异常处理函数;
执行步骤S23,异常分析模块101通过函数exp_analysis对函数做具体分析后,将异常通过函数exp_put_node放入异常节点表,异常处理函数exp_analysis的原理参考图2和图3。该异常节点会被异常处理流程exp_task通过函数exp_get_node取得;
执行步骤S24,异常处理流程exp_task运行于实时优先级,可以保证异常事件被及时处理。当异常分析模块101将异常添加到异常节点表后,系统会及时通过函数exp_get_node取得该异常;
执行步骤S25,异常处理流程exp_task取得异常节点后,会调用函数exp_get_func在异常处理函数表中查找该异常对应的异常处理函数并运行。
总之,本发明提供一种基于Linux的软件异常处理方法及系统,其通过异常处理代码在独立的执行流程中运行,在异常处理模块中启动新的执行流程处理异常,并以实时优先级运行;并且,在异常分析模块中对异常按严重程度分别处理,系统相关的操作在内核运行,应用相关的操作交由异常处理模块运行;如此,充分利用了多核CPU的优势,同时可以有效避免污染应用程序的高速缓存。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。