中斷結構與中斷處理

中斷結構
電子計算機的神經系統
發生事件時,則使用中斷信號通知cpu,要求處理
會增加CPU的instruction cycle在設計上的複雜度
可避免輪流詢問,而提昇系統的效能
ps:輪流詢問:定期地對所有硬體元件與週邊設備進行狀態的檢查,效能較差,早期電算機使用

中斷信號
由硬體元件或是週邊設備發出,傳送給中央處理器的一種控制信號
信號隨時可到達,但cpu會等一個指令完整執行結束後才處理
會改變cpu執行指令時的正常流程
主要概念是event-driven(事件驅動)
應用有:
 輸入/輸出運作的協調
 即時系統的設計
 作業系統的設計
 物件導向程式的設計
ps:event-driven是指有事件發生才需處理,若無事件發生則不需浪費時間

中斷信號依執行程式可分為:
 asynchronous interrupt(非同步中斷):也稱外部中斷
 與正在執行的程式無關的信號,cpu不知何時會收到中斷信號
   ex:輸入輸出運作結束所產的中斷信號
 synchronous interrupt(同步中斷):也稱內部中斷
 執行程式所產生的信號
   ex:執行不合法的指令所產生的中斷信號

依IBM360/370的中斷信號可分為:
  SVC(supervisor call interrupt,系統呼叫中斷):屬同步中斷
    可讓cpu切換到特權模式,並執行特權指令,ex:程式執行系統system call(呼叫指令)
  program check interrupt(程式檢查中斷):也稱traps,屬同步中斷
    程式執行中因異常而產生的exceptions(異常信號),可讓cpu暫時停止程式的執行 ex:溢位,除數為零,不合法運算
  i/o interrupt(輸入/輸出中斷):屬非同步中斷
    輸入輸出過程順利結束或發生異常所產生的中斷信號
  machine check interrupt(機器檢查中斷):屬非同步中斷
    硬體元件本身功能異常,所產的中斷信號  
  external interrupt(外部中斷):屬非同步中斷
    電算機系統外部因不同事件的發生,所產生的中斷信號 ex:一個reset信號
ps:多種中斷類型可分配不同等級的優先權給各中斷類型,當多個中斷信號同時發生時,可根據優先權高低依序處理

依軟硬體中斷分:
software interrupt(軟體中斷):目前正執行的程式執行system call或指令有exceptions引起
 處理方式:忽視不處理或直接結束該軟體執行
hardware interrupt(硬體中斷):由硬體元件透過中斷要求控制線到cpu,通知硬體中斷發生
 處理方式:根據優先權決定是否馬上處理或稍後處理

ps:cpu執行模式分為:
user mode(一般模式):應用程式的執行環境,可執行一般指令
supervisor/system mode(特權模式):作業系統的執行環境,可執行一般指令和特權指令
ps:機器指令分為一般指令與特權指令

ps:system call(系統呼叫)
在user mode下利用system call透過作業系統協助可執行特權指令
ex:要求主記憶單元的空間配置,要求存取輔助記憶體的檔案資料
運作過程
1會將原先執行的應用程式的執行狀態儲存
2根據system call種類決定需要的系統服務副程式
3結束後在恢復原應用程式的執行狀態,將控制交回給應用程式繼續往下執行

………………………………………

處理中斷信號步驟
判斷部份
CPU將正在執行的指令正常地結束,檢查中斷信號是否發生
if(發生中斷信號){
  if(信號沒被禁止){
     if(信號優先權>程式優先權){開始信號處理}else{繼續執行程式以後在處理此信號}
  }
}
信號處理部份
1儲存目前程式狀態
 cpu暫停目前程式的執行,
 並從一般模式切換到特權模式,再把控制權交給作業系統,
 作業系統把程式執行狀態儲存到堆疊,以便處理完信號後可恢復原先執行狀態
 ps:執行狀態主要包括PC(program counter程式計數器)和status register(狀態暫存器)
2ISR處理中斷信號
  作業系統依中斷信號種類,將對應的ISR的起始位址放入program counter中,呼叫對應的ISR
  cpu開始執行一個ISR進行中斷信號的處理
3回復之前程式狀態
  中斷服務常式執行結束後,控制權還給作業系統
  作業系統再由堆疊取出PC和status register的內容,恢復原先程式的執行狀態
  cpu暫停作業系統的執行,並從特權模式切換到一般模式
  控制權交還給原先的程式,cpu恢復先前程式的執行
ps:program check interrupt異常信號會結束目前程式的執行,處理方式和此不同

