軟中斷的含義就是模仿硬中斷的實現方式,軟就是軟體模擬的意思。它處於中斷的下半部執行,目的是想要使中斷上半部快速執行完畢。耗時的一些工作放到下半部去執行。避免丟中斷和系統響應慢的問題。
在interrupt.h中定義了軟中斷號。
enum
hi_softirq=0,
timer_softirq,
net_tx_softirq,
net_rx_softirq,
block_softirq,
tasklet_softirq,
sched_softirq,
#ifdef config_high_res_timers
hrtimer_softirq,
#endif
rcu_softirq, /* preferable rcu should always be the last softirq */
softirq-daemon會遍歷pending的softirq,如果存在,會相應執行對應的action.
void open_softirq(int nr, void (*action)(struct softirq_action *))
//註冊軟中斷
如果發現有pending狀態,do_softirq會呼叫__do_softirq函式
asmlinkage void __do_softirq(void)
h++;
pending >>= 1;
} while (pending);
local_irq_disable();
pending = local_softirq_pending();
if (pending && --max_restart)
goto restart;
if (pending)
wakeup_softirqd();
trace_softirq_exit();
account_system_vtime(current);
_local_bh_enable(); }
softirq呼叫時機
cpu空閒的時候:
void idle_loop(void)
} 每次中斷返回的時候:
arch/x86/x86_32/entry.s
entry(ret_from_intr)
get_current(%ebx)
movl uregs_eflags(%esp),%eax
movb uregs_cs(%esp),%al
testl $(3|x86_eflags_vm),%eax
jnz test_all_events
jmp restore_all_xen
test_all_events:
xorl %ecx,%ecx
notl %ecx
cli # tests must not race interrupts
/*test_softirqs:*/
movl vcpu_processor(%ebx),%eax
shl $irqstat_shift,%eax
test %ecx,irq_stat(%eax,1)
jnz process_softirqs
btr $_vcpuf_nmi_pending,vcpu_flags(%ebx)
jc process_nmi
process_softirqs:
sti
call
do_softirq
jmp test_all_events
對於xen虛擬環境,還有兩處:
domain_crash_synchronous()->__domain_crash_synchronous()-> do_softirq()
arch_vmx_do_resume()-->hvm_do_resume()->wait_on_xen_event_channel(port, condition)->do_softirq()
NodeJs ReadStream機制分析
讀了一下午源 作者寫的 太難懂了,洋洋灑灑,勉強看懂。readstream有兩個模式,即flow模式和readable模式,一旦設定成一種模式,最好不要切換成另一種。flow模式採用好處是可以控制速度,常見用法為 readable.on data function data readable.on ...
Fail fast 機制分析
fail fast 快速失敗 機制是集合中比較常見的錯誤檢測機制,防止在對集合進行遍歷的時候,出現意料之外的修改,導致意想不到的結果 下面通過乙個簡單的例子分析fail fast產生的原因 test public void failfasttest 執行結果 通過控制台輸出報錯資訊,可以看到conc...
linux fork COW機制分析
在linux系統中通過系統呼叫fork clone來建立乙個新的程序,建立程序的過程中根據clone flags會選擇複製資源還是公用乙份資源,通常資源包括 開啟的檔案files struct,檔案系統fs struct,訊號處理signal,記憶體資源mm struct,其中mm struct不僅...