目录
[1 处理机调度概述](#1 处理机调度概述)
[1.1 处理机调度的层次](#1.1 处理机调度的层次)
[1.1.1 高级调度 (长程调度/作业调度)](#1.1.1 高级调度 (长程调度/作业调度))
[1.1.2 低级调度 (短程调度/进程调度)](#1.1.2 低级调度 (短程调度/进程调度))
[1.1.3 中级调度 (中程调度/内存调度)](#1.1.3 中级调度 (中程调度/内存调度))
[1.2 作业和作业调度](#1.2 作业和作业调度)
[1.2.1 作业](#1.2.1 作业)
[1.2.2 作业控制块](#1.2.2 作业控制块)
[1.2.3 作业调度的主要任务](#1.2.3 作业调度的主要任务)
[1.3 进程调度](#1.3 进程调度)
[1.3.1 进程调度任务](#1.3.1 进程调度任务)
[1.3.2 进程调度机制](#1.3.2 进程调度机制)
[1.3.3 进程调度方式](#1.3.3 进程调度方式)
[1.4 处理机调度算法的目标](#1.4 处理机调度算法的目标)
[1.4.1 处理机调度算法的目标](#1.4.1 处理机调度算法的目标)
[1.4.2 批处理系统中处理机调度算法的目标](#1.4.2 批处理系统中处理机调度算法的目标)
[1.4.3 分时系统中处理机调度算法的目标](#1.4.3 分时系统中处理机调度算法的目标)
[1.4.4 实时系统中处理机调度算法的目标](#1.4.4 实时系统中处理机调度算法的目标)
[2 调度算法](#2 调度算法)
[2.1 先来先服务调度算法](#2.1 先来先服务调度算法)
[2.2 短作业优先调度算法](#2.2 短作业优先调度算法)
[2.2.1 SJF 调度算法的缺点](#2.2.1 SJF 调度算法的缺点)
[2.3 优先级调度算法](#2.3 优先级调度算法)
[2.3.1 优先级调度算法的类型](#2.3.1 优先级调度算法的类型)
[2.3.2 优先级的类型](#2.3.2 优先级的类型)
[2.3.3 高响应比优先调度算法](#2.3.3 高响应比优先调度算法)
[2.4 轮转调度算法](#2.4 轮转调度算法)
[2.4.1 基本原理](#2.4.1 基本原理)
[2.4.2 进程切换时机](#2.4.2 进程切换时机)
[2.5 多级队列调度算法](#2.5 多级队列调度算法)
[2.6 多级反馈队列调度算法](#2.6 多级反馈队列调度算法)
[2.7 基于公平原则的调度算法](#2.7 基于公平原则的调度算法)
[3 死锁](#3 死锁)
[3.1 死锁的定义](#3.1 死锁的定义)
[3.2 产生死锁的四个必要条件](#3.2 产生死锁的四个必要条件)
[3.3 死锁的处理方法](#3.3 死锁的处理方法)
[3.3.1 预防死锁](#3.3.1 预防死锁)
[3.3.2 避免死锁](#3.3.2 避免死锁)
[3.3.3 检测死锁](#3.3.3 检测死锁)
[3.3.4 解除死锁](#3.3.4 解除死锁)
[3.4 系统安全状态](#3.4 系统安全状态)
[3.5 利用银行家算法避免死锁](#3.5 利用银行家算法避免死锁)
[3.5.1 算法中的数据结构](#3.5.1 算法中的数据结构)
[3.5.2 银行家算法](#3.5.2 银行家算法)
[3.5.3 安全性算法](#3.5.3 安全性算法)
[3.5.4 银行家算法举例](#3.5.4 银行家算法举例)
[4 相关例题](#4 相关例题)
[4.1 选择题](#4.1 选择题)
[4.2 填空题](#4.2 填空题)
[4.3 简答题](#4.3 简答题)
[4.4 计算题](#4.4 计算题)
1 处理机调度概述
在多道程序系统中,调度的实质是一种资源分配,处理机调度是对处理机进行分配。处理机调度算法是指根据处理机分配策略所规定的处理机分配算法。在多道批处理系统中,一个作业从提交到获得处理机执行,直至作业运行完毕,可能需要经历多级处理机调度。下面先来了解处理机调度的层次。
1.1 处理机调度的层次
1.1.1 高级调度 (长程调度/作业调度)
主要功能是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进
程、分配必要的资源,并将它们放入就绪队列。
高级调度主要用于多道批处理系统中。
1.1.2 低级调度 (短程调度****/**** 进程调度)
其主要功能是,根据某种算法,决定就绪队列中的哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。
低级调度是最基本的一种调度,在多道批处理、分时和实时系统中,都必须配置这种调度。
1.1.3 中级调度 (中程调度/内存调度)
引入中级调度的主要目的是提高内存利用率和系统吞吐量。
其主要功能是,把那些暂时不能运行的进程调至外存等待,此时进程的状态称为就绪驻外存状态(或挂起状态)。当具备运行条件且内存稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改它们的状态为就绪状态,挂在就绪队列上等待。
1.2 作业和作业调度
1.2.1 作业
作业是一个比程序更为广泛的概念,它不仅包含了通常的程序和数据,而且配有一份作业说明书,系统根据该说明书对程序的运行进行控制。在多道批处理系统中,会将作业作为基本单位从外存调入内存。
响应比=作业响应时间/作业执行时间= (作业执行时间+作业等待时间)/作业执行时间
1.2.2 作业控制块
作业控制块(job control block,JCB)是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。JCB中包含的内容通常有:作业标志、用户名称、用户账号、作业类型(CPU繁忙型、I/O繁忙型、批量型、终端型)、作业状态、调度信息(优先级、作业运行时间)、资源需求情况(预计运行时间、要求内存大小)、资源使用情况等
1.2.3 作业调度的主要任务
作业调度(接纳调度)的主要任务是,根据JCB中的信息,检查系统中的资源能否满足作业的需求,以及按照一定的调度算法从外存的作业后备队列中选取某些作业调入内存,并为它们创建进程和分配必要的资源,将新创建的进程排在就绪队列上等待调度。
在每次执行作业调度时都须做出以下两个决定:(1)接纳多少个作业(2)接纳哪些作业
1.3 进程调度
1.3.1 进程调度任务
①保存CPU现场信息。②按某种算法选取进程。③把CPU分配给进程。
1.3.2 进程调度机制
(1)排队器。为了提高进程调度的效率,应事先将系统中的所有就绪进程,按照一定的策
略排成一个或多个队列,以便调度程序能最快地找到它们。以后每当有一个进程转变为就绪状
态时,排队器便将它插入相应的就绪队列。
(2)分派器。分派器将进程调度程序所选定的进程从就绪队列中取出,然后进行从分派器
到新选进程间的上下文切换,以将CPU分配给新选进程。
(3)上下文切换器。在对处理机进行切换时,会发生两对上下文的切换操作:①第一对
上下文切换时,OS将保存当前进程的上下文,即把当前进程的CPU寄存器内容保存到该进程的
PCB内的相应单元,而装入分派程序的上下文,则可以方便分派程序运行;②第二对上下文切
换是移出分派程序的上下文,把新选进程的CPU现场信息装入CPU的各个相应寄存器中,以便
新选进程运行。
1.3.3 进程调度方式
(1)非抢占调度方式
在采用非抢占调度方式时,一旦把处理机分配给某进程,就会一直让它运行下去,而决
不会因为时钟中断或其他原因去抢占该进程的处理机,直至该进程完成或发生某事件而被阻塞
可能会引起进程调度的因素可归结为:①正在执行的进程运行完毕,或因发生某事件而使其无法继续运行;②正在执行的进程因提出I/O请求而暂停执行;③在进程通信或同步过程中执行了某种原语操作,如Block原语。
优点:实现简单、系统开销小,其适用于大多数批处理系统。
缺点:它不能用于分时系统和大多数实时系统。
(2)抢占调度方式。
抢占调度方式允许调度程序根据某种原则去暂停某个正在执行的进程,并将已分配给该进程
的处理机重新分配给另一进程。
优点:防止一个长进程长时间地占用处理机,以确保处理机能为所有进程提供更为公平的服务。在分时系统中,只有采用抢占调度方式才有可能实现人机交互。在实时系统中,抢占调度方式能满足实时任务的需求。
缺点:方式比较复杂,所须付出的开销也较大。
主要原则有:①优先级原则②短进程优先原则③时间片原则
1.4 处理机调度算法的目标
1.4.1 处理机调度算法的目标
(1)资源利用率
(2)公平性
(3)平衡性
(4)策略强制执行
1.4.2 批处理系统中处理机调度算法的目标
(1)平均周转时间短
周转时间(作业周转时间),是指从作业被提交给系统开始到作业完成为止的这段时间间隔。
平均带权周转时间 =(完成时间 - 提交时间) / 执行时间
周转时间 =完成时间 - 开始时间
平均周转时间表示为:
平均带权周转时间可表示为:
(2)系统吞吐量高
(3)处理机利用率高
1.4.3 分时系统中处理机调度算法的目标
(1)保证响应时间快。
(2)保证均衡性。
1.4.4 实时系统中处理机调度算法的目标
(1)保证满足截止时间的要求。
(2)保证可预测性。
2 调度算法
2.1 先来先服务调度算法
先来先服务(first come first server,FCFS)既可用于作业调度,也可用于进程调度。
系统将按照作业到达的先后次序来进行调度(优先考虑在系统中等待时间最长的作业),从就绪的进程队列中选择一个最先进入该队列的进程,并为之分配处理机,使之投入运行。在该进程一直运行到完成或发生某事件而阻塞后,进程调度程序才会将处理机分配给其他进程。
2.2 短作业优先调度算法
短作业优先(short job first,SJF)调度算法可以分别用于作业调度和进程调度。
作业调度:从外存的作业后备队列中选择估计运行时间最短的作业,并优先将它调入内存运行;
进程调度:从就绪队列中选择估计运行时间最短的进程,并为之分配CPU运行。
2.2.1 SJF 调度算法的缺点
①必须预先知道作业的运行时间。
②对长作业非常不利,长作业的周转时间会明显增长。完全忽视作业的等待时间,可能会出现饥饿现象。
③无法实现人机交互。
④没有考虑作业的紧迫程度。
2.3 优先级调度算法
2.3.1 优先级调度算法的类型
优先级调度算法,是把处理机分配给就绪队列中优先级最高的进程。
(1)非抢占式优先级调度算法。该算法规定,一旦把处理机分配给就绪队列中优先级最高
的进程,该进程便会一直执行下去直至完成,或者当该进程因发生某事件而放弃处理机时,系
统方可将处理机重新分配给优先级次高的进程。
(2)抢占式优先级调度算法。该算法规定,在把处理机分配给优先级最高的进程并使之执
行时,只要出现了另一个优先级更高的进程,调度程序就会将处理机分配给新到的优先级更高
的进程。常用于对实时性要求较高的系统中。
2.3.2 优先级的类型
- 静态优先级
静态优先级是在创建进程时确定的,其在进程的整个运行期间保持不变。
确定进程优先级大小的依据:①进程类型②进程对资源的需求③用户要求
优点:简单易行,系统开销小,
缺点:不够精确,可能会出现优先级低的进程长期未被调度的情况。
(2)动态优先级。动态优先级是指在创建进程之初,先赋予进程一个优先级,然后优先
级会随进程的推进或等待时间的增加而改变,以便获得更好的调度性能。
优点:当采用抢占式优先级调度算法时,若再规定当前进程的优先级随运行时间的推移而下降,则可防止一个长作业长期垄断处理机。
2.3.3 高响应比优先调度算法
高响应比优先(highest response ratio next,HRRN)调度算法是优先级调度算法的一个特例,通常用于作业调度。
优点:HRRN调度算法则是既考虑了作业的等待时间,又考虑了作业的运行时间,因此其既照顾了短作业,又不会致使长作业的等待时间过长,从而改善了处理机调度的性能。
缺点:每次调度之前都需要先计算响应比,会增加系统的开销。
2.4 轮转调度算法
在分时系统中,最简单也是较常用的进程调度算法是基于时间片的轮转(round robin,RR调度算法。该算法采取了非常公平的处理机分配方式,即让就绪队列上的每个进程每次仅运行一个时间片。如果就绪队列上有n 个进程,则每个进程每次大约可获得1/n的处理机时间。
2.4.1 基本原理
在RR调度算法中,系统会将所有的就绪进程按FCFS策略排成一个就绪队列。系统可设置每
隔一定时间(如30ms)便产生一次中断,去激活进程调度程序进行调度,把处理机分配给队首
进程,并令其执行一个时间片。当它运行完后,再把处理机分配给就绪队列中新的队首进程,
同样地让它也执行一个时间片。这样,就可以保证就绪队列中的所有进程,在确定的时间段
内,都能获得一个时间片的处理机时间。
2.4.2 进程切换时机
①若一个时间片尚未用完而正在运行的进程便已经完成,则立即激活调度程序,将已经运行完成的进程从就绪队列中删除,再调度就绪队列中新的队首进程运行,并启动一个新的时间片。
②当一个时间片用完时,计时器中断处理程序会被激活,此时,如果进程尚未运行完毕,调度程序就把它送往就绪队列的末尾。
3.时间片大小的确定
在RR调度算法中,时间片的大小对系统性能有很大的影响。若选择很小的时间片,则将有
利于短作业,因为它能在该时间片内完成。但是,若时间片选择得太小,则意味着系统会频繁
地执行进程调度和进程上下文的切换,这无疑会增加系统的开销;若时间片选择得太大,且为
使每个进程都能在一个时间片内完成,RR调度算法便会退化为FCFS调度算法,无法满足短作业
和交互式用户的需求。一个较为可取的时间片大小是略大于一次典型的交互所需要的时间,使
大多数交互式进程能在一个时间片内完成,从而可以获得很小的响应时间。
2.5 多级队列调度算法
多级队列调度算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程 可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级。
2.6 多级反馈队列调度算法
多级反馈队列(multileved feedback queue)调度算法,不必事先知道各种进程所需的执行时间,还可以较好地满足各种进程的需要,因而它是目前公认的一种较好的进程调度算法。
1.多级反馈队列调度算法的调度机制
(1)设置多个就绪队列。
(2)每个队列都采用FCFS调度算法。
(3)按队列优先级调度。
2.多级反馈队列调度算法的性能
在多级反馈队列调度算法中,如果规定第一个队列的时间片略大于多数人机交互所需的处
理时间,则能较好地满足各类用户的需要。①终端型用户。由于终端型用户提交的作业多属于
交互型作业,通常较小,系统只要能使这些作业在第一队列规定的时间片内完成,便可使终端
型用户感到满意。②短批处理作业用户。对于这类作业,如果可在第一队列中执行完成,则能
获得与终端型作业一样的响应时间。对于稍长的短作业,也只须在第二和第三队列各执行一个
时间片即可完成,其周转时间仍然较短。③长批处理作业用户。对于这类作业,其将依次在第
1, 2, ..., n个队列中运行,然后再按RR方式运行,用户不必担心其作业长期得不到处理。
2.7 基于公平原则的调度算法
1.保证调度算法
保证调度算法明确的性能保证,该算法可以做到调度的公平性。
在实施公平调度算法时,系统必须具有下列功能:①跟踪计算每个进程自创建以来已经执
行的处理时间;②计算每个进程应获得的处理机时间,即自创建以来的时间除以n;③计算进
程获得处理机时间的比率,即进程实际执行的处理时间和应获得的处理机时间之比;④比较各
进程获得处理机时间的比率;⑤调度程序应选择比率最小的进程,将处理机分配
给它,并让它一直运行,直到它的比率超过最接近它的进程的比率为止。
2.公平分享调度算法
在公平分享调度算法中,调度的公平性主要是针对用户的,即所有用户能获得相同的处理
机时间或所要求的时间比例。调度以进程为基本单位,必须考虑每个用户所拥有
的进程数目。
3 死锁
3.1 死锁的定义
如果一组进程中的每个进程都在等待仅由该组进程中的其他进程才能引发的事件发生,那么该
组进程是死锁的。
3.2 产生死锁的四个必要条件
只要其中任意一个条件不成立,死锁就不会发生。
(1)互斥条件。进程对所分配到的资源进行排他性使用,即在一段时间内,某资源只能被
一个进程占用。如果此时还有其他进程请求该资源,则请求进程只能等待,直至占有该资源的
进程用毕释放。
(2)请求和保持条件。进程已经占有了至少一个资源,但又提出了新的资源请求,而该被
请求的资源已被其他进程占有,此时请求进程被阻塞,同时其对自己已占有的资源保持不放。
(3)不可抢占条件。进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时
由其自己释放。
(4)循环等待条件。该条件指在发生死锁时,必然存在一个"进程---资源"循环链,
即进程集合{P0, P1, P2, ..., Pn}中的P0正在等待已被P1占用的资源,P1正在等待已被P2占用的资
源,......,Pn正在等待已被P0占用的资源。
3.3 死锁的处理方法
3.3.1 预防死锁
这是一种较简单和直观的事先预防方法。该方法是通过设置某些限制条 件,去破坏产生死锁的4个必要条件中的一个或几个来预防死锁的。预防死锁是一种较易实现的方法,已被广泛使用。
3.3.1.1 破坏"请求和保持"条件
为了能够破坏"请求和保持"条件,系统必须保证做到:当一个进程在请求资源时,它不能持有不可抢占资源。
3.3.1.2 破坏"不可抢占"条件
为了能破坏"不可抢占"条件,协议中规定,当一个已经保持了某些不可抢占资源的进程提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着进程已占有的资源会被暂时释放,或者说是被抢占了,从而破坏了"不可抢占"条件。
3.3.1.3 破坏"循环等待"条件
一个能保证"循环等待"条件不成立的方法是,对系统的所有资源类型进行线性排序,并赋予它们不同的序号。这种预防死锁策略和前两种策略相比,其资源利用率和系统吞吐量都有比较明显的改善。
3.3.2 避免死锁
该方法同样属于事先预防方法,但它并不需要通过事先采取各种限制措施来破坏产生死锁的4个必要条件,而是在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免发生死锁。
3.3.3 检测死锁
这种方法无须事先采取任何限制性措施,允许进程在运行过程中发生死
锁。但可通过检测机构及时地检测出死锁的发生,然后采取适当措施把进程从死锁中解脱出来。
3.3.4 解除死锁
该方法是指,当检测到系统中已发生死锁时就采取相应措施,将进程从死锁状态中解脱出来。通常采用的措施是撤销一些进程,回收它们的资源,将回收的资源分配给已处于阻塞状态的进程,使这些进程能够继续运行。
上述4种方法,从(1)到(4)对死锁的防范程度逐渐减弱,但对应的资源利用率却逐渐提高,且进程因资源因素而阻塞的频度逐渐下降(即进程并发程度逐渐提高)。
3.4 系统安全状态
在避免死锁方法中,把系统的状态分为安全状态和不安全状态两种。当系统处于安全状态
时可避免发生死锁,而当系统处于不安全状态时,则可能会进入死锁状态。
1.安全状态
在避免死锁方法中,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此
次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则可将资源分配给进程,否
则,令进程等待。所谓安全状态,是系统能按某种进程推进顺序(P1, P2, ..., Pn),为每个进程
Pi分配其所需的资源,直至满足每个进程对资源的最大需求,进而使每个进程都可顺利完成的一
种系统状态。此时,称进程推进顺序(P1, P2, ..., Pn)为安全序列。如果系统无法找到这样一个
安全序列,则称系统处于不安全状态。虽然并非所有不安全状态都必然会转为死锁状态,但当
系统进入不安全状态后,就有可能进入死锁状态。而只要系统处于安全状态,其就不会进入死
锁状态。因此,避免死锁的实质在于,使系统在进行资源分配时不进入不安全状态。
·如果不按照安全序列分配资源,则系统可能会由安全状态进入不安全状态。
3.5 利用银行家算法避免死锁
3.5.1 算法中的数据结构
为了实现银行家算法,必须在系统中设置4个数据结构,它们分别描述:系统中可利用的资
源、所有进程对资源的最大需求、系统中的资源分配情况以及所有进程还需要多少资源。
(1)可利用资源向量Available。
这是一个含有m 个元素的数组,其中的每个元素代表一类可利用的资源数目,其初值是系统中所配置的该类全部可用资源的数目,该数目会随对应资源的分配和回收而动态改变。如果Available[ j ]=K ,则表示系统中现有Rj 类资源K个。
(2)最大需求矩阵Max。
这是一个n ×m 的矩阵,它定义了系统中n 个进程中的每个进程对m 类资源的最大需求。如果Max[i , j ]=K ,则表示进程i 需要Rj 类资源的最大数目为K。
(3)分配矩阵Allocation。
这是一个n ×m 的矩阵,它定义了系统中每类资源当前已分配给每一进程的资源数。如果Allocation[i , j ]=K ,则表示进程i 当前已分得Rj 类资源的数目为K。
(4)需求矩阵Need。
这是一个n ×m 的矩阵,用于表示每个进程尚需的各类资源数。如果Need[i , j ]=K ,则表示进程i 还需要Rj 类资源K个方能完成其任务。
上述3个矩阵间存在下列关系: Need[i , j ]=Max[i , j ]-Allocation[i , j]
3.5.2 银行家算法
设Requesti 是进程Pi 的请求向量,如果Requesti [ j ]=K ,则表示进程Pi 需要K 个Rj类型的资源。
当Pi发出资源请求后,系统会按下列步骤进行检查。
(1)如果Requesti [ j ]≤Need[i , j],则转向步骤(2);否则认为出错,因为它所需要的资源
数已超过它所宣布的最大值。
(2)如果Requesti [j ]≤Available[j ],则转向步骤(3);否则表示尚无足够资源,Pi须等待。
(3)系统试探着把资源分配给进程Pi,并修改下列数据结构中的数值:
Available[ j ] = Available[ j ]-Requesti [ j] ;
Allocation[i , j ] = Allocation[i , j ]+Requesti [ j] ;
Need[i , j ] = Need[i , j ]-Requesti [ j]。
(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若是,则正式将
资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状
态,让进程Pi等待。
3.5.3 安全性算法
系统所执行的安全性算法可描述如下。
(1)设置两个向量。第一,工作向量Work:它表示系统可提供给进程继续运行所需的
各类资源数目,它含有m 个元素,在开始执行安全算法时,Work=Available。第二,完成向
量Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先令Finish[i]=
FALSE;当有足够的资源可分配给进程时,再令Finish[i]=TRUE。
(2)从进程集合中寻找一个能满足下述条件的进程:①Finish[i ]=FALSE;②Need[i , j]≤
Work[ j]。若能找到,则执行步骤(3);否则,执行步骤(4)。
(3)当进程Pi获得资源后,可顺利执行直至完成,并释放分配给它的资源,故应执行:
Work[ j ] = Work[ j ]+Allocation[i , j] ;
Finish[i]= TRUE ;
go to step 2 ;
(4)如果所有进程都满足Finish[i]=TRUE,则表示系统处于安全状态;否则,系统处于不
安全状态。
3.5.4 银行家算法举例
假定系统中有5个进程{P0, P1, P2, P3, P4}和3类资源{A, B, C},各类资源的数量分别为10、5、
7,在t0时刻的资源分配情况如图所示。
(1)t0时刻的安全性:利用安全性算法对t 0时刻的资源分配情况进行分析可知,在t0时刻存在着一个安全序列{P1, P3, P4, P2, P0},故系统是安全的。如下图所示:
(2)P1请求资源:P1发出请求向量Request1(1, 0, 2),系统按银行家算法进行检查。
① Request1(1, 0, 2)≤Need1(1, 2, 2)。
② Request1(1, 0, 2)≤Available1(3, 3, 2)。
③ 系统先假定可为P1分配资源,并修改Available、Allocation1和Need1向量,由此形成的资
源变化情况如图3-17中的圆括号所示。
④ 再利用安全性算法检查此时系统是否安全,如下图所示:
由所进行的安全性检查得知,可以找到一个安全序列{P1, P3, P4, P2, P0}。因此,系统是安全
的,可以立即将P1所申请的资源分配给它。
(3)P4请求资源:P4发出请求向量Request4(3, 3, 0),系统按银行家算法进行检查。
① Request4(3, 3, 0)≤Need4(4, 3, 1)。
② Request4(3, 3, 0)>Available(2, 3, 0),让P4等待。
(4)P0请求资源:P0发出请求向量Request0(0, 2, 0),系统按银行家算法进行检查。
① Request0(0, 2, 0)≤Need0(7, 4, 3)。
② Request0(0, 2, 0)≤Available(2, 3, 0)。
③ 系统暂时先假定可为P0分配资源,并修改有关数据,如下图所示:
(5)进行安全性检查:可用资源Available(2, 1, 0)已不能满足任何进程的需要,故系统
进入不安全状态,此时系统不分配资源。
4 相关例题
4.1 选择题
为了描述进程的动态变化过程, 采用了一个与进程相联系的 ( C )系
统,根据它而感知进程的存在。
A、进程状态字 B、 进程优先数 C、进程控制块 D、 进程起始地址
进程调度的关键问题是选择合理的( B ),并恰当地进行代码转换。
A、时间片间隔 B、调度算法 C 、CPU速度 D 、内存空间
采用时间片轮转法进行进程调度是为了( A )。
A、多个终端都能得到系统的及时响应
B、先来先服务
C、优先级较高的进程得到及时响应
D、需要 CPU最短的进程先做
在一段时间内,只允许一个进程访问的资源称为( C )。
A、共享资源
B、临界区
C、临界资源
D、共享区
临界区是指( D )。
A、并发进程中用于实现进程互斥的程序段
B、并发程序中用于实现进程同步的程序段
C、并发程序中用于实现进程通信的程序段
D、并发程序中与共享变量有关的程序段
进程是( B )。
A、与程序等效的概念
B、 并发环境中程序的执行过程
C、一个系统软件
D、 存放在内存中的程序
进程具有并发性和( A )两大重要属性。
A、动态性
B、 静态性
C、易用性
D、 封闭性
操作系统在控制和管理进程过程中, 涉及到( D )这一重要数据结构,这是进程存在的唯一标志。
A、FCB
B、FIFO
C、FDT
D、PCB
从下列有关进程管理的叙述中,选出五条正确叙述。( ABCEI )
A、 进程之间同步,主要源于进程之间的资源竞争,是指对多个相关进程在执行次序上的协调;
B、 临界资源是指每次仅允许一个进程访问的资源;
C、 信号量机制是一种有效的实现进程同步与互斥的工具。信号量只能由 P-V 操作来改变;
D、 V 操作是对信号量执行加1 操作,意味着释放一个单位资源, 加 1后如果信号量的值小于等于零,则从等待队列中唤醒一个进程,现进程变为等待状态,否则现进程继续进行;
E、 消息通信、信箱通信都属于高级通信方式;
F、 死锁是指因相互竞争资源使得系统中有多个阻塞进程的情况;
G、 若系统中并发运行的进程和资源之间满足互斥使用、保持和等待、非剥夺性和循环等待,则可判定系统中发生了死锁;
H、 在对付死锁的策略中,解除死锁通常都是和检测死锁配套使用;
I 、 产生死锁的原因可归结为竞争资源和进程推进顺序不当;
J、 在死锁的解决方法中,由于避免死锁采用静态分配资源策略,所以对资源的利用率不高。
并发性是指若干事件在( B )发生。
A、同一时刻
B、同一时间间隔内
C、不同时刻
D、不同时间间隔内
引入多道程序技术后,处理机的利用率( C )。
A、降低了
B、 有所改善
C、大大提高
D、 没有变化,只是程序的执行方便了
在单一处理机上执行程序,多道程序的执行是在( B)进行的。
A、同一时刻
B、同一时间间隔内
C、某一固定时刻
D、某一固定时间间隔内
如果某一进程获得除CPU外的所有所需运行资源,经调度,分配给它 CPU,该进程将进入( B )。
A、就绪状态
B、运行状态
C、等待状态
D、活动状态
如果某一进程在运行时,因某种原因暂停,此时将脱离运行状态,而进入( C )。
A、自由状态 B、停止状态
C、等待状态 D、静止状态
进程从运行状态变为等待状态的原因是( A )。
A、输入或输出事件发生
B、时间片到
C、输入或输出事件完成
D 、某个进程被唤醒
在操作系统中同时存在多个进程,它们( C )。
A、不能共享系统资源
B、不能调用同一段程序代码
C、可以共享允许共享的系统资源
D、可以共享所有的系统资源
操作系统中有一组常称为特殊系统调用,它不能被系统中断,在操作系统中称为( B )。
A、初始化程序
B、原语
C、子程序
D、控制模块
下类各项步骤中,( B )不是创建进程所必需的。
A、建立一个进程控制块( PCB)
B、由 CPU调度程序为进程调度 CPU
C、为进程分配内存等必要的资源
D、将 PCB链入进程就绪队列
系统出现死锁的原因是( C )。
A、 计算机系统发生了重大故障
B、 有多个封锁的进程同时存在
C、 若干进程因竞争资源而无休止地等待着,不释放已占有的资源
D、 资源数大大少于进程数,或进程同时申请的资源数大大超过资源 总数
两个进程争夺同一个资源( B )。
A、一定死锁 B、不一定死锁
C、不会死锁 D、以上说法都不对
解决死锁的途径是( D )。
A、立即关机排除故障
B、立即关机再重新开机
C、不要共享资源,增加独占资源
D、设计预防死锁方法,运行检测并恢复
进程 P1使用资源情况:申请资源 S1,申请资源 S2,释放资源 S1; 进程 P2 使用资源情况:申请资源 S2,申请资源 S1,释放资源 S2,系统并发执行进程 P1,P2,系统将( B )。
A、必定产生死锁 B、 可能产生死锁
C、会产生死锁 D、 无法确定是否会产生死锁
在进程通信中,使用信箱方式交换信息的是( B )。
A、低级通信
B、高级通信
C、共享存储器通信
D、管道通信
关于进程,下列叙述不正确的是( D )。
A、进程包含了数据和运行其上的程序
B、同一个程序运行在不同的数据集合上时,构成了不同的进程
C、一个被创建了的进程, 在它消亡之前, 总是处于 3 种基本状态之一
D、若干个进程在单 CPU系统中必须依次执行, 即一个进程完成后, 另一个进程才能开始工作。
多道程序环境下,操作系统分配资源以( C )为基本单位。
A、程序
B、指令
C、进程
D、作业
操作系统作业管理的主要功能是( A )。
A、作业调度与控制
B、作业提交
C、作业准备
D、编制程序
在操作系统中, JCB是指( A )。
A、作业控制块
B、进程控制块
C、文件控制块
D、程序控制块
处于后备状态的作业存放在( A )中。
A、外存
B、内存
C、A和 B
D、扩展内存
作业调度程序从处于 ( D )状态的队列中选取适当的作业调入主存
运行。
A、执行
B、提交
C、完成
D、后备
作业在系统中存在与否的唯一标志是( C )。
A、源程序
B、作业说明书
C、作业控制块
D、目的程序
作业调度的关键在于( B )。
A、选择恰当的进程管理程序
B、选择恰当的作业调度算法
C、用户作业准备充分
D、有一个较好的操作环境
按照作业到达的先后次序调度作业,排队等待时间最长的作业被优
先调度,这是指( A )调度算法。
A、先来先服务
B、 最短作业优先C、定时轮转法
D、 优先数法
为了使系统中各部分资源得到均衡使用,就必须选择对资源需求不
同的作业进行合理搭配,这项工作是由( A )完成的。
A、作业调度
B、中级调度
C、进程调度
D、内存调度
用户在一次计算过程中,或者一次事物处理中,要求计算机完成所做的工作的集合,这是指( C )。
A 、进程
B 、程序
C 、作业
D 、系统调用
作业调度又称为 [1] ,它决定将那些在外存储器上的处于[2] 状态的作业调入主机内存。 系统经作业调度程序选中一个或多个作业后,就为它们分配必要的内存、 设备及软资源。 然后控制权就交给了 [3] ,由[3] 将它们变为一个或一组 [4] ,并[5] 。
供选择的答案:
[1] :A
A 、高级调度
B 、低级调度
C 、中级调度
D 、进程调度
[2] :D
A 、就绪
B 、阻塞
C 、提交
D 、后备
[3] :B
A 、存储管理模块
B 、处理机管理模块
C 、文件管理模块
D 、设备管理模块
[4] :C
A 、指令
B 、子程序
C 、进程
D 、程序段
[5] :A
A 、把它们挂到就绪队列上
B 、为它们分配处理机
C 、把它们挂到后备队列上
D 、为它们分配设备
下列作业调度算法中,最短的作业平均周转时间是( B )。
A 、先来先服务法
B 、短作业优先法
C 、优先数法
D 、时间片轮转法
在进行作业调度时,要想兼顾作业等待时间和计算时间,应选取 ( B )。
A、均衡调度算法
B、响应比高者优先算法
C、先来先服务算法
D、优先数调度算法
在批处理系统中,周转时间是( B )。
A 、作业运行时间
B 、作业等待时间和运行时间之和
C 、作业的相对等待时间
D 、作业被调度进入内存到运行完毕的时间
作业调度算法提到的响应比是指( B )。
A、作业计算时间与周转时间之比
B、作业周转时间与计算时间之比
C、系统调度时间与作业等待时间之比
D、作业等待时间与系统调度时间之比
为了对紧急进程或重要进程进行调度,调度算法应采用( B )。
A 、先来先服务法
B 、优先级法
C 、短作业优先法
D 、时间片轮转法
时间片轮转调度算法是为了( A )。
A、多个终端都能得到系统的及时响应
B、先来先服务
C、优先级高的进程先使用 CPU
D、紧急事件优先使用CPU
( B )优先数是在创建进程时确定的, 确定之后在整个进程运行期间不再改变。
A、先来先服务
B、静态
C、动态
D、短作业
在操作系统中,作业处于( C)时,已处于进程的管理之下。
A 、后备
B 、阻塞
C 、执行
D 、完成
操作系统中,( A )负责对进程进行调度。
A、处理机管理
B、作业管理
C、高级调度管理
D、存储和设备管理
有三个作业同时到达, J1,J2,J3 的执行时间分别为 T1,T2,T3, 且 T1<T2<T3,它们在一台处理机上按单道方式运行,采用短作业优先算法, 则平均周转时间是( C )。
A、T1+T2+T3
B、(T1+T2+T3)/3
C、T1+2×T2/3+T3/3
D、T1/3+2×T2/3+T3
一个作业 8:00 到达系统,估计运行时间为 1 小时,若 10:00 开始执行该作业,其响应比是( D
)。
A、0.5
B、1
C、2
D、3
4.2 填空题
1、 常用的进程调度算法有__先来先服务__、__时间片轮转法__和 优先级法 。
2、 先来先服务调度算法是按照进程进入就绪列队的 __先后次序 __来选 择其占用的 CPU,在进程调度时总是把 CPU分配给就绪列队的 __队首__进程。
3、 时间片是指允许进程一次性占用处理器的 CPU。时间片轮转算法常用于 ___分时_____操作系统。
4、 我们把一个进程让出 CPU,由另一个进程占用 CPU的过程称为 ___进程切换 _____。
5、 当一个进程独占处理器顺序执行时, 具有__封闭性 和_可再现性 。
6、 并发进程执行时,执行结果与它执行的 _初始条件 _有关;进程的并发执行会破坏 ___封闭性 _____和__可再现性 ___。
7、 我们把并发过程中与 _临界资源进行操作 _有关的程序段称为临界区。
8、 一次至多 _一____个进程能够进入临界区,当有进程在临界区 __ 执行___时,其他想进入临界区的进程必须 等待。
9、 任一个进入临界区的进程必须在 __有限 ___时间内 ___进入 _ 临界 区。
10、 目前常用的高级通信方式有共享存储器、 _消息传递通信机制 _、管道通信 _等。
11、 形成死锁的起因是 _竞争资源 _和_进程间推进顺序非法 _。
12、 避免死锁的一个著名的算法是 __银行家算法 ___。
13、 死锁产生的四个必要条件是 __互斥条件 _、_请求和保持条件、 _不剥夺条件 和_循环等待条件 四种。
14、 检测死锁后可采用__剥夺进程占有的资源、 _进程回退 _、__进程撤销 _ 和_系统重启 _等办法来解除死锁。
15、 在实际使用中,为了操作系统的安全和可靠,往往采用死锁的 预防、___避免_____和____检测与解除 ____的混合策略, 这样既可保证整个系统不出现死锁,又可以尽可能地提高资源利用率。
16、 通常,线程的定义是 __是进程中执行运算的最小单位 __。在现代操作系统中, 资源的分配单位是 进程,而处理机的调度单位是 线程,一个进程可以有 ___多个___线程。
17、 利用优先级调度算法进行进程调度时,即从就绪队列中选择优先级高的进程有两种不同的处理方式: __非抢占式优先权算法 __和 __抢占式优先权 __算法 。
4.3 简答题
1、 什么是死锁?死锁的四个必要条件是什么?
答:如果一组进程中的每个进程都在等待仅由该组进程中的其他进程才能引发的事件发生,那么该组进程是死锁的。
产生死锁的四个必要条件是:资源互斥使用、保持和等待、非剥夺性、循环等待。
4.4 计算题
1、在单 CPU环境下,设有 4 道作业,它们的提交时间及执行时间(单位:小时)如下:
试计算采用先来先服务调度算法( FCFS)和最短作业优先调度算法( SJF)时 的平均周转时间和平均带权周转时间,并指出它们的调度顺序。
答:1. 若采用先来先服务调度算法,则其调度顺序为 1、2、3、4。
平均周转时间= (2.0 +2.8 +3.l +3.3)/4 =2.8
平均带权周转时间= (l.0 +2.8 +6.2 +11.0)/4 =5.25
2.若采用短作业优先调度算法,则其调度顺序为 1、4、3、2。
平均周转时间= (2.0+l.8+2.4+3.6)/4=2.45
平均带权周转时间= (1.0+6+4.8+3.6)/4=3.85
2、在银行家算法中,若出现下述的资源分配情况:
|---------|------------|---------|-----------|
| Process | Allocation | Need | Available |
| | A B C D | A B C D | A B C D |
| P0 | 0 0 3 2 | 0 0 1 2 | 1 6 2 2 |
| P1 | 1 0 0 0 | 1 7 5 0 | |
| P2 | 1 3 5 4 | 2 3 5 6 | |
| P3 | 0 3 3 2 | 0 6 5 2 | |
| P4 | 0 0 1 4 | 0 6 5 6 | |
该系统是否安全?如果进程P2此时提出资源申请(1,2,2,2),系统能否将资源分配给它?为什么?
答:1. 如图,在当前这一时刻,存在一安全序列<P0,P3,P1,P2,P4>,所以当前状态是安全的。
|----|------------|---------|------------|-----------------|--------|
| 进程 | Work | Need | Allocation | Work+Allocation | Finish |
| | A B C D | A B C D | A B C D | A B C D | |
| P0 | 1 6 2 2 | 0 0 1 2 | 0 0 3 2 | 1 6 5 4 | T |
| P3 | 1 6 5 4 | 0 6 5 2 | 0 3 3 2 | 1 9 8 6 | T |
| P1 | 1 9 8 6 | 1 7 5 0 | 1 0 0 0 | 2 9 8 6 | T |
| P2 | 2 9 8 6 | 2 3 5 6 | 1 3 5 4 | 3 12 13 10 | T |
| P4 | 3 12 13 10 | 0 6 5 6 | 0 0 1 4 | 3 12 14 14 | T |2.若进程p2提出请求Request(1,2,2,2):
Request(1,2,2,2)〈Need(2,3,5,6), Request(1,2,2,2)〈Available(1,6,2,2),
可尝试分配给P2,Need变为(1,1,3,4),Allocation变为(2,5,7,6),Available变为 (0,4,0,0),Available=0 4 0 0,已经不能满足P0、P1、 P2、 P3、 P4的任何请求, 造成死锁。所以不能分配给P2。