新手学操作系统(第四周)

1.调度

调度就是OS对时间片的分配方法

判断调度算法好坏的标准:

        1.平均周转时间(就是把周转时间取平均数)

       周转时间=进程的完成时间-进程的到达时间

        2.平均响应时间

        相应时间=OS第一次运行进程的时间-进程的到达时间

5个理想化假设:

        1.每一个进程运行相同的时间

        2.所有进程几乎同时到达

        3.一旦开始,每个进程一直运行直到完成

        4.所有的进程都只使用CPU,不发起I/O操作

        5.每个进程的运行时间是已知的

2.先进先出(FIFO)调度算法

        先进先出调度(First In First Out或FIFO)有时也叫先到先服务(First Come First Served或FCFS)。

        我们一起看一个简单的例子。想象一下,3个工作A、B和C在大致相同的时间(t时间=0)到达系统。因为FIFO必须将某个工作放在前面,所以我们假设当它们都同时到达时,A比B早一点点,然后B比C早到达一点点。假设每个工作运行10s。这些工作的平均周转时间(average turnaround time)是多少?
        从下图可以看出,A在10s时完成,B在20s时完成,C在30s时完成。因此,这3个任务的平均周转时间就是(10+20+30)/3=20。计算周转时间就这么简单。

在上面5个假设都成立的条件下,FIFO调度算法是最优的。最优的意思的:平均周转时间最少。

平均周转时间最少的原因是以上面为例子:

        第1个被调度的进程,周转时间>=10秒

        第2个被调度的进程,周转时间>=20秒

        第3个被调度的进程,周转时间>=30秒

        ......

3.SJF调度算法

        在4个假设都成立的条件下:1.所有进程几乎同时到达;2.一旦开始,每个进程一直运行直到完成;3.所有的进程都只使用CPU,不发起I/O操作;4.每个进程的运行时间是已知的,SJF调度算法是最优的。最优的意思是:平均周转时间最少。平均周转时间最少的原因是:

        越短的进程越先运行,其他进程等待的时间就越短。

4.STCF调度算法

        每当有新的进程到达时,就把新进程的运行时间和老进程剩下的运行时间排序,越小的越先调度。

在上面2个假设条件:1.所有的进程都只使用CPU,不发起I/O操作;2.每个进程的运行时间是已知的成立的条件下,STCF调度算法是最优的。最优的意思是:平均周转时间最少。平均周转时间最少的原因:

        每当有新进程到达时,就对新的进程和老进程的剩下运行时间采用SJF的调度方式进行调度。

上面的调度算法,按照响应时间来判断都不好。

什么样的调度算法的平均相应时间比较好?

5.RR调度算法

        RR调度算法的平均响应时间比较好。比较好的原因:RR调度算法把CPU的时间分为一个个时间片,然后进程轮转着使用CPU的时间片。

6.MLFQ调度算法(非常重要,现在的调度算法一定是有借鉴这个算法)

        目的:在进程真实运行环境中,努力做到同时减少周转时间和响应时间。

        方法:利用历史信息,来预测进程未来的行为

        思路:利用多级队列(不同队列不同优先级),多级队列和历史信息来模拟SJF调度算法

        模拟方法:如果MLFQ利用历史信息,预测到一个进程是需要CPU时间比较多的进程,就把这个进程放到后面运行;(下规则4a)

        如果MLFQ利用历史信息,预测到一个进程是需要CPU时间比较少的进程,就把这个进程放到前面运行。(下规则4b)

MLFQ把新进程放入最高优先级队列。(下规则3)

        规则1.高优先级队列中的进程先运行。

        规则2.同一个优先级队列中的进程轮转进行。

        规则3.新进程放入最高优先级队列。

        规则4a.如果一个进程在使用自己的时间片的过程中,没有发起I/O操作,MLFQ就预测这是一个需要CPU时间比较多的进程,就把这个进程放到下一个优先级队列中。

        规则4b.如果一个进程在使用自己的时间片的过程中发起了I/O操作,MLFQ就预测这是一个需要CPU时间比较少的进程,就保持进程的优先级不变。

采用规则1、2、3、4a、4b的MLFQ算法的缺点:

        1.预测未来不可能完全准确;

        2.可以欺骗MLQT调度算法:在每个时间片结束之前,发起I/O操作;

        3.最高优先级队列中2.中类型的进程多了后,低优先级队列中的进程就没有办法被调度到CPU上去执行。

缺点2、3的解决方法:

        给每一个进程一个时间配额,当进程用完时间配额后(不管怎么用的),就把进程放到下一个优先级队列中。同一个优先级队列的进程时间配额是一样的,但是不同优先级队列的进程的时间配额不一样。一般来说,高优先级队列的进程的时间配额少,低优先级队列的进程的时间配额多。

缺点1的解决方法:

        每隔一段时间,MLFQ把所有的进程全部重新放入最高优先级队列中。

MLFQ调度算法:

        规则1.高优先级队列中的进程先运行。

        规则2.同一个优先级队列中的进程轮转进行。

        规则3.新进程放入最高优先级队列。

        规则4.给每一个进程一个时间配额,当进程用完时间配额后,就放入下一个优先级队列;

        规则5.每隔一段时间,把所有的进程全部重新放入最高优先级队列中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值