操作系统 第三章 处理机调度与死锁(上)

分配处理机的任务是由调度程序完成的。

若申请的资源被其他等待进程占有,那么等待进程有可能再也无法改变状态。这种情况称为死锁(deadlock)

本章思维导图

3.1 处理机调度概述

3.1.1 处理机调度的层次

1 高级调度

又称长程调度或作业调度,调度对象是作业。主要用于多道批处理系统。

2 低级调度

又称短程调度或进程调度,调度对象时进程。应用于多道批处理、分时和实时系统。

3 中级调度

又称内存调度。提高内存利用率和系统吞吐量。调度对象时进程。应用于多道批处理、分时和实时系统。

3.1.2 作业和作业调度

1 作业

作业是一个比程序更广泛的概念,它不仅包含了通常的程序和数据,而且配有一份作业说明书,系统根据说明书对程序的运行进行控制。

2 作业控制快

为了管理和调度作业,在多道批处理系统中,为每个作业设置了一个作业控制快(JCB),保存了系统对作业进行管理和调度所需的全部信息。

3 作业调度的主要任务

根据JCB中的信息,检查系统中的资源能否满足作业的需求,以及按照一定的调度算法从外存的作业后备队列中选取某些作业调入内存,,并为它们创建进程和分配必要的资源。故作业调度也称接纳调度。

接纳多少个作业。

接纳哪些作业。最简单的调度算法是先来先服务调度算法。常用的调度算法有短作业优先调度算法和基于作业优先级的调度算法。

3.1.3 进程调度

进程调度是指操作系统内核通过一定的调度算法,从就绪队列中选择一个进程,并将CPU分配给它运行的过程。

1 进程调度任务

保存CPU现场信息;按某种算法选取进程;把CPU分配给进程

2 进程调度机制

进程调度机制中应具有3个基本部分。

(1)排队器。其可以将系统中的所有就绪进程,按照一定的策略排列成一个或多个队列,称为就绪队列。

(2)分派器。将进程从就绪队列中取出,然后进行从分派器到新选进程间的上下文切换。

(3)上下文切换器。会发生两对上下文切换。

在进行上下文切换时,需要执行大量的load和store等操作指令,以保存寄存器的内容,但这样太耗费时间。现在可使用硬件来缩短上下文切换的时间,可以使用两组或多组寄存器来实现,使用时只需改变指针指向即可。

3 进程调度方式

(1)非抢占调度方式(多道批,某些实时)

引起进程调度的因素:正在执行的进程运行完毕,或因发生某事件使其无法继续运行。正在执行的进程因提出I/O请求而暂停执行。在进程通信或同步过程执行了某种原语操作,如BLOCK原语。

(2)抢占调度方式(分时,大多数实时)

遵循的原则:优先级原则。短进程优先原则。时间片原则。

3.1.4 处理机调度算法的目标

1 处理机调度算法的共同目标

(1)资源利用率。最重要的是CPU利用率。

CPU利用率=CPU有效工作时间÷(CPU有效工作时间+CPU空闲等待时间)

(2)公平性。各进程都应获得合理的CPU时间,防止发生进程饥饿现象。

(3)平衡性。要使系统中的CPU和各种I/O设备都能经常处于忙碌状态。

(4)策略强制执行。指定的策略有需要就必须予以准确的执行。

2 批处理系统中处理机调度算法的目标

(1)平均周转时间短。

(2)系统吞吐量高。系统吞吐量:单位时间内系统所完成的作业数。

(3)处理机利用率高。

3 分时系统中处理机调度算法的目标

(1)保证响应时间快。

(2)保证均衡性。

4 实时系统中处理机调度算法的目标

(1)保证满足截至时间的要求。

(2)保证可预测性。

3.2 调度算法

3.2.1 先来先服务调度算法

先来先服务(FCFS)调度算法是最简单的调度算法,可用于作业调度和进程调度。

作业调度:系统按照作业到达的先后次序进行调度。

进程调度:系统每次调度都是从就绪进程队列中选择一个最先进入该队列的进程。

3.2.2 短作业优先调度算法

1 SJF调度算法

SJF调度算法是以作业的长短来计算优先级的,作业越短,优先级越高。SJF算法可用于作业调度和进程调度。

作业调度:系统将从外存的作业后备队列中选择估计运行时间最短的作业。

进程调度:系统将从就绪队列中选择估计运行时间最短的进程。

2 SJF调度算法的缺点

必须预先知道作业的运行时间。对长作业非常不利,长作业的周转时间会明显增长。无法实现人机交互。没有考虑作业的紧迫程度。

3.2.3 优先级调度算法

对于FCFS调度算法,进程的等待时间就是进程的优先级,等待时间越长,优先级越高。

