ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:28.85KB ,
资源ID:21156003      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21156003.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《现代操作系统第四版》第二章答案Word下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《现代操作系统第四版》第二章答案Word下载.docx

1、 (0.5)八5 =3.125%6.个计算机的RAM有4GB,其中操作系统占512MB。所有进程都占256MB (为了简化计算)并且特征相同。要是 CPU利用率达到99%,最大 I/O等待是多少?内存中最多可放(4GB-512MB)/256MB=14 个进程,设每个进程的I/O等待占总运行时间的比例为p,则CPU利用率=1-pM499%=pv71.9%7.多个作业能够并行运行,比它们顺序执行完成的要快。假设有两个作业同时开始执行,每个需要20分钟的CPU时间。如果顺序执行,那么最后一个作业需要多长时间可以完成?如果并行执行又需要多长时间?假设 I/O等待占50%。每个进程的时间为40min。顺

2、序执行时,最后一个作业需要 80min才能完成。 并行执行时,cpu利用率为1-pAn = 75%, cpu 计算时间为40min ,故总时间 t=40/75%=53.33min8.考虑一个6级多道程序系统(内存中可同时容纳 6个程序)。假设每个进程 的I/O等待占40%,那么CPU利用率是多少?利用率=1-pAn=1-(0.4)A6 = 1-0.004096=99.6%9.假设要从互联网上下载一个2GB大小的文件,文件内容可以从一组镜像服务 器获得,每个服务器可以传输文件的一部分。假设每个传输请求给定起始字节 和结束字节。如何用多线程优化下载时间?客户端进程可以创建单独的线程;每个线程都可以

3、从其中一个镜像服务器获 取文件的不同部分。 这有助于减少停机时间。 当然,所有线程都共享一个网 络链接。这个链接可以成为一个瓶颈,因为线程的数量变得非常大。10.为什么图2-11a的模式不适合用于在内存使用高速缓存的文件服务器?每个进程可以有自己的高速缓存吗?即使是有可能实现,也是很难保持文件系统的一致性。假设某个客户进程 给服务器进程1发送请求要更新文件。该进程更新其内存的 cache项。然后, 另一个客户进程给服务器进程2发送请求读取该文件。不幸的是,如果该文件 还在cache中,服务器进程2对此毫不知情,将返回过时的数据。如果第一 个进程在缓冲后将文件写到磁盘中, 而服务器进程2每次读取

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

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

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

7、询14。既然计算机中只有一套寄存器,为什么在图 2-12中的寄存器集合是按每个线程中列出而不是按每个进程列出。当一个线程停止时,它在寄存器中有值。它们必须被保存,就像进程停止 时,必须保存寄存器。多线程和多进程没有什么不同,所以每个线程需要自己 的寄存器保存区。15.在没有时钟中断的系统中,一个线程放弃 CPU后可能再也不会获得CPU资源,那么为什么线程还要通过调用 thread_yield 自愿放弃CPU ?进程中的线程合作。它们彼此不敌对。如果应用程序需要阻塞以运行得更 好,那么一个线程可以调用thread_yield 自愿放弃CPU。毕竟,同一个进程 中的线程的全部代码通常是一个程序员写

8、的。I16.线程可以被时钟中断抢占吗?如果可以,在什么情形下可以?如果不可以, 为什么不可以?用户级线程不能被时钟剥夺,除非整个进程的时间片用完。内核级线程可以单独地被剥夺。在后一种情况下,如果线程运行过久,时钟将中断该当前进 程,因而当前线程也被中断。内核可以自由地从同一个进程中选取其他线程运 行。17.请对使用单线程文件服务器和多线程文件服务器读取文件进行比较。假设所需要的数据都在块高速缓存中,获得工作请求,分派工作,并处理其余必要工 作需要花费12ms。如果在时间过去1/3时,需要一个磁盘操作,额外花费 75ms,此时该线程进入睡眠。单线程服务器每秒钟可以处理多少个请求?多 线程服务器呢

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

10、大的优点是什么?最大的缺点是什么?最大的优势就是效率。不需要陷入内核来切换线程。最大的缺点是,如果 一个线程阻塞,整个进程都会阻塞。19.在图2-15中创建线程和线程打印消息是随机交织在一起的。有没有方法可 以严格按照以下次序运行:创建线程 1,线程1打印消息,线程1结束,创建 线程2,线程2打印消息,线程2结束,以此类推;如果有,是什么方法,如 果没有请解释原因。是的,这是可以做到的。每次执行 pthread-create 后,主程序可以调用pthread_joi n 等待刚刚创建的线程退出后再创建下一个线程。20.在讨论线程中的全局变量时,曾使用过程 create_global将存储分配给

