中斷分為外部硬體中斷、內部中斷和軟中斷。
中斷也是作業系統的一種解決方案,那麼為什麼需要引入中斷機制呢。
為了分享計算能力,處理器應當為多使用者多工提供硬體一級的支援。在單處理系統中,當乙個任務的執行時,還有其他多個任務等待獲取處理器來執行。當乙個任務等待輸入輸出時,應該把處理器轉給另乙個任務執行。但問題是,正在執行的程式進入等待輸入輸出時他並不知道還有其他任務在等待處理器。這種情況下,即產生一種有效的解決方案,引入中斷機制。即中斷讓正在執行的任務主動放棄處理器給其他任務執行。典型的作業系統每ms或其他週期時間即產生乙個時鐘中斷,來完成執行緒
/程序切換。
外部硬體中斷
外部硬體中斷是由處理器以外的裝置引起的,分為不可遮蔽中斷(nmi)和可遮蔽中斷(
intr
),這兩種中斷通過兩根引腳和處理相連。
nmi一般為嚴重性中斷,譬如電源電量缺失時差生中斷。
在可程式設計中斷控制器
8259上, 對
ir0--7
進行編號,代表中斷號。每個
ir0-7
接上不同的外圍裝置,
ir0表示優先順序最高的中斷,
ir7表示優先順序最低的中斷。當多個外圍裝置同時發生中斷時,
8259
根據某種策略優先選擇乙個中斷送給處理器。處理器根據中斷號從中斷向量表中獲取相對應的中斷程式。那麼,外圍裝置對應的中斷處理程式是如何來的呢,處理器如何知道該怎麼處理對應裝置的中斷呢。原來在
bios
初始化階段,即初始化外圍裝置的中斷向量表。每個外圍裝置都有自己的
rom,該儲存空間中存放自己裝置的初始化**(包括初始化安裝本裝置對應的中斷處理),這些外圍裝置的
rom在上電時被對映到記憶體空間。
bios在初始化時,直接訪問記憶體中的對映記憶體位址(即訪問外圍裝置的
rom)進行外圍裝置初始化(本質上,只是初始化所有**都由外圍器件自己提供)。
當處理器接收到乙個中斷時,判斷
flag
暫存器中的
if標誌位是否為1,為
1即響應和處理中斷。為
0則忽略該中斷。
cli(
clear interrupt flag
)關閉flag
暫存器中的
if標誌位(0),
sti(
set interrupt flag
)設定flag
暫存器中的
if標誌位(
1)。當處理器開始處理中斷時將當前上下文
push
入棧,處理中斷後
iret
恢復上下文。當處理器正在處理中斷時,
8259
又產生乙個優先順序更高的中斷,處理器中斷當前處理的中斷而去處理剛發生的優先順序更高的中斷,即為中斷巢狀。
在處理器進入處理中斷時,呼叫的是外圍裝置提供中斷處理程式,在該處理程式中還會訪問外圍裝置,譬如獲取鍵盤資料、鬧鐘中斷獲取時鐘晶元上更新的時間日期等等。
3.內部中斷
處理器發生內部錯誤引發的中斷,譬如div除法錯誤、記憶體訪問錯誤等。和不涉及
flag
暫存器,以及和外圍裝置匯流排沒有關係,中斷號是固定的,隨時切入處理。
4.軟中斷
也是由處理器自己產生的,通過int指令。譬如
gdb單步跟蹤,使用
int3
指令。另外,譬如系統呼叫
.假如需要讀取磁碟中的乙個檔案,我們可以自己定義中斷號和中斷處理函式,不用使用
int中斷,直接使用
call/jump
指令呼叫自己寫的處理函式,大不了每次載入重定向以下函式位址。但問題是,作業系統提供了這樣的乙個統一呼叫函式。我們如果使用
call/jump
,每次載入並不知道作業系統提供的函式的入口位址在**,無法載入後進行重定向函式位址。這種情況下,提出了
int軟體中斷的解決方案。即約定某個中斷號即進行系統呼叫。作業系統在載入完以後,把系統呼叫函式位址主動寫入到系統呼叫軟中斷向量表中。這樣使用者程式無需知道系統呼叫函式的位址,而是直接
int軟中斷號進入系統呼叫。
譬如linux通過
int 0x80
進入軟中斷,然後通過系統呼叫號找
system call table
中對應的系統高呼叫。
作業系統學習筆記(三) 中斷 異常與系統呼叫
這一節講解中斷 異常與系統呼叫,這三者也可以總稱為中斷處理機制。首先我們需要知道這三個機制的背景 1.計算機執行過程中,核心是被完全信任的第三方 2.只有核心可以執行特權指令 3.核心需要方便地為應用程式提供服務。那麼我們為什麼需要這三個機制呢?也就是說這三個機制實現了什麼功能呢?中斷是為了處理外設...
作業系統 認識認識保護模式(三)中斷
理解中斷與異常的機制 除錯8259a的程式設計基本例程 除錯時鐘中斷例程 建立idt,實現乙個自定義的中斷,功能可自定義,如特定鍵盤組合觸發某個動作 電子鐘 自己遊走的字元顯示 蜂鳴器等 了解iopl的作用 理解中斷與異常的機制 除錯8259a的程式設計基本例程 除錯時鐘中斷例程 建立idt,實現乙...
作業系統 學習筆記 作業系統概述
桌面常見四大作業系統 基本功能 應用程式執行需要作業系統提供哪些支援?作業系統的功能 記憶體管理 裝置管理 檔案管理 作業系統的定義 各種各樣的應用系統 除錯程式 裝入程式 編輯程式 編譯程式 匯程式設計序 裝配程式 作業系統 機器語言 微程式裸機 手工操作 沒有作業系統 單道批處理系統 多道批處理...