Ban*_*oot 7 linux linux-kernel
为什么在执行中断处理程序时不能发生上下文切换?更具体地说,在linux内核中,中断处理程序在被中断的进程的上下文中运行.为什么不能在中断处理程序中进行上下文切换来安排另一个进程?
在多处理器上,当执行中断处理程序时,肯定会发生上下文切换.事实上,很难预防.
在单CPU机器上,根据定义,它一次只能运行一个控制线程.它只有一个寄存器组,一个ALU等.因此,如果中断处理程序正在运行,那么就没有资源可用于执行上下文切换.
现在,如果你的意思是,中断处理程序实际上是否可以调用上下文切换代码并使其发生,好吧,我想在某些系统上可以使用.但对大多数人来说,这没什么价值,也很难安排.CPU以高优先级运行,并且不能降低此优先级或中断级别之间的同步丢失.操作系统中的关键部分已经与中断执行同步,这会带来复杂性.此外,通过更改堆栈来实现上下文切换,就像在线程用户模式程序中一样,因此很难想象当从中断返回时需要中断堆栈时这可能会发生.
我想,有几个原因,取决于你问题的含义:
问: 为什么中断期间的上下文切换会很糟糕?
答:中断通常用于与硬件交互.硬件通常是时间敏感的,因此操作系统不能只是在某些事情中停止处理它,并在它感觉到时回来.
问: 在中断期间发生上下文切换的原因是什么?
答:中断发生在特殊的中断上下文中,而不是常规的进程上下文.由于它不在一个过程中,因此它不像正常过程那样受上下文切换的影响.
可能会有更好,更深入的解释,但这是我自己对此事的理解程度.
| 归档时间: |
|
| 查看次数: |
6411 次 |
| 最近记录: |