操作系统各章节自测题答案Word下载.docx
《操作系统各章节自测题答案Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统各章节自测题答案Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
而在分布式系统中,用户感觉不到所访问的资源是否在本地。
分布式操作系统掩盖了资源在地理位置上的差异。
从资源共享上看,分布式操作系统比网络操作系统能共享更多的资源。
在网络操作系统中,一个计算任务不能由一台主机任意迁移到另外一台主机上运行;
而在分布式操作系统中,所有作业可以由一台主机任意迁移到另外一台主机上处理,即可实现处理机和存储资源的共享,从而达到整个系统的负载平衡。
5.何谓作业?
何谓作业步?
作业何时转为进程?
作业是早期批处理系统引入的一个概念。
用户要求计算机系统为其完成的计算任务的集合称为作业,分时用户在一次登录后所进行的交互过程也常被看作一个作业。
一般来说,作业是比进程大的一个概念,一个作业通常包含多个计算步骤,作业中一个相对独立的处理步骤称为一个作业步。
当作业被作业调度程序选中并调入内存时,将按作业步创建相应进程。
作业步骤之间具有顺序或并发关系。
一个作业步通常可以由一个进程来完成,这样一个作业在内存处理时通常与多个进程相对应,即作业与进程具有一对多的关系。
第3章进程管理
1.为何引入多道程序设计?
在多道程序系统中,内存中作业的道数是否越多越好?
请说明原因。
引入多道程序设计技术是为了提高计算机系统资源的利用率。
在多道程序系统中,内存中作业的道数并非越多越好。
一个计算机系统中的内存、外设等资源是有限的,只能容纳适当数量的作业,当作业道数增加时,将导致对资源的竞争激烈,系统开销增大,从而导致作业的执行缓慢,系统效率下降。
2.什么是进程?
比较进程与程序之间相同点与不同点.
进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。
进程与程序的差别:
(1)程序是静态的,而进程是动态的;
(2)程序可以写在纸上或在某一存储介质上长期保存,而进程具有生存期,创建后存在,撤销后消亡;
(3)一个程序可以对应多个进程,但一个进程只能对应一个程序;
例如,一组学生在一个分时系统中做C语言实习,他们都需要使用C语言的编译程序对其源程序进行编译,为此每个学生都需要有一个进程,这些进程都运行C语言的编译程序。
另外,一个程序的多次执行也分别对应不同的进程。
3.
进程一般具有哪三个主要状态?
举例说明状态转换的原因。
进程在其生存期内可能处于如下三种基本状态之一:
(1)运行态(Run):
进程占有处理机资源,正在运行。
显然,在单处理机系统中任一时刻只能有一个进程处于此种状态;
(2)就绪态(Ready):
进程本身具备运行条件,但由于处理机的个数少于可运行进程的个数,暂未投入运行。
即相当于等待处理机资源
(3)等待态(Wait):
也称挂起态(Suspended)、封锁态(Blocked)、睡眠态(Sleep)。
进程本身不具备运行条件,即使分给它处理机也不能运行。
进程正等待某一个事件的发生,如等待某一资源被释放,等待与该进程相关的I/O传输的完成信号等。
进程的三个基本状态之间是可以相互转换的。
具体地说,当一个就绪进程获得处理机时,其状态由就绪变为运行;
当一个运行进程被剥夺处理机时,如用完系统分给它的时间片、出现更高优先级别的其它进程,其状态由运行变为就绪;
当一个运行进程因某事件受阻时,如所申请资源被占用、启动I/O传输未完成,其状态由运行变为等待;
当所等待事件发生时,如得到申请资源、I/O传输完成,其状态由等待变为就绪。
4.比较用户级线程与系统级线程间在以下方面的差别和各自的优缺点。
(1)创建速度;
(2)切换速度;
(3)并行性;
(4)TCB的存储位置
用户级线程由系统库支持。
线程的创建和撤销,以及线程状态的变化都由库函数控制并在目态完成,与线程相关的控制结构TCB保存在目态空间并由运行系统维护。
由于线程对操作系统不可见,系统调度仍以进程为单位,核心栈的个数与进程个数相对应。
用户级别线程的优点在于:
(1)线程不依赖于操作系统,可以采用与问题相关的调度策略,灵活性好;
(2)同一进程中的线程切换不需进入操作系统,因而实现效率较高。
缺点在于:
(1)同一进程中的多个线程不能真正并行,即使在多处理机环境中;
(2)由于线程对操作系统不可见,调度在进程级别,某进程中的一个线程通过系统调用进入操作系统受阻,该进程的其它线程也不能运行。
核心级别线程通过系统调用由操作系统创建,线程的控制结构TCB保存于操作系统空间,线程状态转换由操作系统完成,线程是CPU调度的基本单位。
另外由于系统调度以线程为单位,操作系统还需要为每个线程保持一个核心栈。
核心级线程的优点是并发性好,在多CPU环境中同一进程中的多个线程可以真正并行执行。
核心级别线程的缺点是线程控制和状态转换需要进入操作系统完成,系统开销比较大。
5.
何谓系统开销?
试举三个例子说明之。
运行操作系统程序,实现系统管理所花费的时间和空间称为系统开销。
例如,操作系统的内核要占用内存空间,页面调度时需占用设备资源并消耗处理机时间,进程切换时也要占用处理器时间。
第4章处理机调度
1.为什么说“关中断”会影响系统的并发性?
考虑单处理机系统。
在单处理机系统中,并发是通过将处理机轮流分配给多个进程而实现的,这个分配是由操作系统中处理机调度程序完成的。
中断是进程切换的必要条件,如果关了中断,则操作系统无法获得处理机的控制权,也就无法使多个进程分时共享处理机。
在关中断期间,一个进程独占处理机。
所以说“关中断”会影响系统的并发性
2.对于下面中断与进程状态转换之间的关系各举两个例子说明之:
(1)定会引起进程状态转换的中断事件;
(2)可能引起进程状态转换的中断事件。
定会引起进程状态转换的中断事件:
当前运行进程终止、应用程序启动I/O传输并等待I/O数据、运行程序申请当前被占用的某一资源。
可能引起进程状态转换的中断事件:
时钟中断事件可能引起进程状态转换,例如对于时间片轮转进程调度算法,若时钟中断发生后,当前进程的时间片已用完,则将发生进程切换;
否则不发生进程切换。
3.某系统采用可抢占处理机的静态优先数调度算法,请问何时会发生抢占处理机的现象?
当一个新创建的进程或一个被唤醒进程的优先数比正在运行进程的优先数高时,可能发生抢占处理机现象。
4.在实时系统中,采用不可抢占处理机的优先数调度算法是否适宜?
为什么?
不适宜。
一旦一个低优先数、需要大量CPU时间的进程占用处理机,就会一直运行,直到运行结束,或者直到因某事件而阻塞。
在此之前,即使高优先数的紧急任务到达,也得不到处理,因而可能延误对重要事件的响应和处理。
5.在分时系统中,进程调度是否只能采用时间片轮转算法?
分时系统的特点是要求响应速度及时,除RR算法之外,还可以采用可剥夺CPU的动态优先数调度算法。
如经典UNIX的处理机调度算法,由于负反馈性质,算法也可以保证响应速度。
6.有人说,在采用等长时间片轮转处理机调度算法的分时操作系统中,各终端用户所占有处理机的时间总量是相同的。
这种说法对吗?
这种说法不对。
因为处理机是分配给进程(线程)的,而不同终端用户可能有不同数量的进程,一个拥有较多数量进程的终端显然比拥有较少数量进程的终端获得CPU的时间要多。
第5章同步与互斥
1.何谓与时间有关的错误?
举例说明之。
并发进程的执行实际上是进程活动的某种交叉,某些交叉次序可能得到错误结果。
由于具体交叉的形成与进程的推进速度有关,而速度是时间的函数,因而将这种错误称为与时间有关的错误。
2.有人说,假设两个进程之间没有共享内存,则二者之间没有公共变量,这种说法准确吗?
说明原因。
如果只从用户空间考虑,这种说法是正确的。
但从操作系统的角度来说并不准确。
两个没有公共内存的用户进程可能同时(宏观)进入操作系统,并访问操作系统空间中的公共变量。
3.为何开关中断进程互斥方法仅在单CPU系统中是有效的?
关中断方法不适用于多CPU系统,因为关中断只能保证CPU不由一个进程切换到另外一个进程,从而防止多个进程并发地进入公共临界区域。
但即使关中断后,不同进程仍可以在不同CPU上并行执行关于同一组共享变量的临界区代码.
4.在多处理机系统中,软件互斥方法是否有效?
为什么?
答:
依然有效。
多处理机并行与单处理并发之间的差别在于程序交叉的粒度,单处理机机环境中进程交叉发生在指令之间,多处理机环境中进程交叉发生在指令周期之间。
由于纯软件互斥算法并不依赖特殊的硬件指令(如test_and_set),指令之间的交叉与指令周期之间的交叉结果相同。
5.设CR1是关于一组共享变量SV1的临界区域,CR2是关于另外一组共享变量SV2的临界区域,当进程P1进入CR1时,进程P2是否可以进入CR2?
可以。
因为互斥是在变量级别上的,多个进程同时进入关于不同变量的临界区不会引起与时间有关的错误。
6.设自行车生产线上有一只箱子,其中有N个位置(N≥3),每个位置可存放一个车架或一个车轮;
又设有三个工人,其活动分别为:
工人1活动:
do{
加工一个车架;
车架放入箱中;
}while
(1)
工人2活动:
加工一个车轮;
车轮放入箱中;
工人3活动:
箱中取一车架;
箱中取二车轮;
组装为一台车;
试用信号灯与PV操作实现三个工人的合作,要求解中不含死锁。
解:
用信号灯与PV操作实现三个工人的合作,管程与会合解法可仿照给出。
首先不考虑死锁问题,工人1与工人3、工人2与工人3构成生产者与消费者关系,这两对生产/消费关系通过共同的缓冲区相联系。
从资源的角度来看,箱子中的空位置相当于工人1和工人2的资源,而车架和车轮相当于工人3的资源。
定义三个信号灯如下:
semaphoreempty=N;
//空位置
semaphorewheel=0;
//车轮
semaphoreframe=0;
//车架
三位工人的活动分别为:
P(empty);
V(frame);
V(wheel);
P(frame);
V(empty);
P(wheel);
分析上述解法易见,当工人1推进速度较快时,箱中空位置可能完全被车架占满或只留有一个存放车轮的位置,而当此时工人3同时取2个车轮时将无法得到,而工人2又无法将新加工的车轮放入箱中;
当工人2推进速度较快时,箱中空位置可能完全被车轮占满,而当此时工人3取车架时将无法得到,而工人1又无法将新加工的车架放入箱中。
上述两种情况都意味着死锁。
为防止死锁的发生,箱中车架的数量不可超过N-2,车轮的数量不可超过N-1,这些限制可以用两个信号灯来表达。
semaphores1=N-2;
semaphores2=N-1;
如此,可以给出不含死锁的完整解法如下:
P(s1);
P(s2);
V(s1);
V(s2);
7.编写一个管程,使得调用进程能够等待若干指定时间单位(ticks).可以假定有一个硬件实时钟,每隔一个tick时间单位调用该管程一次。
两个外部过程:
sleep用于进程等待指定时间,tick用于时钟中断记数和唤醒等待进程。
TYPEsleep_interval=MONITOR;
Varcount:
integer;
//tick计数
q:
condition;
//等待队列
definesleep,tick;
PROCEDUREsleep(interval:
integer);
BEGIN
count:
=interval
wait(q);
END;
PROCEDUREtick;
=count-1;
IFcount=0THEN
signal(q);
BEGINEND;
8.对相关临界区的管理有哪些要求?
(1)空闲让进
当无进程处于临界区时,相应的临界资源处于空闲状态。
因而可允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。
(2)忙则等待
当已有进程进入自己的临界区时,意味着相应的临界资源正被访问,因而所有其它试图进入临界区的进程必须等待,以保证各个进程互斥地访问临界资源。
(3)有限等待
对要求访问临界资源的进程,应保证该进程能在有效时间内进入自己的临界区,以免陷入“死等”状态。
这称为饥饿(若一个进程无限等待)或死锁(若两个以上进程相互无限等待)。
(4)让权等待
当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”。
第6章死锁
1.下面关于死锁问题的叙述哪些是正确的,哪些是错误的,说明原因。
(1)参与死锁的所有进程都占有资源;
(2)参与死锁的所有进程中至少有两个进程占有资源;
(3)死锁只发生在无关进程之间;
(4)死锁可发生在任意进程之间。
说法
(1)是错误的,应该是参与死锁的所有进程都等待资源。
如下图所示,参与进程p1、p2、p3、p4,尽管p3、p4不占有资源,但也卷入死锁。
说法
(2)正确。
参与死锁的进程至少有两个,设为p1,p2,p1占有资源r1而等待资源r2,p2占有资源r2而等待资源r1。
说法(3)错误。
死锁也可能发生在相关进程之间,如p1和p2也可能是相关进程。
说法(4)正确,死锁既可能发生在相关进程之间,也可能发生在无关进程之间。
即死锁可发生在任意进程之间。
2.什么叫饥饿?
什么叫饿死?
举例说明之.
在一个动态系统中,资源请求与释放是经常性发生的进程行为。
对于每类系统资源,操作系统需要确定一个分配策略,当多个进程同时申请某类资源时,由分配策略确定资源分配给进程的次序。
资源分配策略可能是公平的(fair),能保证请求者在有限的时间内获得所需资源;
资源分配策略也可能是不公平的(unfair),即不能保证等待时间上界的存在。
在后一种情况下,即使系统没有发生死锁,某些进程也可能会长时间等待。
当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿(starvation),当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死(starvetodeath)。
考虑一台打印机分配的例子,当有多个进程需要打印文件时,系统按照短文件优先的策略排序,该策略具有平均等待时间短的优点,似乎非常合理,但当短文件打印任务源源不断时,长文件的打印任务将被无限期地推迟,导致饥饿以至饿死。
3.在银行家算法中,若出现如下资源分配情况:
Allocation
Need
Available
ABCD
P0
0032
0012
1623
P1
1000
1750
P2
1354
2356
P3
0332
0652
P4
0014
0656
试问:
(1)当前状态是否安全?
(2)如果进程P2提出安全请求Request[2]=(1,2,2,2),系统能否将资源分配给它?
说明原因.
(1)当前状态是安全状态。
运行安全性检查算法如下:
1)Work=Available;
Finish=false;
2)寻找满足如下条件的i:
Finish[i]==false并且Need[i]≤Work[i];
如果不存在,则转步骤4);
3)Work=Work+Allocation[i];
Finish[i]=true;
转步骤2)
4)如果对于所有i,Finish[i]=true,则系统处于安全状态,否则处于不安全状态。
令Work=Available=(1,6,2,3)
运行安全性检测算法,Finish[0]=false并且Need[0]=(0012)<
Work,则Work=Work+Allocation[0]=(1,6,2,3)+(0,0,3,2)=(1,6,5,5);
Finish[0]=true;
Finish[3]=false并且Need[3]=(0,6,5,2)<
Work,则Work=Work+Allocation[3]=(1,6,5,5)+(0,3,3,2)=(1,9,8,7);
Finish[3]=true;
Finish[4]=false并且Need[4=(0,6,5,6)<
Work,则Work=Work+Allocation[4]=(1,9,8,7)+(0,0,1,4)=(1,9,9,11);
Finish[4]=true;
Finish[1]=false并且Need[1]=(1,7,5,0)<
Work,则Work=Work+Allocation[4]=(1,9,9,1)+(1,0,0,0)=(2,9,9,11);
Finish[1]=true;
Finish[2]=false并且Need[2]=(2,3,5,6)<
Work,则Work=Work+Allocation[4]=(2,9,9,11)+(1,3,5,4)=(3,12,14,15);
Finish[2]=true;
可以找到一个安全进程序列<
p0,p3,p4,p1,p2>
,它使Finish[i]=true,对于所有0≤i≤4,因而可以断言系统当前处于安全状态.
(2)运行银行家算法,由于Request[2]=(1,2,2,2)£Need[2]=(2,3,5,6),因而请求合法。
进一步,Request[2]=(1,2,2,2)£Available=(1,6,2,3),故该请求是可以满足的。
假设将资源分配给p2,则系统状态变为:
AllocationNeedAvailable
ABCDABCDABCD
P0:
1
P1:
P2:
25
P3:
P4:
运行安全性检测算法,Work=Available=(0,4,0,1),Finish[i]=false,此时所有Need[i]£Work[i]均不成立,结果Finish[i]均为false,不存在安全进程序列,系统处于不安全状态。
系统将取消资源分配并恢复原来状态,进程p2等待。
4.某系统采用死锁检测手段发现死锁,设系统中资源类集合为{A,B,C},资源类A中共有8个实例,资源类B中共有6个实例,资源类C中共有5个实例.又设系统中进程集合为{p1,p2,p3,p4,p5,p6},某时刻系统状态如下:
Request
ABC
p1:
100
000
221
p2:
321
p3:
012
202
p4:
p5:
210
031
p6:
001
(1)在上述状态下系统依次接受如下请求:
Request[1]=(1,0,0);
Request[2]=(2,1,0);
Request[4]=(0,0,2)。
给出系统状态变化情况,并说明没有死锁。
(2)在由
(1)所确定的状态下系统接收如下请求:
Request[1]=(0,3,1),说明此时已发生死锁,并找出参与死锁的进程。
(1)①如果系统只是接受请求,但是没有分配资源给进程,那么系统状态变为:
AllocationRequestAvailable
ABCABCABC
100100221
321210
012202
000002
210031
001000
在该状态下运行死锁检测算法,可以找到一个进程序列<
p4,p1,p2,p3,p5,p6>
,它使Finish[i]=true,对于所有1≤i≤6,因而可以断言系统当前没有进入死锁状态。
②如果系统接受请求后,将一个A分配给进程p1,则系统状态变为:
200000121
001000
,它使Finish[i]=true,对于所有1