进程共享 CPU(调度程序)

Processes sharing a CPU (scheduler)

问题 调度程序尝试在多个进程之间共享 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 操作,我假设是否正确顺序为:P1,P2,P1,P2,P1,P2,P1,P1(继续 P1 直到操作完成)。

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

你的理解已经很接近了。

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

关于您的第一个问题,进程 P2 实际上获得更多 CPU 时间。这是一个示例,其中首先安排了 P1,并在 .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 没有使用所有分配的时间。

如果 P1P2 都做 I/O,时间表仍然是:

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

因为如果 P1 产生 CPU,P2 就准备好了,反之亦然。

假设你在 Linux 系统上,查看 /proc/sched_debug 会给你很多关于调度程序细节和进程的信息(平均时间,等待时间)(非自愿切换的数量, ETC)。 您可能还对 Tuning the Task Scheduler

感兴趣