第 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 超级块 | 引导块里是代码,超级块里是数据 |
| 每个分区都有引导块 | 成立,即使它不含可启动的操作系统 |
| 超级块 | 不描述任何单个文件;损坏则整个文件系统不可挂载 |
| 根目录区 | 只有根目录被单独定位,其余目录数据块都在数据区 |
| 文件区管理目标 | 提高存储空间利用率;对换区才是”提高换入换出速度” |
| 空闲表法 | 适用于连续分配 |
| 位示图的优点 | 易于找到连续的空闲块 |
| 位示图换算 | 先确认块号、行号、列号三个编号起点 |
| 成组链接法 | 适用于大型文件系统;唯一不需全部装入内存的方法 |
| 成组链接
链接
- 🏠 返回总览:操作系统第 4 章:文件管理总览
- 📜 原始提问档案:第 4 章 原始提问档案(本地资料)
- 📖 第 3 章名词库:第 3 章名词库