專利名稱:操作系統(tǒng)異常的處理方法及其裝置的制作方法
技術領域:
本發(fā)明涉及計算機技術領域,特別是涉及一種操作系統(tǒng)異常的處理方法及其裝置。
背景技術:
目前,Linux操作系統(tǒng)在電信領域得到廣泛應用,特別是在電信領域的關鍵業(yè)務中也得到了大量的應用。在這些應用中,用戶越來越要求Linux操作系統(tǒng)有很強的故障檢測能力以及發(fā)生故障后快速恢復業(yè)務的能力。當操作系統(tǒng)發(fā)生故障且長時間不能恢復業(yè)務時,會造成用戶經濟上的損失,也會降低用戶對產品質量的滿意度。Linux操作系統(tǒng)本身帶有KDUMP (Kernel Dump,在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程)功能,在操作系統(tǒng)內核發(fā)生PANIC (指操作系統(tǒng)內核檢 測到操作系統(tǒng)致命錯誤后采取的行為)或者OOPS (指操作系統(tǒng)內核檢測到異常發(fā)生并打印相應的錯誤日志)時,KDUMP保存操作系統(tǒng)異常時的內存鏡像并重啟操作系統(tǒng)。由于KDUMP在重啟恢復業(yè)務時,保存了操作系統(tǒng)的異常內存鏡像,所以可用于分析操作系統(tǒng)異常的根源。在實際應用中,很多Linux操作系統(tǒng)發(fā)生異常時,并不會觸發(fā)KDUMP,比如某個中央處理器(CPU)發(fā)生了死鎖。
發(fā)明內容
本發(fā)明實施例提供一種操作系統(tǒng)異常的處理方法及其裝置實施例,能夠提高操作系統(tǒng)異常的檢測成功率。本發(fā)明實施例的一方面是提供一種操作系統(tǒng)異常的處理方法,所述方法包括在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,所述中央處理器的數量為至少兩個;使每個所述內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;若所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值,則進行異常處理。本發(fā)明實施例另一方面是提供一種操作系統(tǒng)異常的處理裝置,所述裝置包括運行模塊,用于在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,所述中央處理器的數量為至少兩個;檢測判斷模塊,用于使每個所述內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;第一異常處理模塊,用于在所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值時,進行異常處理。本發(fā)明實施例又一方面是提供一種計算機系統(tǒng),所述系統(tǒng)包括硬件和運行在硬件之上的操作系統(tǒng),所述硬件包括存儲器和至少兩個中央處理器;所述操作系統(tǒng)用于在所述操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,使每個所述內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值,若所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于所述第一設定值,則進行異常處理。上述技術方案,在每個中央處理器中運行相應的內核檢測線程;使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數,其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;若大于第一設定值,則進行異常處理。通過這種一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數的方式,可以檢測出操作系統(tǒng)某個或多個中央處理器出現死鎖所導致的操 作系統(tǒng)異常,提高操作系統(tǒng)異常的檢測成功率。
為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖I是本發(fā)明一種操作系統(tǒng)異常的處理方法一實施例的流程圖;圖2是本發(fā)明一種操作系統(tǒng)異常的處理方法另一實施例的流程圖;圖3是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖;圖4是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖;圖5是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖;圖6是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖;圖7是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖;圖8是本發(fā)明一種操作系統(tǒng)異常的處理裝置一實施例的結構示意圖;圖9是本發(fā)明一種操作系統(tǒng)異常的處理裝置另一實施例的結構示意圖;圖10是本發(fā)明一種操作系統(tǒng)異常的處理裝置又一實施例的結構示意圖;圖11是本發(fā)明一種操作系統(tǒng)異常的處理裝置又一實施例的結構示意圖;圖12是本發(fā)明一種操作系統(tǒng)異常的處理裝置又一實施例的結構示意圖。
具體實施例方式為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。下面結合附圖和實施例對本發(fā)明進行詳細說明。參閱圖1,圖I是本發(fā)明一種操作系統(tǒng)異常的處理方法一實施例的流程圖,方法包括步驟SlOl :在操作系統(tǒng)管理的每個中央處理器(Central Processing Unit, CPU)中運行相應的內核檢測線程,中央處理器的數量為至少兩個;操作系統(tǒng)是管理硬件與軟件資源的程序,同時也是計算機系統(tǒng)的內核與基石。操作系統(tǒng)的功能包括管理計算機系統(tǒng)的硬件、軟件及數據資源;控制程序運行;為其它應用軟件提供支持等。操作系統(tǒng)的型態(tài)多樣,不同機器安裝的操作系統(tǒng)可以從簡單到復雜,可以從手機的嵌入式系統(tǒng)到超級電腦的大型操作系統(tǒng)。目前微機上常見的操作系統(tǒng)有DOS、OS/2、UNIX、XENIX、LINUX、Windows、Netware 等。
中央處理器是一臺計算機的運算核心和控制核心,其功能主要是解釋計算機指令以及處理計算機軟件中的數據。本發(fā)明實施例中,對于一個產品中存在至少兩個處理核心的情況,也把一個處理核心視為一個中央處理器。內核檢測線程用于檢測操作系統(tǒng)管理的所述內核檢測線程所在的中央處理器的運行情況,確認所述內核檢測線程所在的中央處理器是否發(fā)生了異常。在本發(fā)明實施例中,操作系統(tǒng)管理的中央處理器的數量至少為兩個,根據實際應用,操作系統(tǒng)管理的中央處理器的數量可以為兩個以上的多個。步驟S102 :使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;計數是一種最簡單基本的運算,時間計數就是對時間實現邏輯運算,以實現計數和控制的功能。當前時間是操作系統(tǒng)的當前時間,對于操作系統(tǒng)管理的每個中央處理器,當前時間都是一樣的。第一設定值可以進行配置,例如第一設定值默認為30秒時,比較其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于30秒,如果大于30秒,進行異常處理,如果小于等于30秒,表示中央處理器運行正常。使每個所述內核檢測線程進入循環(huán)調用過程,可以不間斷的檢測操作系統(tǒng)管理的所述內核檢測線程所在的中央處理器是否發(fā)生了異常,以便于及時對發(fā)生的異常進行處理,并恢復操作系統(tǒng)。在每個循環(huán)中,使每個所述內核檢測線程更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,只要有一個中央處理器的內核檢測線程沒有發(fā)生異常,這個沒有異常的中央處理器的內核檢測線程可以通過檢測另外一個甚至多個所述中央處理器的時間計數,并因此可以通過判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值,從而判斷出另外一個甚至多個所述中央處理器是否發(fā)生了異常。步驟S 103 :若其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值,則進行異常處理。
若其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值,表明在一個周期內甚至多個周期內另外一個甚至多個所述中央處理器的時間計數沒有得到更新,因而另外一個甚至多個所述中央處理器發(fā)生了異常,進行異常處理,以便于恢復操作系統(tǒng)。進行異常處理的步驟具體為調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程??傊?,通過這種一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數的方式,可以檢測出操作系統(tǒng)某個或多個中央處理器出現死鎖所導致的操作系統(tǒng)異常,避免中央處理器在出問題時不能自己檢測自己的情況發(fā)生。參閱圖2,圖2是本發(fā)明實施例一種操作系統(tǒng)異常的處理方法另一實施例的流程圖,所述方法包括步驟S201 :在操作系統(tǒng)管理的每個中央處理器(Central Processing Unit, CPU)中運行相應的內核檢測線程,中央處理器的數量為至少兩個;步驟S201的詳細描述請參見圖I中的步驟SlOl以及相應的文字說明。步驟S202 :使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間(步驟S202a),并采用對應其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;其中,在步驟S202中,在執(zhí)行所述采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值時,可以執(zhí)行步驟S202b
步驟S202b :采用對應所述第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值,其中,η是自然數。步驟S202b采用對應所述第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,可以依次檢測中央處理器是否發(fā)生了異常,避免了檢測的無序性和盲目性。其中,步驟S202b包括步驟S202bl和步驟S202b2,具體內容如下步驟S202bl :判斷所述第η個中央處理器是否為本次循環(huán)中的最后一個中央處理器;如果不是最后一個中央處理器,進入步驟S202b2,如果是最后一個中央處理器,進入步驟 S202b3。步驟S202b2 :若所述第η個中央處理器不是本次循環(huán)中的最后一個中央處理器,則進行所述采用對應第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值
是否大于第一設定值;步驟S202b3 :若所述第η個中央處理器是本次循環(huán)中的最后一個中央處理器,則采用對應所述第η個中央處理器的內核檢測線程檢測第一個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第一個中央處理器的時間計數之間的差值是否大于
第一設定值。步驟S203 :若其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值,則進行異常處理。步驟S203與圖I中的步驟S103相同,詳細描述請參見圖I中的步驟S103的文字說明。進行異常處理的步驟具體為調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程。
本發(fā)明實施例通過判斷第η個中央處理器是否為本次循環(huán)中的最后一個中央處 理器,采用依次輪詢的檢測機制,保證操作系統(tǒng)所管理的每個中央處理器都被檢測到,而不會出現漏檢,可以及時的發(fā)現發(fā)生了異常的中央處理器。參閱圖3,圖3是本發(fā)明實施例一種操作系統(tǒng)異常的處理方法另一實施例的流程圖,所述方法包括步驟S301 :將檢測操作系統(tǒng)異常的內核模塊加載到操作系統(tǒng)中,并首次設置每個中央處理器的時間計數為當前時間,以及在每個中央處理器中創(chuàng)建內核檢測線程;內核模塊是一些可以讓操作系統(tǒng)內核在需要時載入和執(zhí)行的代碼,它們擴展了操作系統(tǒng)內核的功能卻不需要重新啟動操作系統(tǒng)。如果沒有內核模塊,必須一次又一次重新編譯生成單內核操作系統(tǒng)的內核鏡像來加入新的功能。將檢測操作系統(tǒng)異常的內核模塊加載到操作系統(tǒng)中,需要對內核模塊進行初始化,初始化的過程是首次設置每個中央處理器的時間計數為當前時間,以及在每個中央處理器中創(chuàng)建內核檢測線程。需要說明的是,通過加載內核模塊的方式,可以提升操作系統(tǒng)對于多種異常的檢測能力。步驟S302 :使每個內核檢測線程在所在的中央處理器的軟中斷中注冊一個定時器;軟中斷是利用硬件中斷的概念,用軟件方式實現的中斷,也就是程序運行時其他程序對它的中斷,從而實現宏觀上的異步執(zhí)行效果。在所在的中央處理器的軟中斷中注冊一個定時器,可以防止在所有的內核檢測線程停止工作時,能夠通過任何一個中央處理器的軟中斷來檢測異常,并處理異常,只要有一個中央處理器的軟中斷運行正常,就可以檢測出操作系統(tǒng)的異常狀況。步驟S303 :在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,中央處理器的數量為至少兩個;步驟S304 :使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中,包括步驟S304a、步驟S304b、步驟S304c以及步驟S304d。步驟S304a包括步驟S304al、步驟S304a2以及步驟S304a3 ;步驟S304b包括步驟S304bl和步驟S304b2 ;步驟S304c包括步驟S304cl、步驟S304c2、步驟S304c3以及步驟S304c4 ;步驟S304d包括步驟S304dl和步驟S304d2。其中,步驟S304al首先運行,步驟S304b、步驟S304c以及步驟S304d在步驟S304al的后面運行,步驟S304b、步驟S304c以及步驟S304d運行完畢后,進入步驟S304a2以及步驟S304a3 ;步驟S304b、步驟S304c以及步驟S304d沒有先后順序,可以并行一起運行,也可以先后順序運行,在一個周期內運行完畢即可。具體步驟包括在步驟S304a中包括步驟S304al :使每個內核檢測線程在進入循環(huán)調用過程后的每個循環(huán)之前,首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值;步驟S304al在每個循環(huán)之前執(zhí)行,首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值,在定時器初始值的時間長度結束后,將啟動異常處理的程序,如果使該定時器初始值在每個循環(huán)之前得到更新,表明該定時器所在的中央處理器的內核檢測線程運行正常,如果該定時器初始值在某個循環(huán)之前沒有得到更新,表明該定時器所在的中央處理器的內核檢測線程停止了運行,發(fā)生了異常,因而將啟動異常處理的程序。 在步驟S304b中包括步驟S304bl :更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;步驟S304b2 :若其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值,則進行異常處理;有關步驟S304b的具體執(zhí)行情況,請參見圖I和相關的文字描述,在此不再進行贅敘。在步驟S304c中包括步驟S304cl :向所在的中央處理器申請進行異常處理所需的待用內存;向所在的中央處理器申請進行異常處理所需的待用內存,是為了檢測內核檢測線程所在的中央處理器的內存使用是否正常。如果所在的中央處理器的內存使用正常,申請會獲得成功,如果所在的中央處理器的內存使用不正常,出現內存嚴重不足,申請不會獲得成功。步驟S304c2 :判斷異常處理所需的待用內存申請是否在定時器的初始值的定時時間內獲得成功;如果該申請沒有獲得成功,進入步驟S304c3,如果該申請獲得成功,進入步驟 S304c4。異常處理所需的待用內存申請是否獲得成功的時間長度限制,是所在的中央處理器的軟中斷中的定時器的初始值的定時時間。步驟S304c3 :若異常處理所需的待用內存申請在定時器的初始值的定時時間內沒有獲得成功,則進行異常處理;在定時器的初始值的定時時間內,該申請沒有獲得成功,表明所在的中央處理器的內存使用不正常,出現內存嚴重不足,檢測線程會長時間阻塞在內存申請的調用中,導致檢測線程不會在預期的時間對所在的中央處理器的定時器的初始值進行更新,表明該定時器所在的中央處理器的內核檢測線程停止了運行,發(fā)生了異常,因而將啟動異常處理的程序。步驟S304c4 :若異常處理所需的待用內存申請在定時器的初始值的定時時間內獲得成功,則釋放異常處理所需的待用內存。在定時器初始值的定時時間內,該申請獲得成功,表明所在的中央處理器的內存使用正常,因此釋放所述異常處理所需的待用內存。在步驟S304d中包括步驟S304dl :判斷內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程中是否存在處于不可中斷睡眠狀態(tài)的線程;長時間處于不可中斷睡眠狀態(tài)(D狀態(tài))的線程,是操作系統(tǒng)異常的一種表現,表明有內核資源被占用后一直沒有得到釋放,有必要及時發(fā)現這種異常并進行異常處理,以便于恢復操作系統(tǒng)。進一步地,判斷內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程中是否存在處于不可中斷睡眠狀態(tài)的線程的具體步驟包括 a.判斷內核檢測線程所在的中央處理器的當前時間與每個內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值是否大于第
二設定值;當操作系統(tǒng)的線程在運行結束進入睡眠狀態(tài)后,內核會在該線程的任務結構(task struct)中記錄該線程上一次運行的時間。內核檢測線程所在的中央處理器的當前時間與每個內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值是該線程處于不可中斷睡眠狀態(tài)的時間。b.若大于第二設定值,則判斷為存在處于不可中斷睡眠狀態(tài)的線程。第二設定值可以進行配置,例如第二設定值默認為150秒時,比較內核檢測線程所在的中央處理器的當前時間與每個內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值是否大于150秒,如果大于150秒,判斷為存在處于不可中斷睡眠狀態(tài)的線程,如果小于等于150秒,判斷為沒有處于不可中斷睡眠狀態(tài)的線程。內核檢測線程所在的中央處理器的當前時間與每個內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值即該線程處于不可中斷睡眠狀態(tài)的時間大于第二設定值,表明該線程為處于不可中斷睡眠狀態(tài)的線程,也就是內核檢測線程所在的中央處理器存在處于不可中斷睡眠狀態(tài)的線程。步驟S304d2 :若存在處于不可中斷睡眠狀態(tài)的線程,則進行異常處理。內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程中,有長時間處于不可中斷睡眠狀態(tài)(D狀態(tài))的線程,是操作系統(tǒng)異常的一種表現,需要進行異常處理,以便于恢復操作系統(tǒng)。在步驟S304a中包括步驟S304a2 :在當前循環(huán)結束時,使所在的中央處理器的軟中斷判斷定時器的初始值的定時時間是否結束;在定時器的初始值的定時時間內,當執(zhí)行完步驟S304b、步驟S304c以及步驟S304d后,一個循環(huán)結束,此時若所在的中央處理器的內核檢測線程正常工作,應該返回步驟S304al,更新所述定時器的初始值。步驟S304a3 :若定時器的初始值的定時時間結束,則進行異常處理。
若定時器的初始值的定時時間結束,表明所在的中央處理器的內核檢測線程停止工作,發(fā)生了異常,需要進行異常處理,以便于恢復操作系統(tǒng)。進行異常處理的步驟具體為調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程。需要說明的是,在一個周期內將步驟S304al首先運行后,可以根據實際需要,將步驟S304b、步驟S304c以及步驟S304d按照客戶的要求并行運行,或者確定運行的順序。在一個周期內運行完畢步驟S304al、步驟S304b、步驟S304c、步驟S304d、步驟S304a2以及步驟S304a3后,再返回步驟S304al、步驟S304b、步驟S304c、步驟S304d、步驟S304a2以及步驟S304a3,每次循環(huán)開始都從S304al開始。綜上所述,本發(fā)明實施例加載內核模塊的方式,提升系統(tǒng)對于多種異常的檢查能力,當發(fā)現異常時,獲取用于異常原因分析的內存鏡像,并通過重啟,恢復操作系統(tǒng)。該方法具有平臺無關的特點,可在操作系統(tǒng)多種硬件架構下使用;同時具有易于部署實施的特點, 可在線的部署實施。本發(fā)明實施例輪詢檢測中央處理器的方式,可以檢測某個或多個中央處理器出現的中央處理器死鎖,包括內核中斷態(tài)和非中斷態(tài)的死鎖;申請內存的方式,可以檢測操作系統(tǒng)內存嚴重不足導致的操作系統(tǒng)假死;判斷不可中斷睡眠狀態(tài)的線程,可以檢測操作系統(tǒng)由于長時間處于不可中斷睡眠狀態(tài)的線程而發(fā)生的異常;軟中斷定時器可以防止所有的內核檢測線程停止工作時導致的異常。當然,也可以根據實際情況減少圖3中相應步驟的運行。下面列舉實施例進行說明。參閱圖4,圖4是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖,本實施例的方法流程與圖3的流程基本相同,不同之處在于圖4減少了圖3中的步驟S304d,圖4中的步驟S404a同圖3中的步驟S304a,圖4中的步驟S404b同圖3中的步驟S304b,圖4中的步驟S404c同圖3中的步驟S304c,圖4中其它沒有標號的步驟與圖3中對應步驟相同,具體內容也請參見圖3中對應步驟的文字說明,在此不再進行贅敘。參閱圖5,圖5是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖,本實施例的方法流程與圖3的流程基本相同,不同之處在于圖5減少了圖3中的步驟S301和步驟S304d,圖5中的步驟S504a同圖3中的步驟S304a,圖5中的步驟S504b同圖3中的步驟S304b,圖5中的步驟S504c同圖3中的步驟S304c,圖5中其它沒有標號的步驟與圖3中對應步驟相同,具體內容也請參見圖3中對應步驟的文字說明,在此不再進行贅敘。參閱圖6,圖6是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖,本實施例的方法流程與圖3的流程基本相同,不同之處在于圖6減少了圖3中的步驟S304c,圖6中的步驟S604a同圖3中的步驟S304a,圖6中的步驟S604b同圖3中的步驟S304b,圖6中的步驟S604d同圖3中的步驟S304d,圖6中其它沒有標號的步驟與圖3中對應步驟相同,具體內容也請參見圖3中對應步驟的文字說明,在此不再進行贅敘。參閱圖7,圖7是本發(fā)明一種操作系統(tǒng)異常的處理方法又一實施例的流程圖,本實施例的方法流程與圖3的流程基本相同,不同之處在于圖7減少了圖3中的步驟S301和步驟S304c,圖7中的步驟S704a同圖3中的步驟S304a,圖7中的步驟S704b同圖3中的步驟S304b,圖7中的步驟S704d同圖3中的步驟S304d,圖7中其它7沒有標號的步驟與圖3中對應步驟相同,具體內容也請參見圖3中對應步驟的文字說明,在此不再進行贅敘。針對可以根據實際情況減少相應步驟的運行,上述列舉的實施例只是其中的幾種情況,具體的其它實施例,在此不再一一贅敘。參閱圖8,圖8是本發(fā)明一種操作系統(tǒng)異常的處理裝置一實施例的結構示意圖,該裝置包括運行模塊201、檢測判斷模塊202以及第一異常處理模塊203。運行模塊201用于在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,中央處理器的數量為至少兩個;通過運行內核檢測線程,可以檢測操作系統(tǒng)管理的所述內核檢測線程所在的中央處理器的運行情況,確認所述內核檢測線程所在的中央處理器是否發(fā)生了異常。
檢測判斷模塊202用于使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;通過使每個內核檢測線程進入循環(huán)調用過程,能夠不間斷的檢測操作系統(tǒng)管理的內核檢測線程所在的中央處理器是否發(fā)生了異常,以便于及時對發(fā)生的異常進行處理,并恢復操作系統(tǒng)。第一異常處理模塊203用于在其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值時,則進行異常處理。進一步,第一異常處理模塊203具體用于調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP (Kernel Dump)是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程。總之,一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數的檢測方式,可以檢測出操作系統(tǒng)某個或多個中央處理器出現死鎖所導致的操作系統(tǒng)異常。參閱圖9,圖9是本發(fā)明一種操作系統(tǒng)異常的處理裝置另一實施例的結構示意圖,該裝置包括運行模塊301、檢測判斷模塊302以及第一異常處理模塊303。運行模塊301用于在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,中央處理器的數量為至少兩個;檢測判斷模塊302用于使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間(更新單元3021),并采用對應其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;檢測判斷模塊302包括檢測判斷單元3022,檢測判斷單元3022用于采用對應第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值,其中,η是自然數。通過上述方式,可以依次檢測中央處理器是否發(fā)生了異常,避免了檢測的無序性和盲目性。
進一步地,檢測判斷單元3022包括第一判斷電路30221和第二判斷電路30222。第一判斷電路30221用于判斷第η個中央處理器是否為本次循環(huán)中的最后一個中央處理器;第二判斷電路30222用于在第η個中央處理器不是本次循環(huán)中的最后一個中央處理器時,進行采用對應第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值;在第η個中央處理器是本次循環(huán)中的最后一個中央處理器時,采用對應第η個中央處理器的內核檢測線程檢測第一個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第一個中央處理器的時間計數之間的差值是否大于第一設定值。第一異常處理模塊303用于在其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值時,則進行異常處理。
進一步,第一異常處理模塊303具體用于調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP (Kernel Dump)是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程。本發(fā)明實施例采用第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,最后一個中央處理器的內核檢測線程檢測第一個中央處理器的時間計數,這種依次輪詢的檢測機制,可以保證操作系統(tǒng)所管理的每個中央處理器都得到檢測,而不會出現漏檢,可以及時的發(fā)現發(fā)生了異常的中央處理器。參閱圖10,圖10是本發(fā)明實施例一種操作系統(tǒng)異常的處理裝置另一實施例的結構示意圖,該裝置包括加載模塊401、注冊模塊402、運行模塊403、更新模塊404、檢測判斷模塊405、第一異常處理模塊406、申請模塊407、第二判斷模塊408、第三異常處理模塊409、釋放模塊410、第三判斷模塊411、第四異常處理模塊412、第一判斷模塊413以及第二異常處理模塊414。加載模塊401用于將檢測操作系統(tǒng)異常的內核模塊加載到操作系統(tǒng)中,并首次設置每個中央處理器的時間計數為當前時間,以及在每個中央處理器中創(chuàng)建內核檢測線程;將檢測操作系統(tǒng)異常的內核模塊加載到操作系統(tǒng)中,需要對內核模塊進行初始化,初始化的過程是首次設置每個中央處理器的時間計數為當前時間,以及在每個中央處理器中創(chuàng)建內核檢測線程。通過加載內核模塊的方式,可以提升操作系統(tǒng)對于多種異常的檢測能力。注冊模塊402用于使每個內核檢測線程在所在的中央處理器的軟中斷中注冊一個定時器;在所在的中央處理器的軟中斷中注冊一個定時器,可以防止在所有的內核檢測線程停止工作時,能夠通過任何一個中央處理器的軟中斷來檢測異常,并處理異常,只要有一個中央處理器的軟中斷運行正常,就可以檢測出操作系統(tǒng)的異常狀況。運行模塊403用于在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,中央處理器的數量為至少兩個;更新模塊404用于使每個內核檢測線程在進入循環(huán)調用過程后的每個循環(huán)之前,首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值;首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值,如果使該定時器初始值在每個循環(huán)之前得到更新,表明該定時器所在的中央處理器的內核檢測線程運行正常,如果該定時器初始值在某個循環(huán)之前沒有得到更新,表明該定時器所在的中央處理器的內核檢測線程停止了運行,發(fā)生了異常,因而將啟動異常處理的程序。檢測判斷模塊405用于使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;第一異常處理模塊406用于在其中一個中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值時,進行異常處理。
有關檢測判斷模塊405和第一異常處理模塊406的具體情況可以參考圖8以及相關的文字說明部分中的檢測判斷模塊202和第一異常處理模塊203,在此不再進行贅敘。申請模塊407用于向所在的中央處理器申請進行異常處理所需的待用內存;如果所在的中央處理器的內存使用正常,申請會獲得成功,如果所在的中央處理器的內存使用不正常,出現內存嚴重不足,申請不會獲得成功。第二判斷模塊408用于判斷異常處理所需的待用內存申請是否在定時器的初始值的定時時間內獲得成功;異常處理所需的待用內存申請是否獲得成功的時間長度限制是所在的中央處理器的軟中斷中的定時器的初始值的定時時間。第三異常處理模塊409用于在異常處理所需的待用內存申請在定時器的初始值的定時時間內沒有獲得成功時,進行異常處理;在定時器的初始值的定時時間內,該申請沒有獲得成功,表明所在的中央處理器的內存使用不正常,出現內存嚴重不足,檢測線程會長時間阻塞在內存申請的調用中,導致在預期的時間,所在的中央處理器的定時器的初始值不會得到更新,因而發(fā)生了異常,將啟動異常處理的程序。進一步地,第三異常處理模塊409具體用于調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程。釋放模塊410用于在異常處理所需的待用內存申請在定時器的初始值的定時時間內獲得成功,釋放異常處理所需的待用內存。在定時器初始值的定時時間內,該申請獲得成功,表明所在的中央處理器的內存使用正常,因此釋放所述異常處理所需的待用內存。第三判斷模塊411用于判斷內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程中是否存在處于不可中斷睡眠狀態(tài)的線程;長時間處于不可中斷睡眠狀態(tài)(D狀態(tài))的線程,表明有內核資源被占用后一直沒有得到釋放,需要及時發(fā)現這種異常并進行異常處理,以便于恢復操作系統(tǒng)。進一步地,第三判斷模塊411包括判斷單元和輸出單元。判斷單元用于判斷內核檢測線程所在的中央處理器的當前時間與每個內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值是否大于第二設定值; 內核檢測線程所在的中央處理器的當前時間與每個內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值是該線程處于不可中斷睡眠狀態(tài)的時間。輸出單元用于在大于第二設定值時,判斷為存在處于不可中斷睡眠狀態(tài)的線程。該線程處于不可中斷睡眠狀態(tài)的時間大于第二設定值,表明該線程為處于不可中斷睡眠狀態(tài)的線程,也就是內核檢測線程所在的中央處理器存在處于不可中斷睡眠狀態(tài)的線程。第四異常處理模塊412用于在存在處于不可中斷睡眠狀態(tài)的線程時,進行異常處
進一步地,第四異常處理模塊412具體用于調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程。第一判斷模塊413用于在當前循環(huán)結束時,使所在的中央處理器的軟中斷判斷定時器的初始值的定時時間是否結束;在定時器的初始值的定時時間內,一個循環(huán)結束后,此時若所在的中央處理器的內核檢測線程正常工作,應該返回更新模塊404,更新定時器的初始值。第二異常處理模塊414用于在定時器的初始值的定時時間結束時,進行所述異常處理。定時器的初始值的定時時間結束,表明所在的中央處理器的內核檢測線程停止工作,發(fā)生了異常,需要進行異常處理,以便于恢復操作系統(tǒng)。進一步地,第二異常處理模塊414具體用于調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,PANIC函數是操作系統(tǒng)內核檢測到操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,KDUMP是在操作系統(tǒng)發(fā)生異常后,將異常的操作系統(tǒng)的內存保存到磁盤的過程。本發(fā)明實施例加載內核模塊的方式,提升系統(tǒng)對于多種異常的檢查能力;輪詢檢測中央處理器的方式,可以檢測某個或多個中央處理器出現的死鎖;申請內存的方式,可以檢測操作系統(tǒng)內存嚴重不足導致的假死;判斷不可中斷睡眠狀態(tài)的線程,可以檢測由于長時間處于不可中斷睡眠狀態(tài)的線程而發(fā)生的異常;軟中斷定時器可以防止所有的內核檢測線程停止工作時導致的異常。當發(fā)現異常時,獲取用于異常原因分析的內存鏡像,并通過重啟,恢復操作系統(tǒng)。在實際應用中,可以減少圖10中的一些模塊,下面列舉實施例進行說明。參閱圖11,圖11是本申請一種操作系統(tǒng)異常的處理裝置又一實施例的結構示意圖,本實施例與圖10的實施例不同之處在于本實施例沒有圖10實施例的第三判斷模塊411和第四異常處理模塊412,圖11中其它沒有標號的模塊和圖10中對應的模塊相同,具體內容請參見圖10及相應實施例的描述,在此不再一一贅敘。參閱圖12,圖12是本申請一種操作系統(tǒng)異常的處理裝置又一實施例的結構示意圖,本實施例與圖10的實施例不同之處在于本實施例沒有圖10實施例的申請模塊407、第二判斷模塊408、第三異常處理模塊409以及釋放模塊410,圖12中其它沒有標號的模塊和圖10中對應的模塊相同,具體內容請參見圖10及相應實施例的描述,在此不再贅敘。當然,在實際應用中,減少圖10中的一些模塊還有其它實施例,在此不再進行 贅敘。本申請還提供了一種計算機系統(tǒng),該系統(tǒng)包括硬件和運行在硬件之上的操作系統(tǒng),硬件包括存儲器和至少兩個中央處理器;操作系統(tǒng)用于在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值,若其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于第一設定值,則進行異常處理。
本發(fā)明方案可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序單元。一般地,程序單元包括執(zhí)行特定任務或實現特定抽象數據類型的例程、程序、對象、組件、數據結構等等。也可以在分布式計算環(huán)境中實踐本發(fā)明方案,在這些分布式計算環(huán)境中,由通過通信網絡而被連接的遠程處理設備來執(zhí)行任務。在分布式計算環(huán)境中,程序單元可以位于包括存儲設備在內的本地和遠程計算機存儲介質中。本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。本領域普通技術人員可以意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結合來實現。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術方案的特定應用和設計約束條件。專業(yè)技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本發(fā)明的范圍。所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。所述功能如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基于這樣的理解,本發(fā)明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何 熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應以所述權利要求的保護范圍為準。
權利要求
1.一種操作系統(tǒng)異常的處理方法,其特征在于,所述方法包括 在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,所述中央處理器的數量為至少兩個; 使每個所述內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值; 若所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于所述第一設定值,則進行異常處理。
2.根據權利要求I所述的方法,其特征在于 所述采用對應其中一個中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值的步驟具體包括 采用對應所述第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值,其中,η是自然數。
3.根據權利要求2所述的方法,其特征在于 所述采用對應第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值的步驟具體包括 判斷所述第η個中央處理器是否為本次循環(huán)中的最后一個中央處理器; 若所述第η個中央處理器不是本次循環(huán)中的最后一個中央處理器,則進行所述采用對應第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值的步驟;若所述第η個中央處理器是本次循環(huán)中的最后一個中央處理器,則采用對應所述第η個中央處理器的內核檢測線程檢測第一個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第一個中央處理器的時間計數之間的差值是否大于第一設定值。
4.根據權利要求I所述的方法,其特征在于在所述在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程的步驟之前,所述方法還包括 使每個所述內核檢測線程在所在的中央處理器的軟中斷中注冊一個定時器。
5.根據權利要求4所述的方法,其特征在于,在所述在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程的步驟之后,所述方法還包括 使每個所述內核檢測線程在進入循環(huán)調用過程后的每個循環(huán)之前,首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值; 在當前循環(huán)結束時,使所述所在的中央處理器的軟中斷判斷所述定時器的初始值的定時時間是否結束; 若所述定時器的初始值的定時時間結束,則進行所述異常處理。
6.根據權利要求5所述的方法,其特征在于,在所述使每個所述內核檢測線程首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值的步驟之后,所述方法還包括 向所在的中央處理器申請進行所述異常處理所需的待用內存; 判斷所述異常處理所需的待用內存申請是否在所述定時器的初始值的定時時間內獲得成功; 若所述異常處理所需的待用內存申請在所述定時器的初始值的定時時間內沒有獲得成功,則進行所述異常處理,若所述異常處理所需的待用內存申請在所述定時器的初始值的定時時間內獲得成功,則釋放所述異常處理所需的待用內存。
7.根據權利要求5所述的方法,其特征在于,在使每個所述內核檢測線程首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值的步驟之后,所述方法還包括 判斷所述內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程中是否存 在處于不可中斷睡眠狀態(tài)的線程; 若存在所述處于不可中斷睡眠狀態(tài)的線程,則進行所述異常處理。
8.根據權利要求7所述的方法,其特征在于,所述判斷內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程中是否存在處于不可中斷睡眠狀態(tài)的線程的步驟具體包括 判斷所述內核檢測線程所在的中央處理器的當前時間與每個所述內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值是否大于第二設定值; 若大于所述第二設定值,則確定存在所述處于不可中斷睡眠狀態(tài)的線程。
9.根據權利要求I至8任一項所述的方法,其特征在于 所述進行異常處理的步驟具體為調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng); 其中,定義PANIC函數是所述操作系統(tǒng)內核檢測到所述操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,定義KDUMP是在所述操作系統(tǒng)發(fā)生異常后,將所述異常的操作系統(tǒng)的內存保存到磁盤的過程。
10.根據權利要求I至8任一項所述的方法,其特征在于 在所述操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程的步驟之前,包括將所述檢測操作系統(tǒng)異常的內核模塊加載到所述操作系統(tǒng)中,并首次設置每個所述中央處理器的時間計數為當前時間,以及在每個所述中央處理器中創(chuàng)建內核檢測線程。
11.一種操作系統(tǒng)異常的處理裝置,其特征在于,所述裝置包括 運行模塊,用于在操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,所述中央處理器的數量為至少兩個; 檢測判斷模塊,用于使每個所述內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值; 第一異常處理模塊,用于在所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于所述第一設定值時,則進行異常處理。
12.根據權利要求11所述的裝置,其特征在于,所述檢測判斷模塊包括檢測判斷單元,所述檢測判斷單元用于采用對應所述第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值,其中,η是自然數。
13.根據權利要求12所述的裝置,其特征在于,所述檢測判斷單元包括 第一判斷電路,用于判斷所述第η個中央處理器是否為本次循環(huán)中的最后一個中央處理器; 第二判斷電路,用于在所述第η個中央處理器不是本次循環(huán)中的最后一個中央處理器時,進行所述采用對應第η個中央處理器的內核檢測線程檢測第η+1個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第η+1個中央處理器的時間計數之間的差值是否大于第一設定值的步驟;在所述第η個中央處理器是本次循環(huán)中的最后一個中央處理器時,采用對應所述第η個中央處理器的內核檢測線程檢測第一個中央處理器的時間計數,判斷對應第η個中央處理器的當前時間與第一個中央處理器的時間計數之間的差值是否大于第一設定值。
14.根據權利要求11所述的裝置,其特征在于,所述裝置還包括注冊模塊,所述注冊模塊用于使每個所述內核檢測線程在所在的中央處理器的軟中斷中注冊一個定時器。
15.根據權利要求14所述的裝置,其特征在于,所述裝置還包括 更新模塊,用于使每個所述內核檢測線程在進入循環(huán)調用過程后的每個循環(huán)之前,首先更新所在的中央處理器的軟中斷中已經注冊的定時器的初始值; 第一判斷模塊,用于在當前循環(huán)結束時,使所述所在的中央處理器的軟中斷判斷所述定時器的初始值的定時時間是否結束; 第二異常處理模塊,用于在所述定時器的初始值的定時時間結束時,進行所述異常處理。
16.根據權利要求15所述的裝置,其特征在于,所述裝置還包括 申請模塊,用于向所在的中央處理器申請進行所述異常處理所需的待用內存; 第二判斷模塊,用于判斷所述異常處理所需的待用內存申請是否在所述定時器的初始值的定時時間內獲得成功; 第三異常處理模塊,用于在所述異常處理所需的待用內存申請在所述定時器的初始值的定時時間內沒有獲得成功時,進行所述異常處理; 釋放模塊,用于在所述異常處理所需的待用內存申請在所述定時器的初始值的定時時間內獲得成功時,釋放所述異常處理所需的待用內存。
17.根據權利要求15所述的裝置,其特征在于,所述裝置還包括 第三判斷模塊,用于判斷所述內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程中是否存在處于不可中斷睡眠狀態(tài)的線程; 第四異常處理模塊,用于在存在處于不可中斷睡眠狀態(tài)的線程時,進行所述異常處理。
18.根據權利要求17所述的裝置,其特征在于,所述第三判斷模塊包括 判斷單元,用于判斷所述內核檢測線程所在的中央處理器的當前時間與每個所述內核檢測線程所在的中央處理器中除內核檢測線程外的其他線程的上一次運行的時間之間的差值是否大于第二設定值; 輸出單元,用于在大于第二設定值時,確定存在處于不可中斷睡眠狀態(tài)的線程。
19.根據權利要求11-18任一項所述的裝置,其特征在于,所述第一、第二、第三以及第四異常處理模塊具體用于調用PANIC函數,觸發(fā)KDUMP并重啟所述操作系統(tǒng);其中,定義PANIC函數是所述操作系統(tǒng)內核檢測到所述操作系統(tǒng)處于異常狀態(tài)后采取行為的函數,定義KDUMP是在所述操作系統(tǒng)發(fā)生異常后,將所述異常的操作系統(tǒng)的內存保存到磁盤的過程。
20.根據權利要求11-18任一項所述的裝置,其特征在于,所述裝置還包括加載模塊,所述加載模塊用于將檢測操作系統(tǒng)異常的內核模塊加載到所述操作系統(tǒng)中,并首次設置每個所述中央處理器的時間計數為當前時間,以及在每個所述中央處理器中創(chuàng)建內核檢測線程。
21.一種計算機系統(tǒng),其特征在于 所述系統(tǒng)包括硬件和運行在硬件之上的操作系統(tǒng),所述硬件包括存儲器和至少兩個中央處理器; 所述操作系統(tǒng)用于在所述操作系統(tǒng)管理的每個中央處理器中運行相應的內核檢測線程,使每個所述內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個所述中央處理器的內核檢測線程檢測另外一個所述中央處理器的時間計數,判斷所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值,若所述其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值大于所述第一設定值,則進行異常處理。
全文摘要
本發(fā)明實施例公開了一種操作系統(tǒng)異常的處理方法及裝置。所述方法包括運行相應的內核檢測線程;使每個內核檢測線程進入循環(huán)調用過程,在每個循環(huán)中更新所在的中央處理器的時間計數為當前時間,并采用對應其中一個中央處理器的內核檢測線程檢測另外一個中央處理器的時間計數,判斷其中一個所述中央處理器的當前時間與另外一個中央處理器的時間計數之間的差值是否大于第一設定值;若大于第一設定值,則進行異常處理。通過上述方式,本發(fā)明實施例能夠檢測出操作系統(tǒng)某個或多個中央處理器出現死鎖所導致的操作系統(tǒng)異常。
文檔編號G06F11/07GK102819466SQ20121022304
公開日2012年12月12日 申請日期2012年6月29日 優(yōu)先權日2012年6月29日
發(fā)明者林云凌 申請人:華為技術有限公司