对于SJF调度算法,进程的长短就是进程的优先级,运行时间越短,优先级越高。

优先级调度算法是基于进程的紧迫程度。

1 优先级调度算法的类型

(1)非抢占式优先级调度算法。

只要分配了资源,就一直进行下去,不会被其他进程所占用;或者出现某些事件而停止时,选取新的进程接着进行调度算法。

(2)抢占式优先级调度算法。

如果出现了优先级更高的进程,那就替换当前进程为优先级更高的,如果系统中出现了新的进程,会进行优先级比较,选取最优的进程实行调度算法。

2 优先级的类型

(1)静态优先级。

(2)动态优先级。

3 高响应比优先调度算法

HRRN调度算法是优先级调度算法的一个特例,通常用在作业调度。

FCFS调度算法只考虑了作业的等待时间,而忽视了作业的运行时间。

SJF调度算法只考虑了作业的运行时间,而忽视了作业的等待时间。

HRRN调度算法既考虑了作业的运行时间,又考虑了作业的等待时间

实现:引入一个动态优先级,优先级Rp=(等待时间+要求服务时间)/(要求服务时间)=响应时间 / 要求服务时间

分析:

(1)如果作业的等待时间相同,则要求服务时间越短,优先级越高,此时HRRN调度算法类似于SJF调度算法,有利于短作业。

(2)当作业的要求服务时间相同时,其优先级又取决于等待时间,此时HRRN调度算法类似于FCFS调度算法。

3.2.4 轮转调度算法

在分时系统中,最简单也是较常用的进程调度算法是基于时间片的轮转(RR)调度算法。

1 RR调度算法的基本原理

在RR调度算法中,系统会将所有的就绪进程按FCFS策略排成一个就绪队列。系统设置每隔一定时间产生一次中断,激活进程调度程序进行调度,把处理机分配给队首进程,并令其执行一个时间片。然后循环往复。

2 进程切换时机

有两种情况:

(1)若一个时间片尚未用完而正在运行的进程已经完成。

(2)当一个时间片用完时,计数器中断处理程序会被激活。

3 时间片大小的确定

一个较为合理的时间片大小是略大于一次典型的交互所需要的时间,使大多数交互式进程能在一个时间片内完成。

时间片太小,系统频繁执行进程调度和进程上下文切换,增加系统开销。

时间片太大,RR调度算法就变成了FCFS调度算法。

3.2.5 多级队列调度算法

多级队列调度算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级。

3.2.6 多级反馈队列调度算法

1 多级反馈队列调度算法的调度机制

(1)设置多个就绪队列

在系统中设置多个就绪队列,为每个队列赋予不同的优先级,且优先级依次降低。优先级高的队列时间片小。

(2)每个队列都采用FCFS调度算法

新进程进入内存后,首先将他放入第一个队列的末尾,按FCFS策略等待调度。当轮到该进程执行时,若可以在该时间片内完成,则可撤出系统。如果不能完成,就到下一个就绪队列,诸如此类,直到进程执行结束。

(3)按队列优先级调度

按照队列优先级来调度进程。

2 多级反馈队列调度算法的性能

(1)终端型用户

多为交互型作业,通常较小,系统只要能使这些作业在第一队列规定的时间片内完成即可。

(2)短批处理作业用户

一般的短作业与终端型用户类似。较长的短作业,在第二或第三队列的时间片内完成。

(3)长批处理作业用户

依次在第1、2、3、......、n个队列中运行,然后按RR调度算法运行。

3.2.7 基于公平原则的调度算法

1 保证调度算法

保证调度算法向用户做的并不是优先运行保证,而是明确的性能保证。一种容易实现的性能保证措施就是公平分配处理机。

实施公平调度算法要满足五个功能:

(1)跟踪计算每个进程自创建以来已经执行的处理时间。

(2)计算每个进程应获得的处理机时间,即自创建以来的时间除以n。

(3)计算进程获得处理及时间的比率,即进程实际执行的处理时间和应获得的处理机时间之比。

(4)比较各进程获得处理机时间的比率。

(5)调度程序应选择比率最小的进程。

2 公平分享调度算法

在公平分享调度算法中,所有用户能获得相同的处理机时间或所要求的时间比例。必须考虑每个用户所拥有的进程数目。

例:用户1有4个进程A、B、C、D,用户2有1个进程E

如果两个用户要获得相同的处理机时间:

A、E、B、E、C、E、D、E、A、E、B、E、C、E、D、E、......

如果用户1要获得的处理机时间是用户2的两倍:

A、B、E、C、D、E、A、B、E、C、D、E、A、B、E、C、D、E、......

3.3 实时调度

实时系统中,存在两种不同性质的实时任务,即HRT任务和SRT任务。

3.3.1 实现实时调度的基本条件

