面试基础篇|操作系统复习(四)——进程调度概述

558 阅读7分钟
1. CPU调度的三个层次
  • 高级调度(作业调度)

    • 按一定规则从外存的作业后卑队列中挑选一个作业调入内存中,并创建进程。
    • 每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
    • 频率低
    • 外存→内存(面向作业)
    • 进程状态:无→创建态→就绪态
  • 中级调度(内存调度)

    • 按照某种策略决定将哪个处于挂起状态的进程重新调入内存。
    • 频率中等,中级调度频率比高级调度要高。
    • 外村→内存(面向进程)
    • 进程状态:挂起态→就绪态
  • 低级调度(进程调度)

    • 按照某种策略从就绪队列中选取一个进程,将CPU分配给它。
    • 操作系统最基本的一种调度,在一般的操作系统中,都必须配置进程调度。
    • 频率高,一般几十毫秒一次。
    • 内存→CPU
    • 进程状态:就绪态→运行态
2. 进程调度的时机
  • 当前运行的进程主动放弃CPU

    • 进程正常终止
    • 运行异常终止
    • 进程主动请求阻塞(等待I/O)
  • 当前运行的进程被动放弃CPU

    • 时间片用完
    • 更紧急的任务需要处理(I/O中断)
    • 有更高优先级的进程
  • 不能进行进程调度

    • 在处理中断过程中
    • 进程在操作系统内核程序临界区(PS:内核程序临界区是用来访问内核数据结构的,如进程就绪队列;临界资源访问是互斥的)中
    • 原子操作过程中(原语)
3. 进程调度的方式
  • 非剥夺调度方式,又称非抢占方式

    • 只允许进程主动放弃CPU
  • 剥夺调度方式,又抢占方式

    • 可以剥夺进程的CPU
4. 进程切换的过程
  • 对原来运行过程各种数据的保存
  • 对新进程各种数据的恢复
5. 调度算法的评价指标
  • CPU利用率

    • CPU“忙碌”的时间占总时间的比例
    • 公式:忙碌时间/总时间
  • 系统吞吐量

    • 单位时间内完成作业的数量
    • 公式:作业总量/花费总时间
  • 周转时间

    • 作业被提交给系统开始,到作业完成为止的这段时间间隔
    • 公式:作业完成时间-作业提交时间
  • 等待时间

    • 进程/作业处于等待CPU状态时间之和
  • 响应时间

    • 用户从提交请求到首次产生响应所用的时间
6. 调度算法
  • 先来先服务(FCFS)

    • 算法思想:主要从“公平”的角度考虑

    • 算法规则:按照作业/进程到达的先后顺序进行服务

    • 用于作业/进程调度

      • 作业调度:考虑哪个作业先到达后备队列
      • 进程调度:考虑哪个进程先到达就绪队列
    • 非抢占式的算法

    • 优点:公平、算法实现简单

    • 缺点:排在长作业后的短作业需要很长的等待时间,带权周转时间很大。对短作业不利,长作业有利。

    • 不会导致饥饿(PS:某进程/作业长期得不到服务)

  • 短作业优先服务(SJF)

    • 算法思想:追求最少的平均等待时间、平均周转时间、平均带权周转时间

    • 算法规则:服务需要花费时间最短的作业/进程优先得到服务

    • 用于作业/进程调度

      • 作业调度:每次调度选择当前已到达且运行最短的作业
      • 进程调度:每次调度选择当前已到达且运行最短的进程
    • 非抢占式的算法

    • 抢占式算法

      • 最短剩余时间优先算法(SRTN):当新进程的剩余时间小于当前运行进程的剩余时间,新进程就会抢占CPU
    • 优点:“最短的”平均等待时间、平均周转时间

    • 缺点:不公平。对短作业有利,对长作业不利。

    • 可能会导致饥饿(PS:某进程/作业长期得不到服务)

  • 高响应比优先

    • 算法思想:要综合考虑作业/进程的等待时间和要求服务的时间

    • 算法规则:每次调度计算响应比,选响应比最高的为其服务,响应比=(等待时间+要求服务时间)/ 要求服务时间

    • 用于作业/进程调度

      • 作业调度:每次作业调度计算响应比,选响应比最高的作业为其服务
      • 进程调度:每次进程调度计算响应比,选响应比最高的进程为其服务
    • 非抢占式的算法

    • 优点

      • 综合考虑了等待时间和运行时间
      • 等待时间相同时,服务时间短优先(短作业优先服务)
      • 服务时间相同时,等待时间短优先(先来先服务)
    • 不会导致饥饿(PS:某进程/作业长期得不到服务)

  • 时间片轮转(RR)

    • 算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应

    • 算法规则:按照各进程的就绪队列,轮流让各个进程执行一个时间片;在时间片内未执行完,则会被剥夺CPU,将进程重新放入就绪队列队尾

    • 用于作业/进程调度

      • 进程调度:只有作业放入内存建立进程后,才能分配CPU
    • 抢占式算法

      • 由时钟装置发出时间中断通知CPU时间片已到,剥夺当前进程的CPU
    • 优点:公平、响应快,适用于分时操作系统

    • 缺点:由于高频率的进程切换,有一定开销;不区分任务的紧急程度

    • 不会导致饥饿(PS:某进程/作业长期得不到服务)

    • 时间片长短

      • 时间片过长,算法会退化为先来先服务算法
      • 时间片过短,导致进程调度、切换频繁,系统需要花大量时间处理进程切换
  • 优先级调度算法

    • 算法思想:根据就任务的紧急程度来决定处理顺序

    • 算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程

    • 用于作业/进程调度

      • 作业调度
      • 进程调度
    • 非抢占式算法

    • 抢占式算法

    • 优点:区分紧急、重要的程度,灵活调整作业/进程的偏好程度,适用于实时操作系统。

    • 缺点:若有源源不断的高优先级进程到来,会导致饥饿

    • 会导致饥饿(PS:某进程/作业长期得不到服务)

    • 进程优先级

      • 系统进程优先级高于用户进程
      • 前台进程优先级高于后台进程
      • 操作系统更偏好I/O型进程(I/O繁忙型进程)
  • 多级反馈队列调度算法

    • 算法思想:其他调度算法的折中权衡

    • 算法规则

      • 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
      • 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还没结束,则进入下一等级队列队尾。若已经在最低级的队列,则重新放回该队列队尾
      • 只有当第n级队列为空时,才会为第n+1队头的进程分配时间片
    • 抢占式算法

      • 抢占式的算法,在n级队列的进程运行过程中,如更高级的队列(<n)中进入了一个新进程,新进程会抢占CPU;原来正在执行的进程放回n级队列的队尾
    • 优点:公平(FCFS优点)、响应快(RR优点)、短进程处理时间较快(SJF优点)

    • 会导致饥饿(PS:某进程/作业长期得不到服务)

7. 总结
  • 重点:进程调度的方式。
  • 重点:进程切换的过程。
  • 重点:进程调度算法的算法思想,结合日常开发的理解,学习其中的思想。
  • 请各位大佬发现错误,能指导菜鸟小弟
  • 菜鸟也想努力进大厂,加油