第 4 章 名词库

这一页是复习主入口。 目标是把第 4 章的名词收全,并把每个词的边界和适用范围钉死。

每条最多四行:是(定义)/不是(划掉最常见的误解)/易混(成对的对手)/范围(该结论在什么条件下才成立)。

建设进度:✅ 4.1 文件系统基础 ✅ 4.2 目录 ✅ 4.3 文件系统 (第 4 章完整)


4.1.1 文件的基本概念

文件

  • 是:创建者定义的一组相关信息的集合,是操作系统提供给用户的、可以按名存取的最小逻辑单位。
  • 不是:不是”磁盘上的一段字节”这么简单——文件是抽象,它把”按块号取数据”包装成”按名字取数据”。
  • 易混:↔ 磁盘块。判据:文件是逻辑概念,块是物理概念。

数据项

  • 是:文件系统中最低级的数据组织形式。基本数据项是描述一个对象某种属性的字符集,不可再分;组合数据项由若干基本数据项构成。
  • 不是:基本数据项不是”最小的字节”,而是”最小的有意义单位”(如”姓名”整体,不是姓名的第一个字)。
  • 易混:↔ 记录。判据:数据项描述一个属性,记录描述一个对象。

记录

  • 是:一组相关数据项的集合,用于描述一个对象在某方面的属性。
  • 不是:不是磁盘块——一条记录可能跨块,一块也可能装多条记录。
  • 易混:↔ 盘块。判据:记录是用户视角的存取单位,盘块是磁盘视角的读写单位。

关键字

  • 是:能唯一标识一条记录的一个或几个数据项。
  • 不是:不是任意字段——不能唯一标识就不能作关键字(学号可以,姓名不行)。
  • 易混:↔ 关系数据库的主键,概念完全对应。

有结构文件 / 无结构文件

  • 是:有结构文件(记录式文件)由一组相似记录组成,长度以记录为单位;无结构文件(流式文件)是一串字符流,长度以字节为单位。
  • 不是:“有结构”不等于”内容有格式”。CSV、JSON 在现代系统上都是无结构文件。
  • 易混:判据是操作系统本身知不知道记录边界——系统能提供”读第 22 条记录”才叫有结构。
  • 范围:现代通用操作系统几乎只提供无结构文件;有结构文件是操作系统与数据库尚未分家年代的产物,408 中按概念辨析考查。

文件属性

  • 是:名称、标识符、类型、位置、大小、保护、时间日期、文件所有者信息。
  • 不是:属性不存放在文件内容里,而是存在 FCB 或索引节点中。
  • 易混:名称是唯一以人类可读形式保存的信息;标识符是系统内部使用的数字,用户不可读。

普通文件 / 目录文件 / 特殊文件

  • 是:按组织形式和处理方式分类的三类。普通文件即用户数据;目录文件的内容是目录项表;特殊文件是 I/O 设备在文件系统中的映射。
  • 不是:分类依据不是内容,而是”读写它时系统把内容当作什么来解释”。
  • 易混:判据看读写最终落到哪里——普通文件落到数据块(系统不解释);目录文件落到数据块(系统按目录项格式解释,且禁止用户直接写);特殊文件根本不落到磁盘,而是落到设备驱动程序。

文件的基本操作

  • 是:创建、写、读、重定位、删除、截断六个,是最小集合。
  • 不是:打开与关闭不在这六个之内——它们不改变文件本身,只改变进程与文件的连接状态。
  • 易混:复制不是基本操作,可由”创建 + 读 + 写”组合完成。

4.1.2 文件控制块和索引节点

文件控制块(FCB)

  • 是:存放控制文件所需各种信息的数据结构,其有序集合就是文件目录;一个 FCB 就是一个目录项。
  • 不是:FCB 不在文件内容里,它在目录文件里。
  • 易混:三类信息——基本信息(文件名、物理位置、逻辑结构、物理结构)、存取控制信息(权限)、使用信息(时间)。

索引节点(inode)

  • 是:把 FCB 中”检索目录时用不到的信息”单独抽出来存放的结构;抽出后目录项只剩 ⟨文件名, inode 号⟩。
  • 不是:索引节点中没有文件名——文件名必须留在目录项里供比对。
  • 易混:↔ FCB。判据:不用索引节点的系统里目录项就是 FCB;用索引节点的系统里目录项被瘦身,FCB 的其余内容进了 inode。
  • 范围:引入索引节点的目的只有一个——减少检索目录时的读盘次数,不是为了省磁盘空间(总空间几乎没变,只是挪了地方)。

