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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统调用后,进程何时从内核模式恢复用户模式执行?相关的知识,希望对你有一定的参考价值。

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

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

以下描述没有意义

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

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

答案

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

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

以上是关于系统调用后,进程何时从内核模式恢复用户模式执行?的主要内容,如果未能解决你的问题,请参考以下文章

内存管理:用户模式和内核模式

从内核文件系统看文件读写过程(转)

线程基本

从内核文件系统看文件读写过程

非阻塞系统调用和模式切换

文件读写原理(转)