问题 调度程序尝试在多个进程之间共享CPU。二 进程P1和P2正在运行。 P1执行许多I / O操作,而P2执行 很少。
解释如果进行简单的“循环”预先调度会发生什么 算法用于调度P1和P2。
我的尝试 根据我的理解,如果调度程序能够被中断调用并将进程从运行状态移动到另一个进程,然后将另一个进程移动到运行状态,则称调度程序是先发制人的。循环意味着每个进程P1和P2将与CPU获得相同的时间,但如果P1执行许多I / O操作而P2执行的次数较少,则不会使用更多的时间来处理CPU,因为它有更多的业务?如果每个进程都给出了例如1秒,如果P1必须执行50个I / O操作(为简单起见,每个操作需要1秒),而P2必须执行3个I / O操作,我认为订单将是正确的go:P1,P2,P1,P2,P1,P2,P1,P1(继续P1直到操作完成)。
这是我的理解,希望你们中的一些人可以提供更多的见解。谢谢。
答案 0 :(得分:0)
你的理解非常接近标记。
循环表示调度程序依次选择每个进程。因此,如果只有两个进程,则调度程序将选择一个进程,然后选择另一个进程(假设两个进程都准备就绪)。
关于你的第一个问题,进程 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 没有'的事实t使用所有分配的时间。
如果 P1 和 P2 都执行I / O,则计划仍将是:
P1, P2, P1, P2, P1, P2, etc.
因为如果 P1 产生CPU, P2 就绪,反之亦然。
答案 1 :(得分:0)
假设您使用的是Linux系统,查看/ proc / sched_debug将为您提供有关调度程序详细信息以及进程(非自愿交换机的数量等)的大量信息(平均时间,等待时间)。 你也对Tuning the Task Scheduler
感兴趣