磁盘索引节点 / 内存索引节点

  • 是:磁盘 inode 常驻磁盘,含文件主标识符、类型、权限、物理地址、长度、连接计数、存取时间;内存 inode 是文件打开后的副本,额外增加索引节点编号、状态、访问计数、逻辑设备号、链接指针。
  • 不是:内存 inode 不是磁盘 inode 的简单拷贝,它多出的字段只在运行期有意义。
  • 易混:判据:磁盘 inode 描述”文件是什么样”,内存 inode 额外描述”文件正被怎样使用”。

连接计数

  • 是:inode 中记录有多少个目录项指向本 inode 的字段。
  • 不是:不是”有多少进程打开了它”(那是打开计数)。
  • 易混:↔ 打开计数(在系统打开文件表中)。判据:连接计数管磁盘上的名字,打开计数管内存中的引用;两者都为 0 时数据块才真正被回收。

索引节点总数

  • 是:格式化时就已确定的、整个分区能容纳的 inode 个数上限,之后不能更改。
  • 不是:与单个文件的最大长度无关(高频真题)。
  • 易混:判据——inode 内部的结构管”一个文件多大”,inode 的个数管”能有多少个文件”。
  • 范围:存放海量小文件时 inode 会先于数据块耗尽,表现为”磁盘没满却建不了新文件”。

4.1.3 文件的操作

打开(open)

  • 是:检索目录 → 检查权限 → 把索引节点复制到内存并在系统打开文件表建项 → 在进程打开文件表建项 → 返回文件描述符。
  • 不是:open 不把文件内容读入内存,只读属性。一个 4GB 的文件同样能瞬间打开。
  • 易混:打开的价值在于把目录检索的开销一次付清,此后读写不再碰目录。

关闭(close)

  • 是:撤销进程打开文件表中该表项使 fd 失效 → 系统打开文件表的打开计数减 1 → 计数为 0 才回收该表项 → 必要时写回被修改的属性。
  • 不是:关闭不是删除,文件仍完好留在磁盘上。
  • 易混:一个系统表项被多个 fd 引用时,关一个 fd 只让计数减一。

系统打开文件表 / 进程打开文件表

  • 是:系统表全系统一张,每个被打开的文件占一项(含文件号、外存地址、打开计数);进程表每进程一张,每次 open 调用占一项(含 fd、读写指针、系统表索引)。
  • 不是:读写指针不能放在系统表或 inode 里——否则两个同时读同一文件的进程会互相干扰。
  • 易混:分工判据——凡属于”这一次打开”的状态放进程表,凡属于”这个文件”的状态放系统表。

文件描述符(fd)

  • 是:进程打开文件表的下标,open 的返回值。
  • 不是:不是 inode 号,也不是系统表索引。
  • 易混:作用域判据——fd 只在本进程内有效;inode 号在整个文件系统内唯一。

截断(truncate)

  • 是:把已有文件长度截为 0,回收全部数据块,但保留目录项与全部属性。
  • 不是:不是删除——删除还要抹掉目录项。
  • 易混:对照”创建/删除各是两件事”——截断只做”回收空间”这一件。

4.1.4 文件的逻辑结构

逻辑结构 / 物理结构

  • 是:逻辑结构回答”用户如何看待文件内容”,物理结构回答”逻辑文件如何存放到存储介质上”。
  • 不是:两者互不限定——同一逻辑结构可配任何物理结构。
  • 易混:↔ 顺序文件 vs 连续分配(最高频混淆)。判据:顺序文件说的是记录的逻辑排列,连续分配说的是盘块的物理排列。
  • 范围:物理组织形式由”存储介质特性”决定(选择题答案)——磁带只能顺序,磁盘三种皆可。

顺序文件(串结构 / 顺序结构)

  • 是:记录一个接一个顺序排列。串结构按存入时间排列,与关键字无关;顺序结构按关键字有序。
  • 不是:不等于连续分配。
  • 易混:判据——串结构只能顺序查找,顺序结构可折半查找。

