假设有一个文件系统,它里面的文件被删除后,当连接到该文件的链接依然存在时,文件的磁盘空间会再度被利用。如果一个新的文件被创建在同一个存储区域或具有同样的绝对路径名,这会产生什么问题?如何才能避免这些问题? Answer:
令旧的文件为F1,新文件为F2。用户希望通过存在的链接进入F1,实际上将进入F2。注意,使用的是文件F1的访问保护,而不是F2的。这个问题可以通过确保所有被删除文件的链接也被删除来避免。可以从几个方面来完成: a. 保存一份文件所有链接的列表,删除文件时,删除每一个链接 b. 保留链接,当试图访问一个已删除文件时删除他们 c. 保存一个文件引用清单(或计数器),只有在文件所有链接或引用被删除后,删除该文件
打开文件表被用以保持当前打开文件的信息,操作系统应该为每个用户保持一个单独的表吗?或者只是保持一个包含当前所有用户访问文件的引用的表?如果两个不同程序或用户访问同样的文件,在打开文件表中应包含单独的条目吗?
Answer:
保持一个中央的打开文件表,操作系统可以执行下列操作,否则不可执行:假设一个当前有一个或一个以上进程访问的文件。如果该文件被删除,那么应该直到所有正在访问文件的进程关闭它时,它才能从磁盘上删除。只要有正在访问文件的进程数目的集中核算,该检查就可以执行。另一方面,如果两个进程正在访问该文件,则需要保持两个单独的状态来跟踪当前位置,其中部分文件正被两个进程访问。这就要求操作系统为两个进程保持单独的条目。
一个提供强制锁,而非使用由用户决定的咨询锁的进程有何优点和缺点? Answer:
在许多情况下,单独的程序可能愿意容忍同时访问一个文件,而不需要获得锁,从而确保文件的相互排斥。其他程序结构也可以确保相互排斥,如内存锁;或其他同步的形式。在这种情况下,强制锁将限制访问文件的灵活性,也可能增加与访问文件相关的开销。
在文件的属性中记录下创建程序的名字,其优点和缺点是什么?(在Macintosh操作系统中就是这样做的) Answer:
记录下创建程序的名字,操作系统能够实现基于此信息的功能(如文件被访问时的程序自动调用)。但它会增加操作系统的开销,需要文件描述符的空间。
有些系统当文件第一次被引用时会自动打开文件,当作业结束时关闭文件。论述这种方案与传统的由用户显式地打开和关闭文件的方案相比有什么有点和缺点?
Answer:
文件的自动打开和关闭免除了用户对这些功能的调用,从而使它更方便用户;但它比显式打开和关闭需要更多的开销
如果操作系统知道某一应用将以顺序方式访问文件数据,将如何利用此信息来提高性能? Answer:
当访问一个块时,文件系统可以预取随后的块,预计未来对于这些块的要求,这种预取优化将减少未来进程将经历的等待时间。
这个预取的优化将会为未来的要求减少等候所经历的时间。(最后一句翻译)
举一个应用程序的例子,它能够受益于操作系统支持的随机存取,以建立索引的档案。 答:一个应用程序,它维持的一个数据库的条目可以受益于这种一种支持:举个列子, 如果某程序是维护一个学生数据库,则访问的数据库不能被任何预先确定的访问模式模拟,这种获得记录是随机的,而且该记录的定位,如果作业系统是提供某种形式的树为基础的指数,将会更有效。
讨论支持联系档案,两岸装入点的优点和缺点(即链接文件指的是文件在不同体积存储) 。 答:其优点是,有更大的透明度,也就是说,用户并不需要知道装入点和建立联系的所有情景。但缺点是文件系统包含的链接可能会展开而安装的文件系统包含目标文件可能不会,因此,在这种情况下不能提供透明的访问该文件,错误的条件会使该用户的联系是一条走不通的链接,而且链接确实跨越了文件系统的界限。
有些系统文件提供文件共享时候只保留文件的一个拷贝,而另外的一个系统则是保留多个拷贝,对共享文件的每一个用户提供一个拷贝,论述这种方法的相对优点。
答:在一个单一的复制,同时更新了一个文件可能会导致用户获得不正确的信息,文件被留在了不正确的状态. 随着多份拷贝,它会浪费存储而且各种副本可能不一致。
讨论交往远程文件系统(存储在文件服务器)从一套不同的失败语义相关的本地文件系统的优点和缺点。
答:其优点是,如果在获得的文件存储在一个远程文件系统认识到它发生了一个错误,应用程序可以在处理故障状况时候提供一个更加智能化的方式,,而举例来说,一个文件打开文件可能简单的就失败了,而不是简单地挂在访问远程文件的一个失败的服务器和应用程序可以尽可能以最好的方式处理失败; 如果运行只是外挂起,那么整个应用程序应该外挂起,这是不可取的。然而,由于在失败语义缺乏统一以致由此导致应用程序代码更复杂。
什么是影响一致支持共享访问这些存储在远程文件系统的文件的UNIX语义的含义? 答:UNIX的一致性语义需要更新文件立即提供给其他进程。支持这种语义的共享文件远程文件系统可能会导致以下的低效率: 所有更新的客户,必须立即上报文件服务器,而不是批处理(如果更新到一个临时文件将会被忽略,), 而且更新的都必须送交到文件服务器向客户的数据进行高速缓存,使得立即构造成更多的联系。
试想一个文件系统,采用改进的连续分配计划的支持程度. 其档案收集的每个程度相当于毗连的区块。一个关键的问题是在这样的系统存在一定的变异的大小程度。如下计划有哪些优点和缺点?
a. 所有程度都是同样的尺寸,大小是预先确定的。 b. 程度上可以任意大小和动态分配。
c. 程度上可以几个固定的尺寸,这些尺寸是预先确定的。
答:如果所有的程度上是相同的尺寸,大小是预先确定的,那么它简化了块分配计划。一个简单的位图或空闲状态的名单程度就足够了。如果程度上可以任意大小和动态分配,则更复杂的分配计划是必需的。这可能很难找到一个程度的适当规模而且它可能会存在外部碎裂.。人们可以使用好友系统分配器讨论了前几章设计一个适当的分配器。当程度上可以几个固定的尺寸,而这些尺寸可以预定,人们必须保持一个单独的位图或为每个名单给以可能大小.. 这项计划是中级复杂性和中级灵活性的比较。
使用FAT链合作区块的档案来进行变化相联系的分配有哪些优势? 答:它的优势是,在访问块是储存在中间的文件时候,在FAT里跟踪指针可以决定它的位置,而不是访问所有个别区块中的档案顺序的方式找到指针的目标块。
通常情况下,大多数的FAT可缓存在存储器里 ,因此,指针可以通过记忆体确定,而不用通过磁盘块。
假设有一个系统,它的空闲空间保存在空闲空间链表中:
a. 假设指向空闲空间链表的指针丢失了,系统能不能重建空闲空间链表,为什么? b. 试想一个文件系统类似UNIX的使用与分配索引,有多少磁盘I / O操作可能需要阅读的内容,一个小地方的档案在a/b/c?假设此时没有任何的磁盘块,目前正在缓存。 c.设计一个方案以确定发生内存错误时候总不会丢失链表指针 答:
a.为了重建自由名单,因此有必要进行“垃圾收集” 。这就需要搜索整个目录结构,以确定哪些网页已经分配给了工作。这些剩余的未分配的网页可重新作为自由空间名单。 b.在自由空间列表里指针可存储在磁盘上,但也许在好几个地方。
c.指针可以存储在磁盘上的数据结构里或者在非挥发性RAM ( NVRAM. )
有些档案系统允许磁盘存储将分配在不同级别的粒度。举例来说,一个文件系统可以分配4 KB的磁盘空间作为单一的一个4字节的块或8个512字节的块。我们如何能利用这种灵活性来提高性能?对自由空间管理做出哪些修改以支持这一功能?
答:此项计划将减少内部分裂。如果文件是5字节,然后可以分配4 KB的区块和两个毗连的512字节的块。除了维持一个位图的自由块,一个目前正在使用的区块内也将保持额外的状态。当所有的分块成为空闲时候,该分配器将不得不审查这笔额外分配状态分块和凝聚的分块,以获取更大的块。
讨论一旦难以维持的一致性的系统导致计算机崩溃,如何性能优化的文件系统。 答:由于延迟更新数据和元数据可能出现最主要的困难。在希望同样的数据可能被更新时候更新可能会推迟,或更新的数据可能是临时性的,而且在不久后可能会被删除。 但是,如果系统崩溃,则不必致力于延迟更新,文件系统的一致都将被破坏。
设想一个在磁盘上的文件系统的逻辑块和物理块的大小都为512B。假设每个文件的信息已经在内存中,对3种分配方法(连续分配,链接分配和索引分配),分别回答下面的问题: A,逻辑地址到物理地址的映射在系统中怎么样进行的?(对于索引分配,假设文件总是小于512块长)
B,假设现在处在逻辑块10(最后访问的块是块10),限制想访问块4,那么必须从磁盘上读多少个物理块)
答:设想Z是开始文件的地址(块数) ,
a.毗连。分裂逻辑地址由512的X和Y所产生的份额和其余的分别。 1:将X加入到Z获得物理块号码。 Y是进入该区块的位移。 2.:1
b.联系。分裂逻辑地址由511的X和Y所产生的份额和其余的分别。 1.:找出联系名单(将X + 1块) 。 Y + 1是到最后物理块的位移 2.:4
c.收录。分裂的逻辑地址由512的X和Y所产生的份额和其余的分别。
1.:获得该指数块到内存中。物理块地址载于该指数在所在地块10, Y是到理想的物理块的位移。 2.:2
一个存储设备上的存储碎片可以通过信息再压缩来消除,典型的磁盘设备没有重新定位或基址寄存器(像内存被压缩时用的一样),怎样才能重定位文件呢?给出为什么文件再压缩和重定位常常被避免使用的3个原因。 答:移动文件二级存储涉及大量开销—数据块都必须读入内存,并写回了他们的新地点. 此外,移动登记册只适用于连续的文件,和许多磁盘文件不是一种顺序。相同的,许多新的档案不需要连续的磁盘空间; 如果是以逻辑顺序区块保持的磁盘系统,甚至连续档案可用于非相邻块之间的联系。
在何种情况下会使用内存作为RAM磁盘更加有用而不是用它作为一个磁盘高速缓存?
答:在用户(或系统)确切地知道什么样的数据情况下将是必要的。缓存的算法为基础的,而RAM磁盘是用户导向。
试想增加下列远程文件访问协议。每个客户端保持一个名称缓存,缓存翻译的文件名,以对应相应的文件句柄。哪些问题我们在执行名称缓存应该考虑到?
答:其中的一个问题是保持一致的名称缓存。如果缓存条目变得不一致,则应该更新或应检测不一致的地方。如果发现不一致后,然后应该有一个兜底机制,以确定新的翻译名称。此外,另一个相关的问题是是否有名称查找执行的一个组成部分的时间为每个子目录的路径,或是否是在一个单一的射击服务器。如果是运行的一个组成部分的时间,则在用户端可能会获得更多的资料翻译所有的中间目录。另一方面,它增加了网络流量作为一个单一的名称查找原因序列部分名称查找。
解释为什么记录元数据更新能确保文件系统从崩溃中恢复过来?
答:对于档案系统崩溃后的重恢复,它必须是一致的或必须能够取得一致。因此,我们必须证明,测井数据在不断更新的档案系统中是一致的或有能力达成一致的状态。对于一个不一致的文件系统,元数据必须不完全是书面的或在文件系统的数据结构是错误的。测井数据的写入的是一个连续的记录。
完整的交易是在它被转移到文件系统结构之前被写入的,如果在文件系统数据更新时系统崩溃,根据记录器里的信息,这些更新仍能完成。因此可以说,记录器确保了文件系统的变化的完成(不论是在系统崩溃前还是之后)。因为信息是连续写入到记录器中的,因此变化的命令保证是正确的。如果改变未完全写入记录其中,它便未改变文件系统结构,便会被丢弃。因此,通过数据记录重播,结构是相容的或接近相容的。
设想下面的备份方法:
第一天:将所有的文件从磁盘拷贝到备份介质。
第二天:将从第一天开始变化的文件拷贝到另一介质。 第三天:将从第一天开始变化的文件拷贝到另一介质。
与11.7.2小节中的方法不同。并非将所有从第一次备份后改变的文件都拷贝。与小节中的方法相比有什么优点?有什么缺点?恢复操作是更简单还是更复杂了?为什么?
【答】还原比较容易,因为你可以去备份磁带上,而不是充分磁带。没有中间磁带需要读取。更多的磁带被用作多个文件变化。
除了FCFS,没有其他的磁盘调度算法是真正公平的(可能会出现饥饿)。 a:说明为什么这个断言是真。
b:描述一个方法,修改像SCAN这样的算法以确保公平性。 C:说明为什么在分时系统中公平性是一个重要的目标。
D:给出三个以上的例子,在这些情况下操作系统在服务I/O请求时做到“不公平”很重要。
【答】a. 人们提出了关于磁头目前具备理论上可以尽快达到这些要求的磁道新要求
b. 所有那些预定的年龄更老的要求可能是“被迫”处于队列的顶端,一个有关为每个位可定表明,没有任何新的要求可提前这些请求。对于SSTF,其余的队列将不得不根据最后的这些“旧”的要求重新组织。
c. 为了防止超长的响应时间。
d. 寻呼和交换应优先于用户的要求。
为了其他内核启动的I / O,如文件系统元数据的写入,优先于用户I / O可能是可取的。如果内核支持实时进程的优先次序,这些进程的I / O请求该是有利的。
假设一个错哦盘驱动器有5000个柱面,从0到4999,驱动器正在为柱面143的一个请求提供服务,且前面的一个服务请求是在柱面125.按FIFO顺序,即将到来的请求队列是 86,1470,913,1774,948,1509,1022,1750,130 从现在磁头位置开始,按照下面的磁盘调度算法,要满足队列中即将到来的请求要求磁头总的移动距离(按柱面数计)是多少? a. FCFS b. SSTF