關於部落格
  • 78252

    累積人氣

  • 2

    今日人氣

    0

    追蹤人氣

Interrupt, Exception, Trap and Interrupt Service Routines (ISR)

1. 中斷 (Interrupt)
中斷是指CPU 正執行正常工作的期間,由CPU 外界或內部產生的
一個例外的要求,要求CPU 暫時停下目前的工作,來做些必要的處理,
以便滿足突如其來的狀況。

中斷的種類大體來說,不外乎硬體中斷、軟體中斷這兩類。

硬體中斷的形成,通常是外界的硬體裝置利用由CPU 拉出的中斷要求信號線
來通知CPU 中斷的請求。

而軟體中斷,通常是CPU 自己引發的,比如
說執行了不該執行的指令、計算錯誤或者是執行某個用來產生軟體中斷
的指令。

對於處理中斷的一般原則是將目前執行CPU 狀態紀錄下來,然後
跳到中斷處理程式做進一歩處理;中斷處理完成後,回復中斷發生前的
狀態,然後繼續正常的程式執行。這些在進入及退出中斷所要做的工
作,根據不同CPU 的複雜度,會有不同的負擔(Overhead),通常有個術
語叫做:中斷潛伏期(Interrupt Latency),就是用來說明這類的處理延遲。

中斷發生後,作業系統必須處理中斷的步驟。
    * 因中斷關係,即刻將程式控制權交回作業系統。
    * 作業系統把main( )這個程式執行到一半的狀態儲存起來(包含暫存器,程式計數器…等)。
    * 作業系統判斷是發生那一種中斷,且呼叫適當的中斷服務常式(Interrupt Service Routine)執行。
    * 當中斷服務常式執行完畢後,作業系統將已儲存的狀態回復至暫存器,程式計數器…內。
    * 跳回main( )內,執行中斷時的下一個敘述。

2. interrupt 和 exception 的功能
Interrupt 和 exception 是兩種改變系統執行程式順序的方式,分別透過不同的元件觸發。當 interrupt 或 exception 被觸發時,系統會經由查表找到相對應的處理程式( ISR: Interrupt Service Routine,或稱 interrupt handler ),並中斷原本在執行的程式,讓 CPU 執行 ISR 的內容,之後才再轉回原來的程式中。這是多工( multi-tasking )環境中常常用到的技術。
在此, interrupt 指的是由硬體發出的中斷訊號,而 exception 指的是由軟體或系統所產生的中斷訊號。

interrupt 的使用時機
Linux 通常使用兩種方式與與外部元件溝通: polling 以及 interrupt ,前者是 kernel 會定期去偵測外部元件的狀況;而後者是當外部元件有狀況時會馬上通知 kernel 。對於某些發生頻率不高的外部元件(如鍵盤)而言, interrupt 常常是較不影響系統效能的機制。當 interrupt 發生時,系統會優先處理 interrupt ,然後才讓 CPU 切回原本執行的程式。

exception 的使用時機
Exception 依照發生的場合可以分為兩種類型: 程式執行錯誤或例外事件,前者是發生在程式執行錯誤時,如被除數為零、 overflow 等;後者則像是 system call 等作業系統所提供的服務。
System call 是作業系統提供給 user program 服務的介面,例如處理 I/O 或是使用額外的記憶體,它的目的是為了保護系統的穩定,防止 user program 惡意或者不小心對系統造成的傷害。 System call 實際的運作機制和 Interrupt 相同,它也是透過同樣的對照表來採取對應的處理。

3. 中斷服務程序(Interrupt Service Routines,ISR)

所謂中斷是指當CPU正在處理某件事情的時候,外部發生的某一事件(如一個電平的變化,一個脈衝沿的發生或定時器計數溢出等)請求CPU迅速去處理,于是CPU暫時中止當前的工作,轉去處理所發生的事件。中斷服務處理完該事件以後,再回到原來被中止的地方繼續原來的工作。

中斷是一種硬體機制,用于通知CPU有個異步事件發生了。中斷一旦被系統識別,CPU則保存部分(或全部)現場(context),即部分(或全部)寄存器的值,跳轉到專門的子程序,稱為中斷服務程序(ISR)。中斷服務程序做事件處理,處理完成後執行任務調度,程序回到就緒態優先級最高的任務開始運行(對于可剝奪型內核)。

4. Difference between sofeware interrupt / Exception / trap
Interrupts can be categorized into two groups which are asynchronous interrupts (aka interrupt, hardware interrupt) and synchronous interrupts (aka exception). The former may arrive anytime, typically IO interrupts, the latter may only arrive after the execution of an instruction, for example when the cpu try to devide a number by 0 or a page fault. So that's the difference between interrupts and exception.

A trap is a kind of exceptions, whose main purpose is for debugging (eg. notify the debugger that an instruction has been reached).

A software interrupt (aka Programmed Exceptions) occur at the request of the programmer. They are used to implement system calls. Software interrupt is a considered to be an exception (because they are synchronous). Note that as far as Linux is concerned, software interrupt are handled by the CPU as trap so you might see somewhere else that system calls are implemented by trap.
相簿設定
標籤設定
相簿狀態