索引文件

  • 是:为每条记录建一个索引项(记录长度与指针),索引表按关键字有序,可折半查找。
  • 不是:索引项不是每组一个,而是每条记录一个,因此索引表可能很大。
  • 范围:索引文件用于可变长记录文件——变长记录无法用乘法算出位置,只能查表。

索引顺序文件

  • 是:记录分组,只为每组第一条记录建索引项。查找时先定位组,再组内顺序查。
  • 不是:不是”索引文件 + 顺序文件”的简单叠加,关键在只索引组首。
  • 易混:这是最常用的一种。 时:顺序 次 / 一级索引 1000 次 / 两级索引 150 次。

直接文件(散列文件)

  • 是:由关键字经散列函数直接算出记录的物理地址。
  • 不是:与 UNIX inode 的”直接地址项”毫无关系,两个”直接”同名异义。
  • 范围:只适合等值查找,不支持范围查询和按序扫描,且必须处理冲突。

记录成组 / 记录分解 / 成组因子

  • 是:成组是把若干条逻辑记录打包放进一个物理块;分解是读入整块后在内存中拆出某条记录;成组因子 是一块能放的记录条数。
  • 不是:成组不是文件分配方式,它是逻辑记录到物理块的打包,与连续/链接/索引无关。
  • 易混:第 条记录在第 块、块内第 条。
  • 范围:代价是改一条记录也必须读整块、写整块——磁盘没有”只写 100 字节”这回事。

4.1.5 文件的物理结构

簇

  • 是:若干连续磁盘块组成的分配单位,文件系统以簇为单位分配空间。
  • 不是:簇 ≠ 磁盘块。计算题中”最大文件块数”问的常是磁盘块,而 FAT 按簇建表。
  • 范围:FAT 计算题的首要错因就是块与簇混用,动笔前必须先统一单位。

连续分配

  • 是:文件占一组连续的盘块;目录项记起始块号 + 长度;物理块号 = 起始块号 + 逻辑块号。
  • 不是:不是”最好的方式”——它有外部碎片且文件难以增长。
  • 易混:三种方式中唯一真正 定位的,顺序访问和随机访问都最快。
  • 范围:“在文件中间增加一块”时它的磁盘 I/O 最多(要整体后移);但**“末尾追加”时它反而可能最快**。

隐式链接

  • 是:下一块的块号存放在每个数据块的内部;目录项只记首块号。
  • 不是:不支持随机访问——访问第 块需 次磁盘 I/O。
  • 易混:指针损坏会导致其后整条链全部丢失;每块要拿出几字节存指针,有效容量不再是 2 的幂。

显式链接 / 文件分配表(FAT)

  • 是:把所有块的”下一块指针”集中到一张表;一个分区一张 FAT,第 项对应第 号簇,取值为下一簇号 / EOF / FREE / BAD。
  • 不是:FAT12/16/32 的数字是表项位数,决定能管多大分区;不是”单文件最大 32GB”。
  • 易混:↔ 索引分配。判据:FAT 按物理簇号索引、全盘一张、要追链 ;索引表按逻辑块号索引、一文件一张、下标直取 。
  • 范围:它”支持随机访问”的前提是 FAT 已整体读入内存——追链在内存中完成,才不花磁盘 I/O;本质上仍是追链,不是直接定位。

索引分配 / 索引块

  • 是:为每个文件建一张索引表,第 项直接给出该文件第 个逻辑块的物理块号;存表的盘块叫索引块。
  • 不是:不能兼管空闲块(FAT 可以),必须另设位示图或空闲链表。
  • 易混:索引块装不下时的三种解法——链接方案、多层索引、混合索引。
  • 范围:小文件也要为索引块付出一整块的开销,这是它的主要浪费。

混合索引

  • 是:UNIX 的做法。inode 含 13 个地址项:10 个直接地址 + 一级间接 + 二级间接 + 三级间接。
  • 不是:不是”inode 里列出了文件的全部数据块地址”——大文件的 inode 里存的是索引块的地址。
  • 易混:可寻址块数 ,最大文件 ,其中 。
  • 范围:设计意图是小文件不为大文件的能力付出代价—— 时,40KB 以内零间接开销,而上限可达 4TB。

