複製鏈接
請複製以下鏈接發送給好友

中斷優先級

鎖定
為使系統能及時響應並處理髮生的所有中斷,系統根據引起中斷事件的重要性和緊迫程度,硬件將中斷源分為若干個級別,稱作中斷優先級。
在實際系統中,常常遇到多個中斷源同時請求中斷的情況,這時CPU必須確定首先為哪一個中斷源服務,以及服務的次序。解決的方法是中斷優先排隊,即根據中斷源請求的輕重緩急,排好中斷處理的優先次序即優先級(Priority),又稱優先權,先響應優先級最高的中斷請求。另外,當CPU正在處理某一中斷時,要能響應另一個優先級更高的中斷請求,而屏蔽掉同級或較低級的中斷請求,形成中斷嵌套
中文名
中斷優先級
外文名
Interrupt priority
解決方法
軟件、硬件優先級排隊
作    用
及時響應並處理髮生的所有中斷
排序方法
引起中斷事件的重要性和緊迫程度
依    據
優先級

中斷優先級簡介

微機系統中有多個中斷源,有可能出現兩個或兩個以上中斷源同時發出中斷請求的情況。多箇中斷源同時請求中斷時,CPU必須先確定為哪一個中斷源服務,要能辨別優先級最高的中斷源並進行響應。CPU在處理中斷時也要能響應更高級別的中斷申請,而屏蔽掉同級或較低級的中斷申請,這就是中斷優先級問題。 [1] 
中斷系統中,CPU一般根據各中斷請求的輕重緩急分別處理,即給每個中斷源確定一箇中斷優先級別,系統自動對它們進行排隊判優,保證首先處理優先級別高的中斷請求,待級別高的中斷請求處理完畢後,再響應級別較低的中斷請求。對多箇中斷源進行識別和優先級排隊的目的就是要確定出最高級別的中斷源,並形成該中斷源的中斷服務程序入口地址,以便CPU將控制轉移到該中斷服務程序去。 [1] 
一般指以下兩層含義: [2] 
①若有2個或2個以上的中斷源同時提出中斷請求微處理器先響應哪個中斷源,後響應哪個中斷源; [2] 
②若一箇中斷源提出中斷請求,微處理器給予響應並正在執行其中斷服務程序時,又有1箇中斷源提出中斷請求,後來的中斷源能否中斷前一箇中斷源的中斷服務程序 [2] 

中斷優先級分類

中斷是用以提高計算機工作效率、增強計算機功能的一項重要技術。最初引入硬件中斷,只是出於性能上的考量。如果計算機系統沒有中斷,則處理器與外部設備通信時,它必須在向該設備發出指令後進行忙等待(Busy waiting),反覆輪詢該設備是否完成了動作並返回結果。這就造成了大量處理器週期被浪費。引入中斷以後,當處理器發出設備請求後就可以立即返回以處理其他任務,而當設備完成動作後,發送中斷信號給處理器,後者就可以再回過頭獲取處理結果。這樣,在設備進行處理的週期內,處理器可以執行其他一些有意義的工作,而只付出一些很小的切換所引發的時間代價。後來被用於CPU外部與內部緊急事件的處理、機器故障的處理、時間控制等多個方面,併產生通過軟件方式進入中斷處理(軟中斷)的概念。 [3] 
中斷可分為如下幾種:

中斷優先級硬件中斷

(Hardware Interrupt) [3] 
  • 可屏蔽中斷(maskable interrupt)。硬件中斷的一類,可通過在中斷屏蔽寄存器中設定位掩碼來關閉。 [3] 
  • 非可屏蔽中斷(non-maskable interrupt,NMI)。硬件中斷的一類,無法通過在中斷屏蔽寄存器中設定位掩碼來關閉。典型例子是時鐘中斷(一個硬件時鐘以恆定頻率—如50Hz—發出的中斷)。 [3] 
  • 處理器間中斷(interprocessor interrupt)。一種特殊的硬件中斷。由處理器發出,被其它處理器接收。僅見於多處理器系統,以便於處理器間通信或同步。 [3] 
  • 偽中斷(spurious interrupt)。一類不希望被產生的硬件中斷。發生的原因有很多種,如中斷線路上電氣信號異常,或是中斷請求設備本身有問題。 [3] 

中斷優先級軟件中斷

(Software Interrupt)
  • 軟件中斷也叫內部中斷,它是CPU執行中斷指令INT n產生的中斷。中斷指令提供了直接調用中斷服務程序的軟件手段。 [4] 
