一种系统故障信息转储的方法与系统的制作方法

文档序号:6576551阅读:330来源:国知局
专利名称:一种系统故障信息转储的方法与系统的制作方法
技术领域
本发明涉及操作系统故障定位技术,尤其涉及一种用来实现在操作系统出现故障 时,将故障信息进行转储的方法。
背景技术
随着嵌入式操作系统在通信行业、汽车制造业、军事工业等行业的高速发展,以及 开源操作系统的蓬勃发展,操作系统核心技术已经不再由少数企业垄断。对企业来说,定制 自己的操作系统已经不再是难题。但是,从另一个方面来看,操作系统软件有它的独特性, 现有成熟的调试技术,都是基于操作系统本身提供的功能实现的,能够方便的调试应用程 序的BUG,却不能很好的调试内核本身。特别是操作系统崩溃时,可能造成系统死机、自动重 启等现象,导致故障现场不保存,普通的调试工具也无法使用。目前,分析系统崩溃原因的常用方法是通过调试工具分析系统死机文件,找到出 现故障的汇编代码,然后根据故障现场(出现故障时的寄存器值、堆栈信息、当前任务名称 等),分析故障原因。但是,这种方法的不足之处在于必须有死机文件存在。这个条件在某些情况下是 不容易得到满足的,比如1、系统没有保存死机文件的介质。2、系统崩溃时,文件操作功能已经失效,无法保存死机文件。3、系统崩溃时,并没有触发内核异常,而是在中断处理代码中陷入了死循环,造成 系统无法调度,进而死机。

发明内容
本发明所要解决的技术问题是,提供一种转储系统故障信息的方法及系统。本发明采用了如下技术方案一种系统故障信息转储的方法,包括步骤A、根据系统运行环境,在系统运行时注册故障信息的转储接口函数,所述接 口函数中设置有故障信息与转储位置的对应关系;步骤B、当系统故障时,回调所述接口函数,并根据该函数的注册信息转储故障信 息到相应的转储位置。所述接口函数是在内核、驱动程序、模块进行注册的;所述故障信息至少包括以下信息之一任务堆栈、CPU寄存器状态、内核关键数据 结构信息;所述系统故障至少包括以下故障之一系统崩溃、内核陷入死循环。所述步骤B的信息转储处理包括以下步骤的一种或多种步骤Bi、如果所述接口函数是注册了将信息转储到内存,则回调该函数,将信息转 储到内存;
步骤B2、如果所述接口函数是注册了将信息转储到网络,则回调该函数,将信息转 储到网络;步骤B3、如果所述接口函数是注册了将信息转储到非易失性存储介质,则回调该 函数,将信息转储到非易失性存储介质。所述步骤Bl在转储信息时,是将信息转储到系统的保留内存中;所述步骤Bl之后 还包括以下处理过程系统带电重启后,可将所述保留内存中的信息进行二次转储,或者打 印出来。所述步骤B2在转储信息时,是系统通过直接控制网卡经网络向其他设备发送数 据包,由其他设备保存信息。一种系统故障信息转储的系统,包括信息转储注册模块,用于根据系统运行环境在系统运行时注册信息转储接口函 数,所述接口函数中设置有故障信息与转储位置的对应关系;信息转储模块,用于根据所述接口函数的注册信息转储故障信息到相应的转储位 置;故障检测模块,用于检测系统是否出现故障。所述系统故障至少包括以下故障之一系统崩溃、内核陷入死循环。所述信息转储模块在转储故障信息时包括以下处理的一种或多种处理1 如果所述接口函数是注册了将信息转储到内存,则回调该函数,将信息转 储到内存;处理2 如果所述接口函数是注册了将信息转储到网络,则回调该函数,将信息转 储到网络;处理3 如果所述接口函数是注册了将信息转储到非易失性存储介质,则回调该 函数,将信息转储到非易失性存储介质。所述处理1是将信息转储到系统的保留内存中;所述处理1之后还包括以下处理 过程系统带电重启后,可将所述保留内存中的信息进行二次转储,或者打印出来。所述处理2是系统通过直接控制网卡经网络向其他设备发送数据包,由其他设备
保存信息。本发明的有益效果是本发明将系统故障信息保存到内存、网络以及非易失性存 储介质中,避免了系统没有保存死机文件的介质时获取不到死机文件的情况,也避免了系 统崩溃时无法保存死机文件的情况,还避免了死机时无法获取故障信息的情况。