访问磁盘次数(混合索引)

  • 是:直接 1 次、一级间接 2 次、二级间接 3 次、三级间接 4 次。规律是每多一级间接多读一个索引块。
  • 范围:以上数字均假定 inode 已在内存。inode 不在内存时每项再加 1。

4.1.6 文件保护

访问类型

  • 是:读、写、执行、添加、删除、列表清单六种。
  • 易混:“添加”与”写”分开(只许追加不许改写);“列表清单”与”读”分开(知道文件存在但读不到内容)。

口令保护

  • 是:为文件设口令,口令存放在该文件的 FCB 或索引节点中,由操作系统比对。
  • 不是:它的不安全不在于口令太短,而在于口令以系统可读的形式保存在系统内部。
  • 易混:↔ 加密保护。判据:密码存不存在系统里。
  • 范围:优点是时间与空间开销都很小,防的只是”其他普通用户”,它假定操作系统可信。

加密保护

  • 是:用密码对文件本身加密,写时编码、读时译码;密码不存储在系统中。
  • 不是:不是”给文件加口令”的另一种说法。
  • 范围:保密性强、连管理员也拿不到明文,代价是每次读写都要编码译码,耗时。

访问控制表(ACL)

  • 是:在每个文件的 FCB 或索引节点中增加一张表,记录各用户可对该文件执行哪些操作;是访问矩阵按列切分的结果。
  • 不是:实际系统不会逐用户列举——那样表比文件还大。
  • 易混:↔ 访问权限表 / 能力表(按行切分,每用户一张)。判据:ACL 回答”谁能动这个文件”,能力表回答”这个用户能动哪些文件”。
  • 范围:现实系统绝大多数选 ACL,因为权限检查发生时文件总是已知的。

精简的访问列表

  • 是:把用户分成 Owner / Group / Other 三类,每类三位(rwx),共九位表达完整权限。
  • 不是:不是简化版 ACL 的”退化”,而是保护与共享这对矛盾的工程平衡点。
  • 易混:粒度再粗则无法共享,再细则表不可用。

目录的 r / w / x

  • 是:目录的 r = 能 ls 列出文件名;w = 能在其中创建 / 删除 / 重命名文件;x = 能穿过它进入下级路径。
  • 不是:与作用在普通文件上的含义毫无关系。
  • 范围:能否删除一个文件取决于其父目录的 w,与该文件自身权限无关——因为删除改的是目录文件的内容。创建文件需要父目录的 w + x;沿路径访问需要途经每一级目录的 x。

4.2.1 目录的基本概念

文件目录 / 目录文件

  • 是:文件目录是若干 FCB 的有序集合(内容);目录文件是存放该集合的那个文件(载体)。
  • 不是:目录不是特殊的系统数据结构——它就是一个普通文件,有自己的 inode、数据块和权限。
  • 易混:两词只差语序,判据:目录是内容,目录文件是纸。

目录管理的四个要求

  • 是:① 实现按名存取(最基本功能)② 提高检索速度 ③ 文件共享 ④ 允许文件重名。
  • 易混:四条各自催生一节——②→4.2.4 目录实现,③→4.2.5 文件共享,④→4.2.3 目录结构。
  • 范围:“按名存取”是最基本功能,不是”提高检索速度”。

4.2.2 目录的操作

五种目录操作

  • 是:搜索、创建文件、删除文件、显示目录、修改目录。
  • 不是:“删除”作为目录操作只是抹掉目录项,与”回收数据块”是两件事。
  • 易混:搜索是最频繁的目录操作,是 4.2.4 要优化的对象。
  • 范围:更名只改目录项的名字字段,文件本体一个字节不动,因此与文件大小无关。

4.2.3 目录结构

单级目录

  • 是:全系统一张目录表,每个文件占一项。
  • 不是:不允许文件重名——这是它的致命伤。
  • 范围:只能用于单用户环境。

两级目录(MFD / UFD)

  • 是:主文件目录 MFD 记录用户名及其 UFD 位置;用户文件目录 UFD 由该用户文件的 FCB 组成。
  • 不是:它没有解决共享问题,也不能对文件再分类。
  • 易混:它解决的是”允许文件重名”这一条要求。
  • 范围:计算题中只给一个目录项总数时,按当前要查的那个目录文件算;只有分别给出 MFD/UFD 规模时才两级相加。

