系统调用后,进程何时从内核模式恢复用户模式执行?

时间:2017-12-23 01:09:01

标签: linux-kernel system-calls context-switch

我曾经认为进程可能会通过系统调用从用户模式切换到内核模式,在内核例程完成后,它会在返回用户模式之前检查是否有其他进程具有更高的优先级,如果不是,它将直接返回用户模式。但是Understanding the Linux Kernel, 3rd Edition 1.6.1。进程/内核模型让我困惑:

  

在单处理器系统上,一次只运行一个进程,并且   它可以在用户模式或内核模式下运行。如果它在Kernel中运行   模式,处理器正在执行一些内核例程。图1-2   图示了用户和内核模式之间的转换示例。   用户模式中的进程1发出系统调用,之后进程   切换到内核模式,系统调用得到服务。过程1   然后在用户模式下恢复执行,直到发生定时器中断,   并在内核模式下激活调度程序。进程切换需要   放置,并且进程2在用户模式下开始执行,直到a   硬件设备引发中断。作为结果   中断,进程2切换到内核模式并为其提供服务   中断。
  enter image description here

以下描述没有意义

  

然后,进程1在用户模式下恢复执行,直到定时器中断   发生,并在内核模式下激活调度程序。

我认为返回用户模式与中断无关,“调度程序是否在内核模式下激活”是什么意思?

1 个答案:

答案 0 :(得分:1)

调度程序是执行任务切换的内核的一部分。每次调度程序运行时,它都会选择下一个应该控制CPU的进程,然后切换到它。调度程序需要经常运行,以确保所有进程在CPU上获得相当长的时间。

系统调用可以调用调度程序,但仅此一点是不够的,因为进程可能会花费很长时间在用户空间中运行代码,而不是进行任何系统调用。为了确保调度程序足够频繁地运行,内核配置硬件定时器以周期性地向CPU发送中断信号。每次发生中断信号时,CPU都会停止运行用户程序,切换到内核模式,并运行一个"中断处理程序"在调用调度程序的内核中。由于它是由计时器而不是代码触发的,所以即使用户程序没有对内核进行任何调用,这也能正常工作。