專利名稱:一種應(yīng)用程序的內(nèi)存錯誤修復(fù)方法
技術(shù)領(lǐng)域:
本發(fā)明實施例涉及計算機(jī)技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用程序的內(nèi)存錯誤修復(fù)方法。
背景技術(shù):
由于內(nèi)存錯誤導(dǎo)致應(yīng)用程序出現(xiàn)異常時,現(xiàn)有技術(shù)的處理方案是當(dāng)檢測到內(nèi)存錯誤,將錯誤信息發(fā)送給BIOS (Basic Input Output System,基本輸入輸出系統(tǒng)),由BIOS 對硬件錯誤進(jìn)行修復(fù),或者,BIOS將該錯誤信息發(fā)送給內(nèi)核(具體可以是操作系統(tǒng)OS內(nèi)核),由內(nèi)核進(jìn)行硬件錯誤的修復(fù);如果硬件修復(fù)失敗,則由OS內(nèi)核向出現(xiàn)異常的應(yīng)用程序進(jìn)程發(fā)送ki 11信號,使該進(jìn)程關(guān)閉。發(fā)明人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題現(xiàn)有的內(nèi)存錯誤修復(fù)方案,會導(dǎo)致應(yīng)用程序意外重啟,造成關(guān)鍵數(shù)據(jù)丟失,降低了應(yīng)用程序使用的可靠性和安全性。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種應(yīng)用程序的內(nèi)存錯誤修復(fù)方法,從而避免應(yīng)用程序意外重啟導(dǎo)致的關(guān)鍵數(shù)據(jù)丟失問題。一種應(yīng)用程序的內(nèi)存錯誤修復(fù)方法,包括當(dāng)應(yīng)用程序占用的內(nèi)存發(fā)生錯誤時,掛起所述應(yīng)用程序的進(jìn)程;喚醒所述應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序,所述錯誤修復(fù)程序是在所述應(yīng)用程序啟動時創(chuàng)建的;所述錯誤修復(fù)程序?qū)Πl(fā)生的錯誤進(jìn)行修復(fù)處理,如果修復(fù)失敗,所述錯誤修復(fù)程序?qū)λ鰬?yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存后,關(guān)閉所述應(yīng)用程序;如果修復(fù)成功,所述錯誤修復(fù)程序?qū)炱鸬倪M(jìn)程恢復(fù)。由上述本發(fā)明實施例提供的技術(shù)方案可以看出,本發(fā)明實施例中,當(dāng)內(nèi)存錯誤導(dǎo)致應(yīng)用程序異常時,通過預(yù)先創(chuàng)建的錯誤修復(fù)程序?qū)?nèi)存錯誤嘗試修復(fù),在修復(fù)失敗時對應(yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存,因此,提高了應(yīng)用程序應(yīng)用的可靠性和安全性。
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例提供的方法流程圖;圖2為本發(fā)明一個應(yīng)用實施例提供的創(chuàng)建錯誤修復(fù)線程的方法流程圖;圖3為本發(fā)明一個應(yīng)用實施例提供的錯誤修復(fù)的方法流程圖4為本發(fā)明另一個應(yīng)用實施例提供的創(chuàng)建錯誤修復(fù)進(jìn)程的方法流程圖;圖5為本發(fā)明另一個應(yīng)用實施例提供的錯誤修復(fù)的方法流程圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實施例提供一種應(yīng)用程序的內(nèi)存錯誤修復(fù)方法,其實現(xiàn)方式如圖1所示, 具體包括如下操作S101、當(dāng)應(yīng)用程序占用的內(nèi)存發(fā)生錯誤時,掛起該應(yīng)用程序的進(jìn)程;其中,具體可以根據(jù)發(fā)生錯誤的內(nèi)存地址判斷該內(nèi)存錯誤導(dǎo)致了哪個應(yīng)用程序異
堂
巾οS102、喚醒上述應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序,該錯誤修復(fù)程序是在上述應(yīng)用程序啟動時創(chuàng)建的;S103、錯誤修復(fù)程序?qū)Πl(fā)生的錯誤進(jìn)行修復(fù)處理,如果修復(fù)失敗,該錯誤修復(fù)程序?qū)ι鲜鰬?yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存后,關(guān)閉該應(yīng)用程序;如果修復(fù)成功,該錯誤修復(fù)程序?qū)炱鸬倪M(jìn)程恢復(fù),以便該應(yīng)用程序繼續(xù)運(yùn)行。本發(fā)明實施例提供的方法,當(dāng)內(nèi)存錯誤導(dǎo)致應(yīng)用程序異常時,通過預(yù)先創(chuàng)建的錯誤修復(fù)程序?qū)?nèi)存錯誤嘗試修復(fù),在修復(fù)失敗時對應(yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存,因此,提高了應(yīng)用程序應(yīng)用的可靠性和安全性。如上所述,錯誤修復(fù)程序是在應(yīng)用程序啟動時創(chuàng)建的。則,創(chuàng)建錯誤修復(fù)程序的具體實現(xiàn)方式如下在上述應(yīng)用程序啟動時,創(chuàng)建該應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序;將該錯誤修復(fù)程序ID和該應(yīng)用程序的進(jìn)程ID關(guān)聯(lián)保存到錯誤處理模塊;將該錯誤修復(fù)程序阻塞在內(nèi)核態(tài)。另外,在上述S103中,修復(fù)成功后,仍將錯誤修復(fù)程序阻塞在內(nèi)核態(tài),等待下次被調(diào)用。其中,錯誤處理模塊位于內(nèi)核的底層模塊;關(guān)聯(lián)保存錯誤修復(fù)程序ID和應(yīng)用程序的進(jìn)程ID是指,保存錯誤修復(fù)程序ID、應(yīng)用程序的進(jìn)程ID,和它們之間的對應(yīng)關(guān)系。在本發(fā)明實施例中,可以為啟動的應(yīng)用程序均創(chuàng)建對應(yīng)的錯誤修復(fù)程序,也可以為那些指定需要保護(hù)的應(yīng)用程序創(chuàng)建對應(yīng)的錯誤修復(fù)程序。本發(fā)明實施例提供的方法中,上述S102的具體實現(xiàn)方式可以是當(dāng)上述應(yīng)用程序占用的內(nèi)存發(fā)生錯誤時,獲取該應(yīng)用程序的進(jìn)程ID ;根據(jù)該進(jìn)程ID,在上述錯誤處理模塊中查找該應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序ID ;根據(jù)該錯誤修復(fù)程序ID,喚醒該錯誤修復(fù)程序。其中,喚醒的具體實現(xiàn)方式可以是通過調(diào)用內(nèi)核提供的喚醒函數(shù)來喚醒錯誤修復(fù)程序;還可以是通過軟中斷的方式喚醒錯誤修復(fù)程序;也可以是操作系統(tǒng)中常用的其他喚醒方式。本發(fā)明實施例提供的方法,上述S103中錯誤修復(fù)程序?qū)Πl(fā)生的錯誤進(jìn)行修復(fù)處理的具體實現(xiàn)方式可以是該錯誤修復(fù)程序獲取上述錯誤處理模塊發(fā)來的發(fā)生內(nèi)存錯誤信息,該內(nèi)存錯誤信息可以但不僅限于包括發(fā)生錯誤的內(nèi)存地址、發(fā)生錯誤的上下文信息等;根據(jù)該內(nèi)存錯誤信息對發(fā)生的錯誤進(jìn)行修復(fù)處理,修復(fù)的具體實現(xiàn)方式可以但不僅限于根據(jù)發(fā)生錯誤的內(nèi)存地址及異常應(yīng)用程序中各個地址段范圍,定位出錯的業(yè)務(wù)數(shù)據(jù),并通過重新加載業(yè)務(wù)數(shù)據(jù)的方式進(jìn)行錯誤修復(fù);或者,在定位到出錯的業(yè)務(wù)數(shù)據(jù)后,嘗試為出錯的業(yè)務(wù)數(shù)據(jù)重新分配內(nèi)存區(qū)域,將這部分業(yè)務(wù)數(shù)據(jù)遷移至新分配的內(nèi)存區(qū)域。其中,內(nèi)存錯誤信息是預(yù)先保存到錯誤處理模塊中的。本發(fā)明實施例提供的方法中,還可以先對發(fā)生錯誤的內(nèi)存地址進(jìn)行判斷,當(dāng)該發(fā)生錯誤的內(nèi)存地址對應(yīng)的內(nèi)存頁是上述應(yīng)用程序的只讀頁時,通過現(xiàn)有的只讀頁修復(fù)方法進(jìn)行錯誤修復(fù),如果修復(fù)成功,則錯誤修復(fù)結(jié)束;如果修復(fù)失敗,則執(zhí)行上述S101,掛起上述應(yīng)用程序的進(jìn)程;當(dāng)該發(fā)生錯誤的內(nèi)存地址對應(yīng)的內(nèi)存頁不是只讀頁時,則執(zhí)行上述 S101,掛起上述應(yīng)用程序的進(jìn)程。在本發(fā)明實施例提供的方法中,上述的錯誤修復(fù)程序可以是錯誤修復(fù)線程,也可以是錯誤修復(fù)進(jìn)程。如果是錯誤修復(fù)線程,則上述掛起該應(yīng)用程序的進(jìn)程的具體實現(xiàn)方式為掛起該應(yīng)用程序中除了該錯誤修復(fù)線程外的線程。下面將對本發(fā)明實施例在實際應(yīng)用過程中的具體實現(xiàn)方式進(jìn)行詳細(xì)的說明。一個應(yīng)用實施例在這個應(yīng)用實施例中,通過創(chuàng)建錯誤修復(fù)線程來對應(yīng)用程序進(jìn)行修復(fù),其處理過程如下在需要保護(hù)的應(yīng)用程序啟動階段,如圖2所示,包括如下操作S201、在該應(yīng)用程序的進(jìn)程中創(chuàng)建一個錯誤修復(fù)線程;S202、將該錯誤修復(fù)線程ID、該進(jìn)程ID關(guān)聯(lián)保存在錯誤處理模塊;S203、將該錯誤修復(fù)線程阻塞在內(nèi)核態(tài),等待被喚醒。在發(fā)生內(nèi)存錯誤階段,如圖3所示,包括如下操作S301、獲取發(fā)生錯誤的內(nèi)存地址;S302、判斷發(fā)生錯誤的內(nèi)存地址所在的區(qū)域,如果在應(yīng)用程序區(qū)域,執(zhí)行S304,如果在內(nèi)核區(qū)域,執(zhí)行S303;S303、進(jìn)行內(nèi)核修復(fù)處理,如果修復(fù)成功,錯誤修復(fù)流程結(jié)束,否則,執(zhí)行S314 ;S304、獲取內(nèi)存錯誤導(dǎo)致異常的應(yīng)用程序的進(jìn)程ID和錯誤修復(fù)線程ID,執(zhí)行 S305 ;S305、判斷出錯線程是否為錯誤修復(fù)線程,如果是,則執(zhí)行S306,否則,執(zhí)行S307 ;判斷出錯線程是否為錯誤修復(fù)線程的具體實現(xiàn)方式可以是將出錯線程ID與錯誤處理模塊中保存的錯誤修復(fù)線程ID進(jìn)行匹配,如果有錯誤修復(fù)線程ID與出錯線程ID相同,則表明該錯誤修復(fù)線程出錯。S306、關(guān)閉上述異常的應(yīng)用程序,錯誤修復(fù)流程結(jié)束;S307、將上述異常的應(yīng)用程序的進(jìn)程ID與錯誤處理模塊中保存的進(jìn)程ID進(jìn)行匹配,如果匹配成功,執(zhí)行S308,否則,執(zhí)行S306 ;S308、判斷發(fā)生錯誤的內(nèi)存地址對應(yīng)的內(nèi)存頁是否為異常的應(yīng)用程序的只讀頁, 如果是,執(zhí)行S309,否則,執(zhí)行S310 ;S309、通過只讀頁冗余等只讀頁修復(fù)方法在內(nèi)核對內(nèi)存錯誤進(jìn)行修復(fù),如果修復(fù)成功,則錯誤修復(fù)流程結(jié)束,如果修復(fù)失敗,執(zhí)行S310 ;S310、掛起異常的應(yīng)用程序的進(jìn)程中除錯誤修復(fù)線程外的線程;將發(fā)生錯誤的內(nèi)存地址保存到錯誤處理模塊;在錯誤處理模塊中查找匹配成功的進(jìn)程ID關(guān)聯(lián)的錯誤修復(fù)線程ID,并喚醒該錯誤修復(fù)線程,執(zhí)行S311 ;其中,發(fā)生錯誤的內(nèi)存地址與對應(yīng)的進(jìn)程ID及線程ID關(guān)聯(lián)保存,以便錯誤修復(fù)線程在進(jìn)行錯誤修復(fù)是能夠正確查找到該內(nèi)存地址。S311、被喚醒的錯誤修復(fù)線程根據(jù)發(fā)生錯誤的內(nèi)存地址,對錯誤進(jìn)行修復(fù),如果修復(fù)成功,執(zhí)行S312,否則,執(zhí)行S313 ;S312、被喚醒的錯誤修復(fù)線程恢復(fù)掛起的線程,且該錯誤修復(fù)線程阻塞在內(nèi)核態(tài), 等待下一次被喚醒;S313、被喚醒的錯誤修復(fù)線程對異常的應(yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存后,關(guān)閉該應(yīng)用程序,錯誤修復(fù)流程結(jié)束;S314、重啟系統(tǒng),錯誤修復(fù)流程結(jié)束。上述應(yīng)用實施例提供的方法中,當(dāng)內(nèi)存錯誤導(dǎo)致應(yīng)用程序異常時,出現(xiàn)異常的應(yīng)用程序能夠參與錯誤修復(fù),在錯誤修復(fù)失敗時,使得應(yīng)用程序的關(guān)鍵數(shù)據(jù)能夠及時得到保存,防止由于硬件錯誤導(dǎo)致的應(yīng)用程序意外崩潰,提高了應(yīng)用程序使用的安全性和穩(wěn)定性。 另外,現(xiàn)有的錯誤修復(fù)過程中,通過向應(yīng)用程序的進(jìn)程發(fā)送信號指令指示應(yīng)用程序關(guān)閉,但一個應(yīng)用程序的進(jìn)程中可能包含多個線程,無法確定由哪個線程來處理接收到的信號,可能導(dǎo)致錯誤數(shù)據(jù)擴(kuò)散。而本應(yīng)用實施例中,將除了錯誤修復(fù)線程之外的其他線程掛起,從而避免了該問題。另一個應(yīng)用實施例在這個應(yīng)用實施例中,通過創(chuàng)建錯誤修復(fù)進(jìn)程來對應(yīng)用程序進(jìn)行修復(fù),其處理過程如下在需要保護(hù)的應(yīng)用程序啟動階段,如圖4所示,包括如下操作S401、為該應(yīng)用程序創(chuàng)建一個錯誤修復(fù)進(jìn)程;S402、將該錯誤修復(fù)進(jìn)程ID和該應(yīng)用程序的進(jìn)程ID關(guān)聯(lián)保存在錯誤處理模塊;S403、將該錯誤修復(fù)進(jìn)程阻塞在內(nèi)核態(tài),等待被喚醒。在發(fā)生內(nèi)存錯誤階段,如圖5所示,包括如下操作S501、獲取發(fā)生錯誤的內(nèi)存地址;S502、判斷發(fā)生錯誤的內(nèi)存地址所在的區(qū)域,如果在應(yīng)用程序區(qū)域,執(zhí)行S504,如果在內(nèi)核區(qū)域,執(zhí)行S503;S503、進(jìn)行內(nèi)核修復(fù),如果修復(fù)成功,錯誤修復(fù)流程結(jié)束,否則,執(zhí)行S513 ;S504、獲取內(nèi)存錯誤導(dǎo)致異常的應(yīng)用程序的進(jìn)程ID和關(guān)聯(lián)的錯誤修復(fù)進(jìn)程ID,執(zhí)行 S505 ;S505、將上述異常的應(yīng)用程序的進(jìn)程ID與錯誤處理模塊中保存的應(yīng)用程序進(jìn)程 ID進(jìn)行匹配,如果匹配成功,執(zhí)行S507,否則,執(zhí)行S506 ;S506、關(guān)閉上述異常的應(yīng)用程序,錯誤修復(fù)流程結(jié)束;S507、判斷發(fā)生錯誤的內(nèi)存地址對應(yīng)的內(nèi)存頁是否為異常的應(yīng)用程序的只讀頁, 如果是,執(zhí)行S508,否則,執(zhí)行S509 ;S508、通過只讀頁冗余等只讀頁修復(fù)方法在內(nèi)核對內(nèi)存錯誤進(jìn)行修復(fù),如果修復(fù)成功,則錯誤修復(fù)流程結(jié)束,如果修復(fù)失敗,執(zhí)行S509 ;
S509、掛起異常的應(yīng)用程序的進(jìn)程;將發(fā)生錯誤的內(nèi)存地址保存到錯誤處理模塊; 在錯誤處理模塊中查找匹配的應(yīng)用程序的進(jìn)程ID關(guān)聯(lián)的錯誤修復(fù)進(jìn)程ID,并喚醒該錯誤修復(fù)進(jìn)程,執(zhí)行S510;S510、被喚醒的錯誤修復(fù)進(jìn)程根據(jù)發(fā)生錯誤的內(nèi)存地址,對錯誤進(jìn)行修復(fù),如果修復(fù)成功,執(zhí)行S511,否則,執(zhí)行S512 ;S511、被喚醒的錯誤修復(fù)進(jìn)程恢復(fù)掛起的進(jìn)程,且該錯誤修復(fù)進(jìn)程阻塞在內(nèi)核態(tài), 等待下一次被喚醒;S512、被喚醒的錯誤修復(fù)進(jìn)程對異常的應(yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存后,關(guān)閉該應(yīng)用程序,錯誤修復(fù)流程結(jié)束;S513、重啟系統(tǒng),錯誤修復(fù)流程結(jié)束。上述應(yīng)用實施例提供的方法中,當(dāng)內(nèi)存錯誤導(dǎo)致應(yīng)用程序異常時,通過創(chuàng)建的與該異常的應(yīng)用程序關(guān)聯(lián)的錯誤修復(fù)進(jìn)程參與錯誤修復(fù),在錯誤修復(fù)失敗時,使得應(yīng)用程序的關(guān)鍵數(shù)據(jù)能夠及時得到保存,防止由于硬件錯誤導(dǎo)致的應(yīng)用程序意外崩潰,提高了應(yīng)用程序使用的安全性和穩(wěn)定性。另外,現(xiàn)有的錯誤修復(fù)過程中,通過向應(yīng)用程序的進(jìn)程發(fā)送信號指令指示應(yīng)用程序關(guān)閉,但一個應(yīng)用程序的進(jìn)程中可能包含多個線程,無法確定由哪個線程來處理接收到的信號,可能導(dǎo)致錯誤數(shù)據(jù)擴(kuò)散。而本應(yīng)用實施例中,將異常的應(yīng)用程序的進(jìn)程掛起,不需要向該進(jìn)程發(fā)送信號,從而避免了該問題。實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護(hù)范圍并不局限于此, 任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換, 都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種應(yīng)用程序的內(nèi)存錯誤修復(fù)方法,其特征在于,包括當(dāng)應(yīng)用程序占用的內(nèi)存發(fā)生錯誤時,掛起所述應(yīng)用程序的進(jìn)程; 喚醒所述應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序,所述錯誤修復(fù)程序是在所述應(yīng)用程序啟動時創(chuàng)建的;所述錯誤修復(fù)程序?qū)Πl(fā)生的錯誤進(jìn)行修復(fù)處理,如果修復(fù)失敗,所述錯誤修復(fù)程序?qū)λ鰬?yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存后,關(guān)閉所述應(yīng)用程序;如果修復(fù)成功,所述錯誤修復(fù)程序?qū)炱鸬倪M(jìn)程恢復(fù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括 在所述應(yīng)用程序啟動時,創(chuàng)建所述錯誤修復(fù)程序;將所述錯誤修復(fù)程序ID和所述進(jìn)程ID關(guān)聯(lián)保存到錯誤處理模塊; 將所述錯誤修復(fù)程序阻塞在內(nèi)核態(tài)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述喚醒所述應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序包括當(dāng)應(yīng)用程序占用的內(nèi)存發(fā)生錯誤時,獲取所述應(yīng)用程序的進(jìn)程ID ;根據(jù)所述進(jìn)程ID,在所述錯誤處理模塊中查找所述應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序ID ;根據(jù)所述錯誤修復(fù)程序ID,喚醒所述錯誤修復(fù)程序。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述錯誤修復(fù)程序?qū)Πl(fā)生的錯誤進(jìn)行修復(fù)處理包括所述錯誤修復(fù)程序獲取所述錯誤處理模塊發(fā)送的內(nèi)存錯誤信息,根據(jù)所述內(nèi)存錯誤信息對發(fā)生的錯誤進(jìn)行修復(fù)處理,所述內(nèi)存錯誤信息包括發(fā)生錯誤的內(nèi)存地址。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述掛起所述應(yīng)用程序的進(jìn)程,進(jìn)一步包括對發(fā)生錯誤的內(nèi)存地址進(jìn)行判斷,當(dāng)所述發(fā)生錯誤的內(nèi)存地址對應(yīng)的內(nèi)存頁是所述應(yīng)用程序的只讀頁時,通過只讀頁修復(fù)方法進(jìn)行錯誤修復(fù),如果修復(fù)失敗,掛起所述應(yīng)用程序的進(jìn)程;當(dāng)所述發(fā)生錯誤的內(nèi)存地址對應(yīng)的內(nèi)存頁不是所述應(yīng)用程序的只讀頁時,掛起所述應(yīng)用程序的進(jìn)程。
6.根據(jù)權(quán)利要求1 5任意一項所述的方法,其特征在于,所述錯誤修復(fù)程序為所述應(yīng)用程序的進(jìn)程中的錯誤修復(fù)線程,則所述掛起所述應(yīng)用程序的進(jìn)程包括掛起所述應(yīng)用程序中除所述錯誤修復(fù)線程外的線程。
7.根據(jù)權(quán)利要求1 5任意一項所述的方法,其特征在于,所述錯誤修復(fù)程序為錯誤修復(fù)進(jìn)程。
8.根據(jù)權(quán)利要求1 7任意一項所述的方法,其特征在于,通過軟中斷喚醒所述錯誤修復(fù)程序。
9.根據(jù)權(quán)利要求1 8任意一項所述的方法,其特征在于,在所述錯誤修復(fù)程序?qū)Πl(fā)生的錯誤進(jìn)行修復(fù)處理成功后,該方法還包括將所述錯誤修復(fù)線程阻塞在內(nèi)核態(tài)。
全文摘要
本發(fā)明涉及一種應(yīng)用程序的內(nèi)存錯誤修復(fù)方法,包括當(dāng)應(yīng)用程序占用的內(nèi)存發(fā)生錯誤時,掛起所述應(yīng)用程序的進(jìn)程;喚醒所述應(yīng)用程序?qū)?yīng)的錯誤修復(fù)程序,所述錯誤修復(fù)程序是在所述應(yīng)用程序啟動時創(chuàng)建的;所述錯誤修復(fù)程序?qū)Πl(fā)生的錯誤進(jìn)行修復(fù)處理,如果修復(fù)失敗,所述錯誤修復(fù)程序?qū)λ鰬?yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存后,關(guān)閉所述應(yīng)用程序;如果修復(fù)成功,所述錯誤修復(fù)程序?qū)炱鸬倪M(jìn)程恢復(fù)。由于當(dāng)內(nèi)存錯誤導(dǎo)致應(yīng)用程序異常時,通過預(yù)先創(chuàng)建的錯誤修復(fù)程序?qū)?nèi)存錯誤嘗試修復(fù),在修復(fù)失敗時對應(yīng)用程序的關(guān)鍵數(shù)據(jù)進(jìn)行保存,因此,提高了應(yīng)用程序應(yīng)用的可靠性和安全性。
文檔編號G06F11/07GK102308285SQ201180001191
公開日2012年1月4日 申請日期2011年7月26日 優(yōu)先權(quán)日2011年7月26日
發(fā)明者劉獎, 范文林 申請人:華為技術(shù)有限公司