1 提供必要的信息

就绪时间:某任务的状态转换为就绪状态的起始时间。

开始截止时间和完成截止时间

处理时间:一个任务从开始直至完成所需的时间。

资源要求:任务执行时所需的一组资源。

优先级

2 系统处理能力强

提高系统处理能力的途径有二:采用单处理机系统(求和C/P求和C/P

3 采用抢占式调度机制

对于HRT的实时系统中,广泛采用抢占式调度机制,便可以满足HRT任务对截至时间的要求。

4 采用快速切换机制

好处:对中断的快速响应能力和快速的任务分配能力。

3.3.2 实时调度算法的分类

根据实时任务性质,可将实时调度算法分为HRT调度算法SRT调度算法

根据调度方式,可将实时调度算法分为非抢占式调度算法抢占式调度算法

1 非抢占式调度算法

(1)非抢占式轮转调度算法。

(2)非抢占式优先级调度算法。

2 抢占式调度算法

(1)基于时钟中断的抢占式优先级调度算法。

(2)立即抢占的优先级调度算法。

3.3.3 最早截止时间优先算法

最先截止时间优先算法(EDF)根据任务的截至时间的确定任务的优先级

1 非抢占式调度方式用于非周期实时任务

例:四个非周期实时任务。系统先调度任务1执行,在任务1执行期间,任务2、任务3又先后到达。但任务3比任务2的开始截止时间早,故系统先执行任务3再执行任务2,这时任务4到达了且它的开始截止时间比任务2要早,故在执行万任务3后先执行任务4再执行任务2。

2 抢占式调度方式用于周期实时任务

如图所示例中,有两个周期实时任务,任务A和任务B的周期时间分别为20ms和50ms,每个周期的处理时间分别为10ms和25ms。

第二行:t=0ms时先调度A1执行,在A1执行完成后(t=10ms)才调度B1执行。在t=20ms时,又重新调度A2执行,在t=30ms时,A2完成,又调度B1执行。t=40ms时,又调度A3执行,t=50ms时,虽然A3已完成,但B1已错过了它的最后期限。(A的优先级高)。

第三行:t=0ms时先调度B1执行,在B1执行完成后(t=20ms)才调度A2执行。在t=20ms时,A1已错过它的最后期限。说明这种方法也不行。(B的优先级高)。

第四行:执行的算法为EDF算法,可以满足系统需要。t=0ms时,A1和B1同时到达,由于A1的截止时间比B1早,故调度A1执行。t=10ms时,A1完成,又调度B1执行。t=20ms时,A2到达,由于A2的截止时间比B1早,故B1被中断而调度A2执行。t=30ms时,A2完成,又重新调度B1执行。t=40ms时,A3又到达,但B1的截止时间要比A3早,因此继续让B1执行直至完成(t=45ms),然后调度A3执行。t=55ms时,A3完成,又调度B2执行。

3.3.4 最低松弛度优先算法

最低松弛度调度算法(LLF)在确定任务的优先级时,根据的是任务的紧急程度(松弛度)。

松弛度的计算公式如下:松弛度 = 必须完成的时间 - 其本身的运行时长 - 当前时间

该算法主要用于抢占式调度方式中。

如图3-9所示,一个实时系统中有两个周期性实时任务A和B,任务A要求每20ms执行一次,执行时长为10ms,任务B要求每50ms执行一次,执行时长为25ms。所以任务A和任务B每次必须完成的子任务A1、A2、A3......和B1、B2、B3......如图所示

如图3-10所示,在刚开始时(t1=0ms时),A1必须在20ms时完成,而它本身运行又需10ms,因此可计算出A1的松弛度为10ms。B1必须在50ms时完成,而他本身运行又需25ms,因此可算出B1的松弛度为25ms,故调度程序应先调度A1执行。t2=10ms时,A1执行完毕。A2的松弛度为20ms。

类似地,可计算出B1的松弛度为15ms,故调度程序应选择B1运行。t3=30ms时,A2的松弛度已减为0ms(40-10-30),而B1的松弛度为15ms(即50-5-30),于是调度程序应抢占B1的处理机而调度A2运行。t4=40ms时,A3的松弛度为10ms(60-10-40),而B1的松弛度仅为5ms(50-5-40),故应重新调度B1执行。在t5=45ms时,B1执行完毕,而此时A3的松弛度已减为5ms(60-10-45),而B2的松弛度为30ms(100-25-45),于是又应调度A3执行。在t6=55ms时,任务A尚未进入第4周期,而任务B已进入第2周期,故再调度B2执行。在t7=70ms时,A4的松弛度已减至0ms(80-10-70),而B2的松弛度为20ms(100-10-70),故此时调度程序又应抢占B2的处理机而调度A4执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值