操作系统原理第五章 CPU调度

本科生操作系统原理学习记录
学习记录全家桶

5.1 CPU调度概念

5.1.1 长程调度

长程调度:

  • 又称作业调度、高级调度
  • “新建” 状态换到"就绪 “状态”
  • 由调度程序选择
  • 控制多道程序的 “道/度” Degree

5.1.2 中程调度

中程调度:

  • 又称交换
  • 将进程在内存和外存空间换进换出
  • 目的:节省内存空间

5.1.3 短程调度

每个操作系统都有短程调度

短程调度:平常说的进程调度

  • 又称CPU调度、低级调度
  • 调度程序选择下一个执行进程

scheduler dispatch 调度程序调度

5.1.4 进程调度队列

就绪队列:在主内存中处于就绪状态并等待执行的所有进程集合

设备队列:等待某一 IO 设备的进程队列

进程的执行过程实际上就是进程在各种队列之间的迁移

单个处理器的话,处于 运行状态的 进程 最多只有一个,因为只有一个CPU

5.1.5 CPU调度过程

进程运行哪一个是由调度程序决定的,把选中的进程去运行的过程,是由分派程序决定的

调度程序 (scheduler)

  • 根据某种策略选择一个就绪进程
  • 一个CPU同时只能运行一个进程

分派程序(Dispatcher)

  • 负责把CPU的控制权转交给CPU调度程序
  • 切换上下文
  • 切换到用户态
  • 跳转到用户程序的适当位置并重新运行

分派延迟(Dispatch -

5.1.6 CPU调度方式

非抢占式调度

一旦把CPU分配给某进程后,系统不可以抢占已经分配的CPU并分配给其他进程

只有进程自愿释放CPU,才可以把CPU分配给其他进程

优点:易于实现、调度开销小,适合批处理系统

缺点:响应时间长,不适合交互式系统 (比如说,更高级的程序无法中断,

抢占式调度

调度程序可以把CPU控制权交给其他进程

优点:可以防止单一进程长时间独占CPU

缺点:系统开销大

5.1.7 CPU调度时机

排队买票的例子,running 到 ready 发生在,领导买票,你先候着吧,ready。等领导买完,你再买票

CPU调度可能发生在当一个进程:

  • 从运行转到等待(非抢占式)是自愿放弃CPU的
  • 从运行转到就绪(抢占式)被中断的
  • 从等待转到就绪(抢占式)这中间有可能发生调度,也可能不发生。
  • 终止运行(非抢占式) 自愿放弃CPU

从等待转到就绪(抢占式)

  • 就绪队列里的进程一个都没有:这时,等待态的进程会被马上调度
  • 就绪队列里有进程在,CPU也不空:等待态的进程的优先级非常高,

5.1.8 CPU调度准则

基本指标

CPU利用率:固定时间内CPU运行时间的比例

吞吐量:单位时间内运行完的进程数量

周转时间:进程从提交到运行结束的全部时间

等待时间:进程等待调度(不运行,就绪队列里)的时间片总和

响应时间:从进程提交到首次运行(不是输出结果)的时间段,也就是第一段的等待时间

周转时间 = 等待时间 + 运行时间

响应时间 <= 等待时间

优化方法

最大的CPU利用率

最大的吞吐量

最短的周转时间

最短的等待时间

最短的响应时间

解决方法

调度算法:就绪队列中哪个进程被选中运行

平衡点、中庸之道,没有完美的算法

5.2 调度算法

5.2.1 先来先服务算法FCFS

按照进程进入就绪队列的顺序来执行

等待时间定义:进程在等待队列中的所有时间总和,为周转时间减去运行时间

响应时间:从进程提交到首次运行的时间段

算法特点:

  • 实现简单,可使用FIFO队列实现
  • 非抢占
  • 公平
  • 适用于长程调度、后台批处理系统的短程的调度

缺点:

当一个长进程后面的多个短进程,让长进程先执行,会让后面的短进程等待较长时间,从而导致CPU和设备利用率降低

5.2.2 短作业优先算法SJF

调度策略:

关联到每个进程下次运行的CPU区间长度,调度最短的进程

经常用于作业调度

具有最短的平均等待时间

存在饥饿问题

非抢占式调度

指一旦进程拥有了CPU,只有当该CPU脉冲时间结束才会让出CPU的控制权

周转时间:P1:7 P2:10 P3:4 P4:11

等待时间:P1:0 P2:6 P3:3 P4:7

响应时间:

抢占式调度

当有比当前进程剩余时间片更短的进程到来时,新来的进程抢占当前进程获得CPU运行,这种调度算法也被称为最短剩余时间优先调度,简写为SRTF

5.2.3 优先级算法(PR)

基于进程的紧迫程度由外部赋予每个进程相应的优先级,CPU分配给最高优先级的进程

每个进程都有一个优先数,优先数为整数

默认:小优先数具有高优先级

目前主流的操作系统调度算法

调度模式:

抢占式

非抢占式

优点

  • 实现简单,考虑了进程的紧迫程度
  • 灵活,可模拟其它算法

存在问题

  • 饥饿 – 低优先级的进程可能永远得不到运行

解决方法

  • 老化 – 视进程等待时间的延长提高其优先数

5.2.4 时间片轮转(RR)

专为分时系统设计,类似于FCFS,但增加了抢占

  • 时间片:小单位的CPU时间,通常为10-100毫秒

  • 为每个进程分配不超过一个时间片的CPU。时间片用完后,该进程将被抢占并插入就绪队列末尾,循环执行

  • 假定就绪队列中有n个进程、时间片为q, 则任何一个进程的等待时间不会超过 (n-1) * q

5.2.5 多级队列调度(MLQ)

不同的类型需要不同的调度方法,因而产生了多级队列调度

分为很多个队列,每个队列的调度方法不一样

要素:

  • 队列数
  • 每一队列的调度算法
  • 决定新进程将进入哪个队列的方法

前台 – RR

后台 – FCFS

5.2.6 多级反馈队列调度(MLFQ)

举例:

三个队列:

  • Q0 – 时间片为8毫秒
  • Q1 –时间片为16毫秒
  • Q2 – FCFS

调度策略

  • 新进程进入Q0队列,得到CPU时间片8毫秒,如果不能在该时间片内完成,将被移动到队列Q1
  • Q0内的进程采用FCFS算法;
  • 进程在Q1队列得到CPU时间片16毫秒,如果还不能完成,将被移至队列Q2
  • Q1内的进程采用FCFS算法;
  • 进入Q2的进程将采用FCFS算法一次运行完

5.2.7 多处理器调度

慕课单元作业

有一个操作系统采用多级反馈队列调度,如下图所示。其中第一级采用时间片轮转算法,时间片大小为8ms,第二级同样采用时间片轮转算法,时间片大小为16ms,第三级采用先来先服务算法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RUIhPdwR-1641363910587)(E:\文档和PPT\大三课程学习\操作系统\Pictures\第五章\第五单元作业_01.png)]

