《现代操作系统》第四章习题答案

  1. 可以使用 "..." 无限制地在树上 上下移动。
    /etc/passwd
    /./etc/passwd
    /././etc/passwd
    /./././etc/passwd
    /etc/../etc/passwd
    /etc/../etc/../etc/passwd
    /etc/../etc/../etc/../etc/passwd
    /etc/../etc/../etc/../etc/../etc/passwd

  2.  Windows 系统使用文件扩展名来识别文件类型并相应地打开它们。每个扩展名都与一个特定的文件类型和处理该类型的程序相对应。类似地,Macintosh 系统也使用类似的方法来工作。当用户尝试打开一个文件时,操作系统会查找文件扩展名并确定应该使用哪个应用程序来打开它。这种方法可以确保文件能够正确地打开,并使用正确的应用程序进行处理。 

  3. 这些系统直接将程序加载到内存中,并从字 0 开始执行,而字 0 是魔数。为避免将头部作为代码执行,魔数是一个带有目标地址的 BRANCH 指令,该目标地址正好在头部之上。通过这种方式,可以直接将二进制文件读入新进程的地址空间,并在字 0 处运行。

  4. 将无法打开或创建文件。在UNIX中open系统调用是用于打开或创建一个文件的函数。它的作用是返回一个文件描述符,以便后续的读写操作。没有文件描述符,无法进行文件的读写操作。另外,open系统调用还提供了一些参数,如文件打开模式、读写权限等,如果不使用open系统调用,这些参数将无法设置。

  5. 否,如果要再次读取文件,只需随机访问字节 0。

  6. 重命名文件或文件夹不会更改它们的创建时间和最后修改时间。但是,如果创建一个新文件并将其命名为与现有文件相同的名称,则该新文件将具有当前日期和时间作为创建时间和最后修改时间。同样,如果尝试将现有文件或文件夹重命名到已占用空间的名称,则会出现错误,因为系统无法创建新文件,并且无法覆盖现有文件或文件夹。

  7. 映射部分的文件必须从页面边界开始,并且长度必须是页面数的整数倍。每个映射的页面使用文件本身作为支持存储。未映射的内存使用一个临时文件或分区作为支持存储。

  8. 使用像 /usr/ast/file 这样的文件名。虽然看起来像是一个层次路径名,但实际上它只是一个包含嵌入斜杠的单个名称。

  9. 一种方法是给读取系统调用添加一个额外的参数,用于指示从哪个地址读取。实际上,每次读取都有可能在文件内进行查找。这种方案的缺点:(1) 每次读取调用都需要额外的参数,以及 (2) 需要用户跟踪文件指针的位置。

  10. 点点组件将搜索移到 "/usr" 目录,所以 "./ast" 将它放在 "/usr/ast"。因此,"./ast/x" 等同于 "/usr/ast/x"。

  11. 由于浪费的存储空间是在分配单元(文件)之间而不是其中,这是外部碎片。这与使用交换系统或纯分段的主存器发生的外部碎片化现象非常相似。

  12. 在连续分配系统中,如果数据块损坏,只有这个块受影响,可以读取文件的其他块。在链式分配中,无法读取损坏的块,从该损坏块开始的所有块的位置数据都丢失。在索引分配的情况下,只有损坏的数据块受影响。

  13. 启动传输需要 9 毫秒。以每秒 80 MB 的传输速率读取 2^{13} 字节需要 0.0977 毫秒,共计 9.0977 毫秒。写回文件需要额外的 9.0977 毫秒。因此,复制一个文件需要 18.1954 毫秒。将 16 GB 硬盘的一半进行整理将涉及复制 8 GB 存储空间,即 2^{20} 个文件。每个文件需要 18.1954 毫秒,这将耗时 19,079.25 秒,即 5.3 小时。每次删除文件后整理磁盘并不好。

  14. 如果正确执行,在整理过程中,每个文件应该被组织成所有块连续,以便快速访问。Windows 有一个程序可以对磁盘进行碎片整理和重新组织。鼓励用户定期运行它以提高系统性能。但考虑到需要的时间,每月运行一次可能较好。

  15. 数码相机在非易失性存储介质(如闪存)上按顺序记录若干张照片。当相机被重置时,介质被清空。此后,照片按顺序逐一记录,直到介质已满,然后它们被上传到硬盘上。对于这种应用,相机内部的连续文件系统(例如在图片存储介质上)是理想的。

  16. 间接块可以容纳 128 个磁盘地址。加上 10 个直接磁盘地址,最大的文件有 138 个块。由于每个块是 1 KB,所以最大的文件大小是 138 KB。

  17. 对于随机访问,表 / 索引和连续分配都是合适的,而链式分配则不太适合,因为它通常需要对给定记录进行多次磁盘读取。

  18. 由于文件大小变化很大,连续分配将是低效的,需要在文件增大时重新分配磁盘空间,在文件缩小时进行碎片整理。链式和表 / 索引分配都将是高效的;在这两种方法间,表 / 索引分配对于随机访问场景更为高效。

  19.  为了区分数据和指针,可以在属性中添加一个额外的比特位,用于指示当前存储的是数据还是指针。如果指针每个占据k字节,那么可以使用9个比特位来存储数据,从而最大支持9k字节的文件大小。如果属性中没有剩下的比特位,则可以在第一个磁盘地址存储一个无效地址,以标记后面的字节是数据而不是指针。在这种情况下,最大的文件长度为8k字节。 

  20. Elinor 是正确的。在表中同时存在两个 i-node 副本是灾难性的,除非两者都是只读的。最糟糕的情况是两者同时被更新。当 i-node 被写回磁盘时,最后被写入的一个将抹去另一个所做的更改,并且磁盘块将会丢失。

  21. 硬链接不需要额外的磁盘空间,只需要在 i-node 中添加一个计数器来跟踪链接的数量。符号链接需要空间来存储所指向的文件的名称。符号链接可以指向其他机器上甚至是通过互联网的文件。而硬链接只能指向自己所在分区内的文件。

  22. 单个 i-node 被给定文件的所有硬链接的目录条目指向。对于软链接,将为软链接创建一个新的 i-node,并且该 i-node 实际上指向原始的文件。

  23. 磁盘上的块数 = \frac{4TB}{4KB} = 2^{30}。因此,每个块地址可以是 32 位(4 字节),最接近的 2 的幂次。因此,每个块可以存储 \frac{4KB}{4} = 1024 个地址。

  24. 位图需要 B 位。自由列表需要 DF 位。如果 DF < B ,则自由列表需要更少的位数。或者,如果 \frac{F}{B} < \frac{1}{D} ,则自由列表较短,其中 \frac{F}{B} 是空闲块比例。对于 16 位磁盘地址,如果磁盘上空闲块占比 6% 或更少,自由列表将较短。

  25. 位图的开头如下:
    (a) 写入文件 B 后:1111 1111 1111 0000
    (b) 删除文件 A 后:1000 0001 1111 0000
    (c) 写入文件 C 后:1111 1111 1111 1100
    (d) 删除文件 B 后:1111 1110 0000 1100

  26. 这并不是一个严重的问题。修复方法很简单,只需要时间。恢复算法是将所有文件中的所有块列出,并将其补集作为新的空闲列表。在 UNIX 中,可以通过扫描所有 i 节点来完成这个操作。在 FAT 文件系统中,这个问题不会发生,因为没有空闲列表。但即使有,恢复它所需的步骤也很简单,只需要扫描 FAT 寻找空闲条目。

  27. Oliver Owl的论文可能没有得到他希望的可靠的备份。备份程序可能会跳过当前正在写入的文件,因为这样的文件中的数据状态可能不确定。

  28. 他们必须在硬盘上的一个文件中跟踪上次备份的时间。每次备份时,在该文件中追加一个条目。备份时,读取该文件并记录上次条目的时间。任何自此时间以来发生了更改的文件都会被备份。

  29. 在 (a) 和 (b) 中,21 不会被标记。在 (c) 中,不会有任何变化。在 (d) 中,21 不会被标记。

  30. 许多 UNIX 文件都很短。如果整个文件适合与 i 节点相同的块中,只需要一次磁盘访问来读取文件,而不是目前的两次。即使对于较长的文件,也会有所收益,因为需要更少的磁盘访问。

  31. 这不应该发生,但由于某个地方存在错误,这种情况可能发生。这意味着某个块在两个文件中出现,并且还在空闲列表中出现两次。修复错误的第一步是从空闲列表中删除两个副本。接下来,需要获取一个空闲块,并将有问题的块的内容复制到那里。最后,将块在其中一个文件中的出现更改为引用这个新获取的块的副本。此时,系统再次恢复一致。

  32. 所需的时间为 h+40\times(1-h) 。绘图是一条直线。

  33. 在这种情况下,最好使用写通写 (cache write-through) 缓存,因为它在更新缓存的同时也将数据写入硬盘。这将确保即使用户在磁盘同步完成之前意外移除了硬盘,更新后的文件仍然在外部硬盘上。

  34. 块预读技术是预先按顺序读取块,以提高性能。在这种应用中,由于用户可以在给定时刻输入任何学生 ID,所以很可能不会按顺序访问记录。因此,在这种情况下,块预读技术不会很有用。

  35. 分配给 f1 的块是:22、19、15、17、21。
    分配给 f2 的块是:16、23、14、18、20。

  36. 在 15,000 转 / 分钟的情况下,磁盘需要 4 毫秒才能完成一次旋转。读取 k 字节的平均访问时间(以毫秒为单位)为 6+2+\frac{k}{1,048,576}\times 4 。对于 1 KB、2 KB 和 4 KB 的块,访问时间分别约为 6.0039 毫秒、6.0078 毫秒和 6.0156 毫秒(几乎没有太大差异)。这相应地提供了大约 、340.890 KB/sec 和 680.896 KB/sec 的速率。

  37. 如果所有文件都是 1 KB 大小,那么每个 4 KB 的块将包含一个文件和 3 KB 的浪费空间。将两个文件放入一个块中是不允许的,因为用于跟踪数据的单位是块,而不是半块。这导致了 75% 的浪费空间。实际上,每个文件系统都有大文件以及许多小文件,这些文件能更有效地使用磁盘空间。例如,一个 32,769 字节的文件将使用 9 个磁盘块进行存储,给出了 32,769 / 36,864 的空间利用率,约为 89%。

  38. 间接块可以容纳 1024 个地址。加上 10 个直接地址,总共有 1034 个地址。由于每个地址都指向一个 4 KB 的磁盘块,所以最大文件大小为 4,235,264 字节。

  39. 它限制了所有文件长度之和不能超过磁盘大小。这不是一个非常严重的限制。如果文件总大小超过了磁盘大小,那么就没有地方将它们全部存储在磁盘上。

  40. i-node 包含 10 个指针。单个间接块可容纳 1024 个指针。双重间接块可容纳 1024^2 个指针。三重间接块可容纳 1024^3 个指针。将它们加在一起,我们得到最大文件大小为 1,074,791,434 个块,约为 16.06 GB。

  41. 需要进行以下磁盘读取:
    “/” 目录
    “/usr” 的 i-node
    “/usr” 目录
    “/usr/ast” 的 i-node
    “/usr/ast” 目录
    “/usr/last/courses” 的 i-node
    “/usr/last/courses” 目录
    “/usr/last/courses/os” 的 i-node
    “/usr/last/courses/os” 目录
    “/usr/last/courses/os/handout.t” 的 i-node
    总共需要进行 10 次磁盘读取。

  42. 一些优点:第一,不会浪费磁盘空间来存放未使用的 i-node。第二,不可能用尽 i-node。第三,由于 i-node 和初始数据可以一次性读取,所以需要的磁盘移动较少。  一些缺点:第一,目录条目现在需要一个 32 位的磁盘地址,而不是 16 位的 i-node 号码。第二,即使对于不包含任何数据的文件(空文件、设备文件),也将使用整个磁盘。第三,文件系统完整性检查将会变慢,因为需要为每个 i-node 读取整个块,并且 i-node 将在整个磁盘上散布。第四,由于 i-node 的存在,那些已经精心设计以适配块大小的文件将不再适配块大小,从而影响性能。

你可能感兴趣的:(《现代操作系统》习题答案,学习,笔记,linux,unix,c语言)