《现代操作系统第四版》 第六章 答案

更新时间:2023-09-21 08:35:01 阅读量: 自然科学 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第四章 文件系统 习题

Q1: 给出文件/etc/passwd的五种不同的路径名。(提示:考虑目录项”.”和”…”。) A:

/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

Q2:在Windows中,当用户双击资源管理器中列出的一个文件时,就会运行一个程序,并以这个文件作为参数。操作系统要知道运行的是哪个程序,请给出两种不同的方法。

A:Windows使用文件扩展名。每种文件扩展名对应一种文件类型和某些能处理这种类型的程序。另一种方式时记住哪个程序创建了该文件,并运行那个程序。Macintosh以这种方式工作。

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

A:这些系统直接把程序载入内存,并且从word0(魔数)开始执行。为了避免将header作为代码执行,魔数是一条branch指令,其目标地址正好在header之上。按这种方法,就可能把二进制文件直接读取到新的进程地址空间,并且从0 开始运行。

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

A: open调用的目的是:把文件属性和磁盘地址表装入内存,便与后续调用的快速访问。

首先,如果没有open系统调用,每次读取文件都需要指定要打开的文件的名称。系统将必须获取其i节点,虽然可以缓存它,但面临一个问题是何时将i节点写回磁盘。可以在超时后写回磁盘,虽然这有点笨拙,但它可能起作用。

Q5:在支持顺序文件的系统中总有一个文件回绕操作,支持随机存取

文件的系统是否也需要该操作?

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

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

A:rename调用不会改变文件的创建时间和最后的修改时间,但是创建一个新的文件,其创建时间和最后的修改时间都会改为当前的系统时间。另外,如果磁盘满,复制可能会失败。

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

A:文件的映射部分必须以页边界开始,并且长度为整数页数。每个映射的页面使用文件本身作为后备存储。未映射的内存使用临时文件或分区作为后备存储。

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

A:使用文件名,如/usr/ast/file。虽然它看起来像一个层次化的路径名称,但它只是一个包含嵌入的斜杠的单一名称。

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

A:一种方法是在读取系统调用中添加一个额外的参数,告诉你要读取哪个地址。实际上,每次读取都有可能在文件中进行搜索。该方案的缺点是(1)每个读取调用都含有额外参数,以及(2)要求用户跟踪文件指针在哪里。

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

A: …将搜索移动到/usr,所以…/ast就是/usr/ast。因此…/ast/x与/usr/ast/x相同。

Q11: 正如书中所提到的,文件的连续分配会导致磁盘碎片,因为当一个文件的长度不等于块的整数倍时,文件中的最后一个磁盘块中的

空间会浪费掉,请问这是内碎片还是外碎片?并将它与先前一章的有关讨论进行比较。

A:原答案:由于这些被浪费的空间在分配单元(文件)之间,而不是在它们内部,因此,这是外部碎片。这类似于交换系统或者纯分段系统中出现的外部碎片。

网上有人说这个答案是错的,说应该是内部碎片,这里是混淆了内存的内部/外部碎片,和磁盘的内部/外部碎片的区别。

外部碎片和内部碎片的区别 - CSDN博客

一、在内存上(使用连续分配算法来管理分配内存时会产生)的外部碎片和内部碎片两个概念

内存碎片分为:内部碎片和外部碎片

【内部碎片】

内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;

内部碎片是处于(操作系统分配的用于装载某一进程的内存)区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放

本文来源:https://www.bwwdw.com/article/u76h.html

Top