Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 中斷與異常處理:IDT、門描述符與向量分配全解析

編輯:Linux 教學

中斷與異常是 CPU 響應非同步/同步事件的核心機制,Linux 核心通過中斷描述符表(IDT)統一管理 256 個向量,實現設備驅動、系統調用、錯誤處理等關鍵功能。

中斷與異常的本質區別

特性中斷(外部中斷)異常(內部中斷)
來源外部硬體設備(網卡、磁碟、鍵盤等)CPU 內部執行指令時檢測到的異常狀態
觸發時機非同步,隨時可能發生同步,由當前指令直接導致
可屏蔽性可屏蔽中斷(INTR)、不可屏蔽中斷(NMI)不可屏蔽,不經中斷控制器
典型用途I/O 完成通知、定時器、設備熱插拔缺頁、除零、調試斷點、系統調用(int 0x80/syscall)
分類—故障、陷阱、終止

中斷向量與 IDT 分配策略

x86 架構支援 256 個中斷向量(0~255),每個向量佔用 IDT 中一個 8 字節的門描述符。Linux 分配如下:

  • 0~31:CPU 預定義異常與 NMI(如 #DE 除零、#PF 缺頁、#GP 通用保護、#MC 機器檢查)。
  • 32~47:可屏蔽外部中斷(IRQ 0~15,經 APIC 重映射),對應鍵盤、時鐘、網卡、磁碟等設備。
  • 48~255:軟中斷與用戶定義。Linux 僅使用 0x80 (128) 實現舊版 int 0x80 系統調用入口;其餘保留或供 KVM、Xen 等虛擬化用途。

保護模式下的 IDT 與門描述符

實模式使用 4 字節的中斷向量表(IVT),保護模式擴展為 8 字節的 中斷描述符表(IDT),每項為 門描述符,包含段選擇子、偏移量、DPL(特權級)、類型碼等字段。門描述符三大類型:

  1. 中斷門(類型碼 110B):進入處理程序時自動清除 IF 位(屏蔽可屏蔽中斷),用於大多數硬體中斷 ISR。
  2. 陷阱門(類型碼 111B):不清除 IF,允許嵌套中斷,用於系統調用、調試斷點。
  3. 系統門(Linux 特有):DPL=3 的陷阱門,允許用戶態通過 int 0x80 進入核心,現代系統改用 syscall/sysret 或 sysenter/sysexit。

中斷處理流程

  1. 硬體發出信號 → APIC → CPU 檢查 IF、當前特權級。
  2. CPU 依向量查 IDT,取得門描述符,檢查 DPL、P 位。
  3. 特權級轉換時切換棧(TSS 中的 SS0:ESP0),保存 EFLAGS、CS、EIP、錯誤碼(如有)。
  4. 跳轉至 ISR 入口(entry_INTERRUPT),核心通用入口保存寄存器,調用 do_IRQ() → 具體驅動 handler。
  5. 執行 iret 返回,恢復被打斷上下文。

現代核心採用 線程化中斷(IRQF_ONESHOT + request_threaded_irq),將耗時處理移至內核線程,降低中斷上下文延遲,提升實時性。

Copyright © Windows教程網 All Rights Reserved