状态变化的时候会出现调度,特别是跟运行相关的状态变化
调度原则
评价调度性能的指标:
调度算法
周转时间=等待时间+处理时间
进程执行时间越短,优先级越高:
若是不可抢占,新来的放入就绪态,若是可抢占,旧的放入就绪态。
缺点:
预测下一个时刻会执行多少秒
如果考虑等待时间:
调度算法2:
让各个进程轮流调用cpu来执行
缺点:
好像FCFS还更好一点,因为FCFS离没有频繁地上下文切换,所以总的等待时间会降低,但它不能像RR,每一个进程及时得到响应
有没有更好的算法可以兼顾呢
设置多级队列:
将就绪进程分入很多队列,不同队列采用不同的调度算法,根据队列优先级来调度
多了一个反馈,进程的特征可以在队列中的位置有所反应,一旦用完一个时间片,就使其优先级降低,使得交互性比较好的,放入优先级比较高的队列里。使得IO密集型的任务,cpu密集型的任务逐渐放入优先级较低的队列里。
FFS重点强调公平
评价
实时调度
静态优先级调度:在任务执行之前,已经把优先级确定,根据优先级完成调度
动态优先级调度:在执行过程中,优先级会发生变化
两种调度算法:
多处理器调度和优先级反转:
(负载平衡,使得CPU任务比较均匀)
原因在于高优先级在等待低优先级处理共享资源的过程中,有另一个比低优先级级别要高的进程来了。
把T3的优先级提高,比T2要高