树形目录(多级目录)

  • 是:允许目录中再包含目录,整个命名空间成为一棵树。
  • 不是:不是 B+ 树——树形来自”目录可嵌套”这一语义,与查找效率无关。
  • 易混:↔ B+ 树 / HTree。判据:树形目录是命名空间的形状,B+ 树是单个目录内部的索引结构。
  • 范围:“不便于共享”的根本原因是树要求每个节点只有一个父节点,而共享必然需要两个父节点。

当前目录 / 绝对路径 / 相对路径

  • 是:绝对路径从根目录出发,相对路径从当前目录出发。
  • 不是:两者最终都要逐级检索,差别只在于从哪里开始。
  • 范围:当前目录存在的唯一理由是减少检索层级,从而减少磁盘访问次数。

无环图目录

  • 是:树形目录 + 若干指向同一节点的有向边,整体为有向无环图;靠共享计数器管理删除。
  • 不是:不是”允许任意成环”——必须无环。
  • 范围:删除时计数减一,减到 0 才真正删除文件本体;否则会造成其他用户的指针悬空。

通用图目录

  • 是:允许目录之间形成环,共享能力最强。
  • 不是:408 不要求掌握其实现细节。
  • 范围:两个风险——遍历可能死循环;环上对象的引用计数永不为 0,简单引用计数失效,必须引入垃圾回收。

4.2.4 目录实现

线性列表

  • 是:用存放文件名与指针的线性表表示目录;创建文件前必须先扫描全表查重名。
  • 不是:删除不一定要移动——三种做法:标记为不再使用 / 把最后一项复制过来 / 链成空闲链表。
  • 范围:查找需线性扫描,平均比对一半;改用有序表可折半,但插入删除要维护有序性。

哈希表(目录实现)

  • 是:以文件名为关键字散列到目录项位置,查找迅速。
  • 不是:不能无限扩展。
  • 范围:两个缺点——必须处理冲突;表长固定且哈希函数依赖表长,扩容需重建整表并重新散列。

路径查找

  • 是:从根(或当前)目录开始,每一级都要”读该目录的 inode → 读其数据块 → 比对文件名 → 取下一级 inode 号”。
  • 不是:不是一次性拿到目标——路径每深一级多一轮磁盘访问。
  • 易混:检索目录的开销(看目录组织)与取数据块的开销(看文件物理结构)是两笔独立的账。

目录项(rec_len)

  • 是:Linux 目录项含 inode、rec_len、name_len、file_type、name。
  • 易混:文件名变长,故目录项是变长记录,必须靠 rec_len 定界——即 4.1.4 中”变长记录靠长度字段切分”的实例。
  • 范围:工具显示出来的目录列表是渲染结果(/、@、--> 都是工具加的),不是磁盘上的格式。

目录项缓存

  • 是:把最近使用的目录项与 inode 缓存在内存(dentry cache / inode cache),命中时整级查找零磁盘 I/O。
  • 易混:与 TLB、Cache 同理,都建立在局部性原理之上。

4.2.5 文件共享

文件共享

  • 是:多个用户共同使用同一个文件,系统中只保留该文件的一份副本。
  • 不是:各存一份不叫共享,叫复制——一方修改后另一方看到旧数据。

硬链接(基于索引节点的共享)

  • 是:多个目录项填写同一个 inode 号;inode 中的链接计数 count 记录有几个目录项指向自己。
  • 不是:不区分”原件”和”链接”——两个目录项完全平等,系统里没有”原文件”这个概念。
  • 易混:↔ 符号链接。判据:硬链接靠 inode 号,符号链接靠路径名——所有能力差别都由此推出。
  • 范围:不能跨文件系统(inode 号仅本文件系统内唯一);一般不允许指向目录(会成环);count 为 0 才真正删除;文件主删除自己的目录项后仍需为存储付费,直到 count 归零。

符号链接(软链接)

  • 是:新建一个类型为 LINK 的独立文件,内容是被共享文件的路径名;访问时取出路径重新解析。
  • 不是:不是”目录项的另一种写法”——它有自己的 inode 和数据块,是一个货真价实的文件。
  • 范围:可跨文件系统、可指向目录;代价是目标删除后悬空,且每次访问要多读一个文件并重新解析整条路径。