根据下表给出的5个进程的到达时间、执行时间回答下面的问题。(时间以毫秒为单位)

进程‌ 执行时间‌ 到达时间‌
P1 50‌ 0‌
P2 10‌ 1‌
P3 5‌ 2‌
P4 30‌ 3‌
P5 23‌ 4‌

(1) 请画出5个进程执行的甘特图。

(2) 根据以上的调度算法,分别计算出每个进程的周转时间和响应时间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0InnXzDX-1641363910589)(E:\文档和PPT\大三课程学习\操作系统\Pictures\第五章\慕课第五单元作业_01.png)]

2、什么是抢占式调度?什么是非抢占式调度?各适用什么场合?

‏抢占式调度:调度程序可根据某种原则暂停某个正在执行的进程,将已分配给它的CPU重新分配给另一进程

非抢占式调度:当将资源(CPU)分配给进程时,该进程将保持CPU直到其终止或达到等待状态。

适用场合:

抢占式调度适应于 中断请求场合

非抢占式调度适应于 FCFS调度,IO请求等

3、考虑以下的一个基于优先级(优先数高优先级低)的调度算法,此算法采用根据等待时间和运行时间对优先数进行动态老化算法,具体算法如下:

a) 处于等待队列中的进程的优先数p根据等待时间t(每毫秒计算一次)进行变化,p=p-1;

b) 处于运行状态的进程的优先数p根据运行时间t(每毫秒计算一次)进行变化,p=p+1;

c) 优先数p每隔1毫秒重新计算;

d) 采用抢占式调度策略。

根据下表给出的5个进程的到达时间、执行时间回答下面的问题。(时间以毫秒为单位,当优先级相同时,先进入就绪队列的进程优先)

进程‌ 执行时间‌ 达到时间‌ 优先级p‌
P1 5‌ 0‌ 8‌
P2 6‌ 1‌ 4‌
P3 3‌ 2‌ 6‌
P4 4‌ 3‌ 2‌
P5 2‌ 4‌ 10‌

(1) 请画出5个进程执行的甘特图。

(2) 根据以上的调度算法,分别计算出每个进程的周转时间和响应时间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5snRTMG-1641363910589)(E:\文档和PPT\大三课程学习\操作系统\Pictures\第五章\慕课第五单元作业_03.png)]

4、比较作业调度和进程调度的不同点

(1)作业调度是宏观调度,它决定了哪一个作业能进入主存。进程调度是微观调度,它决定各作业中的哪一个进程占有中央处理机。

(2)作业调度是选符合条件的收容态作业装入内存。进程调度是从就绪态进程中选一个占用处理机。

5、考虑下面基于动态优先权的可抢占式调度算法,大优先数表示代表高优先权。当一个进程在等待CPU时(在就绪队列中,但未执行),优先数以α速率变化;当它运行时,优先数以速率β变化。所有进程程在进入就绪队列时被给定优先数为0。请问:

1)β>α>0时是什么算法?为什么?

‎FCFS算法,先来先服务。

因为进程运行时的速率 β 大于在就绪队列中的速率变化,一开始在就绪队列中都为0,但是最先开始运行的进程,优先级变化更快,在就绪队列中的进程抢占不到。只能等运行的进程结束才能运行下一个进行。

​ 就绪队列优先级 运行进程优先级

0 α 2α 3α… (n-1)α nβ

2)α<β<0时是什么算法?为什么?

LIFO算法,后到先出算法。

因为最新来到就绪队列中的进程的优先级为0,总是大于运行的进程(因为这个进程不论运行还是等待都是优先级在减小),所以最新来到的进程总是先执行。即使没有新的进程来到,在队列尾部的进程的优先级也要更大。

就绪队列优先级 运行进程优先级

α 2α 3α… (n-1)α + β 0

猜你喜欢

转载自blog.csdn.net/weixin_45788387/article/details/122322756