處理系統(tǒng)崩潰的方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明實施例涉及計算機系統(tǒng)領域,尤其涉及一種處理系統(tǒng)崩潰的方法和裝置。
【背景技術】
[0002]在計算機系統(tǒng)中,為了使系統(tǒng)在異常情況下能自動恢復,一般都會引入看門狗電路(以下均簡稱為看門狗)??撮T狗工作的原理為:看門狗內(nèi)部有一個計數(shù)器,當看門狗啟動后,計數(shù)器自動開始計數(shù),經(jīng)過一定時間,計數(shù)器達到了設定的閾值,就會產(chǎn)生一個復位信號使系統(tǒng)重啟。因此,為了使系統(tǒng)能夠正常運行,需要在看門狗的計數(shù)器達到設定的閾值前進行計數(shù)器清零,該操作稱為喂狗。
[0003]一般的,在系統(tǒng)中,看門狗的使用方法是:1、系統(tǒng)啟動階段,將看門狗配置為不使能;2、系統(tǒng)正常啟動;3、系統(tǒng)啟動完畢后,啟動喂狗進程,該進程會周期喂狗;4、將看門狗配置為使能。之后,系統(tǒng)在正常運行中,喂狗進程能夠確??撮T狗的計數(shù)器被定期清零,系統(tǒng)能夠順利運行。一旦系統(tǒng)發(fā)生崩潰等故障,喂狗進程會因為故障而停止喂狗,看門狗會將系統(tǒng)復位。這種使用方法要求看門狗除提供基本功能外,還需要提供接口,使得系統(tǒng)能夠將其禁用或使能。這導致了一個問題:如果系統(tǒng)在使能看門狗之前發(fā)生崩潰,則由于看門狗被禁用,無法確保系統(tǒng)復位。
[0004]在一些需要系統(tǒng)具備高可靠性的場景下,看門狗不提供禁用接口。例如,IMP706 (美國MP公司生產(chǎn)的微處理器監(jiān)控芯片),該芯片中的看門狗無法被禁用且看門狗的計數(shù)器的閾值也通常無法自行配置,能夠確保任何情況下系統(tǒng)出現(xiàn)異常都能被正常復位。另外為確保系統(tǒng)及時復位,該芯片中的看門狗的復位時間設計的較短,復位時間為1.6秒。因此,這種看門狗在給系統(tǒng)帶來高可靠性的同時,也為操作系統(tǒng)的設計帶來了以下問題:系統(tǒng)崩潰后執(zhí)行系統(tǒng)崩潰處理流程時如果超過看門狗復位時間,看門狗使得系統(tǒng)復位導致系統(tǒng)崩潰處理流程無法執(zhí)行完畢,從而導致系統(tǒng)崩潰后無法收集到足夠的信息,為后續(xù)分析系統(tǒng)崩潰原因帶來很大障礙。
[0005]現(xiàn)有的解決上述問題的方案是:識別出系統(tǒng)崩潰處理流程中可能會使看門狗復位系統(tǒng)的操作,在系統(tǒng)代碼中直接插入喂狗代碼在看門狗復位系統(tǒng)前執(zhí)行喂狗操作使得系統(tǒng)崩潰處理流程能夠執(zhí)行完畢。
[0006]上述現(xiàn)有技術方案存在以下問題:當系統(tǒng)崩潰處理流程本身有缺陷(例如系統(tǒng)崩潰處理流程陷入死循環(huán)但是喂狗操作一直在執(zhí)行),或者系統(tǒng)崩潰處理流程過長,則會導致系統(tǒng)很長時間不能被看門狗復位,影響系統(tǒng)的可靠性。
【發(fā)明內(nèi)容】
[0007]本發(fā)明實施例提供的處理系統(tǒng)崩潰的方法和裝置,能夠解決由于系統(tǒng)崩潰處理流程本身有缺陷或處理時間過長導致系統(tǒng)長時間不能被看門狗復位進而影響系統(tǒng)可靠性的冋題。
[0008]第一方面,本發(fā)明實施例提供一種處理系統(tǒng)崩潰的方法,所述方法包括:
[0009]當系統(tǒng)崩潰后,所述系統(tǒng)開始執(zhí)行崩潰處理流程;
[0010]在所述崩潰處理流程執(zhí)行的過程中,根據(jù)預設策略判斷所述崩潰處理流程是否正確執(zhí)行;
[0011]若所述崩潰處理流程正確執(zhí)行,則對看門狗進行喂狗操作,使所述崩潰處理流程執(zhí)行完畢;
[0012]若所述崩潰處理流程未正確執(zhí)行,則觸發(fā)所述看門狗對所述系統(tǒng)進行復位,使所述崩潰處理流程終止執(zhí)行。
[0013]結合第一方面,在第一種可能的實現(xiàn)方式中,所述根據(jù)預設策略判斷所述崩潰處理流程是否正確執(zhí)行包括:
[0014]在所述崩潰處理流程開始執(zhí)行時,讀取所述系統(tǒng)的時鐘源進行計時,經(jīng)過預設時間后判斷所述崩潰處理流程是否仍在執(zhí)行;所述預設時間為預先通過測試得到的預期時間;
[0015]若所述崩潰處理流程執(zhí)行完畢,則判定所述崩潰處理流程正確執(zhí)行;
[0016]若所述崩潰處理流程仍在執(zhí)行,則判定所述崩潰處理流程未正確執(zhí)行。
[0017]結合第一方面,在第二種可能的實現(xiàn)方式中,所述根據(jù)預設策略判斷所述崩潰處理流程是否正確執(zhí)行包括:
[0018]當開始執(zhí)行所述崩潰處理流程的代碼中的指令時,通過性能監(jiān)控單元(英文:Performance Monitor Unit,縮寫:PMU)記錄執(zhí)行所述指令的條數(shù),其中,每執(zhí)行一條所述指令,所述性能監(jiān)控單元PMU中的計數(shù)寄存器的值遞增一次;判斷所述計數(shù)寄存器的值遞增的次數(shù)是否大于預先通過測試得到的預期指令條數(shù);
[0019]若所述計數(shù)寄存器的值遞增的次數(shù)小于或等于所述預先通過測試得到的預期指令條數(shù),則判定所述崩潰處理流程正確執(zhí)行;
[0020]若所述計數(shù)寄存器的值遞增的次數(shù)大于所述預先通過測試得到的預期指令條數(shù),則判定所述崩潰流程未正確執(zhí)行。
[0021]結合第一方面,在第三種可能的實現(xiàn)方式中,所述根據(jù)預設策略判斷所述崩潰處理流程是否正確執(zhí)行包括:
[0022]當執(zhí)行到所述崩潰處理流程的代碼中的預設代碼時,判斷所述系統(tǒng)中的預設變量的值是否小于第一預設閾值;其中,每當所述系統(tǒng)在所述崩潰處理流程中執(zhí)行一次喂狗操作,則將預設變量的值進行一次增加調整;
[0023]若所述預設變量的值小于所述第一預設閾值,則判定所述崩潰處理流程正確執(zhí)行;
[0024]若所述預設變量的值大于或等于所述第一預設閾值,則判定所述崩潰處理流程未正確執(zhí)行。
[0025]結合第一方面,在第四種可能的實現(xiàn)方式中,所述根據(jù)預設策略判斷所述崩潰處理流程是否正確執(zhí)行包括:
[0026]當執(zhí)行到所述崩潰處理流程的代碼中的預設代碼時,判斷所述系統(tǒng)中的預設變量的值是否大于第二預設閾值;其中,每當所述系統(tǒng)在所述崩潰處理流程中執(zhí)行一次喂狗操作,則將預設變量的值進行一次減小調整;
[0027]若所述預設變量的值大于所述第二預設閾值,則判定所述崩潰處理流程正確執(zhí)行;
[0028]若所述預設變量的值小于或等于所述第二預設閾值,則判定所述崩潰處理流程未正確執(zhí)行。
[0029]結合第一方面的第三種或第四種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,所述預設代碼由用戶在編寫所述系統(tǒng)的代碼時直接插入到所述系統(tǒng)的代碼中;或者
[0030]所述預設代碼是在所述系統(tǒng)初始化時根據(jù)所述系統(tǒng)的代碼中的注入點利用動態(tài)注入技術注入到所述系統(tǒng)的代碼中的,所述注入點是在所述系統(tǒng)初始化時讀取配置信息獲取的,所述配置信息包括:設備樹中增加的節(jié)點、或命令行參數(shù)。
[0031]第二方面,本發(fā)明實施例提供一種用于處理系統(tǒng)崩潰的裝置,所述裝置包括:
[0032]崩潰處理模塊,用于當系統(tǒng)崩潰后,開始執(zhí)行崩潰處理流程;
[0033]判斷模塊,用于在所述崩潰處理模塊執(zhí)行所述崩潰處理流程的過程中,根據(jù)預設策略判斷所述崩潰處理流程是否正確執(zhí)行;
[0034]喂狗模塊,用于若所述判斷模塊判定所述崩潰處理流程正確執(zhí)行,對看門狗進行喂狗操作,使所述崩潰處理流程執(zhí)行完畢;
[0035]復位模塊,用于若所述判斷模塊判定所述崩潰處理流程未正確執(zhí)行,則觸發(fā)所述看門狗對所述系統(tǒng)進行復位,使所述崩潰處理流程終止執(zhí)行。
[0036]結合第二方面,在第一種可能的實現(xiàn)方式中,所述判斷模塊包括:
[0037]計時單元,用于在所述崩潰處理模塊開始執(zhí)行所述崩潰處理流程時,讀取所述系統(tǒng)的時鐘源進行計時;
[0038]判斷單元,用于當所述計時單元記錄的時間達到預設時間后判斷所述崩潰處理流程是否仍在執(zhí)行;所述預設時間為預先通過測試得到的預期時間;若所述崩潰處理流程執(zhí)行完畢,則判定所述崩潰處理流程正確執(zhí)行;若所述崩潰處理流程仍在執(zhí)行,則判定所述崩潰處理流程未正確執(zhí)行。
[0039]結合第二方面,在第二種可能的實現(xiàn)方式中,所述判斷模塊包括:
[0040]指令計數(shù)單元,用于當開始執(zhí)行所述崩潰處理流程的代碼中的指令時,通過性能監(jiān)控單元PMU記錄執(zhí)行所述指令的條數(shù),其中,每執(zhí)行一條所述指令,所述性能監(jiān)控單元PMU中的計數(shù)寄存器的值遞增一次;
[0041]判斷單元,用于判斷所述計數(shù)寄存器的值遞增的次數(shù)是否大于預先通過測試得到的預期指令條數(shù);若所述計數(shù)寄存器的值遞增的次數(shù)小于或等于所述預先通過測試得到的預期指令條數(shù),則判定所述崩潰處理流程正確執(zhí)行;若所述計數(shù)寄存器的值遞增的次數(shù)大于所述預先通過測試得到的預期指令條數(shù),則判定所述崩潰流程未正確執(zhí)行。
[0042]結合第二方面,在第三種可能的實現(xiàn)方式中,所述判斷模塊具體用于:
[0043]當所述崩潰處理模塊執(zhí)行所述崩潰處理流程的代碼至所述崩潰處理流程的代碼中的預設代碼時,判斷所述系統(tǒng)中的預設變量的值是否小于第一預設閾值;其中,每當所述系統(tǒng)在所述崩潰處理流程中執(zhí)行一次喂狗操作,則將預設變量的值進行一次增加調整;若所述預設變量的值小于所述第一預設閾值,則判定所述崩潰處理流程正確執(zhí)行;若所述預設變量的值大于或等于所述第一預設閾值,則判定所述崩潰處理流程未正確執(zhí)行。
[0044]