中斷 異常與併發

2021-10-18 07:41:20 字數 3001 閱讀 7592

title: 中斷、異常與併發

date: 2019-12-29 22:19:12

2. 異常

3. 併發

在學習了組合語言課程後,才總算有所領會,於是打算進行相應的歸納。

何為中斷?書本上的一種解釋如下:

中斷(interrupt)是一種使cpu掛起正在執行的程式而轉去處理特殊事件的操作。

不嚴謹地說,中斷就是「函式」,這種「函式」可以由當前程式呼叫,也可以由作業系統呼叫,或者由硬體呼叫,相當於「庫函式」。

但,中斷比庫函式級別更高,庫函式需要引入庫才能呼叫,而中斷可以不引入任何庫直接呼叫。

而且,當沒有作業系統時,中斷也可以呼叫

在組合語言中,程式可以通過int n呼叫中斷,n是中斷號。

實模式下,當程式通過int n呼叫中斷時,系統是如何找到對應的中斷程式並跳轉的呢?

在記憶體最低端的1kb空間中,存放著乙個中斷向量表。其中,每個中斷向量佔4個位元組,順序存放在中斷向量表中,比如,0號中斷向量在位址0*4處,1號中斷向量在位址1*4處。

那什麼是中斷向量呢?

其實,中斷向量就是中斷處理程式的入口位址。4位元組中,高兩位元組是入口位址的段值,低兩位元組是入口位址的偏移。

ia-32系列cpu能支援256種型別的中斷(1kb即有256個中斷向量),分別編號為 0 ~ 255,即中斷型別號,簡稱中斷號。其中,前32個中斷(0~31)保留給處理使用,剩餘的可由使用者(比如作業系統)自定義。

每個中斷都有各自的作用,並且對應乙個中斷處理程式。比如,屬於內部中斷的0號中斷,是出現除0時,執行相關操作;10號中斷是顯示i/o中斷,提供給使用者呼叫。

實模式下的ia-32系統cpu為例,中斷響應和返回過程,由硬體完成,步驟如下:

根據int n指令取得中斷號

將標誌暫存器值flags壓棧

關閉外部中斷和單步中斷(iftf標誌位清0)

中斷返回位址的段值cs和偏移ip壓棧

根據中斷號,從中斷向量表中取得中斷處理程式的入口位址

跳轉至中斷處理程式

執行中斷處理程式…

中斷返回時,從棧中恢復ip,cs,flags

可以看出,中斷響應和函式呼叫過程十分相似。而訪問暫存器(cs,ip,flags)的操作,也就是上下文切換

在早期的intel 8086/8088微處理器中,並不區分異常和中斷,統稱為中斷。所以,上述中斷內容都是在intel 8086 實模式基礎上的,而下述異常內容將在作業系統保護模式基礎上。

80286開始,intel統一把內中斷稱為異常/內部異常,而把外中斷稱為中斷/外部中斷

當異常或中斷發生時,正在執行的邏輯控制流被打斷,cpu轉而執行異常處理程式,從而引起異常控制流

不同於實模式,ia-32保護模式,借助中斷描述符表來儲存異常處理程式或中斷處理程式的入口位址,並且由idtr暫存器來指定idt表的位置。

中斷描述表與中斷向量表類似,共有256個表項,每個表項是乙個8位元組的中斷門描述符陷阱門描述符任務門描述符

(為什麼總要取一些奇奇怪怪的名字呢?故意讓人看不懂嗎?不懂不懂)

linux核心在系統初始化時,會設定好idt中的每個表項。

中斷與異常有著千絲萬縷的關係,但併發又跟這兩者有何關係呢?

首先,我們必須意識到,平時遇見的併發(多個程序同時執行),本質上是快速交替執行的程序(不考慮多cpu)。

而在某乙個時刻,只能有乙個程式在cpu執行,但由於各程序快速(毫秒級)交替執行,所以我們看起來像是同時執行的

究其本質,併發,是由作業系統根據乙個定時器中斷,每過一會兒(xx毫秒)就幫我們切換執行程式,從而營造出來的假象

在實模式中,硬體定時器每隔55ms會發出一次中斷請求,cpu接收到定時請求後,會轉入8號定時器中斷處理程式。

8號中斷處理程式中,含有一條中斷指令int 1ch,而1ch號中斷處理程式並沒有做任何工作,可以認為它只有一條中斷返回指令。

如果我們將1ch中斷處理程式設定為自定義的程式(將自定義程式的入口位址,填入中斷向量表1ch*4位址處),那麼每過一段時間自定義程式便會被呼叫。

假如有主程式a和自定義的1ch中斷處理程式b,那麼a、b程式會相互切換執行,每過55ms執行b程式,然後中斷返回執行a程式。

由於55ms肉眼無法察覺,所以我們會看到a、b程式同時執行的假象。

現在,我們將主程式a看作作業系統,程式b看作程序切換程式

那麼,我們可以很明朗地發現,只要在程式b中,不斷儲存、恢復程序的上下文(程序的暫存器等),就可以實現程序的切換。

每過55ms(或者更久)執行程式b,切換執行程序,並跳轉到切換後的程序執行。從而實現多程序併發執行。

到這,是不是覺得併發竟然如此簡單呢?

中斷與異常的區別

一 中斷 系統停止當前正在執行的程式而轉向其他服務,可能是因為優先順序高的請求 服務了,或者是因為人為安排中斷。中斷是屬於正常現象。異常 是由於軟體錯誤而引起的 二 中斷是cpu所具備的功能 硬體 異常是軟體執行過程中的一種開發過程中沒有考慮到的程式錯誤 軟體 三 1.中斷的概念 所謂中斷是指cpu...

ZYNQ 異常與中斷原理

異常 cpu停止正常工作,執行專用的特權的一段軟體程式,使系統恢復正常。coretex a9的異常包括 1.中斷 fiq優先於irq irq interrupt request 指中斷模式。fiq fast interrupt request 指快速中斷模式。irq與fiq是arm處理器的兩種不同程...

中斷與異常詳解(五)

隨著看的東西的增多,之前不明白的地方也開始有了眉目,所以更新前幾節的東西,歡迎指正。想想馬上就中斷返回,進入程序描述了,還是挺激動的呢。中斷向量表多達256項 雖然預設使用的只有49條,但很明顯中斷服務程式必須支援smp,這也是在第三節為什麼在handle irq event irq,s,actio...