operating-system - 需要解释问题的循环调度吗?
问题描述
A 50 1
B 20 2
C 30 3
ProcessId Time Order
给定上面使用循环的进程信息表,平均等待时间是多少?假设时间量子非常小(0.5 s)?
显然答案是 43 秒。我不明白这怎么可能。我能得到一些帮助吗?
我期待 P2 首先完成,它的等待时间为(A 的 40 个量子 + C 的 39 个量子)= 79 个量子 = 39.5 秒。
我预计 P3 将获得第二名,它的等待时间为(A 的 80 量子 + B 的 40 量子)= 120 量子 = 60 秒。
我希望 P1 最后完成,它的等待时间为(B 为 40 量子 + C 为 80 量子)= 120 量子 = 60 秒。
平均值 = (39.5 + 60 + 60) / 3 = 53.2 秒。但是,答案似乎是 43 秒。
解决方案
最初,进程表如下所示:
A 100 1
B 40 2
C 60 3
ProcessId Quanta Order
对于第一个 40*3=120 quanta,将运行 3 个进程。进程 B 将更快地完成 1 个 quanta(在 119 个 quanta 之后),如果需要 119 个 quanta 才能获得 40 个 quanta,它一定一直在等待 79 个 quanta。
在前 120 个量子之后;进程表如下所示:
A 60 1
C 20 3
ProcessId Quanta Order
对于接下来的 20*2=40 quanta,将有 2 个进程在运行。过程 C 将在 120+40 个 quanta 之后完成,如果需要 160 个 quanta 才能获得 60 个 quanta,那么它一定一直在等待 100 个 quanta。
在前 160 个量子之后;进程表如下所示:
A 40 1
ProcessId Quanta Order
对于下一个 40*1=40 quanta,将有 1 个进程在运行。过程 A 将在 120+40+40 个 quanta 之后完成,如果它需要 200 个 quanta 才能获得 100 个 quanta,它一定一直在等待 100 个 quanta。计算这个的另一种方法是说 A 必须等待多少个量子 B 和 C 消耗,即 40+60 = 100 个量子。
平均等待时间为 (79+100+100)/3 = 93 quanta = 46.5 秒。
推荐阅读
- javascript - 反应钩子状态不更新
- python - cp_model.CpModel() 中是否有与 pywrapcp.Solver() 中的 IsEqualCstVar 类似的功能?
- flutter - 如何按组计算列表中的金额总和?
- python - 在 google colab 中与其他协作者共享文件
- c++ - 我应该如何使用epoll从同一个FD读取和写入
- reactjs - React:使用索引作为列表中项目的键
- php - 我需要一个域来设置 Apache 服务器吗?
- javascript - 如何在 xslt 脚本中导入 Javascript 对象
- python - Python-AttributeError: 'NoneType' 对象没有属性 'find';;;
- java - Spring Cloud AWS SQS 无法在本地连接到服务端点