中斷和異常小結

2021-09-30 07:32:31 字數 2568 閱讀 6184

處理器在執行當前任務時出現突然事件導致執行控制從當前任務轉移到沖斷處理程式。處理器相應中斷或異常處理程式採取的行動稱為中斷

/異常處理。

中斷源:

1. 外部中斷:經過

cpu intr

引腳或nmi

引腳接收。當

intr

接收外部中斷,

cpu從系統匯流排上讀取外部中斷控制器提供的中斷向量號。

nmi

接收非遮蔽中斷,使用固定中斷向量號2 。

intr

接收的中斷時可遮蔽的,通過設定

eflags的if

位來控制是否遮蔽,

2. 軟體中斷:

int

指令產生中斷,

0-255

都可以作為

int指令中斷號。

if 標誌不能遮蔽軟中斷。

異常源:

1. 處理器檢測到程式錯誤,比如被0

除。2.

指令into

、int 3

、bound

可以產生軟異常。

3. int

指令也可以模擬異常,但不會產生錯誤碼,所以對於要處理錯誤碼的異常處理程式會吧

eip彈出

,需注意。

異常分類:

1. 故障(

fault

):一種可糾正異常,異常處理程式執行完後會再次執行產生異常的指令。

2. 陷阱(

trap

):異常處理程式執行完後執行產生異常的下一條指令。如

jmp

時產生trap

,返回指標指向

jmp指令的目標位址。

3. 中止(

abort

):不支援重新執行程式。通常用來收集異常產生時處理器資訊,並關閉系統。

開啟、禁止中斷:

1. 設定

eflags的if

標誌為0

來禁止intr

引腳的中斷,用

sti和

cli來設定和清除

if位。

2. popf

、任務切換、

iret

都會更行

eflags

中斷描描述符表(

idt):

idt用於將中斷向量與中斷處理程式聯絡起來,與

gdt和

ldt類似也是由

8位元組長描述符組成陣列。與

gdt不同的是表中第一項可以包含描述符。中斷向量號

*8 = idt

表索引值。

idtidtr

儲存idt

表線性位址(

32位)

+限長(

16位)。為保證處理器訪問效率,

idt基位址應對齊

8位元組邊界。

lidt

指令用於載入

idtr

內容,該指令只能執行在當前特權級為

0**中。

sidt

指令用於儲存

idtr

內容,該指令能執行在任何特權級上。

idt描述符:

1. 中斷門

:type= 01110 入口

(31--16)

p(15)| dpl(14--13)|type(12--8)|other

段選擇符

入口(15--0)

2. 陷阱門:

type= 01111

入口(31--16)

p(15)|dpl(14--13)|type(12--8)|other

段選擇符 入口

(15--0)

3. 任務門

:type= 00101

中斷門和陷阱門的主要區別是中斷門處理中斷時會清除

if位,從而禁止可遮蔽中斷。

異常和中斷處理:

與用call

指令呼叫門類似。

1. 處理過程將在高特權級執行時:a

)從當前任務

tss段中選擇中斷異常處理過程使用的新棧ss和

sp,然後處理器將當前ss和

sp入棧到新棧。

b) eflags,cs

,eip

壓入新棧。

c) 如有錯誤碼,則把錯誤碼壓入新棧

2. 處理過程在相同特權級執行時:a

)eflags, cs, eip

壓入當前棧。

b) 如有錯誤碼,則把錯誤碼壓入當前棧。

為從處理過程返回,必須使用

iret

指令。該指令會把儲存的

eflags

恢復到eflags

中,如果呼叫過程中有堆疊切換,

iret

也會把堆疊切回。

中斷保護:

利用軟體產生中斷時

cpl

必須<=

門的dpl

,防止使用者程式訪問高特權級程式。硬體產生的中斷則不做此檢查。

call

指令直接把控制轉移到另乙個特權級時:

如果是訪問非一致**,比如

cpl=dpl

,如果是訪問一致**,比如

cpl》

=dpl

中斷和異常

中斷和異常 中斷訊號的處理方式 分緊急部分和不緊急部分 中斷處理 必須能夠重入,以便能夠中斷巢狀 中斷和異常的產生 乙個irq interrupt request 代表中斷控制器上的一根中斷線,和乙個中斷向量 單cpu 可程式設計中斷控制器 pic 多cpu 改進的可程式設計中斷控制器 apic 乙...

中斷和異常

中斷通常定義為乙個事件,該事件改變處理器執行的指令順序。中斷通常分為同步中斷與非同步中斷。異常是同步的,i o中斷是非同步的。中斷可以分為 i o裝置發出的中斷請求 irq 都可以被遮蔽,乙個中斷被遮蔽以後,控制單元就忽略他。只有硬體故障等幾個危急事件才是非遮蔽中斷。異常可以分為 可以糾正的異常,例...

中斷和異常

1 中斷機制的誕生 早期計算機,各程式只能序列執行,系統資源利用率低,為了解決這個問題,從而誕生了作業系統 作為計算機的管理者 引入中斷機制,實現了多道程式併發執行。本質 發生中斷就意味著需要作業系統介入,開展管理工作。2 中斷的概念和作用 1 當中斷發生時,cpu立即進入核心態。2 當中斷發生後,...