图1是本发明方法一种具体实施例的流程示意图。图2是本发明系统的逻辑结构示意图。
具体实施例方式下面通过具体实施方式
结合附图对本发明作进一步详细说明。如图1所示的本发明方法具体实施例的流程示意图,在操作系统开始运行后,1 注册信息转储函数。
此时进行信息转储回调函数的初始化,即在内核、驱动程序、模块注册信息转储回 调函数,注册的回调函数中设置有故障信息与转储位置的对应情况。可以根据系统的实际 情况,分别注册内存信息转储回调函数、网络信息转储回调函数、非易失性介质信息转储回 调函数。2 检测到死机故障。在系统运行过程中,检测操作系统故障,故障包括系统崩溃或内核陷入死循环。一 旦发现操作系统发生故障,则触发信息转储过程。触发点包含但是不仅仅包含(1)内核发生了致命性的地址访问错误;(2)内核关键数据结构被破坏导致不能继续运行;(3)内核在关中断情况下发生了死循环导致不能进行调度。以上三种情况都需要将调试信息、故障现场保存起来供故障分析时使用。对于地址访问错误与关键数据结构被破坏类错误,将引发异常,操作系统会触发 调用d0_page_faUlt、die函数等进行异常处理,在这些异常处理函数中,调用回调函数进 行信息转储;对于死循环故障,系统在中断处理函数入口处,记录下进入中断处理函数的时间, 在退出中断处理函数时,记录下退出中断处理函数的时间。然后通过NMI和SMI中断,定时 检测中断处理函数的处理时间,如果中断处理程序长时间没有退出,那么就认为是死循环 故障,进而调用回调函数进行信息转储。一旦系统检测到死机故障,则按以下步骤进行处理。3:是否需要保存到内存?判断是否注册了内存信息转储回调函数,如果注册了该回调函数,表示需要将调 试信息、故障现场保存到内存中,则继续执行步骤5。如果没有注册该回调函数,则转到步骤 5。4:将信息转储到内存。信息转储到内存这种方式最简单但是最可靠。因为它不依赖于系统中断,也不依 赖于特定硬件(如磁盘、网卡)。在硬件受限的情况下可以使用。由于内存是易失性介质, 因此,在转储信息时,应当将信息转储到系统保留的内存中,即调用注册的内存信息转储回 调函数,将调试信息、故障现场保存到内存中。执行完毕信息转储到内存后,转到步骤5。实际操作中,在保存信息后,设备不能断电。设备带电重启后,可以再将保留内存 中的信息进行二次转储或者打印出来。5:是否需要保存到网络?判断是否注册了网络信息转储回调函数,如果注册了该回调函数,表示需要将调 试信息、故障现场通过网络进行保存,则继续执行步骤6。如果没有注册该回调函数,则转到 步骤7。6:将信息转储到网络。在系统发生故障时,操作系统提供的网络接口不一定能够正常工作,因此,在转储 信息时,并不直接调用系统网络接口函数(例如网络套接字接口)进行保存,而是调用注册 的内存信息转储回调函数,直接控制网卡,通过网卡向网络其他主机发送数据包,将调试信 息、故障现场保存到网络其他主机设备中,执行完毕后,转到步骤7。
7 是否需要保存到磁盘?判断是否注册了非易失介质信息转储回调函数,如果注册了该回调函数,表示需 要将调试信息、故障现场保存到非易失性介质中,则继续执行步骤8。如果没有注册该回调 函数,则结束处理流程。8 将信息转储到非易失性介质,如磁盘。转储信息到非易失性存储介质是最常用的转储方式。除了磁盘外,也可以转储到 闪存flash等其他非易失性存储介质中。由于以下情况将可能造成转储功能失效如,内存中,内核代码被破坏,导致文件系统不可用;如,在关中断情况下,执行了死循环,导致系统不响应中断,也就无法进行磁盘读 写操作;如,磁盘驱动功能不正常。因此,一般情况下,优先将信息转储到内存和网络中,最后才将信息转储到非易失 性存储介质中。这亦是本发明方法最佳具体实施例的处理思路。转储时是通过调用注册的 非易失性介质信息转储回调函数,将调试信息、故障现场保存到非易失性介质中。执行完毕 后,结束处理流程。本发明还提供了一种内核故障信息转储系统,其逻辑结构如图2所示,包括信息 转储注册模块、信息转储模块、故障检测模块。信息转储注册模块根据系统的实际情况在内核、驱动程序、模块进行信息转储回 调函数的初始化,分别注册内存信息转储回调函数、网络信息转储回调函数、非易失性存储 介质信息转储回调函数。故障检测模块用于检测系统是否发生故障。当内核发生了地址访问错误或关键数 据结构被破坏等异常被捕获到时,操作系统会触发调用do_page_faUlt、die函数等进行异 常处理,在这些异常处理函数中,调用回调函数在信息转储模块进行信息转储;对于死循环 故障,系统在中断处理函数入口处,记录下进入中断处理函数的时间,在退出中断处理函数 时,记录下退出中断处理函数的时间。然后通过NMI和SMI中断,定时检测中断处理函数的 处理时间,如果中断处理程序长时间没有退出,那么就认为是死循环故障,进而调用回调函 数在信息转储模块进行信息转储。信息转储模块根据注册了的回调函数判断若是注册了内存信息转储回调函数, 则转储信息到内存;若是注册了网络信息转储回调函数,则转储信息到网络;若是注册了 非易失性存储介质信息转储回调函数,则转储信息到非易失性存储介质。以上内容是结合具体的实施方式对本发明所做的进一步详细说明,不能认定本发 明的具体实施只局限于这些说明。对于本发明所述技术领域的普通技术人员来说,在不脱 离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护 范围。
权利要求
1.一种系统故障信息转储的方法,其特征在于,包括步骤A、根据系统运行环境,在系统运行时注册故障信息的转储接口函数,所述接口函 数中设置有故障信息与转储位置的对应关系;步骤B、当系统故障时,回调所述接口函数,并根据该函数的注册信息转储故障信息到 相应的转储位置。
2.如权利要求1所述的方法,其特征在于所述接口函数是在内核、驱动程序、模块进行注册的;所述故障信息至少包括以下信息之一任务堆栈、CPU寄存器状态、内核关键数据结构 fn息;所述系统故障至少包括以下故障之一系统崩溃、内核陷入死循环。
3.如权利要求1或2所述的方法,其特征在于,所述步骤B的信息转储处理包括以下步 骤的一种或多种步骤Bi、如果所述接口函数是注册了将信息转储到内存,则回调该函数,将信息转储到 内存;步骤B2、如果所述接口函数是注册了将信息转储到网络,则回调该函数,将信息转储到 网络;步骤B3、如果所述接口函数是注册了将信息转储到非易失性存储介质,则回调该函数, 将信息转储到非易失性存储介质。
4.如权利要求3所述的方法,其特征在于,所述步骤Bl在转储信息时,是将信息转储到 系统的保留内存中;所述步骤Bl之后还包括以下处理过程系统带电重启后,可将所述保 留内存中的信息进行二次转储,或者打印出来。
5.如权利要求3所述的方法,其特征在于,所述步骤B2在转储信息时,是系统通过直接 控制网卡经网络向其他设备发送数据包,由其他设备保存信息。
6.一种系统故障信息转储的系统,其特征在于,包括信息转储注册模块,用于根据系统运行环境在系统运行时注册信息转储接口函数,所 述接口函数中设置有故障信息与转储位置的对应关系;信息转储模块,用于根据所述接口 函数的注册信息转储故障信息到相应的转储位置;故障检测模块,用于检测系统是否出现故障。
7.如权利要求6所述的系统,其特征在于,系统故障至少包括以下故障之一系统崩 溃、内核陷入死循环。
8.如权利要求6所述的系统,其特征在于,所述信息转储模块在转储故障信息时包括 以下处理的一种或多种处理1 如果所述接口函数是注册了将信息转储到内存,则回调该函数,将信息转储到 内存;处理2 如果所述接口函数是注册了将信息转储到网络,则回调该函数,将信息转储到 网络;处理3 如果所述接口函数是注册了将信息转储到非易失性存储介质,则回调该函数, 将信息转储到非易失性存储介质。
9.如权利要求8所述的系统,其特征在于,所述处理1是将信息转储到系统的保留内存中;所述处理1之后还包括以下处理过程系统带电重启后,可将所述保留内存中的信息进 行二次转储,或者打印出来。
10.如权利要求8所述的系统,其特征在于,所述处理2是系统通过直接控制网卡经网 络向其他设备发送数据包,由其他设备保存信息。
全文摘要
本发明公开了一种内核故障信息转储的方法,该方法针对系统机故障的不同情况,收集操作系统内核调试信息、故障信息,并将这些信息通过不同方式如内存、网络、非易失性存储介质等转储起来,以便在操作系统内核故障时,尽量保存更多有用的信息,方便定位系统故障问题。
文档编号G06F11/14GK102063344SQ200910109669
公开日2011年5月18日 申请日期2009年11月18日 优先权日2009年11月18日
发明者谢宝友 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1