軟體產生的中斷
異常源異常分類
不可遮蔽中斷(nmi)
開啟和關閉中斷
8259a產生中斷
中斷和異常是一些提示性事件,這些事件表明系統、處理器或者當前執行程式或任務存在著某種狀況,需要處理器注意。
典型情況下,中斷是在程式執行期間隨機發生的,是對硬體訊號的響應。系統硬體使用中斷去處理處理器的外部事件,比如服務外設的請求。使用int n指令,軟體也可以產生中斷(模擬)。
異常是在處理器執行指令的過程中發現錯誤狀況而產生的,比如除數為零。處理器可以檢測出多種不同的錯誤狀況,包括保護違例、頁故障、內部機器故障。
為了便於處理中斷和異常,會給每乙個中斷狀況都分配了乙個唯一的識別碼,稱作向量。處理器用分配給每個異常或者中斷的向量作為訪問中斷描述符表的索引,以確定異常或者中斷處理程式的入口。
外部(硬體產生的)中斷
軟體產生的中斷
外部中斷是通過處理器的引腳或者本地的apic接收的。
凡是通過intr引腳或本地 apic傳遞到處理器的外部中斷都被稱作可遮蔽硬體中斷。
使用eflags暫存器的if標誌可以一下子遮蔽全部可遮蔽硬體中斷。
將中斷向量號作為int指令的運算元即可通過int指令在軟體中產生中斷。比如,指令int 35即可強制顯式地呼叫第35號中斷處理例程。
處理器探測到的程式錯誤異常。
軟體產生的異常。
機器檢測異常。
在應用程式、作業系統或管理程式的執行過程中,當探測到程式錯誤時,處理器產生乙個或多個異常。這些異常又進一步被劃分為故障、陷阱和終止。
int n指令可以在軟體中用來模擬某個異常,
處理器提供了內部和外部的機器檢測機制,用來檢查內部晶元硬體和匯流排事務的操作。這些機制構成了擴充套件的異常機制。當探測到乙個機器檢測錯誤時,處理器發出機器檢測異常訊號,並返回乙個錯誤碼。
根據報告的方式和引起異常的指令能否在不失程式或者任務連續性的情況下重新執行,異常被分為故障、陷阱和終止三種。
故障故障是一種通常能夠被修正的異常,而且,一旦修正,程式能夠在不失連續性的情況下重新啟動。當有故障報告時,處理器將機器狀態恢復到發生故障指令之前的狀態。故障處理例程的返回位址(cs暫存器和eip暫存器的儲存值)指向產生故障的指令,而不是產生故障指令之後的那條指令。
終止―終止是一種並不總是報告引起異常的指令的確切位置的異常,也不允許引起異常的程序或任務重新執行。終止被用來報告嚴重錯誤,比如硬體錯誤、不一致或系統表中的非法值。
下面兩種情況產生不可遮蔽中斷:
外部硬體啟用nmi引腳。
處理器從系統匯流排收到訊息收到送達模式的nmi訊息。
根據處理器和 eflags暫存器的if標誌和rf標誌的狀態,處理器禁止某些中斷的產生。
if標誌可以關閉對處理器的intr引腳或者本地apic收到的可遮蔽硬體中斷的服務。當if標誌清除時,處理器禁止中斷傳到intr引腳或者通過本地apic產生內部中斷請求;當if標誌置位時,中斷傳送到intr 引腳或者通過本地apic引腳處理成正常外部中斷。
if標誌不影響傳送到nmi引腳的不可遮蔽中斷和通過本地apic傳送的送達模式的nmi訊息,也不影響處理器產生異常。
2. 對應的imr中至少有一位表示中斷開放(未遮蔽),則8259a由int引腳向cpu發出中斷請求訊號,即表現為cpu的intr引腳接受到訊號。
3. 若cpu處於開中斷狀態(if置位),則在當前指令執行完以後,用int
a‾
\overline
inta
訊號作為響應。
4. 8259a收到int
a‾
\overline
inta
訊號後,使最高優先權的isr置位,相應的irr復位;
5. 啟動另乙個中斷響應週期,輸出第二個int
a‾
\overline
inta
脈衝;此時8259a向資料匯流排輸送乙個8位的指標;cpu可從中斷服務程式入口位址表中取出中斷服務程式的入口位址。
6. 中斷響應週期結束,cpu轉到中斷服務程式。
計算機中斷理解
一.什麼是中斷 計算機中斷 顧名思義,就是計算機由於遇到一些緊急情況,中斷現在的工作,轉而 處理緊急情況,處理完緊急情況以後再回到以前執行的工作繼續執行。不過這只是狹義的計 算機中段概念。因為這個概念只能解釋內部中斷和外部中斷,然而對於軟體中斷卻不能套用 次概念。為了讓我們更加方便的理解中斷這個概念...
說說計算機中的異常
開篇 異常這個名詞應該大家都不陌生,很多人都聽說過。系統呼叫知道吧?其實系統呼叫也是一種異常。但是具體的什麼是異常呢?他在計算機中有什麼作用?他是如何工作,如何被我們利用的?我想很多人都還不都是很清楚。了解異常有諸多好處,可以讓你更好的理解作業系統和應用程式的互動,更好的理解併發等。所以今天就簡單的...
說說計算機中的異常
開篇 異常這個名詞應該大家都不陌生,很多人都聽說過。系統呼叫知道吧?其實系統呼叫也是一種異常。但是具體的什麼是異常呢?他在計算機中有什麼作用?他是如何工作,如何被我們利用的?我想很多人都還不都是很清楚。了解異常有諸多好處,可以讓你更好的理解作業系統和應用程式的互動,更好的理解併發等。所以今天就簡單的...