Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1366331
  • 博文数量: 118
  • 博客积分: 3888
  • 博客等级: 中校
  • 技术积分: 2940
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 18:15
个人简介

一看二做三总结

文章分类

全部博文(118)

分类: LINUX

2014-05-05 09:25:03


linux的中断下半部的处理机制有soft-irq,tasklet与workqueue三种,他们共同的缺点是缺少任务调度的支持。因此从2.6.30开始,kernel假如了一种线程化的中断处理机制。其对应的API就是requrest_threaded_irq。而request_irq的内部实现也变成了调用request_threaded_irq来实现,只是第三个参数为空。

中断上下文算是最危险的地方了,很多信息无法保存。一旦中断出问题就是悲剧。把中断处理移到线程中则要方便得多。同时还保留了request_irq的中断 ,对于处理过于简单的中断,可以不生成新的线程。

线程化的中断处理机制对原有的下半部机制是个冲击,除了兼容性外实在想不到他们存在的价值了。

static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
    const char *name, void *dev)
{
return request_threaded_irq(irq, handler, NULL, flags, name, dev);
}

阅读(3733) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

nalinaly2014-12-03 11:44:05

线程化的中断在 kernel 3.10 之前都存在与业务线程竞争同一个CPU的情况
将中断线程改为普通线程可缓解