2011年2月26日 星期六

[ os ] Interrupt(中斷)處理機制

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [ os ] Interrupt(中斷)處理機制
 時間  2011/02/26 Sat 15:18:44
───────────────────────────────────────

參考網址:
http://tw.myblog.yahoo.com/chimei-015/article?mid=189&next=178&l=f&fid=16

□ Interrupt(中斷)處理機制
為了快速處理常見的中斷,OS 給予一個表格,儲存中斷服務函式的進入點,如果有中斷
發生,可以快速查表,找到要服務的函式,此表格稱之為中斷處理(Interrupt Handler)
,通常都置於記憶體開始的地方。每個中斷事件會提供一小段程式去服務此中斷,稱之為
中斷服務常式(Interrupt Service Routine; ISR)。而中斷向量(Interrupt vector)
是一個由00H 到FFH 的數字,用來判斷中斷的種類。

● Interrupt 的種類
  I. External Interrupt(外部中斷): CPU 外的週邊元件所引起的。
                                   (I/O Complete Interrupt, I/O Device error)
  II. Internal Interrupt(內部中斷):不合法的用法所引起的。
                                    (Debug、Divide-by-zero、overflow)
  III. Software Interrupt(軟體中斷):使用者程式在執行時,若需要OS 提供服務時
                                       ,會藉由System Call 來呼叫OS 執行對應的
                                       service routine,完成服務請求後,再將結
                                       果傳回給使用者程式。

● Interrupt 的處理流程
Setps
  1.  暫停目前process 之執行。
  2.  保存此process 當時執行狀況。
  3.  OS 會根據Interrupt ID 查尋Interrupt vector。
  4.  取得ISR(Interrupt Service Routine)的起始位址。
  5.  ISR 執行。
  6.  ISR 執行完成,回到原先中斷前的執行。



□ I/O 結構
● Synchronous I/O(同步式I/O)
        當I/O 啟動時,直到I/O 完成,控制權才交回給使用者程式。

        優點:一個時間內最多只有一個I/O 要求,如此當中斷發生時,
              OS 就知道是那個Device 引發的中斷。
● Asynchronous I/O(非同步式I/O)
        當I/O 啟動後,之即將控制權交回給使用者程式,而不必等待I/O Complete,
        如此,在同一段時間內,可以有許多I/O 請求同時發生。

        優點:允許並行的I/O 處理。



□ I/O 運作處理方式

● Polling I/O(詢問式I/O):又稱為Busy-waiting I/O、Program I/O。
Steps
  1.  發出I/O 要求給CPU(OS)
  2.  CPU 設定I/O commands 給I/O Device controller。
  3.  I/O Device 運作執行。
  4.  PA 等待 I/O 完成。
  5.  PB 取得CPU 執行,但CPU 實際上沒有專屬於PB 執行。
  6.  CPU 仍不斷地去詢問I/O Device 其交付的I/O 工作完成與否。
缺點
    CPU 表面是Busy,但實際上是在等待I/O 完成,花費大量時間在I/O
    運作的監督,真正用於process 的執行時間(execution time)不多。

● Interrupt I/O(中斷式I/O)
Steps
  1.  發出I/O 要求給CPU(OS)。
  2.  CPU 設定I/O commands 給I/O Device controller。
  3.  I/O Device 運作執行。
  4.  PA 等待 I/O 完成。
  5.  PB 取得CPU 執行。
  6.  當I/O 運作完成,則I/O 會發出一個「I/O Complete Interrupt」(I/O完成中斷
      )通知OS。
  7.  OS 暫停目前process 的執行。
  8.  OS根據Interrupt ID 去查詢Interrupt vector,取出對應的ISR(Interrupt
      Service Routine)的起始位址。
  9.  CPU 執行ISR。
  10. ISR 執行完畢,OS 通知PA 其I/O 要求完成,將PA 的狀態改成Ready。
  11. 由CPU 排班挑選process 執行。

--

     身高不是距離
                   技巧不是問題
                                 只要有"心"
                                             人人都可 定‧三‧米


--
▅◣ Origin:  謠 言 報  bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 sclab.csie.fju.edu.tw 發表

沒有留言:

張貼留言