《现代操作系统(中文第四版)》课后习题答案第二章进程与线程.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《《现代操作系统(中文第四版)》课后习题答案第二章进程与线程.docx》由会员分享,可在线阅读,更多相关《《现代操作系统(中文第四版)》课后习题答案第二章进程与线程.docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、现代操作系统(中文第四版)课后习题答案第二章进程与线程如有错误答案,请各位评论指出,多谢多谢一1、图22中给出了三个进程状态,在理论上,三个状态可以有六种转换,每个状态两个。但是,图中只给出了四种转换。有没有可能发生 其他两种转换中的一个或两个?从阻塞到运行的转换是可以想象的。假设某个进程在I/O上阻塞,而且I/O结束,如果ft时CPU空闲,该进程就可以从阻塞态直接转到运行 态。而另外一种转换(从就绪态到阻塞)是不可能的。一个就绪进程是不可能不做任何事情就直接阻塞,必定要经过运行这一个状态。2.假设要设计一种先进的计算机体系结构,它使用硬件而不是中断来完成进程切换。CPU需要哪些信息?请描述用
2、硬件完成进程切换的工作 过程。应该有一个寄存器包含当前进程表项的指针。当I/O结束时,CPU将把当前的机器状态存入到当前进程表项中。然后,将转到中断设备的中 断向量,读取另一个进程表项的指针(服务例程),然后,就可以启动这个进程了。3、在所有当代计算机中,至少有部分中断处理程序是用汇编语I编写的。为什么?通常,高级语言不允许访问CPU硬件,而这种访问是必需的。例如,中断处理程序可能需要禁用和启用某个特定设备的中断服务,或者处理 进 程堆栈区的数据。另外,中断服务例程需要尽快地执行。4、当中断或系统调用把控制转给操作系统时,通常将内核堆栈和被中断进程的运行堆栈分离。为什么?内核使用单独的堆栈有若
3、干的原因。其中两个原因如下:首先,不希望操作系统崩溃,由于某些用户程序不允许足够的堆栈空间。第二,如果内核将数据保留在用户空间,然后从系统调用返回,那么恶意的用户可能使用这些数据找出某些关于其它进程的信息。5、一个计算机系统的内存有足够的空间容纳5个程序。这些程序又一半时间处于等待I/O的空闲状态。请问CPU时间浪费的比例是多少?五个进程都空闲的概率是1/32,所以CPU空闲时间是1/32。6、一个计算机的RAM有4GB,其中操作系统占512M。所有进程都占256M并且特征相同。要是CPU利用率达到99%,最大I/O等待是多 少?内存中有足够的空间容纳14个进程。如果一个进程的I/O是P,那么
4、它们都在等待I/O的概率是P 14。通过将其等于0.01,我们得到方程p 14=0。01。解决这个问题,我们得到0。72,因ft我们可以容忍高达72%1/0等待的进程7、多个作业能够并行运行,比它们顺序执行完成的要快。假设有两个作业同时开始执行,每个需要10分钟的CPU时间。如果顺序执行,那 么最后一个作业需要多长时间可以完成?如果并行执行又需要多长时间?假设I/O等待占50%。CPU利用率计算公式:CPU利用率二1 - pS。设运行作业所需要的时间为T。如果每个工作都有50%的I/O等待,那么在没有竞争的情况下,完成该工作需要40分钟。如果按顺序运行,第二个将在第一个启动后80分 钟完成。对
5、于两个作业,CPU利用率大约为1-0.5八2。因f-每一个系统每分钟可获得0.375cpu分钟的实时数据。要累积20分钟的CPU时间,作业必须运行20/0.375分钟,或大约53.33分钟。因ft,按顺序运行的作业在80分钟后完成,但并行运行的作业在53.33分钟后完 成。8、考虑一个6级多道程序系统(内存可同时容纳6个程序)。假设每个进程I/O等待时间40%,那么CPU利用率是多少?所有进程等待I/O的概率为0.4八6,即0.004096。因ft,CPU利用 率=1 0。004096=0:995904。9、假设要从互联网去哪个上下载一个2GB大小文件,文件内容可以从一组镜像服务器获得,每个服
6、务器可以传输文件的一部分,假定每个 传输请求给定开始字节可结束字节,如何用多线程优化下载?客户机进程可以创建单独的线程;每个线程可以从一个镜像服务器获取文件的不同部分。这有助于减少停机时间。当然,所有线程都共享一 个网络链接。当线程数量变得非常大时,ft链接可能成为瓶颈。10、为什么图2-1 la的模式不适合用于使用内存高速缓存的文件服务器。为什么不适合?每个进程可以有自己的高速缓存吗?即使是有可能实现,也是很难保持文件系统的一致性。假设某个客户进程给服务器进程1发送请求要更新文件。该进程更新其内存的cache 项。然后,另一个客户进程给服务器进程2发送请求读取该文件。不幸的是,如果该文件还在
7、cache中,服务器进程2对fl毫不知情,将返 回过时的数据。如果第一个进程在缓冲后将文件写到磁盘中,而服务器进程2每次读取时检查磁盘其缓存的备份是否是最新的,系统还可以 工作,但是需要避免磁盘访问的所有缓存系统。11、当一个多线程进程创建子进程时,若子进程得到全部父进程线程的副本,会出现问题。假如原有线程之一正在等待键盘输入,现在则 成 为两个线程在等待键盘输入,每个进程有一个。在单线程进程中也会发生这种问题吗?不会。如果单线程进程在键盘上阻塞,就不能创建子进程。12、在图2-8中,给出了一个多线程Web服务器。如果读取文件的惟一途径是正常的阻塞read系统调用,那么Web服务器应该使用用户
8、级 线程还是内核级线程?为什么?当工作者线程从磁盘读取Web页时,它就会被阻塞。如果使用用户级线程,该动作将阻塞整个进程,而破坏多线程的价值。这就是使用内核 线 程的原因:某些线程的阻塞不会影响到其他线程。13、在本章中,我们介绍了多线程Web服务器,说明它比单线程服务器和有限状态机服务器更好的原因。存在单线程服务器更好一些的情 形吗?请给出一个例子。是的。如果服务器是完全CPU绑定的,则不需要多线程。这只会增加不必要的复杂性。假设某个百万人口区域的电话查号系统(类似于114), 如果每个(姓名,电话号码)记录为64个字符,整个的数据库则为64MB,这就很容易全部读入服务器内存中以提供快速的查
9、询。14、既然计算机中只有一套寄存器,为什么图2/2中寄存器集合按每个线程中的内容列出而不是按每个进程中的内容列出?当一个线程停止时,它在寄存器中有值。它们必须被保存,就像进程停止时,必须保存寄存器。多线程和多进程没有什么不同,所以每个线 程需要自己的寄存器保存区。15、在没有时钟中段的系统中,一个县城放弃CPU后可能再也不会获得CPU资源,那么为什么线程还要通过thread_yield自愿放弃CPU ?进程中的线程合作。它们彼ft不敌对。如果应用程序需要阻塞以运行得更好,那么一个线程可以调用thread_yieldg愿放弃CPU。毕竟,同 -个进程中的线程的全部代码通常是一个程序员写的。16
10、、线程可以被时钟中断抢占吗?如果可以,在什么情况下可以?如果不可以,为什么不可以?17、请对使用单线程服务器和多线程服务器读取文件进行比较。假设所需要的数据都在块高速缓存中,花费15ms获得工作请求,分派工 作,并处理其余必要工作。如果在三分之一时间时,需要一个磁盘操作,要另外花费75ms,ft时该线程进入睡眠。在单线程情形下服务器 每秒钟可以处理多少个请求?如果是多线程呢?在单线程情况下5 cache命中需15ms,cache未命中需要90ms。其加权平均为2/315+1/390。因fL平均请求为40ms,而服务器每 秒可处理25个。对于多线程服务器,所有磁盘等待都是重叠的,因ft每个请求都
11、耗时15ms,而服务器每秒可处理66.6666个请求。18,在用户空间实现线程,其最大的优点是什么?最大的缺点是什么?最大的优势就是效率。不需要陷入内核来切换线程。最大的缺点是,如果一个线程阻塞,整个进程都会阻塞。19、在图2.15中创建线程和线程打印消息是随机交织在一起的。有没有方法可以严格按照以下次序运行:创建线程1,线程1打印消息,线 程1结束,创建线程2,线程2打印消息,线程2结束,以ft类推;如果有,是什么方法,如果没有请解释原因。是的,这是可以做到的。每次执行pthread_create)H,主程序可以调用pthreadoin等待刚刚创建的线程退出后再创建下一个线程。20、在讨论线
12、程中的全局变量时,曾使用过程creatjglobal将存储分配给指向变量的指针,而不是变量自身。这是必需的,还是由于该过 程也需要使用这些值?指针是确实必要的,因为全局变量的大小是未知的。它可能是从字符到浮点数数组的任何类型。如果保存其值,就不得不把其大小传递给 creatjglobal,这都没有问题,但是必须将其类型作为set_global的第二个参数,那么read_global返回值的类型是什么呢。21、考虑一个线程线程全部在用户空间实现的系统,该运行时系统每秒钟得到一个时钟中断。假设在该运行时系统中,当某个线程正在执行时发生一个时钟中断,ft时会出现什么问题?你有什么解决该问题的建议吗?
13、答:runtime系统可以正好在这一时刻阻塞或者解除阻塞某个线程,并且忙于处理调度队列。ft时并不适合于时钟中断处理程序开始检查该 队列是否应该进行线程切换,因为它们可能处于不一致的状态。解决方法可以是:当进入rumime系统后,设置一个标志。时钟处理程序将 看到该标志,并且设置其自己的标志,然后返回。当rumime系统完成时,它将检测时钟标志,看是否有时钟中断发生,并且现在运行时钟 处理程序。22、假设一个操作系统中不存在类似于select的系统调用来提前了解在从文件、管道或设备中读取时是否安全,不过该操作系统确实允许设 置报警时钟,以便中断阻塞的系统调用。在上述条件下,是否有可能在用户空间
14、中实现一个线程包?请讨论。这是可能的,不过效率很低。线程想要做一个系统调用,首先设定警报定时器,然后才执行调用。如果线程阻塞,定时器将控制归还给线程 包。当然,大多数调用是不阻塞的,而定时器必须被清除。每个可能被阻塞的系统调用都必须作为3个系统调用来执行。如果定时器过早失 效, 各种问题都可能发生。用这种方法建立线程包并不好。23、两个进程在一个共享内存的多处理器(两个CPU)上运行,当他们要共享一块内存是,图2-23中按使用turn变量的忙等待解决方案还 有效吗?是的,它仍然有效,但当然还在忙着等待。24、在抢占式进程调度的条件下,图2-24中互斥问题的Peterson解法可行吗?如果是非抢
15、占式呢?它肯定适用于抢占式调度。实际上,它是为那种情况而设计的。当调度是非抢占式时,它可能会失败。考虑转弯最初为0但过程1首先运 行的情况。它将永远循环,永远不会释放CPU。25、在234节中所讨论的优先级反转问题是否可能在用户级线程中发生?为什么?当低优先级进程位于其临界区,而高优先级进程就绪并且被调度时,将发生优先级倒置问题。如果使用忙等待,高优先级进程将一直运行。 对于用户级线程,不可能发生低优先级线程突然被剥夺而允许高优先级线程运行,因为是不可剥夺的。而内核级线程,就会出现这个问题。26、在节中,描述了一种有高优先级进程H和低优先级进程L的情况,导致了H陷入死循环。若采用轮转调度算法而
16、不是优先级调度算 法,还会发生这样问题吗?请给予讨论。答:在轮转调度算法下。L迟早会运行,最终它将会离开临界区。关键是,在优先级调度算法下,L永远不会运行;循环,它定期得到一个正 常的时间片,所以有机会离开其临界区。27、在使用线程的系统中,若使用用户级线程,是每个线程一个堆栈还是每个进程一个堆栈?如果使用内核级线程倩况又如何呢?请给予 解 释。答:每个线程都是自己调用例程,因ft它必须有其自己的堆栈以保存局部变量、返回地址等等。这一点用户级线程和内核级线程是一样的。28、在开发计算机时,通常首先用一个程序模拟,一次运行一条指令,甚至多处理器也严格按ft模拟。在类似于这种没有同时事件发生的 情
17、形下,会出现竞争条件吗?答:是的。模拟计算机也可以是多道程序设计的。例如,在进程A运行时,它读取一些共享变量。然后发生了一个模拟时钟周期和进程B运 行。它也读取相同的变量,然后对变量进行了加1操作。当进程A运行时,如果它也对变量进行了加1操作,就发生了竞争条件。29、将生产者消费者问题扩展成一个多生产者多消费者的问题,生成.(消费)者都写(读)一个共享的缓冲区,每个生产者消费者都在自 己的线程中执行。图2-28中使用信号量的解法在这个系统中还可行吗?是的,它会按原样运作。在给定的时刻,只有一个生产者(消费者)可以向缓冲区添加(移除)一个项目。30、答:该解决方案满足互斥,因为两个过程都不可能在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代操作系统中文第四版 现代 操作系统 中文 第四 课后 习题 答案 第二 进程 线程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内