预计阅读本页时间:-
习题
1.摩尔定律(Moore's law)描述了一种指数增长现象,类似于将一个动物物种引入到具有充足食物并且没有天敌的新环境中生长。本质上,随着食物供应变得有限或者食肉动物学会了捕食新的被捕食者,一条指数增长曲线可能最终成为一条具有一个渐进极限的S形曲线。讨论可能最终限制计算机硬件改进速率的因素。
2.图13-1显示了两种范型:算法范型和事件驱动范型。对于下述每一种程序,哪一范型可能更容易使用:
a)编译器
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
b)照片编辑程序
c)工资单程序
3.在某些早期的苹果Macintosh计算机上,GUI代码是在ROM中的。为什么?
4.Corbató的格言是系统应该提供最小机制。这里是一份POSIX调用的列表,这些调用也存在于UNIX版本7中。哪些是冗余的?换句话说,哪些可以被删除而不损失功能性,因为其他调用的简单组合可以做同样的工作并具有大体相同的性能。access、alarm、chdir、chmod、chown、chroot、close、creat、dup、exec、exit、fcntl、fork、fstat、ioctl、kill、link、lseek、mkdir、mknod、open、pause、pipe、read、stat、time、times、umask、unlink、utime、wait和write。
5.在一个基于微内核的客户-服务器系统中,微内核只做消息传递而不做其他任何事情。用户进程仍然可以创建和使用信号量吗?如果是,怎样做?如果不是,为什么不能?
6.细致的优化可以改进系统调用的性能。考虑这样一种情况,一个系统调用每10ms调用一次,一次调用花费的平均时间是2ms。如果系统调用能够加速两倍,花费10s的一个进程现在要花费多少时间运行?
7.请在零售商店的上下文中简要讨论一下机制与策略。
8.操作系统经常在外部和内部这两个不同的层次上实现命名。这些名字就如下性质有什么区别?
a)长度
b)惟一性
c)层次结构
9.处理大小事先未知的表格的一种方法是将其大小固定,但是当表格填满时,用一个更大的表格取代它,并且将旧的表项复制到新表中,然后释放旧的表格。使新表的大小是原始表格大小的2倍,与新表的大小只是原始表格大小的1.5倍相比,有什么优点和缺点?
10.在图13-5中,标志found用于表明是否找到一个PID。忽略found而只是在循环的结尾处测试p以了解是否到达结尾,这样做可行吗?
11.在图13-6中,条件编译隐藏了Pentium与Ultra SPARC的区别。相同的方法可以用于隐藏拥有一块IDE磁盘作为惟一磁盘的Pentium与拥有一块SCSI磁盘作为惟一磁盘的Pentium之间的区别吗?这是一个好的思路吗?
12.间接是使一个算法更加灵活的一种方法。它有缺点吗?如果有的话,有哪些缺点?
13.可重入的过程能够拥有私有静态全局变量吗?讨论你的答案。
14.图13-7b中的宏显然比图13-7a中的过程效率更高。然而,它的一个缺点是难于阅读。它还存在其他缺点吗?如果有的话,还有哪些缺点?
15.假设我们需要一种方法来计算一个32位字中1的个数是奇数还是偶数。请设计一种算法尽可能快地执行这一计算。如果必要,你可以使用最大256KB的RAM来存放各种表。编写一个宏实现你的算法。附加分:编写一个过程通过在32个位上进行循环来做计算。测量一下你的宏比过程快多少倍。
16.在图13-8中,我们看到GIF文件如何使用8位的值作为索引检索一个调色板。相同的思路可以用于16位宽的调色板。在什么情况下(如果有的话),24位的调色板是一个好的思路?
17.GIF的一个缺点是图像必须包含调色板,这会增加文件的大小。对于一个8位宽的调色板而言,达到收支平衡的最小图像大小是多少?对于16位宽的调色板重复这一问题。
18.在正文中,我们展示了对路径名进行高速缓存使得当查找路径名时可以显著地加速。有时使用的另一种技术是让一个守护程序打开根目录中的所有文件,并且保持它们永久地打开,为的是迫使它们的i节点始终处于内存中。像这样钉住i节点可以进一步改进路径查找吗?
19.即使一个远程文件自从记录了一个线索以来没有被删除,它也可能自从最后一次引用以来发生了改变。有哪些可能有用的其他信息要记录?
20.考虑一个系统,它将对远程文件的引用作为线索而储藏,例如形如(名字,远程主机,远程名字)。一个远程文件悄悄地被删除然后被取代是可能的。那么线索将取回错误的文件。怎样才能使这一问题尽可能少地发生?
21.我们在正文中阐述了局部性经常可以被用来改进性能。但是,考虑一种情况,其中一个程序从一个数据源读取输入并且连续地输出到两个或多个文件中。试图利用文件系统中的局部性在这里可能会导致效率的降低吗?存在解决这一问题的方法吗?
22.Fred Brooks声称一名程序员每年只能编写1000行调试好的代码,然而MINIX的第一版(13 000行代码)是一个人在3年之内创作的。怎样解释这一矛盾?
23.使用Brooks每名程序员每年1000行的数字,估计生产Windows Vista花费的资金数量。假设一名程序员每年的成本是100 000美元(包括日常开销,例如计算机、办公空间、秘书支持以及管理开销)。你相信这一答案吗?如果不相信,什么地方有错误?
24.随着内存越来越便宜,可以设想一台计算机拥有巨大容量的电池供电的RAM来取代硬盘。以当前的价格,仅有RAM的低端PC成本是多少?假设1GB的RAM盘对于低端机器是足够的。这样的机器有竞争力吗?
25.列举某个装置内部的嵌入式系统中不需要用到的常规操作系统的某些功能特性。
26.使用C编写一个过程,在两个给定的参数上做双精度加法。使用条件编译编写该过程,使它既可以在16位机器上工作,也可以在32位机器上工作。
27.编写程序,将随机生成的短字符串输入到一个数组中,然后使用下述方法在数组中搜索给定的字符串:a)简单的线性搜索(蛮力法),b)自选的更加复杂的方法。对于从小型数组到你的系统所能处理的最大数组这样的数组大小范围重新编译你的程序。评估两种方法的性能。收支平衡点在哪里?
28.编写一个程序模拟在内存中的文件系统。