中斷處理過程
- 中斷源
- CPU與作業系統如果進行中斷
- 能夠對中斷向量表( 中斷描述符,簡稱IDT ) 進行初始化
一、中斷源
-
中斷Interrupts
(外設)外部中斷External(hardware generated) interrupts序列槽、硬碟、網卡、時鐘、······
(軟中斷,用在系統調用,應用程式通過軟中斷來獲得作業系統提供的服務)軟體産生的中斷Software generated interrupts The Int n 指令, 通常用于系統調用
-
異常Exceptions
程式錯誤
軟體産生的異常Software generated exceptions
INTO, INT 3 and BOUND
機器檢查出的異常S
-
确定 中斷服務例程(ISR)
- 每個中斷或異常與一個中斷服務例程(ISR, Interrupt Server Routine) 關聯,其關聯關系 存儲在 中斷描述符表(IDT, interrupt Descriptor Table).
- IDT 的 起始位址和大小 儲存在中斷描述符表 寄存器的 IDTR中
- IDT表中的每一項稱為中斷門或陷阱門
- CPU會根據中斷号來查這個IDT到底屬于哪一項,知道Index,找到中斷門或陷阱門,從裡面取出它的段選擇址。以這個選擇址作為index 進一步查找GDT(全局描述符表), GDT裡存放段描述符(裡面有一個基位址 Base address), Base address + offset = 相應的線性位址, 進而可以執行ISR(中斷服務例程)。CPU可以自動的在硬體這個層面通路這兩個表,來查到相應的中斷需要對應的中斷處理例程(由作業系統實作)。
-
切換到 中斷服務例程(ISR)
-
不同特權級的中斷切換對堆棧的影響
CS = 0, 核心态,CS = 3,使用者态
在核心态産生的中斷依然在核心态,但使用者态産生可能跳到核心态。
-
-
從 中斷服務例程(lSR) 傳回
- iret -- 彈出EFLAGS 和 SS/ESP (根據是否改變特權級)
- ret -- 彈出EIP,retf彈出CS和EIP (此為沒有特權級變化的傳回)
- 主要完成: 整個被打斷程式的一個狀态的保持和恢複(由硬體自動幹的)
-
系統調用
-
使用者程式通過 系統調用 通路 OS核心服務
-
如何實作
- 需要 指定中斷号
- 使用Trap, 也稱Software generator Interrupt
-