设某系统的磁盘有500块,块号为:0,1,2,3,…,499。
问答题
若用位示图法管理这500块的盘空间,当字长为32位时,此位示图占了几个字?
【正确答案】位示图法就是在内存用一些字建立一张位示图,用其中的每一位表示一个盘块的使用情况,通常用“1”表示占用,“0”表示空闲。因此,位示图所占的字数为:500/32=16。
【答案解析】
问答题
第i字的第j位对应的块号是多少?(其中i=0,1,2,3,…;j=0,1,2,3,…;)
【正确答案】第i字的第j位对应的块号N=32i+j。
【答案解析】
问答题
存放在某个磁盘上的文件系统,采用混合索引分配方式。某FCB中共有23个地址项,第0~9个地址项为直接地址,第10个地址项为一次间接地址,第11个地址项为二次间接地址,第12个地址项为三次间接地址。如果每个盘块的大小为512字节,若盘块号需要用3个字节来描述,而每个盘块最多存放170个盘块地址。
(1)该文件系统允许文件的最大长度是多少?
(2)将文件的字节偏移盘5000,15000,150000转换为物理块号和块内偏移量。
(3)假设某个文件的FCB已在内存,但其他信息均在外存,为了访问该文件中某个位置的内容,最少需要几次访问磁盘?最多需要几次访问磁盘?
【正确答案】在混合索引分配方式中,FCB的直接地址中登记有分配给文件的前n块(第0到n-i块)的物理块号(n的大小由直接地址项数决定,本题中为10);一次间址中登记有一个一次间址块的块号,而在一次间址块中则登记有分配给文件的第n到n+k-1块的块号(k的大小由盘块大小和盘块号的长度决定,本题中为170);二次间址中登记有一个二次间址块的块号,其中可给出k2个一次间址块的块号,而这些一次间址块则被用来登记分配给文件的第n+k块到第n+k+k2-1块的块号;三次间址中则登记有一个三次间址块的块号,其中可给出k个二次间址块的块号,这些二次间址块又给出k3个一次间址块的块号,而这些一次间址块则被用来登记分配给文件的第n+k+k2块到第n+k+k2+k3-1块的物理块号。 (1)该文件系统中一个文件的最大长度可达: 10+170+170×170+170×170×170=4942080(块) 4942080×512B=2471040KB (2)5000/512得到商为9,余数为392,即字节偏移量5000对应的逻辑块号为9,块内偏移量为392。由于9<10,故可直接从该文件的。FCB的第9个地址项处得到物理盘块号,块内偏移量为392。 15000/512得到商为29,余数为152,即字节偏移量15000对应的逻辑块号为29,块内偏移量为152。由于10<29<10+170,而29-10=19,故可从FCB的第10个地址项,即一次间址项中得到一次间址块的地址,并从一次间址块的第19项(即该块的第57~59这3个字节)中获得对应的物理盘块号,块内偏移量152。 150000/512得到商为292,余数为496,即字节偏移量150000对应的逻辑块号为292,块内偏移量为496。由于10+170<292<10+170+170×170,而292-(10+170)=112,112/170得到商为0,余数为112,故可从FCB的第11个地址项,即二次间址项中得到二次间址块的地址,并从二次间址块的第112项获得一个一次间址块的地址,再从这一次间址块的第112项中获得对应的物理盘块号,块内偏移量为496。 (3)由于文件的FCB已在内存,为了访问文件中某个位置的内容,最少需要一次访问磁盘(即可通过直接地址直接读文件盘块),最多需要四次访问磁盘(第一次是读三次间址块,第二次是读二次间址块,第三次是读一次间址块,第四次是读文件盘块)。
【答案解析】
问答题
文件通常具有一些属性,其中一个是“记录长度”,为什么操作系统会关心这样的属性?
【正确答案】这个属性的选择与文件结构有关,操作系统可以利用这个属性建立良好的索引结构。
【答案解析】文件的属性有很多,它们可以分为两类:逻辑属性和物理属性。 逻辑属性是为了提高系统可用性而设置的属性,例如“创建时间”和“修改时间”等。而物理属性的主要目的是优化系统性能,“记录长度”就是其中之一。但是随着操作系统的演化,现代操作系统不再支持过分高级的文件抽象,转而仅仅支持“流文件”,记录概念也就随之消失。但是“文件大小”“最大文件长度”等属性依然用来为操作系统选择最佳物理结构提供决策依据。 注:如果是针对文件属性的问题,大抵上都可以从这两个方面来进行分析。
问答题
支持顺序文件的系统通常会提供一个rewind(回绕)的文件操作,请问支持随机访问的系统也需要提供这样的操作吗?
【正确答案】rewind操作主要是为了将文件指针回绕到当前位置之前(相对于文件尾)的位置;而支持随机访问的系统可以任意移动文件指针,因此从需求上说不需要rewind,但是为了提高系统的可用性,提供rewind操作可以支持文件指针的快速定位,不失为一种良好的文件操作接口。
【答案解析】文件的逻辑结构取决于用户,而用户的需求表现为数据的组织形式及其使用方法。 其中使用方法表现为一些接口,因此有一些接口是直接对应于一种结构(例如seek接口),而有些接口则是适用于很多的结构(例如read、write接口)。 一般接口的产生存在一个历史过程,在磁带介质时期已经形成了大量支持顺序访问的顺序结构相关的接口。这些接口在计算机系统的发展过程中有些为了保持兼容性或者便利性而继续沿用,而有些接口则慢慢淘汰了。rewind接口实质上是seek接口的特殊形式。
问答题
简述文件的二级目录组织形式。欲实现文件共享应如何处理?
【正确答案】把记录文件的目录分成主文件目录和由其主管的若干个子目录,各子目录的位置由主目录中的一项指出。应用中为系统设立一张主文件目录MFD(Mater File Directory),每个用户的所有文件均设立一个用户文件目录UFD(User File Directory)作为MFD中的一项,用以描述UFD的文件名和物理位置,即UFD是用户全部文件的文件控制块的全体。 在二级文件目录中,欲共享文件需给出一个文件的全路径名,由系统从根目录开始检索;或者用户将其当前目录指向另一用户的子目录上,以实现共享访问。
【答案解析】首先,文件控制块是文件的描述块,如文件属性等信息就存放在文件控制块中。如果文件目录结构组织成树形结构,那么这些文件控制块就是这个树形结构的结点,因为这些结点可以支持文件的检索和定位,因此一般称为文件索引结点。 其次,文件目录结构是文件组织的一种特殊索引结构,也是一种特殊的逻辑结构。我们可以认为目录实际上就是一种索引文件,这个文件不包含任何用户数据,仅仅存放了逻辑关联的文件控制块。 既然是一种特殊的索引结构,因此采用这样结构的时候,往往考虑如何将数据组织起来进行维护,这个问题本质上应该是一个数据结构的问题,只是因为有了“共享”需求后,结构的实现上存在着特殊的处理。本题中“系统从根目录开始检索”的方法可以满足共享需求,但是存在若干缺点:一是如果被共享文件改变了名字,则会共享失败(共享者使用这个名字进行访问时,系统会产生“文件不存在”的异常);二是如果一个共享者删除了这个文件,那么所有的共享者均会丧失信息。而“用户将其当前目录指向另一用户的子目录上,以实现共享访问”的方法也存在许多问题,比如被共享的文件必须以目录的形式批量共享,这样缺少灵活性即要么目录中所有文件均共享,要么一个都不共享。 注:目录结构可以是任何一种数据结构,只是操作系统在多年的发展中发现无环图结构与人们管理信息的一般思维模式更好地吻合,所以通常采用这样的结构。因此任何的操作系统设计者都可以根据应用领域的不同使用特殊的数据结构组织目录(这就是数据库采用了更丰富的物理组织形式的主要原因)。
问答题
如果当前目录为/usr,对于文件/etc/passwd,请给出5种不同的路径名。
【正确答案】(1)/etc/passwd (2)../etc/passwd (3).././etc/passwd (4)/./etc/passwd (5)/etc/./passwd
【答案解析】为了便于文件操作,文件系统提供了两种路径名:绝对路径和相对路径。从原理上讲,所有的路径名都是相对路径,绝对路径是一种相对于“根”路径(用“/”或者“”表示)的相对路径。 正是因为操作系统提供了相对路径的文件定位方法,因此给出文件的定位方式是非常便利的。在当前所有的文件系统中存在两个特殊的标识:“.”和“..”,“.”表示当前目录,“..”则表示上一级目录。 /etc/passwd是一种绝对路径,而余下的4种均为相对路径,实际上远远不止5种。
问答题
请讨论Windows系统实现文件系统中文件共享时存在的问题。
【正确答案】Windows系统并没有采用“无环图目录”结构,而是采用树形层次结构,并且使用其他形式的解决方法——快捷方式来解决目录之间的文件共享问题。用户在使用时可以很明显地体会到这种结构在共享时存在的问题:当快捷方式的目标文件被删除时,操作系统试图寻找目标,这样的寻找往往以失败而告终。
【答案解析】Windows系统实际上采用的是一种解决共享问题的方法——符号链接(symbolic linking)方法。在解决文件在目录间的共享问题上有3种典型的解决方法: (1)硬链接(hardlinking)。 (2)间接链接(indirectlinking)。 (3)符号链接。 硬链接形成了无环图结构(如图1所示),其目录内容是FCB表。这种方法存在一个重要的问题是共享的文件同时有若干相同的FCB,当文件内容发生变化时会带来一致性维护开销。为此UNIX系统采用了间接链接方法(如图2所示),此时目录内容不再是FCB表,而是FCB的指针表,它包含目录中文件FCB的磁盘块地址,这样的方法相对来说既降低了FCB的重复存储开销,也降低了FCB内容更新的开销。 图1 无环图 图2 间接链接 符号链接则是另一类共享方法,目录B共享目录A的文件C时,在目录B中创建一个文件D的FCB和文件块,D的内容则是C的路径名(相对路径或者绝对路径)。 注:上述方法中无论哪种方法都是文件系统中的静态共享方法,在文件系统中还存在另外的共享需求,即两个进程同时对同一个文件进行操作,这样的共享可以称为动态共享。
问答题
在系统状态监控中通常有这样的需求:一个程序运行的结果存放在日志文件中,当系统管理员需要了解程序状态时,可以随时使用一些文件查看命令查看这个日志文件的末尾,通过对这些信息的观察可以较好地把握程序的状态。请问操作系统应该使用怎样的方法才能满足这种需求?
【正确答案】如下图所示。 共享缓冲区内容 当两个进程共享同一活动文件表项时,它们可以共享同一缓冲区的内容,因此可以实现内容的共享。
【答案解析】这种共享语义称为“及时更新”语义,即任何一个进程更新文件的内容,其他共享此文件的进程可以马上观察到更新结果。因为这种结构首先在UNIX中得到实现,有时也称为UNIX共享语义。 在题目中,因为运行进程写日志文件,每次读/写的内容都位于文件尾部,而观察进程也观察文件尾部的内容,因此运行进程写入的文件内容一般都位于缓冲区,也因此,这样的访问模式可以产生最高的共享效率(观察进程不需要任何的磁盘操作)。
问答题
有些学者建议,不要为每个文件建立文件访问控制列表(指定哪些用户可以怎样访问这个文件),而使用一个用户访问控制列表(指定用户可以怎样访问哪些文件)。请讨论这两种方式的相对优势。
【正确答案】对于文件控制列表,访问控制信息集中在一个单独的位置,因此易于改变访问控制信息,而且较用户控制列表需要更少的空间。 对于用户控制列表,在打开一个文件时相较于文件控制列表产生的开销更少。
【答案解析】无论是哪种形式的访问控制表,它们都是“访问控制矩阵”的一种实现形式。 文件控制列表为了降低存储开销,对控制矩阵进行了简化。它将用户分为拥有者、同组用户、其他用户3种,从而使得文件的控制表只需要2~3B即可存放,即使存在百万级别文件数量的系统也仅仅需要几MB的访问控制信息。 而用户控制列表的方法,对于访问控制来说,只有存在于列表中的文件才能使用,因此打开文件时进行的访问控制逻辑相对简单,而且对于文件的共享来说比较简单易行。但是美中不足的是它的存储开销问题,随着访问控制技术的发展,特别是RBAC(Role—Based Access Control)模型的使用可以大大降低这种方法的存储开销。
问答题
在MS—DOS系统中只允许8.3形式的文件名,而在以后的Windows系统可以允许任意长度的文件名。请问这样的文件名应该怎样处理?这种方法有什么缺点?
【正确答案】如图(b)所示。 文件名存储方式 在目录项中存放文件的名字信息,因为文件的名字各有长短,所以目录项是变长的。另外,名字从目录项的一个固定位置开始,以某个特殊字符为结束符(比如“\0”字符),而且为了满足某种对齐条件(一般是机器字边界)需要填充字符。 这种方法的缺点是需要在目录项中使用一个特殊域来描述目录项长度。另外,当文件删除时被删除文件的目录项会产生一个存储碎片。
【答案解析】如图(a)所示,为了避免产生存储碎片,提高被删除目录项的可用程度,可采用定长目录项的处理方法。此时,在目录中开辟一个专用空间(比如堆空间)存放文件名字,目录项中使用一个专用域来描绘文件名字的起始位置(文件名以特殊字符结束,不需要边界对齐)。 当然这种方法依然存在存储碎片,但是空间利用率高于前一种方法。 注:因为文件的匹配需要字串比较,所以这两种方法仍然不利于文件的检索,特别是当目录中文件数目很大时。为此,有的系统使用了Hash表的方法提高检索速度。
问答题
为了加快文件目录的查找,许多操作系统为用户强加了两个文件操作系统调用:OPEN系统调用和CLOSE系统调用。但是在某些操作系统中,不需要打开和关闭文件操作用户也可以进行文件读/写。请问在两类系统中,读和写文件的系统调用分别应该包含哪些参数?
【正确答案】支持文件打开和关闭的文件系统参照《计算机考研考点精讲及复习指导》一书的对应章节的“考点精讲”。 在不支持文件打开和关闭的文件系统中,读/写文件的系统调用参数包括:①文件名;②文件读/写缓冲地址;③文件读/写长度;④文件读/写指针位置。
【答案解析】在文件系统实现上存在许多选择,OPEN和CLOSE并不是唯一的实现选择。OPEN和CLOSE存在的唯一理由是整数比较的开销小于字串匹配,但是有许多没有实现OPEN/CLOSE接口的操作系统,其性能并没有显著的下降(这个性能问题可以进一步讨论,读者可以继续考虑这样的实现方法)。 是否支持OPEN/CLOSE接口的问题本质上是有状态和无状态服务器问题。支持OPEN/CLOSE接口的操作系统实现了一个有状态的服务器——文件系统,文件系统维持文件的操作状态,因此调用者无需提供状态参数。而不支持OPEN/CLOSE接口的操作系统则实现了一个无状态服务器,因此需调用者自行维护文件状态,在调用时必须提供类似于“读/写指针位置”的状态信息。