操作系统升级方法及装置的制造方法_2

文档序号:8922428阅读:来源:国知局
行修改,从而提高代码质量。升级服务打印异常记录的过程详见步骤205-208 ο
[0051]第二种实现方式中,用户可以针对每种异常信号的产生原因,生成对每种异常信号的恢复方式,此时,升级服务可以根据获取到的恢复方式进行异常恢复。比如,异常信号的产生原因是多个线程同时访问同一地址,此时升级服务可以控制各个线程对该地址的访问时刻,从而进行异常恢复。
[0052]在步骤205中,从内核中获取与异常信号对应的各个线程的线程标识。
[0053]本实施例中,升级服务可以通过自身执行步骤205-208,也可以调用线程或函数来执行步骤205-208,本实施例以升级服务调用信号处理函数来执行步骤205-208为例进行说明。
[0054]信号处理函数是预先注册的用于处理异常信号的函数,该信号处理函数能够被升级服务调用。在注册信号处理函数时,可以先新建一个结构体,对该结构体添加信号处理函数,再将各种异常信号添加到该信号处理函数中。在一种可能的实现方式中,结构体是sigact1n,信号处理函数是 debugger_signal_handler 函数。
[0055]由于内核在生成异常信号时,会记录该异常信号和升级服务中的各个线程的线程标识之间的对应关系,因此,升级服务在确定了异常信号后,可以调用信号处理函数从内核中获取与该异常信号对应的各个线程标识。
[0056]在步骤206中,读取每个线程所对应的堆栈信息,堆栈信息用于记录线程顺序调用的函数。
[0057]每个线程都存在一个对应的堆栈,在线程调用各个函数时,该堆栈会按照函数被调用的顺序记录该线程所调用的函数,生成堆栈信息。
[0058]由于一个线程的线程标识对应于一个堆栈信息,因此,升级服务可以调用信号处理函数,通过信号处理函数获取与每个线程标识所对应的堆栈信息。
[0059]在步骤207中,基于各个堆栈信息读取对应的线程在升级过程中所调用的各个函数的函数名。
[0060]由于堆栈信息中记录的是函数的地址值,因此,基于各个堆栈信息读取对应的线程在升级过程中所调用的各个函数的函数名,包括:
[0061]I)从各个堆栈信息中读取对应的线程所调用的函数的地址值;
[0062]2)从可执行文件中读取每个地址值所对应的函数名,可执行文件用于存储不同的地址值与不同的函数名之间的对应关系。
[0063]本实施例中,可以预先获取到各个函数的地址值,并在可执行文件中建立每个函数的函数名和地址值之间的对应关系,因此,对于每个线程的堆栈信息,升级服务在调用信号处理函数读取到该堆栈信息中的各个地址值后,可以继续调用信号处理函数从可执行文件中获取与每个地址值对应的函数名,从而将堆栈信息中的各个地址值转换为函数名。本实施例中,将地址值转换为函数名,以便于用户能直观地读取到函数名,而不是无法识别的地址值,可以提高异常记录的易读性。
[0064]在步骤208中,将异常信号、各个线程标识和每个线程标识所对应的函数名打印成异常记录。
[0065]在信号处理函数获取到线程标识和该线程标识在升级过程中所调用的各个函数的函数名后,升级服务可以调用信号处理函数将异常信号、各个线程标识和每个线程标识所对应的函数名打印到缓存中的系统日志中,形成异常记录。用户可以从该异常记录中分析异常产生的原因,从而根据分析结果修改代码,以提高代码质量。
[0066]综上所述,本公开提供的操作系统升级方法,通过在升级过程中,监听是否有操作系统的内核广播的异常信号,异常信号是内核检测到进程地址访问错误时生成的;当监听到异常信号时,对异常信号进行处理,可以对升级过程中产生的异常进行处理,解决了Recovery服务在升级操作系统的过程中产生异常,无法处理异常的问题,达到了提高升级的成功率的效果。
[0067]另外,通过从各个堆栈信息中读取对应的线程所调用的函数的地址值;从可执行文件中读取每个地址值所对应的函数名,可以将地址值转换为函数名,以便于用户能直观地读取到函数名,而不是无法识别的地址值,可以提高异常记录的易读性。
[0068]图3是根据一示例性实施例示出的一种操作系统升级装置的框图,该操作系统升级装置应用于具有操作系统的电子设备的升级服务中,如图3所示,该操作系统升级装置包括:系统升级模块310、信号监听模块320和信号处理模块330。
[0069]该系统升级模块310,被配置为对操作系统进行升级;
[0070]该信号监听模块320,被配置为在升级过程中,监听是否有操作系统的内核广播的异常信号,异常信号是内核检测到进程地址访问错误时生成的;
[0071]该信号处理模块330,被配置为当信号监听模块320监听到异常信号时,对异常信号进行处理。
[0072]综上所述,本公开提供的操作系统升级装置,通过在升级过程中,监听是否有操作系统的内核广播的异常信号,异常信号是内核检测到进程地址访问错误时生成的;当监听到异常信号时,对异常信号进行处理,可以对升级过程中产生的异常进行处理,解决了Recovery服务在升级操作系统的过程中产生异常,无法处理异常的问题,达到了提高升级的成功率的效果。
[0073]图4是根据一示例性实施例示出的一种操作系统升级装置的框图,该操作系统升级装置应用于具有操作系统的电子设备的升级服务中,如图4所示,该操作系统升级装置包括:系统升级模块410、信号监听模块420和信号处理模块430。
[0074]该系统升级模块410,被配置为对操作系统进行升级;
[0075]该信号监听模块420,被配置为在升级过程中,监听是否有操作系统的内核广播的异常信号,异常信号是内核检测到进程地址访问错误时生成的;
[0076]该信号处理模块430,被配置为当信号监听模块420监听到异常信号时,对异常信号进行处理。
[0077]可选的,信号处理模块430,包括:第一处理子模块431和/或第二处理子模块432 ;
[0078]该第一处理子模块431,被配置为打印所述异常信号所对应的异常记录,和/或,该第二处理子模块432,被配置为确定所述异常信号所对应的恢复方式,根据所述恢复方式进行异常恢复。(图4中,以信号处理模块430同时包括第一处理子模块431和第二处理子模块432为例进行示意,对于信号处理模块430只包括第一处理子模块431的示意及信号处理模块430只包括第二处理子模块432的示意未示出)。
[0079]可选的,第一处理子模块431,包括:信息获取子模块4311和记录打印子模块4312 ;
[0080]该信息获取子模块4311,被配置为获取升级过程中各个线程的线程标识和每个线程在升级过程中所调用的各个函数的函数名;
[0081]该记录打印子模块4312,被配置为将信息获取子模块4311获取的各个线程标识和每个线程标识所对应的函数名打印成异常记录。
[0082]可选的,信息获取子模块4311,包括:线程标识获取子模块4311a、堆栈信息获取子模块4311b和函数名获取子模块4311c ;
[0083]该线程标识获取子模块4311a,被配置为从内核中获取与异常信号对应的各个线程的线程标识;
[0084]该堆栈信息获取子模块4311b,被配置为读取每个线程所对应的堆栈信息,堆栈信息用于记录线程顺序调用的函数;
[0085]该函数名获取子模块4311c,被配置为基于堆栈信息获取子模块4311b获取的各个堆栈信息读取对应的线程在升级过程中所调用的各个函数的函数名。
[0086]可选的,函数名获取子模块4311c,包括:地址值读取子模块431 IcI和函数名读取子模块4311 c2 ;
[0087]该地址值读取子模块4311cl,被配置为从各个堆栈信息中读取对应的线程所调用的函数的地址值;
[0088]该函数名读取子模块4311c2,被配置为从可执行文件中读取每个地址值所对应的函数名,可执行文件用于
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1