版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國]-中央中斷系統(tǒng)

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

簡(jiǎn)介

中斷是指計(jì)算機(jī)暫時(shí)停止正在處理的程序而去執(zhí)行外界或內(nèi)部發(fā)生的緊急事件,并在處理完成后自動(dòng)返回原程序繼續(xù)運(yùn)行原程序的過程。我們知道,CPU(中央處理器)運(yùn)行速度非???,相對(duì)于外設(shè)一般要快幾個(gè)數(shù)量級(jí)。為了解決這個(gè)速度匹配問題,發(fā)展了中斷的概念。良好的中斷系統(tǒng)能提高計(jì)算機(jī)實(shí)時(shí)處理的能力,實(shí)現(xiàn)CPU與外設(shè)分時(shí)操作和自動(dòng)處理故障,從而擴(kuò)大了計(jì)算機(jī)的應(yīng)用范圍。

中央中斷系統(tǒng)即為CPU中斷系統(tǒng),中斷由外部或內(nèi)部中斷源產(chǎn)生。中斷源可以在需要時(shí)向CPU提出中斷請(qǐng)求,中斷請(qǐng)求一般是一個(gè)邊沿跳變的信號(hào),CPU在運(yùn)行過程中會(huì)不斷進(jìn)行檢測(cè),一旦檢測(cè)到跳變便自動(dòng)進(jìn)入相應(yīng)的中斷向量入口執(zhí)行中斷服務(wù)程序,并在執(zhí)行完成后自動(dòng)返回到原程序處繼續(xù)執(zhí)行,中斷服務(wù)程序是由用戶完成的。

功能進(jìn)行中斷優(yōu)先級(jí)排隊(duì)一個(gè)CPU通常有多個(gè)中斷源,所以總有可能發(fā)生在同一個(gè)瞬間有多個(gè)中斷源同時(shí)向CPU申請(qǐng)中斷的情況,這就要求程序設(shè)計(jì)者按輕重緩急給每個(gè)中斷源的中斷請(qǐng)求一個(gè)中斷優(yōu)先級(jí)。當(dāng)多個(gè)中斷源同時(shí)向CPU請(qǐng)求中斷時(shí),CPU就可以通過中斷優(yōu)先級(jí)排隊(duì)率先響應(yīng)中斷優(yōu)先級(jí)高的中斷請(qǐng)求而把中斷優(yōu)先級(jí)低的中斷請(qǐng)求暫時(shí)放下,并記錄低中斷的信息,等到處理完優(yōu)先級(jí)高的中斷請(qǐng)求后再來響應(yīng)優(yōu)先低的中斷。

實(shí)現(xiàn)中斷嵌套CPU實(shí)現(xiàn)中斷嵌套的先決條件是要有可以屏蔽的中斷,其次要有能對(duì)中斷進(jìn)行控制的指令。中斷嵌套功能可以使CPU在響應(yīng)某一中斷請(qǐng)求的同時(shí)再去響應(yīng)更高中斷優(yōu)先級(jí)的中斷請(qǐng)求,而把原中斷服務(wù)程序掛起,等處理完這個(gè)更高中斷優(yōu)先級(jí)的中斷請(qǐng)求后再來響應(yīng)原中斷,最后退出所有中斷程序。

自動(dòng)響應(yīng)中斷中斷源產(chǎn)生中斷是隨機(jī)發(fā)生,無法事先預(yù)料的。因此,CPU必須時(shí)刻不斷地檢測(cè)中斷輸入線的電平變化,并且相鄰兩次檢測(cè)的時(shí)間不宜相隔太長,否則就會(huì)影響中斷響應(yīng)的時(shí)效性。通常,CPU總是在每條指令的最后階段對(duì)中斷請(qǐng)求進(jìn)行一次檢測(cè),因此中斷源產(chǎn)生中斷請(qǐng)求到被CPU檢測(cè)到,這個(gè)時(shí)間不會(huì)超過一個(gè)指令的時(shí)間。CPU在響應(yīng)中斷時(shí)通常要自動(dòng)做三件事:一是自動(dòng)關(guān)閉中斷(有的CPU是關(guān)閉比當(dāng)前的中斷優(yōu)先級(jí)低的中斷,從而防止其它中斷源來干擾本次中斷)和把當(dāng)前執(zhí)行程序的斷點(diǎn)地址(即程序計(jì)數(shù)器PC中的值)壓入堆棧,以便中斷服務(wù)程序最后的中斷返回指令RETI將堆棧中的值彈入程序計(jì)數(shù)器PC中,返回中斷前的原程序執(zhí)行,如果此時(shí)有中斷的嵌套,則會(huì)進(jìn)入原來被掛起的中斷程序中繼續(xù)執(zhí)行。

