Linux核心啟動 異常和中斷服務程式的掛接

2021-09-10 20:16:22 字數 762 閱讀 9609

1. 初始化idt

直達底部

作業系統需要經常處理中斷或異常。中斷技術也是廣泛使用的,系統呼叫就是利用中斷技術實現的。 中斷、異常都需要具體的服務程式來執行。 trap_init() 函式將中斷、異常處理的服務 程式與idt進行掛接來逐步重建中斷服務體系。

**如下:

舉個例子,n是0;gate_addr是&idt[0],也就是idt的第一項中斷描述符的位址;type是 15;dpl(描述符特權級)是0;addr是中斷服務程式divide_error(void)的入口位址。

所有中斷服務程式與idt的初始化基本上都類似。 set_system_gate(n, addr)與set_ trap_ gate(n, addr)用的_set_gate(gate_ addr, type, dpl, addr)是一樣 的; 差別是set_trap_gate的dpl是0,而set_system_ gate的dpl是3。

dpl為0的意思是只能由核心處理,dpl為3的意思是系統系統呼叫可以由3特權級(使用者特權級)呼叫。

接下來將idt的int 0x11~int0x2f都初始化,將idt中對應的指向中斷服務程式的指標設定為 reserved(保留)。 設定協處理器的idt項。允許主8259a中斷控制器的irq2、 irq3的中斷請求。 設定並口(可以接印表機)的idt項。32位中斷服務體系是為適應中斷訊號機制而建立的。

這些**的目的就是要拼出中斷描述符。回顧一下中斷描述符的格式,如下

異常描述符設定效果如下

返回目錄

Linux核心 異常和中斷的區別

相信大家都知道非常著名的兩個名詞 異常和中斷,不過,你真的理解這兩個名詞在說什麼嗎?它們之間有什麼區別呢?1.中斷 大家都知道,當我們在敲擊鍵盤的同時就會產生中斷,當硬碟讀寫完資料之後也會產生中斷,所以,我們需要知道,中斷是由硬體裝置產生的,而它們從物理上說就是電訊號,之後,它們通過中斷控制器傳送給...

Linux 2 6 核心閱讀筆記 中斷和異常

2014年7月24日 中斷門 陷阱門及中斷門 中斷是可以禁止的,可以通過告訴pic停止對某個中斷的發布。被禁止的中斷是不會丟失的,在解除禁止後又會傳送到cpu上。禁止中斷和遮蔽 mask 中斷的不同之處是遮蔽是忽略掉某個中斷,而禁止相當於延遲傳送。intel提供了三種型別的中斷描述符 任務門 中斷門...

中斷和異常

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