计算机操作系统(第四版)汤小丹课后答案完整版(2)

2019-03-27 16:59

13.在创建一个进程时所要完成的主要工作是什么? 答:

(1)OS 发现请求创建新进程事件后,调用进程创建原语Creat(); (2)申请空白PCB; (3)为新进程分配资源; (4)初始化进程控制块; (5)将新进程插入就绪队列.

14.在撤销一个进程时所要完成的主要工作是什么? 答:

(1)根据被终止进程标识符,从PCB 集中检索出进程PCB,读出该进程状态。 (2)若被终止进程处于执行状态,立即终止该进程的执行,置调度标志真,指示该进程被 终止后重新调度。

(3)若该进程还有子进程,应将所有子孙进程终止,以防它们成为不可控进程。 (4)将被终止进程拥有的全部资源,归还给父进程,或归还给系统。 (5)将被终止进程PCB 从所在队列或列表中移出,等待其它程序搜集信息。 15.试说明引起进程阻塞或被唤醒的主要事件是什么?

答:a. 请求系统服务;b. 启动某种操作;c. 新数据尚未到达;d. 无新工作可做. 16.进程在运行时存在哪两种形式的制约?并举例说明之。 答:

(1)间接相互制约关系。举例:有两进程A 和B,如果A 提出打印请求,系统已把唯一的

一台打印机分配给了进程B,则进程A 只能阻塞;一旦B 释放打印机,A 才由阻塞改为就 绪。

(2)直接相互制约关系。举例:有输入进程A 通过单缓冲向进程B 提供数据。当缓冲空时,

计算进程因不能获得所需数据而阻塞,当进程A 把数据输入缓冲区后,便唤醒进程B;反 之,当缓冲区已满时,进程A 因没有缓冲区放数据而阻塞,进程B 将缓冲区数据取走后便 唤醒A。

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

答:为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问 的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问, 并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码为\进入区\代码;在退出临界区后,必须执行\退出区\代码,用于恢复未被访问标志,使其它进程能再访问此临界资源。

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

答:同步机构应遵循的基本准则是:空闲让进、忙则等待、有限等待、让权等待 原因:为实现进程互斥进入自己的临界区。

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

答:wait(S):当S.value>0时,表示目前系统中这类资源还有可用的。执行一次wait 操 作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类资源减少一个,因此描 述为S.value:=S.value-1;当S.value<0时,表示该类资源已分配完毕,进程应调用block 原语自我阻塞,放弃处理机,并插入到信号量链表S.L中。

signal(S):执行一次signal操作,意味着释放一个单位的可用资源,使系统中可供分配 的该类资源数增加一个,故执行S.value:=S.value+1 操作。若加1后S.value≤0,则表 示在该信号量链表中,仍有等待该资源的进程被阻塞,因此应调用wakeup 原语,将S.L 链表中的第一个等待进程唤醒。

20.你认为整型信号量机制是否完全遵循了同步机构的四条准则?

答:整型信号量机制不完全遵循同步机制的四条准则,它不满足“让权等待”准则。 21.如何利用信号量机制来实现多个进程对临界资源的互斥访问?并举例说明之。 答:为使多个进程互斥访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其 初值为1,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作 之间即可。这样,每个欲访问该临界资源的进程在进入临界区之前,都要先对mutex 执行 wait 操作,若该资源此刻未被访问,本次wait 操作必然成功,进程便可进入自己的临界区, 这时若再有其他进程也欲进入自己的临界区,此时由于对mutex 执行wait操作定会失败, 因而该进程阻塞,从而保证了该临界资源能被互斥访问。当访问临界资源的进程退出临界区 后,应对mutex执行signal 操作,释放该临界资源。利用信号量实现进程互斥的进程描述 如下:

Var mutex: semaphore:=1; begin parbegin process 1: begin repeat wait(mutex); critical section signal(mutex); remainder section until false; end

process 2: begin

repeat wait(mutex); critical section signal(mutex); remainder section until false; end parend

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

答:(a)Var a, b, c, d, e, f, g, h; semaphore:= 0, 0,0, 0, 0, 0, 0, 0; begin parbegin

begin S1; signal(a); signal(b); end; begin wait(a); S2; signal(c); signal(d); end; begin wait(b); S3; signal(e); end; begin wait(c); S4; signal(f); end; begin wait(d); S5; signal(g); end; begin wait(e); S6; signal(h); end; begin wait(f); wait(g); wait(h); S7; end; parend end

(b)Var a, b, c, d, e, f, g, h,i,j; semaphore:= 0,0, 0, 0, 0, 0, 0,0,0, 0; begin parbegin

begin S1; signal(a); signal(b); end; begin wait(a); S2; signal(c); signal(d); end; begin wait(b); S3; signal(e); signal(f); end; begin wait(c); S4; signal(g); end; begin wait(d); S5; signal(h); end; begin wait(e); S6; signal(i); end; begin wait(f); S7; signal(j); end;

begin wait(g);wait(h); wait(i); wait(j); S8;end;

parend end

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

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

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

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

答:将wait(full)和wait(mutex)互换位置后,可能引起死锁。考虑系统中缓冲区全满时, 若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时, 它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前, 它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临 界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。 若signal(mutex)和signal(full)互换位置后只是影响进程对临界资源的释放次序,而 不会引起系统死锁,因此可以互换位置。

25.我们在为某一临界资源设置一把锁W,当W=1时表示关锁,当W=0时表示锁已打开。 试写出开锁和关锁的原语,并利用他们实现互斥。 答:整型信号量:lock(W): while W=1 do no-op W:=1;

unlock(W): W:=0;

记录型信号量:lock(W): W:=W+1; if(W>1) then block(W, L) unlock(W): W:=W-1; if(W>0) then wakeup(W, L) 例子:

Var W:semaphore:=0; begin repeat lock(W);

critical section unlock(W); remainder section until false; end

26.试修改下面生产者-消费者问题解法中的错误: 答: producer: begin repeat …

producer an item in nextp; wait(mutex); wait(full); buffer(in):=nextp;

signal(mutex);

until false; end consumer: begin repeat wait(mutex); wait(empty); nextc:=buffer(out); out:=out+1; signal(mutex);

consumer item in nextc; until false; end

27.试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法. 答:Var chopstick:array[0,…,4] of semaphore;


计算机操作系统(第四版)汤小丹课后答案完整版(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:习题与答案-5-语法分析-自上而下

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: