📜  门| GATE-CS-2016(Set 1)|第60章(1)

📅  最后修改于: 2023-12-03 14:58:30.741000             🧑  作者: Mango

GATE-CS-2016 (Set 1) 第60章

本篇文章是关于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 | |

调度算法有以下两种:

  • 使用非抢占式的先来先服务(非SJF)算法。
  • 使用时间片(time-slice)为2个时间单位的轮询(round-robin)算法。
要求
  • 找出每个进程的完成时间。
  • 找出每个进程的等待时间。
  • 找出每个进程的周转时间。
  • 找出每个进程的正规化周转时间(normalized turn around time,N.T.A.T.)。
  • 判断哪种调度算法能够更好地处理这些进程,为什么?

下面将按照题目要求来回答这些问题。

找出完成时间

要找出每个进程的完成时间,需要寻找以下几点:

  • 进程需要花费的时间,包括I/O和CPU时间。
  • 进程的I/O或CPU时间需要等待的队列或者调度表中,已经在运行的进程的时间可以帮助我们计算。

按照上述方式计算,得到的每个进程的完成时间如下表:

| 进程 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,从而无法满足其他进程的需求。