155 KiB
文件管理习题
文件系统
文件系统基础
文件基本操作
例题 若一个用户进程通过$read$系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()。
Ⅰ.若该文件的数据不在内存,则该进程进入睡眠等待状态
Ⅱ.请求$read$系统调用会导致$CPU$从用户态切换到核心态
Ⅲ.$read$系统调用的参数应包含文件的名称
$A.$仅Ⅰ、Ⅱ
$B.$仅Ⅰ、Ⅲ
$C.$仅Ⅱ、Ⅲ
$D.$Ⅰ、Ⅱ和Ⅲ
解:$A$。对于Ⅰ,当所读文件的数据不在内存时,产生中断(缺页中断),原进程进入阻塞态,直到所需数据从外存调入内存后,才将该进程唤醒。对于Ⅱ,$read$系统调用通过陷入将$CPU$从用户态切换到核心态,从而获取操作系统提供的服务。对于Ⅲ,要读一个文件,首先要用$open$系统调用打开该文件。$open$中的参数包含文件的路径名与文件名,而$read$只需使用$open$返回的文件描述符,并不使用文件名作为参数。$read$要求用户提供三个输入参数:①文件描述符$fd$;② $buf$缓冲区首址;③传送的字节数$n$。$read$的功能是试图从$fd$所指示的文件中读入$n$个字节的数据,并将它们送至由指针$buf$所指示的缓冲区中。
文件逻辑结构
例题 文件的逻辑结构是为了方便()而设计的。
$A.$存储介质特性
$B.$操作系统的管理方式
$C.$主存容量
$D.$用户
解:$D$。文件结构包括逻辑结构和物理结构。逻辑结构是用户组织数据的结构形式,数据组织形式来自需求,而物理结构是操作系统组织物理存储块的结构形式。因此说,逻辑文件的组织形式取决于用户,物理结构的选择取决于文件系统设计者针对硬件结构(如磁带介质很难实现链接结构和索引结构)所采取的策略(即$A$和$B$选项)。
文件物理结构
链接分配
例题 设有一个记录文件,采用链接分配方式,逻辑记录的固定长度为$100B$,在磁盘上存储时采用记录成组分解技术。盘块长度为$512B$。若该文件的目录项已经读入内存,则对第$22$个逻辑记录完成修改后,共启动了磁盘()次。
A.3
B.4
C.5
D.6
解:$D$。第$22$个逻辑记录对应$4$($22\times100\div512=4$,余$152$)个物理块,即读入第$5$个物理块,由于文件采用的物理结构是链接文件,因此需要从目录项所指的第一个物理块开始读取,依次读到第$4$块才得到第$5$块的物理地址,共启动磁盘$5$次。修改还需要写回操作,由于写回时已获得该块的物理地址,只需$1$次访问磁盘,因此共需要启动磁盘$6$次。
例题 某磁盘文件系统使用链接分配方式组织文件,簇大小为$4KB$。目录文件的每个目录项包括文件名和文件的第一个簇号,其他簇号存放在文件分配表$FAT$中。
1)假定目录树如下图所示,各文件占用的簇号及顺序如下表所示,其中$dir$、$dir1$是目录,$file1$、$file2$是用户文件。请给出所有目录文件的内容。
dir--dir1--file1
|
|----file2
| 文件名 | 簇号 |
|---|---|
| dir | 1 |
| dir1 | 48 |
| file1 | 100、106、108 |
| file2 | 200、201、202 |
2)若$FAT$的每个表项仅存放簇号,占$2$个字节,则$FAT$的最大长度为多少字节?该文件系统支持的文件长度最大是多少?
3)系统通过目录文件和$FAT$实现对文件的按名存取,说明$file1$的$106$、$108$两个簇号分别存放在$FAT$的哪个表项中。
4)假设仅$FAT$和$dir$目录文件已读入内存,若需将文件$dir/dir1/file1$的第$5000$个字节读入内存,则要访问哪几个簇?
解:
1)直接根据表格归类:
$dir$目录文件:
| 文件名 | 簇号 |
|---|---|
| dir1 | 48 |
$dir1$目录文件:
| 文件名 | 簇号 |
|---|---|
| file1 | 100 |
| file2 | 200 |
2)首先要求最大长度,就必须知道这个系统支持多少个簇。簇的数量依照簇号而得到,因为簇号为$2B$,所以长度为$16bit$,能代表$2^{16}$个簇,所以一个$FAT$文件最多包含$2^{16}$个簇。所以$FAT$最大长度是$2^{16}\times2B=128KB$,文件最大长度为$2^{16}\times4KB=256MB$。
3)因为是链接分配,所以$FAT$每个表项存放下一个簇号,所以本簇号在上一个表项中。所以$106$在$100$号中,$108$在$106$中。
4)因为仅$FAT$和$dir$目录文件已读入内存,所以要按照路径接着访问$dir1$的$48$,然后到$file1$的$5000$号,因为$5000>4KB=4096B$,所以接着访问$file1$的$106$。即$48$和$106$。
索引分配
例题 假设磁盘块大小为$1KB$,一个索引表项占$4B$,求文件最大长度。
解:若磁盘块大小为$1KB$,一个索引表项占$4B$,则一个磁盘块只能存放$1\times1024\div4=256$个索引项。
若某文件采用两层索引,则该文件的最大长度,就是所有索引都用来指向一个文件的数据,所以可以到$256\times256\times1KB=65536KB=64MB$。
例题 设文件索引结点中有$7$个地址项,其中$4$个地址项是直接地址索引,$2$个地址项是一级间接地址索引,$1$个地址项是二级间接地址索引,每个地址项大小为$4B$若磁盘索引块和磁盘数据块大小均为$256B$,则可表示的单个文件最大长度是()。
A.33KB
B.519KB
C.1057KB
D.16516KB
解:每个磁盘索引块和磁盘数据块大小均为$256B$,每个磁盘索引块有$256\div4=64$个地址项。因此,$4$个直接地址索引指向的数据块大小为$4\times256B$;$2$个一级间接索引包含的直接地址索引数为$2\times(256\div4)$,即其指向的数据块大小为$2\times(256\div4)\times256B$。$1$个二级间接索引所包含的直接地址索引数为$(256\div4)\times(256\div4)$,即其所指向的数据块大小为$(256\div4)\times(256\div4)\times256B$。因此,$7$个地址项所指向的数据块总大小为$4\times256+2\times(256\div4)\times256+(256\div4)\times(256\div4)\times256=1082368B=1057KB$。
例题 某文件系统的目录项由文件名和索引结点号构成。若每个目录项长度为$64$字节,其中$4$字节存放索引结点号,$60$字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量的上限为()。
A.2^{26}
B.2^{32}
C.2^{60}
D.2^{64}
解:$B$。此题容易按照$60$位来计算,任务$60$字节就可以表示出$2^{60}$种不同的名称组合。但是实际上只需要看索引节点长度,因为索引长度代表可支持的索引数量的数量大小,而不同的文件目录可以同名,所以只用看索引节点的个数就可以了,$4B=32bit$,所以就是$2^{32}$个。
例题 在文件的案引结点中存放直接索引指针$10$个,一级和二级索引指针各$1$个,磁盘块大小为$1KB$,每个索引指针占$4B$。若某文件的索引结点已在内存中,则把该文件偏移量(按字节编址)为$1234$和$307400$处所在的磁盘块读入内存,需访问的磁盘块个教分别是()。
A.1,2
B.1,3
C.2,3
D.2,4
解:$B$。一个磁盘可以存放$1KB/4=256$个指针,直接索引指针为$10$个,代表偏移量在$0\sim256\times10=2560$之间的都可以通过直接索引得到。 一级索引指针$1$个,$256\times256=65536$,在$2561\sim65536+2560=68096$之间需要访问两个磁盘块。 二级索引指针$1$个,所以在$68096\sim256^3+68096$之间需要访问三个磁盘块。
混合分配
例题 有一个文件系统如图所示。图中的方框表示目录,圆圈表示普通文件。根目录常驻内存,目录文件组织成链接文件,不设$FCB$,普通文件组织成索引文件。目录表指示下一级文件名及其磁盘地址(各占$2B$,共$4B$)。下级文件是目录文件时,指示其第一个磁盘块地址。下级文件是普通文件时,指示其$FCB$的磁盘地址。每个目录的文件磁盘块的最后$4B$供拉链使用。下级文件在上级目录文件中的次序在图中为从左至右。每个磁盘块有$512B$,与普通文件的一页等长。
对于普通文件的$FCB$,每个磁盘地址占$2B$,前$10$个地址直接指示该文件前$10$页的地址。第$11$个地址指示一级索引表地址,一级索引表中的每个磁盘地址指示一个文件页地址;第$12$个地址指示二级索引表地址,二级索引表中的每个地址指示一个一级索引表地址;第$13$个地址指示三级索引表地址,三级索引表中的每个地址指示一个二级索引表地址。请问:
1)一个普通文件最多可有多少个文件页?
2)若要读文件$J$中的某一页,最多启动磁盘多少次?
3)若要读文件$W$中的某一页,最少启动磁盘多少次?
4)根据3),为最大限度地减少启动磁盘的次数,可采用什么方法?此时,磁盘最多启动多少次?
解:
1)因为磁盘块大小为$512B$,所以索引块大小也为$512B$,每个磁盘地址大小为$2B$。因此,一个一级索引表可容纳$512\div2=256$个磁盘地址。同样,一个二级索引表可容纳$256$个一级索引表地址,一个三级索引表可容纳$256$个二级索引表地址。这样,一个普通文件最多可有的文件页数为$10+256+256\times256+256\times256\times256= 16843018$。
2)由图可知,要读文件$J$中的某一页,先从内存的根目录中找到目录文件$A$的磁盘地址,将其读入内存(已访问磁盘$1$次)。然后从目录$A$中找出目录文件$D$的磁盘地址读入内存(已访问磁盘$2$次)。再从目录$D$中找出文件$J$的$FCB$地址读入内存(已访问磁盘$3$次)。在最坏情况下,该访问页存放在三级索引下,这时候需要一级级地读三级索引块才能得到文件$J$的地址(已访问磁盘$6$次)。最后读入文件$J$中的相应页(共访问磁盘$7$次)。所以,若要读文件$J$中的某一页,最多启动磁盘$7$次。
3)由图可知,目录文件$C$和$U$的目录项较多,可能存放在多个链接在一起的磁盘块中,如果这样就要从$C$一直通过链接跳到$U$对应的磁盘块上。在最好情况下,所需的目录项都在目录文件的第一个磁盘块中。先从内存的根目录中找到目录文件$C$的磁盘地址并读入内存(已访问磁盘$1$次)。在$C$中找出目录文件$I$的磁盘地址并读入内存(已访问磁盘$2$次)。在$I$中找出目录文件$Р$的磁盘地址并读入内存(已访问磁盘$3$次)。从$Р$中找到目录文件$U$的磁盘地址并读入内存(已访问磁盘$4$次)。从$U$的第一个磁盘块中找出文件$W$的$FCB$地址并读入内存(已访问磁盘$5$次)。在最好情况下,要访问的页在$FCB$的前$10$个直接块中,按照直接块指示的地址读文件$W$的相应页(已访问磁盘$6$次)。所以,若要读文件$W$中的某页,最少启动磁盘$6$次。
4)为了减少启动磁盘的次数,可以将需要访问的$W$文件挂在根目录的最前面的目录项中。此时,只需读内存中的根目录就可找到$W$的$FCB$,将$FCB$读入内存(已访问磁盘$1$次),最差情况下,需要的$W$文件的那个页挂在$FCB$的三级索引下,因此读$3$个索引块需要访问磁盘$3$次(已访问磁盘$4$次)得到该页的物理地址,再去读这个页即可(已访问磁盘$5$次)。此时,磁盘最多启动5次。
文件存储空间管理
位示图
若序号从$1$开始,$i$代表行,$j$代表列,$n$为字长,即每行位数,盘块号为$b=n(i-1)+j$,$i=(b-1)\div n+1$,$j=(b-1)\mod n+1$。
例题 若用$8$个字(字长$32$位)组成的位示图管理内存,假定用户归还一个块号为$100$的内存块时,它对应位示图的位置为()。
$A.$字号为$3$,位号为5
$B.$字号为$4$,位号为4
$C.$字号为$3$,位号为4
$D.$字号为$4$,位号为5
解:$B$。$8$个字,字长$32$位,则代表位图为$8$行$32$列。字号就是行号:$(100-1)\div32+1=4$,位号就是列号:$(100-1)\mod32+1=4$。
文件检索
例题 下列关于目录检索的论述中,正确的是()。
$A.$由于散列法具有较快的检索速度,因此现代操作系统中都用它来替代传统的顺序检索方法
$B.$在利用顺序检索法时,对树形目录应采用文件的路径名,且应从根目录开始逐级检索
$C.$在利用顺序检索法时,只要路径名的一个分量名未找到,就应停止查找
$D.$利用顺序检索法查找完成后,即可得到文件的物理地址
解:$C$。选项$A$中的方法不利于对文件顺序检索,也不利于文件枚举,一般采用线性检索法;选项$B$中,为了加快文件查找速度,可以设立当前目录,于是文件路径可从当前目录进行查找;选项$D$中,在顺序检索法查找完成后,得到的是文件的逻辑地址。
例题 在实现文件系统时,为加快文件目录的检索速度,可利用“$FCB$分解法”。假设目录文件存放在磁盘上,每个盘块$512B$。$FCB$占$64B$,其中文件名占$8B$。通常将$FCB$分解成两部分,第一部分占$10B$(包括文件名和文件内部号),第二部分占$56B$(包括文件内部号和文件的其他描述信息)。
1)假设某一目录文件共有$254$个$FCB$,试分别给出采用分解法前和分解法后,查找该目录文件的某个$FCB$的平均访问磁盘次数。
2)一般地,若目录文件分解前占用$n$个盘块,分解后改用$m$个盘块存放文件名和文件内部号,请给出访问磁盘次数减少的条件。
解:索引结点类似的瘦身方法,将文件名单独剥离出去作为索引。分析题干,$FCB$占$64B$,分为$10$和$56B$,合起来为$66>64$,而文件名$8B$,所以文件内部号为$2B$。
1)因为一个目录文件共有$254$个$FCB$。
所以分解前每个盘块可以放$512\div64$个$FCB$,所以$254$需要$254\div(512\div64)=31.75\approx32$个盘块。所以平均访问次数为$(1+2+\cdots+32)\div32=16.5$次。
分解后每个盘块可以放$512\div10$,所以$254$需要$254\div(512\div64)=4.96\approx5$。注意使用分解法后因为部分内存在目录外,所以找到文件名和文件内部号后还需要再读一次磁盘,找到$FCB$所有的内容。所以平均访问次数为$(2+3+4+5+6)\div5=4$次。
2)分解前平均访问次数$=(1+2+\cdots+n)\div n=\dfrac{n+1}{2}$次。
分解后平均访问次数$=(2+3+\cdots+(m+1))\div m=\dfrac{m+3}{2}$次。
所以$\dfrac{m+3}{2}<\dfrac{n+1}{2}$,即$m<n-2$。
文件保护
例题 对一个文件的访问,常由()共同限制。
$A.$用户访问权限和文件属性
$B.$用户访问权限和用户优先级
$C.$优先级和文件属性
$D.$文件属性和口令
解:$A$。对于这道题,只要能区分用户的访问权限和用户优先级,就能得到正确的答案。用户访问权限是指用户有没有权限访问该文件,而用户优先级是指在多个用户同时请求该文件时应该先满足谁。比如,图书馆的用户排队借一本书,某用户可能有更高的优先级,即他排在队伍的前面,但有可能轮到他时被告知他没有借阅那本书的权限。文件的属性包括保存在$FCB$中对文件访问的控制信息。
例题 加密保护和访问控制两种机制相比,()。
$A.$加密保护机制的灵活性更好
$B.$访问控制机制的安全性更高
$C.$加密保护机制必须由系统实现
$D.$访问控制机制必须由系统实现
解:$D$。相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活性相对较高。若访问控制不由系统实现,则系统本身的安全性就无法保证。加密机制若由系统实现,则加密方法将无法扩展。
例题 某文件系统中,针对每个文件,用户类别分为$4$类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为$5$种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为()。
A.5
B.9
C.12
D.20
解:$D$。同一类用户可能有所有可能的权限中的任一组合,所以可以把用户访问权限抽象为一个矩阵,行代表用户,列代表访问权限。这个矩阵有$4$行$5$列,$1$代表$true$,$0$代表$false$,所以需要$4\times5=20$位,选$D$。
文件共享
例题 若文件$f1$的硬链接为$f2$,两个进程分别打开$f1$和$f2$,获得对应的文件描述符为$fd1$和$fd2$,则下列叙述中正确的是()。
Ⅰ.$f1$和$f2$的读写指针位置保持相同
Ⅱ.$f1$和$f2$共享同一个内存索引结点
Ⅲ.$fd1$和$fd2$分别指向各自的用户打开文件表中的一项
$A.$仅Ⅲ
$B.$仅Ⅱ、Ⅲ
$c.$仅Ⅰ、Ⅱ
$D.$Ⅰ和Ⅱ、Ⅲ
解:$B$。硬链接指通过索引结点进行连接。一个文件在物理存储器上有一个索引结点号。存在多个文件名指向同一个索引结点的情况,Ⅱ正确。两个进程各自维护自己的文件描述符,Ⅲ正确,Ⅰ错误。
例题 若多个进程共享同一个文件$F$,则下列叙述中,正确的是()。
$A.$各进程只能用“读”方式打开文件F
$B.$在系统打开文件表中仅有一个表项包含$F$的属性
$C.$各进程的用户打开文件表中关于$F$的表项内容相同
$D.$进程关闭$F$时,系统删除$F$在系统打开文件表中的表项
解:$B$。多个进程可以同时以“读”或“写”的方式打开文件,操作系统并不保证写操作的互斥性,进程可通过系统调用对文件加锁,保证互斥写(读者-写者问题),$A$错误。整个系统只有一个系统打开文件表,同一个文件打开多次只需改变引用计数,$B$正确。用户进程的打开文件表关于同一个文件不一定相同,例如读写指针位置不一定相同,$C$错误。进程关闭文件时,文件的引用计数减$1$,引用计数变为$0$时才删除系统打开文件表中的表项,$D$错误。