【问题标题】:When will a process resume execution in user mode from kernel mode after a system call?系统调用后,进程何时从内核模式恢复用户模式的执行?
【发布时间】:2018-06-05 13:06:06
【问题描述】:

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

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

下面的描述没有意义

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

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

【问题讨论】:

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


    【解决方案1】:

    调度器是内核中执行任务切换的部分。每次调度程序运行时,它都会选择下一个应该控制 CPU 的进程,并切换到它。调度程序需要足够频繁地运行,以确保所有进程在 CPU 上获得公平的时间份额。

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

    【讨论】:

    • 是的,你是对的,但我的问题是,系统调用后,进程何时从内核模式恢复用户模式的执行。你介意解释一下这个描述吗:进程 1 然后在用户模式下恢复执行,直到发生定时器中断,并且调度程序在内核模式下被激活。我认为这没有任何意义。
    • 如果系统调用不是运行调度程序的系统调用,或者调度程序运行但决定给当前进程更多时间。 (也许目前没有其他进程需要 CPU。)
    • 你不觉得描述中的“除非”这个词比“直到”更好吗?
    • 我觉得我的英语很差,我只是被“直到”和“除非”这两个词愚弄了。
    • 定时器中断是一个独立于系统调用的事件。系统调用完成并将控制权返回给用户程序,一段时间后,定时器中断将 CPU 返回到内核模式以进行调度。 “直到”是正确的词。
    猜你喜欢
    • 2018-11-01
    • 2017-09-02
    • 2011-09-01
    • 1970-01-01
    • 2021-07-31
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多