链接计数 vs 打开计数

  • 是:链接计数在 inode 中,记录磁盘上有几个目录项指向它,是持久状态;打开计数在系统打开文件表中,记录有几个进程打开了它,是运行期状态。
  • 范围:类 UNIX 中数据块被真正回收的条件是两者都为 0——这解释了”删除正在使用的文件,空间不立刻释放”。

4.3.1 文件系统结构

四层结构

  • 是:自底向上为 I/O 控制层 → 基本文件系统(物理 I/O 层)→ 文件组织模块 → 逻辑文件系统。
  • 不是:“基本文件系统”不是核心层——它是唯一完全不理解”文件”概念的一层,只认物理块号。
  • 易混:判据——逻辑文件系统管”名字与属性”,文件组织模块管”地址与空间”。

逻辑文件系统

  • 是:管理元数据(文件系统的所有结构数据,不含文件内容):目录管理、FCB/inode 管理、文件保护、基本操作的逻辑处理、打开文件表管理。
  • 不是:不负责”第 个逻辑块在哪个物理块”——那是文件组织模块的事。
  • 范围:这是本节最常考的一条分界。

文件组织模块

  • 是:知道文件及其逻辑块与物理块,负责逻辑块号 → 物理块号的翻译;还管理空闲空间。
  • 不是:空闲空间管理不归逻辑文件系统——它本质是在回答”下一个可用物理块是哪个”,属地址与空间范畴。
  • 范围:“空闲空间管理归文件组织模块”是高频易错点。

元数据

  • 是:文件系统中除文件实际内容之外的所有结构数据(目录、FCB、权限、时间、块地址等)。
  • 易混:↔ 文件内容。判据:能被逻辑文件系统管的都是元数据。

4.3.2 文件系统布局

主引导记录(MBR)

  • 是:磁盘的第 0 号扇区,用来引导计算机;末尾包含分区表,其中一个分区被标记为活动分区。
  • 不是:MBR ≠ 引导块。MBR 整盘只有一个,管”有哪些分区”。
  • 易混:启动链条是 BIOS → MBR → 活动分区的引导块 → 操作系统。

引导块

  • 是:每个分区的第一个块,其中是一段程序,负责装载本分区的操作系统。
  • 不是:不等于超级块——引导块里是代码,超级块里是数据。
  • 范围:每个分区都从引导块开始,即使它并不含可启动的操作系统(为统一起见)。

超级块

  • 是:记录文件系统的所有关键参数:类型、块大小、总块数与空闲块数、inode 总数与空闲数、根目录位置、空闲空间管理结构的位置。
  • 不是:不描述任何单个文件——单个文件的属性和地址全在 inode 里。
  • 易混:↔ VFS 超级块对象。判据:前者是落在盘上的字节,后者是内核中的内存对象。
  • 范围:启动或文件系统首次使用时被读入内存;损坏会导致整个文件系统无法挂载,故实际系统常存多个副本。

磁盘布局顺序

  • 是:引导块 → 超级块 → 空闲空间管理区 → inode 区 → 根目录 → 数据区。
  • 易混:顺序由启动依赖链决定,不必死记——每一步只依赖前一步已获得的信息。
  • 范围:只有根目录被单独定位(它是路径解析的起点),其余目录的数据块都在数据区。

内存中的结构

  • 是:安装表、目录结构缓存、系统打开文件表、进程打开文件表,以及读写用的缓冲区。
  • 易混:它们都是为避免反复读盘而存在的。

4.3.3 文件存储空间管理

文件卷 / 目录区 / 文件区

  • 是:文件卷(逻辑卷)可以是整块磁盘或一个分区;目录区存 FCB、inode 及空间管理信息,文件区存文件数据。
  • 范围:对文件区的管理以”提高存储空间利用率”为主要目标;对换区则以”提高换入换出速度”为目标。前者离散分配求省,后者连续分配求快。

空闲表法

  • 是:为所有空闲区建表,每项记第一个空闲盘块号 + 空闲盘块数。
  • 易混:与动态分区分配同套算法(首次适应等),回收同样要合并相邻空闲区。
  • 范围:适用于连续分配方式。

空闲链表法(空闲盘块链 / 空闲盘区链)

  • 是:把空闲盘区拉成链表。空闲盘块链以盘块为单位;空闲盘区链以连续盘区为单位,每个盘区还要记本区盘块数。
  • 范围:盘块链分配/回收单块最简单,但分配多块要重复很多次;盘区链分配连续空间效率高,但分配回收较复杂。

