![Linux 上下文切换内部结构:当进程在定时器中断之前退出时会发生什么?](https://linux22.com/image/95791/Linux%20%E4%B8%8A%E4%B8%8B%E6%96%87%E5%88%87%E6%8D%A2%E5%86%85%E9%83%A8%E7%BB%93%E6%9E%84%EF%BC%9A%E5%BD%93%E8%BF%9B%E7%A8%8B%E5%9C%A8%E5%AE%9A%E6%97%B6%E5%99%A8%E4%B8%AD%E6%96%AD%E4%B9%8B%E5%89%8D%E9%80%80%E5%87%BA%E6%97%B6%E4%BC%9A%E5%8F%91%E7%94%9F%E4%BB%80%E4%B9%88%EF%BC%9F.png)
当进程在定时器中断之前退出时,Linux内核如何进行上下文切换?
我知道,如果进程正在运行并且发生计时器中断,则schedule
如果设置了标志,则自动调用函数,然后调度函数选择下一个要运行的进程。基本上在这种情况下,调度函数在当前进程的上下文中运行,但是当进程在计时器中断之前退出时会发生什么?schedule
在这种情况下谁调用函数?它在什么上下文中运行?
注意:我最初在 stackoverflow 上问过这个问题,但是由于 stackoverflow 上没有回复,所以我在这里再次询问。
答案1
定时器中断与任何给定进程无关。当它被服务时,内核执行中断服务例程。该代码及其调用的所有函数都在“中断上下文”中执行。
中断几乎可以在任何事情的中间进行服务:内核代码的执行,包括服务另一个中断的代码,可以暂停以服务中断。
当调用调度程序时,它只是考虑当时存在且可运行的进程。