进程调度算法总结
FCFS(First come first serve)先来先服务算法: 简单的排队算法,维护一个队列,后来的只能排在队尾等待。 非抢占。 缺点:不够智能,对于cpu密集型进程不友好,比如:一个只需要1ms运行时间的cpu密集型进程,但是之前有一个要读5s的io密集型进程。那么即使那个cpu密集型进程只需要运行1ms,但是必须等待足足5s才能运行! SJF(Shortest job first)最短作业优先: 这种算法假设我们可以预测每个进程需要运行的时间。比如有5个进程,分别运行时间是:1,3,2,5,1。 这个算法顾名思义,先取需要最短运行时间的进程来运行,所以执行顺序就是:1,1,2,3,5。其实就是算法里的贪心法。 SJF调度是最优调度(贪心法),但问题是怎么预测运行时间呢?所以其实这个算法只能作为比较,无法真正实现。 非抢占。 SJF算法还有一个变种:最短剩余时间优先。是选择剩余运行时间最少的进程来调度,所以这个算法是 抢占的 。 RR(Round robin)轮转调度: 每个进程被分配一个时间片,一般为20~50ms。每个进程只能最多使用一个时间片的时间,如果没用完时间片就运行完毕,那么可以直接调度下一个进程;如果用完了时间片还没运行完毕,系统会把该进程重新放到队尾。 时间片的选择是有要求的,因为在切换进程的时候要进行上下文切换。如果上下文切换的时间不比一个时间片小多少