考虑一个运行 10 个 I/O 密集型任务和 1 个 CPU 密集型任务的系统。假设 I/O 密集型任务在 CPU 计算中每毫秒发出一次 I/O 操作,并且每个 I/O 操作需要 10 毫秒才能完成。还假设上下文切换开销为 0.1 毫秒,并且所有进程都是长时间运行的任务。
如果我们使用循环调度程序,并且时间片为 1 毫秒,那么如何计算 CPU 利用率?
我已经剧透了,我不知道如何计算 CPU 利用率。我试图推理下面的执行和时间安排,希望能走上正确的轨道。
假设 CPU 密集型任务启动,那么我们将执行如下所示的操作
[CPUB] -> [CS] -> [IO1] -> [CS] -> [IO2] -> ... -> [IO10] -> [CS] -> [CPUB]
1 0.1 1 0.1 1 1 0.1 1
从 CPU 密集型任务完成一次到再次开始执行所需的时间为1 ms for CPU-bound task
+ 10 CS, each 0.1 ms
+ 10 I/O-bound tasks, each 1 ms
= 1 + 10*0.1 + 10*1 = 12 ms
。在这 12 毫秒中,有 11 毫秒用于空闲(在每个 CS 期间和每个 I/O 密集型任务执行期间,运行任务的线程将被阻塞等待 IO,因此 CPU 将空闲)。
这一切都是正确的吗?我该如何继续?