计算机操作系统课后习题答案.docx

上传人:b****2 文档编号:25877806 上传时间:2023-06-16 格式:DOCX 页数:31 大小:48.37KB
下载 相关 举报
计算机操作系统课后习题答案.docx_第1页
第1页 / 共31页
计算机操作系统课后习题答案.docx_第2页
第2页 / 共31页
计算机操作系统课后习题答案.docx_第3页
第3页 / 共31页
计算机操作系统课后习题答案.docx_第4页
第4页 / 共31页
计算机操作系统课后习题答案.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

计算机操作系统课后习题答案.docx

《计算机操作系统课后习题答案.docx》由会员分享,可在线阅读,更多相关《计算机操作系统课后习题答案.docx(31页珍藏版)》请在冰豆网上搜索。

计算机操作系统课后习题答案.docx

计算机操作系统课后习题答案

第一章操作系统引论

1.设计现代OS的主要目标是什么?

方便性,有效性,可扩充性和开放性.

2.OS的作用可表现为哪几个方面?

a.OS作为用户与计算机硬件系统之间的接口;

b.OS作为计算机系统资源的管理者;

c.OS实现了对计算机资源的抽象.

7.实现分时系统的关键问题是什么?

应如何解决?

a.关键问题:

使用户能与自己的作业进行交互,即当用户在自己的终端上键入命令时,系统应能及时接收并及时处理该命令,再将结果返回给用户。

b5E2RGbCAP

b.解决方法:

------对于及时接收,只需在系统中设置一多路卡,使主机能同时接收用户从各个终端上输入的数据;此外,还须为每个终端配置一个缓冲区,用来暂存用户键入的命令<或数据)。

p1EanqFDPw

------对于及时处理,应使所有的用户作业都直接进入内存,并且为每个作业分配一个时间片,允许作业只在自己的时间片内运行,这样在不长的时间内,能使每个作业都运行一次。

DXDiTa9E3d

12.试在交互性,及时性和可靠性方面,将分时系统与实时系统进行比较.

a.分时系统是一种通用系统,主要用于运行终端用户程序,因而它具有较强的交互能力;而实时系统虽然也有交互能力,但其交互能力不及前。

RTCrpUDGiT

b.实时信息系统对实用性的要求与分时系统类似,都是以人所能接收的等待时间来确定;而实时控制系统的及时性则是以控制对象所要求的开始截止时间和完成截止时间来确定的,因此实时系统的及时性要高于分时系统的及时性。

5PCzVD7HxA

c.实时系统对系统的可靠性要求要比分时系统对系统的可靠性要求高。

13.OS具有哪几大特征?

它的最基本特征是什么?

a.并发性、共享性、虚拟性、异步性。

b.其中最基本特征是并发和共享。

<最重要的特征是并发性)

18.是什么原因使操作系统具有异步性特征?

在多道程序环境下允许多个进程并发执行,但由于资源等因素的限制,

进程的执行通常并非一气呵成,而是以走走停停的方式运行。

内存中的每个

进程在何时执行,何时暂停,以怎样的速度向前推进,每道程序总共需要多

少时间才能完成,都是不可预知的,因此导致作业完成的先后次序与进入内

存的次序并不完全一致。

或者说,进程是以异步方式运行的。

但在有关进程

控制及同步机制等的支持下,只要运行环境相同,作业经多次运行,都会获

得完全相同的结果,因而进程以异步的方式执行是系统所允许的。

第二章进程管理

2.试画出下面4条语句的前趋图:

S1:

a:

=x+y。

S2:

b:

=z+1。

S3:

c:

=a-b。

S4:

w:

=c+1。

3.为什么程序并发执行会产生间断性特征?

程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的进程之间,形成了相互制约的关系,从而也就使得进程在执行期间出现间断性。

jLBHrnAILg

4.程序并发执行时为什么会失去封闭性和可再现性?

因为程序并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。

而程序一旦失去了封闭性也会导致其再失去可再现性。

xHAQX74J0X

5.在操作系统中为什么要引入进程概念?

它会产生什么样的影响?