軟件中斷是以INT n指令的形式出現在程序中的,中斷指令佔用兩個字節,第一個字節為指令碼CDH,第二個字節為指令操作數n,即中斷類型碼。當軟件中斷時,CPU從指令流中讀取中斷類型碼;當可屏蔽中斷時,要在發出中斷響應信號ITA後,才能從數據總線上讀取中斷類型碼。可見,軟件中斷與外部中斷有許多不同之處,它具有自身的一些特點,表現在以下幾個方面。 [4] 
(1)軟件中斷是以一條指令INT n而進入中斷服務程序的,並且其中斷類型碼由指令的第二字節提供。 [4] 
(2)軟件中斷不受中斷允許標誌IF的禁止,即無論正=1或0,對任何一個軟件中斷都不影響。其中,只有單步中斷受單步標誌TF的影響,即只有當TF=1時,才能執行單步中斷。 [4] 
(3)由於CPU從指令流中讀取軟件中斷的中斷類型碼,因此,在軟件中斷進入中斷後,不需要執行中斷響應總線週期,也不必從數據總線上讀取中斷類型碼。 [4] 
(4)軟件中斷除類型0(除數為0的中斷)外,都沒有隨機性,因為軟件中斷是以INT n指令的形式出現在程序中的,該指令放在程序的何處何時執行都是預先定好的,這就使得軟件中斷不會出現隨機性。 [4] 

中斷優先級中斷源種類

(1)設備中斷:如鍵盤、打印機等設備的數據傳送請求等。 [1] 
(2)指令中斷:為了方便用户使用系統資源或調試軟件而設置的中斷指令,由程序預先安排的中斷指令(INT n)引起,如BIOS及DOS系統功能調用的中斷指令等。 [1] 
(3)故障中斷:計算機內部設有故障自動檢測裝置,如電源掉電、奇偶校驗錯或協處理器中斷請求等意外事件,都要求CPU進行相應的中斷處理。 [1] 
(4)實時時鐘中斷:在自動控制系統中,常遇到定時檢測與時間控制,這時可採用外部時鐘電路進行定時。CPU可發出命令啓動時鐘電路開始計時,待定時時間到,時鐘電路就會向CPU發出中斷申請,由CPU進行處理。 [1] 
(5)CPU內部運算產生的某些錯誤所引起的中斷:如除法出錯、運算溢出、程序調試中設置斷點等。 [1] 

中斷優先級響應原則

響應不同優先級中斷的原則是: [5] 
  • CPU首先響應高優先級中斷請求
  • 如果優先級相同,CPU按查詢次序響應排在前面的中斷;
  • 正在進行的中斷過程不能被新的同級或低優先級的中斷請求所中斷;
  • 正在進行的低優先級中斷過程,能被高優先級中斷請求所中斷。

中斷優先級響應流程

CPU在執行每一條指令的後期,要對所有的中斷源進行檢測。 [5] 
在檢測到中斷請求前,程序計數器PC中存儲的是下一條指令碼的地址。如果CPU檢測到某一中斷請求並將響應該中斷時,它要跳轉到該中斷服務程序處,即把PC的當前內容保存起來,再把該中斷服務程序的入口地址送給PC,則其後CPU就執行該中斷服務程序了。 [5] 
圖1 CPU響應中斷流程 圖1 CPU響應中斷流程 [5]
在退出中斷服務程序前,CPU要執行中斷返回指令RETI,該指令把進入中斷服務程序前保存的PC內容再寫入PC,則其後CPU就從進入中斷服務程序前的斷點處向下執行指令,其流程如圖1所示用C51編寫中斷服務函數時,並不需要在中斷服務函數的最後編寫RETI指令,該指令由編譯器在編譯中斷服務函數時自動添加。

中斷優先級優先級排隊

在實際系統中,常常遇到多個中斷源同時請求中斷的情況,這時CPU必須確定首先為哪一個中斷源服務,以及服務的次序。解決的方法是中斷優先排隊,即根據中斷源請求的輕重緩急,排好中斷處理的優先次序即優先級(Priority),又稱優先權,先響應優先級最高的中斷請求。另外,當CPU正在處理某一中斷時,要能響應另一個優先級更高的中斷請求,而屏蔽掉同級或較低級的中斷請求,形成中斷嵌套 [6] 
中斷源的優先級判別一般可採用軟件優先級排隊和硬件優先級排隊兩種方法。 [7] 
軟件優先級排隊
圖2 軟件査詢接口電路 圖2 軟件査詢接口電路
如圖2所示,優先級由查詢順序決定,先查詢的中斷源具有最高的優先級。 [8] 
軟件優先級排隊是指各個中斷源優先權由軟件安排。若干個外設的中斷請求信號相“或”後,送至CPU的中斷接收引腳(如INTR)。這樣,只要任一外設有中斷請求,CPU便可響應中斷。在中斷服務子程序前可安排一段優先級的查詢程序,即CPU讀取外設中斷請求狀態端口,然後根據預先確定的優先級級別逐位檢測各外設的狀態,若有中斷請求就轉到相應的Uo處理程序入口,為該外設服務。 [7] 
軟件查詢程序流程 軟件查詢程序流程
用軟件查詢方法確定中斷優先級是一種最簡單的解決方法,主要依靠軟件方法實現,不需要專門的優先級排隊電路,可以通過修改查詢順序來修改中斷優先級,不必更改硬件。但是當中斷源個數較多時,由逐位檢測查詢到轉入相應中斷服務程序所耗費的時間較長,中斷響應速度慢,服務效率低。 [7] 
硬件優先級排隊
菊花鏈優先級排隊電路 菊花鏈優先級排隊電路
為提高中斷處理效率,通常採用硬件處理中斷優先權問題,即採用優先級排隊電路或專用中斷控制器等硬件電路來管理中斷。其中,硬件優先權排隊電路形式眾多,有采用編碼器組成的,有采用鏈式電路的。 [1] 
利用外設連接在排隊電路的物理位置來決定其中斷優先權的,排在最前面的優先級最高,排在最後面的優先級最低。 [6] 

