王道操作系统笔记———— 处理机调度
Posted Xiu Yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了王道操作系统笔记———— 处理机调度相关的知识,希望对你有一定的参考价值。
文章目录
一、调度的概念
1.1 调度的基本概念
处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法的选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
1.2 调度的层次
- 高级调度: 内存空间有限时,无法将用户提交的作业全部放入内存,需要按一定的原则从外存的作业 后备队列 中挑选一个作业调入内存,并创建进程。
- 低级调度: 在内存中的按照某种策略从 就绪队列 中选取一个进程,将处理机分配给它。
- 中级调度: 内存不够时,可将某些进程的数据调出外存。等内存空闲或者进程需要运行时,按照某种策略从 挂起队列 中选择合适的进程重新调入内存。
注:① 进程调度 时操作系统中 最基本 的一种调度。
② 每个作业只调入一次,调出一次。
1.3 补充:七状态模型
暂时调到外存等待进程状态为 挂起状态,挂起状态又分为:就绪挂起、阻塞挂起。
挂起和阻塞的区别: 两种状态都不可获得 CPU 服务,但 挂起状态将进程调到外存,而阻塞态还在内存中。
二、调度的时机、切换与过程
2.1 进程调度的时机
进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。
注:① 临界资源: 一个时间段内只允许一个进程使用的资源,各进程需要 互斥地 访问临界资源。
② 临界区: 访问临界资源的那段代码。临界区分为:内核程序临界区与普通临界区。
内核程序临界区: 一般用来访问 某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)
普通临界区: 访问的临界资源 不会直接影响 OS 管理工作 。因此在访问普通临界区时,可进行调度与切换。
在进程处于临界区时,不能进行处理机调度。(×)
解析:普通临界区可进行处理机调度,OS 内核临界区不可进行处理机调度。
(来源:2012年408第30题)
2.2 狭义进程调度、进程切换、广义进程调度
-
狭义的进程调度 指的是从就绪队列中 选中一个要运行的进程。(这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就需要 进程切换 )
-
进程切换 是指一个进程让出处理机,由 另一个进程 占用处理机的过程。
-
广义的进程调度 包含了 选择一个进程 和 进程切换 两个步骤。
(上文进程调度时机,即可以指广义进程调度,也可以是狭义进程调度,如只有一个进程)
2.3 进程切换的过程
进程切换的过程主要完成了:
- 对原来运行进程各种数据的保存。(如:发生中断时,硬件负责保存 PC、PSW 的值,OS 负责有“必要”的通用寄存器、中断屏蔽字的值)
- 对新的进程各种数据的恢复。(如:程序计数器、程序状态字、各种数据寄存器等处理机现场信息,这些信息一般保存在进程控制块)
注:① 进程切换是有代价的,因此如果过于频繁的进行进程调度、切换,必然会使整个系统的效率降低。
② 不支持内核级线程的操作系统,调度程序的处理对象是进程。
支持内核级线程的操作系统,调度程序的处理对象是内核线程。
2.4 补充:闲逛进程
闲逛进程是指调度程序永远的备用进程,没有其他就绪进程时,运行闲逛进程。
闲逛进程的特性:优先级最低、能耗低、可以是0地址指令,占一个完整的指令周期(指令周期末尾例行检查中断)。
三、进程的调度方式
进程的调度方式有两种: 非剥夺调度任务、剥夺调度方式。
- 非剥夺调度方式:又称 非抢占方式,只允许进程主动放弃处理机。
在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。
实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统。 - 剥夺调度方式:又称 抢占方式,进程被动放弃处理机,可由 OS 剥夺当前进程的 CPU 使用权。
当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。
可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统。
四、调度算法的评价指标
注:等待时间指进程处于等处理机状态的时间之和。
① 对于进程:等待时间指进程等待被服务时间之和。
② 对于作业:等待时间不仅要考虑进程等待服务时间,还需要加上作业在外存后备队列中等待的时间。
五、典型的调度算法
操作系统存在多种调度算法,有的调度算法适用于作业调度,有的适用于进程调度,有的二者都适用。
5.1 先来先服务调度算法(FCFS)
先来先服务调度算法 每次从就绪队列(用于作业时,是后备队列)中选择 最先进入该队列的进程。
例:现已知进程的到达时间和运行时间,这次进程的开始时间、等待时间、完成时间、周转时间和平均周转时间如下表。
调度顺序为:P1→P2→P3→P4
平均周转时间 = (7+9+8+11)/4 = 8.75
平均带权周转时间 = (1+2.25+8+2.75)/4 = 3.5
平均等待时间 = (0+5+7+7)/4 = 4.75
5.2 短作业/进程优先调度算法(SJF/SPF)
5.2.1 非抢占式
短作业/进程优先调度算法, 默认是非抢占式,每次调度时选择 当前已到达 且 运行时间最短 的作业/进程。
例:现已知进程的到达时间和运行时间,这组进程的开始时间、等待时间、完成时间、周转时间和平均周转时间如下表。
调度顺序为:P1→P3→P2→P4
平均周转时间 = (7+4+10+11)/4 = 8
平均带权周转时间 = (1+4+2.5+2.75)/4 = 2.56
平均等待时间 = (0+3+6+7)/4 = 4
5.2.1 抢占式
抢占式短作业优先调度算法,又称 最短剩余时间优先算法(SRTN),是抢占式的调度算法。每当有进程加入 就绪队列改变时 就需要检查是会发生抢占,如果新到达的进程 剩余时间 比当前运行的进程剩余时间 更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程 完成主动放弃处理机时,也需要调度。
例:现已知进程的到达时间和运行时间,则这组进程的调度顺序如下图所示。
抢占式算法的特点是,有进程达到就绪队列,就需要按照规则进行改变。
各时刻就绪队列的情况如下:
0 时刻:P1(7)。只有P1到达,P1上处理机。
2 时刻:P2(4)。P2到达,P2的运行时间更短,P2抢占处理机,P1回到就绪队列。
4 时刻:P1(5)、P3(1)。P3到达,P3需要1个时间,P2还需要2个时间,因此P3抢占处理机,P2回到就绪队列。
5 时刻:P1(5)、P2(2)、P4(4)。P3完成放弃处理机,P4刚好达到。此时P2所需时间最短,P2上处理机。
7 时刻:P1(5)、P4(4)。P2完成放弃处理机,P4时间更短,P4上处理机。
11时刻:P1(5)。P4完成放弃处理机,P1上处理机。
16时刻:所有进程运行结束。
这组进程的开始时间、等待时间、完成时间、周转时间和平均周转时间如下表。
平均周转时间 = (16+5+1+6)/4 = 7
平均带权周转时间 = (2.28+1.25+1+1.5)/4 = 1.50
平均等待时间 = (9+1+0+2)/4 = 3
注:① 如果题目中 未特别说明,所提到的短作业/进程优先算法 默认是非抢占式的。
② SJF 调度算法的平均等待时间、平均周转时间最少 这种表述 不严谨,因为 SRTN(抢占式的短作业/进程优先) 的平均等待时间、平均周转时间更少。
③ 正确的表述应该是 在所有进程同时可运行时 或者 在所有进程都几乎同时到达时,采用 SJF 调度算法的平均等待时间、平均周转时间最少 。因为当所有进程同时到达时,不存在抢占问题。
④ 正确的表述还可以是 抢占式的短作业/进程优先调度算法(最短剩余时间优先, SRNT算法)的平均等待时间、平均周转时间最少。
⑤ 虽然严格来说,SJF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如 FCFS),SJF依然可以获得较少的平均等待时间、平均周转时间。
⑥ 如果题目中遇到 “SJF 算法的平均等待时间、平均周转时间最少” 的选项,那应判断其他选项是否有很明显的错误,如果没有更合适的选项,那也应该选择该选项。
5.3 高响应比优先调度算法(HRRN)
高响应比优先调度算法是 非抢占式的调度算法,同时考虑 FCFS 和 SJF 两种调度算法的特点,考虑了每个作业的等待时间和估计的运行时间。在每次调度时先计算各个作业的响应比,选择响应比最高的作业/进程为其服务。
响应比
=
等待时间
+
要求服务时间
要求服务时间
,(响应比
≥
1
)
响应比=\\frac等待时间+要求服务时间要求服务时间,(响应比≥1)
响应比=要求服务时间等待时间+要求服务时间,(响应比≥1)
例:现已知进程的到达时间和运行时间,则这组进程的调度顺序如下图所示。
各时刻就绪队列的情况如下:
0时刻:只有 P1 到达就绪队列,P1 上处理机
7时刻(P1主动放弃CPU): 就绪队列中有 P2 (响应比=(5+4)/4=2.25)、 P3 ((3+1)/1=4)、 P4 ((2+4)/4=1.5)
8时刻(P3完成): P2 (2.5)、 P4 (1.75)
12时刻(P2完成):就绪队列中只剩下P4。
16时刻:( )。所有进程运行结束。
5.4 时间片轮转调度算法(RR)
时间片轮转调度算法 用于进程调度,算法轮流让就绪队列中的进程依次执行一个时间片(每次选择的都是排在就绪队列队头的进程)。
例:现已知进程的到达时间和运行时间,假设 时间片大小为2,则这组进程的调度顺序如下图所示。
各时刻就绪队列的情况如下:
0时刻:P1(5)。只有P1到达,P1上处理机。
2时刻:P2(4)→P1(3)。P2到达就绪队列,排在队头,P1被剥夺处理机,重新放到队尾。
默认新到达的进程先进入就绪队列。
4时刻:P1(3)→P3(1)→P2(2)。P3到达先插到就绪队尾,P2下处理机也插到队尾。
5时刻:P3(1)→P2(2)→P4(6)。P4到达插到就绪队尾。
由于P1的时间片还没用完,因此暂时不调度。另外,此时P1处于运行态,并不在就绪队列中
6时刻:P3(1)→P2(2)→P4(6)→P1(1)。
7时刻:P2(2)→P4(6)→P1(1)。P3运行需要1个单位的时间,运行完主动放弃处理机,发生调度。
9时刻:P4(6)→P1(1)
11时刻:P1(1)→P4(4)
12时刻:P4(4)
14时刻:( )。就绪队列为空,P4不用下处理机,因此让P4接着运行一个时间片。
16时刻:( )。所有进程运行结束。
注:① 如果 时间片太大,使得每个进程都可在一个时间片内就完成,时间片轮转调度算法退化为先来先服务算法,这会增大进程响应时间。
② 如果 时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而实际用于进程执行的时间比例减少。
5.5 优先级调度算法
优先级调度算法即可用于作业调度,又可用于进程调度,其优先级用于描述作业/进程运行的紧迫程度。
5.5.1 非抢占式
非抢占式 的优先级调度算法:每次调度时选择 当前已到达且优先级最高 的进程。当前进程 主动放弃处理机时 发生调度。
例:现已知进程的到达时间、运行时间和优先级,则这组进程的调度顺序如下图所示。
各时刻就绪队列的情况如下:
0 时刻:(P1)。只有P1到达,P1上处理机。
7 时刻:(P2、P3、P4) 。P1运行完成主动放弃处理机,其余进程都已到达,P3优先级最高,P3上处理机。
8 时刻:(P2、P4)。P3完成,P2、P4优先级相同,由于P2先到达,因此P2优先上处理机。
12时刻:(P4)。P2完成,就绪队列只剩P4,P4上处理机。
16时刻:( )。P4完成,所有进程运行结束。
5.5.2 抢占式
抢占式 的优先级调度算法:当 就绪队列发生改变时 需要检查是会发生抢占,如果新到达的进程优先级比当前运行的进程优先级更高,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当前进程 主动放弃处理机时 发生调度。
例:现已知进程的到达时间、运行时间和优先级,则这组进程的调度顺序如下图所示。
各时刻就绪队列的情况如下:
0 时刻:(P1)。只有P1到达,P1上处理机。
2 时刻:(P2) 。P2到达就绪队列,优先级比P1更高,P2抢占处理机,P1回到就绪队列。
4 时刻:(P1、P3)。P3到达,优先级比P2更高,P3抢占处理机,P2回到就绪队列。
5 时刻:(P1、P2、P4)。P3完成主动释放处理机,同时P4也到达,由于P2比P4更先进入就绪队列,因此P2上处理机。
7 时刻:(P1、P4)。P2完成,就绪队列只剩P1、P4,P4上处理机。
11时刻:(P1)。P4完成,P1上处理机。
16时刻:( )。P1完成,所有进程运行结束。
注:① 就绪队列未必只有一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置。
② 根据优先级是否可以动态改变,可将优先级分为 静态优先级 和 动态优先级 两种。
静态优先级:创建进程时确定,之后一直不变。
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级。
通常优先级:① 系统进程 > 用户进程
② 前台进程 > 后台进程(交互型进程>非交互型进程)
③ I/O型进程> 计算型进程,操作系统更偏好 I/O型进程。
某系统正在执行三个进程P1、P2和P3,3个进程的计算时间和I/O时间比例如下表所示。为提高系统资源利用率,合理的进程优先级设置应为(P3 > P2 > P1)
解析:I/O型作业优先级大于计算型作业,由于I/O操作需要及时完成,并且没办法长时间保存所要输入输出的数据,所以I/O繁忙型作业有更高的优先级。
(来源:2013年408第31题)
5.6 多级反馈队列调度算法
多级反馈队列算法 是以上几种算法的折中权衡,其用于 进程调度,并且是 抢占式 的算法。
算法规则如下:
① 设置多级就绪队列,各级队列 优先级从高到低,时间片从小到大。
② 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经是在最下级的队列,则重新放回该队列队尾。
③ 只有第 k 级队列为空时,才会为 k+1 级队头的进程分配时间片。
注:当有源源不断的进程到达时,下级队列一直得不到处理。因此,会导致饥饿。
(2019年408第27题)系统采用二级反馈队列调度算法进行进程调度。就绪队列Q1采用时间片轮转调度算法,时间片为10ms;就绪队列Q2采用短进程优先调度算法,系统优先调度Q1队列中的进程,当Q1为空时系统才会调度Q2中的进程;新创建的进程首先进入Q1;Q1中的进程执行一个时间片后,若未结束,则转入Q2。若当前Q1、Q2为空,系统依次创建进程P1、P2后即开始进程调度,P1、P2需要的 CPU 时间分别为 30ms 和 20ms,则进程P1、P2在系统中的平均等待时间为( 15ms )。
解析:根据题意画出甘特图如下所示:
P1等待时间 = P1周转时间 - P1运行时间 = 50-30 = 20ms
P2等待时间 = P2周转时间 - P2运行时间 = 30-20 = 10ms
P1、P2在系统中的平均等待时间 = (P1等待时间+P2等待时间)/2 = 15ms
5.7 算法总结(★)
算法 | 是否可抢占 | 适用于作业/进程调度 | 优点 | 缺点 | 是否会导致饥饿 | 补充 |
---|---|---|---|---|---|---|
先来先服务调度算法(FCFS) | 非抢占式 | 作业/进程调度都适用 | 公平,实现简单 | 对短作业不利 | 否 | 等待时间(✓) 运行时间(×) |
短作业/进程优先调度算法(SJF/SPF) | 默认非抢占式 也有抢占式SRTN | 作业/进程调度都适用 | “最短的”平均等待和周转时间 SRTN 最短 | 对长作业不利 ,可能导致饥饿;难以做到真正的短作业优先 | 是 | 等待时间(×) 运行时间(✓) |
高响应比优先调度算法(HRRN) | 非抢占式 | 作业/进程调度都适用 | 上述两种算法的权衡折中,综合考虑的等待时间和运行时间 | / | 否 | 等待时间(✓) 运行时间(✓) |
时间片轮转调度算法(RR) | 抢占式 | 用于进程调度 | 公平,适用于分时系统 | 频繁切换有开销,不区分优先级 | 否 | 时间片大小对于算法的影响 |
优先级调度算法 | 有抢占式、非抢占式两种 | 作业/进程调度都适用 | 区分优先级,适用于实时系统 | 可能导致饥饿 | 是 | 动态/静态优先级。各类型进程如何设置和调整。 |
多级反馈队列调度算法 | 抢占式 | 用于进程调度 | 平衡优秀 | 一般不说它有缺点,不过可能导致饥饿 | 是 | / |
注:① 前三种算法:先来先服务调度算法、短作业/进程优先调度算法、高响应比优先调度算法,都是用于早期批处理系统。
② 后三种算法:时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法,都适合用于交互式系统。
5.8 补充:多级队列调度算法
多级队列调度算法设置了多个队列,进程创建成功后插入某个队列。队列之间可采取固定优先级,或时间片划分。并且各队列可采用不同的调度策略。
如:设置三个队列,分配时间分别为:50%、40%和10%,队列分别采用优先级调度、高响应比优先调度和先来先服务调度策略。
与多级反馈队列调度算法不同点:多级队列调度中,一个进程只在一个队列中执行调度。而多级反馈队列调度,一个进程在一个队列中调度后未执行完,会去下级队列继续调度。
以上是关于王道操作系统笔记———— 处理机调度的主要内容,如果未能解决你的问题,请参考以下文章
操作系统 王道考研2019 第二章:进程管理 -- 进程调度的时机(临界资源临界区)切换与过程调度方式调度算法的评价指标(CPU利用率,系统吞吐量周转时间等待时间响应时间)