位示图

  • 是:一位对应一个盘块(0 空闲、1 已分配,也有系统反定义,以题目为准)。
  • 不是:不适合超大磁盘——位图本身会很大。
  • 易混:最大优点是易于找到连续的空闲块(连续的 0 一眼可见),这是链表法做不到的。
  • 范围:换算前必须先确认三个编号起点:块号、行号、列号各自从 0 还是从 1。 通用做法:块号 → 序数 (从 1 编号则 块号,从 0 编号则 块号 )→ 字号 、位号 。

成组链接法

  • 是:UNIX 采用。空闲块每 100 个一组;超级块中的空闲盘块号栈存放当前第一组的块号与个数 ;其余各组的块号记录在上一组的某个成员块中。
  • 不是:不需要把全部空闲块信息装入内存——这是它区别于前三种方法的关键。
  • 易混:两个临界动作——分配至 时,先把该块内容读入栈,再分配这个块本身;回收至栈满时,把栈中 100 个块号写入新回收块,令 。
  • 范围:适用于大型文件系统;精妙之处是把”下一组的清单”藏在空闲块自己身上,不占额外空间。

可管理空闲块的结构

  • 是:位图、空闲磁盘块链、FAT 都可以(真题 2019)。
  • 不是:索引节点不行——inode 是文件级结构,只知道”我这个文件用了哪些块”。
  • 易混:判据——能回答”整个磁盘哪些块空着”的才算。

文件系统一致性 / fsck / 日志文件系统

  • 是:不一致源于”分配一个块要同时改位示图和 inode”,两次写盘之间断电即出问题。fsck 重启后全盘扫描重建引用统计并修正;日志文件系统先把事务意图写入日志区,崩溃后只查日志。
  • 不是:日志记录的不只是数据,主要是元数据的修改意图。
  • 范围:408 中属疑难点,掌握”为什么会不一致”与”两类手段的区别”即可。

4.3.4 虚拟文件系统

虚拟文件系统(VFS)

  • 是:内核中的一个软件层,三个要求——① 向上提供统一标准的系统调用接口;② 要求下层文件系统实现规定的函数功能;③ 每打开一个文件就在主存中新建一个 vnode。
  • 不是:VFS 不是一种文件系统——它不定义磁盘格式,磁盘上没有属于它的任何字节。
  • 易混:判据——能被格式化到磁盘上的才是具体文件系统。
  • 范围:它是横向分派器,不是四层结构的第五层;位置在系统调用接口与各具体文件系统之间。

vnode

  • 是:VFS 在主存中为每个被打开文件建立的统一表示,由 inode 的信息复制而来,并增加了指向具体文件系统函数的功能指针。
  • 不是:inode 中没有功能指针(磁盘上存函数地址无意义)。
  • 易混:↔ inode。判据:inode 在外存、格式各异;vnode 在主存、格式统一。

VFS 四类对象

  • 是:超级块对象(一个已挂载的文件系统)、索引节点对象/vnode(一个文件本体)、目录项对象(路径中的一个名字)、文件对象(一次打开)。
  • 易混:后两者的分工与两级打开文件表完全对应——目录项属于”这个名字”,文件对象属于”这一次打开”。

4.3.5 文件系统挂载

安装点(挂载点)

  • 是:文件系统被安装的位置,必须是当前目录树中一个已存在的目录;挂载后经由它访问到的是被挂载文件系统的根目录。
  • 不是:不能挂到普通文件上——挂载后要用它继续解析路径。

挂载的三件事

  • 是:① 在 VFS 中注册,写入内存的安装表(类型、容量等);② 新文件系统向 VFS 提供函数地址列表;③ 加到安装点。
  • 易混:第 ② 步正是 VFS 第二个要求的落实——不提供这组函数就无法接入。

挂载点遮蔽

  • 是:挂载后,安装点目录原有的内容通过该路径不再可见。
  • 不是:数据并未被删除,卸载后原样出现。
  • 范围:挂载改变的是”这条路径通向哪里”,不改变磁盘上的任何数据。

