一種任務(wù)異常的處理方法及裝置制造方法
【專利摘要】本發(fā)明實施例提供一種任務(wù)異常的處理方法及裝置,涉及計算機領(lǐng)域,能夠?qū)θ蝿?wù)的異常進行自動排錯處理,防止系統(tǒng)出現(xiàn)混亂或者崩潰,節(jié)約人力和物力。任務(wù)異常的處理方法用于處理器,包括:若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定任務(wù)發(fā)生死循環(huán)異常或死鎖異常,當確定任務(wù)發(fā)生死鎖異常時,釋放任務(wù)占用的資源,繼續(xù)執(zhí)行任務(wù),當確定任務(wù)發(fā)生死循環(huán)異常時,修改任務(wù)的循環(huán)體的代碼或修改任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行任務(wù)。本發(fā)明實施例用于任務(wù)異常的處理。
【專利說明】一種任務(wù)異常的處理方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機【技術(shù)領(lǐng)域】,尤其涉及一種任務(wù)異常的處理方法及裝置。
【背景技術(shù)】
[0002] 操作系統(tǒng)(Operating System,OS)是管理和控制計算機硬件與軟件資源的計算機 程序。在操作系統(tǒng)中可以同時運行多個小的程序模塊,每一個程序模塊可以稱之為一個任 務(wù)。多個任務(wù)可以按照執(zhí)行的先后順序被添加到任務(wù)鏈表中,然后處理器按照任務(wù)在任務(wù) 鏈表中的先后位置順序執(zhí)行任務(wù),在任務(wù)的運行過程中,可能由于一些不可預(yù)知的原因,執(zhí) 行了非法指令,導(dǎo)致該任務(wù)無法正常進行,進而引起系統(tǒng)出現(xiàn)混亂或者崩潰。
[0003] 出現(xiàn)異常的任務(wù)一般有兩種情況:死循環(huán)和死鎖。死循環(huán)指的是無法靠自身的控 制終止的循環(huán)。當一個任務(wù)在運行過程中,由于運行了一些非法指令,而使程序中的循環(huán)判 斷條件一直無法得到滿足,循環(huán)一直進行,這時就出現(xiàn)了死循環(huán)。死鎖指的是兩個或兩個以 上的任務(wù)在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外部操作,它們都 將無法繼續(xù)運行下去,而處于一直等待的狀態(tài)。一般情況下,由于任務(wù)鏈表中的任務(wù)是順序 執(zhí)行的,如果一個任務(wù)出現(xiàn)死循環(huán)或者死鎖,將會導(dǎo)致后面的任務(wù)無法得到執(zhí)行,嚴重時可 能導(dǎo)致整個系統(tǒng)故障。
[0004] 現(xiàn)有技術(shù)中,當處理器當前執(zhí)行的任務(wù)出現(xiàn)異常時,處理器無法對該異常任務(wù)進 行自動排錯處理,而是會輸出針對該異常任務(wù)的調(diào)用棧信息,然后程序員會根據(jù)該異常任 務(wù)的調(diào)用棧信息對異常任務(wù)的出錯位置進行定位,并進行排錯處理,這樣會耗費較多的人 力物力。而且,當該異常任務(wù)較嚴重時,如果程序員無法對異常任務(wù)進行及時處理,可能會 導(dǎo)致系統(tǒng)出現(xiàn)混亂或者崩潰,進而導(dǎo)致處理器對系統(tǒng)進行重啟,影響正常任務(wù)的執(zhí)行。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的實施例提供一種任務(wù)異常的處理方法及裝置,能夠?qū)θ蝿?wù)的異常進行自 動排錯處理,防止系統(tǒng)出現(xiàn)混亂或者崩潰,節(jié)約人力和物力。
[0006] 為達到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
[0007] 本發(fā)明實施例一方面提供一種任務(wù)異常的處理方法,用于處理器,包括:
[0008] 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生死循環(huán)異常或死 鎖異常;
[0009] 當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源,繼續(xù)執(zhí)行所述任 務(wù);
[0010] 當確定所述任務(wù)發(fā)生死循環(huán)異常時,修改所述任務(wù)的循環(huán)體的代碼或修改所述任 務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行所述任務(wù)。
[0011] 可選的,在所述若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生 死循環(huán)異?;蛩梨i異常之前,所述方法還包括:
[0012] 獲取所述任務(wù)的數(shù)據(jù)狀態(tài)信息,所述數(shù)據(jù)狀態(tài)信息包括至少兩個寄存器信息,所 述至少兩個寄存器信息為所述任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常后,所述處理器繼續(xù)執(zhí)行所 述任務(wù)時,在第一預(yù)設(shè)時長中每隔第二預(yù)設(shè)時長記錄的所述處理器的寄存器狀態(tài)信息;
[0013] 所述若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生死循環(huán)異常 或死鎖異常包括:
[0014] 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)所述數(shù)據(jù)狀態(tài)信息,確定所述 任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常。
[0015] 可選的,所述若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)所述數(shù)據(jù)狀態(tài)信 息,確定所述任務(wù)發(fā)生死循環(huán)異常或死鎖異常包括:
[0016] 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息完全相同時,確定所述任務(wù)發(fā) 生死鎖異常;
[0017] 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息不完全相同時,確定所述任務(wù) 發(fā)生死循環(huán)異常。
[0018] 可選的,在所述獲取所述任務(wù)的數(shù)據(jù)狀態(tài)信息之前,所述方法還包括:
[0019] 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,將所述任務(wù)從任務(wù)鏈表中刪除,并 添加到恢復(fù)鏈表中,所述恢復(fù)鏈表是用于存儲出現(xiàn)異常的任務(wù)的鏈表。
[0020] 可選的,所述當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源,繼續(xù)執(zhí) 行所述任務(wù)包括:
[0021] 當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源;
[0022] 第三預(yù)設(shè)時長后,在所述恢復(fù)鏈表中執(zhí)行所述任務(wù);
[0023] 當所述任務(wù)沒有再次發(fā)生死鎖異常時,將所述任務(wù)從恢復(fù)鏈表中刪除,并重新添 加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù);
[0024] 當所述任務(wù)再次發(fā)生死鎖異常時,再次釋放所述任務(wù)占用的資源,并且在所述第 三預(yù)設(shè)時長后,再次在所述恢復(fù)鏈表中執(zhí)行所述任務(wù)。
[0025] 可選的,所述當確定所述任務(wù)發(fā)生死循環(huán)異常時,修改所述任務(wù)的循環(huán)體的代碼 或修改所述任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行所述任務(wù)包括:
[0026] 當確定所述任務(wù)發(fā)生死循環(huán)異常時,根據(jù)所述任務(wù)的特征信息和監(jiān)控信息,判斷 所述任務(wù)的循環(huán)體的代碼是否出現(xiàn)錯誤;所述特征信息記錄了所述循環(huán)體的基準值和修正 值;所述基準值為所述循環(huán)體中數(shù)據(jù)變量的初始值;所述修正值為所述循環(huán)體滿足終止條 件時,所述循環(huán)體中數(shù)據(jù)變量的值;所述監(jiān)控信息記錄了所述任務(wù)的執(zhí)行過程中所述循環(huán) 體中的數(shù)據(jù)變量的值的變化信息;
[0027] 若所述任務(wù)的循環(huán)體的代碼出現(xiàn)錯誤,根據(jù)所述特征信息、所述監(jiān)控信息和所述 數(shù)據(jù)狀態(tài)信息,修改所述任務(wù)的循環(huán)體的代碼,得到修改后的任務(wù);
[0028] 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任 務(wù);
[0029] 若所述任務(wù)的循環(huán)體的代碼未出現(xiàn)錯誤,根據(jù)所述數(shù)據(jù)狀態(tài)信息和所述特征信 息,修改所述任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,使得所述數(shù)據(jù)變量的值滿足所述循環(huán)體的 終止條件,得到修改后的任務(wù);
[0030] 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任 務(wù)。
[0031] 可選的,在所述將所述任務(wù)從任務(wù)鏈表中刪除,并添加到恢復(fù)鏈表中之前,所述方 法還包括:
[0032] 將所述任務(wù)添加到任務(wù)鏈表中;
[0033] 掃描所述任務(wù)的代碼,獲取所述任務(wù)的所述特征信息,所述特征信息還包括預(yù)設(shè) 執(zhí)行時間,所述預(yù)設(shè)執(zhí)行時間為所述任務(wù)的正常執(zhí)行時間;
[0034] 執(zhí)行所述任務(wù);
[0035] 獲取所述任務(wù)的所述監(jiān)控信息和所述任務(wù)的執(zhí)行時間。
[0036] 本發(fā)明的實施例另一方面提供一種任務(wù)異常的處理裝置,包括:
[0037] 確定單元,用于若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生 死循環(huán)異?;蛩梨i異常;
[0038] 第一處理單元,用于當所述確定單元確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任 務(wù)占用的資源,繼續(xù)執(zhí)行所述任務(wù);
[0039] 第二處理單元,用于當所述確定單元確定所述任務(wù)發(fā)生死循環(huán)異常時,修改所述 任務(wù)的循環(huán)體的代碼或修改所述任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行所述任務(wù)。
[0040] 可選的,所述任務(wù)異常的處理裝置還包括:
[0041] 獲取單元,用于獲取所述任務(wù)的數(shù)據(jù)狀態(tài)信息,所述數(shù)據(jù)狀態(tài)信息包括至少兩個 寄存器信息,所述至少兩個寄存器信息為所述任務(wù)發(fā)生死循環(huán)異常或死鎖異常后,所述處 理器繼續(xù)執(zhí)行所述任務(wù)時,在第一預(yù)設(shè)時長中每隔第二預(yù)設(shè)時長記錄的所述處理器的寄存 器狀態(tài)信息;
[0042] 所述確定單元具體用于:
[0043] 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)所述數(shù)據(jù)狀態(tài)信息,確定所述 任務(wù)發(fā)生死循環(huán)異常或死鎖異常。
[0044] 可選的,所述確定單元具體用于:
[0045] 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息完全相同時,確定所述任務(wù)發(fā) 生死鎖異常;
[0046] 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息不完全相同時,確定所述任務(wù) 發(fā)生死循環(huán)異常。
[0047] 可選的,所述任務(wù)異常的處理裝置還包括:
[0048] 添加單元,用于若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,將所述任務(wù)從任務(wù) 鏈表中刪除,并添加到恢復(fù)鏈表中,所述恢復(fù)鏈表是用于存儲出現(xiàn)異常的任務(wù)的鏈表;
[0049] 可選的,所述第一處理單元具體用于:
[0050] 當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源;
[0051] 第三預(yù)設(shè)時長后,在所述恢復(fù)鏈表中執(zhí)行所述任務(wù);
[0052] 當所述任務(wù)沒有再次發(fā)生死鎖異常時,將所述任務(wù)從恢復(fù)鏈表中刪除,并重新添 加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù);
[0053] 當所述任務(wù)再次發(fā)生死鎖異常時,再次釋放所述任務(wù)占用的資源,并且在所述第 三預(yù)設(shè)時長后,再次在所述恢復(fù)鏈表中執(zhí)行所述任務(wù)。
[0054] 可選的,所述第二處理單元具體用于:
[0055] 當確定所述任務(wù)發(fā)生死循環(huán)異常時,根據(jù)所述任務(wù)的特征信息和監(jiān)控信息,判斷 所述任務(wù)的循環(huán)體的代碼是否出現(xiàn)錯誤;所述特征信息記錄了所述循環(huán)體的基準值和修正 值;所述基準值為所述循環(huán)體中數(shù)據(jù)變量的初始值;所述修正值為所述循環(huán)體滿足終止條 件時,所述循環(huán)體中數(shù)據(jù)變量的值;所述監(jiān)控信息記錄了所述任務(wù)的執(zhí)行過程中所述循環(huán) 體中的數(shù)據(jù)變量的值的變化信息;
[0056] 若所述任務(wù)的循環(huán)體的代碼出現(xiàn)錯誤,根據(jù)所述特征信息、所述監(jiān)控信息和所述 數(shù)據(jù)狀態(tài)信息,修改所述任務(wù)的循環(huán)體的代碼,得到修改后的任務(wù);
[0057] 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任 務(wù);
[0058] 若所述任務(wù)的循環(huán)體的代碼未出現(xiàn)錯誤,根據(jù)所述數(shù)據(jù)狀態(tài)信息和所述特征信 息,修改所述任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,使得所述數(shù)據(jù)變量的值滿足所述循環(huán)體的 終止條件,得到修改后的任務(wù);
[0059] 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任 務(wù)。
[0060] 本發(fā)明實施例提供的任務(wù)異常的處理方法及裝置,用于處理器,包括:若當前任 務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常,當確定任務(wù)發(fā) 生死鎖異常時,釋放任務(wù)占用的資源,繼續(xù)執(zhí)行任務(wù),當確定任務(wù)發(fā)生死循環(huán)異常時,修改 任務(wù)的循環(huán)體的代碼或修改任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行任務(wù)。相較于現(xiàn)有 技術(shù)中需要程序員對出現(xiàn)異常的任務(wù)進行排錯處理,然后指示處理器繼續(xù)執(zhí)行處理后的任 務(wù),本發(fā)明實施例提供的方案在確定任務(wù)發(fā)生死循環(huán)異常或死鎖異常后,處理器可以自動 的并且有針對性的對死循環(huán)異?;蛩梨i異常進行排錯處理,然后繼續(xù)執(zhí)行處理后的任務(wù)。 這樣不需要程序員的參與,就可以對發(fā)生死循環(huán)異常和死鎖異常的任務(wù)進行自動排錯處 理,從而防止了系統(tǒng)出現(xiàn)混亂或者崩潰,節(jié)約了人力和物力。
【專利附圖】
【附圖說明】
[0061] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0062] 圖1為本發(fā)明實施例提供的一種任務(wù)異常的處理方法流程圖;
[0063] 圖2為本發(fā)明實施例提供的一種確定任務(wù)異常情況流程圖;
[0064] 圖3為本發(fā)明另一實施例提供的一種任務(wù)異常的處理方法流程圖;
[0065] 圖4為本發(fā)明實施例提供的一種任務(wù)異常的處理裝置框圖;
[0066] 圖5為本發(fā)明另一實施例提供的一種任務(wù)異常的處理裝置框圖;
[0067] 圖6為本發(fā)明又一實施例提供的一種任務(wù)異常的處理裝置框圖。
【具體實施方式】
[0068] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于 本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。
[0069] 本發(fā)明實施例提供一種任務(wù)異常的處理方法,用于處理器,如圖1所示,所述方法 包括:
[0070] 步驟101、若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生死循環(huán) 異常或死鎖異常。
[0071] 實際應(yīng)用中,所述預(yù)設(shè)執(zhí)行時間可以根據(jù)具體情況進行設(shè)定,示例的,所述預(yù)設(shè)執(zhí) 行時間可以為任務(wù)正常執(zhí)行的時間,即正常情況下執(zhí)行完整個任務(wù)所需的時間。具體的,處 理器在執(zhí)行任務(wù)時,首先會將任務(wù)添加到任務(wù)鏈表中,然后掃描任務(wù)的整個代碼,并根據(jù)掃 描結(jié)果獲得正常情況下執(zhí)行完整個任務(wù)所需的時間,該時間即為預(yù)設(shè)執(zhí)行時間。
[0072] 在確認任務(wù)的執(zhí)行時間是否大于預(yù)設(shè)執(zhí)行時間時,若一個任務(wù)的預(yù)設(shè)執(zhí)行時間為 T1,當該任務(wù)在運行過程中的累計的執(zhí)行時間到達Tl時,該任務(wù)還沒有運行結(jié)束,則可知 該任務(wù)實際的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間,此時可以認為該任務(wù)出現(xiàn)異常,一般情況下,任 務(wù)發(fā)生異常有兩種情況:死循環(huán)異常和死鎖異常。死循環(huán)異常指的是任務(wù)中的循環(huán)體無法 靠自身的控制終止循環(huán)的現(xiàn)象。這種情況的出現(xiàn)一般是由于任務(wù)在執(zhí)行的過程中執(zhí)行了一 些非法指令,而導(dǎo)致程序中的循環(huán)判斷條件一直無法得到滿足。死鎖異常指的是兩個或兩 個以上的任務(wù)在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象。示例的,當前有A 任務(wù)和B任務(wù)同時執(zhí)行,并且A任務(wù)和B任務(wù)都需要獲得資源C和資源D,此時A任務(wù)已經(jīng) 獲取了資源C,等待資源D,B任務(wù)已經(jīng)獲取了資源D,等待資源C,由于資源占用是互斥的,A 任務(wù)無法獲取資源D會一直等待,B任務(wù)無法獲取資源C也會一直等待,導(dǎo)致A任務(wù)和B任 務(wù)都無法繼續(xù)執(zhí)行下去,這時A任務(wù)和B任務(wù)陷入死鎖狀態(tài)。
[0073] 由于任務(wù)陷入死循環(huán)和陷入死鎖時的異常原理不同,所以與之對應(yīng)的處理方法也 不同。在確認任務(wù)發(fā)生死鎖異常和死循環(huán)異常后,可以根據(jù)不同的情況對任務(wù)進行處理。
[0074] 步驟102、當確定任務(wù)發(fā)生死鎖異常時,釋放任務(wù)占用的資源,繼續(xù)執(zhí)行任務(wù)。
[0075] 當確定任務(wù)發(fā)生死鎖異常時,表示該任務(wù)執(zhí)行過程中所需資源被別的任務(wù)部分占 用或全部占用,并且該任務(wù)也可能占用了別的任務(wù)在執(zhí)行過程中所需的部分資源或全部資 源。由于一個任務(wù)在執(zhí)行完畢后會釋放掉之前獲取的全部資源,所以在相關(guān)任務(wù)都無法執(zhí) 行下去的情況下,該任務(wù)可以先釋放掉占用的資源,等待別的任務(wù)執(zhí)行完畢后,重新獲取該 任務(wù)在執(zhí)行過程中所需的全部資源,繼續(xù)執(zhí)行該任務(wù)。
[0076] 步驟103、當確定任務(wù)發(fā)生死循環(huán)異常時,修改任務(wù)的循環(huán)體的代碼或修改任務(wù)的 循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行任務(wù)。
[0077] 當確定任務(wù)發(fā)生死循環(huán)異常時,可以根據(jù)在向任務(wù)鏈表添加任務(wù)的過程中記錄的 循環(huán)體的基準值和修正值,以及在任務(wù)鏈表中執(zhí)行任務(wù)的過程中記錄的數(shù)據(jù)變量的值的變 化信息,來綜合判斷任務(wù)的循環(huán)體的代碼是否出現(xiàn)錯誤,若發(fā)現(xiàn)代碼出錯,對出錯的代碼進 行修改;若未發(fā)現(xiàn)代碼出錯,利用數(shù)據(jù)變量的返回值和修正值對任務(wù)的循環(huán)體中的數(shù)據(jù)變 量的值進行修改,以滿足循環(huán)體的終止條件,跳出該循環(huán)體。
[0078] 這樣一來,相較于現(xiàn)有技術(shù)中需要程序員對出現(xiàn)異常的任務(wù)進行排錯處理,然后 指示處理器繼續(xù)執(zhí)行處理后的任務(wù),本發(fā)明實施例提供的方案在確定任務(wù)發(fā)生死循環(huán)異 ?;蛩梨i異常后,處理器可以自動的并且有針對性的對死循環(huán)異常或死鎖異常進行排錯處 理,然后繼續(xù)執(zhí)行處理后的任務(wù)。這樣不需要程序員的參與,就可以對發(fā)生死循環(huán)異常和死 鎖異常的任務(wù)進行自動排錯處理,從而防止了系統(tǒng)出現(xiàn)混亂或者崩潰,節(jié)約了人力和物力。
[0079] 進一步的,在若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生死 循環(huán)異?;蛩梨i異常之前,所述方法還包括:獲取任務(wù)的數(shù)據(jù)狀態(tài)信息,數(shù)據(jù)狀態(tài)信息包括 至少兩個寄存器信息,至少兩個寄存器信息為任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常后,處理器 繼續(xù)執(zhí)行任務(wù)時,在第一預(yù)設(shè)時長中每隔第二預(yù)設(shè)時長記錄的處理器的寄存器狀態(tài)信息。
[0080] 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定任務(wù)發(fā)生死循環(huán)異常或死鎖異 常包括:若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)數(shù)據(jù)狀態(tài)信息,確定任務(wù)發(fā)生死 循環(huán)異?;蛩梨i異常。
[0081] 需要說明的是,所述第一預(yù)設(shè)時長和所述第二預(yù)設(shè)時長都為預(yù)先設(shè)定的值。優(yōu)選 的,所述第一預(yù)設(shè)時長可以設(shè)置為所述任務(wù)中循環(huán)體的預(yù)設(shè)執(zhí)行時間的2或3倍,一般認為 這個時間段里所獲得的寄存器信息已經(jīng)記錄了任務(wù)中出錯處代碼的信息,即根據(jù)這個時間 段里所獲得的寄存器信息已經(jīng)能夠判斷出任務(wù)發(fā)生死循環(huán)異常還是死鎖異常。當然也可以 將第一預(yù)設(shè)時長設(shè)置為其它數(shù)值,本發(fā)明實施例對此不做限定,只要在第一預(yù)設(shè)時長里所 獲得的寄存器信息能夠確定任務(wù)發(fā)生死循環(huán)異常還是死鎖異常即可。優(yōu)選的,所述第二預(yù) 設(shè)時長可以設(shè)定為處理器的調(diào)度周期,一般處理器的調(diào)度周期為l〇ms。
[0082] 所述寄存器狀態(tài)信息一般包括PC (Program Counter,程序計數(shù)器)指針信息、數(shù) 據(jù)變量的返回值、數(shù)據(jù)變量的地址信息、上一行代碼的相關(guān)信息等。
[0083] 進一步的,若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)數(shù)據(jù)狀態(tài)信息,確定 任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常包括:若數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息完全 相同時,確定任務(wù)發(fā)生死鎖異常;若數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息不完全相 同時,確定任務(wù)發(fā)生死循環(huán)異常。
[0084] 由于一個程序發(fā)生死鎖異常時,表現(xiàn)為程序執(zhí)行到死鎖處時,代碼的運行停滯不 前,所以在第一預(yù)設(shè)時長中每隔第二預(yù)設(shè)時長記錄的多個處理器的寄存器狀態(tài)信息應(yīng)該是 完全相同的。然而當一個程序發(fā)生死循環(huán)異常時,表現(xiàn)為程序一直在循環(huán)執(zhí)行,這時在第一 預(yù)設(shè)時長中每隔第二預(yù)設(shè)時長記錄的多個處理器的寄存器狀態(tài)信息不會完全相同,可能會 是PC指針信息、數(shù)據(jù)變量的返回值、數(shù)據(jù)變量的地址信息、上一行代碼的相關(guān)信息等中的 一個或者多個信息不相同,這樣根據(jù)所獲得的寄存器信息是否完全相同就可以確定任務(wù)發(fā) 生死循環(huán)異常還是死鎖異常。
[0085] 進一步的,在獲取所述任務(wù)的數(shù)據(jù)狀態(tài)信息之前,方法還包括:若當前任務(wù)的執(zhí)行 時間大于預(yù)設(shè)執(zhí)行時間時,將任務(wù)從任務(wù)鏈表中刪除,并添加到恢復(fù)鏈表中,恢復(fù)鏈表是用 于存儲出現(xiàn)異常的任務(wù)的鏈表。
[0086] 所述恢復(fù)鏈表為新創(chuàng)建的一個任務(wù)鏈表,用于存放出現(xiàn)異常的任務(wù)。當確定任務(wù) 發(fā)生死循環(huán)異常或死鎖異常后,有兩種處理方式,其一是在當前的任務(wù)鏈表中對出現(xiàn)異常 的任務(wù)進行排錯處理,其二是將任務(wù)從任務(wù)鏈表中刪除,并添加到恢復(fù)鏈表中,在恢復(fù)鏈表 對出現(xiàn)異常的任務(wù)進行排錯處理。雖然這兩種方式都是可行的,但是優(yōu)選的是后一種方式。 因為采用前一種方式,即在當前的任務(wù)鏈表中對出現(xiàn)異常的任務(wù)進行排錯處理,就必須等 到當前任務(wù)排錯處理成功且被正常執(zhí)行完畢后,任務(wù)鏈表中的后續(xù)任務(wù)才可以執(zhí)行,這樣 需要較長的等待時間,會影響處理器處理任務(wù)的效率。若采用后一種方式,創(chuàng)建一個恢復(fù)鏈 表,將出現(xiàn)異常的任務(wù)從當前的任務(wù)鏈表中刪除后,當前的任務(wù)鏈表中的后續(xù)任務(wù)就可以 正常執(zhí)行了,無需花費等待時間,這樣可以提高處理器處理任務(wù)的效率。
[0087] 進一步的,當確定任務(wù)發(fā)生死鎖異常時,釋放任務(wù)占用的資源,繼續(xù)執(zhí)行任務(wù)包 括:當確定任務(wù)發(fā)生死鎖異常時,釋放任務(wù)占用的資源;第三預(yù)設(shè)時長后,在恢復(fù)鏈表中執(zhí) 行任務(wù);當任務(wù)沒有再次發(fā)生死鎖異常時,將任務(wù)從恢復(fù)鏈表中刪除,并重新添加到任務(wù)鏈 表中,繼續(xù)執(zhí)行任務(wù);當任務(wù)再次發(fā)生死鎖異常時,再次釋放任務(wù)占用的資源,并且在第三 預(yù)設(shè)時長后,再次在恢復(fù)鏈表中執(zhí)行任務(wù)。
[0088] 進一步的,當確定任務(wù)發(fā)生死循環(huán)異常時,修改任務(wù)的循環(huán)體的代碼或修改任務(wù) 的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行任務(wù)包括:當確定任務(wù)發(fā)生死循環(huán)異常時,根據(jù)任務(wù) 的特征信息和監(jiān)控信息,判斷任務(wù)的循環(huán)體的代碼是否出現(xiàn)錯誤;特征信息記錄了循環(huán)體 的基準值和修正值;基準值為循環(huán)體中數(shù)據(jù)變量的初始值;修正值為循環(huán)體滿足終止條件 時,循環(huán)體中數(shù)據(jù)變量的值;監(jiān)控信息記錄了任務(wù)的執(zhí)行過程中循環(huán)體中的數(shù)據(jù)變量的值 的變化信息。
[0089] 若任務(wù)的循環(huán)體的代碼出現(xiàn)錯誤,根據(jù)特征信息、監(jiān)控信息和數(shù)據(jù)狀態(tài)信息,修改 任務(wù)的循環(huán)體的代碼,得到修改后的任務(wù);將修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任 務(wù)鏈表中,繼續(xù)執(zhí)行任務(wù)。
[0090] 若任務(wù)的循環(huán)體的代碼未出現(xiàn)錯誤,根據(jù)數(shù)據(jù)狀態(tài)信息和特征信息,修改任務(wù)的 循環(huán)體中的數(shù)據(jù)變量的值,使得數(shù)據(jù)變量的值滿足循環(huán)體的終止條件,得到修改后的任務(wù)。
[0091] 將修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行任務(wù)。
[0092] 當確定任務(wù)發(fā)生死循環(huán)異常時,可以根據(jù)特征信息中記錄的循環(huán)體的基準值和修 正值,以及監(jiān)控信息中記錄的數(shù)據(jù)變量的值的變化信息,來綜合判斷任務(wù)的循環(huán)體的代碼 是否出現(xiàn)錯誤,若發(fā)現(xiàn)代碼出錯,對出錯的代碼進行修改;若未發(fā)現(xiàn)代碼出錯,利用數(shù)據(jù)狀 態(tài)信息中的數(shù)據(jù)變量的返回值和特征信息中的修正值對任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值 進行修改,以滿足循環(huán)體的終止條件,跳出該循環(huán)體。
[0093] 在實際應(yīng)用中,還有可能存在既不屬于死鎖異常也不屬于死循環(huán)異常的情況,即 數(shù)據(jù)狀態(tài)信息不完全相同時,可能是死循環(huán)異常,也有可能是一些未知錯誤類型,在這種情 況下,我們還可以判斷當獲得的任務(wù)數(shù)據(jù)狀態(tài)信息不完全相同時,該任務(wù)是否發(fā)生死循環(huán) 異常。此時可以通過PC指針的地址信息進行判斷。具體方法為:首先獲取所有數(shù)據(jù)狀態(tài)信 息中的PC指針的地址,然后比較相鄰兩次PC指針的地址值的大小,若后一個PC指針的地 址值小于或者等于前一個PC指針的地址值,則可判斷出該任務(wù)發(fā)生死循環(huán)異常。原理為: 首先PC指針指向的是當前程序的運行點,它里面的值是當前程序的運行點的地址,一個程 序模塊中,從上往下代碼的PC指針的地址是遞增的,S卩如果程序一直往下運行,則PC指針 的地址應(yīng)該是一直增大的,如果當后一個PC指針的地址值小于或者等于前一個PC指針的 地址值時,說明程序又回到了之前的代碼行進行了執(zhí)行,即程序進行了循環(huán)。進而可以確定 任務(wù)發(fā)生死循環(huán)異常。示例的,假設(shè)當前有5組數(shù)據(jù)狀態(tài)信息,首先獲取到這5組數(shù)據(jù)狀態(tài) 信息中的PC指針的地址,假設(shè)分別為{0002,0005,0009,0003,0007},然后分別比較獲取的 相鄰兩個PC指針的地址值的大小,由于PC指針的地址值0003小于PC指針的地址值0009, 所以可以判斷在代碼運行到PC指針的地址值為0003和PC指針的地址值為0009之間時,代 碼進行了一次循環(huán),進而說明該段代碼進行了循環(huán)執(zhí)行,此時可確定任務(wù)發(fā)生死循環(huán)異常。 [0094] 進一步的,在將任務(wù)從任務(wù)鏈表中刪除,并添加到恢復(fù)鏈表中之前,該方法還包 括:將任務(wù)添加到任務(wù)鏈表中;掃描任務(wù)的代碼,獲取任務(wù)的特征信息,所述特征信息還包 括預(yù)設(shè)執(zhí)行時間,所述預(yù)設(shè)執(zhí)行時間為任務(wù)的正常執(zhí)行時間;執(zhí)行任務(wù);獲取任務(wù)的監(jiān)控 信息和任務(wù)的執(zhí)行時間。
[0095] 在實際應(yīng)用中,由于操作系統(tǒng)中有很多任務(wù),每個任務(wù)的優(yōu)先級不同,所以一般將 任務(wù)按照優(yōu)先級從高到低的順序添加到任務(wù)鏈表中,即優(yōu)先級高的任務(wù)添加到任務(wù)鏈表的 靠前部分,優(yōu)先級低的任務(wù)添加到任務(wù)鏈表的靠后部分,然后處理器順序執(zhí)行任務(wù)鏈表中 的任務(wù)即可。在將任務(wù)添加到任務(wù)鏈表的過程中,掃描任務(wù)的代碼,獲取任務(wù)的特征信息, 即記錄任務(wù)中每一個循環(huán)體的基準值和修正值,以及循環(huán)體中包含函數(shù)的權(quán)限信息等,所 述特征信息還包括預(yù)設(shè)執(zhí)行時間,所述預(yù)設(shè)執(zhí)行時間為任務(wù)的正常執(zhí)行時間。然后執(zhí)行所 述任務(wù),獲取任務(wù)的監(jiān)控信息和任務(wù)的執(zhí)行時間,所述監(jiān)控信息為在執(zhí)行任務(wù)的過程中,記 錄的任務(wù)的數(shù)據(jù)變量的值的變化信息,以便之后利用特征信息和監(jiān)控信息找出程序中出錯 的代碼。所述任務(wù)的執(zhí)行時間為任務(wù)當前實際執(zhí)行時間。當任務(wù)當前的執(zhí)行時間大于預(yù)設(shè) 執(zhí)行時間時,說明該任務(wù)在預(yù)設(shè)執(zhí)行時間時沒有執(zhí)行完畢,此時可以確定該任務(wù)發(fā)生死鎖 異?;蛘咚姥h(huán)異常。
[0096] 在實際應(yīng)用中,處理器還包括定時器,任務(wù)還設(shè)置有累計變量,任務(wù)未執(zhí)行時,累 計變量為〇,在任務(wù)的執(zhí)行過程中,定時器每發(fā)生一次中斷,累計變量加1,定時器的中斷時 間為處理器的調(diào)度周期。首先獲取任務(wù)的累計變量的值;然后判斷任務(wù)的累計變量的值是 否大于預(yù)設(shè)數(shù)值,所述預(yù)設(shè)數(shù)值為任務(wù)的預(yù)設(shè)執(zhí)行時間與中斷時間的比值;當任務(wù)的累計 變量大于預(yù)設(shè)數(shù)值時,確定任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常。
[0097] 需要說明的是,所述定時器可以為硬件定時器,也可以為軟件定時器。由于硬件定 時器的可靠性更高,所以優(yōu)選的是硬件定時器,例如可以是看門狗定時器。定時器都設(shè)有中 斷模式,即每隔一個固定時間段發(fā)出一個信號,此信號稱為中斷信號,本發(fā)明實施例中采用 處理器的調(diào)度時間作為定時器的中斷時間。一般情況下,處理器的調(diào)度周期為l〇ms。
[0098] 累計變量可理解為一個計數(shù)變量,示例的,當定時器發(fā)生一次中斷,累計變量加1, 此時累計變量為1,說明此時任務(wù)已經(jīng)被執(zhí)行了 l〇ms,當定時器再發(fā)生一次中斷,累計變量 再次加1,此時累計變量為2,說明此時任務(wù)已經(jīng)被執(zhí)行了 20ms,由此可知,任務(wù)當前的執(zhí)行 時間為當前的累計變量值與定時器的中斷時間的乘積,而預(yù)設(shè)執(zhí)行時間為預(yù)設(shè)數(shù)值與定時 器的中斷時間的乘積。進而可知,當任務(wù)的累計變量大于預(yù)設(shè)數(shù)值時,確定任務(wù)發(fā)生死循環(huán) 異?;蛩梨i異常,也就是當任務(wù)當前的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定任務(wù)發(fā)生死循 環(huán)異?;蛩梨i異常。
[0099] 本發(fā)明實施例提供的任務(wù)異常的處理方法,用于處理器,包括:若當前任務(wù)的執(zhí)行 時間大于預(yù)設(shè)執(zhí)行時間時,確定任務(wù)發(fā)生死循環(huán)異常或死鎖異常,當確定任務(wù)發(fā)生死鎖異 常時,釋放任務(wù)占用的資源,繼續(xù)執(zhí)行任務(wù),當確定任務(wù)發(fā)生死循環(huán)異常時,修改任務(wù)的循 環(huán)體的代碼或修改任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行任務(wù)。相較于現(xiàn)有技術(shù)中需 要程序員對出現(xiàn)異常的任務(wù)進行排錯處理,然后指示處理器繼續(xù)執(zhí)行處理后的任務(wù),本發(fā) 明實施例提供的方案在確定任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常后,處理器可以自動的并且有 針對性的對死循環(huán)異?;蛩梨i異常進行排錯處理,然后繼續(xù)執(zhí)行處理后的任務(wù)。這樣不需 要程序員的參與,就可以對發(fā)生死循環(huán)異常和死鎖異常的任務(wù)進行自動排錯處理,從而防 止了系統(tǒng)出現(xiàn)混亂或者崩潰,節(jié)約了人力和物力。
[0100] 本發(fā)明另一實施例提供一種任務(wù)異常的處理方法,如圖2所示,該方法步驟包括:
[0101] 步驟201、初始化定時器。執(zhí)行步驟202。
[0102] 在本步驟中,初始化定時器包括兩個部分,第一部分是獲取處理器的調(diào)度周期,將 處理器的調(diào)度周期作為定時器的中斷時間。示例的,處理器的調(diào)度周期可以為l〇ms。第二 部分是將定時器的工作模式設(shè)置為中斷模式。
[0103] 步驟202、創(chuàng)建恢復(fù)鏈表。執(zhí)行步驟203。
[0104] 恢復(fù)鏈表用于存放出現(xiàn)異常的任務(wù)。
[0105] 步驟203、將任務(wù)添加到任務(wù)鏈表中。執(zhí)行步驟204。
[0106] 步驟204、掃描任務(wù)的代碼,獲取任務(wù)的特征信息。執(zhí)行步驟205。
[0107] 所述特征信息可以包括任務(wù)中每一個循環(huán)體的基準值和修正值,以及循環(huán)體中包 含函數(shù)的權(quán)限信息等。其中基準值為循環(huán)體中數(shù)據(jù)變量的初始值;修正值為循環(huán)體滿足終 止條件時,循環(huán)體中數(shù)據(jù)變量的值。以下面的程序模塊1為例進行說明。
[0108] for(int X = 0,y = I ;(x ! = 3| |y ! = 7) ;)//數(shù)據(jù)變量 X 的初始值為 0,數(shù)據(jù) 變量y的初始值為1,當數(shù)據(jù)變量X的值不等于3,或者數(shù)據(jù)變量y的值不等于7時,循環(huán)一 直進行
[0109]
【權(quán)利要求】
1. 一種任務(wù)異常的處理方法,用于處理器,其特征在于,包括: 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生死循環(huán)異?;蛩梨i異 常; 當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源,繼續(xù)執(zhí)行所述任務(wù); 當確定所述任務(wù)發(fā)生死循環(huán)異常時,修改所述任務(wù)的循環(huán)體的代碼或修改所述任務(wù)的 循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行所述任務(wù)。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè) 執(zhí)行時間時,確定所述任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常之前,所述方法還包括: 獲取所述任務(wù)的數(shù)據(jù)狀態(tài)信息,所述數(shù)據(jù)狀態(tài)信息包括至少兩個寄存器信息,所述至 少兩個寄存器信息為所述任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常后,所述處理器繼續(xù)執(zhí)行所述任 務(wù)時,在第一預(yù)設(shè)時長中每隔第二預(yù)設(shè)時長記錄的所述處理器的寄存器狀態(tài)信息; 所述若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生死循環(huán)異?;蛩?鎖異常包括: 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)所述數(shù)據(jù)狀態(tài)信息,確定所述任務(wù) 發(fā)生死循環(huán)異?;蛩梨i異常。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于, 所述若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)所述數(shù)據(jù)狀態(tài)信息,確定所述 任務(wù)發(fā)生死循環(huán)異常或死鎖異常包括: 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息完全相同時,確定所述任務(wù)發(fā)生死 鎖異常; 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息不完全相同時,確定所述任務(wù)發(fā)生 死循環(huán)異常。
4. 根據(jù)權(quán)利要求2或3所述的方法,其特征在于,在所述獲取所述任務(wù)的數(shù)據(jù)狀態(tài)信息 之前,所述方法還包括: 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,將所述任務(wù)從任務(wù)鏈表中刪除,并添加 到恢復(fù)鏈表中,所述恢復(fù)鏈表是用于存儲出現(xiàn)異常的任務(wù)的鏈表。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于, 所述當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源,繼續(xù)執(zhí)行所述任務(wù) 包括: 當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源; 第三預(yù)設(shè)時長后,在所述恢復(fù)鏈表中執(zhí)行所述任務(wù); 當所述任務(wù)沒有再次發(fā)生死鎖異常時,將所述任務(wù)從恢復(fù)鏈表中刪除,并重新添加到 任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù); 當所述任務(wù)再次發(fā)生死鎖異常時,再次釋放所述任務(wù)占用的資源,并且在所述第三預(yù) 設(shè)時長后,再次在所述恢復(fù)鏈表中執(zhí)行所述任務(wù)。
6. 根據(jù)權(quán)利要求4所述的方法,其特征在于, 所述當確定所述任務(wù)發(fā)生死循環(huán)異常時,修改所述任務(wù)的循環(huán)體的代碼或修改所述任 務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行所述任務(wù)包括: 當確定所述任務(wù)發(fā)生死循環(huán)異常時,根據(jù)所述任務(wù)的特征信息和監(jiān)控信息,判斷所述 任務(wù)的循環(huán)體的代碼是否出現(xiàn)錯誤;所述特征信息記錄了所述循環(huán)體的基準值和修正值; 所述基準值為所述循環(huán)體中數(shù)據(jù)變量的初始值;所述修正值為所述循環(huán)體滿足終止條件 時,所述循環(huán)體中數(shù)據(jù)變量的值;所述監(jiān)控信息記錄了所述任務(wù)的執(zhí)行過程中所述循環(huán)體 中的數(shù)據(jù)變量的值的變化信息; 若所述任務(wù)的循環(huán)體的代碼出現(xiàn)錯誤,根據(jù)所述特征信息、所述監(jiān)控信息和所述數(shù)據(jù) 狀態(tài)信息,修改所述任務(wù)的循環(huán)體的代碼,得到修改后的任務(wù); 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù); 若所述任務(wù)的循環(huán)體的代碼未出現(xiàn)錯誤,根據(jù)所述數(shù)據(jù)狀態(tài)信息和所述特征信息,修 改所述任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,使得所述數(shù)據(jù)變量的值滿足所述循環(huán)體的終止條 件,得到修改后的任務(wù); 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù)。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,在所述將所述任務(wù)從任務(wù)鏈表中刪除,并 添加到恢復(fù)鏈表中之前,所述方法還包括: 將所述任務(wù)添加到任務(wù)鏈表中; 掃描所述任務(wù)的代碼,獲取所述任務(wù)的所述特征信息,所述特征信息還包括預(yù)設(shè)執(zhí)行 時間,所述預(yù)設(shè)執(zhí)行時間為所述任務(wù)的正常執(zhí)行時間; 執(zhí)行所述任務(wù); 獲取所述任務(wù)的所述監(jiān)控信息和所述任務(wù)的執(zhí)行時間。
8. -種任務(wù)異常的處理裝置,其特征在于,包括: 確定單元,用于若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,確定所述任務(wù)發(fā)生死循 環(huán)異常或死鎖異常; 第一處理單元,用于當所述確定單元確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占 用的資源,繼續(xù)執(zhí)行所述任務(wù); 第二處理單元,用于當所述確定單元確定所述任務(wù)發(fā)生死循環(huán)異常時,修改所述任務(wù) 的循環(huán)體的代碼或修改所述任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,繼續(xù)執(zhí)行所述任務(wù)。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述任務(wù)異常的處理裝置還包括: 獲取單元,用于獲取所述任務(wù)的數(shù)據(jù)狀態(tài)信息,所述數(shù)據(jù)狀態(tài)信息包括至少兩個寄存 器信息,所述至少兩個寄存器信息為所述任務(wù)發(fā)生死循環(huán)異?;蛩梨i異常后,所述處理器 繼續(xù)執(zhí)行所述任務(wù)時,在第一預(yù)設(shè)時長中每隔第二預(yù)設(shè)時長記錄的所述處理器的寄存器狀 態(tài)息; 所述確定單元具體用于: 若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,根據(jù)所述數(shù)據(jù)狀態(tài)信息,確定所述任務(wù) 發(fā)生死循環(huán)異?;蛩梨i異常。
10. 根據(jù)權(quán)利要求9所述的裝置,其特征在于, 所述確定單元具體用于: 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息完全相同時,確定所述任務(wù)發(fā)生死 鎖異常; 若所述數(shù)據(jù)狀態(tài)信息中包括的至少兩個寄存器信息不完全相同時,確定所述任務(wù)發(fā)生 死循環(huán)異常。
11. 根據(jù)權(quán)利要求9或10所述的裝置,其特征在于,所述任務(wù)異常的處理裝置還包括: 添加單元,用于若當前任務(wù)的執(zhí)行時間大于預(yù)設(shè)執(zhí)行時間時,將所述任務(wù)從任務(wù)鏈表 中刪除,并添加到恢復(fù)鏈表中,所述恢復(fù)鏈表是用于存儲出現(xiàn)異常的任務(wù)的鏈表。
12. 根據(jù)權(quán)利要求11所述的裝置,其特征在于, 所述第一處理單元具體用于: 當確定所述任務(wù)發(fā)生死鎖異常時,釋放所述任務(wù)占用的資源; 第三預(yù)設(shè)時長后,在所述恢復(fù)鏈表中執(zhí)行所述任務(wù); 當所述任務(wù)沒有再次發(fā)生死鎖異常時,將所述任務(wù)從恢復(fù)鏈表中刪除,并重新添加到 任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù); 當所述任務(wù)再次發(fā)生死鎖異常時,再次釋放所述任務(wù)占用的資源,并且在所述第三預(yù) 設(shè)時長后,再次在所述恢復(fù)鏈表中執(zhí)行所述任務(wù)。
13. 根據(jù)權(quán)利要求11所述的裝置,其特征在于, 所述第二處理單元具體用于: 當確定所述任務(wù)發(fā)生死循環(huán)異常時,根據(jù)所述任務(wù)的特征信息和監(jiān)控信息,判斷所述 任務(wù)的循環(huán)體的代碼是否出現(xiàn)錯誤;所述特征信息記錄了所述循環(huán)體的基準值和修正值; 所述基準值為所述循環(huán)體中數(shù)據(jù)變量的初始值;所述修正值為所述循環(huán)體滿足終止條件 時,所述循環(huán)體中數(shù)據(jù)變量的值;所述監(jiān)控信息記錄了所述任務(wù)的執(zhí)行過程中所述循環(huán)體 中的數(shù)據(jù)變量的值的變化信息; 若所述任務(wù)的循環(huán)體的代碼出現(xiàn)錯誤,根據(jù)所述特征信息、所述監(jiān)控信息和所述數(shù)據(jù) 狀態(tài)信息,修改所述任務(wù)的循環(huán)體的代碼,得到修改后的任務(wù); 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù); 若所述任務(wù)的循環(huán)體的代碼未出現(xiàn)錯誤,根據(jù)所述數(shù)據(jù)狀態(tài)信息和所述特征信息,修 改所述任務(wù)的循環(huán)體中的數(shù)據(jù)變量的值,使得所述數(shù)據(jù)變量的值滿足所述循環(huán)體的終止條 件,得到修改后的任務(wù); 將所述修改后的任務(wù)從恢復(fù)鏈表中刪除,并添加到任務(wù)鏈表中,繼續(xù)執(zhí)行所述任務(wù)。
【文檔編號】G06F11/07GK104391754SQ201410540133
【公開日】2015年3月4日 申請日期:2014年10月13日 優(yōu)先權(quán)日:2014年10月13日
【發(fā)明者】梁恩波 申請人:北京星網(wǎng)銳捷網(wǎng)絡(luò)技術(shù)有限公司