一般情況下,在硬體中斷處理程式後都會試圖呼叫do_softirq執行軟中斷,
但是如果發現現在已經有中斷在執行,或者已經有軟中斷在執行,則
不再執行自己呼叫的中斷。也就是說,軟中斷是不能進入硬體中斷部分的,並且軟?br>卸顯諞桓鯿pu上是不可重入的,或者說是序列化的(serialize)
其目的是避免訪問同樣的變數導致競爭條件的出現。在開中斷的中斷處理程式中不
允許呼叫軟中斷可能是希望這個中斷處理程式盡快結束。
這是由do_softirq中的
if (in_interrupt())
return;
保證的.
其中,
#define in_interrupt() ()
前者local_irq_count(_cpu)
當進入硬體中斷處理程式時,handle_irq_event中的irq_enter(cpu,
irq)會將它加1,表明又進入乙個硬體中斷
退出則呼叫irq_exit(cpu, irq)
後者local_bh_count(__cpu)
當進入軟中斷處理程式時,do_softirq中的local_bh_disable()會將它加1,表明處於軟中斷中
local_bh_disable();
乙個例子:
當核心正在執行處理定時器的軟中斷時,這期間可能會發生多個時鐘中斷,這些時鐘中斷的處理程式都試圖再次執行處理定時器的軟中斷,但是由於
已經有個軟中斷在執行了,於是就放棄返回。
可重入中斷
一 目的 對於arm9來說,進入irq後,會禁用irq,這個時候,即使有更高優先順序的中斷觸發,也是要等該中斷退出後才能響應,是不可重入的。本文旨在介紹可以被高優先順序中斷打斷的中斷程式,亦即可重入中斷。二 原理 要做到可重入,必須開啟被禁用的中斷。但開啟後要面臨乙個問題,就是lr是會被中斷自動設定...
軟中斷 硬中斷 區別
from 軟中斷一般是指由指令int引起的 偽 中斷動作 給cpu製造乙個中斷的假象 而硬中斷則是實實在在由8259的連線觸發的中斷。因此,嚴格的講,int與irq毫無關係,但二者均與中斷向量有關係。int引起的中斷,cpu是從指令中取得中斷向量號 而irq引起的中斷,cpu必須從資料線上取回中斷號...
軟中斷與硬中斷
軟中斷 1.程式設計異常通常叫做軟中斷 2.軟中斷是通訊程序之間用來模擬硬中斷的 一種訊號通訊方式。3.中斷源發中斷請求或軟中斷訊號後,cpu或接收程序在適當的時機自動進行中斷處理或完成軟中斷訊號對應的功能 4.軟中斷是軟體實現的中斷,也就是程式執行時其他程式對它的中斷 而硬中斷是硬體實現的中斷,是...