《操作系统精髓与设计原理·第五版》练习题及其答案(文本资料).doc
![资源得分’ 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)
《《操作系统精髓与设计原理·第五版》练习题及其答案(文本资料).doc》由会员分享,可在线阅读,更多相关《《操作系统精髓与设计原理·第五版》练习题及其答案(文本资料).doc(119页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 1 1 章章 计算机系统概述计算机系统概述1.1、图 1.3 中的理想机器还有两条 I/O 指令:0011 = 从 I/O 中载入 AC0111 = 把 AC 保存到 I/O 中在这种情况下,12 位地址标识一个特殊的外部设备。请给出以下程序的执行过程(按照图 1.4 的格式):1. 从设备 5 中载入 AC。2. 加上存储器单元 940 的内容。3. 把 AC 保存到设备 6 中。假设从设备 5 中取到的下一个值为 3940 单元中的值为 2。答案:存储器(16 进制内容):300:3005;301:5940;302:7006步骤 1:3005IR;步骤 2:3AC步骤 3:5940I
2、R;步骤 4:325AC步骤 5:7006IR:步骤 6:AC设备 61.2、本章中用 6 步来描述图 1.4 中的程序执行情况,请使用 MAR 和 MBR 扩充这个描述。答案:1. a. PC 中包含第一条指令的地址 300,该指令的内容被送入 MAR 中。b. 地址为 300 的指令的内容(值为十六进制数 1940)被送入 MBR,并且 PC 增 1。这两个步骤是并行完成的。c. MBR 中的值被送入指令寄存器 IR 中。2. a. 指令寄存器 IR 中的地址部分(940)被送入 MAR 中。b. 地址 940 中的值被送入 MBR 中。c. MBR 中的值被送入 AC 中。3. a. P
3、C 中的值(301)被送入 MAR 中。b. 地址为 301 的指令的内容(值为十六进制数 5941)被送入 MBR,并且 PC 增 1。c. MBR 中的值被送入指令寄存器 IR 中。4. a. 指令寄存器 IR 中的地址部分(941)被送入 MAR 中。b. 地址 941 中的值被送入 MBR 中。c. AC 中以前的内容和地址为 941 的存储单元中的内容相加,结果保存到 AC 中。5. a. PC 中的值(302)被送入 MAR 中。b. 地址为 302 的指令的内容(值为十六进制数 2941)被送入 MBR,并且 PC 增 1。c. MBR 中的值被送入指令寄存器 IR 中。6. a
4、. 指令寄存器 IR 中的地址部分(941)被送入 MAR 中。b. AC 中的值被送入 MBR 中。c. MBR 中的值被存储到地址为 941 的存储单元之中。1.4、假设有一个微处理器产生一个 16 位的地址(例如,假设程序计数器和地址寄存器都是 16 位)并且具有一个 16 位的数据总线。a.如果连接到一个 16 位存储器上,处理器能够直接访问的最大存储器地址空间为多少?b.如果连接到一个 8 位存储器上,处理器能够直接访问的最大存储器地址空间为多少?c.处理访问一个独立的 I/O 空间需要哪些结构特征?d.如果输入指令和输出指令可以表示 8 位 I/O 端口号,这个微处理器可以支持多少
5、 8 位 I/O 端口?答案:对于(a)和(b)两种情况,微处理器可以直接访问的最大存储器地址空间为216 = 64K bytes;唯一的区别是8位存储器每次访问传输1个字节,而16位存储器每次访问可以传输一个字节或者一个16位的字。对于(c)情况,特殊的输入和输出指令是必要的,这些指令的执行体会产生特殊的“I/O信号”(有别于“存储器信号”,这些信号由存储器类型指令的执行体产生);在最小状态下,一个附加的输出针脚将用来传输新的信号。对于(d)情况,它支持28 = 256个输入和28 = 256个输出字节端口和相同数目的16位I/O端口;在任一情况, 一个输入和一个输出端口之间的区别是通过被执
6、行的输入输出指令所产生的不同信号来定义的。1.5、考虑一个 32 位微处理器,它有一个 16 位外部数据总线,并由一个 8MHz的输入时钟驱动。假设这个微处理器有一个总线周期,其最大持续时间等于 4个输入时钟周期。请问该微处理器可以支持的最大数据传送速度为多少?外部数据总线增加到 21 位,或者外部时钟频率加倍,哪种措施可以更好地提高处理器性能?请叙述你的设想并解释原因。答案:时钟周期1/(8MHZ)125ns总线周期4125ns500ns每 500ns 传输 2 比特;因此传输速度4MB/s加倍频率可能意味着采用了新的芯片制造技术(假设每个指令都有相同的时钟周期数) ;加倍外部数据总线,在芯
7、片数据总线驱动/锁存、总线控制逻辑的修改等方面手段广泛(或许更新) 。在第一种方案中,内存芯片的速度要提高一倍(大约) ,而不能降低微处理器的速度;第二种方案中,内存的字长必须加倍,以便能发送/接受 32 位数量。1.6、考虑一个计算机系统,它包含一个 I/O 模块,用以控制一台简单的键盘/打印机电传打字设备。CPU 中包含下列寄存器,这些寄存器直接连接到系统总线上:INPR:输入寄存器,8 位OUTR:输出寄存器,8 位FGI:输入标记,1 位FGO:输出标记,1 位IEN:中断允许,1 位I/O 模块控制从打字机中输入击键,并输出到打印机中去。打字机可以把一个字母数字符号编码成一个 8 位
8、字,也可以把一个 8 位字解码成一个字母数字符号。当 8 位字从打字机进入输入寄存器时,输入标记被置位;当打印一个字时,输出标记被置位。a. 描述 CPU 如何使用这 4 个寄存器实现与打字机间的输入/输出。b. 描述通过使用 IEN,如何提高执行效率?答案:a.来源于打字机的输入储存在 INPR 中。只有当 FGI0 时,INPR 才会接收来自打字机的数据。当数据接收后,被储存在 INPR 里面,同时 FGI置为 1。CPU 定期检查 FGI。如果 FGI1,CPU 将把 INPR 里面的内容传送至 AC,并把 FGI 置为 0。当 CPU 需要传送数据到打字机时,它会检查 FGO。如果FG
9、O0,CPU 处于等待。如果 FGO1,CPU 将把 AC 的内容传送至 OUTER并把 FGO 置为 0。当数字符号打印后,打字机将把 FGI 置为 1。b.(A)描述的过程非常浪费。速度远高于打字机的 CPU 必须反复不断的检查 FGI 和 FGO。如果中断被使用,当打字机准备接收或者发送数据时,可以向 CPU 发出一个中断请求。IEN 计数器可以由 CPU 设置(在程序员的控制下) 。1.7、实际上在所有包括 DMA 模块的系统中,DMA 访问主存储器的优先级总是高于处理器访问主存储器的优先级。这是为什么?答案:如果一个处理器在尝试着读或者写存储器时被挂起, 通常除了一点轻微的时间损耗之
10、外没有任何危害。但是,DMA可能从或者向设备(例如磁盘或磁带)以数据流的方式接收或者传输数据并且这是不能被打断的。否则,如果DMA设备被挂起(拒绝继续访问主存),数据可能会丢失。1.9、一台计算机包括一个 CPU 和一台 I/O 设备 D,通过一条共享总线连接到主存储器 M,数据总线的宽度为 1 个字。CPU 每秒最多可执行 106条指令,平均每条指令需要 5 个机器周期,其中 3 个周期需要使用存储器总线。存储器读/写操作使用 1 个机器周期。假设 CPU 正在连续不断地执行后台程序,并且需要保证 95%的指令执行速度,但没有任何 I/O 指令。假设 1 个处理器周期等于 1 个总线周期,现
11、在要在 M 和 D 之间传送大块数据。a.若使用程序控制 I/O,I/O 每传送 1 个字需要 CPU 执行两条指令。请估计通过 D 的 I/O 数据传送的最大可能速度。b.如果使用 DMA 传送,请估计传送速度。答案:a.处理器只能分配 5的时间给 I/O.所以最大的 I/O 指令传送速度是10e60.0550000 条指令/秒。因此 I/O 的传送速率是 25000 字/秒。b.使用 DMA 控制时,可用的机器周期下的数量是10e6(0.0550.952)2.1510e6如果我们假设 DMA 模块可以使用所有这些周期,并且忽略任何设置和状态检查时间,那么这个值就是最大的 I/O 传输速率。
12、1.10、考虑以下代码:for ( i = 0;i j := i + 1 mod n;while (j i) and (not waitingj) do j := j + 1 mod n;if j = i then lock := falseelse waiting := false;Until这个算法用最普通的数据结构:var waiting: array 0.n 1 of booleanLock:boolean这些数据结构被初始化成假的,当一个进程离开它的临界区,它就搜索waiting 的循环队列5.8 考虑下面关于信号量的定义:Void semWait(s)If (s.count0)s.
13、count-;ElsePlace this process in s.queue;Block;Void semSignal(s) If (there is at liast one process blocked on semaphore) Remove a process P from s.queue;Place process P on ready list;Else s.count+;比较这个定义和图 5.3 中的定义,注意有这样的一个区别:在前面的定义中,信号量永远不会取负值。当在程序中分别使用这两种定义时,其效果有什么不同?也就是说,是否可以在不改变程序意义的前提下,用一个定义代替另
14、一个?答:这两个定义是等价的,在图 5.3 的定义中,当信号量的值为负值时,它的值代表了有多少个进程在等待;在此题中的定义中,虽然你没有关于这方面的信息,但是这两个版本的函数是一样的。5.9 可以用二元信号量实现一般信号量。我们使用 semWaitB 操作和semSignalB 操作以及两个二元信号量 delay 和 mutex。考虑下面的代码Void semWait(semaphor s)semWaitB(mutex);s-;if (s;if nm = 0 then semSignal(a)else semSignal(m)endif;5.11 下面的问题曾被用于一个测试中:侏罗纪公园有一个
15、恐龙博物馆和一个公园,有 m 个旅客和 n 辆车,每辆车只能容纳一名旅客。旅客在博物馆逛了一会儿,然后派对乘坐旅客车。当一辆车可用时,它载入一名旅客,然后绕公园行驶任意长的时间。如果 n 辆车都已被旅客乘坐游玩,则想坐车的旅客需要等待;如果一辆车已经就绪,但没有旅客等待,那么这辆车等待。使用信号量同步 m 个旅客进程和 n 个进程。下面的代码框架是在教室的地板上发现的。忽略语法错误和丢掉的变量声明,请判定它是否正确。注意,p 和 v 分别对应于 semwait 和 semsignal。Resource Jurassic_Park()Sem car_avail:=0,car_taken:=0,c
16、ar_fillde:=0.passenger_released:=0Process passenger(i:=1 to num_passengers)Do true-nap(int(random(1000*wander_time)P(car avail);V(car_taken);P(car_filled)P(passenger_released)Od End passengerProcess car(j:=1 to num_cars)Do true-V(car_avail);P(car_taken);V(car_filled)Nap(int(random(1000*ride_time)V(p
17、assenger_released)OdEnd carEnd Jurassic_Park答:这段代码有一个重要问题.在 process car 中的代码 V(passenger_released)能够解除下面一种旅客的阻塞,被阻塞在P(passenger_released)的这种旅客不是坐在执行 V()的车里的旅客.5.12 在图 5.9 和 5.3 的注释中,有一句话是“仅把消费者临界区(由 s 控制)中的控制语句移出还是不能解决问题,因为这将导致死锁”,请用类似于表 5.3 的表说明。答:ProducerConsumersndelay11002SemWaitB(S)0003n+0104If
18、(n=1)(semSignalB(delay)0115semSignalB(s)1116semWaitB(delay)1107semWaitB(s)0108n-009semWaitB(s)If(n=0) (semWaitB(delay)10生产者和消费者都被阻塞。5.13 考虑图 5.10 中定义的无限缓冲区生产者/消费者问题的解决方案。假设生产者和消费者都以大致相同的速度运行,运行情况如下:生产者:append;semSignal;produce;append;semSignal 消费者:consume;take;semWait;consume;take;semWait;生产者通常管理给换成
19、区一个元素,并在消费者消费了前面的元素后发信号。生产者通常添加到一个空缓冲去中,而消费者通常取走缓冲区中的唯一元素。尽管消费者从不在信号量上阻塞,但必须进行大量的信号量调用,从而产生相当多的开销。构造一个新程序使得能在这种情况下更加有效。提示:允许 n 的值为-1,这表示不仅缓冲区为空,而且消费者也检测到这个事实并将被阻塞,直到生产者产生新数据。这个方案不需要使用图 5.10 中的局部变量 m。答:这个程序来自于BEN82program producerconsumer;var n: integer;s: (*binary*) semaphore (:= 1);delay: (*binary*
20、) semaphore (:= 0);procedure producer;beginrepeatproduce;semWaitB(s);append;n := n + 1;if n=0 then semSignalB(delay);semSignalB(s)foreverend;procedure consumer;beginrepeatsemWaitB(s);take;n := n 1;if n = -1 thenbeginsemSignalB(s);semWaitB(delay);semWaitB(s)end;consume;semSignalB(s)foreverend;begin (
21、*main program*)n := 0;parbeginproducer; consumerparendend.5.14 考虑图 5.13.如果发生下面的交换,程序的意义是否会发生改变?a.semWait(e);semWait(s)b.semSignal(s);semSignal(n)c.semWait(n);semWait(s)d.semSignal(s);semSignal(e)答:只要交换顺序都会导致程序错误。信号量 s 控制进入临界区,你只想让临界区区域包括附加或采取功能。5.15 在讨论有限缓冲区(见图 5.12)生产者/消费者问题时,注意我们的定义允许缓冲区中最多有 n-1 个
22、入口?a.这是为什么?b.请修改程序,以不久这种低调?答:如果缓冲区可以容纳 n 个入口,问题在于如何从一个满的缓冲区中区分出一个空的缓冲区,考虑一个有六个位置的缓冲区,且仅有一个入口,如下:AOut in然后,当一个元素被移出,out=in。现在假设缓冲区仅有一个位置为空:DEABCIn out这样,out=in+1.但是,当一个元素被添加,in 被加 1 后,out=in,当缓冲区为空时同理。b你可以使用一个可以随意增加和减少的辅助的变量,count。5.16 这个习题说明了使用信号量协调三类进程。圣诞老人在他北极的商店中睡眠,他只能被一下两种情况之一唤醒:(1)所有九头驯鹿都从南太平洋的
23、假期回来了,或者(2)某些小孩在制作玩具时遇到了困难。为了让圣诞老人多睡会,这些孩子只有在是那个人都遇到困难时才唤醒他。当三个孩子的问题得到解决时,其他想访问圣诞老人的孩子必须等到那些孩子返回。如果圣诞老人醒来后发现在三个孩子在他的店门口等待,并且最后一头驯鹿已经从热带回来。则圣诞老人决定让孩子门等到圣诞节之后,因为准备最后一天哦 iuxunlu 必须与其他 unlu 在暖棚中等待并且还没有套上缰绳做成雪橇前回来。请用信号量解决这个问题。答:santa:圣诞老人 reindeer:驯鹿 elf:小孩子 sleigh:雪橇 toys:玩具5.17 通过一下步骤说明消息传递和信号量具有同等的功能:
24、a.用信号量实现消息传递。提示:利用一个共享缓冲区保存信箱,每个信箱由一个消息槽数组成的。b.用消息传递实现信号量。提示:引入一个独立的同步进程。答:b.这个方法来自于TANE97.同步进程维护了一个计数器和一个等待进程的清单。进程调用相关用于向同步进程发送消息的生产者,wait 或 signal,来实现 WAITHUO SIGNAL.然后生产者执行 RECEIVE 来接受来自于同步进程的回复。当消息到达时,同步进程检查计数器看需要的操作是否已经足够,SIGNALs 总是可以完成,但是假如信号值为 0 时,WAITs 将会被阻塞。假如操作被允许,同步进程就发回一个空消息,因此解除调用者的阻塞。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 精髓 设计 原理 第五 练习题 及其 答案 文本 资料
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内