考虑一个树形层次结构文件系统,空闲空间使用空闲空间列表表示。
问答题
如果因为计算机崩溃引起空闲空间信息丢失,此时应该怎么处理?
【正确答案】为了重构空闲空间列表,有必要实现一种“垃圾回收”机制。它需要搜索整个目录结构,以确定哪些磁盘块已经分配给了文件,然后将那些未分配的内存块登记到空闲空间列表中。
【答案解析】
问答题
设计一种空闲空间管理方法,保证在异常情况下丢失信息最少。
【正确答案】为了保证信息尽量减少丢失,可以将它们在磁盘中存放多份。 注:垃圾回收过程的性能受到文件控制块存储位置和结构、文件索引结构等方面的影响很大,空闲空间列表的重构性能低于位映射。当然采取的策略可以是先假设所有的空间均空闲,然后为空闲空间表建立Hash表,当发现磁盘块已经分配时,将其从表中删除。此时,空闲空间列表更常见的形式是链接结构。在磁盘中存放多个空闲空间信息备份时,提高了操作系统的管理开销,因为每当发生磁盘块分配操作之后,便需要同时更新所有备份。
【答案解析】
问答题
在Windows系统中,当用户双击Windows Explorer列出的一个文件时,系统会运行一个程序,并且将这个文件作为运行程序的参数。请给出操作系统可以知道运行哪个程序的两种(甚至两种以上)方法。
【正确答案】基本思想是使用关联规则即使用某种特定规则将文件和处理程序关联起来。一种规则可以是文件名字的后缀;一种规则可以是特定文件的前缀;还可以使用通配符号等。
【答案解析】
问答题
许多操作系统都提供了一个系统调用将一个给定的文件换一个新名字(rename)。这个系统调用和以下的操作序列之间有什么差别?
(1)将原有文件复制为一个名字为新名字的文件;
(2)将原来的文件删除。
【正确答案】两者之间的区别在于rename可以是一个原子操作。后者的操作序列可能引起错误,比如在(1)完成之后(2)开始之前,其他人可能将原有文件移动到其他位置。
【答案解析】
问答题
在许多系统中可以将文件的某一部分映射到内存。这样的系统必须对这个操作强加哪些限制?怎样才能实现这样的操作?
【正确答案】内存映射(memory-mapped)文件概念。
【答案解析】
问答题
一个简单的操作系统仅仅支持单个的目录,但是允许任意数量的文件,文件名字也可以任意长。可以使用这个结构模拟一个层次的文件系统吗?怎样才能实现?
【正确答案】可以。比如使用一些特定的文件名字,使用“.”表示目录的结束,使用“/”作为文件的名字,/A/B/C文件表示A目录下B子目录的C文件。
【答案解析】
问答题
在UNIX和Windows系统中,可以使用一个特殊的系统调用实现随机访问,这个系统调用允许将“当前位置”移动到文件的任意位置。如果没有这个系统调用,你是否有另外的随机访问方法?你的方法有什么优缺点?
【正确答案】一种方法是使用open/close/read方法模拟,当文件指针向文件尾移动时,使用read移动文件指针。如果想移动文件头,则可以关闭文件后打开文件,再使用read;另一种方法是将文件内容全部读入一个缓冲区中,使用内存指针移动模拟文件指针移动。这两种方法均存在过度I/O的缺点。
【答案解析】
问答题
文件的连续分配将导致磁盘碎片,请讨论顺序结构和索引结构文件中的存储碎片问题。
【正确答案】顺序结构在文件内容发生移动时容易产生内部碎片;索引结构文件在索引小文件时容易产生索引块内部碎片(这也是UNIX使用特殊索引结构的主要原因)。
【答案解析】
问答题
磁盘块连续分配避免碎片的一种方法是在文件删除时使用紧致(compact)。因为所有文件都是连续的,因此拷贝文件时,读取源数据需要一个寻道和旋转延迟,紧接着进行全速传输,文件内容写回也需要相同的工作。假设平均寻道时间为5ms,旋转延迟为4ms,传输速率为8MB/s,平均文件大小为8KB,那么一次紧致需要多长时间?依照这样的速度,紧致16GB磁盘上的一半数据需要多长时间?
【正确答案】一次紧致大约10ms左右;紧致8GB数据,大约是1M个文件,因此大约需要10000s左右。
【答案解析】
问答题
观察下图的索引结点结构形式,如果现在每个结点包含10个4B直接地址,每个磁盘块大小为1024KB,那么支持的最大文件大小是多少?
【正确答案】10个直接地址则最大可容纳10MB数据,而一个间接地址可以容纳1024MB数据,因此最大文件大小为1034MB。
【答案解析】
问答题
两个计算机系的学生马丁和汤姆对索引结点展开了讨论。马丁坚持认为因为现在的内存这么大而且便宜,在打开文件的时候可以直接将文件控制块复制到内存的文件控制块表中,没有必要浪费CPU时间去搜索它是否已经打开。而汤姆并不这样认为。你认为谁是对的?为什么?
【正确答案】马丁的方法在多个进程打开同一个文件时产生共享的问题,即,一个进程对文件内容的修改结果对其他进程不可见。
【答案解析】
问答题
空闲磁盘空间可以使用一个空闲链表或者位映射来进行跟踪。磁盘地址需要D位表示,在一个有B块的磁盘中有F块是空闲的,请说明使用空闲链表占用空间少于位映射占用空间所必须满足的条件。如果D是16,那么应该有多大的空间必须是空闲的?
【正确答案】空闲链表所需的空间为F×D位,而位映射占用的空间为B位,因此使用空闲链表占用空间小于位映射的条件是:F×D<B。如果D=16,则F<B/16,即有6.25%的空闲。
【答案解析】