为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,从而在操作系统中引入了进程概念。

LDAYtRyKfE

影响:

使程序的并发执行得以实行。

6.试从动态性,并发性和独立性上比较进程和程序?

a.动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;而程序只是一组有序指令的集合,是静态实体。

Zzz6ZB2Ltk

b.并发性是进程的重要特征,同时也是OS的重要特征。

引入进程的目的正是为了使其程序能和其它建立了进程的程序并发执行,而程序本身是不能并发执行的。

dvzfvkwMI1

c.独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。

而对于未建立任何进程的程序,都不能作为一个独立的单位来运行。

rqyn14ZNXI

7.试说明PCB的作用?

为什么说PCB是进程存在的唯一标志?

a.PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。

PCB中记录了操作系统所需的用于描述进程情况及控制进程运行所需的全部信息。

因而它的作用是使一个在多道程序环境下不能独立运行的程序(含数据>,成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程。

EmxvxOtOco

b.在进程的整个生命周期中,系统总是通过其PCB对进程进行控制,系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的,所以说,PCB是进程存在的唯一标志。

SixE2yXPq5

8.试说明进程在三个基本状态之间转换的典型原因.

a.处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态变为执行状态。

b.当前进程因发生某事件而无法执行,如访问已被占用的临界资源,就会使进程由执行状态转变为阻塞状态。

c.当前进程因时间片用完而被暂停执行,该进程便由执行状态转变为就绪状态。

9.为什么要引入挂起状态?

该状态有哪些性质?

a.引入挂起状态主要是出于4种需要<即引起挂起的原因):

终端用户的请求,父进程请求,负荷调节的需要,操作系统的需要。

6ewMyirQFL

b.被挂起的进程是处于静止状态,并且不能直接被处理机调度。

17.为什么进程在进入临界区之前应先执行“进入区”代码?

而在退出前又要执行“退出区”代码?

为了实现多个进程对临界资源的互斥访问,必须在临界区之前加一段用于检查临界资源是否正在被访问的代码,如未被访问,该进程可进入临界区对此临界资源进行访问;如正被访问,则该进程不能进入临界区访问临界资源。

kavU42VRUs

在退出临界区后,执行恢复访问标志的代码为“退出区”,而在退出前执行“退出区”代码主要是为了使其它进程能再访问此临界资源。

y6v3ALoS89

18.同步机构应遵循哪些基本准则?

为什么?

a.空闲让进、忙则等待、有限等待、让权等待四条准则

b.为实现进程能互斥地进入到自己的临界区

19.试从物理概念上说明记录型信号量wait和signal。

