我們首先要明確,爲什麼操作系統需要中斷、異常和系統調用:
- 在計算機運行時,內核是被信任的第三方
- 只有內核纔可以執行特權指令
- 方便應用程序
接下來我們先簡單瞭解一下三者的概念:
系統調用(system call)
應用程序主動向操作系統發出的服務請求
異常(exception)
非法指令或者其他原因導致當前指令執行失敗 (如:內存出錯)後的處理請求
中斷(hardware interrupt)
來自硬件設備的處理請求
下面我們先看一下這張圖(內核的進入和退出圖),方便對後面的概念進行理解
現在,正式開始從如下幾個方面對三者進行比較:
源頭
中斷:外設引起
異常:應用程序意想不到的行爲
系統調用:應用程序請求操作系統提供服務
響應方式
中斷:異步
異常:同步
系統調用:異步或同步
ps:關於同步和異步,我昨天的文章中有過介紹
處理機制
中斷:持續,對用戶應用程序是透明的
異常:殺死或者重新執行意想不到的應用程序指令
系統調用:等待和持續
接下來我們詳細介紹一些中斷的處理機制,處理機制包括硬件處理和軟件處理
硬件處理
依據內部或者外部事件設置中斷標誌,然後依據中斷向量調用相應的中斷服務例程。
軟件處理
首先進行現場保存(由編譯器完成),然後進行中斷服務處理(中斷服務例程完成),接着清除中斷標記(中斷服務例程),最後進行現場恢復(編譯器)。