《现代操作系统第四版》第二章答案_第1页
《现代操作系统第四版》第二章答案_第2页
免费预览已结束,剩余32页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、现代操作系统第二章进程与线程习题1. 图2-2中给出了三个进程状态,在理论上,三个状态可以有六种转换,每个状态两个。但是,图中只给出了四种转换。有没有可能发生其他两种转换中的一个或两个?A:从阻塞到运行的转换是可以想象的。假设某个进程在I/O上阻塞,而且I/O结束,如果此时CPU空闲,该进程就可以从阻塞态直接转到运行态。而另外一种转换(从阻塞态到就绪态)是不可能的。一个就绪进程是不可能做任何会产生阻塞的“0或者别的什么事情。只有运行的进程才能被阻塞。2. 假设要设计一种先进的计算机体系结构,它使用硬件而不是中断来完成进程切换。CPU需要哪些信息?请描述用硬件完成进程切换的工作过程。A:应该有一

2、个寄存器包含当前进程表项的指针。当I/O结束时,CPU将把当前的机器状态存入到当前进程表项中。然后,将转到中断设备的中断向量,读取另一个过程表项的指针(服务例程),然后,就可以启动这个进程了。3. 当代计算机中,为什么中断处理程序至少有一部分是用汇编语言编写的?A:通常,高级语言不允许访问CPU硬件,而这种访问是必需的。例如,中断处理程序可能需要禁用和启用某个特定设备的中断服务,或者处理进程堆栈的数据。另外,中断服务例程需要尽快地执行。(补充)主要是出于效率方面的考量。中断处理程序需要在尽量短的时间内完成所需的必要处理,尽量减少%6U>d<=%66<frlvdndDMfd*酬

3、彳硏邮ng辭0/1圳毘'毘触T=9N9SZ/(9NZTS-99HW&4iSM:V6<7e»o/i¥V'%66宙储nd?9S。回arneieH(N44WX%)9N9S?m霹蘇尊°flNZTSm骏斟HK中策'999i/i別WlftM+H-9%SZl*E=Sv(SO):Vi4;驷醐MDmsOile»却邮畤一擊齟輙°«S>kSlim商錠岸诙I删蜜雌42s°w«ssaM=ewn;«極H宙观鲫礎,回劃宙BrnSfW翊,匪理星ms佳翟鸯世g自畐韭懸甜咤妙琳韵兰血竽土型任k!绘

4、劉«ss±'弼:迈曲彌姬创紳m:v6银M6W陶卿砂申農"酹案期减1剛晦輝卿瞩翩豳测卿叭。&解酗理姬鯉Bssxiafl,smsas±i£ii£¥!nrs,蜩6mm«s/s融MgmrMWsna4IS書6、S.920¥8CPUa画。ssi、«SIZ350*。wmoW459lma、cpu£aB尊Tp>nN7596cpuit爲画帖40min、B33tH40/75*H5333min8蛊Jssws(ssss6±s)-aura3§事Dr40*畏CPUSS97A

