最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....栈上的信息被作为函数参数, 调用do_IRQ函数.
第二阶段 中断串行化
进入do_IRQ函数, 第一步进行中断的串行化处理, 将多个CPU同时产生的某一中断进行串行化....正在处理同一中断的那个CPU完成一次处理后, 会再次检查”触发”标记, 如果设置, 则再次触发处理过程.
于是, 中断的处理是一个循环过程, 每次循环调用handle_IRQ_event来处理中断....第三阶段 关中断条件下的中断处理
进入handle_IRQ_event函数, 调用对应的内核或内核模块通过request_irq函数注册的中断处理函数....工作队列
linux基线版本的内核在解决上述问题上, 提供了workqueue机制.