习题

1.在早期的UNIX系统中,可执行文件(a.out)以一个非常特别的魔数开始,这个数不是随机选择的。这些文件都有文件头,后面是正文段和数据段。为什么要为可执行文件挑选一个非常特别的魔数,而其他类型文件的第一个字反而有一个或多或少是随机选择的魔数?

2.在图4-4中,一个属性是记录长度。为什么操作系统要关心这个属性?

3.在UNIX中open系统调用绝对需要吗?如果没有会产生什么结果?

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

4.在支持顺序文件的系统中总有一个文件回绕操作,支持随机存取文件的系统是否也需要该操作?

5.某一些操作系统提供系统调用rename给文件重命名,同样也可以通过把文件复制到新文件并删除原文件而实现文件重命名。请问这两种方法有何不同?

6.在有些系统中有可能把部分文件映射进内存中。如此一来系统应该施加什么限制?这种部分映射如何实现?

7.有一个简单操作系统只支持单一目录结构,但是允许该目录中有任意多个文件,且带有任意长度的名字。这样可以模拟层次文件系统吗?如何进行?

8.在UNIX和Windows中,通过使用一个特殊的系统调用把文件的“当前位置”指针移到指定字节,从而实现了随机访问。请提出一个不使用该系统调用完成随机存取的替代方案。

9.考虑图4-8中的目录树,如果当前工作目录是/usr/jim,则相对路径名为../ast/x的文件的绝对路径名是什么?

10.正如书中所提到的,文件的连续分配会导致磁盘碎片,因为当一个文件的长度不等于块的整数倍时,文件中的最后一个磁盘块中的空间会浪费掉。请问这是内碎片还是外碎片?并将它与先前一章的有关讨论进行比较。

11.一种在磁盘上连续分配并且可以避免空洞的方案是,每次删除一个文件后就紧缩一下磁盘。由于所有的文件都是连续的,复制文件时需要寻道和旋转延迟以便读取文件,然后全速传送。在写回文件时要做同样的工作。假设寻道时间为5ms,旋转延迟为4 ms,传送速率为8MB/s,而文件平均长度是8 KB,把一个文件读入内存并写回到磁盘上的一个新位置需要多长时间?运用这些数字,计算紧缩16GB磁盘的一半需要多长时间?

12.基于前一个问题的答案,紧缩磁盘有什么作用吗?

13.某些数字消费设备需要存储数据,比如存放文件等。给出一个现代设备的名字,该设备需要文件存储,并且对文件运用连续分配空间的方法是不错的方法。

14.MS-DOS如何在文件中实现随机访问?

15.考虑图4-13中的i节点。如果它含有用4个字节表示的10个直接地址,而且所有的磁盘块大小是1024KB,那么文件最大可能有多大?

16.有建议说,把短文件的数据存在i节点之内会提高效率并且节省磁盘空间。对于图4-13中的i节点,在i节点之内可以存放多少字节的数据?

17.两个计算机科学系的学生Carolyn和Elinor正在讨论i节点。Carolyn认为存储器容量越来越大,价格越来越便宜,所以当打开文件时,直接取i节点的副本,放到内存i节点表中,建立一个新i节点将更简单、更快,没有必要搜索整个i节点来判断它是否已经存在。Elinor则不同意这一观点。他们两个人谁对?

18.说明硬连接优于符号链接的一个优点,并说明符号链接优于硬连接的一个优点。

19.空闲磁盘空间可用空闲块表或位图来跟踪。假设磁盘地址需要D位,一个磁盘有B个块,其中有F个空闲。在什么条件下,空闲块表采用的空间少于位图?设D为16位,请计算空闲磁盘空间的百分比。

20.一个空闲块位图开始时和磁盘分区首次初始化类似,比如:1000 0000 0000 0000(首块被根目录使用),系统总是从最小编号的盘块开始寻找空闲块,所以在有6块的文件A写入之后,该位图为1111 1110 0000 0000。请说明在完成如下每一个附加动作之后位图的状态:

a)写入有5块的文件B。

b)删除文件A。

c)写入有8块的文件C。

d)删除文件B。

