中斷,異常,陷阱 概念

2021-08-21 12:57:17 字數 1410 閱讀 5417

中斷:為了裝置與cpu之間的非同步通訊。是由裝置向cpu發的訊號。典型的有如服務請求,任務完成提醒等。比如我們熟知的時鐘中斷,硬碟讀寫服務請求中斷。

中斷的發生與系統處在使用者態還是在核心態無關,只決定於eflags暫存器的乙個標誌位(中斷允許位)。我們熟悉的sti, cli兩條指令就是用來設定這個標誌位,然後決定是否允許中斷。在單個cpu的系統中,這也是保護臨界區的一種簡便方法(保護臨界區的方法一般有:關中斷、排程器上鎖、訊號量)。中斷是非同步的,因為從邏輯上來說,中斷的產生與當前正在執行的程序無關。

軟中斷與硬中斷的比較:

相同點:其中斷源發中斷請求或軟中斷訊號後, cpu 或接收程序在適當的時機自動進行中斷處理或完成軟中斷訊號所對應的功能。

不同點:接收軟中斷訊號的程序不一定正好在接收時占有處理機,而相應的處理必須等到該接收程序得到處理機之後才能進行。

也有人說trap是軟體引起的中斷,就是所謂的軟中斷,比如組合語言裡int指令就是引起了乙個軟中斷;而有硬體管腳發起的中斷叫硬中斷。這樣看來,trap是中斷的一種。

異常:為了控制程序流,是由當前正在執行的程序產生。異常包括很多種類,有出錯(fault),有陷阱(trap),也有可程式設計異常(programmable exception)。

出錯(fault)和陷入(trap)最重要的一點區別是他們發生時所儲存的eip值的不同。

出錯(fault)儲存的eip指向觸發異常的那條指令;而陷入(trap)儲存的eip指向觸發異常的那條指令的下一條指令。因此,當從異常返回時,出錯(fault)會重新執行那條指令;而陷入(trap)就不會重新執行。這一點實際上也是相當重要的,比如我們熟悉的缺頁異常(page fault),由於是fault,所以當缺頁異常處理完成之後,還會去嘗試重新執行那條觸發異常的指令(那時多半情況是不再缺頁)。

陷入的最主要的應用是在除錯中,被除錯的程序遇到你設定的斷點,會停下來等待你的處理,等到你讓其重新執行了,它當然不會再去執行已經執行過的斷點指令。

可程式設計中斷:這類中斷可由程式設計者用int指令來觸發。在linux中,使用了乙個,也是唯一的乙個可程式設計中斷,就是int 0x80系統呼叫。硬體對可程式設計中斷的處理與對trap的處理類似,即從這類異常返回時也是返回到觸發異常的下一條指令。關於可程式設計中斷,還有另外一種說法:軟體中斷(software interrupt),其實是乙個意思.

interrup即外中斷,指來自處理機和記憶體外部的中斷,包括 i/o 裝置發出的 i/o中斷、外部訊號中斷、各種定時器引起的時鐘中斷以及除錯程式中設定的斷點等引起的除錯中斷等。

trap即內中斷,主要指在處理機和記憶體內部產生的中斷。它包括程式運算引起的各種錯誤。軟中斷是通訊程序之間用來模擬硬中斷的一種訊號通訊方式。

2 、陷阱處理程式提供的服務為當前程序所用,而中斷處理程式提供的服務則不是為了當前程序的。(陷阱會占用程序的時間片)

4 、在有的系統中,陷入處理程式被規定在各自的程序上下文中執行,而中斷處理程式則在系統上下文中執行。

作業系統 陷阱 中斷 異常

在作業系統中,陷阱,中斷和異常是常見的術語,它們貫穿作業系統學習的始終,這篇文章主要區分它們之間的不同。中斷是由外部事件導致並且它發生的時間是不可 的,這一點和陷阱不同。外部事件主要是指時鐘中斷,硬體中斷等。由於cpu一次只能執行一條指令,所以在乙個時刻只能有乙個程式執行,但我們感覺在我們的計算機中...

作業系統的中斷,陷阱,異常

中斷是由外部事件導致並且它發生的時間是不可 的,這一點和陷阱不同。外部事件主要是指時鐘中斷,硬體中斷等。由於cpu一次只能執行一條指令,所以在乙個時刻只能有乙個程式執行,但我們感覺在我們的計算機中明明可以同時執行很多程式啊,這是由於cpu在多個程序之間快速切換所導致的偽並行。如果某乙個程式執行了足夠...

中斷和異常概念詳解

中斷 interrupt 通常被定義為乙個事件,該事件改變處理器執行的指令順序。這樣的事件與cpu晶元內外部硬體電路產生的電訊號相對應。中斷通常分為同步 synchronous 中斷和非同步 asynchronous 中斷 在intel微處理器手冊中,把同步和非同步中斷分別稱為異常 exceptio...