11、指向变量的指针,而不是变量自身。这是必需的吗?还是直接使用变量自身也可 行?将存储分配给指针是确实必要的,因为全局变量的大小是未知的。它可能 是从字符到浮点数数组的任何类型。如果保存其值,就不得不把其大小传递给 create_global ,这都没有问题,但是必须将其类型作为 set_global的第二个参数,那么read_global返回值的类型是不确定的。21.考虑一个线程全部在用户态实现的系统,该运行时系统每秒钟获得一个时钟 中断。当某个线程正在运行时系统中执行时发生一个时钟中断,此时会出现什 么问题?你有什么解决该问题的建议吗? runtime系统可以正好在这一时刻阻塞或者解除阻塞某个

12、线程,并且忙于 处理调度队列。此时并不适合于时钟中断处理程序开始检查该队列是否应该进 行线程切换,因为它们可能处于不一致的状态。解决方法可以是:当进入run time 系统后,设置一个标志。时钟处理程序将看到该标志,并且设置其自 己的标志,然后返回。当run time 系统完成时,它将检测时钟标志,看是否有 时钟中断发生,并且现在运行时钟处理程序。22.假设一个操作系统中不存在类似于 select的系统调用来提前了解在从文 件、管道或设备中读取时是否安全,不过该操作系统确实允许设置报警时钟, 以便中断阻塞的系统调用。在上述条件下,是否有可能在用户态中实现一个线 程包?请讨论。这是可能的,不过效

13、率很低。线程想要做一个系统调用,首先设定警报定 时器,然后才执行调用。如果线程阻塞,定时器将控制归还给线程包。当然, 大多数调用是不阻塞的,而定时器必须被清除。每个可能被阻塞的系统调用都 必须作为3个系统调用来执行。如果定时器过早失效,各种问题都可能发生。 用这种方法建立线程包并不好。23.两个进程在一个共享内存的多处理器(两个 CPU )上运行,当他们要共享一块内存时,图2-23中使用turn变量的忙等待解决方案还有效吗?仍然有效,但也仍旧是忙等待。24.在抢占式进程调度的条件下,图 2-24中互斥问题的Peterson解法可行吗?如果是非抢占式调度呢?对抢占式调度可行。事实上,这种解法就是

14、为它设计的。而对于非抢占式 调度,可能会失败。考虑这种情况:turn被初始化为0,但进程1先开始运行 了,它就会一直循环,但不释放 CPU,具有忙等待的缺点。2523.4节中所讨论的优先级反转问题在用户级线程中是否可能发生?为什么?当低优先级进程位于其临界区,而高优先级进程就绪并且被调度时,将发 生优先级倒置问题。如果使用忙等待,高优先级进程将一直运行。对于用户级 线程,不可能发生低优先级线程突然被剥夺而允许高优先级线程运行,因为是 不可剥夺的。而内核级线程,就会出现这个问题。26.2.3.4节中描述了一种有高优先级进程 H和低优先级进程L的情况,导致了 H陷入死循环。若采用轮转调度算法而不是

15、优先级调度算法,还会发生这样问 题吗?不会发生这样的问题。在轮转调度算法下。 L迟早会运行,最终它将会离开临界区。关键是,在优先级调度算法下, L永远不会运行;在轮转循环下,它定期得到一个正常的时间片,所以有机会离开其临界区。27.在使用线程的系统中,若使用用户级线程,是每个线程一个栈还是每个进程个栈?如果使用内核级线程呢?请解释每个线程都是自己调用例程,因此它必须有其自己的堆栈以保存局部变 量、返回地址等等。这一点用户级线程和内核级线程是一样的28.在开发计算机时,通常首先用一个程序模拟执行,一次运行一条指令,多处 理器也严格按此模拟。在这种没有同时事件发生的情形下,会出现竞争条件 吗?A

16、:(竞争条件指多个线程或者进程在读写一个共享数据时结果依赖于它们执 行的相对时间的情形。竞争条件发生在当多个进程或者线程在读写数据时,其 最终的的结果依赖于多个进程的指令执行顺序。)是的。模拟计算机也可以是 多道程序设计的。例如,在进程 A运行时,它读取一些共享变量。然后发生了 一个模拟时钟周期和进程 B运行。它也读取相同的变量,然后对变量进行了加 1操作。当进程A运行时,如果它也对变量进行了加 1操作,就发生了竞争条 件。29.将生产者-消费者问题扩展成一个多生产者-多消费者的问题,生产(消 费)者都写(读)一个共享的缓冲区,每个生产者和消费者都在自己的线程中 执行。图2-28中使用信号量的

