Linux 核心中斷體系 初探

2021-10-09 06:24:01 字數 1779 閱讀 8547

還是要先理解整個中斷的體系,首先要理解對中斷的含義

如果這是涉及到的軟體的除錯的話,沒有接觸過硬體的同學會對,gdb的除錯中的中斷有一定的認知

但是,這兩個中斷指的意思是不相同的,gdb的除錯中的中斷:

指的是程式執行到某個節點的的時候就跳出程式,這個 節點指的是提前設定好的中斷點,而這個linux 系統內部的中斷體系的

中斷,和這意思就不相同;

前者就很明顯是為了對程式除錯,簡單的做了乙個中斷處理,實際上對中斷的使用,往往是和硬體相關的,首先要實現中斷,必須要有中斷控制器,通過中斷控制器,先cpu發射乙個中斷的電訊號,然後,cpu會停止當前的任務,然後並轉入處理新的情況的程式

還有乙個問題就是,為什麼會衍生出中斷這個名詞,是為了解決什麼問題出現的,在計算機**現的任何乙個名詞,都是在長時間的發展中,為優化或解決某個問題而誕生的

在《linux核心設計與實現》這本書中,是這麼解釋的(簡短敘述,打字太累):

情景假設

首先如果不引入中斷的話,處理下面幾個問題:

第一點:處理器的速度跟外圍硬體裝置的速度,往往不在乙個數量級上,因此讓核心採取讓處理器向硬體發出乙個請求,然後專門等待回應(所以可想而知,是不是符合站著茅坑不拉屎的感覺,效率賊低),然後專門在去等待這個回應,但是會大大的降低機器的整體效能

第二點:如果採用輪詢的方法,核心會處於一種定期對裝置的狀態進行查詢(so,可想而知,核心得多累)

那有沒有更好的解決辦法呢,就是那種有事兒找 核心 ,沒事兒的時候 ,核心可以去處理其他的事務,就是最大化的合理利用核心 ,答案是肯定的,這時候中斷 ,就如大俠一般的出場了,提供了這樣的一種機制:

讓硬體在有需要的時候在向核心發出訊號,然後核心一看「兄弟找我有事兒呀,這是,那我肯定優先處理呀」,中斷也是一種核心 排程的一種方法

就是如此這般的中斷這個名詞出現了,中斷機制也被廣泛的應用

(其實不太想講,但是不做個筆記,寫個心得,真的記不住)

進入正題: … … …

前面說了 中斷是怎麼來的,什麼是中斷,接下來可以對中斷發起進攻了

首先:不同裝置對應的中斷不同 ,而每乙個中斷都通過乙個唯一的數字標誌,(這個中斷的數值 有乙個專業的名字叫作「中斷請求線」,簡稱:「irq」)【要區分,中斷的發起者是硬體,不是核心,但是實際實現中斷的方式有兩種方法:一是在核心中調配的中斷,另一種是通過軟體直接調配中斷控制器,那個更好呢,情況不同,使用的也是不同的】

其次 :

對異常和中斷的理解,有人會說什麼是異常,實際上異常也會被稱作同步中斷,就是在同乙個時鐘下的中斷,叫做同步中斷,記住一點,咱們如果是硬體開發的情況下,不會考慮時鐘同步,然後中斷,因為,實際的中斷隨時發生,所以異常和中斷很像,可以稱之為雙保胎,最大的不同就是乙個同步的,乙個非同步的,(對於時鐘不怎麼理解的同學,可以這樣理解 ,就是時鐘晶元發出時鐘訊號,讓核心更好的調配各個硬體和軟體程序,時鐘訊號,就是時鐘晶元,在打拍子,就是1大大,2大大那種,是有規律的,有個名詞是節拍器,和節拍率,和時鐘是息息先關的,等我看我完時鐘體系之後,消化消化,在寫一篇筆記)

最後中斷怎麼實現:

在linux中,就是由樸實無華的c程式的乙個中斷函式控制的,如果你的裝置是有linux核心控制的(就是那種可以再/dev下可以找到字元裝置的那種),核心提供乙個irq的中斷處理的api處理函式介面,另一種,舉個簡單例子是,fpga模擬的中斷控制器,可以直接用的寫暫存器的方式控制, 在c函式中進行呼叫,這種事最簡單的,最後一種方式就是軟體中斷的方式。

中斷還有乙個小用法就是,對硬體除錯排查錯誤

好了 ,寫完,上班 。。。 。。。

Linux1 0核心中斷體系的建立

head.s中設定了idt的指標,共256項,都指向ignore int函式 ignore int cldpushl eax pushl ecx pushl edx push dspush espush fs movl kernel ds eax mov ax,ds mov ax,es mov ax...

初探Linux核心中的記憶體管理

初探linux核心管理 核心本身不像使用者空間那樣奢侈的使用記憶體 核心是如何管理記憶體?什麼是記憶體管理單元 mmu 就是把虛擬位址轉換為實體地址的硬體 那什麼是虛擬位址呢?高階記憶體並不永久的對映到核心位址空間上,什麼是高階記憶體?核心用page資料結構來描述當前時刻在相關物理記憶體中存放的東西...

常用核心中斷符號解釋 linux

在列舉型別irqreturn定義在include linux irqreturn.h檔案中。unsigned long flags 中斷處理的屬性,與中斷管理有關的位掩碼選項,有一下幾組值 define irqf disabled 0x00000020 中斷禁止 define irqf sample...