中斷優先級改變的方法

在PC環境下,要改變併發中斷優先級,實現理想的中斷處理順序,要從以下兩個方面着手。
(1)使低優先級的中斷可中斷高優先級的中斷服務程序。
通過研究發現,8259A中的中斷服務寄存器ISR。對中斷處理順序的改變起了非常重要的作用。當中斷服務寄存器的相應位置1時,8259A自動禁止同級和較低級的中斷請求。因此要改變中斷的處理順序,必須在CPU響應中斷後,將8259A中的相應位清零的。這樣,如果有新的中斷請求,不論它的級別高低,只要CPU處於開中斷狀態,芯片就會馬上再向CPU發出中斷請求,即低優先級的中斷就可能會中斷高優先級的中斷服務程序。而實現CPU響應中斷後,將中斷服務寄存器8259A中的相應位清零,有3種解決的辦法。 [9] 
(2)在中斷處理程序中設置新的中斷屏蔽字。
為了能根據需要,改變實際的中斷處理次序,很多機器都設置了中斷屏蔽寄存器硬件,以決定是否讓某級中斷請求進入中斷優先權電路進行優先權比較。級別高的中斷請求優先得到響應。只要將每一類中斷處理程序的各級中斷屏蔽位設置成不同的狀態,就可以得到所希望的中斷處理次序。 [9] 

中斷優先級單級與多級

根據計算機系統對中斷處理策略的不同,中斷系統可以分為單級中斷系統和多級中斷系統,單級中斷系統是中斷結構中最基本的形式。 [1] 
在單級中斷系統中,所有的中斷源都屬於同一級,所有中斷請求觸發器排成一行,其優先次序是離CPU越近優先級越高。當響應某一中斷請求時,CPU執行該中斷源的中斷服務程序,在此過程中,中斷服務程序不允許被其他中斷源所打斷,即使優先級比它高的中斷源也不例外,只有當該中斷服務程序執行完畢之後,才能響應其他中斷。 [1] 
多級中斷系統是指計算機系統中的多箇中斷源,根據中斷事件的輕重緩急程度不同而分成若干個級別,每一箇中斷級分配一個優先級。一般而言,優先級高的中斷級可以打斷優先級低的中斷服務程序,以中斷嵌套方式進行工作。 [1] 
在中斷優先級已定的情況下,CPU總是首先響應優先級最高的中斷請求。當CPU正在響應某一中斷源的請求,即正在執行某個中斷服務程序時,若有優先級更高的中斷源申請中斷,為使級別更高的中斷源能及時得到服務,CPU就應暫停當前正在服務的級別較低的服務程序而轉入新的中斷源服務,等新的級別較高的中斷服務程序執行完後,再返回到被暫停的中斷服務程序繼續執行,直至處理結束返回主程序,這種過程稱為中斷嵌套。CPU允許高優先級中斷請求可以打斷低優先級中斷服務,使CPU對於急需處理的事件立即做出響應。 [1] 
中斷嵌套的出現,擴大了系統中斷功能,進一步加強了系統處理緊急事件的能力。中斷嵌套可以商多級。具體級數(即嵌套深度)原則上不限制,只取決於堆棧深度,實際上與要求的中斷響應速度有關。 [1] 
參考資料
  • 1.    楊立,鄧振杰,荊淑霞等編著.微型計算機原理與接口技術:中國鐵道出版社,2016.02:第219頁
  • 2.    袁志勇,王景存主編;章登義,劉樹波副主編.嵌入式系統原理與應用技術:北京航空航天大學出版社,2014.01:第146頁
  • 3.    張自軍,蔣軍,葉愛芹.微機原理與接口技術:中國科學技術大學出版社,2012.08:第205頁
  • 4.    李育賢.微機接口技術及其應用:西安電子科技大學出版社,2007.06:第73頁
  • 5.    王普斌.單片機接口與應用:冶金工業出版社,2016.04:第61頁
  • 6.    劉顯榮主編;張元濤,吳雲君副主編;汪德彪,常繼彬,葉文,範蘇參編.微機原理與嵌入式接口技術:西安電子科技大學出版社,2016.08:第129頁
  • 7.    萬曉東,陳則王,孔德明編著.計算機硬件技術基礎:南京航空航天大學,2013.01:第275頁
  • 8.    劉顯榮主編;張元濤,吳雲君副主編;汪德彪,常繼彬,葉文,範蘇參編.微機原理與嵌入式接口技術:西安電子科技大學出版社,2016.08:第130頁
  • 9.    陳燕俐, 洪龍, CHENYan-li, et al. 自由調整中斷優先級的研究和實現[J]. 南京郵電大學學報(自然科學版), 2005, 25(6):35-39.