悟空学Linux专栏----第35篇

来源:互联网 发布:和女生网络聊天技巧 编辑:程序博客网 时间:2024/06/11 22:02

  因为悟空昨晚好好研究了一下软中断,所以悟空今天上课心里终于有底了。

  悟空:Linux内核采用softirq_action结构体来表示软中断,具体结构体如下

  struct softirq_action{

  void (*action)(struct softirq_action *)

  };

  为了管理这些软中断,Linux内核中定义了一个数组,static struct softirq_action softirq_vec[NR_SOFTIRQS];一般情况下“NR_SOFTIRQS”为32,所以Linux内核的软中断最多只有32个。

  2号童鞋:老师,为什么是32个啊,而不是其他的数字啊?

  被2号童鞋这么一问,悟空竟然无法回答,悟空也感觉到很奇怪,为什么Linux内核设计了这么少的软中断,既然是个好东西Linux应该多设计一些啊。哎呀,为什么2号童鞋需要的一杯水不在我的桶里啊。悟空心想,瞎编吧。

  悟空:因为Linux系统很多时候采用了32位的系统,所以采用32个,刚好可以用每位表示一个软中断。

  2号童鞋:哦……

  悟空:而且软中断和中断有一个比较大的区别就是,一个中断的执行可以被其他中断打断,而软中断却不能被中断打断。

  2号童鞋:那么老师,软中断可以打断中断吗?

  悟空:软中断一般是由中断触发的,所以软中断一般不能打断中断,但是中断可以打断软中断。打个比喻,老师可以打断学生说话,但是学生不能打断老师上课,2号童鞋你明白了吗?

  2号童鞋无语,只好点点头。

  悟空:

  软中断的注册函数为:

  void open_softirq(int nr,void (*action)(struct softirq_action*));

  nr为软中断号,action为软中断的处理函数。

  软中断的挂起函数为:

  void raise_softirq(unsigned int nr);

  void raise_softirq_irqoff(unsigned int nr)。

  这时2号童鞋心里产生了一个很大的疑问,为什么悟空老师没有说软中断的注销函数啊?2号童鞋很想问,但是又不敢问。

0 0
原创粉丝点击