ISR(interrupt service routine中斷服務常式)
每一種中斷信號需要一個對應的ISR加以處理
作業系統提供的系統程式,只可在特權模式下執行
使用時需context switching將一般模式切換成特權模式
與subroutine(副程式)類似
ps:subroutine和procedure屬應用程式,須在一般模式下執行

context switching(環境切換):兩個程式間執行狀態的交換
說明:處理中斷信號時,作業系統把目前程式狀態儲存起來再載入對應的中斷服務常式的執行狀態
因次數頻繁,所以對整體系統的效能影響極大
使用PSW(program status word,程式狀態字組)的暫存器儲存目前程式的狀態

…………………………………..

中斷的優先權
需要priority arbiter(優先權仲裁器),以及interrupt request(中斷要求線)與interrupt grant(中斷同意線)
interrupt request:當有事件發生時用來傳送中斷信號給priority arbiter
interrupt grant:priority arbiter決定好某硬體後,用來傳送中斷同意信號給該硬體
運作過程
1有事件發生時會透過interrupt request向priority arbiter發出中斷信號,並進入等待狀態
2priority arbiter收到一個或多個中斷信號後,使用priority arbiter電路決定最高優先權的硬體
3priority arbiter傳送中斷同意信號給最高優先權的硬體,並清除interrupt request上的中斷信號

priority arbiter電路的製作有
daisy chain(雛菊鏈):具static priority
  中斷結構只有一組interrupt request與interupt grant和周邊及硬體相連成鏈結串列
  中斷同意信號會依序逐一傳下去,而越接近cpu的設備優先權越高
  優點是電路簡單,缺點是較低優先權設備可能要等很久甚至無限延遲
rotatin daisy chain(旋轉式雛菊鏈):具dynamic priority
  把daisy chain的鏈結串列改為circular list(環狀串列)
  中斷同意信號會依設備輪流送出,優先權循環變動,可避免無限延遲
  ex:4個設備,interrupt request分別是0req,1req,2req,3req,若上次1req被接受則目前2req優先權最高
輪詢法:具dynmaic priority
  中斷結構只有一條interrupt request和多組interrupt grant
  依各硬體被priority arbiter詢問的順序,來決定硬體的優先權
  優點是可用程式規劃的方式提供dynmaic priority,缺點是逐一詢問各硬體效率差
獨立的要求線與同意線
  中斷結構是每個會發出中斷信號的硬體有一組interrupt request和interrupt grant
  若製成static priority則各設備都有固定的優先權
  若製成dynamic priority則需要改成像rotatin daisy chain
  優點是效率好,缺點是電路複雜成本高
折衷法
  中斷結構是2組以上的interrupt request和interrupt grant,每一組在和周邊及硬體相連成鏈結串列
  由daisy chain和獨立的要求線與同意線兩種作法的混合
  優點是效能比daisy chain好,成本比獨立的要求線與同意線低,且較具彈性
  大部份電算機採用此方式

static priority(靜態優先權):讓各interrupt require有固定的優先權,電路製作易,可能產生無限延遲問題
dynamic priority(動態優先權):讓各interrupt require輪流最高的優先權,電路製作難,可避免無限延遲問題

…………………………………..

中斷信號辦認
ps:若用獨立的要求線與同意線製作priority arbiter,則不用辦認
一般設計的辦認方法有:
輪詢法
  1硬體發出中斷信號時須設定中斷要求位元,
  2cpu執行isr輪流測試每個硬體的中斷要求位元以辦認何硬體發出
  3cpu辨認完後給該硬體中斷同意信號
  4該硬體把中斷同意信號移走並清除中斷要求位元
  優點是電路簡單容易製作,缺點是需逐一測試效率差
vectored interrupt(向量中斷法)
  1硬體收到中斷同意信號後在送出interrupt vector(中斷向量)給cpu
  2cpu到interrupt vector table(中斷向量表)被指定的欄位取出isr起始位址並執行指定isr
  是這個中斷信號對應的isr的起始位址或是間接位置
  此方法需加入資料線傳遞interrupt vector
  優點是效率佳
折衷法
  給各中斷要求線一個辨認碼,當cpu收到辨認碼後在用輪詢法辨認中斷信號是何硬體發出
  用在priority arbiter電路製作為折衷法下

 …………………………………..

interrupt disable(中斷的禁止)
暫時忽略interrupt的產生的功能,讓具不可切割性質的工作不被中斷,避免造成錯誤的結果
ps:不可切割性質指的是程式的執行順序須固定,一但改變可能會造成錯誤
enable interrupt(中斷接受)
讓cpu恢復接受中斷信號