一尘不染

中断处理程序中的上下文切换

linux

为什么在执行中断处理程序时无法进行上下文切换?更具体地说,在linux内核中,中断处理程序在被中断的进程的上下文中运行。为什么不能在中断处理程序中进行上下文切换来调度另一个进程?


阅读 246

收藏
2020-06-07

共1个答案

一尘不染

在多处理器上,上下文切换当然可以在执行中断处理程序时发生。实际上,将很难预防。

根据定义,在单CPU机器上,它一次只能运行一个控制线程。它只有一个寄存器集,一个ALU,等等。因此,如果中断处理程序正在运行,则根本没有资源可用于执行上下文切换。

现在,如果您是说,中断处理程序可以实际调用上下文切换代码并使之 实现
吗,好吧,我想在可以使之工作的某些系统上。但是对于大多数人来说,这没有什么价值,并且很难安排。CPU以更高的优先级运行,并且不能降低此优先级或中断级别之间的同步丢失。OS中的关键部分已经在与中断执行同步,这会带来复杂性。此外,上下文切换是通过更改堆栈来进行的,就像在线程用户模式程序中一样,因此很难想象当需要中断堆栈来从中断返回时如何发生。

2020-06-07