17、解法在这个系统中还可行吗?可行。在给定的某个时刻,只有一个生产者(消费者)可以向(从)缓冲 区添加(取出)项目。30.考虑对于两个进程P0和P1的互斥问题的解决方案。假设变量初始值为0。P0的代码如下:pl的代码是将上述代码中的0替换为1。该方法是否能处理互斥问题中所有可 能的情形?该解决方案满足互斥,因为两个流程不可能同时处于 Critical Section 。也就是说,当turn为0时,P0可以执行其临界区,但P1不能执行。当turn 为1也有相似的情况。但是,这假设 P0必须先运行。如果P1产生某些东西 并将其放入缓冲区,那么当P0可以进入其临界区时,它会发现缓冲区为空并 阻塞。而且,

18、该解决方案需要严格交替两个过程,这是不希望发生的。31.一个可以屏蔽中断的操作系统如何实现信号量?执行信号量操作,操作系统首先要禁用中断。然后,它读取信号量的值。如果执行down操作,而信号量等于0,就将调用进程放入与信号量有关的阻 塞进程列表中。如果执行up操作,必须检测看是否有任何进程在信号量上被 阻塞。如果有一个或多个进程被阻塞,从阻塞进程的列表中移出一个,使之就 绪。当所有这些操作都完成后,就可以开启中断了。 书中的原话是:操作系统只需在执行以下操作时暂时屏蔽全部中断:测试信号量、更新信号量 以及在需要时是某个进程睡眠。:32.请说明如何仅通过二元信号量和普通机器指令实现计数信号量(即

19、可以保持一个任意值的信号量)。用两个二值信号量和一个计数器 counter实现一个计数信号量:M用于 互斥,B用于阻塞,counter用于记录up减去down的次数,再用一个链表 来记录阻塞在这个计数信号量上的进程。 down的实现:进程先对M进行down来获得counter、链表的独占访问权,并把 counter减1。如果 counter大于等于0,直接对M进行up即可;否则,记录在链表再up,然 后对B进行down从而阻塞这个进程。 up的实现:进程同样先对 M进行down,counter力卩1,若其大于0,直接对M进行up即可;否则 counter小于等于0,把链表中一个进程移出,然后对

20、 B、M依次up。33.如果一个系统只有两个进程,可以使用一个屏障来同步这两个进程吗?为什 么?如果程序操作按阶段执行,直到两个进程都完成当前阶段才能进入下一阶 段,这时就应该使用屏障。(这个答案也有点奇怪,我认为只要这两个进程不是 生产者-消费者模式就可以使用屏障。34.如果线程在内核态实现,可以使用内核信号量对同一个进程中的两个线程进 行同步吗?如果线程在用户态实现呢?假设在其他进程中没有线程必须访问该 信号量。请解释你的答案。对于内核线程,线程可以在信号量上阻塞,而内核可以运行该进程中的其 它线程。因而,使用信号量没有问题。而对于用户级线程,当某个线程在信号 量上阻塞时,内核将认为整个进

21、程都被阻塞,而且不再执行它。因此,在用户 态线程的同步失败。35.管程内的同步机制使用条件变量和两个特殊操作 wait和signal。一种更通用的同步形式是只用一条原语waitu ntil ,它以任意的布尔谓词作为参数。例 如wait un til x 0 or y + z T(c)S Q 0;44.有5个待运行作业,估计它们的运行时 N分別是9, 6, 3, 5和X。采用哪种次序运行这些作业将得到最短的平均响应时间?(答案将依赖于 X)最短作业优先可以使得平均响应时间最短。 0 X 3: X, 3, 5, 6, 9. 3 X 5: 3, X, 5, 6, 9. 5 6: 3, 5, X, 6

22、, 9.6 3, 5,6, 9, X.45.有5个批处理作业A到E,它们几乎同时到达一个计算中心。估计它们的运行时间分別为10, 6,2,4和8分钟。其优先级(由外部设定)分别为 3, 5,2,1和4,其中5为最高优先级。对于下列每种调度算法,计算其平均进 程周转时间,可忽略进程切换的开销。(a)轮转法。(b)优先级调度。(c)先来先服务(按照10,6,2,4,8次序运行)。(d)最短作业优先。对(a),假设系统具有多道程序处理能力,每个作业均公平共享 CPU时间;对(b)到(d),假设任一时刻只有一个作业运行,直到结束。所有的作业都完全是 CPU密集型作业。对于时间片轮转,在头10分钟里,每个作业获得1/5的CPU时间。在第 10分钟时,C结束。在接下来的8分钟里,每个作业获得 1/4的CPU时 间,然后D完成,然后,在接下来的6分钟内,余下的3个作业各获得1/3 的CPU时间,直到B结束,以此类推。因此,5个作业的完成时间分别为是 10, 18, 24, 28 和30,平均为22分钟。对于优先级调度,5最先运行,6分 钟完成。其它作业分别在第14, 24, 26和30分钟完成,平均为18.8分钟。 如果作业按A-E的次序执行,则分别在第10,16, 18, 22 和30分钟完成,

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

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