【Linux】进程的调度算法

       调度算法指的是根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法。

1.先来先服务算法

先来先服务算法(FCFS: First Come, First Served),是一种依据进程进入就绪状态的先后顺序排列的算法,当进程进入等待或者结束状态时,就绪队列中的下一个进程占用CPU。

优点:易于理解且实现简单。
           缺点:
            1.平均等待时间波动较大
            周转时间:进程从初始化到结束(包含等待时间)的总时间。
            短进程可能排在长进程后面,假如有三个进程,计算时间分别为P1(12),P2(3),P3(3),任务的到达顺序为P1,P2,P3,那么周转时间就是(12+15+18)/3=15。
            若任务的到达顺序为P2,P3,P1,则周转时间为(3+6+18)/3=9,可见平均等待时间波动较大。
            2.I/O资源和CPU资源的利用率较低
            CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也等待。

2.短进程优先算法

短进程优先算法(SPN:Shortest Process First),是一种选择就绪队列中执行时间最短的进程占用CPU进入运行状态的算法,其中,就绪队列按照预期的执行时间来排序,该算法具有最优平均周转时间。

SPN算法的可抢占改进:短剩余时间优先算法(SRT)

假设一个正在执行的进程的预期执行时间比较长,其剩余的执行时间大于某个将要执行的进程的预期时间时,允许该预期时间短的进程抢先执行。
           缺点:
            1.可能导致饥饿(连续的短进程流会使得长进程无法获得CPU资源);
            2.需要预知未来(如何预估下一个CPU计算的持续时间?简单的解决方法:询问用户  用历史的执行时间来预估未来的执行时间)。

3.最高响应比优先算法

最高响应比优先算法(HRRN:Highest Response Ratio Next),是一种选择就绪队列中响应比R值最高的进程的算法。响应比R定义如下:R=(w+s)/s,其中w表示等待时间,s表示执行时间,等待时间越长,R值越高。这解决了短进程优先算法中连续的短进程流会使得长进程无法获得CPU资源。

4.时间片轮转算法

时间片轮转算法(RR:Round-Robin),是一种让就绪队列上的每个进程只运行一个时间片的算法。当时间片结束时,按照FCFS算法切换到下一个就绪进程。

 缺点:
            1.额外的上下文切换;
            2.时间片太大,导致等待时间过长,极限情况退化成FCFS;
            3.时间片太小,导致反映迅速,产生大量上下文切换,而大量上下文切换开销会影响到系统吞吐量。

5.多级反馈队列算法

多级反馈队列算法(MLFQ:Multilevel Feedback Queue),是一种进程可以在不同队列间移动的多级队列算法,其实质是多种算法的集成。时间片大小随着优先级别增加而增加,若进程在当前的时间片还没有完成,则降到下一个优先级。CPU密集型进程(时间片大)的优先级下降很快,I/O密集型进程(时间片小)会停留在高优先级。

猜你喜欢

转载自blog.csdn.net/sustzc/article/details/81081364