1. 给出文件 /etc/passwd 的五种不同的路径名。(提示:考虑目录项 “.” 和 “…”)
- /etc/…/etc/passwd
- /etc/…/etc/./passwd
- /etc/…/etc/././passwd
- /etc/…/etc/./././passwd
- /etc/…/etc/././././passwd
2. 在Windows中,当用户双击资源管理器中列出的一个文件时,就会运行一个程序,并以这个文件作为参数。操作系统需要知道运行的是哪个程序,请给出两种不同的方法。
The Windows way is to use the file extension. Each extension corresponds to a file type and to some program that handles that type. Another way is to remember which program created the file and run that program. The Macintosh works this way.
3. 在早期的UNIX系统中,可执行文件(a.out文件)以一个特定的魔数(magic number) 而不是一个随机选取的数字开头。这些文件的开头是header,随后是文本段和数据段。为什么可执行文件要选取一个特定的数字,而其他类型的文件会或多或少的随机选择一个魔数?
These systems loaded the program directly in memory and began executing at word 0, which was the magic number. To avoid trying to execute the header as code, the magic number was a BRANCH instruction with a target address just above the header. In this way it was possible to read the binary file directly into the new process’ address space and run it at 0, without even knowing how big the header was.
总结:可执行文件的 magic number 是一个指令数,用于指示头部的大小。并不是为了设置魔数而设置魔数。
4. 在 UNIX 中 open 系统调用绝对需要吗?如果没有会产生什么后果?
个人认为并不是必须的,可以和 create 函数合为一个。
5. 在支持顺序文件的系统中总有一个回绕操作,支持随机存取文件的系统是否也需要该操作?
首先,啥是回绕(原书的用词是 rewind)操作呢?我理解是把磁带倒回到起点。如果是这样,支持随机存取文件的系统显然不需要支持该操作,或者说是用更高级的 seek 代替了 rewind。
6. 某一些操作系统提供系统调用 rename 给文件重命名,同样也可以通过把文件复制到新文件并删除原文件而实现文件重命名。请问这两种方法有何不同?
第一种只需要修改文件属性。第二种需要增删文件并拷贝数据,效率较低。
7. 在有些系统中有可能把部分文件映射进内存中。如此一来系统应该施加什么限制?这种部分映射如何实现?
The mapped portion of the file must start at a page boundary and be an integral number of pages in length. Each mapped page uses the file itself as backing store. Unmapped memory uses a scratch file or partition as backing store.
8. 有一个简单操作系统只支持单一目录结构,但是运行该目录中有任意多个文件,且带有任意长度的名字。这样可以模拟层次文件系统吗?如何进行?
可以但很麻烦。
- 在展示上,可以在文件名中加入 ‘/’,使得文件名看上去像是路径名。
- 数据维护上,以 ‘/’ 结束的前缀作为逻辑目录存在,在增删改文件名时不能和逻辑目录冲突。
9. 在 UNIX 和 Windows 中,通过使用一个特殊的系统调用把文件的"当前位置"指针移到指定字节,从而实现随机访问。请提出一个不使用该系统调用完成随机存取的替代方案。
在 read 和 write 函数上新增一个参数,用来描述读或写的起始位置。
10. 考虑图 4-8 中的目录树,如果当前工作目录是 /usr/jim,则相对路径名为 …/ast/x 的文件的绝对路径名是什么?
/usr/ast/x
11. 正如书中所提到的,文件的连续分配会导致磁盘碎片,因为当一个文件的长度不等于块的整数倍时,文件最后一个磁盘块中的空间会浪费掉。请问这是内部碎片还是外部碎片?并将他与前一章的有关内容做比较。
英文原版答案认为是 external fragmentation。
Since the wasted storage is between the allocation units (files), not inside them, this is external fragmentation. It is precisely analogous to the external fragmentation of main memory that occurs with a swapping system or a system using pure segmentation.
但我觉得「最后一个磁盘块浪费的空间」和「分页系统中最后一个页框浪费的空间」是相同的呀。只有不同的分配单元之间的浪费的完整的块才能称之为外部碎片吧?
12. 描述一个损坏的数据块对以下三种形式的文件的影响:(a)连续的,(b)链表的,©索引的。
连续的:仅损坏部分的数据丢失。
链表的:损坏块及后续部分丢失。
索引的:仅损坏块数据丢失。
13. 一种在磁盘上连续分配并且可以避免空洞的方法是,每次删除一个文件后就紧缩一下磁盘。由于所有的文件都是连续的,复制文件时寻道和旋转延迟以便读取文件,然后全速传送。在写会文件时要做同样的操作。假设寻道时间是 5ms,旋转延迟为 4ms,传送速率为 8MB/s,文件的平均长度是 8KB,把一个文件读入内存并写回磁盘上的一个新位置需要多长时间。运用这些数字,计算紧缩 16GB 磁盘的一半需要多长时间。
读或写 8KB 文件的时间为:
寻
道
时
间
+
旋
转
延
迟
+
8
K
B
8
M
B
/
s
∗
1000
≈
9.9766
m
s
寻道时间 + 旋转延迟 + \frac{8KB}{8MB/s} * 1000 ≈ 9.9766ms
寻道时间+旋转延迟+8MB/s8KB∗1000≈9.9766ms
因此,复制一个 8KB 文件需要 19.9532ms。
故可知,紧缩 8GB 磁盘需要: 8 G B 8 K B ∗ 19.9532 / 1000 ≈ 20922 秒 \frac{8GB}{8KB} * 19.9532/1000 ≈ 20922秒 8KB8GB∗19.9532/1000≈20922秒
14. 基于前一个问题的答案,紧缩磁盘有什么作用吗?
紧缩磁盘可以减少空洞,但频繁进行紧缩效率低些且收效甚微。
15. 某些数字消费设备需要存储数据,比如存放文件等。给出一个现代设备的名字,该设备需要文件存储,并且适合连续的空间存储。
存储毕业设计的光盘。
16. 考虑图 4-13 中的 i 节点。如果它含有用 4 个字节表示的 10个直接地址,而且所有的磁盘块大小是 1024KB,那么文件最大可能有多大?
每个磁盘块大小为 1024KB(也太大了吧?)
10个直接地址,可以有 10个磁盘块。
一个指针块,可以有 1024 K B 4 B = 256 K \frac{1024KB}{4B} = 256K 4B1024KB=256K 个磁盘块。
因此,文件最大可能有 262154 MB。
17. 一个班的学生信息存储在一个文件中,这些记录可以被随意的修改和访问。假设每个学生的记录大小都相同,那么在连续的,链表的,索引的,三种方式中,哪种方式更合适?
试想一下读取过程:根据学生的ID计算出偏移量,然后读取信息。
显然连续的和索引的都可以用偏移量直接定位出数据在磁盘的位置,但链表就必须从头开始遍历,效率远不如前两者。
18. 考虑一个大小始终在 4KB 和 4MB 之间变化的文件,连续的,链表的,索引的,三种方式中,哪种方式更合适?
连续的:对于大小频繁变化的文件,连续存储可能需要频繁的重分配存储空间。
链表的:对于频繁变更大小的文件,可能也会有频繁的随机写操作,显然链表不适合这种场景。
索引的:个人认为最合适,可以应对频繁的大小变更和随机读写。
19. 有建议说,把短文件的数据存在i节点内会提高效率并节省磁盘空间。对于图 4-13中的 i 节点来说,可以在内部存放多少数据呢?
将存放指针的位置用于存放数据。但需要考虑腾出一个标志位用于标记存放的是指针还是数据。
20. 两个计算机的学生 Carolyn 和 Elinor 正在讨论 i 节点。Carolyn 认为存储器容量越来越大,价格越来越便宜,所以当打开文件时,直接取i节点的副本,放到内存i节点列表中,建立一个新 i 节点将更简单更快,没有搜索所有的i节点来判断它是否已经存在。Elinor则不同意这一观点。你认为呢?
文件需要能被其他进程读写,因此在进程的作用域内创建i节点的左右不可取。
21. 比较硬链接和符号链接,各说一个优点。
硬链接:不需要额外的 i 节点和存储空间,仅需修改 i几点的计数即可。
符号链接:可以突破机器的限制,指向网络上的任意文件。
23. 考虑一个块大小为 4KB、使用自由链表(freelist method) 的 4TB 的磁盘,多少个块地址可以被存进一个块中?
The number of blocks on the disk = 4 TB / 4 KB = 2 30 2^{30} 230. Thus, each block address can be 32 bits (4 bytes), the nearest power of 2. Thus, each block can store 4 KB / 4 = 1024 addresses.
24. 空闲磁盘空间可用空闲块表或位图来跟踪。假设磁盘地址需要D位,一个磁盘有B个块,其中有F个空闲。在什么条件下,空闲块表采用的空间少于位图?设D位16位,请计算空闲磁盘的百分比。
位图需要 ⌊ B 8 ⌋ \lfloor\frac{B}{8}\rfloor ⌊8B⌋ 个字节。
空闲块表需要 ⌊ D F 8 ⌋ \lfloor\frac{DF}{8}\rfloor ⌊8DF⌋ 个字节。
当 D F < B DF < B DF<B 时,空闲块表采用的空间少于位图。
关于第二问:
空闲比和D没有关系吧? F B \frac{F}{B} BF 不就是空闲比了吗?
个人猜测是中文版翻译不准确。
英文原本为:
Free disk space can be kept track of using a free list or a bitmap. Disk addresses require D bits. For a disk with B blocks, F of which are free, state the condition under which the free list uses less space than the bitmap. For D having the value 16 bits, express your answer as a percentage of the disk space that must be free.
因此,第二问应该翻译为:
当D的值为16时,将答案表示为空闲磁盘空间的百分比。
继续第二问的解答。
将 D F < B DF < B DF<B 变化一下得 F B < 1 D \frac{F}{B} \lt \frac{1}{D} BF<D1。其中 F B \frac{F}{B} BF 就是空闲比的表达式。因此当空闲比小于 1 16 \frac{1}{16} 161 时,空闲块表采用的空间少于位图。
25. 一个空闲块位图开始时和磁盘分区首次初始化类似,比如 1000 0000 0000 0000 (首块被根目录使用),系统总是从最小编号的盘块开始寻找空闲块,所以在有 6 块的文件A写入之后,该位图为 1111 1110 0000 0000。请说明在完成如下每一个附加动作之后的位图的状态:
- 写入有5块的文件B:1111 1111 1111 0000
- 删除文件A:1000 0001 1111 0000
- 写入有8块的文件C:1111 1111 1111 1100
- 删除文件B:1111 1110 0000 1100
26. 如果因为系统崩坏而使存放空闲磁盘块信息的空闲块表或位图完全丢失,会发生什么情况?有什么办法从这个灾难中恢复吗,还是该磁盘彻底无法使用?分别就 UNIX 和 FAT-16文件系统讨论你的答案。
It is not a serious problem at all. Repair is straightforward; it just takes time. The recovery algorithm is to make a list of all the blocks in all the files and take the complement as the new free list. In UNIX this can be done by scanning all the i-nodes. In the FAT file system, the problem cannot occur because there is no free list. But even if there were, all that would have to be done to recover it is to scan the FAT looking for free entries.
27. Oliver Owl 在大学计算中心的工作是更换用于通宵数据备份的磁带,在等待每盘磁带完成的同时,他在写一篇毕业论文。由于仅有一个系统,所以只能在正在做备份的系统上运行文本编辑程序。这样安排有什么问题吗?
在论文文件已经备份完成后又编辑的部分,就不会再备份了。这时就会造成数据的丢失。
28. 在教材中我们详细讨论过增量转储。在 Windows 中很容易说明何时要转储一个文件,因为每个文件都有一个存档位。在UNIX中没有这个位,那么UNIX备份程序怎样知道哪个文件需要转储?
增量转储:仅转储在上次转储之后有变动的文件或目录。
UNIX 可以通过修改/创建时间来判断是否需要转储。
29. 假设图4-25中的文件21自上次转储后没有修改过,那么图4-26中的四张图会有何不同呢?
图A:会标记有变动的文件和全部目录,因此 21 没有阴影。
图B:会在图A的基础上去掉不包含无变动文件和目录的目录,但因为20本身就是有变动的,因此 21 没有阴影。
图C:仅标记需要转储的目录,但因为20本身就是有变动的,因此无差异。
图D:仅标记需要转储的文件,20 没有阴影。
30. 有人建议每个UNIX文件的第一部分最好和其i节点放在同一个磁盘块中,这样做有什么好处?
如果在读完 inode 后立即读取第一部分,极大概率会命中高速缓存。
31. 考虑图 4-27。对某个特殊的块号,计数器的值在两个表中有没有可能都是数值2?这个问题如何纠正?
先来看丢失表中的数值是2,这个很容易修复,先直接置零即可。
再看使用表中的数值是2,可申请一个磁盘块并复制数据,并修改其中一个文件的块信息,使其指向刚申请的块。
32. 文件系统的性能与高速缓存的命中率有很大的关系(即在高速缓存中找到所需块的概率)。从高速缓存中读取数据需要 1ms,而从磁盘上读取需要 40ms,若命中率为 h,给出读取数据所需平均时间的计算公式。
t = 1 m s ∗ h + 40 m s ∗ ( 1 − h ) t = 1ms*h + 40ms*(1-h) t=1ms∗h+40ms∗(1−h)
33. 对于与计算机相连接的一个外部USB硬盘驱动器,通写高速缓存和块高速缓存哪种方式更合适?
个人感觉通写高速缓存更合适,毕竟USB随时都可能被拔掉。
原文答案:
In this case, it is better to use a write-through cache since it writes data to the hard drive while also updating the cache. This will ensure that the updated file is always on the external hard drive even if the user accidentally removes the hard drive before disk sync is completed.
34. 考虑一个将学生记录存放在文件中的应用,它以学生ID作为输入,随后读入、更新和写相应的学生记录。这个过程重复进行直到应用结束。块预读技术在这里适用吗?
不适用,块预读适合有顺序读或者符合局部性原理的场景。本题中这种随机读的场景并不适合。
35. 考虑一个有 10 个数据块的磁盘,这些数据块从块14到23。有两个文件在这个磁盘上:f1和f2。这个目录结构显示 f1 和 f2 的第一个数据块分别为 22 和 16。给定 FAT 表项如下,哪些数据块会被分配给 f1 和 f2?
(14,18); (15,17); (16,23); (17,21); (18,20); (19,15); (20, −1); (21, −1); (22,19); (23,14);
在上面的符号中,(x,y) 表示存储在表项 x 中的值指向 y。
根据 y 的值,重新排列一下:
- 文件f1:(22,19); (19,15); (15,17); (17,21); (21, −1);
- 文件f2:(16,23); (23,14); (14,18); (18,20); (20, −1);
36. 考虑图4-21背后的思想,目前磁盘平均寻道时间是 8ms,旋转速率为 15000rpm,每道有 262144 字节。对大小给为 1KB,2KB,4KB 的磁盘块,传送速率各是多少?
图4-21背后的思想:
- 数据块越大,传输速率越快,磁盘利用率越低。
- 数据块越小,传输速率越慢,磁盘利用率越高。
寻道时间:8ms
平均旋转延迟:
60000
15000
∗
1
2
m
s
=
2
m
s
\frac{60000}{15000}*\frac{1}{2}ms = 2ms
1500060000∗21ms=2ms
K 个字节的传输时间:
K
262144
∗
4
m
s
=
K
65536
m
s
\frac{K}{262144} * 4ms= \frac{K}{65536}ms
262144K∗4ms=65536Kms
当磁盘块大小为 1KB 时,传输单个块需要
6
m
s
+
2
m
s
+
1
K
65536
m
s
≈
8.0156
m
s
6ms + 2ms + \frac{1K}{65536}ms ≈ 8.0156ms
6ms+2ms+655361Kms≈8.0156ms
因此,传输速率约为
1
K
B
8.0156
m
s
∗
1000
≈
124.75
K
B
/
s
\frac{1KB}{8.0156ms}*1000≈124.75KB/s
8.0156ms1KB∗1000≈124.75KB/s
当磁盘块大小为 2KB 时,传输单个块需要
6
m
s
+
2
m
s
+
2
K
65536
m
s
≈
8.0312
m
s
6ms + 2ms + \frac{2K}{65536}ms ≈ 8.0312ms
6ms+2ms+655362Kms≈8.0312ms
因此,传输速率约为
2
K
B
8.0312
m
s
∗
1000
≈
249.03
K
B
/
s
\frac{2KB}{8.0312ms}*1000≈249.03KB/s
8.0312ms2KB∗1000≈249.03KB/s
当磁盘块大小为 4KB 时,传输单个块需要
8
m
s
+
0.125
m
s
+
4
K
B
65546
m
s
≈
8.0625
m
s
8ms + 0.125ms + \frac{4KB}{65546}ms ≈ 8.0625ms
8ms+0.125ms+655464KBms≈8.0625ms
因此,传输速率约为
4
K
B
8.0625
m
s
∗
1000
≈
496.12
K
B
/
s
\frac{4KB}{8.0625ms}*1000≈496.12KB/s
8.0625ms4KB∗1000≈496.12KB/s
37.某个文件系统使用 2KB 的磁盘块,而中间文件大小值为1KB。如果所有的文件都是正好1KB,那么浪费掉的磁盘空间的比例是多少?你认为一个真正的文件系统所浪费的空间比这个数值大还是小?请说明理由。
浪费比例是 50%;
关于第二问,Ummm,没有证据可不好乱讲。
38. 给定磁盘块大小是 4KB,块指针地址值为4字节,使用10个直接地址和一个间接块可以访问的最大文件大小是多少字节?
10个直接地址最多可以访问 10 个磁盘块,共 40KB。
一个间接块最多可访问 1024 个磁盘块,共4MB。
因此,最大文件大小是 4136 KB。
39. MS-DOS 中的文件必须在内存中的FAT-16表中竞争空间。如果某个文件使用了k个表项,这样会对所有文件的总长度代码带来什么限制?
It constrains the sum of all the file lengths to being no larger than the disk. This is not a very serious constraint. If the files were collectively larger than the disk, there would be no place to store all of them on the disk.
40. 一个 UNIX 系统使用的4KB磁盘块和4字节磁盘地址。如果每个 i 节点有 10 个直接表项以及一个一次间接块,一个二次间接块,一个三级间接块,那么文件最大为多少?
10 个直接表项最多可有 10 ∗ 4 K B = 40 K B 10*4KB=40KB 10∗4KB=40KB。
一个一次间接块最多可有 4 K B 4 B ∗ 4 K B = 4 M B \frac{4KB}{4B}*4KB = 4MB 4B4KB∗4KB=4MB
一个二次间接块最多可有 4 K B 4 B ∗ 4 K B 4 B ∗ 4 K B = 4 G B \frac{4KB}{4B}*\frac{4KB}{4B}*4KB = 4GB 4B4KB∗4B4KB∗4KB=4GB
一个三次间接块最多可有 4 K B 4 B ∗ 4 K B 4 B ∗ 4 K B 4 B ∗ 4 K B = 4 T B \frac{4KB}{4B}*\frac{4KB}{4B}*\frac{4KB}{4B}*4KB = 4TB 4B4KB∗4B4KB∗4B4KB∗4KB=4TB
总共约 4100GB。
41. 对于文件 /usr/ast/courses/os/handout.t,若要获取其 i 节点需要多少次磁盘操作?假设其根目录的 i 节点在内存中,其他路径的不在。
文件结构为有向无环图,需要读取根目录到目标文件路径上的所有 inode 以及目录信息。
directory for /
i-node for /usr
directory for /usr
i-node for /usr/ast
directory for /usr/ast
i-node for /usr/ast/courses
directory for /usr/ast/courses
i-node for /usr/ast/courses/os
directory for /usr/ast/courses/os
i-node for /usr/ast/courses/os/handout.t
In total, 10 disk reads are required.
变成题目略过。