挂载 vs 格式化

  • 是:格式化在磁盘上建立文件系统结构(分区域、初始化空闲管理),是破坏性的、写磁盘的;挂载只在内存中建立映射关系,可反复挂载卸载。
  • 易混:一句话——格式化造出文件系统,挂载让它可被访问。

高频”范围限定”清单

下表集中列出最容易被抽掉限定条件的结论。看到题干把限定词去掉,就是陷阱。

结论成立的范围
有结构文件判据是操作系统知不知道记录边界,不是内容有没有格式
引入索引节点目的是减少检索目录的读盘次数,不是省磁盘空间
索引节点中有文件名不成立——文件名在目录项里
inode 总数只管文件个数上限,与单个文件长度无关
open 读入文件只读属性,不读内容
读写指针必须在进程打开文件表;打开计数必须在系统打开文件表
顺序文件 = 连续分配不成立——一个是逻辑结构,一个是物理结构
物理组织形式的决定因素存储介质特性(磁带只能顺序)
索引文件用于可变长记录——变长记录算不出位置
记录成组改一条记录必须读整块、写整块
显式链接支持随机访问仅在 FAT 已读入内存时;且仍是追链 ,非直取
FAT 能管空闲块仅 FAT;索引分配不行
”增加一块 I/O 最多”仅”中间插入”时是连续分配;末尾追加结论相反
混合索引访问次数 1/2/3/4仅在 inode 已在内存时
口令保护不安全因为口令对系统不保密,非因口令太短
加密保护密码不存储在系统中,这是与口令保护的唯一判据
删除文件看父目录的 w,与文件自身权限无关

| —— 以下为 4.2 —— | | | 按名存取 | 是目录管理最基本的功能,不是”提高检索速度” | | 两级目录解决了什么 | 只解决”允许文件重名”;共享与分类仍未解决 | | 树形目录不便共享 | 因为树要求每个节点只有一个父节点 | | 树形目录 = B+ 树 | 不成立——命名空间形状 vs 单目录内部索引 | | 无环图目录 | 必须无环;删除靠共享计数器,为 0 才真删 | | 通用图目录的风险 | 遍历死循环 + 环上引用计数永不为 0 | | 哈希表实现目录 | 缺点是冲突与表长固定难扩容 | | 目录检索开销 | 与文件物理结构无关,是两笔独立的账 | | 工具显示的目录 | 是渲染结果,/、@、--> 都是工具加的 | | 硬链接不能跨文件系统 | 因为 inode 号只在本文件系统内唯一 | | 硬链接不能指向目录 | 因为会成环 | | 硬链接有”原件” | 不成立——两个目录项完全平等 | | 文件主删名字后 | 仍需为存储付费,直到 count 归零 | | 数据块何时回收 | 链接计数与打开计数都为 0 |

| —— 以下为 4.3 —— | | | 基本文件系统 | 唯一不理解”文件”概念的一层,只认物理块号 | | 逻辑块号→物理块号 | 归文件组织模块,不归逻辑文件系统 | | 空闲空间管理 | 归文件组织模块(高频易错) | | 引导块 vs 超级块 | 引导块里是代码,超级块里是数据 | | 每个分区都有引导块 | 成立,即使它不含可启动的操作系统 | | 超级块 | 不描述任何单个文件;损坏则整个文件系统不可挂载 | | 根目录区 | 只有根目录被单独定位,其余目录数据块都在数据区 | | 文件区管理目标 | 提高存储空间利用率;对换区才是”提高换入换出速度” | | 空闲表法 | 适用于连续分配 | | 位示图的优点 | 易于找到连续的空闲块 | | 位示图换算 | 先确认块号、行号、列号三个编号起点 | | 成组链接法 | 适用于大型文件系统;唯一不需全部装入内存的方法 | | 成组链接 时 | 先把该块内容读入栈,再分配这个块本身 | | inode 能管空闲块 | 不成立——它是文件级结构(2019 真题) | | VFS 是一种文件系统 | 不成立——磁盘上没有属于它的任何字节 | | vnode 与 inode | vnode 在主存有功能指针;inode 在外存没有 | | 磁盘超级块 = VFS 超级块 | 不成立——落盘字节 vs 内存对象 | | 挂载点原有内容 | 被遮蔽但未删除,卸载后原样出现 | | 挂载改磁盘 | 不成立——挂载只改内存;改磁盘的是格式化 |

链接