中斷源中斷源是指引起中斷的事件或發(fā)出中斷請(qǐng)示的來源。

外部設(shè)備中斷源在微型計(jì)算機(jī)中,外部設(shè)備主要用來輸入和輸出數(shù)據(jù),所以它是最原始和最廣泛的中斷源。在用做中斷源時(shí),通過要求它在輸入或輸出一組數(shù)據(jù)時(shí)能夠自動(dòng)產(chǎn)生一個(gè)“中斷請(qǐng)求”信號(hào)(一般是一個(gè)高到低或低到高的電平跳變),以供CPU檢測(cè)和響應(yīng)。例如:我們經(jīng)常用的鍵盤鼠標(biāo),當(dāng)你敲下一個(gè)鍵時(shí),實(shí)際上,就是向CPU發(fā)出一個(gè)中斷信號(hào),CPU就會(huì)響應(yīng)中斷執(zhí)行相應(yīng)的命令。

在嵌入式實(shí)時(shí)控制系統(tǒng)中,外部設(shè)備(被控對(duì)象)常常作為中斷源,用于產(chǎn)生中斷請(qǐng)求信號(hào),要求CPU及時(shí)采集系統(tǒng)的各種控制參數(shù)以及要求發(fā)送或接收數(shù)據(jù),等等。例如:電壓、電流、溫度、濕度、加速度都可以作為產(chǎn)生中斷的源。

故障中斷源故障源是產(chǎn)生故障的源泉,CPU可以通過中斷方式快速的對(duì)已發(fā)生故障進(jìn)行及時(shí)的分析處理,從而保證系統(tǒng)正常的運(yùn)行。計(jì)算機(jī)故障源有內(nèi)部和外部之分:CPU內(nèi)部故障源引起內(nèi)部中斷;CPU外部故障引起外部中斷,如突然掉電等。在掉電時(shí),掉電檢測(cè)電路通過檢測(cè)就會(huì)自動(dòng)產(chǎn)生一個(gè)掉電中斷請(qǐng)求,CPU檢測(cè)到后便在大濾波電容維持正常供電的幾秒內(nèi)通過執(zhí)行掉電中斷服務(wù)程序來保護(hù)現(xiàn)場(chǎng)和啟用備用電池,以便在市電恢復(fù)正常后繼續(xù)執(zhí)行掉電前的用戶程序。 在嵌入式系統(tǒng)中,被控對(duì)象的故障也可用作故障中斷源,以便對(duì)被控對(duì)象進(jìn)行應(yīng)急處理,從而可以減少系統(tǒng)在發(fā)生故障時(shí)的損失。

定時(shí)器中斷源定時(shí)器中斷有內(nèi)部和外部之分。內(nèi)部定時(shí)器中斷由CPU內(nèi)部的定時(shí)器∕計(jì)數(shù)器溢出時(shí)自動(dòng)產(chǎn)生,故又稱為內(nèi)部定時(shí)器溢出中斷;外部定時(shí)器中斷通常由外部定時(shí)電路(或外部的一個(gè)脈沖信號(hào)比如光電門)發(fā)出的脈沖通過CPU的中斷請(qǐng)求輸入線引起。不論是內(nèi)部還是外部定時(shí)器的中斷都可以使CPU進(jìn)行計(jì)時(shí)處理,以便達(dá)到時(shí)間控制的目的。

中斷嵌套和c語言中的子程序類似,中斷也是允許嵌套的。中斷嵌套是指在同一個(gè)瞬間,CPU因響應(yīng)某一中斷源的中斷請(qǐng)求而正在執(zhí)行相應(yīng)的服務(wù)程序時(shí),且此時(shí)CPU的中斷是開放的,那它必然可以把正在執(zhí)行的中斷服務(wù)程序暫停下來轉(zhuǎn)而響應(yīng)和處理中斷優(yōu)先級(jí)更高的中斷源的中斷請(qǐng)求,待處理完成后再回來繼續(xù)執(zhí)行原來的中斷服務(wù)程序。因此,實(shí)現(xiàn)中斷嵌套的前提是,在中斷服務(wù)程序中CPU的中斷是開放的(有些處理器需要在中斷服務(wù)程序開始處設(shè)置一條開中斷的指令比如Atmel公司的AVR單片機(jī),它的中斷優(yōu)先級(jí)是固定的,且進(jìn)入中斷后自動(dòng)屏蔽CPU的中斷)。其次是要存在優(yōu)先級(jí)更高的中斷請(qǐng)求。二者缺一不可,都是實(shí)現(xiàn)中斷嵌套的必要條件。