5、:進aB1»"TP>n"T(04>6HT0.004096U99.6*ssss.S94SH10为什么图2-11a的模式不适合用于在内存使用高速缓存的文件服务器?每个进程可以有自己的高速缓存吗?A:即使是有可能实现,也是很难保持文件系统的一致性。假设某个客户进程给服务器进程1发送请求要更新文件。该进程更新其内存的cache项。然后,另一个客户进程给服务器进程2发送请求读取该文件。不幸的是,如果该文件还在cache中,服务器进程2对此毫不知情,将返回过时的数据。如果第一个进程在缓冲后将文件写到磁盘中,而服务器进程2每次读取时检查磁盘其缓存的备份是否是最新的,

6、系统还可以工作,但是需要避免磁盘访问的所有缓存系统。(个人认为,高速缓存应该每个进程共享,因为不是每个进程都需要频繁读写数据,如果每个进程都分配cache会造成资源浪费。11当一个多线程进程创建子进程时,如果子进程复制父进程的所有线程,就会出现问题:假如夫进程中有一个线程正在等待键盘输入,现在就有两个线程在等待键盘输入,父进程和子进程各有一个。这种问题在单线程进程中也会发生吗?A:不会。如果单线程进程在键盘上阻塞,就不能创建子进程。(而多线程进程在一个线程阻塞时可以运行另一个线程,整个进程不会因此被阻塞。)12在图2-8中,给出了一个多线程Web服务器。如果读取文件的惟一途径是正常的阻塞rea

7、d系统调用,那么Web服务器应该使用用户级线程还是内核级线程?为什么?A:当工作者线程从磁盘读取Web页时,它就会被阻塞。如果使用用户级线程,该动作将阻塞整个进程,而破坏多线程的价值。这就是使用内核线程的某些线程的阻塞不会影响到其他线程。13在本章中,我们介绍了多线程Web服务器,说明它比单线程服务器和有限状态机服务器更好的原因。存在单线程服务器更好一些的情形吗?请举例。A:在多线程Web服务器中,由分派程序从网络中读入工作请求,在检查请求后,分派线程挑选一个空转的(即被阻塞的)工作线程,提交该请求。在工作线程被唤醒后,他检查有关的请求是否在Web页面高速缓存中,这个高速缓存是所有线程否可以访

8、问的。如果没有,该线程开始一个从磁盘调入页面的read操作,并且阻塞知道该磁盘操作完成。在上述线程被阻塞在磁盘操作上时,分派线程可能挑选另一个线程运行,可以有效利用CPU资源。而在单线程服务器上,只能等第一个线程完成后,才能开始第二个线程。也存在单线程服务器更好的情形。如果服务器是完全CPU绑定的,则不需要多线程。这只会增加不必要的复杂性。假设某个百万人口区域的电话查号系统(类似于114),如果每个(姓名,电话号码)记录为64个字符,整个的数据库则为64MB,这就很容易全部读入服务器内存中以提供快速的查询。a:lissamsssB-ass»sSBs-LssCPU番CPUsmswcpu

9、7A:S43SS-ssfflsaiMisMaISMSSS3DtyEmssCPU。s34s«issiBxtswa3-7BMS、m衣HHTF凹IU7B昴凹IU、a:靈aMSsa画naB»。sssfilss、SSMWi、Isiiffi17.请对使用单线程文件服务器和多线程文件服务器读取文件进行比较。假设所需要的数据都在块高速缓存中,获得工作请求,分派工作,并处理其余必要工作需要花费12ms。如果在时间过去1/3时,需要一个磁盘操作,额外花费75ms,此时该线程进入睡眠。单线程服务器每秒钟可以处理多少个请求?多线程服务器呢?A:在单线程情况下,cache命中需要12ms,cache

10、未命中需要87ms,其加权平均为2/312+1/387=37ms,秒钟可以完成1s/37ms=27个.在多线程情况下,所有磁盘等待都是重叠的,因此每个请求耗时12ms,一秒钟可以完成1s/12ms=833个(个人认为这样算不太准确,因为最后的几个线程如果cache未命中的话,就需要87ms,可能是完不成的,不过这个题意翻译的不是很清楚,什么叫做“时间过去1/3时”,估计原意应该是”有1/3的时间需要额外的磁盘操作“。这样平均算下来也可以忽略cache未命中发生的分布情况。)18在用户态实现线程的最大的优点是什么?最大的缺点是什么?A:最大的优势就是效率。不需要陷入内核来切换线程。最大的缺点是,

11、如果一个线程阻塞,整个进程都会阻塞。19在图2-15中创建线程和线程打印消息是随机交织在一起的。有没有方法可以严格按照以下次序运行:创建线程1,线程1打印消息,线程1结束,创建线程2,线程2打印消息,线程2结束,以此类推;如果有,是什么方法,如果没有请解释原因A:是的,这是可以做到的。每次执行pthread-create后,主程序可以调用pthread_join等待刚刚创建的线程退出后再创建下一个线程。20在讨论线程中的全局变量时,曾使用过程create_global将存储分配给指向变量的指针,而不是变量自身。这是必需的吗?还是直接使用变量自身也可行?A:将存储分配给指针是确实必要的,因为全局

12、变的大小是未知的。它可能是从字符到浮点数数组的任何类型。如果保存其值,就不得不把其大小传递给create_global,这都没有问题,但是必须将其类型作为set_global的第二个,那么read_global返回的类型是不确定的。21.考虑一个线程全部在用户态实现的系统,该运行时系统每秒钟获得一个时钟中断。当某个线程正在运行时系统中执行时发生一个时钟中断,此时会出现什么问题?你有什么解决该问题的建议吗?A:runtime系统可以正好在这一时刻阻塞或者解除阻塞某个线程,并且忙于处理调度队列。此时并不适合于时钟中断处理程序开始检查该队列是否应该进行线程切换,因为它们可能处于不一致的状态。解决方法

13、可以是:当进入runtime系统后,设一个标志。时钟处理程序将到该标志,并且设其自己的标志,然后返回。当runtime系统完成时,它将检测时钟标志,是否有时钟中断发生,并且现在运行时钟处理程序。22假设一个操作系统中不存在类似于select的系统调用来提前了解在从文件、管道或设备中读取时是否安全,不过该操作系统确实允许设置报警时钟,以便中断阻塞的系统调用。在上述条件下,是否有可能在用户态中实现一个线程包?请讨论。A:这是可能的,不过效率很低。线程想要做一个系统调用,首先设定警报定时器,然后才执行调用。如果线程阻塞,定时器将控制归还给线程包。当然,大多数调用是不阻塞的,而定时器必须被清除。每个可

14、能被阻塞的系统调用都必须作为3个系统调用来执行。如果定时器过早失效,各种问题都可能发生。用这种方法建立线程包并不好。23两个进程在一个共享内存的多处理器(两个CPU)上运行,当他们要共享一块内存时,图2-23中使用turn变量的忙等待解决方案还有效吗?A:仍然有效,但也仍旧是忙等待。24在抢占式进程调度的条件下,图2-24中互斥问题的Peterson解法可行吗?如果是非抢占式调度呢?A:对抢占式调度可行。事实上,这种解法就是为它设计的。而对于林占式调度,可能会失败。考虑这种情况:turn被初始化为0,但进程1先开始运行了,它就会一直循环,但不释放CPU,具有忙等待的缺点.25.2.3.4节中所

15、讨论的优先级反转问题在用户级线程中是否可能发生?为什么?A:当低优先级进程位于其临界区,而高优先级进程就绪并且被调度时,将发生优先级倒置问题。如果使用忙等待,高优先级进程将一直运行。对于用户级线程,不可能发生低优先级线程突然被剥夺而允许高优先级线程运行,因为是不可剥夺的。而内核级线程,就会出现这个问题。26.2.3.4节中描述了一种有高优先级进程H和低优先级进程L的情况,导致了H陷入死循环。若采用轮转调度算法而不是优先级调度算法,还会发生这样问题吗?请讨论。A:不会发生这样的问题。在轮转调度算法下。L迟早会运行,最终它将会离开临界区。关键是,在优先级调度算法下,L永远不会运行;在轮转循环下,它

16、定期得到一个正常的时间片,所以有机会离开其临界区。27. 在使用线程的系统中,若使用用户级线程,是每个线程一个栈还是每个进程一个栈?如果使用内核级线程呢?请解释。A:每个线程都是自己调用例程,因此它必须有其自己的堆栈以保存局部变量、返回地址等等。这一点用户级线程和内核级线程是一样的。28. 在开发计算机时,通常首先用一个程序模拟执行,一次运行一条指令,多处理器也严格按此模拟。在这种没有同时事件发生的情形下,会出现竞争条件吗?A:(竞争条件指多个线程或者进程在读写一个共享数据时结果依赖于它们执行的相对时间的情形。竞争条件发生在当多个进程或者线程在读写数据时,其最终的的结果依赖于多个进程的指令执行

17、顺序。)是的。模拟计算机也可以是多道程序设计的。例如,在进程A运行时,它读取一些共享变。然后发生了一个模拟时钟周期和进程B运行。它也读取相同的变量,然后对变进行了加1操作。当进程A运行时,如果它也对变进行了加1操作,就发生了竞争条件。29. 将生产者-消费者问题扩展成一个多生产者-多消费者的问题,生产(消费)者都写(读)一个共享的缓冲区,每个生产者和消费者都在自己的线程中执行。图2-28中使用信号的解法在这个系统中还可行吗?A:可行。在给定的某个时刻,只有一个生产者(消费者)可以向(从)缓冲30考虑对于两个进程P0和P1的互斥问题的解决方案。假设变初始值为0。P0的代码如下:pl的代码是将上述

18、代码中的0替换为1。该方法是否能处理互斥问题中所有可能的情形?A:该解决方案满足互斥,因为两个流程不可能同时处于CriticalSection。也就是说,当turn为0时,P0可以执行其临界区,但P1不能执行。当turn为1也有相似的情况。但是,这假设P0必须先运行。如果P1产生某些东西并将其放入缓冲区,那么当P0可以进入其临界区时,它会发现缓冲区为空并阻塞。而且,该解决方案需要严格交替两个过程,这是不希望发生的。31一个可以屏蔽中断的操作系统如何实现信号量?A:执行信号操作,操作系统首先要禁用中断。然后,它读取信号的如果执行down操作,而信号等于0,就将调用进程放入与信号有关的阻塞进程列表

19、中。如果执行up操作,必须检测看是否有任何进程在信号上被阻塞。如果有一个或多个进程被阻塞,从阻塞进程的列表中移出一个,使之就绪。当所有这些操作都完成后,就可以开启中断了。书中的原话是:操作系统只需在执行以下操作时暂时屏蔽全部中断:测试信号、更新信号量以及在需要时是某个进程睡眠。:32.请说明如何仅通过二元信号量和普通机器指令实现计数信号量(即可以保持一个任意值的信号量)。:A:用两个二值信号量和一个计数器counter实现一个计数信号量:M用于互斥,B用于阻塞,counter用于记录up减去down的次数,再用一个链表来记录阻塞在这个计数信号量上的进程。down的实现:进程先对M进行down来

20、获得counter、链表的独占访问权,并把counter减1。如果counter大于等于0,接对M进行up即可;否则,记录在链表再up,然后对B进行down从而阻塞这个进程。up的实现:进程同样先对M进行down,counter加1,若其大于0,接对M进行up即可;否则counter小于等于0,把链表中一个进程移出,然后对B、M依次up。33. 如果一个系统只有两个进程,可以使用一个屏障来同步这两个进程吗?为什么?A:如果程序操作按阶段执行,直到两个进程都完成当前阶段才能进入下一阶段,这时就应该使用屏障。(这个答案也有点奇怪,我认为只要这两个进程不是生产者-消费者模式就可以使用屏障。)34.

21、如果线程在内核态实现,可以使用内核信号量对同一个进程中的两个线程进行同步吗?如果线程在用户态实现呢?假设在其他进程中没有线程必须访问该信号量。请解释你的答案。A:对于内核线程,线程可以在信号量上阻塞,而内核可以运行该进程中的其它线程。而,使用信号量没有问题。而对于用户级线程,当某个线程在信号此,在用户量上阻塞时,内核将认为整个进程都被阻塞,而且不再执行它。态线程的同步失败。35. 管程内的同步机制使用条件变和两个特殊操作wait和signal。一种更通用的同步形式是只用一条原语waituntil,它以任意的布尔谓词作为参数。例waituntilx<0ory+z<n这样就不再需要si

22、gnal原语。很显然这种方法比Hoare或BrinchHansen方案更通用,但它从未被采用过。为什么?(提示:请考虑其实现。)A:其实现的代价很高。每次在某些等待变化的进程的谓词中出现的任何变量,runtime系统都必须重新计算该谓词,以判断该进程是否能够被解锁。而对于Hoare和BrinchHansen管程,则只需signal原语即可唤醒进程。36. 一个快餐店有四类雇员:(1)领班,接收顿客点的菜单;(2)厨师,准备饭菜;(3)打包工,将饭菜装在袋子里;(4)收银员,将食品袋交给顾客并收钱。每个雇员可被看作一个进行通信的顺序进程。它们采用的进程间通信方式是什么?请将这个模型与UNIX中进

23、程联系起来。s0099UQMS«fsisssssiclsswzlss.mrfrX!Nnw。皆R%¥昔富健frw-SMBSS3NS.<siH-OssEg*()u«rteEp«rto>vrpuouQsHe-<sswiaswm。豪wrCNe皑痛CM事ogf£ml-lswiffifiESSW.§0、G01-1A:3个。40Round-robin调度算法一般需要维护一个继续进程列表,每个进程在列表中只出现一次。如果某个进程在列表中出现两次会发生什么情况?什么情况下可以允许多次出现?A:如果一个进程多次岀现在列表中,在每个周期,

24、它将得到多个时间片。这种方法可以用来为更重要的进程提供更大的CPU份额。但是,当进程阻塞时,所有条目最好从可运行进程列表中删除。41是否可以通过分析源代码来确定进程是CPU密集型的还是I/O密集型的?运行时如何确定?单的情况下是有可能通过看源代码来判断是否为I/O绑定的。例如,程序开始时,将其所有输入文件读入到缓冲器中,这种程序通常不是I/O绑定的;但是,对不同文件进行增量地读写(诸如编译程序)的问题很有可能是I/O绑定的。如果操作系统提供诸如UNIXps的命令,就可以得知被程序使用的CPU时间的,你能把这个时间量与整个的时间比较以判断。当然,这在你是系统中唯一的用户时最有意义。42请说明在R

25、ound-robin调度算法中时间片长度和上下文切换时间时怎样相互影响的。A:如果上下文切换时间较大,则时间时间片必须成比例大。否则,上下文切换的开销可能相当高。如果典型的CPU突发时间小于时间片,则选择大的时间片会导致系统效率低下。如果上下文切换非常小或是可以忽略的,那么可以用更多的自由选择时间片。43对某系统进行监测后发现,在阻塞I/O之前,平均每个进程运行时间为T。一次进程切换需要的时间为S,这里S实际上就是幵销。对于采用时间片长度为Q的轮转调度,请给出以下各种情况中CPU利用率的计算公式:(a) Q=8(b) Q>T(c) S<Q<T(d) Q=S(e) Q趋近于0A

26、:(a)T/(T+S);(b)T/(T+S);(c)Q/(Q+S);(d)1/2;(e)>0;44有5个待运行作业,估计它们的运行时N分別是9,6,3,5和X。采用哪种次序运行这些作业将得到最短的平均响应时间?(答案将依赖于X)A:最短作业优先可以使得平均响应时间最短。0<XM3:X,3,5,6,9.3<XM5:3,X,5,6,9.5<XM6:3,5,X,6,9.6<XM9:3,5,6,X,9.X>9:3,5,6,9,X.ss(p)ls(q)issuSSSSBS$R.sn§。品我8/门901-|醫)禮舉量s。MR暴牡(q)ws$«

27、1;=$(番壘番)量牡K。荼8RY901-|«|!眾&蛊egw蚩UJffi<sRSBF聚ocnEoz71-197usssttsiisN6I-I曽ssocnEcol-l.91-l.ov-l813IfcweUJAa。聚8.8V-I«aBFssocnR9ri龙.5SRies.£&s.S9M*SSSK。慕zz«aBFOE展82£0010TiIn<oss«e*s舉慕a嘤凰&n<DsstgiBH慕8e*FS.sYss01-10放诗lul-ll-l«ssuesssee巻冷«»E

28、s«fsuess£s«e巻s风ISECNSBStcJC&GHE8才7£sI-l.TFSSKS&eHssmt.san«3ln£rMW3&ss5osulsI-lRsulok,sluoz蔚Eok«=DR&£JMfASA-<laesksimitxsKS»ST3.§.SSBss&sV3S3甘着SMKitsss閱i£s弐營£»£Es:s»ss,SBSiv-<A:(40V2+2E2)1、2+4ql、2n25msmo.lxwsstt933、sss50ms、looms200ms蓉250my435ms、20ms、10ms昌xmssCPUA-35、50+20、100+10、200g2502HHVX22.5Dr1msCPUa画、sk25184-fss20ms8CPUa画。ssssfi7A:l、6+25£5000"2、3A、WW.843、WKisissaasin-SSIA:内核可以通过任何方式调度进程,但对于每个进程,严格按照进程的优先级顺序执行。通过让用户进程设置自己的优先级,让用户控制策略,而内核处理机制。54.在哲学家就餐问题的解法(图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论