作業系統學習筆記(三) 中斷 異常與系統呼叫

2021-09-22 10:13:29 字數 1653 閱讀 6292

這一節講解中斷、異常與系統呼叫,這三者也可以總稱為中斷處理機制。首先我們需要知道這三個機制的背景:1. 計算機執行過程中,核心是被完全信任的第三方;2. 只有核心可以執行特權指令;3. 核心需要方便地為應用程式提供服務。

那麼我們為什麼需要這三個機制呢?也就是說這三個機制實現了什麼功能呢?中斷是為了處理外設io的,比如當我有乙個新的鍵盤和滑鼠接入了計算機,或者我們在鍵盤上敲了鍵盤,此時即使計算機正在進行其他任務也需要對此作出快速響應,這就是中斷要做的事情;當我程式執行**現了異常,比如某個在分母上的變數執行過程中變為了0,也就是出現了除以0這種操作,這是不合法的,又比如說程式訪問一塊記憶體區,而這個記憶體區是不允許這個程式訪問的,在執行到這一行程式之前我們無法**這一異常,因此我們需要對這種異常有一種處理機制;系統呼叫則是為上層的應用程式提供了各種介面,方便應用程式使用系統提供的服務,而又規避安全風險問題,即應用程式只使用提供給他的服務,而不會胡亂修改核心。

中斷、異常與系統呼叫的結構圖如下圖:當有外部裝置接入或者有輸入,則告知核心(插入中斷向量表),核心通過裝置驅動與外部裝置互動;當應用程式執行過程**現異常,也插入中斷向量表,核心要麼將異常解決掉,要麼終止程式,並將程式占用的資源返還;應用程式可以直接或者通過函式庫間接地使用系統呼叫介面,插入中斷向量表,中斷向量表通過查詢系統呼叫表提供系統呼叫實現,並將結果返還。因此可以說核心與外界打交道的介面主要就是中斷、異常與系統呼叫。

從上圖也可以看到中斷、異常與系統呼叫的區別如下圖:系統呼叫是應用程式主動向作業系統發出的服務請求;異常是非法指令或其他原因導致當前指令執行失敗(如記憶體出錯)後的處理請求;中斷則是來自硬體裝置的處理請求。

下圖是三者比較:

這三者也即中斷處理機制具體實現過程是怎樣的呢?實現過程可以分為硬體和軟體兩部分。首先是硬體部分:在cpu初始化過程中會設定中斷使能標誌,即在cpu做好準備工作之後才會開始接受中斷請求,在此之前是不會有反應的;此外需要根據內部或外部事件設定中斷標誌,記錄出現了一次中斷;依據中斷向量表中的內容知道中斷源是什麼,並呼叫相應中斷服務例程。以上為硬體部分工作內容,接下來的內容是軟體部分:1. 現場儲存(編譯器);2. 中斷服務處理(服務例程);3. 清除中斷標記(服務例程);4. 現場恢復(編譯器)。

那麼如果乙個中斷出現的時候又出現新的中斷會怎樣呢(此處中斷指中斷處理機制即包含中斷、異常、系統呼叫三者)?其中,硬體終端服務例程可以被打斷,比如不同硬體中斷源同時出現,此時可以按照優先順序依次處理,而出現了非常重要的中斷比如電源出現問題時,則可以臨時禁止接收中斷請求,而被接收了的中斷請求會保持到cpu對中斷做出響應。異常服務例程也是可以被打斷的,比如異常執行中可能出現硬體中斷,例如處理異常時進行磁碟io,此時磁碟出現了硬體中斷,則會打盹異常服務例程去進行硬體中斷處理。異常服務例程也是可以巢狀的,比如處理異常時又出現了缺頁異常,此時則會產生巢狀。

作業系統學習(三) 中斷概述

中斷分為外部硬體中斷 內部中斷和軟中斷。中斷也是作業系統的一種解決方案,那麼為什麼需要引入中斷機制呢。為了分享計算能力,處理器應當為多使用者多工提供硬體一級的支援。在單處理系統中,當乙個任務的執行時,還有其他多個任務等待獲取處理器來執行。當乙個任務等待輸入輸出時,應該把處理器轉給另乙個任務執行。但問...

作業系統 認識認識保護模式(三)中斷

理解中斷與異常的機制 除錯8259a的程式設計基本例程 除錯時鐘中斷例程 建立idt,實現乙個自定義的中斷,功能可自定義,如特定鍵盤組合觸發某個動作 電子鐘 自己遊走的字元顯示 蜂鳴器等 了解iopl的作用 理解中斷與異常的機制 除錯8259a的程式設計基本例程 除錯時鐘中斷例程 建立idt,實現乙...

作業系統筆記(四)中斷

ctime 2020 04 30 13 33 34 0900 1588221214 標籤 空格分隔 技術 作業系統 8086 80386 的中斷向量表並不像arm的中斷向量表放在位址0處,而是位置可變。當建好中斷向量表之後,通過lidt指令,將中斷向量表的位址給idtr暫存器,這樣當cpu發生中斷時...