Wait(S>:

当S.value>0时,表示目前系统中这类资源还有可用的,执行一次wait操作,意味着进程请求一个单位的该类资源,是系统中可供分配的该类资源减少一个,因此描述为S.value:

=S.value-1;当S.value<0时,表示该类资源已分配完毕,因此进程应调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。

M2ub6vSTnP

Signal(S>:

执行一次signal操作,意味着释放一个单位的可用资源,使系统中可供分配的该类资源数增加一个,故执行S.value:

=S.value+1操作。

若加1后S.value≤0,则表示在该信号量链表中,仍有等待该资源的进程被阻塞,因此应调用wakeup原语,将S.L链表中的第一个等待进程唤醒。

0YujCfmUCw

22.试写出相应的程序来描述图2-17所示的前驱图。

a.Vara,b,c,d,e,f,g,h。

semaphore:

=0,0,0,1,0,0,0,0。

eUts8ZQVRd

begin

parbegin

beginS1。

signal(a>。

signal(b>。

end。

beginwait(a>。

S2。

signal(c>。

signal(d>。

end。

beginwait(b>。

S3。

signal(e>。

end。

beginwait(c>。

S4。

signal(f>。

end。

beginwait(d>。

S5。

signal(g>。

end。

beginwait(e>。

S6。

signal(h>。

end。

beginwait(f>。

wait(g>。

wait(h>。

S7。

end。

parend

end

b.略

23.在生产者—消费者问题中,如果缺少了signal(full>或signal(empty>,对执行结果将会有何影响?

sQsAEJkW5T

如果缺少了signal(full>,那么表明从第一个生产者进程开始就没有对信号量full值改变,即使缓冲池存放的产品已满了,但full的值还是0,这样消费者进程在执行wait(full>时会认为缓冲池是空的而取不到产品,那么消费者进程则会一直处于等待状态。

GMsIasNXkA

如果缺少了signal(empty>,例如在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品时empty并没有被改变,直到缓冲池中的产品都取走了,empty的值也一直是0,即使目前缓冲池有n个空缓冲区,生产者进程要想再往缓冲池中投放产品会因申请不到空缓冲区而被阻塞。

TIrRGchYzg

24.在生产者—消费者问题中,如果将两个wait操作即wait(full>和wait(mutex>互换位置,或者将signal(mutex>和signal(full>互换位置,结果会如何?

7EqZcWLZNX

在生产者—消费者问题中,如果将两个wait操作,即wait(full>和wait(mutex>互换位置后,可能引起死锁。

考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex>操作并获得成功,则当再执行wait(empty>操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty>来唤醒自己,在此之前,它不可能执行signal(mutex>操作,从而使试图通过执行wait(mutex>操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。

lzq7IGf02E

若signal(mutex>和signal(full>互换位置后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。

zvpgeqJ1hk

25.我们为某临界资源设置一把锁W,当W=1时表示关锁;当W=0时表示锁已打开,试写出开锁和关锁原语,并利用它们去实现互斥。

NrpoJac3v1

整型信号量:

lock(W>:

whileW=1dono-op

W:

=1。

unlock(W>:

W:

=0。

记录型信号量:

lock(W>:

W:

=W+1。

if(W>1>thenblock(W.L>

unlock(W>:

W:

=W-1。

if(W>0>thenwakeup(W.L>

例子:

VarW:

semaphore:

=0;

begin

repeat

lock(W>。

criticalsection

unlock(W>。

remaindersection

untilfalse。

end

26.试修改下面生产者——消费者问题解法中的错误:

27.试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法。

规定在拿到左侧的筷子后,先检查右面的筷子是否可用。

如果不可用,则先放下左侧筷子,

等一段时间再重复整个过程。

分析:

当出现以下情形,在某一个瞬间,所有的哲学家都同时启动这个算法,拿起左侧的筷子,而看到右侧筷子不可用,又都放下左侧筷子,等一会儿,又同时拿起左侧筷子……如此这样永远重复下去。

对于这种情况,所有的程序都在运行,但却无法取得进展,即出现饥饿,所有的哲学家都吃不上饭。

1nowfTG4KI

(2>描述一种没有人饿死<永远拿不到筷子)算法。

考虑了四种实现的方式

A.原理:

至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。

以下将room作为信号量,只允许4个哲学家同时进入餐厅就餐,这样就能保证至少有一个哲学家可以就餐,而申请进入餐厅的哲学家进入room的等待队列,根据FIFO的原则,总会进入到餐厅就餐,因此不会出现饿死和死锁的现象。

fjnFLDa5Zo

伪码:

semaphorechopstick[5]={1,1,1,1,1}。

semaphoreroom=4。

voidphilosopher(inti>

{

while(true>

{

think(>。

wait(room>。

//请求进入房间进餐

wait(chopstick[i]>。

//请求左手边的筷子

wait(chopstick[(i+1>%5]>。

//请求右手边的筷子

eat(>。

signal(chopstick[(i+1>%5]>。

//释放右手边的筷子

signal(chopstick[i]>。

//释放左手边的筷子

signal(room>。

//退出房间释放信号量room

}

}

B.原理:

仅当哲学家的左右两支筷子都可用时,才允许他拿起筷子进餐。

方法1:

利用AND型信号量机制实现:

根据课程讲述,在一个原语中,将一段代码同时需要的多个临界资源,要么全部分配给它,要么一个都不分配,因此不会出现死锁的情形。

当某些资源不够时阻塞调用进程。

由于等待队列的存在,使得对资源的请求满足FIFO的要求,因此不会出现饥饿的情形。

tfnNhnE6e5

伪码:

semaphorechopstick[5]={1,1,1,1,1}。

voidphilosopher(intI>

{

while(true>

{

think(>。

Swait(chopstick[(I+1>]%5,chopstick[I]>。

eat(>。

Ssignal(chopstick[(I+1>]%5,chopstick[I]>。

}

}

方法2:

利用信号量的保护机制实现。

通过信号量mutex对eat<)之前的取左侧和右侧筷子的操作进行保护,使之成为一个原子操作,这样可以防止死锁的出现。

HbmVN777sL

伪码:

semaphoremutex=1。

semaphorechopstick[5]={1,1,1,1,1}。

voidphilosopher(intI>

{

while(true>

{

think(>。

wait(mutex>。

wait(chopstick[(I+1>]%5>。

wait(chopstick[I]>。

signal(mutex>。

eat(>。

signal(chopstick[(I+1>]%5>。

signal(chopstick[I]>。

}

}

28.在测量控制系统中的数据采集任务时,把所采集的数据送往一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。

试写出利用信号量机制实现两任务共享单缓冲区的同步算法。

V7l4jRB8Hs

a.Varmutex,empty,full:

semaphore:

=1,1,0。

gather:

begin

repeat

……

gatherdatainnextp。

wait(empty>。

wait(mutex>。

buffer:

=nextp。

signal(mutex>。

signal(full>。

untilfalse。

end

compute:

begin

repeat

……

wait(full>。

wait(mutex>。

nextc:

=buffer。

signal(mutex>。

signal(empty>。

computedatainnextc。

untilfalse。

end

b.Varempty,full:

semaphore:

=1,0。

gather:

begin

repeat

……

gatherdatainnextp。

wait(empty>。

buffer:

=nextp。

signal(full>。

untilfalse。

end

compute:

begin

repeat

……

wait(full>。

nextc:

=buffer。

signal(empty>。

computedatainnextc。

untilfalse。

end

33.试比较进程间的低级通信工具与高级通信工具.

用户用低级通信工具实现进程通信很不方便,因为其效率低,通信对用户不透明,所有的操作都必须由程序员来实现,而高级通信工具则可弥补这些缺陷,用户可直接利用操作系统所提供的一组通信命令,高效地传送大量的数据。

83lcPA59W9

36.为什么要在OS中引入线程?

在OS中引入进程的目的,是为了使多个程序能并发执行,以提高资源利用率和系统吞吐量。

在OS中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。

mZkklkzaaP

38.试从调度性,并发性,拥有资源及系统开销方面对进程和线程进行比较.

a.调度性。

在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程,在引入线程的OS中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位;AVktR43bpw

b.并发性。

在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使OS具有更好的并发性;ORjBnOwcEd

c.拥有资源。

无论是传统的操作系统,还是引入了线程的操作系统,进程始终是拥有资源的一个基本单位,而线程除了拥有一点在运行时必不可少的资源外,本身基本不拥有系统资源,但它可以访问其隶属进程的资源;2MiJTy0dTT

d.开销。

由于创建或撤销进程时,系统都要为之分配和回收资源,如内存空间等,进程切换时所要保存和设置的现场信息也要明显地多于线程,因此,操作系统在创建、撤消和切换进程时所付出的开销将显著地大于线程。

gIiSpiue7A

第三章处理机调度与死锁

1.高级调度与低级调度的主要任务是什么?

为什么要引入中级调度?

高级调度的主要任务:

用于决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程,分配必要的资源,然后,再将新创建的进程插入就绪队列上,准备执行。

uEh0U1Yfmh

低级调度的主要任务:

用于决定就绪队列中的哪个进程应获得处理机,然后再由分派程序执行将处理机分配给该进程的具体操作。

IAg9qLsgBX

引入中级调度的主要目的:

是为了提高系统资源的利用率和系统吞吐量。

10.试比较FCFS和SPF两种进程调度算法

相同点:

两种调度算法都是既可用于作业调度,也可用于进程调度;

不同点:

FCFS调度算法每次调度都是从后备队列中选择一个或是多个最先进入该队列的作业,将它们调入内存,为它们分配资源,创建进程,然后插入到就绪队列中。

该算法有利于长作业/进程,不利于短作业/进程。

WwghWvVhPE

SPF调度算法每次调度都是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存中运行。

该算法有利于短作业/进程,不利于长作业/进程。

asfpsfpi4k

15.按调度方式可将实时调度算法分为哪几种?

按调度方式不同,可分为非抢占调度算法和抢占调度算法两种。

18.何谓死锁?

产生死锁的原因和必要条件是什么?

a.死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进;

b.产生死锁的原因有二,一是竞争资源,二是进程推进顺序非法;

c.必要条件是:

互斥条件,请求和保持条件,不剥夺条件和环路等待条件。

19.在解决死锁问题的几个方法中,哪种方法最易于实现?

哪种方法是资源利用率最高?

解决/处理死锁的方法有预防死锁、避免死锁、检测和解除死锁,其中预防死锁方法最容易实现,但由于所施加的限制条件过于严格,会导致系统资源利用率和系统吞吐量降低;而检测和解除死锁方法可是系统获得较好的资源利用率和系统吞吐量。

ooeyYZTjj1

20.请详细说明可通过哪些途径预防死锁?

a.摒弃"请求和保持"条件:

系统规定所有进程开始运行之前,都必须一次性地申请其在整个运行过程所需的全部资源,但在分配资源时,只要有一种资源不能满足某进程的要求,即使其它所需的各资源都空闲,也不分配给该进程,而让该进程等待;BkeGuInkxI

b.摒弃"不剥夺"条件:

系统规定,进程是逐个地提出对资源的要求的。

当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请;PgdO0sRlMo

c.摒弃"环路等待"条件:

系统将所有资源按类型进行线性排序,并赋予不同的序号,且所有进程对资源的请求必须严格按序号递增的次序提出,这样,在所形成的资源分配图中,不可能再出现环路,因而摒弃了"环路等待"条件。

3cdXwckm15

22.在银行家算法中,若出现下述资源分配情:

Process

Allocation

Need

Available

P0

0032

0012

1622

P1

1000

1750

P2

1354

2356

P3

0332

0652

P4

0014

0656

试问:

⑴该状态是否安全?

⑵若进程P2提出请求Request(1,2,2,2>后,系统能否将资源分配给它?

⑴该状态是安全的,因为存在一个安全序列

下表为该时刻的安全序列表。

资源情况

进程

Work

Need

Allocation

Work+Allocation

Finish

P0

P3

P4

P1

P2

1622

1654

1987

19911

29911

0012

0652

0656

1750

2356

0032

0333

0014

1000

1354

1654

1987

19911

29911

3121417

true

true

true

true

true

⑵若进程P2提出请求Request(1,2,2,2>后,系统不能将资源分配给它,若分配给进程P2,系统还剩的资源情况为<0,4,0,0),此时系统中的资源将无法满足任何一个进程的资源请求,从而导致系统进入不安全状态,容易引起死锁的发生。

h8c52WOngM

第四章存储器管理

1.为什么要配置层次式存储器?

这是因为:

a.设置多个存储器可以使存储器两端的硬件能并行工作。

b.采用多级存储系统,特别是Cache技术,这是一种减轻存储器带宽对系统性能影响的最佳结构方案。

c.在微处理机内部设置各种缓冲存储器,以减轻对存储器存取的压力。

增加CPU中寄存器的数量,也可大大缓解对存储器的压力。

v4bdyGious

2.可采用哪几种方式将程序装入内存?

它们分别适用于何种场合?

将程序装入内存可采用的方式有:

绝对装入方式、重定位装入方式、动态运行时装入方式;绝对装入方式适用于单道程序环境中,重定位装入方式和动态运行时装入方式适用于多道程序环境中。

J0bm4qMpJ9

3.何为静态链接?

何谓装入时动态链接和运行时动态链接?

a.静态链接是指在程序运行之前,先将各自目标模块及它们所需的库函数,链接成一个完整的装

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1