IRQ产生时,系统根据产生中断的IRQ号找到相应的中断向量入口,即此处的IDT_VEC(vec_name), 再这里,构造好函数atpic_handle_intr()的调用栈后,将转到atpic_handle_intr()进行处理。 同系统调用一样,这里的调用栈struct intrframe既是atpic_handle_intr()的参数,也是中断 返回时用以恢复现场的寄存器状态。
经过简单的有关8259A特有的检查,atpic_handle_intr()就转到intr_execute_handlers() 继续处理。 intr_execute_handlers()是一个重要的函数,它先得到IRQ号,然后判断是否是快速中断, 如果是,则直接在当前线程的上下文中运行,如果不是,则调度对应的中断线程来运行。 这个处理是被critical_enter()/critical_exit()保护起来的,以保证不会嵌套调度中断线程。
|
|||||||||||||||||||||||||||||||
|
|