2022年10月4日,2022年10月22日,2022年10月28日。
- 文件目录
- 记录所有文件的名字及其控制块的映射表。
- 文件控制块
- 包含文件的说明、管理控制信息的一段数据。它唯一标志了文件。
- 文件逻辑结构
- 用户界面的文件组织方式。它一定是连续的,内部可以是无结构字节流,也可是有结构记录。
- 链接(结构)文件
- 一种文件物理结构,它允许逻辑连续的文件存储于不连续的物理块,每个物理块中除了文件内容,还存放下一物理块的地址。(最后一块除外)
在实现文件系统时,每个盘块为512B。假设目录文件存放在磁盘上,文件控制块占64B。
为加快文件目录的检索速度,可利用“文件控制块分解法”。通常将文件控制块分解成两部分,第1部分占10B(包括文件名和文件内部号),其中文件名占8B;第二部分占56B(包括文件内部号和文件其他描述信息)。
假设某一目录文件共有254个文件控制块,试分别给出采用分解法前和分解法后,查找该目录文件中的某一文件控制块的平均访问磁盘次数。
-
分解前
所有 FCB 所占盘块数 = FCB 数量 × 每个 FCB 的大小 / 每个盘块的大小
$= 254 \times \SI{64}{B} / \SI{512}{B} = 31.75 \approx 32$ 。查找 FCB 需要依次遍历这些盘块。若认为目标 FCB 均匀分布于这些盘块,则平均访问次数为
$32 / 2 = 16$ 次。 -
分解后
同上计算所有 FCB(只含第一部分)所占盘块数(只需将
$\SI{64}{B}$ 改为$\SI{10}{B}$ ),得$4.96\ldots \approx 5$ 。此时要先遍历这些盘块(平均
$5/2 = 2.5$ 次),然后根据找到文件内部号直接访问第二部分(1 次)。因此总平均次数为$2.5 + 1 = 3.5$ 次。
都从 1 开始。
逻辑结构总是连续,故位置为
再读 9 个记录(第 2–10 个)会读入第 10 个记录。
下次读取直接就可是第 10 个记录。
文件F由200条记录组成,记录从1开始编号。用户打开文件后,欲将内存中的一条记录插入到文件F中,作为其第30条记录。请回答下列问题,并说明理由。
存在两类操作。
-
将 F 之前的记录向前挪一条。
“前后均有足够的空闲磁盘空间”,F 更靠前,向前扩充更方便。
每次挪动读写各一次,需要挪动原来的第 1–29 条记录,共 29 条。因此这类操作需要
$2 \times 29 = 58$ 次访问。 -
写入 F。
需要一次访问。
所以一共需要 59 次访问。
文件控制块内容基本不变,只有总大小(或长度)、最后修改时间等改变。
-
找到原有第 29 条记录。
需要从头遍历,访问 29 次。
-
将 F 的指针改为原有第 30 条记录(地址存储在原有第 29 条记录),访问一次。
-
将原有第 29 条记录的指针改为 F,访问一次。
所以共需 31 次访问。
考虑由索引节点表示的UNIX文件的组织。在每个索引节点中,假定有12个直接块指针,分别有一个一级、二级和三级间接指针。此外,假定系统盘块的大小为8KB。如果盘块指针用32位表示,其中8位用于标识物理磁盘号,24位用于标识磁盘块号,那么:
-
该系统支持的最大文件大小是多少?
- 盘块
$\SI{8}{kB}$ ,每个指针$\SI{32}{b}$ ,故每盘块可存$\SI{8}{kB} / \SI{32}{b} = \SI{2}{k}$ 个盘块的地址。 - 每个
$n$ 级指针可存$\qty(\SI{2}{k})^n$ 个盘块的地址。
所以每个索引可存
$12 \times \qty(\SI{2}{k})^0 + \qty(\SI{2}{k})^1 + \qty(\SI{2}{k})^2 + \qty(\SI{2}{k})^3 = \SI{8}{G} + \SI{4}{M} + \SI{2}{k} + 12$ 个盘块的地址。又,每盘块
$\SI{8}{kB}$ ,故单文件最大大小为二者之积,等于$\SI{64}{TB} + \SI{32}{GB} + \SI{16}{MB} + \SI{96}{kB} \approx \SI{64}{TB}$ 。 - 盘块
-
假定主存中除了文件索引节点外没有别的信息,访问在位置12 423 956的字节时,需要访问磁盘多少次?
关键是看这个字节所在盘块对应几级指针。沿索引访问次数就是级数,总次数再加上实际访问内存那一次。
认为按地址顺序、题目描述顺序依次填充索引,那么这一字节位于的盘块号是
$\SI{12,423,956}{B} / \SI{8}{kB} = 1516.59\ldots \approx 1516$ 。12 个直接块指针负责 0–11 块;一级间接指针负责 11 –$(\SI{2}{k} +10)$ 块,1516 块位于它这一段。因此需要访问两次。