【操作系统学习】(一)进程调度

来源:互联网 发布:编程语言c 怎么用 编辑:程序博客网 时间:2024/06/07 23:44

进程调度的概念

进程切换:CPU资源的当前占用者的切换

  • 保存当前使用者的执行上下文
  • 回复下一个进程的执行上下文

处理机调度策略

  • 从就绪队列中挑选下一个占用CPU运行的进程
  • 从多个可用CPU中挑选就绪进程可使用的CPU资源

调度程序:挑选就绪进程的内核函数

调度策略

  • 依据什么原则挑选进程和线程?

调度时机

  • 什么时候进行调度?

调度时机

进程的状态

  • 创建
  • 就绪
  • 等待
  • 运行
  • 退出

内核运行调度程序的条件

  • 进程从运行状态切换到等待状态
  • 进程被终结了

对于不同的系统来说,这种条件都是不同的

抢占时系统

  • 中断请求被服务历程响应完成时
  • 当前进程被抢占
    • 进程时间片用完
    • 进程从等待切换到就绪

调度策略

进程在执行时,一般都处于在两种状态下进行转换:

  • CPU计算
  • I/O操作

每次调度决定在下一个CPU计算的时候将哪个工作交给CPU

调度的策略一般取决于下面的几个进程的指标

CPU使用率

  • CPU处于忙状态的时间百分比

吞吐量

  • 单位时间内完成的进程数量

周转时间

  • 进程从初始化到结束(包括等待)的总时间

等待时间

  • 进程在就绪队列中的总时间

响应时间

  • 从提交请求到发生响应所花费的总时间

对于不同的需求,就需要不同的调度算法,因为不同的需求对不同的指标的要求不同

处理机调度策略的目标

1、响应时间目标

  • 减少响应时间
  • 减少平均响应时间的波动

总结

所以需要使用低延迟的调度去改善用户的交互体验


2、吞吐量目标

增加吞吐量

  • 减少开销(操作系统开销,上下文切换)
  • 系统资源的高效利用(CPU,I/O设备)

减少等待时间

减少每个进程的等待时间

总结

操作系统需要保证吞吐量不受用户交互的影响


3、公平性目标

公平性定义

  • 保证每个进程占用相同的CPU时间
  • 保证每个进程的等待时间相同

公平一般会增加平均响应时间


调度算法

先来先服务算法(FCFS : First Come First Served)

描述

按照进程进入就绪状态的先后顺序进行排列
- 进程进入等待或结束状态时,就绪队列的下一个进程就占用CPU

优点

  • 简单

缺点

  • 平均等待时间波动较大
    • 短进程可能排在长进程后面
  • I/O资源和CPU资源利用率较低
    • CPU密集型进程会导致I/O设备闲置时,I/O密集型进程也会等待

改进

短进程优先算法

短进程优先算法(SPN,SJF,SRT)

描述

  • 选择就绪队列中执行时间最短进程占用CPU进入运行状态
    • 就绪队列按照预期的执行时间进行排序
  • 短剩余时间优先算法(SRT)
    • 可作为SPN算法的改进算法

优点

具有最优的平均周转时间

缺点

  • 可能会导致饥饿
    • 连续的短继承会使长进程无法获得CPU时间
  • 需要预知未来
    • 如何预估?
    • 简单的解决方法:询问用户
      • 用户欺骗就杀死相应进程
      • 用户不知道就还是只能导致饥饿

执行时间预估

用历史的执行时间去预估未来的执行时间

最高响应比优先算法(HRRN : Highest Response Ratio Next)

描述

选择就绪队列中响应比R最高的进程:(w:等待时间 s:执行时间

R=(w+s)/s

优点和其改进

  • 在短进程优先算法的基础上的改进
  • 不可抢占
  • 关注进程的等待时间
  • 防止无限期的推迟导致的饥饿

时间片轮转算法(RR : Round Robin)

时间片

  • 处理机分配资源的基本时间单位

描述

  • 时间片结束时,按先来先服务算法(FCFS)切换到下一个就绪进程
  • 每隔 n-1(n个进程的队列)个时间片进程执行一个时间片的时间

RB算法的优缺点和解决方案

  • 额外的上下文切换导致的开销
  • 时间片太大
    • 等待时间过长
    • 极限情况退化成先来先服务算法(FCFS)
  • 等待时间过小
    • 反应迅速,但上下文切换过于频繁
    • 大量的上下文切换影响到系统吞吐量
  • 时间片选择的目标
    • 选择一个何时的时间片长度
    • 经验规则:维持上下文开销处于1%以内

多级队列算法(MQ : Multilevel Queue)

描述

  • 就绪队列被划分成多个独立的子队列
    • 如:前台(交互)、后台(批处理)
  • 每个队列拥有自己的调度策略
    • 如:前台(RR)、后台(FCFS)
  • 队列间的调度
    • 固定优先级
      • 先处理前台,后处理后台
      • 可能导致饥饿
    • 时间片轮转
      • 每个队列都得到一个确定的能够调度其进程的CPU总时间
      • 如:80%CPU时间用于前台调度,20%CPU时间用于后台调度

多级反馈队列算法(MLFQ : Multilevel Feedback Queue)

描述

进程可在不同队列之间移动的多级队列算法
- 时间片大小随着优先级别的增加而增加
- 如进程在当前的时间片没有完成,就降一个优先级

特征

  • CPU密集型进程的优先级下降很快
  • I/O密集型进程停留在高优先级

公平共享调度算法(FSS : Fair Share Scheduling)

描述

  • FSS控制用户对系统资源的访问
    • 一些用户组比其他用户组更重要
    • 保证不重要的组无法垄断资源
      • 未使用的资源按比例分配
      • 没有达到资源使用率目标的组获得更高的优先级

总结

  • 先来先服务算法(FCFS : First Come First Served)
    • 不公平,平均等待时间较差
  • 短进程优先算法(SPN,SJF,SRT)
    • 不公平,平均周转时间最小
    • 需要精确预测等待进程的计算时间
    • 可能导致饥饿
  • 最高响应比算法(HRRN : Highest Response Ratio Next)
    • 基于SPN调度
    • 不可抢占
  • 时间片轮转算法(RR : Round Robin)
    • 公平,但平均等待时间较差(但是具备很好的交互性)
  • 多级反馈队列算法(MLFQ : Multilevel Feedback Queue)
    • 多种算法的集成
  • 公平共享调度(FSS : Fair Share Scheduling)
    • 公平作为第一指标