1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      Linux操作系統下的軟中斷問題分析

      更新時間: 2007-06-02 10:14:28來源: 粵嵌教育瀏覽量:712


        前幾天把硬中斷完成了,這幾天在做軟中斷的事情。現在對linux2.6.12的軟中斷機制有了一個基本的認識。在此把它的軟中斷的一些問題做一個記錄。
        系統中有一個softirq_action結構,它定義在中,是一個通用結構,還有一個很重要的結構在中申明,這個結構是cpu相關的,比如在i386中這個結構為

      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中這個結構為

      typedef struct {

      unsigned int __softirq_pending;

      } ____cacheline_aligned irq_cpustat_t;

        以上兩個結構均再中。

        在中有幾個很不好理解的函數:

      1:local_softirq_pending()

        下面是這個函數的定義

      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()如果追下去會很復雜,其實它只是一個數字:cpu的號碼,單cpu中為0.

      2.#define __raise_softirq_irqoff(nr) do

      { local_softirq_pending() |= 1UL << (nr); } while (0)

        這個函數實際上是把irq_stat[cpu_id](kernel/softirq.c中)結構中的pending的第nr為置位,表示這個 cpu有幾號軟中斷要處理,在do_softirq()中有對irq_stat[]的pending的相應檢查及處理,詳細的處理過程參見源代碼及《Linux Kernel Development》第7章。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 中文亚洲无线码欧美 | 亚洲欧美综合另类自拍 | 亚洲欧美在线a | 日本韩国欧美国产一级 | 亚洲区综合区小说区激情区 | 亚洲欧美中文视频 |