处理机的调度层次分为三种:高级调度,中级调度,低级调度
高级调度又称为长程调度或作业调度,它的调度对象是作业。这个调度不一定有。
中级调度又称为内存调度。引入中级调度的目的是提高内存利用率和系统吞吐量。这个调度也不一定有。
低级调度又称为进程调度和短进程调度,它的调度对象是进程。这个调度是一定会存在的。
处理机调度算法的共同目标:
1.提高资源利用率
2.实现公平性使各个进程获得合理的CPU时间,不会发生进程饥饿现象。
3.尽可能实现系统资源使用的平衡性
4.策略的强制执行
对于几个不同的系统有他们不同的目标:
批处理系统的目标:1.平均周转时间短 2.系统吞吐量高 3.处理机利用率高
分时系统的目标: 1.响应时间快 2.均衡性
实时系统的目标:1.截止时间的保证 2.可预测性
进程调度的四种算法:
1.先来先服务(FCFS)
这个算法就很容易理解就是直接按照进程到达的次序进行调度,先来的进程先调度。
举例:
作业号 | 开始时刻 | 运行时间 | 开始时间 | 完成时间 | 周转时间 | 带权周转时间 | 等待时间 |
1 | 8 | 2 | 8 | 10 | 2 | 1 | 0 |
2 | 8 | 1 | 10 | 11 | 3 | 3 | 2 |
3 | 8.5 | 0.1 | 11 | 11.1 | 2.6 | 26 | 2.5 |
4 | 9 | 0.5 | 11.1 | 11.6 | 2.6 | 5.2 | 2.1 |
2.短作业优先(SJF)
短作业优先是值的是优先将短的进程先进行执行,进程越短优先级越高。
缺点:必须预知进程的运行时间、对长作业很不利有可能会出现饥饿现象、未考虑进程的紧迫程度不能保证紧迫性进程及时处理、无法实现人—机交互。
举例:
作业号 | 开始时刻 | 运行时间 | 开始时间 | 完成时间 | 周转时间 | 带权周转时间 | 等待时间 |
1 | 8 | 2 | 9.6 | 11.6 | 3.6 | 1.8 | 1.6 |
2 | 8 | 1 | 8 | 9 | 1 | 1 | 0 |
3 | 8.5 | 0.1 | 9 | 9.1 | 0.6 | 6 | 0.5 |
4 | 9 | 0.5 | 9.1 | 9.6 | 0.6 | 1.2 | 0.1 |
3.高响应比优先(HRRN)
在批处理系统中先来先服务算法考虑的是进程的等待时间没有考虑运行时间,而短作业优先则只是考虑了进程的运行时间而没有考虑进程的等待时间。而高响应比优先则是两者都有考虑。高响应比是什么呢:响应比=周转时间/运行时间=(等待时间+运行时间)/运行时间=1+等待时间/运行时间随着等待时间的增大响应比就会增大所以就可以解决了饥饿问题,而运行时间越短响应比也是越大所以短作业也是优先的。
举例:
作业号 | 开始时刻 | 运行时间 | 开始时间 | 完成时间 | 周转时间 | 带权周转时间 | 等待时间 |
1 | 8 | 2 | 9.1 | 11.1 | 3.1 | 1.55 | 1.1 |
2 | 8 | 1 | 8 | 9 | 1 | 1 | 0 |
3 | 8.5 | 0.1 | 9 | 9.1 | 0.6 | 6 | 0.5 |
4 | 9 | 0.5 | 11.1 | 11.6 | 2.6 | 5.2 | 2.1 |
4.最短剩余时间(SRTN)
最短剩余时间是抢占式的算法,一个进程在运行时可能出现运行一半被打断的现象出现。每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短那么就会抢占。
举例:
作业号 | 开始时刻 | 运行时间 | 开始时间 | 完成时间 | 周转时间 | 带权周转时间 | 等待时间 |
1 | 8 | 2 | 9.6 | 11.6 | 3.6 | 1.8 | 1.6 |
2 | 8 | 1 | 8,8.6 | 9.1 | 1.1 | 1.1 | 0 |
3 | 8.5 | 0.1 | 8.5 | 8.6 | 0.1 | 1 | 0 |
4 | 9 | 0.5 | 9.1 | 9.6 | 0.6 | 1.2 | 0.1 |
我们可以看到2号作业在8.5这个时刻它的剩余时间为0.5而3号作业的剩余时间为0.1所以先让3号作业抢占了因此又从8.6时刻开始运行剩下的0.5。