日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux操作系統(tǒng)下的軟中斷問題分析

前幾天把硬中斷完成了,這幾天在做軟中斷的事情 。現(xiàn)在對(duì)linux2.6.12的軟中斷機(jī)制有了一個(gè)基本的認(rèn)識(shí) 。在此把它的軟中斷的一些問題做一個(gè)記錄 。
系統(tǒng)中有一個(gè)softirq_action結(jié)構(gòu),它定義在中,是一個(gè)通用結(jié)構(gòu),還有一個(gè)很重要的結(jié)構(gòu)在中申明,這個(gè)結(jié)構(gòu)是cpu相關(guān)的,比如在i386中這個(gè)結(jié)構(gòu)為
typedef struct {
unsigned int __softirq_pending;
unsigned long idle_timestamp;
unsigned int __nmi_count; /* arch dependent */
unsigned int apic_timer_irqs; /* arch dependent */
} ____cacheline_aligned irq_cpustat_t;
在arm中這個(gè)結(jié)構(gòu)為
【Linux操作系統(tǒng)下的軟中斷問題分析】
typedef struct {
unsigned int __softirq_pending;
} ____cacheline_aligned irq_cpustat_t;
以上兩個(gè)結(jié)構(gòu)均再中 。
在中有幾個(gè)很不好理解的函數(shù):

1:local_softirq_pending()
下面是這個(gè)函數(shù)的定義

CODE:#ifndef __ARCH_IRQ_STAT
extern irq_cpustat_t irq_stat[]; /* defined in asm/hardirq.h */
#define __IRQ_STAT(cpu, member) (irq_stat[cpu].member)
#endif
/* arch independent irq_stat fields */
#define local_softirq_pending()
__IRQ_STAT(smp_processor_id(), __softirq_pending)
其中的smp_processor_id()如果追下去會(huì)很復(fù)雜,其實(shí)它最后只是一個(gè)數(shù)字:cpu的號(hào)碼,單cpu中為0.

2.#define __raise_softirq_irqoff(nr) do;
{ local_softirq_pending() |= 1UL << (nr); } while (0)
這個(gè)函數(shù)實(shí)際上是把irq_stat[cpu_id](kernel/softirq.c中)結(jié)構(gòu)中的pending的第nr為置位,表示這個(gè)cpu有幾號(hào)軟中斷要處理,在do_softirq()中有對(duì)irq_stat[]的pending的相應(yīng)檢查及處理,詳細(xì)的處理過程參見源代碼及《Linux Kernel Development》第7章 。

    推薦閱讀