Linux内核中断嵌套

假设读者对Linux内核的中断一定的理解,下面来介绍Linux内核的中断嵌套和抢占规则。
1 中断运行过程中的开关情况
在进入硬中断的时候,CPU会自动将硬中断功能关闭;进入软件中断的时候不会关闭中断功能。为了支持中断的嵌套执行,Linux内核在进入中断服务程序之前会将硬中断开启,运行完中断服务程序之后再将硬中断关闭,在这期间硬件中断是可以被抢占的,而软中断执行过程中硬件中断始终是开启的。如果没有特殊说明,下面的中断都指硬中断。关闭中断是硬件自动完成的,为了实现中断的嵌套,需要人为的打开中断。中断发生后会进行多次函数跳转,最终会进入到真正的中断处理函数handle_IRQ_event(),在该函数里执行各设备的中断服务程序。函数定义如下:

irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
{
    irqreturn_t ret, retval = IRQ_NONE;
    unsigned int status = 0;

    handle_dynamic_tick(action);

    if (!(action->flags & IRQF_DISABLED))
        local_irq_enable_in_hardirq();//开中断

   

你可能感兴趣的:(Linux内核中断,linux,kernel,中断嵌套,内核抢占)