国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      異常處理方法及裝置的制造方法

      文檔序號(hào):10624680閱讀:492來源:國知局
      異常處理方法及裝置的制造方法
      【專利摘要】本發(fā)明提供了一種異常處理方法及裝置,其中,所述方法包括:檢測(cè)訪問PCI-E存儲(chǔ)memory空間過程中是否發(fā)生異常;如果是,則將引起異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值;將所述異常指令的下一個(gè)地址作為所述當(dāng)前異常的返回地址。采用本發(fā)明提供的上述技術(shù)方案,解決了相關(guān)技術(shù)中,訪問pcie memory地址過程中出現(xiàn)異常而引起的進(jìn)程停止以及系統(tǒng)因死循環(huán)掛掉的問題,進(jìn)而提升了系統(tǒng)的健壯性和殘存性。
      【專利說明】
      異常處理方法及裝置
      技術(shù)領(lǐng)域
      [0001]本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種異常處理方法及裝置。
      【背景技術(shù)】
      [0002]快捷外設(shè)互聯(lián)標(biāo)準(zhǔn)(PeripheralComponent Interconnect Express,簡稱為PC1-E)是一種新型的總線標(biāo)準(zhǔn)和接口,是由英特爾在2001年公布的被稱為“3G10”的第三代PCI總線。PC1-E屬于高速串行點(diǎn)對(duì)點(diǎn)雙通道高帶寬傳輸,所連接的設(shè)備分配獨(dú)享通道帶寬,不共享總線帶寬,主要支持主動(dòng)電源管理,錯(cuò)誤報(bào)告,端對(duì)端的可靠性傳輸,熱插拔以及服務(wù)質(zhì)量(Quality of Service,簡稱為QoS)等功能。
      [0003]PC1-E中規(guī)定了四種地址空間,它們分別是memory、1/0、configurat1n和message空間。在PC1-E體系架構(gòu)中,訪問沒有存儲(chǔ)體對(duì)應(yīng)的memory地址時(shí)會(huì)產(chǎn)生異常。對(duì)于不同處理器平臺(tái),在對(duì)此類異常的處理方法上略會(huì)有些差異。
      [0004]在精簡指令集架構(gòu)的中央處理器(PerPerformance Optimizat1n WithEnhanced-Performance Computing,簡稱 POWERPC)處理器平臺(tái)下,中央處理器(CentralProcessing Unit,簡稱為CPU發(fā)出一條讀訪問PC1-E memory空間的指令后,處理器首先通過 local access windows 將指令中的 local address 地址映射到 PC1-E controller 上。然后使用outbound ATMU windows將處理器地址映射為PC1-E域的地址。PC1-E控制器的事物層將根據(jù)處理器的訪問類型和映射后的PC1-E地址構(gòu)成一個(gè)或多個(gè)TLP。最終,這些TLP會(huì)通過PC1-E的鏈路層、物理層送達(dá)總線的對(duì)端,并等待對(duì)端的complet1n報(bào)文結(jié)束本次事物。
      [0005]當(dāng)處理器發(fā)送一個(gè)讀訪問,而讀訪問的地址沒有存儲(chǔ)體與之對(duì)應(yīng)的情況下,PC1-E控制器會(huì)因等待complet1n報(bào)文超時(shí)而產(chǎn)生一個(gè)異常。在異常處理中過程中,處理函數(shù)會(huì)判斷觸發(fā)該異常的指令是戶態(tài),還是內(nèi)核態(tài)的。如果是用戶態(tài),異常處理將發(fā)送SIGBUS信號(hào)給用戶態(tài)的進(jìn)程。用進(jìn)程在收到SIGBUS信號(hào)后,默認(rèn)的處理方式是結(jié)束該進(jìn)程。如果是內(nèi)核態(tài),用戶將打印出當(dāng)前的處理器環(huán)境信息,并退出異常。PC1-E訪存指令沒有成功執(zhí)行,在異常返回后內(nèi)核將會(huì)重新執(zhí)行該條指令。該訪存指令會(huì)訪問沒有存儲(chǔ)體對(duì)應(yīng)的PC1-E地址,因此也會(huì)再次引發(fā)異常,最終將會(huì)導(dǎo)致內(nèi)核進(jìn)入死循環(huán)狀態(tài)。
      [0006]在支持PC1-E熱插拔的系統(tǒng)中,PC1-E設(shè)備可能隨時(shí)會(huì)掉電或拔出。假設(shè)在某一個(gè)時(shí)刻處理器連續(xù)讀訪問PC1-E設(shè)備的memory空間。在訪問期間PC1-E設(shè)備突然掉電。若此次訪問是用戶態(tài)進(jìn)程發(fā)起的,進(jìn)程將被殺死。若訪問是內(nèi)核態(tài)發(fā)起的,系統(tǒng)將會(huì)因?yàn)檫@次訪問失敗而陷入死循環(huán)中,以致整機(jī)down掉。
      [0007]針對(duì)相關(guān)技術(shù)中,訪問pcie memory地址過程中出現(xiàn)異常而引起的進(jìn)程停止以及系統(tǒng)因死循環(huán)掛掉的問題,尚未提出有效的解決方案。

      【發(fā)明內(nèi)容】

      [0008]為了解決上述技術(shù)問題,本發(fā)明提供了一種異常處理方法及裝置。
      [0009]根據(jù)本發(fā)明的一個(gè)方面,提供了一種異常處理方法,包括:檢測(cè)訪問快捷外設(shè)互聯(lián)標(biāo)準(zhǔn)PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常;如果是,則將引起異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值;將所述異常指令的下一個(gè)地址作為所述當(dāng)前異常的返回地址。
      [0010]優(yōu)選地,檢測(cè)訪問PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常,包括:檢測(cè)是否發(fā)生以下情況:訪問所述PC1-E存儲(chǔ)memory空間時(shí),由于所述PC1-E存儲(chǔ)memory空間沒有對(duì)應(yīng)的存儲(chǔ)實(shí)體而導(dǎo)致的異常,以及所述異常指令的所要訪問的操作地址是否位于所述PC1-E存儲(chǔ)memory空間的地址范圍內(nèi);其中,在檢測(cè)結(jié)果為是的情況下,確定訪問所述PC1-E存儲(chǔ)memory空間過程中發(fā)生異常。
      [0011]優(yōu)選地,通過以下方式之一獲取所述操作地址:在判斷所述當(dāng)前異常為加載load類指令引起的異常時(shí),從所述load類指令獲取所述操作地址;或從機(jī)器檢查中斷狀態(tài)寄存器MCSR中讀取所述操作地址。
      [0012]優(yōu)選地,從所述load類指令獲取所述操作地址,包括:根據(jù)所述load類指令的格式類型,從所述load類指令中與所述格式類型對(duì)應(yīng)的指定位置獲取所述操作地址。
      [0013]優(yōu)選地,將引起所述當(dāng)前異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值,包括:在與所述異常指令對(duì)應(yīng)的數(shù)據(jù)寄存器中寫入所述非法值。
      [0014]優(yōu)選地,所述異常至少包括以下之一:加載load類指令引起的異常、總線上讀取數(shù)據(jù)總線異常。
      [0015]根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種異常處理裝置,包括:檢測(cè)模塊,用于檢測(cè)訪問快捷外設(shè)互聯(lián)標(biāo)準(zhǔn)PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常;設(shè)置模塊,用于在發(fā)生異常時(shí),將引起異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值;確定模塊,用于將所述異常指令的下一個(gè)地址作為所述當(dāng)前異常的返回地址。
      [0016]優(yōu)選地,所述檢測(cè)模塊,用于檢測(cè)是否發(fā)生以下情況:訪問所述PC1-E存儲(chǔ)memory空間時(shí),由于所述PC1-E存儲(chǔ)memory空間沒有對(duì)應(yīng)的存儲(chǔ)實(shí)體而導(dǎo)致的異常,以及所述異常指令的所要訪問的操作地址是否位于所述PC1-E存儲(chǔ)memory空間的地址范圍內(nèi);其中,在檢測(cè)結(jié)果為是的情況下,確定訪問所述PC1-E存儲(chǔ)memory空間過程中發(fā)生異常。
      [0017]優(yōu)選地,所述裝置還包括,獲取模塊,用于獲取所述操作地址,其中,所述獲取模塊還用于在判斷所述當(dāng)前異常為加載load類指令引起的異常時(shí),從所述load類指令獲取所述操作地址;或從機(jī)器檢查中斷狀態(tài)寄存器MCSR中讀取所述操作地址。
      [0018]優(yōu)選地,所述獲取模塊,還用于根據(jù)所述load類指令的格式類型,從所述load類指令中與所述格式類型對(duì)應(yīng)的指定位置獲取所述操作地址。
      [0019]通過本發(fā)明,采用在發(fā)生異常時(shí),將異常指令的下一個(gè)地址作為所述當(dāng)前異常的返回地址,并將異常指令的返回值設(shè)置為非法值的技術(shù)手段,解決了相關(guān)技術(shù)中,訪問pciememory地址過程中出現(xiàn)異常而引起的進(jìn)程停止以及系統(tǒng)因死循環(huán)掛掉的問題,進(jìn)而提升了系統(tǒng)的健壯性和殘存性。
      【附圖說明】
      [0020]此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
      [0021]圖1是根據(jù)本發(fā)明實(shí)施例的異常處理方法的流程圖;
      [0022]圖2為根據(jù)本發(fā)明實(shí)施例的異常處理裝置的結(jié)構(gòu)框圖;
      [0023]圖3為根據(jù)本發(fā)明實(shí)施例的異常處理裝置的另一結(jié)構(gòu)框圖;
      [0024]圖4為根據(jù)本發(fā)明優(yōu)選實(shí)施例的使用分析指令的方法處理讀pcie memory異常的處理方法的流程圖;
      [0025]圖5為根據(jù)本發(fā)明優(yōu)選實(shí)施例的使用powerpc平臺(tái)架構(gòu)提供的寄存器實(shí)現(xiàn)pciememory的異常處理。
      【具體實(shí)施方式】
      [0026]下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
      [0027]本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
      [0028]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
      [0029]在本實(shí)施例中提供了一種異常處理方法,圖1是根據(jù)本發(fā)明實(shí)施例的異常處理方法的流程圖,如圖1所示,該流程包括如下步驟:
      [0030]步驟S102,檢測(cè)訪問快捷外設(shè)互聯(lián)標(biāo)準(zhǔn)PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常;
      [0031]步驟S104,如果是,則將引起異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值;
      [0032]步驟S106,將上述異常指令的下一個(gè)地址作為上述當(dāng)前異常的返回地址。
      [0033]通過上述各個(gè)步驟,采用在發(fā)生異常時(shí),將異常指令的下一個(gè)地址作為所述當(dāng)前異常的返回地址,,并將異常指令的返回值設(shè)置為非法值的的技術(shù)手段,解決了相關(guān)技術(shù)中,訪問pcie memory地址過程中出現(xiàn)異常而引起的進(jìn)程停止以及系統(tǒng)因死循環(huán)掛掉的問題,進(jìn)而提升了系統(tǒng)的健壯性和殘存性。
      [0034]可選地,非法值可以是預(yù)先設(shè)定的,在本發(fā)明實(shí)施例中優(yōu)選為十六進(jìn)制的F。
      [0035]對(duì)于檢測(cè)訪問PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異??梢酝ㄟ^檢測(cè)是否發(fā)生以下情況:訪問上述PC1-E存儲(chǔ)memory空間時(shí),由于上述PC1-E存儲(chǔ)memory空間沒有對(duì)應(yīng)的存儲(chǔ)實(shí)體而導(dǎo)致的異常,以及上述異常指令的所要訪問的操作地址是否位于上述PC1-E存儲(chǔ)memory空間的地址范圍內(nèi);其中,在檢測(cè)結(jié)果為是的情況下,確定訪問上述PC1-E存儲(chǔ)memory空間過程中發(fā)生異常。
      [0036]其中,可以通過以下方式之一獲取上述操作地址:在判斷上述當(dāng)前異常為加載load類指令引起的異常時(shí),從上述load類指令獲取上述操作地址;或從機(jī)器檢查中斷狀態(tài)寄存器MCSR中讀取上述操作地址,由于load類指令的格式類型存在多種情況,因此,本發(fā)明實(shí)施中,根據(jù)上述load類指令的格式類型,從上述load類指令中與上述格式類型對(duì)應(yīng)的指定位置獲取上述操作地址。
      [0037]在本發(fā)明實(shí)施例中,上述異常至少包括以下之一:加載load類指令引起的異常、總線上讀取數(shù)據(jù)總線異常。
      [0038]綜上所述,本發(fā)明實(shí)施例的技術(shù)方案,解決了 powerpc架構(gòu)處理器讀訪問無存儲(chǔ)體對(duì)應(yīng)的pcie memory地址而引起的異常問題,進(jìn)而達(dá)到不殺死用戶態(tài)進(jìn)程,也不會(huì)導(dǎo)致系統(tǒng)因死循環(huán)掛掉的方法,從而提升了系統(tǒng)的健壯性和殘存性。
      [0039]以下結(jié)合一示例說明上述實(shí)施例中所提供的異常處理方法,但不用于限定本發(fā)明實(shí)施例:
      [0040]步驟I)確定導(dǎo)致異常的原因
      [0041]首先要在異常處理流程中判定導(dǎo)致異常的原因:即處理器訪問了沒有存儲(chǔ)體對(duì)應(yīng)的pcie memory地址導(dǎo)致的異常。如果不是這種情況,異常按原有的流程繼續(xù)進(jìn)行。否則,將針對(duì)這種異常做進(jìn)一步處理
      [0042]步驟2)判斷異常地址是否在pcie memory地址范圍內(nèi)
      [0043]在確定異常原因后,需要進(jìn)一步獲取引起異常指令的操作地址,并將這個(gè)地址記錄下來。并獲取系統(tǒng)中所有pcie控制器所管轄的memory地址范圍。最后,判斷所記錄的異常指令操作地址是否屬于pcie memory空間。如果是,說明這種情況滿足本發(fā)明實(shí)施例要處理的條件。否則,按原有的異常處理流程執(zhí)行。
      [0044]步驟3)將返回值填充為全F
      [0045]當(dāng)以上兩種情況和條件都滿足后,將load memory指令的返回值填充為全F。并將異常返回的地址改為引發(fā)異常的指令下地址,并跳過后續(xù)記錄內(nèi)核異常的打印或發(fā)送SIGBUS信號(hào)給用戶進(jìn)程的操作,直接返回。
      [0046]采用本發(fā)明實(shí)施例所提供的上述技術(shù)方案,可以簡單有效的防止讀訪問PCIe產(chǎn)生異常后導(dǎo)致的進(jìn)程被殺死或是系統(tǒng)掛掉的問題。
      [0047]需要說明的是,對(duì)于前述的各方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必需的。
      [0048]在本實(shí)施例中還提供了一種異常處理裝置,用于實(shí)現(xiàn)上述實(shí)施例及優(yōu)選實(shí)施方式,已經(jīng)進(jìn)行過說明的不再贅述,下面對(duì)該裝置中涉及到的模塊進(jìn)行說明。如以下所使用的,術(shù)語“模塊”可以實(shí)現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實(shí)施例所描述的裝置較佳地以軟件來實(shí)現(xiàn),但是硬件,或者軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。圖2為根據(jù)本發(fā)明實(shí)施例的異常處理裝置的結(jié)構(gòu)框圖。如圖2所示,該裝置包括:
      [0049]檢測(cè)模塊20,用于檢測(cè)訪問快捷外設(shè)互聯(lián)標(biāo)準(zhǔn)PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常;
      [0050]設(shè)置模塊22,與檢測(cè)模塊20連接,用于在發(fā)生異常時(shí),將引起異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值;
      [0051]確定模塊24,與設(shè)置模塊22連接,用于將上述異常指令的下一個(gè)地址作為上述當(dāng)前異常的返回地址。
      [0052]通過上述各個(gè)模塊的綜合應(yīng)用,采用在發(fā)生異常時(shí),將異常指令的下一個(gè)地址作為所述當(dāng)前異常的返回地址,并將將引起上述異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值的技術(shù)手段,解決了相關(guān)技術(shù)中,訪問pcie memory地址過程中出現(xiàn)異常而引起的進(jìn)程停止以及系統(tǒng)因死循環(huán)掛掉的問題,進(jìn)而提升了系統(tǒng)的健壯性和殘存性。
      [0053]圖3為根據(jù)本發(fā)明實(shí)施例的異常處理裝置的另一結(jié)構(gòu)框圖,其中,檢測(cè)模塊20,用于檢測(cè)是否發(fā)生以下情況:訪問上述PC1-E存儲(chǔ)memory空間時(shí),由于上述PC1-E存儲(chǔ)memory空間沒有對(duì)應(yīng)的存儲(chǔ)單元而導(dǎo)致的異常,以及上述異常指令的所要訪問的操作地址是否位于上述PC1-E存儲(chǔ)memory空間的地址范圍內(nèi);其中,在檢測(cè)結(jié)果為是的情況下,確定訪問上述PC1-E存儲(chǔ)memory空間過程中發(fā)生異常。
      [0054]可選地,上述裝置還包括,獲取模塊26,用于獲取上述操作地址,其中,獲取模塊26還用于在判斷上述當(dāng)前異常為加載load類指令引起的異常時(shí),從上述load類指令獲取上述操作地址;或從機(jī)器檢查中斷狀態(tài)寄存器MCSR中讀取上述操作地址。
      [0055]進(jìn)一步地,獲取模塊26,還用于根據(jù)上述load類指令的格式類型,從上述load類指令中與上述格式類型對(duì)應(yīng)的指定位置獲取上述操作地址。
      [0056]為了更好的理解上述異常處理過程,以下結(jié)合優(yōu)選實(shí)施例進(jìn)行說明,但不用于限定本發(fā)明實(shí)施例的保護(hù)范圍。
      [0057]下面結(jié)合圖4進(jìn)一步詳細(xì)描述使用分析指令的方法解決讀pcie memory異常的處理方法:
      [0058]步驟S402,異常入口,powerpc架構(gòu)的指令屬于精簡指令集,采用統(tǒng)一指令編碼方式,指令的長度相等,而且所有指令中的op-code永遠(yuǎn)位于同樣的位置。根據(jù)這一指令特征,對(duì)異常原因的判斷可以采取分析指令op-code的方式來實(shí)現(xiàn)。
      [0059]步驟S404,通過進(jìn)入異常時(shí)保留下結(jié)構(gòu)體struct pt_regs,提取引起異常的指令regs->nip0將指令的[0:5]bits取出,判斷該指令是否屬于load類指令。如果是,則執(zhí)行步驟S406中的處理,否則步驟S410。
      [0060]為了獲取引起異常的指令的操作地址,要對(duì)Load指令做進(jìn)行進(jìn)一步分析。可根據(jù)具體的Load指令提取出指令要訪問的地址。每種load指令放存的格式不同,因此要根據(jù)不同的指令來提取地址。
      [0061]步驟S406,通過 Iinux 內(nèi)核結(jié)構(gòu)變量 struct pci_controller hose_head 獲取pcie所覆蓋的地址范圍。并檢驗(yàn)步驟S404中提取的地址是否屬于這個(gè)范圍。如果是,執(zhí)行步驟S410中的操作,否則執(zhí)行步驟S410。
      [0062]步驟S408,獲取異常時(shí)保留下來的信息struct pt_regs,將引起異常的load指令的數(shù)據(jù)寄存器regS->gpr[0]填充為全F。并將異常返回的地址指向引起異常指令的下地址regs->nip = (regs_>nip)+4 ;。這樣再重新返回到程序運(yùn)行時(shí),程序?qū)⒉粫?huì)感知到異常的發(fā)生過,就好像load指令在pcie memory空間內(nèi)獲取了值為全F的非法值一樣。
      [0063]步驟S410,執(zhí)行原有的異常處理流程。
      [0064]另一種實(shí)現(xiàn)方法是根據(jù)powerpc核心存器來獲取并分析異常信息。下面結(jié)合圖5對(duì)使用核心寄存器實(shí)現(xiàn)的讀訪問pcie memory異常的處理作進(jìn)一步的描述。
      [0065]步驟S502,在異常入口處,通過獲取MCSR寄存器來判斷異常的類型。如果MCSR[60] = I,則表示產(chǎn)生了 “Bus read data bus error”異常。這種類型異常;
      [0066]步驟S504,在powerpc架構(gòu)中,在發(fā)生異常時(shí),MCAR寄存器包含了引起異常的指令所操作的地址。
      [0067]步驟S506,通過讀取 MCAR (Machine Check Address Register)寄存器,可以獲取引起異常的指令要訪問的操作地址,判斷上述操作地址是否位于pcie所覆蓋的地址范圍,如果是,執(zhí)行步驟S506中的操作,否則執(zhí)行步驟S508。
      [0068]步驟S508,獲取異常時(shí)保留下來的信息struct pt_regs,將引起異常的load指令的數(shù)據(jù)寄存器regS->gpr[0]填充為全F。并將異常返回的地址指向引起異常指令的下地址regs->nip = (regs_>nip)+4 ;。這樣再重新返回到程序運(yùn)行時(shí),程序?qū)⒉粫?huì)感知到異常的發(fā)生過,就好像load指令在pcie memory空間內(nèi)獲取了值為全F的非法值一樣。
      [0069]步驟S508,執(zhí)行原有的異常處理流程。
      [0070]綜上所述,本發(fā)明實(shí)施例達(dá)到了以下技術(shù)效果:解決了相關(guān)技術(shù)中,訪問pciememory地址過程中出現(xiàn)異常而引起的進(jìn)程停止以及系統(tǒng)因死循環(huán)掛掉的問題,進(jìn)而提升了系統(tǒng)的健壯性和殘存性。
      [0071]在另外一個(gè)實(shí)施例中,還提供了一種軟件,該軟件用于執(zhí)行上述實(shí)施例及優(yōu)選實(shí)施方式中描述的技術(shù)方案。
      [0072]在另外一個(gè)實(shí)施例中,還提供了一種存儲(chǔ)介質(zhì),該存儲(chǔ)介質(zhì)中存儲(chǔ)有上述軟件,該存儲(chǔ)介質(zhì)包括但不限于:光盤、軟盤、硬盤、可擦寫存儲(chǔ)器等。
      [0073]需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的對(duì)象在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
      [0074]顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
      [0075]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
      【主權(quán)項(xiàng)】
      1.一種異常處理方法,其特征在于,包括: 檢測(cè)訪問快捷外設(shè)互聯(lián)標(biāo)準(zhǔn)PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常; 如果是,則將引起異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值; 將所述異常指令的下一個(gè)地址作為當(dāng)前異常的返回地址。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,檢測(cè)訪問PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常,包括: 檢測(cè)是否發(fā)生以下情況:訪問所述PC1-E存儲(chǔ)memory空間時(shí),由于所述PC1-E存儲(chǔ)memory空間沒有對(duì)應(yīng)的存儲(chǔ)實(shí)體而導(dǎo)致的異常,以及所述異常指令的所要訪問的操作地址是否位于所述PC1-E存儲(chǔ)memory空間的地址范圍內(nèi);其中,在檢測(cè)結(jié)果為是的情況下,確定訪問所述PC1-E存儲(chǔ)memory空間過程中發(fā)生異常。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,通過以下方式之一獲取所述操作地址: 在判斷所述當(dāng)前異常為加載load類指令引起的異常時(shí),從所述load類指令獲取所述操作地址;或 從機(jī)器檢查中斷狀態(tài)寄存器MCSR中讀取所述操作地址。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,從所述load類指令獲取所述操作地址,包括: 根據(jù)所述load類指令的格式類型,從所述load類指令中與所述格式類型對(duì)應(yīng)的指定位置獲取所述操作地址。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,將引起所述當(dāng)前異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值,包括: 在與所述異常指令對(duì)應(yīng)的數(shù)據(jù)寄存器中寫入所述非法值。6.根據(jù)權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,所述異常至少包括以下之一: 加載load類指令引起的異常、總線上讀取數(shù)據(jù)總線的異常。7.一種異常處理裝置,其特征在于,包括: 檢測(cè)模塊,用于檢測(cè)訪問快捷外設(shè)互聯(lián)標(biāo)準(zhǔn)PC1-E存儲(chǔ)memory空間過程中是否發(fā)生異常; 設(shè)置模塊,用于在發(fā)生異常時(shí),將引起異常的異常指令所對(duì)應(yīng)的返回值設(shè)置為非法值; 確定模塊,用于將所述異常指令的下一個(gè)地址作為當(dāng)前異常的返回地址。8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述檢測(cè)模塊,用于檢測(cè)是否發(fā)生以下情況:訪問所述PC1-E存儲(chǔ)memory空間時(shí),由于所述PC1-E存儲(chǔ)memory空間沒有對(duì)應(yīng)的存儲(chǔ)實(shí)體而導(dǎo)致的異常,以及所述異常指令的所要訪問的操作地址是否位于所述PC1-E存儲(chǔ)memory空間的地址范圍內(nèi);其中,在檢測(cè)結(jié)果為是的情況下,確定訪問所述PC1-E存儲(chǔ)memory空間過程中發(fā)生異常。9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括,獲取模塊,用于獲取所述操作地址,其中,所述獲取模塊還用于在判斷所述當(dāng)前異常為加載load類指令引起的異常時(shí),從所述load類指令獲取所述操作地址;或從機(jī)器檢查中斷狀態(tài)寄存器MCSR中讀取所述操作地址。10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述獲取模塊,還用于根據(jù)所述load類指令的格式類型,從所述load類指令中與所述格式類型對(duì)應(yīng)的指定位置獲取所述操作地址。
      【文檔編號(hào)】G06F11/22GK105988905SQ201510076615
      【公開日】2016年10月5日
      【申請(qǐng)日】2015年2月12日
      【發(fā)明人】蔣習(xí)旺
      【申請(qǐng)人】中興通訊股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1