Chinaunix首页 | 论坛 | 博客
  • 博客访问: 488695
  • 博文数量: 76
  • 博客积分: 5196
  • 博客等级: 大校
  • 技术积分: 1414
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-10 18:43
个人简介

转了个圈,又回来了

文章分类

全部博文(76)

文章存档

2013年(1)

2011年(8)

2010年(9)

2009年(22)

2008年(36)

我的朋友

分类: LINUX

2011-04-05 12:01:58

下面用一幅图来介绍中断来了后的函数调用过程。

 

 IRQ中断来了

     |

     |

中断向量入口,跳转到中断处理程序 

     |

     |

  是否内核态------Irq_usr

     |            |       

     |            |

     get_irqnr_and_base

           获取中断号

     asm_do_IRQ 处理中断

 

 

注意:内核态的中断处理和用户态的中断处理都是调用了asm_do_IRQ来处理中断,不同点在于中断返回时的处理。Irq_usr判断是否有进程抢占和待处理信号。但

Irq_svc只判断是否需要调度,因为它要尽快返回内核态。

 

asm_do_IRQ irq

 

获取irq对应的struct irqdesc结构体

     |

     |

(Irq_desc+irq)->handle_irq

     |

     |

循环调用

desc->action->handle,

也就是依次调用注册在该中断上的处理函数。

    

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