操作系统—第四章文件管理—文件系统实现—应用题
1FCB分解法。在实现文件系统时,为加快文件目录的检索速度,可利用“FCB分解法”。假设,目录文件存放在磁盘上,每个盘块512B,FCB占64B,其中文件名占8B。通常将FCB分解成两部分,第一部分占10B(包括文件名和文件内部号),第二部分占56B(包括文件内部号和文件的其他描述信息)

2设某文件为链接文件,由5个逻辑记录组成,每个逻辑记录的大小与磁盘块的大小相等,均为512B,并依次存放在50,121,75,80,63号磁盘块上。若要存取文件的第1569逻辑字节处的信息,要访问哪个磁盘块?
512*3 =1536 ,说明在80号磁盘块上。
3某文件系统是一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件
索引分配的代价过高,链式分配虽然有利于文件扩充,但在本题中文件的数据一次性写入磁盘,因此不需要扩充文件。连续方式,寻道时间短,文件随机访问效率更高。
在FCB中加入的字段为<起始块号,块数>,
(2)
将所有的FCB集中存放,文件数据集中存放。这样在随机查找文件名时,只需访问FCB对应的块,可减少磁头移动和磁盘I/O访问次数。
4假定磁盘块的大小为1KB,对于540MB的硬盘,其文件分配表(FAT)最少需要占用多少存储空间?
对于540MB的硬盘,硬盘总块数为540MB/1KB=540K个,因此需要20位,
540K*2.5B=1350KB
5某磁盘文件系统使用链接分配方式组织文件,簇大小为4KB。目录文件的每个目录项包括文件名和文件第一个簇号,其他簇号存放在文件分配表FAT中。
(1)假定目录树如下图所示,各文件占用的簇号及顺序如下表所示,其中dir,dir1是目录,file1,file2是用户文件。请给出所有目录文件的内容?

在我最开始的答案中,我只写了文件名,忽略了簇号,我要记住这个教训。

(2)若FAT的每个表项仅存放簇号,占2B,则FAT的最大长度为多少字节?该文件系统支持的文件长度最大是多少?
其实题目中只出现了两个数据4KB和2B,我以为簇号和4KB有关,但仔细想想,4KB是一个簇的大小,它最多只能求一个簇中有多少页表项,不能求FAT(文件分配表)中有多少页号。

(3)系统通过目录文件和FAT实现对文件的按名存取,说明file1的106,108两个簇号分别存放在FAT的哪个表项中。
在FAT的每个表项中存放下一个簇号,file1的簇号106存放在FAT的100号表项中,簇号108存放在FAT的106号表项中。
(4)假设仅FAT和dir目录文件已读入内存,若需将文件dir/dir1/file1的第5000个字节读入内存,则要访问哪几个簇?
现在dir目录文件里找到dir1的簇号,然后读取48号簇,得到dir1目录文件,接着找到filr1的第一个簇号,据此在FAT里查找file1的第5000个字节所在的簇号,最后访问磁盘中的该簇。因此,需要访问目录文件die1所在的48号簇及文件file1的106号簇。
6
有一个文件系统如图A所示。图中的方框表示目录,圆圈表示普通文件。根目录常驻内存,目录文件组织成链接文件,不舍FCB,普通文件组织成索引文件。目录表指示下一级文件名及其磁盘地址(各占2B,共4B)。下级文件是目录为念时,指示其第一个磁盘块地址。下级文件是普通文件时,指示其FCB的磁盘地址。每个目录的文件磁盘块的最后4B供拉链使用。下级文件在上级目录文件中的次序在图中为从左到右。每个磁盘块有512B,与普通文件的一页等长。
普通文件的FCB组织如图B所示。其中,每个磁盘地址占2B,前10个地址直接指示该文件前10页的地址。第11个地址指示一级索引地址,一级索引表中的每个磁盘地址指示一个文件页地址;第12个地址指示二级索引表地址,二级索引表中的每个地址指示一个一级索引表地址;第13个地址指示三级索引表地址,三级索引表地址中的每个地址指示一个二级索引表地址。请问:

