softirq機制分析

2021-05-17 20:45:13 字數 2063 閱讀 1264

軟中斷的含義就是模仿硬中斷的實現方式,軟就是軟體模擬的意思。它處於中斷的下半部執行,目的是想要使中斷上半部快速執行完畢。耗時的一些工作放到下半部去執行。避免丟中斷和系統響應慢的問題。

在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不僅...