【问题标题】:Processes sharing a CPU (scheduler)共享 CPU 的进程(调度程序)
【发布时间】:2015-05-12 14:43:29
【问题描述】:

问题 调度程序尝试在多个进程之间共享 CPU。二 进程 P1 和 P2 正在运行。 P1 做很多 I/O 操作,而 P2 做 很少。

解释如果简单的“循环”抢先式调度会发生什么 算法用于调度P1和P2。

我的尝试 据我了解,当调度程序能够被中断调用并将一个进程从运行状态移动到另一个进程,然后将另一个进程移动到运行状态时,它被称为是抢先式的。循环意味着每个进程 P1 和 P2 将获得相同的 CPU 时间,但是如果 P1 执行许多 I/O 操作而 P2 执行较少,那么 P1 不会获得更多的 CPU 时间,因为它有很多更多操作?例如,如果给定每个进程 1 秒,如果 P1 必须执行 50 次 I/O 操作(为简单起见,每次需要 1 秒),而 P2 必须执行 3 次 I/O 操作,我假设顺序是否正确go: P1,P2,P1,P2,P1,P2,P1,P1 (继续 P1 直到操作完成)。

这是我的理解,希望你们中的一些人能提供更多的见解。谢谢。

【问题讨论】:

    标签: process operating-system scheduler round-robin


    【解决方案1】:

    您的理解非常接近标记。

    Round robin 表示调度程序依次选择每个进程。所以如果只有两个进程,调度器会选择一个然后另一个(假设两个都准备好了)。

    关于你的第一个问题,进程 P2 实际上获得了更多的 CPU 时间。这是一个示例,其中 P1 首先被调度并在 0.5 秒后执行 I/O:

    Time(seconds)     What
        0             P1 starts
       .5             P1 does I/O; P2 is scheduled
      1.5             P2's time is up; P1 is scheduled because its I/O has finished
      2.0             P1 does I/O; P2 is scheduled
      3.0             P2's time is up, P1 is scheduled because its I/O has completed
    
      Total P1 time: 1 second
      Total P2 time: 2 seconds
    

    您可以看到,因为 P1 执行更多 I/O,它获得的总 CPU 时间更少,因为调度程序没有考虑到 P1 没有的事实t 使用所有分配的时间。

    如果 P1P2 都做 I/O,那么调度仍然是:

    P1, P2, P1, P2, P1, P2, etc.
    

    因为如果 P1 让出 CPU,则 P2 准备就绪,反之亦然。

    【讨论】:

    • 非常感谢您的详细回答,这非常有意义。我想我忘记了当 I/O 操作发生时,进程实际上进入等待状态,因此另一个进程可以使用 CPU。 T
    【解决方案2】:

    假设您使用的是 Linux 系统,查看 /proc/sched_debug 将为您提供有关调度程序详细信息以及进程(非自愿切换的数量等)的大量信息(平均时间、等待时间)。 你可能也对Tuning the Task Scheduler感兴趣

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2011-06-29
      • 2016-12-23
      • 1970-01-01
      相关资源
      最近更新 更多