到现在为止, 我们仅考虑CPU绑定作业。但是, 该线程可能需要一些IO操作或一些资源来完成其执行。在本示例中, 我们正在考虑IO绑定线程。
在示例中, 有四个作业ID为P1, P2, P3和P4的作业可用。下表列出了它们的到达时间和CPU突发时间。
线程编号 | 到达时间 | (爆发时间, IO爆发时间, 爆发时间) |
---|---|---|
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以5个单元的总CPU突发时间到达。由于P1的剩余突发时间短于P3, 因此CPU将继续执行。
文章图片
因此, P1从时间3到时间4将保持在运行状态。
文章图片
文章图片
由于P1是IO绑定的线程。在时间单元4, 它将从运行状态更改为等待状态。处理器可以自由执行其他作业。由于P2在4时刻也已可用, 因为它已经完成了IO操作, 并且现在还需要另外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处于运行状态, 而没有任何线程处于等待状态。
文章图片
文章图片
【带有进程的SRTF包含CPU和IO时间图解实例】从时间9到10, 由于进程P1的剩余CPU突发时间少于就绪队列中可用的进程P4和P3, 因此它将被执行。
文章图片
文章图片
在时间10, P1的执行完成, 现在CPU变成了偶像。在就绪进程中, CPU突发时间较短的进程将使CPU运转。
从时间10到12, 由于进程P3的剩余CPU突发时间是两个可用进程之间的时间, 因此它将执行到完成为止。它需要2个单位的CPU突发时间, 因为没有其他进程会到达就绪状态, 因此不会进行抢占, 并且会执行到完成为止。
文章图片
文章图片
在时间12, 进程P3将完成, 因为在就绪状态下只有一个进程P4可用, 因此将为P4提供CPU。
文章图片
P4在IO之前需要5个单位的CPU突发时间, 因此它将执行到时间17(5个??单位), 然后将其状态从运行更改为等待。
文章图片
在时间17, 线程P4将其状态从运行改变为等待。由于这是系统中唯一的进程, 因此CPU将保持偶像状态, 直到P4再次可用为止。
文章图片
文章图片
在时间21, P4将通过IO操作完成, 并在就绪状态下可用。
文章图片
从时间21开始, 线程P4将被调度。由于没有其他进程处于就绪队列中, 因此处理器别无选择。它将执行到完成。
文章图片
最终甘特图:
文章图片
Process Id | 到达时间 | 总CPU突发时间 | Completion 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 |
推荐阅读
- PDFBox添加多行
- Android中ViewPager实现滑动条及与Fragment结合的实例教程
- [Android Pro]开发一流Android SDK
- Spring,@Controller,@RequestMapping, @ResponseBody,@RequestParam
- [Android Pro]开发一流的 Android SDK(Fabric SDK 的创建经验)
- Android之动画
- Android 走向MD的配色风格
- Android学习 之 ColorStateList按钮文字变色
- mac 下载软件无法将程序拖移至app出现错误