21.如果因为系统崩溃而使存放空闲磁盘块信息的空闲块表或位图完全丢失,会发生什么情况?有什么办法从这个灾难中恢复吗,还是与该磁盘彻底再见?分别就UNIX和FAT-16文件系统讨论你的答案。

22.Oliver Owl在大学计算中心的工作是更换用于通宵数据备份的磁带,在等待每盘磁带完成的同时,他在写一篇毕业论文,证明莎士比亚戏剧是由外星访客写成的。由于仅有一个系统,所以只能在正在做备份的系统上运行文本编辑程序。这样的安排有什么问题吗?

23.在教材中我们详细讨论过增量转储。在Windows中很容易说明何时要转储一个文件,因为每个文件都有一个存档位。在UNIX中没有这个位,那么UNIX备份程序怎样知道哪个文件需要转储?

24.假设图4-25中的文件21自上次转储之后没有修改过,在什么情况下图4-26中的四张位图会不同?

25.有人建议每个UNIX文件的第一部分最好和其i节点放在同一个磁盘块中,这样做有什么好处?

26.考虑图4-27。对某个特殊的块号,计数器的值在两个表中有没有可能都是数值2?这个问题如何纠正?

27.文件系统的性能与高速缓存的命中率有很大的关系(即在高速缓存中找到所需块的概率)。从高速缓存中读取数据需要1ms,而从磁盘上读取需要40ms,若命中率为h,给出读取数据所需平均时间的计算公式。并画出h从0到1.0变化时的函数曲线。

28.考虑图4-21背后的思想,目前磁盘平均寻道时间为8ms,旋转速率为15 000rpm,每道为262 144字节。对大小各为1KB、2KB和4KB的磁盘块,传送速率各是多少?

29.某个文件系统使用2KB的磁盘块,而中间文件大小值为1KB。如果所有的文件都是正好1KB大,那么浪费掉的磁盘空间的比例是多少?你认为一个真正的文件系统所浪费的空间比这个数值大还是小?请说明理由。

30.MS-DOS的FAT-16表有64K个表项,假设其中的一位必须用于其他用途,这样该表就只有32 768个表项了。如果没有其他修改,在这个条件下最大的MS-DOS文件有多大?

31.MS-DOS中的文件必须在内存中的FAT-16表中竞争空间。如果某个文件使用了k个表项,其他任何文件就不能使用这k个表项,这样会对所有文件的总长度带来什么限制?

32.一个UNIX系统使用1KB磁盘块和4字节磁盘地址。如果每个i节点中有10个直接表项以及一个一次间接块、一个二次间接块和一个三次间接块,那么文件的最大尺寸是多少?

33.对于文件/usr/ast/courses/os/handout.t,若要调入其i节点需要多少个磁盘操作?假设其根目录的i节点在内存中,其他路径都不在内存中。并假设所有的目录都在一个磁盘块中。

34.在许多UNIX系统中,i节点存放在磁盘的开始之处。一种替代设计方案是,在文件创建时分配i节点,并把i节点存放在该文件首个磁盘块的开始之处。请讨论这个方案的优缺点。

35.编写一个将文件字节倒写的程序,这样最后一个字节成为第一个字节,而第一个字节成为最后一个字节。程序必须适合任何长度的文件,并保持适当的效率。

36.编写一个程序,该程序从给定的目录开始,从此点开始沿目录树向下,记录所找到的所有文件的大小。在完成这一切之后,该程序应该打印出文件大小分布的直方图,以该直方图的区间宽度为参数(比如,区间宽度为1024,那么大小为0~1023的文件同在一个区间宽度,大小为1024~2047的文件同在下一个区间宽度,如此类推)。

37.编写一个程序,扫描UNIX文件系统中的所有目录,并发现和定位有两个或更多硬连接计数的i节点。对于每个这样的文件,列出指向该文件的所有文件的名称。

38.编写UNIX的新版ls程序。这个版本将一个或多个目录名作为变量,并列出每个目录中所有的文件,一个文件一行。每个域应该对其类型进行合理的格式化。仅列出第一个磁盘地址(若该地址存在的话)。