(1)一个普通文件最多可有多少个文件页?
磁盘地址有2B,但文件页数不是2^16,这是因为有FCB的存在。
**文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。FCB主要包含以下信息:
基本信息:如文件名,文件的物理位置,文件的逻辑结构,文件的物理结构等
存取控制信息:如文件存取权限
使用信息:如文件建立时间,修改时间等。
**
一个磁盘地址就是一个文件页,因此计算出有多少个磁盘地址就计算出了多少个文件页。
因为磁盘块大小为512B,所以索引块大小也为512B,每个磁盘地址大小为2B。因此,一个一级索引表可容纳256个磁盘地址。同样,一个二级索引可容纳256个一级索引表地址,一个三级索引表可容纳256个二级索引表地址。这样,一个普通文件最多可有的文件页数为10+256+256256+256256*256=16843018。
(2)若要读取文件J中的某一页,最多启动文件多少次?
由图可知,目录文件A和D中的目录项都只有两个,因此这两个目录文件都只占用一个物理块。要读文件J中的某一页,先从内存的根目录找到目录文件A的磁盘地址,将其读入内存(已访问磁盘1次)。然后从目录A中找出目录文件D的磁盘地址读入内存(已访问磁盘两次)。再从目录D中找出文件J的FCB地址读入内存(已访问磁盘3次)。在最坏的情况下,该访问页存放在三级索引下,这时候需要一级级地读三级索引块才能得到文件J的地址(已访问磁盘6次)。最后读入文件J中的相关页(共访问磁盘7次)。
(3)若要读取文件W中的某一页,最少启动磁盘多少次?
由图可知,目录文件C和U的目录项较多,可能存放在多个链接在一起的磁盘块中。在最好的情况下,所需的目录项都在目录文件的第一个磁盘块中。先从内存的根目录中找到目录文件C的磁盘地址并读入内存(已访问磁盘1次)。在C中找出目录文件I的磁盘地址并读入内存(已访问磁盘2次)。在I中找出目录文件P的磁盘地址并读入内存(已访问磁盘3次)。从P中找到目录文件U的磁盘地址并读入内存(已访问磁盘5次)。在最好情况下,要访问的页在FCB的前10个直接块中,按照直接块知识的地址读文件W的相应页(已访问磁盘6次)。所以,若要读文件W中的某页,最少启动磁盘6次。
(4)根据(3),为最大限度地减少启动磁盘的次数,可采用什么办法?此时,磁盘最多启动多少次?
为了减少启动磁盘的次数,可以将需要访问的W文件挂在根目录地最前面的目录项中。此时,只需读内存中的根目录就可找到W地FCB,将FCB读入内存(已访问磁盘1次)。最差情况下,需要的W文件地那个页挂在FCB地三级索引下,因此读三个索引块需要访问磁盘3次(已访问磁盘4次)得到该页的物理地址,再去读这个页即可(已访问磁盘5次)。此时,磁盘最多启动5次。
7某文件系统采用多级索引的方式组织文件的数据存放,假定在文件的i_node中设有13个地址项,其中直接索引10项,一次间接索引项1项,二次间接索引项1项,三次间接索引项1项,数据块的大小为4KB,磁盘地址用4B表示。
一个2GB大小的文件,在这个文件系统中实际占用多少空间?

8若一个字有32位,则位示图中第18个字的第16位对应的块号是多少?
本来我以为块号是 18*32+16,但是我忽略了第18个块还没有用光,是不能全部算进去的。
正确的块号=(18-1)*32+16=560
这篇博客探讨了操作系统中文件管理的相关应用题,涉及FCB分解法、链接文件存取、多级目录结构、文件分配表(FAT)计算、磁盘访问策略等多个方面,旨在理解文件系统的高效操作。





