中斷和異常的再總結

2021-07-24 12:30:12 字數 2296 閱讀 9427

@(os)

內部異常(內中斷)

外中斷:來自cpu執行指令以外的事件。如:i/o中斷,時鐘中斷等。

在作業系統層次上,我們多聽到「異常」(exception)而少見「中斷」(interrupt),且往往籠統地稱其為異常,但處理器微體系結構規範通常會區分中斷和異常。

一般而言,中斷是非同步的異常是同步的,所謂同步和非同步的概念,又與我們網路通訊或函式呼叫中的同步非同步有所不同。中斷是來自處理器外部的i/o裝置的訊號的結果,它不是由指令流中某條指令執行引起的,從這個意義上講,它是非同步的,是來自指令流之外的。

異常又分為三類:陷阱(trap)、故障(fault)和終止(abort),它們都是執行當前指令流中的某條指令的結果,是來自指令流內部的,從這個意義上講它們都是同步的。

陷阱是有意而為之的異常,是明知有套還往裡鑽——人家要的就是這個結果,其最常見的用途就是作業系統的系統呼叫

故障是由錯誤條件引起的,可能被故障處理例程修復。如果可以修復,則啥事兒沒有,繼續幹活;如果不能修復則會轉化為終止,並進入下一步。常見的故障如缺頁。

終止是不可恢復的致命的錯誤造成結果。終止處理程式不再將控制返回給引發終止的應用程式,而是交給了系統——其結果往往是系統終止應用程式。

另外還有乙個比較模糊的問題,就是中斷或異常返回點的問題。

良性的如中斷和陷阱,只是在正常的工作流之外執行額外的操作,然後繼續幹沒幹完的活。因此處理程式完了後返回到原指令流的下一條指令,繼續執行。惡性的如故障和終止,對於可修復故障,由於是在上一條指令執行過程中發生(是由正在執行的指令引發的)的,在修復故障之後,會重新執行該指令;至於不可修復故障或終止,則不會再返回。

再說一下intel處理器的中斷及異常號和unix/ linux 程式設計中常見的「段故障」(segmentation fault)。

在pentium體系結構中,系統可以有高達256種不同的異常型別。0-31號對應體系結構定義的異常,對任何系統都一樣。範圍32-255的號碼對應的是作業系統定義的中斷和陷阱。

13號異常是一般保護性故障(general protect fault),許多原因都會引起該故障。通常是因為乙個程式應用了乙個未定義的虛擬儲存器區域,或者因為程式試圖寫乙個唯讀的文字段。unix/ linux 不會嘗試恢復這類故障,典型地,unix shell將這種故障報告為「段故障」(segmentation fault)。

在ia32系統上,系統呼叫是通過一條稱為int n的陷阱指令來提供的,其中n可能是異常表中256個異常號的任何乙個。但歷史上,系統呼叫是通過128(0x80)號提供的。

根據這個概念,特別強調的是缺頁中斷實際上是內中斷,也就是異常,來自指令流的。

儲存異常也是來自指令流的,因此也是異常,不是中斷。

出題點常常喜歡用缺頁中斷,儲存異常這些概念來設定陷阱

舉個例子:

(2015.24)假定下列指令已裝入指令暫存器。則執行時不可能導致cpu從使用者態變成核心態(系統態)的是:c

a. div r0, r1 ; (r0)/(r1)->r0

b. int n ; 產生軟中斷

c.not r0 ; 暫存器r0的內容取非

d. mov r0, addr ; 把位址addr處的記憶體資料放入暫存器r0中

這裡a可以發生除0異常,進行abort例程。b特別注意,很容易看成c語言**,心想int n怎麼還有異常呢?老實說我被這個困擾了很久。實際上這是故意挖的坑,int指的是interrupt!雖然後面中文註明了是軟中斷,但是先入為主的印象會超過當前的理性認知。c只是對內容取非,不可能出現異常。d,addr位址可能越界,因此也有可能出現異常。

(2016.22) 異常是指令執行過程中在處理器內部發生的特殊事件,中斷是來自處理器外部的請求事件。下列關於中斷或異常情況的敘述中,錯誤的是:a

a.「訪存時缺頁」屬於中斷

b. 「整數除以0」屬於異常

c. 「dma傳送結束」屬於中斷

d. 「儲存保護錯」屬於異常

分析:這種概念的識記題如果沒有真的理解,就很麻煩。這裡,需要特別強調的是cpu指令流相關一定是內中斷,也即所謂的異常。而非cpu指令流導致的才是外中斷,比如時鐘中斷,dma中斷等才是真正的外中斷。訪存時缺頁,我們聽過太多的缺頁中斷,缺頁異常,後來根本分不清誰是誰了,只需要抓住:缺頁是cpu訪存指令時才有的。是cpu相關。於是a項錯誤。

整數除0,當然是cpu幹的。儲存保護錯,也是記憶體訪問相關,屬於異常,也叫內中斷。

中斷和異常的再總結

中斷和異常的再總結 os 內部異常 內中斷 故障 fault 自陷 trap 終止 abort 是源自cpu執行指令內部的事件。如 非法操作碼,位址越界,算術溢位,虛存系統的缺頁,陷入指令等引起的事件。內部異常不可被遮蔽,一旦出現立馬處理。外中斷 來自cpu執行指令以外的事件。如 i o中斷,時鐘中...

中斷和異常

中斷和異常 中斷訊號的處理方式 分緊急部分和不緊急部分 中斷處理 必須能夠重入,以便能夠中斷巢狀 中斷和異常的產生 乙個irq interrupt request 代表中斷控制器上的一根中斷線,和乙個中斷向量 單cpu 可程式設計中斷控制器 pic 多cpu 改進的可程式設計中斷控制器 apic 乙...

中斷和異常

中斷通常定義為乙個事件,該事件改變處理器執行的指令順序。中斷通常分為同步中斷與非同步中斷。異常是同步的,i o中斷是非同步的。中斷可以分為 i o裝置發出的中斷請求 irq 都可以被遮蔽,乙個中斷被遮蔽以後,控制單元就忽略他。只有硬體故障等幾個危急事件才是非遮蔽中斷。異常可以分為 可以糾正的異常,例...