操作系统 SRTF与进程中包含CPU和IO时间
到目前为止,我们只考虑了CPU密集型作业。然而,进程可能需要一些IO操作或一些资源来完成其执行。在这个示例中,我们考虑了IO密集型进程。
在示例中,有四个作业,其进程ID为P1、P2、P3和P4。它们的到达时间和CPU爆破时间在下表中给出。
Process Id | Arrival Time | (Burst Time, IO Burst Time, Burst Time) |
---|---|---|
1 | 0 | (3,2,2) |
2 | 0 | (1,3,1) |
3 | 3 | (3,1,2) |
4 | 6 | (5,4,5) |
甘特图准备
在时间0时,进程P1和P2到达。由于我们使用的算法是SRTF,因此CPU将调度具有最短执行时间的进程。在此情况下,是P2进程。
从时间0到时间1,P2将处于运行状态。
P2还需要一些IO时间才能完成执行。执行1个单位后,P2的状态将从运行变为等待。处理器变为空闲以执行其他作业。由于此时除了P1之外没有其他可用的进程,所以P1将被执行。
以下图表显示了时间1处的进程和状态。进程P2进入等待状态,此时CPU处于闲置状态。
从时间1到时间3,由于P2处于等待状态,并且就绪队列中没有其他可用进程,因此在这段时间内只有可用的进程P1将被执行。
在时间3时,进程P3到达,总的CPU执行时间为5个单位。由于P1的剩余执行时间比P3少,因此CPU将继续执行P1。
因此,P1将在时间3到时间4保持运行状态。
由于P1是一个I/O绑定的进程。在时间单位4,它将从运行状态转变为等待状态。处理器变为空闲以执行其他作业。由于P2在时间4也变得可用,因为它已完成I/O操作,现在需要另外1个单位的CPU突发时间。P3也可用,需要总共5个单位的CPU突发时间。
具有最少剩余CPU突发时间的可用进程将被执行。在我们的情况下,这样的进程是P2,它需要1个单位的突发时间,因此它将获得CPU。
在时间点5,P2已经完成。P1仍处于等待状态。此时,唯一可用的进程是P3,因此它将获得CPU。
从时间5到时间6,P3将处于运行状态;同时,P1仍然处于等待状态。
在时间6,进程P4进入就绪队列。进程P1也已完成IO,并可执行。进程P3尚未完成,并且仍需另外2个单位的CPU运行时间。
从时间6到时间8,可用进程中,进程P3的剩余CPU运行时间最少,因此将给予P3使用CPU。
P3 需要进行一些IO操作才能完成其执行。在时间8时,P3 的状态将从运行中转变为等待状态。CPU 变为空闲以执行其他进程。P4 和 P1 进程均可用,其中剩余执行时间最少的进程将被执行。
从时间8到时间9,流程P1将被执行。
在时间9,进程P3的IO已经完成,现在它将可以与已经等待其轮到的P4一起处于就绪状态。为了完成其执行,它需要另外2个时间单位的执行时间。在此时刻,P1处于运行状态,而等待状态中没有进程存在。
从9点到10点,进程P1将被执行,因为它的剩余CPU执行时间比就绪队列中可用的进程P4和P3要短。
在时间10,P1的执行完成,现在CPU变成空闲状态。在就绪进程中,CPU使用最少的CPU执行时间的进程将获得CPU的使用权。
从时间10到12,进程P3将被执行直到完成,这是因为它的剩余CPU执行时间处于两个可用进程之间。它还需要额外的2个单位的CPU执行时间,因为没有其他进程将到达就绪状态,所以不会发生抢占,它将被执行直到完成。
在时间12,进程P3将完成,因为只有一个进程P4处于准备状态,因此P4将被分配到CPU。
P4需要在进行IO之前的5个CPU burst时间单位,因此它将在时间17之前执行(执行5个单位),然后将其状态从运行状态更改为等待状态。
在时间17时,进程P4将其状态从运行更改为等待。由于这是系统中唯一的进程,因此CPU将保持空闲,直到P4再次可用。
在时间21,P4将完成IO操作并变为就绪状态可用。
从时间21开始,进程P4将得到调度。由于没有其他进程在就绪队列中,因此处理器没有任何选择。它将执行直到完成。
最终甘特图
Process Id | Arrival Time | Total CPU Burst Time | Completion Time | Turn Around Time | Waiting Time |
---|---|---|---|---|---|
1 | 0 | 5 | 10 | 10 | 5 |
2 | 0 | 2 | 5 | 5 | 3 |
3 | 3 | 5 | 12 | 9 | 4 |
4 | 6 | 10 | 26 | 20 | 10 |
平均等待时间 = (5+3+4+10)/4 = 22/4个单位