调度
由于系统资源有限,所以需要给要运行的任务好好安排一下,如何安排就是操作系统调度要做的事情
高级调度
将磁盘中的程序加载进入就绪队列 - 进程的创建态 到 就绪态所作的事情
低级调度
最基本的一种调度,将就绪队列的任务调度上CPU运行
中级调度
资源不足的时候,可以将就绪队列中的某些进行进行挂起,它就不占用资源了【暂时放到外存中】,后序在合适的时候再次调度进就绪队列
调度程序触发时机
看系统是否支持内核级线程,不支持则还是进程调度,支持的话就是线程调度了
- 创建新进程
- 进程被销毁
- 进程阻塞
- 阻塞进程被唤醒
调度算法评估指标
CPU 利用率
系统吞吐量
周转时间
等待时间
完成时间 - 到达时间 - CPU运行时间 - IO设备使用时间 = 等待时间
响应时间
调度算法
FCFS 先来先服务
短作业优先 SJF
最高响应比优先 HRRN
因为第一个算法考虑的是作业等待时间,第二个算法考虑的是作业执行时间;现在这个直接兼顾两个
前三种总结
时间片轮转 RR
要注意时间片的设置,如果太大,响应时间就特别慢了;如果太小,线程切换开销就特别大了
优先级调度
- 系统进程优先级高于用户进程
- 前台进程高于后台进程
- I/O型进程高于CPU密集型【提升资源利用率,提高吞吐量】
- 可以动态调整优先级【比如:根据运行时间来调整】
多级反馈队列
队列与队列之间可以采用不同的调度算法;队列内部也有自己的调度算法
多个就绪队列,这些就绪队列从上到下优先级越来越小,时间片越来越大。【只有 k 级队列为空,才会对 k+1 级队列进行调度;如果某个进程在CPU上运行的时候被优先级高的进程抢占了CPU资源,那么会将其放入原队列末尾】
第一次进入的进程先放入第一个就绪队列然后上CPU执行,如果没有完成就将其插入到下一层就绪队列,直到它到达最后一级就绪队列,要是上CPU一次还未执行成功,那就将其插入最后一层队列的末尾