資源描述:
《內(nèi)部中斷、外部中斷、硬件中斷和軟件中斷分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、軟件中斷、硬件中斷、外部中斷、內(nèi)部中斷??2010-01-3016:35:05
2、??分類:?電子愛好者
3、字號(hào)?訂閱8086/8088把中斷分為內(nèi)部中斷和外部中斷兩大類。為了支持多任務(wù)和虛擬存儲(chǔ)器等功能,80386把外部中斷稱為“中斷”,把內(nèi)部中斷稱為“異常”。與8086/8088一樣,80386通常在兩條指令之間響應(yīng)中斷或異常。80386最多處理256種中斷或異常。??????1.中斷????????????對(duì)80386而言,中斷是由異步的外部事件引起的。外部事件及中斷響應(yīng)與正執(zhí)行的指令沒有關(guān)系。通常,中斷用于指示I/O設(shè)備的一次操作已完成。與8
4、086/8088一樣,80386有兩根引腳INTR和NMI接受外部中斷請(qǐng)求信號(hào)。INTR接受可屏蔽中斷請(qǐng)求。NMI接受不可屏蔽中斷請(qǐng)求。在80386中,標(biāo)志寄存器EFLAGS中的IF標(biāo)志決定是否屏蔽可屏蔽中斷請(qǐng)求。??????????????外部硬件在通過INTR發(fā)出中斷請(qǐng)求信號(hào)的同時(shí),還要向處理器給出一個(gè)8位的中斷向量。處理器在響應(yīng)可屏蔽中斷請(qǐng)求時(shí),讀取這個(gè)由外部硬件給出的中斷向量號(hào)。處理器對(duì)這個(gè)中斷向量號(hào)并沒有規(guī)定。但在具體的微機(jī)系統(tǒng)中,系統(tǒng)必須通過軟件和硬件的配合設(shè)置,使得給出的這個(gè)中斷向量號(hào)不僅與外部中斷源對(duì)應(yīng),而且要避免中斷向量號(hào)使用沖
5、突情況的出現(xiàn)??删幊讨袛嗫刂破餍酒?259A可配合80386工作,能夠根據(jù)設(shè)置向處理器提供上述中斷向量號(hào),還能處理中斷請(qǐng)求的優(yōu)先級(jí)。每個(gè)8259A芯片可以支持8路中斷請(qǐng)求信號(hào),如果使用9個(gè)8259A芯片(一個(gè)主片,8個(gè)從片),就可使80386在單個(gè)引腳INTR上接受多達(dá)64個(gè)中斷源的中斷請(qǐng)求信號(hào)。??????????????處理器不屏蔽來自NMI的中斷請(qǐng)求。處理器在響應(yīng)NMI中斷時(shí),不從外部硬件接收中斷向量號(hào)。與8086/8088一樣,在80386中,不可屏蔽中斷所對(duì)應(yīng)的中斷向量號(hào)固定為2。為了不可屏蔽中斷的嵌套,每當(dāng)接受一個(gè)NMI中斷,處理器就
6、在內(nèi)部屏蔽了再次響應(yīng)NMI,這一屏蔽過程直到執(zhí)行中斷返回指令I(lǐng)RET后才結(jié)束。所以,NMI處理程序應(yīng)以IRET指令結(jié)束。??????2.異常????????????異常是80386在執(zhí)行指令期間檢測(cè)到不正常的或非法的條件所引起的。異常與正執(zhí)行的指令有直接的聯(lián)系。例如,執(zhí)行除法指令時(shí),除數(shù)等于0。再如,執(zhí)行指令時(shí)發(fā)現(xiàn)特權(quán)級(jí)不正確。當(dāng)發(fā)生這些情況時(shí),指令就不能成功完成。軟中斷指令“INT??n”和“INTO”也歸類于異常而不稱為中斷,這是因?yàn)閳?zhí)行這些指令產(chǎn)生異常事件。??????????????80386識(shí)別多種不同類別的異常,并賦予每一種類別以不同
7、的中斷向量號(hào)。異常發(fā)生后,處理器就象響應(yīng)中斷那樣處理異常。即根據(jù)中斷向量號(hào),轉(zhuǎn)相應(yīng)的中斷處理程序。把這種中斷處理程序稱為異常處理程序可能更合適。??????????????根據(jù)引起異常的程序是否可被恢復(fù)和恢復(fù)點(diǎn)不同,把異常進(jìn)一步分類為故障(Fault)、陷阱(Trap)和中止(Abort)。我們把對(duì)應(yīng)的異常處理程序分別稱為故障處理程序、陷阱處理程序和中止處理程序。??????????????故障是在引起異常的指令之前,把異常情況通知給系統(tǒng)的一種異常。80386認(rèn)為故障是可排除的。當(dāng)控制轉(zhuǎn)移到故障處理程序時(shí),所保存的斷點(diǎn)CS及EIP的值指向引起故障
8、的指令。這樣,在故障處理程序把故障排除后,執(zhí)行IRET返回到引起故障的程序繼續(xù)執(zhí)行時(shí),剛才引起故障的指令可重新得到執(zhí)行。這種重新執(zhí)行,不需要操作系統(tǒng)軟件的額外參與。故障的發(fā)現(xiàn)可能在指令開始執(zhí)行之前,也可能在指令執(zhí)行期間。如果在指令執(zhí)行期間檢測(cè)到故障,那么中止故障指令,并把指令的操作數(shù)恢復(fù)為指令開始執(zhí)行之前的值。這可保證故障指令的重新執(zhí)行得到正確的結(jié)果。例如,在一條指令的執(zhí)行期間,如果發(fā)現(xiàn)段不存在,那么停止該指令的執(zhí)行,并通知系統(tǒng)產(chǎn)生段故障,對(duì)應(yīng)的段故障處理程序可通過加載該段的方法來排除故障,之后,原指令就可成功執(zhí)行,至少不再發(fā)生段不存在的故障。?
9、?????????????陷阱是在引起異常的指令之后,把異常情況通知給系統(tǒng)的一種異常。當(dāng)控制轉(zhuǎn)移到異常處理程序時(shí),所保存的斷點(diǎn)CS及EIP的值指向引起陷阱的指令的下一條要執(zhí)行的指令。下一條要執(zhí)行的指令,不一定就是下一條指令。因此,陷阱處理程序并不是總能根據(jù)保存的斷點(diǎn),反推確定出產(chǎn)生異常的指令。在轉(zhuǎn)入陷阱處理程序時(shí),引起陷阱的指令應(yīng)正常完成,它有可能改變了寄存器或存儲(chǔ)單元。軟中斷指令、單步異常是陷阱的例子。??????????????中止是在系統(tǒng)出現(xiàn)嚴(yán)重情況時(shí),通知系統(tǒng)的一種異常。引起中止的指令是無法確定的。產(chǎn)生中止時(shí),正執(zhí)行的程序不能被恢復(fù)執(zhí)行。
10、系統(tǒng)接收中止后,處理程序要重新建立各種系統(tǒng)表格,并可能重新啟動(dòng)操作系統(tǒng)。硬件故障和系統(tǒng)表中出現(xiàn)非法值或不一致的值是中止的例子。???軟硬