【问题标题】:What does the kernel do while another process is running当另一个进程运行时内核做了什么
【发布时间】:2016-03-03 19:52:36
【问题描述】:

考虑一下:当一个任务/进程在单处理器系统上运行时,另一个任务必须等待轮到它,直到第一个任务被挂起或终止(取决于调度算法)。 内核还包含各种任务,这些任务使用同一个 CPU 来执行与操作系统相关的事情——比如调度、内存管理、响应系统调用等。

所以当内核调度一个特定的任务/进程给它 CPU 时间时,它会放弃对 CPU 的控制吗?即它会暂时停止吗?如果不是,当另一个进程在 CPU 上运行时,它如何继续运行以执行所有与操作系统相关的任务?调度器是否移到一边以提供下一个任务在 CPU 中,如果是这样,是什么使调度器返回继续进行进一步的调度活动?这个问题很相似,但它没有包含足够的细节 - How can kernel run all the time?

我对这部分感到困惑,我无法理解这是如何工作的。有人可以详细解释一下吗?如果你能用一个例子来解释它会很有帮助。

【问题讨论】:

  • 你对中断了解多少? (如果你知道一点,想想它可能会回答你所有的问题)
  • 取决于 CPU。单核、单线程 CPU 根本不会做任何事情。
  • 不要认为内核总是在处理器上运行;需要时通过中断调用它。中断调用内核的特定例程,所以那时你可以说内核正在运行

标签: operating-system kernel scheduling


【解决方案1】:

是的..您应该停止将操作系统内核视为一个进程,而不仅仅是代码和数据 - 一种进程/线程调用的状态机,以便在一端获得特定服务,(例如 I/O 请求)和驱动程序在另一端调用以提供服务解决方案(例如 I/O 完成)。

内核本身不需要任何执行线程。它仅在从系统调用(来自正在运行的用户线程/进程的类似中断的调用)或驱动程序(来自磁盘/NIC/KB/鼠标等硬件的硬件中断)输入时运行。有时,此类调用会更改在可用内核上运行的线程集(例如,如果等待网络缓冲区的线程由于 NIC 驱动程序已完成操作而准备就绪,则操作系统可能会尝试将其分配给内核立即”,如果需要,抢占其他线程)。

如果没有系统调用,也没有硬件中断,内核什么也不做,因为它没有进入——它没有什么可做的。

【讨论】:

  • Lmao 我喜欢你用“是的......”开始回答的方式:)难以置信的回答
【解决方案2】:

您缺少的是,如今很少有操作系统具有您所描述的监控进程。

冒着过于简单化的风险,操作系统会运行异常和中断。

假设您有两个进程,P 和 Q。P 是正在运行的进程,Q 是下一个要运行的进程。切换进程的一种方法是系统计时器关闭触发中断。 P 切换到内核模式并处理该中断。 P 运行处理定时器的中断代码并确定 Q 应该运行。然后 P 保存其上下文并加载 Q。此时,Q 是正在运行的进程。中断处理程序退出并从 Q 之前的位置开始。

换句话说,进程 P 在处理中断时成为内核调度程序。每个进程都成为加载下一个进程的调度器。

另一个例子,假设 Q 已将读取操作排队到磁盘。该操作完成并触发中断。 P,正在运行的进程,进入内核态处理中断。然后 P 处理 Q 的磁盘读取操作。

【讨论】:

    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2019-05-14
    • 2015-10-15
    • 2021-03-20
    相关资源
    最近更新 更多