是在所有处理器上执行中断,还是仅在一个处理器上执行? 例如,当我输入时,所有处理器都处理中断吗?或者只有其中一个和其他人一起继续?
答案 0 :(得分:2)
这是低级处理的高级视图。我正在描述一个简单的典型架构,真正的架构可能更复杂,或者在这个细节层次上无关紧要。
当发生中断时,处理器会查看中断是否被屏蔽。如果它们是,那么在它们被揭露之前没有任何反应。当中断变为未屏蔽时,如果有任何待处理的中断,则处理器选择一个。
然后处理器通过分支到存储器中的特定地址来执行中断。该地址的代码称为中断处理程序。当处理器在那里分支时,它会屏蔽中断(因此中断处理程序具有独占控制权)并在某些地方(通常是其他寄存器)保存某些寄存器的内容。
中断处理程序执行必须执行的操作,通常是通过与触发中断的外围设备进行通信来发送或接收数据。如果定时器引发了中断,则处理程序可能会触发OS调度程序,切换到不同的线程。当处理程序完成执行时,它会执行一个特殊的从中断返回指令,恢复保存的寄存器和取消屏蔽中断。
中断处理程序必须快速运行,因为它阻止任何其他中断运行。在Linux内核中,中断处理分为两部分:
“上半部分”是中断处理程序。它做了最低限度的必要,通常与硬件通信并在内核内存中的某处设置标志。 “下半部分”执行任何其他必要的处理,例如将数据复制到进程内存,更新内核数据结构等。它可能需要花费时间甚至阻塞等待系统的其他部分,因为它在启用中断的情况下运行。 / p>