操作系统中的进程调度

三种调度模式

调度 内容 队列 频率
高级调度(作业调度、长程调度JCB) 外存输入井,分配必要资源、建立进程(内存与辅存之间) 后备队列
中级调度(中程调度 PCB) 外存->内存 就绪队列,阻塞队列
低级调度(进程调度、短程调度PCB) 内存->占用处理机 挂起队列、就绪队列

image-20210306134430248

作业调度

  • 外存上处于后备状态的作业中挑选一个获多个作业,给他们分配内存、IO设备等必要资源,并建立相应进程,使得她们获得竞争处理机的权利。
  • 内存与辅存之间的调度
  • 每个作业只调度一次,调出一次。
  • 多道批处理中大多配有作业调度
  • 即从后备队列中选进程放进就绪队列

内存调度

  • 提高内存利用率和系统吞吐率(并不是必须的,不是必须要通过内存调度)
  • 挂起态就绪态之间转换。
  • 暂时不能运行的挂起(放挂起队列),具备运行条件且稍有空闲的时候,就外存上的进程重新调到内存,修改位就绪态,挂在就绪队列

挂起态

  • 暂时不能运行的进程调至外存等待

进程调度

  • 就绪队列中选取一个进程,将处理机分给他
  • 操作系统中最基本的一种调度,不可或缺
  • 就绪态运行态之间转换

FCFS

  • 最简单
  • 可用于作业调度进程调度
  • 作业调度:后备队列中选最先进入的1个or几个,分配内存等资源,创建资源,进入就绪队列
  • 进程调度:就绪队列中选最先进入的1个,分配CPU,投入运行,该进程一直运行到完成or发生某件事而阻塞后才放弃(非抢占式)

特点

  • 非抢占式算法(不可剥夺算法)
  • 对长作业有利,对短作业不利
  • 利于CPU繁忙型(长作业),不利于IO繁忙型(短)
  • 不能作为分时or实时系统算法

SJ(P)F

  • Shortest Job (Process) First
  • SJF:作业调度。最短作业优先在后备队列中被选择。
  • SPF:进程调度。最短进程优先在就绪队列中被选择。
  • 王道上面和一些博客上好像都默认这个是非抢占式的。它们可能将抢占式的叫做最短剩余作业时间优先,之类的。
    • OS课上,直接把这个分成抢占式SPF和非抢占式SPF

特点

  • 可能对长作业造成饥饿
  • 未考虑紧迫程度
  • 根据提供的估计时间,可能并不准确,不能保证SJ(P)F

优先级调度算法(FPF)

  • 其实FCFS、SJF、SPF,这些哪些不是优先级调度算法呢?只不过优先级不同罢了。而这里的FPF侧重讲的是紧迫程度,优先级为紧迫程度。
  • 也是即可用于作业调度进程调度
  • 可分成剥夺式优先级调度算法 and 非剥夺式优先级调度数算法
  • 也可分成静态优先级 (在创建进程时确定)and 动态优先级

容易出现优先级倒置现象

  • 优先级反转:低优先级任务Z有一个资源R,高优先级任务A需要资源R,A想要R但是缺乏资源,处于阻塞状态,等待Z释放R,可是Z分配到的CPU时间少,此时在高低优先级之间优先级的任务就可以获得很长时间的CPU时间,比A和Z都多。
  • 如果A是忙等而不是阻塞等待,那可能A永远无法获得资源。Z永远分不到CPU,Z永远不会释放R,A永远拿不到R,永远等不到下一步。(这算是死锁吗)

优先级倒置解决方案

  • 设置优先级上限。给临界区一个高优先级,进入临界区的进程都会获得这个高优先级
  • 优先级继承。当一个高优先级进程等待一个低优先级的资源时,低优先级进程会短暂获得高优先级进程的优先级别。释放资源后,回归原来优先级。
  • 临界区禁止中断。通过禁止中断来保护临界区,采用此种策略的系统只有两种优先级:可抢占优先级和中断禁止优先级。前者为一般进程运行时的优先级,后者为运行于临界区的优先级。

高响应比优先调度算法

  • 主要用于作业调度,是对FCFS和SJF的一种平衡
  • 同时考虑了每个作业的等待时间估计的运行时间
  • \(R_p = \frac{等待时间+要求服务时间}{要求服务时间} = \frac{相应时间}{要求服务时间}\)
  • 克服饥饿,兼顾长作业
  • 调度前得计算响应比,会增加系统开销

时间片轮转法

  • 进程调度
  • 按照FCFS来排队,但是时间片一样,CPU分给首进程,执行一个时间片,用完之后,有一个计时器发出时钟中断请求,调度程序便据此停止该进程的执行,将其送到就绪队列末尾。
  • 主要适用于分时系统

多级反馈队列调度算法

  • image-20210306154615158
  • 多个就绪队列,按队列给优先级。1级队列优先级最高。
  • 优先级越高的队列内部的进程分配的时间片就越短。例如,i+1的时间片会比i大一倍。
  • 新进程进入内存,首先放入第一级队列末尾,按FCFS等待。
  • 在i队列执行了一次时间片,但是还没执行完,就放到(i+1)队的末尾。
  • 第n队列退化为时间片轮转
  • 当高优先级的队列里面没有进程了,才会将CPU分给低优先级的队列。
  • 可抢占式的。低优先级队列Z中的P进程正在运行,此时新进程N进入高优先级队列A,那么N将抢占P的CPU,并将P放到Z末尾

批处理系统、分时系统和实时系统中,各采用哪几种进程(作业)调度算法?

批处理系统常用调度算法:

  • 先来先服务:FCFS
  • 最短作业优先
  • 最短剩余时间优先
  • 响应比最高者优先

分时系统调度算法:

  • 轮转调度
  • 优先级调度
  • 多级队列调度
  • 彩票调度

实时系统调度算法:

  • 单比率调度
  • 限期调度
  • 最少裕度法

参考

posted @ 2021-03-06 15:54  xxxuanei  阅读(808)  评论(0编辑  收藏  举报