📅  最后修改于: 2023-12-03 14:58:30.741000             🧑  作者: Mango
本篇文章是关于GATE(Graduate Aptitude Test in Engineering)考试中计算机科学领域的一道题目,该道题目是关于操作系统的进程调度(Process Scheduling)的。
操作系统中使用的进程调度算法,是可能受到进程使用的I/O模式的影响的。一个进程使用的I/O模式可能是I/O密集型的(I/O bound)或者是CPU密集型的(CPU bound)。如果进程使用的是I/O密集型的I/O模式,那么它所需要的CPU时间就会较短,而大多数时间将会花费在I/O等待上。相反,如果进程使用的是CPU密集型的I/O模式,那么它所需要的CPU时间就会比较长。
现在,考虑以下三个进程和用于调度它们的调度算法:
| 进程 P | CPU时间 | 周转时间 | 可视性 | 进程 Q | CPU时间 | 周转时间 | 可视性 | 进程 R | CPU时间 | 周转时间 | 可视性 | |-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------| | | | | | | | | | | | | | | I/O | 5 | 14 | | I/O | 6 | 6 | | I/O | 4 | 10 | | | CPU | 2 | 8 | | CPU | 4 | 4 | | CPU | 3 | 3 | | | I/O | 2 | 11 | | CPU | 2 | 12 | | I/O | 3 | 7 | | | CPU | 1 | 5 | | I/O | 4 | 16 | | I/O | 4 | 14 | |
调度算法有以下两种:
下面将按照题目要求来回答这些问题。
要找出每个进程的完成时间,需要寻找以下几点:
按照上述方式计算,得到的每个进程的完成时间如下表:
| 进程 P | 进程 Q | 进程 R | |-----------|-----------|-----------| | 21 | 26 | 20 |
| 进程 P | 进程 Q | 进程 R |
|-----------|-----------|-----------|
| 21 | 26 | 20 |
等待时间可以通过完成时间减去CPU时间和I/O时间的差值来计算。
得到的每个进程的等待时间如下表:
| 进程 P | 进程 Q | 进程 R | |-----------|-----------|-----------| | 14 | 16 | 10 |
| 进程 P | 进程 Q | 进程 R |
|-----------|-----------|-----------|
| 14 | 16 | 10 |
周转时间可以通过完成时间减去进程开始执行的时间来计算。得到的每个进程的周转时间如下表:
| 进程 P | 进程 Q | 进程 R | |-----------|-----------|-----------| | 19 | 20 | 16 |
| 进程 P | 进程 Q | 进程 R |
|-----------|-----------|-----------|
| 19 | 20 | 16 |
正规化周转时间(normalized turn around time,N.T.A.T)可以通过将周转时间除以每个进程使用的CPU时间来计算。
得到的每个进程的N.T.A.T如下表:
| 进程 P | 进程 Q | 进程 R | |-----------|-----------|-----------| | 2.7 | 3.3 | 3.3 |
| 进程 P | 进程 Q | 进程 R |
|-----------|-----------|-----------|
| 2.7 | 3.3 | 3.3 |
对于这些进程,轮询算法比先来先服务算法更好。
原因是轮询算法可以将时间片分配给进程,这样可以更好地控制每个进程使用的CPU时间,防止某个进程长时间占据CPU,导致其他进程无法获得CPU时间。另外,由于进程I/O时间的不确定性,轮询算法可以更好地处理I/O密集型进程,通过在I/O等待队列中等待,直到I/O任务完成后,立即开始CPU计算。这就可以最大限度地利用CPU,使得CPU不会在等待I/O上浪费太多时间。
另一方面,先来先服务算法可能会导致一些I/O密集型进程等待太长时间,进而导致造成死锁和饥饿,也会导致一些CPU密集型进程一直占用CPU,从而无法满足其他进程的需求。
对于这些进程,轮询算法比先来先服务算法更好。
原因是轮询算法可以将时间片分配给进程,这样可以更好地控制每个进程使用的CPU时间,防止某个进程长时间占据CPU,导致其他进程无法获得CPU时间。另外,由于进程I/O时间的不确定性,轮询算法可以更好地处理I/O密集型进程,通过在I/O等待队列中等待,直到I/O任务完成后,立即开始CPU计算。这就可以最大限度地利用CPU,使得CPU不会在等待I/O上浪费太多时间。
另一方面,先来先服务算法可能会导致一些I/O密集型进程等待太长时间,进而导致造成死锁和饥饿,也会导致一些CPU密集型进程一直占用CPU,从而无法满足其他进程的需求。