處理流程中斷系統(tǒng)的目標(biāo)就是實(shí)現(xiàn)中斷異常的處理對(duì)用戶透明.從而降低一般計(jì)算機(jī)用戶對(duì)計(jì)算機(jī)硬件知識(shí)的要求,使軟件編程更容易實(shí)現(xiàn)、更容易理解,如弱化中斷異常為“消息”。中斷與異常處理必須考慮以下幾個(gè)方面的問題:確定中斷源,優(yōu)先級(jí)管理,屏蔽管理,中斷嵌套(僅支持高級(jí)打斷低級(jí)),獲取中斷向量。中斷處理的一般流程如下:中斷請(qǐng)求、中斷響應(yīng)、中斷服務(wù)、中斷返回。

中斷源管理中斷源的管理包含硬件和軟件兩個(gè)方面。首先,整體設(shè)計(jì)需要規(guī)劃內(nèi)部事件的數(shù)量、系統(tǒng)支持的軟中斷數(shù)量、向用戶開放的外部服務(wù)數(shù)量以及它們的優(yōu)先級(jí)和類型編碼。其次,選擇合理的硬件實(shí)現(xiàn)模式。最后,操作系統(tǒng)的相關(guān)部分代碼的編寫是建立在前面兩者之上的。

中斷異常服務(wù)中斷異常服務(wù)通常分為系統(tǒng)的服務(wù)和一般用戶的服務(wù)。對(duì)于像溢出、除出錯(cuò)、未定義指令等等這些異常.其處理帶有普遍性,由系統(tǒng)代碼實(shí)現(xiàn)。對(duì)于外部中斷.則其服務(wù)系統(tǒng)是無法預(yù)先知道的,所以這些服務(wù)代碼需要用戶編寫并向系統(tǒng)注冊(cè)。下圖為一個(gè)中斷異常整體安排實(shí)例。

IDT表對(duì)于嵌入式系統(tǒng).通常中斷表約定從內(nèi)存0地址開始。若希望強(qiáng)化管理,使得中斷表可以隨意定位,則在CPU內(nèi)就需要設(shè)計(jì)一個(gè)IDTR寄存器來“記住”IDT表的地址。

優(yōu)勢(shì)提高CPU的工作效率CPU有了中斷功能可以通過分時(shí)操作啟動(dòng)多個(gè)外設(shè)同時(shí)工作并能對(duì)它們進(jìn)行統(tǒng)一管理。CPU執(zhí)行主程序中有關(guān)指令(一般是設(shè)備驅(qū)動(dòng)程序)令各外設(shè)同時(shí)工作,而且在任何一個(gè)外設(shè)的工作完成后(比如:A/D轉(zhuǎn)換器完成了數(shù)據(jù)的轉(zhuǎn)換)都可以通過中斷得到滿意的服務(wù)(如CPU接收A/D的數(shù)據(jù),再一次啟動(dòng)A/D工作)。CPU完成A/D轉(zhuǎn)換器的啟動(dòng)后,就去處理別的事件,直到A/D再一次的完成轉(zhuǎn)換并向CPU提出中斷請(qǐng)求,CPU才轉(zhuǎn)而對(duì)A/D轉(zhuǎn)換的數(shù)據(jù)做相應(yīng)的處理。因此,CPU在和外設(shè)交換信息時(shí)通過中斷就可以避免不必要的長時(shí)間的等待和查詢,從而大大提高了CPU的工作效率和系統(tǒng)的吞吐能力。

提高處理的時(shí)效性.我們知道在實(shí)時(shí)控制系統(tǒng)中,被控系統(tǒng)的實(shí)時(shí)參量、越權(quán)數(shù)據(jù)和故障信息都必須被計(jì)算機(jī)及時(shí)的采集、處理和分析判斷,以便對(duì)系統(tǒng)實(shí)施正確調(diào)節(jié)和控制。比如,在一架飛機(jī)上的實(shí)時(shí)控制系統(tǒng),如果實(shí)時(shí)性不好,那么一旦發(fā)生緊急事件,就會(huì)發(fā)生不可挽回的重大事故。因此,可以毫不夸張的說,計(jì)算機(jī)對(duì)實(shí)時(shí)數(shù)據(jù)的處理時(shí)效常常是被控系統(tǒng)的生命,是影響產(chǎn)品質(zhì)量和系統(tǒng)安全的關(guān)鍵所在。系統(tǒng)的失常和故障都可以通過中斷立刻通知CPU,使它可以迅速獲取實(shí)時(shí)數(shù)據(jù)和故障信息,并對(duì)系統(tǒng)作出應(yīng)急處理1。