天天看點

(六)中斷處理過程

中斷處理過程

  • 中斷源
  • 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

繼續閱讀