linux中斷系列之中斷簡介 一

2021-07-30 16:57:03 字數 2185 閱讀 8720

第六章 - 第一節:中斷簡介

核心主要職責

管理系統中存在的各種裝置,一般以一下兩種方式管理:

1、輪詢:核心一定週期訪問裝置,查詢裝置狀態並進行處理, 裝置請求不能及時處理,大量消耗cpu資源。

2、中斷:裝置在需要時通知核心,核心收到裝置的請求後在做出相應處理,  即產生一種電訊號,通過中斷控制器發給cpu,cpu通知核心,核心再進行處理。提高cpu利用率。

一、中斷分類

1、同步中斷:

由cpu本身產生,又稱內部中斷,通常也成為異常。同步是指中斷請求訊號與**指令之間同步執行,即一條指令執行完後,  而不是在執行期間發生中斷。比如:執行除法指令,除數為0。

異常包括故障、陷阱、中止

故障:指在引起異常的指令之前,將異常通知給系統,故障處理結束後,返回引起異常的指令並執行。如被0除

中止:產生中止時,正執行的程式不能被恢復執行,如硬體故障 

2、非同步中斷:有其他硬體裝置產生,又稱外部中斷,通常稱中斷。通常用於只是裝置的特定操作已經完成,與當前

執行指令無關。

中斷包括:可遮蔽中斷和不可遮蔽中斷

可遮蔽中斷:即intr,主要是外部i/o裝置

不可遮蔽中斷:即nmi,比如掉電,必須無條件響應

二、pic vs apic 

1、可程式設計中斷控制器(programmable interrupt controller,pic):只用於單處理器(up)平台

比如:8259a晶元,只能管理8個中斷源,若需要更多,採用級聯方式。傳統只採用兩個8259a級聯,支援15個中斷源  

中斷控制器與其他硬體裝置相連的各條線被稱為中斷線。數目有限,所以需要在驅動程式中申請,得到後才能使用。

中斷線按照一定的順序進行編號,這個編號即中斷號。 

中斷產生時,若未被遮蔽,傳送訊號,然後cpu應答

2、高階可程式設計中斷控制器(advanced programmable interrupt controller,apic):mp多處理器,目前大多數up和mp多用apic

由:本地高階中斷控制器(lapic),位於cpu,負責將中斷訊號傳遞給指定的處理器,mp中,每個cpu都具有乙個lapic。

i/o高階中斷控制器(i/oapic)負責收集來自io裝置的中斷訊號並分給lapic,系統中最多擁有8個ioapic, 典型的mp平台,有乙個ioapic和多個lapic,所有lapic鏈結到ioapic上。

三、中斷號 vs 中斷向量

無論是終端還是異常,cpu響應過程一致,即根據中斷所提供的中斷向量,從中斷描述表中獲取相應處理程式的位址,然後執行。

中斷號,當io裝置產生中斷訊號送給中斷控制器時,與之關聯的是乙個中斷號;當中斷控制器將該訊號傳給cpu,則是乙個中斷向量

因此中斷號與中斷向量存在一對一對映關係。

四、中斷描述符表

實模式下,從位址0開始的1kb大小記憶體構成乙個中斷向量表,表中每一項4個位元組,對應乙個中斷向量,儲存改中斷向量所對應的中斷處理程式的入口位址

保護模式下,中斷向量表,改名為中斷描述符表(idt),並允許在任意記憶體存放,cpu有專門存放idt的起始位址的暫存器,其中idt的每個表項被稱為門描述符

五、門1、386在保護模式下cpu有4種特權級(特權級0、特權級1、特權級2、特權級3),linux中只有兩個,特權級0和特權級3,分別表示核心態和使用者態

2、異常和中斷引起cpu執行狀態的改變,從使用者態轉為核心態。門的目的是在cpu希望進行狀態切換時提供一種審查機制,保護系統執行。

3、門有四種:任務門、中斷門、陷阱門、呼叫門。idt包含前三種門

任務門的本意用於任務切換,由於任務門遠遠不能表達任務所需表達的內容,所以linux不用任務門進行任務切換。實際上,核心只有雙重

故障異常(中斷向量8)使用到了任務門。

4、中斷門和陷阱門

16位段選擇符,從全域性段描述符(gdt)中獲得異常或中斷服務程式所處的段描述符,再加上32位段偏移量即可得到服務程式的位址。

詳情見:和

dpl指定了門的特權級,門的一邊是cpu特權級,一邊是目標**段的特權級。中斷到來後,進入服務程式前,此時只有cpl小於等於dpl才能進入門,

進入門後,再次判斷此時cpl只有大於或等於dpl時進入中斷服務程式。此時目標**段的dpl變成cpl,也就是說,通過門時,cpl只能保持或提公升cpu

的特權級,不能降低。

六、中斷服務程式

必須在裝置驅動程式中定義,並在使用request_irq函式申請irq線時,關聯到所申請到的irq線上。

Linux核心 之 中斷

中斷處理函式所作的第一件事情是什麼?答案是遮蔽中斷,所以要遮蔽中斷,是因為新的中斷會再次呼叫中斷處理函式,導致原來中斷處理現場的破壞。因為中斷,它是把原來的上下文都存起來,如果是多級中斷的話,它需要存多級的上下文,除非linux能存多級上下文,感覺是能多存的。如果只能存一級,那必然是要遮蔽中斷,不然...

Linux核心開發之中斷處理

一 概念 1 外設的處理速度一般慢於cpu。2 cpu不能一直等待外部事件。所以裝置必須有一種方法來通知cpu它的工作進度,這種方法就是中斷。二 中斷實現 在linux驅動程式中,為裝置實現乙個中斷包含兩個步驟 1 向核心註冊中斷 2 實現中斷處理函式 三 中斷處理子系統 1 根據中斷號找到正確的中...

2440之中斷管理

中斷處理 中斷是嵌入式裡最重要的乙個概念。一般乙個系統對於乙個裝置要麼採用中斷方式,要麼採用輪詢方式 中斷方式可以有效地減少處理器負荷 但是如果大量採用中斷則有可能降低處理速度 因為中斷處理破壞了處理器的流水機制。複習下微機原理中中斷處理過程和中斷機制。2440中支援fiq 快速中斷 和irq 普通...