原**:
中斷有兩種,一種是cpu本身在執行程式的過程中產生的,一種是由cpu外部產生的。
外部中斷,就是通常所講的「中斷」(interrupt)。對於執行程式來說,這種「中
斷」的發生完全是非同步的,因為不知道什麼時候會發生。cpu對其的響應也完全是被動的,
可以通過「關中斷」指令關閉對其的響應。
由軟體產生的中斷一般是由專設的指令,如x86中的「int n」在程式中有意產生的,
是主動的,同步的。只要cpu執行一條int指令,在開始執行下一條指令之前一定會進入中
斷服務程式。這種主動的中斷稱為「陷阱」(trap)。
linux 核心需要對連線到計算機上的所有硬體裝置進行管理,毫無疑問這是它的份內事。如果要管理這些裝置,首先得和它們互相通訊才行,一般有兩種方案可實現這種功能:
1.輪詢(polling) 讓核心定期對裝置的狀態進行查詢,然後做出相應的處理;
2.中斷(interrupt) 讓硬體在需要的時候向核心發出訊號(變核心主動為硬體主動)。
第一種方案會讓核心做不少的無用功,因為輪詢總會週期性的重複執行,大量地耗用 cpu 時間,因此效率及其低下,所以一般都是採用第二種方案。
什麼是中斷?
從物理學的角度看,中斷是一種電訊號,由硬體裝置產生,並直接送入中斷控制器(如 8259a)的輸入引腳上,然後再由中斷控制器向處理器傳送相應的訊號。處理器一經檢測到該訊號,便中斷自己當前正在處理的工作,轉而去處理中斷。此後,處理器會通知 os 已經產生中斷。這樣,os 就可以對這個中斷進行適當的處理。
不同的裝置對應的中斷不同,而每個中斷都通過乙個唯一的數字標識,這些值通常被稱為中斷請求線(irq)。
中斷可分為同步(synchronous)中斷和非同步(asynchronous)中斷:
1. 同步中斷是當指令執行時由 cpu 控制單元產生,之所以稱為同步,是因為只有在一條指令執行完畢後 cpu 才會發出中斷,而不是發生在**指令執行期間,比如系統呼叫。
2. 非同步中斷是指由其他硬體裝置依照 cpu 時鐘訊號隨機產生,即意味著中斷能夠在指令之間發生,例如鍵盤中斷。
什麼是異常?
同步中斷又稱為異常(exception),非同步中斷則被稱為中斷(interrupt)。我們通常講的中斷指的都是非同步中斷。
1.中斷可分為可遮蔽中斷(maskable interrupt)和非遮蔽中斷(nomaskable interrupt)。
2.異常可分為故障(fault)、陷阱(trap)、終止(abort)三類。
這些類別之間的異同點請參看 表 1。
表 1:中斷類別及其行為
類別 原因 非同步/同步 返回行為
中斷 來自i/o裝置的訊號 非同步 總是返回到下一條指令
陷阱 有意的異常 同步 總是返回到下一條指令
故障 潛在可恢復的錯誤 同步 返回到當前指令
終止 不可恢復的錯誤 同步 不會返回
什麼是中斷處理程式?
在響應乙個特定中斷的時候,核心會執行乙個函式,該函式叫做中斷處理程式或中斷服務例程。產生中斷的每個裝置都有乙個相應的中斷處理程式,如果乙個裝置可以產生多種不同的中斷,那麼該裝置就可以對應多個中斷處理程式。乙個裝置的中斷處理程式是它裝置驅動程式的一部分。
什麼是中斷上半部和下半部?
中斷處理一般分為兩個部分,中斷處理程式是上半部:接收到乙個中斷就立即執行,但只做有嚴格時限的工作,這些工作都是在所有中斷被禁止的情況下完成的。能夠被允許稍後完成的工作被推遲到下半部去。通常情況下,下半部會在中斷處理程式返回時立即執行。
軟中斷和硬中斷的區別
目錄硬中斷 1.由與系統相連的外設 比如網絡卡 硬碟 自動產生的。主要是用來通知作業系統系統外設狀態的變化。比如當網絡卡收到資料報 的時候,就會發出乙個中斷。我們通常所說的中斷指的是硬中斷 hardirq 2.硬中斷是外部裝置對cpu的中斷 3.硬中斷是由硬體產生的,比如,像磁碟,網絡卡,鍵盤,時鐘...
軟中斷 硬中斷 區別
from 軟中斷一般是指由指令int引起的 偽 中斷動作 給cpu製造乙個中斷的假象 而硬中斷則是實實在在由8259的連線觸發的中斷。因此,嚴格的講,int與irq毫無關係,但二者均與中斷向量有關係。int引起的中斷,cpu是從指令中取得中斷向量號 而irq引起的中斷,cpu必須從資料線上取回中斷號...
向量中斷和非向量中斷的區別
為什麼會有兩種irq中斷處理方式呢。原來,44b0x 是基於arm7tdmi的晶元。arm系列核心對於irq中斷的處理就是通過查詢中斷標誌暫存器來確定中斷源,並執行對應的中斷服務程式,這也就是非向量中斷處理方法了。44b0x的廠家三星為了加快irq中斷的響應速度,在此基礎上新增了另外一種方法,其實也...