计算机操作系统 第三章:处理机调度与死锁(上)(知识梳理+脑图)
由于本学期学习了计算机操作系统,所以打算边学习边整理,一方面帮助自己梳理知识结构,另一方面可以帮助大家理解。注意:该总结用的是汤小丹第四版!关于知识脑图,我是边学边做的,推荐大家也自己做脑图,而不是直接拿走照搬,因为只有自己梳理的东西才是自己的。做知识脑图的好处是可以对知识整体结构有好的把握,不会让自己迷失于细节;还可以复习时快速找到知识点等。废话不多说,赶紧开始吧。
计算机操作系统
由于本学期学习了计算机操作系统,所以打算边学习边整理,一方面帮助自己梳理知识结构,另一方面可以帮助大家理解。
注意:该总结用的是汤小丹第四版!
关于知识脑图,我是边学边做的,推荐大家也自己做脑图,而不是直接拿走照搬,因为只有自己梳理的东西才是自己的。
做知识脑图的好处是可以对知识整体结构有好的把握,不会让自己迷失于细节;还可以复习时快速找到知识点等。
废话不多说,赶紧开始吧。
第三章 处理机调度与死锁(上)
一、处理机调度的层次和调度算法的目标
人们一般都认为, 在计算机系统中,中央处理机CPU是最重要的资源。每一个提交给计算机的任务都必须使用CPU。 CPU管理的主要任务
是对处理机时间进行分配, 也就是按照一定的策略将CPU运行时间分配给各个用户以满足用户的要求,同时要考虑到充分利用CPU来提高它的效率。这就是处理机调度的主要功能。
1、处理机调度的层次
-
高级调度:即作业调度或宏观调度或长程调度。
其任务是对那些提交给系统后被收容的作业, 按照一定策略选择出某些作业, 为其分配内存等必要的资源, 建立与之对应的进程(可能是多个进程), 并将进程的PCB表放入就绪队列中, 使其具备参与竞争使用CPU的权利。高级调度主要用于多道批处理系统中,作业状态变迁如下图所示。
-
低级调度:即进程调度或微观调度或短程调度。
其任务是在进入内存并处于就绪队列的进程中, 确定哪个进程真正获得CPU及其使用CPU的时间。用执行指针指向选中进程的PCB表,将它从就绪队列移出并重布现场,使其运行。进程状态变迁如下图所示。
-
中级调度:又称为内存调度或交换调度或中程调度。
将就绪状态细化为内存就绪和外存就绪状态,阻塞状态细化为内存阻塞和外存阻塞状态后,中级调度
完成进程在内存与外存之间的对换。其任务是周期性地将那些在内存中暂时不用的进程换出并放到外存,而将那些在外存上需要运行的进程换入到内存。进程状态变迁如下图所示。
【三级调度模型如图】
2、处理机调度算法的目标
在操作系统设计中如何选择调度方式和算法,通常取决 于操作系统的类型及其设计目标。
-
处理机调度算法的共同目标
(1)资源利用率:系统最重要的资源就是CPU。
C P U 的 利 用 率 = C P U 的 有 效 工 作 时 间 C P U 的 有 效 工 作 时 间 + C P U 空 闲 等 待 时 间 {CPU的利用率}=\frac{CPU的有效工作时间}{CPU的有效工作时间+CPU空闲等待时间} CPU的利用率=CPU的有效工作时间+CPU空闲等待时间CPU的有效工作时间
(2)公平性:公平性是指所有的进程都获得合理的CPU时间, 不会发生饥饿现象。但公平是相对的。
(3)平衡性:保持系统资源使用的平衡性。
(4)策略强制执行:如安全策略 -
批处理系统的目标
在批处理系统中,周转时间
T i T_i Ti就是作业从提交到完成所经历的时间。(公式中 T s i T_{si} Tsi为系统实际服务作用时间)
(1)平均周转时间短
平均周转 T = 1 n ∑ i = 1 n T i \text { 平均周转 } \mathrm{T}=\frac{1}{n} \sum_{\mathrm{i}=1}^{\mathrm{n}} \mathrm{T}_{\mathrm{i}} 平均周转 T=n1∑i=1nTi
平均带权周转 W = 1 n ∑ i = 1 n T i T s i \text { 平均带权周转 } \mathrm{W}=\frac{1}{n} \sum_{i=1}^{n} \frac{T_{i}}{T_{s i}} 平均带权周转 W=n1∑i=1nTsiTi
(2)系统吞吐量高吞吐量
:单位时间内所完成的作业数,跟 作业本身特性和调度算法都有关系。
(3)处理机利用率高
对于大、中型计算机尤为重要(CPU昂贵) ,故调度选择计算量大的作业可提高CPU的利用率。 -
分时系统的目标
(1)响应时间快响应时间
是从用户从键盘提交一个请求开始,直到屏幕上显示出处理结果为止的一段时间间隔。
(2)均衡性
均衡性是指系统响应时间的快慢应与用户所请求服务的复杂性相适应。 通常,用户对较复杂的任务的响应时间允许较长。 -
实时系统的目标
(1)截止时间的保证截止时间
是指某任务必须开始执行的最迟时间,或必须完成的最迟时间。 实时任务又分为硬实时任务与软实时任务之分。
(2)可预测性
实时系统中可预测性非常重要,如视频播放应具有连续性,应具有提前下载的功能,提高并发性。
二、作业与作业调度
1、批处理系统中的作业
- 作业和作业步
1)作业
:用户在一次解题过程中或一个事务处理中要求计算机系统所作工作的总和,它是用户向计算机系统提交一项工作(任务)的基本单位。
–用户的观点:在一次业务处理过程中,从输入程序和数据到输出结果的全过程。
–系统的观点(针对作业进行资源分配):作业由程序及数据 (作业体)和作业说明书(作业控制语言)构成。
2)作业步
:是在一个作业的处理过程中,计算机所做的相对独立的工作。
3)作业流
:批量系统中需要将一批作业依次输入到辅助存储器中,形成作业流。 - 作业控制块(JCB,Job ControI Block)
•预输入程序
从输入设备上接收作业信息(即作业说明书、程序 和数据),把作业组织成文件送到磁盘上的特定空间(称为输 入井),同时,系统应把所录入的作业进行登记,登记在一张 作业控制表中。每一个进入系统的作业均占据作业控制表中的 一个表项,该表项称之为作业控制块。此时,作业建立完成。
•JCB
包含了对作业进行管理控制所必需的信息。作业控制块是 作业在系统中存在的标志。作业控制块的内容也是作业调度的 依据。
•从系统管理的角度看,作业的建立过程就是申请一个空白的作 业控制表项,填写作业控制块,作业控制表如下所示: - 作业运行的三个阶段和三种状态
作业从进入系统到运行结束,通常要经历收容、运行、 和完成三个阶段。收容阶段
:用户作业从提交到放入作业后备队列中,此 时作业为后备状态
;运行阶段
:作业被调度进内存,建立进程控制块,进入 就绪队列直至运行结束,此期间作业均为运行状态
;完成阶段
:当作业完成或异常结束时,进入完成阶段, 此时作业为完成状态
,等待回收资源。
2、作业调度的主要任务
作业调度的主要任务
是根据JCB中的信息,检查资源需求, 并按一定的调度算法,从外存的后备队列中选取某些作业到 内存中来,为其创建进程。故作业调度也称为接纳调度。
作业调度的主要工作:
(1)接纳多少个作业:从后备队列中选取多少作业进入内 存,取决于多道程序度;
(2)接纳那些作业:选择后备队列中的那些作业进入内存, 取决于调度算法。
作业调度的目标是使作业运行最大限度地发挥各种资源 的利用率,并保持系统内各种活动的充分并行。
3、先来先服务和短作业优先调度算法
-
先来先服务调度算法(first-come first-served,FCFS)
例 1:在一个单道批处理系统 中,有一组作业的提交时刻和 运行时间如下表所示
当系统采用作业先来先服务的调度算法时,计算该组作业的 平均周转时间和平均带权周转时间是多少。 -
短作业优先(short job first, SJF) 的调度算法
短作业(进程)优先调度算法SJ§F,是指对短作 业或短进程优先调度的算法。它们可以分别用于作业 调度和进程调度。短作业优先(SJF)的调度算法
,是从后备队列中 选择一个或若干个估计运行时间最短的作业,将它们 调入内存运行。短进程优先(SPF)调度算法
,则是从就绪队列中 选出一估计运行时间最短的进程,将处理机分配给它, 使它立即执行并一直执行到完成,或发生某事件而被 阻塞放弃处理机时,再重新调度。例 2:在一个单道批处理系统 中,有一组作业的提交时刻和 运行时间如下表所示
当系统采用短作业优先的调度算法时,计算该组作业的平均 周转时间和平均带权周转时间是多少。
SJ§F调度算法也存在不容忽视的缺点:
(1) 该算法对长作业不利。
如作业C的周转时间由10 增至16,其带权周转时间由2增至3.1。更严重的是,如果有一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度。
(2) 该算法完全未考虑作业的紧迫程度,因而不能保 证紧迫性作业(进程)会被及时处理。
(3) 由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。
4、优先级调度算法和高响应比优先调度算法
-
优先级调度算法(priority-scheduling algorithm,PSA)
先来先服务的优先级就是作业等待时间的长短;
短作业的优先级是指作业运行时间的长短。
通常优先级是指依据作业的重要紧迫程度而设置的优先级,级别高的作业可以获得优先调度。 -
高响应比优先调度算法(Highest Response ratio Next,HRRN)
优先权的变化规律可描述为:
优先权 = 等待时间 + 要求服务时间 要求服务时间 \text { 优先权 }=\frac{\text { 等待时间 }+\text { 要求服务时间 }}{\text { 要求服务时间 }} 优先权 = 要求服务时间 等待时间 + 要求服务时间
由于等待时间与服务时间之和,就是系统对该作业的响应 时间,故该优先权又相当于响应比RP。据此,又可表示为:
优先权 = 等待时间 + 要求服务时间 要求服务时间 = 响应时间 要求服务时间 \text { 优先权 }=\frac{\text { 等待时间 }+\text { 要求服务时间 }}{\text { 要求服务时间 }}=\frac{\text { 响应时间 }}{\text { 要求服务时间 }} 优先权 = 要求服务时间 等待时间 + 要求服务时间 = 要求服务时间 响应时间 由公式可知:
(1) 如果作业的等待时间相同,则要求服务的时间 愈短,其优先权愈高,因而该算法有利于短作业。
(2) 当要求服务的时间相同时,作业的优先权决定 于其等待时间,等待时间愈长,其优先权愈高,因而它 实现的是先来先服务。
(3) 对于长作业,作业的优先级可以随等待时间的 增加而提高,当其等待时间足够长时,其优先级便可升 到很高, 从而也可获得处理机。例 3:在一个单道批处理系统 中,有一组作业的提交时刻和 运行时间如下表所示
当系统采用作业响应比高优先的调度算法时,计算该组作业 的平均周转时间和平均带权周转时间是多少。
9.0时,计算响应比
B的响应比=1+0.5/0.5=2
C的响应比=1+0/0.2=1
D没有到达
9.5时,计算响应比
C的响应比 =1+0.5/0.2=3.5
D的响应比=1+0.4/0.1=5
三、进程调度
1、进程调度的任务、机制和方式
-
进程调度的任务
保存现场
按某种算法选取进程
将处理器分配给进程 -
进程调度机制
排队器:将就绪进程插入到相应的就绪队列
分派器:从就绪队列挑选进程运行
上下文切换:当前进程->分派器->新选进程 (为节省切换时间,可采用2组或多组寄存器) -
进程调度方式(Low Level Scheduling)
1)非抢占方式(Non-preemptive Mode)
在采用非抢占调度方式时,可能引起进程调度的因素可归结 为这样几个:
① 正在执行的进程执行完毕, 或因发生某事件而不能再继 续执行;
② 执行中的进程因提出I/O请求而暂停执行;
③ 在进程通信或同步过程中执行了某种原语操作,如P操作 (wait操作)、Block原语、Wakeup原语等。
这种调度方式的优点是实现简单、系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即执行,因而可能造成难以预料的后果。显然,在要求比较 严格的实时系统中,不宜采用这种调度方式。2)抢占方式(Preemptive Mode)
抢占的原则有:
(1) 优先权原则。
(2) 短进程优先原则。
(3) 时间片原则。
2、轮转调度算法
-
轮转法的基本原理
在早期的时间片轮转法中,系统将所有的就绪进程按先来先 服务的原则,排成一个队列,每次调度时,把CPU分配给队 首进程,并令其执行一个时间片。时间片的大小从几ms到几 百ms。当执行的时间片用完时,由一个计时器发出时钟中断 请求,调度程序便据此信号来停止该进程的执行,并将它送 往就绪队列的末尾;然后,再把处理机分配给就绪队列中新 的队首进程,同时也让它执行一个时间片。这样就可以保证 就绪队列中的所有进程,在一给定的时间内,均能获得一时 间片的处理机执行时间。 -
进程切换时机
进程切换分为两种情况:
时间片未完但进程已结束,可激活调度程序;
时间片耗尽但进程未结束,也可激活调度程序。 -
时间片大小的确定
时间片小:有利于短作业,中断频繁,系统开销大。
时间片大:进程可在一个时间片内执行完,就成为FCFS,不利于交互。故时间片应略大于一次典型的交互所需要的时间。
这样可使大多数交互进程可在一个时间片内完成。
3、优先级调度算法
-
优先级调度算法的类型
1)非抢占式优先权算法
在这种方式下,系统一旦把处理机分配给就绪队列中 优先权最高的进程后,该进程便一直执行下去,直至完成; 或因发生某事件使该进程放弃处理机时,系统方可再将处 理机重新分配给另一优先权最高的进程。
2)抢占式优先权调度
在采用这种调度算法时,是每当系统中出现一个新的就绪进 程i时,就将其优先权Pi与正在执行的进程j的优先权Pj进行比 较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj, 则 立即停止Pj的执行,做进程切换,使i进程投入执行。显然, 这种抢占式的优先权调度算法,能更好地满足紧迫作业的要 求,故而常用于要求比较严格的实时系统中。 -
优先级的类型
1)静态优先级
静态优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个 整数来表示的,例如,0-7或0-255中的某一整数, 又把该 整数称为优先数。确定进程优先级的依据有如下三个方面:
进程类型:系统进程高于用户进程。
进程对资源的需求:需求少的高。
用户要求:重要或紧迫的高。2)动态优先级
在创建进程时所赋予的优先权, 是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。例如,我们可以规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高。若所有的进程都具有相同的 优先权初值,则显然是最先进入就绪队列的进程,将因其动 态优先权变得最高而优先获得处理机,此即FCFS算法。
若所有的就绪进程具有各不相同的优先权初值,那么,对于 优先权初值低的进程,在等待了足够的时间后,其优先权便 可能升为最高,从而可以获得处理机。当采用抢占式优先权 调度算法时,如果再规定当前进程的优先权以速率b下降,则 可防止一个长作业长期地垄断处理机。
4、多队列调度算法
一个就绪队列无法满足不同用户对进程调度策略 的不同要求,多处理机系统该缺点更加突出。
在采用这种调度算法时,将不同类型或性质的进程 固定分配在不同的就绪队列,分别采用不同的调度算法。
在多处理机系统中,可以为每个CPU设置一个就绪 队列,每个处理机可以采用不同的调度算法。
5、多级反馈队列
- 调度机制
(1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。
第一个队列的优先级最高,第二个队列次之,其余各队列的 优先权逐个降低。该算法赋予各个队列中进程执行时间片的 大小也各不相同,在优先权愈高的队列中,为每个进程所规 定的执行时间片就愈小。例如,第二个队列的时间片要比第 一个队列的时间片长一倍,……,第 i +1个队列的时间片要比 第i个队列的时间片长一倍
(2) 每个队列都采用FCFS算法
当一个新进程进入内存后,首先将它放入第一队列的 末尾,按FCFS原则排队等待调度。当轮到该进程执行时, 如它能在该时间片内完成,便可准备撤离系统;如果它在 一个时间片结束时尚未完成,调度程序便将该进程转入第 二队列的末尾,再同样地按FCFS原则等待调度执行;如果 它在第二队列中运行一个时间片后仍未完成,再依次将它 放入第三队列,……,如此下去,当一个长作业(进程)从 第一队列依次降到第n队列后,在第n队列中便采取按时间 片轮转的方式运行。
(3) 按队列优先级调度
仅当第一队列空闲时,调度程序才调度第二队列中 的进程运行; 仅当第1-(i-1) 队列均空时,才会调度第 i队列中的进程运行。如果处理机正在第i队列中为某进 程服务时,又有新进程进入优先权较高的队列(第1~(i-1) 中的任何一个队列),则此时新进程将抢占正在运行进程 的处理机,即由调度程序把正在运行的进程放回到第i队 列的末尾,把处理机分配给新到的高优先权进程。 - 多级反馈队列调度算法的性能 多级反馈队列调度算法具有较好的性能,能很好地满足 各种类型用户的需要。
• 终端型作业
– 作业通常较小,作业(进程)在第一队列所规定的时间片内完成;
• 短批处理作业
– 很短的批处理型作业,在第一队列中执行一个时间片即可完成。 对于稍长的作业,通常也只需在第二队列和第三队列各执行一 个时间片即可完成,其周转时间仍然较短。
• 长批处理作业
– 对于长作业,它将依次在第1,2,…,n个队列中运行,然后再 按轮转方式运行,用户不必担心其作业长期得不到处理。
6、基于公平原则的调度算法
- 保证调度算法
该算法要做到调度的公平性,比如处理机分配的公平性,系统中若有n个进程,每个进程都可获得1/n 的CPU时间。此时系统应具有如下功能:
(1)跟踪计算每个进程已获得的CPU时间;
(2)计算每个进程应该获得的CPU时间,自创建以 来的时间除以n;
(3)计算每个进程获得的CPU时间的比率,实际服 务时间与应该获得的时间之比;
(4)比较各个进程获得的CPU时间的比率;
(5)调度比率最小的进程运行,直至超过最接近它 的进程比率为止。 - 公平分享调度算法
上面算法对进程调度公平,若用户启用的进程数量 不同,如A用户有6个进程,B用户有2个进程,时间轮转法就会对进程少的用户不公平。
若对用户公平,就应强制调度序列,如: A1 A2 B1 B2 A3 A4 B1 B2 A5 A6 B1 B2
四、实时调度
1、实现实时调度的基本条件
- 提供必要的信息
(1)就绪时间——任务成为就绪状态的起始时间
周期任务——预知
非周期任务——预测
(2) 开始截止时间和完成截止时间。
(3) 处理时间。
(4) 资源要求。
(5) 优先级。 - 系统处理能力强
m个周期性的硬实时任务,处理时间可表示为 C i C_i Ci,周期时间表示为 P i P_i Pi,则在单处理机情况下,必须满足下面的限制条件:
∑ i = 1 m C i P i ≤ 1 \sum_{i=1}^{m} \frac{C_{i}}{P_{i}} \leq 1 ∑i=1mPiCi≤1
假定系统中的处理机数为N,则应将上述的限制条件改为:
∑ i = 1 m C i P i ≤ N \sum_{i=1}^{m} \frac{C_{i}}{P_{i}} \leq N ∑i=1mPiCi≤N - 采用抢占式调度机制
• 含有硬实时任务的实时系统中,广泛采用抢占机制。
• 小型实时系统,如果能预知任务的开始截止时间,则 对实时任务的调度可采用非抢占调度机制; - 具有快速切换机制
• 对外部中断的快速响应能力。
• 快速的任务分派能力。
2、实时调度算法的分类
- 非抢占式调度算法
1)非抢占式轮转调度算法
工业生产的群控系统中,由一台计算机控制若干个相同的 (或类似的)对象,为每一个被控对象建立一个实时任务,并 将它们排成一个轮转队列。
2)非抢占式优先调度算法
实时任务到达时,把它们安排在就绪队列的队首,等待当 前任务自我终止或运行完成后才能被调度执行。 - 抢占式调度算法
在要求较严格的(响应时间为数十毫秒以下)的实时系统中, 应采用抢占式优先权调度算法。
1)基于时钟中断的抢占式优先权调度算法
• 不立即抢占当前任务的处理机,而是等到时钟中断到来时,调度程序才 剥夺当前任务的执行,将处理机分配给新到的高优先权任务。调度延迟可降为几十毫秒至几毫秒
2)立即抢占的优先权调度算法
• 立即剥夺当前任务的执行,把处理机分配给请求中断的紧迫任务。调
度延迟降低到几毫秒至100微秒。
3、最早截止时间优先即EDF(Earliest Deadline First)算法
- 非抢占式调度方式用于非周期实时任务
- 抢占式调度方式用于周期实时任务
图 3-7 最早截止时间优先算法用于抢占调度方式之例
有2个周期性任务,任务A的周期时间是20ms,每个周期的处理 时间为10ms;任务B的周期时间是50ms,每个周期的处理时间为 25ms。则2个任务的运行要求如下:
4、最低松弛度优先LLF(Least Laxity First)算法
- 根据任务紧急(或松弛)的程度,来确定任务的优先级。
例:一个任务在200 ms时必须完成,而它本身所需的运行时间就有 100 ms,因此,调度程序必须在100 ms之前调度执行,该任务的紧急 程度(松弛程度)为100 ms。又如,另一任务在400 ms时必须完成,它 本身需要运行 150 ms,则其松弛程度为 250 ms。 - 任务的紧急程度愈高,为该任务所赋予的优先级就愈高,以使 之优先执行。
- 系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低 的任务排在队列最前面,调度程序总是选择就绪队列中的队首 任务执行。
假如在一个实时系统中,有两个周期性实时任务A和B,任务A要 求每 20 ms执行一次,执行时间为 10 ms;任务B只要求每50 ms 执行一次,执行时间为 25 ms。要求给出任务的调度顺序。
周期性A、B的松弛度如下图所示:
在刚开始时( t 1=0),A1必须在20ms时完成,而它本身运行又需 10 ms,可算出A1的松弛度为10ms;B1必须在50ms时完成, 而 它本身运行就需25ms,可算出B1的松弛度为25 ms,故调度程序 应先调度A1执行。
在 t2=10 ms时,算出B1的松弛度为15ms,故调度程序应选择B1运 行。
5、优先级倒置(priority inversion problem)
- 优先级倒置的形成
系统运行中,高优先级进程或线程有可能被低优先级进 程或线程延迟或阻塞。
例如有三个独立的进程P1、P2、P3,其优先级是P1>P2>P3, P1与P3通过共享的一个临界资源进行交互,代码如下:
P1:… P(muex);CS-1;V(mutex); …
P2:… program2 …;
P3:… P(muex);CS-3;V(mutex); …
P3先就绪执行,在临界区内,P2就绪而抢占了CPU, P2运行时program2时,P1又就绪而抢占了CPU,在临 界区外被阻塞。接着P2、P3、P1……
P3先就绪执行,在临界区内,P2就绪而抢占了CPU, P2运行时program2时,P1又就绪而抢占了CPU,在临 界区外被阻塞。接着P2、P3、P1…… - 优先级倒置的解决方法 简单的解决方法就是规定进程一旦进入临界区,就不允 许被抢占调度。当临界区较短时,该方法可行。
实用的方法是建立在动态优先级基础之上的,即高优先级 的进程P1欲进入临界区使用资源R,而R已被低优先级的P3 使用,则进程P1阻塞,P3获得P1的优先级直至退出临界区。
P3先就绪执行,P2在a时刻就绪,P1在b时刻就绪
更多推荐
所有评论(0)