进程共享 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 没有使用所有分配的时间。
如果 P1 和 P2 都做 I/O,时间表仍然是:
P1, P2, P1, P2, P1, P2, etc.
因为如果 P1 产生 CPU,P2 就准备好了,反之亦然。
假设你在 Linux 系统上,查看 /proc/sched_debug 会给你很多关于调度程序细节和进程的信息(平均时间,等待时间)(非自愿切换的数量, ETC)。
您可能还对 Tuning the Task 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 没有使用所有分配的时间。
如果 P1 和 P2 都做 I/O,时间表仍然是:
P1, P2, P1, P2, P1, P2, etc.
因为如果 P1 产生 CPU,P2 就准备好了,反之亦然。
假设你在 Linux 系统上,查看 /proc/sched_debug 会给你很多关于调度程序细节和进程的信息(平均时间,等待时间)(非自愿切换的数量, ETC)。 您可能还对 Tuning the Task Scheduler
感兴趣