现代操作系统day7:进程的调度

文章目录

  • 进程调度原则
    • 依据什么来调度进程?
    • 评价指标:
  • 调度算法
    • 先来先服务
    • 短进程优先
    • 最高响应比优先
    • 轮循
    • 多级反馈队列
    • 公平共享进程

进程调度原则

依据什么来调度进程?

调度:schedule
进程访问内存和I/O,让CPU进行计算

进程很多时候都是这样的工作状态:在某个时刻,进程占用CPU百分比很高,其他很低。我们希望CPU尽可能忙,充分利用CPU。
因此,需要辨别当前CPU繁忙的进程和当前I/O繁忙的进程,将它们合理安排

进程占用CPU百分比低的例子:进程要读一个硬盘中的文件,硬盘将其传到内存需要很长的时间,这时候CPU就会空闲着

评价指标:

CPU利用率:CPU处于忙状态所占时间的百分比。越高,效率越好
吞吐量:单位时间内完成的进程数量。越高,效率越好
周转时间:从进程初始化到结束所花费的时间,包括进程启动完等待的时间和服务时间。越小越好
某个进程的周转时间=等待时间+执行时间
等待时间:处于就绪态的进程等待多长时间才切换到运行态。越短越好
响应时间:从用户的一个请求(例如外设)被提交到产生第一次响应的时间。越快越好

吞吐量是操作系统的计算带宽,响应时间是操作系统的计算延迟

进程的“快”,指的是传输文件时的高带宽,玩游戏时的低延迟(操作之后很快响应)
这两个是一对矛盾,需要我们平衡矛盾进行折衷

目标:
减少响应时间,减少平均响应时间的波动,增加吞吐量-减少开销,减少等待时间

公平:每个进程都等待相同的时间

调度算法

一般系统用的有:
批处理系统:FCFS——先来先服务、短进程优先、SRRN——最高响应比优先
交互式系统:Round Robin——轮循、多级反馈队列(考虑等待时间和执行时间,通常会用)、FSS公平共享调度(等待时间和执行时间公平共享)
实时系统

先来先服务

例如:3个进程,哪个任务先到达就执行谁

优点:简单
缺点:
1)平均等待时间波动较大(取决于先来的进程的执行时间),如果先来的进程执行时间很长,会导致所有进程的周转时间之和很长
2)可能导致I/O和CPU之间的重叠处理

CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也在等待

改进:短进程优先

短进程优先

按照预测的进程完成时间来将任务入队列,时间最短的进程排在队列最前方

如果进程A执行时,队列中来了个进程B,其执行时间比A还要短,有两类处理方法:
1.不理它(进程B不会抢占进程A)
2.抢占式(A执行完一个时间片后,比较剩余的时间片与进程B的执行时间,如果B更短,就让B占用CPU执行,A挂到队列)

优点:平均等待时间是所有算法中最短的
缺点:
1)可能导致饥饿

短进程算法中,如果系统不停产生新的短进程,会导致长时间的进程一直无法执行(饥饿)

2)需要预知未来,很难估计进程什么时候结束

预估进程时间常用的方法:可以根据进程的执行历史,预估下一次进程大概的执行时间

最高响应比优先

响应比=(等待时间+执行时间)/执行时间=等待时间/执行时间+1
在短进程优先的基础上,最高响应比优先考虑了进程的等待时间(也就是响应比)。选择响应比更高的进程放在队列的前面

优点:
相对于短进程优先,有效缓解了饥饿现象
缺点:
1)该算法不支持抢占
2)和短进程优先同样的问题:需要预估等待时间和执行时间

轮循

给一堆进程分配总的时间,而这总的时间又被划分为多段一定长度的时间片一个进程在时间片内运行,当该进程完成了工作又或者时间片用完了,就轮到另一个进程在新的时间片内运行。重复循环上述过程,直到所有进程都完成了工作
例如:
A-(到时间了)-B-(到时间)-C-(限定时间内C完成所有工作)-D-(到时间)-A(到时间)-B(限定时间内B完成所有工作)-D-(到时间)-A(限定时间内A完成所有工作)-D。。。

优点:每个进程都有机会执行,相对公平
问题:
1)频繁的进程切换会带来额外的上下文切换,相比其他算法会带来额外的开销
2)时间片的设置,合适的时间片
改进:多级队列

多级队列
把就绪进程分成很多个队列,例如最高级的队列采取轮循,最低级的队列采用FCFS,根据不同进程的特点选择队列
在执行过程中,若进程的执行特点发生变化

多级反馈队列

在多级队列的思想上,
例如,若进程一开始是交互式,需要大量进行I/O操作(I/O密集型),就把它的级别设的较高时间片更短);后来进行大量计算,占用CPU时间比较长(CPU密集型),时间片用的很快,用完一个时间片就把它降低级别,多次操作后该进程进入到很低级别的队列时间片更长),

优点:动态调整优先级,根据IO密集型还是CPU密集型来选择队列

公平共享进程

若需要多人多用户共享计算机,要对资源公平,则用到公平调度策略,例如linux的complete fair scheduling

评价算法的方法:
1)建立队列,概率论
2)建立模拟器,跑算法
3)最好能在真正的计算机系统跑一下

实际上,调度算法除了受到上下文切换或其他资源的影响,和硬件也有很大关系

调度算法比起实际计算机的调度算法还有很大差别,但实际的调度算法的特征在本章都有所体现,例如公平性最小等待时间尽量减少响应时间

你可能感兴趣的:(操作系统)