第 5 章 文件系统¶
依据:本地《操作系统概论(2017年版)》第五章、书前考试大纲第五章、附录部分习题参考答案。条目编号按“考核内容与考核要求”。标为“自编”的例题用于练习,不作为历年真题。KB、MB、GB、TB 在计算题中按 1024 进位。
复习导航¶
| 大纲条目 | 层次 | 位置与目标 |
|---|---|---|
| 1 文件概述 | 识记 | 第 1—2 节:命名、类型、结构、存取、属性、操作 |
| 2.1—2.2 目录、路径 | 识记 | 第 3 节:单层、多级、树形;绝对与相对路径 |
| 2.3 目录操作 | 领会 | 第 3 节:创建、删除、查找、链接等 |
| 3.1 连续和链接分配 | 简单应用 | 第 4 节:由逻辑块定位物理块 |
| 3.2 目录、FAT、i 结点 | 综合应用 | 第 5—7 节:按名访问及最大文件长度 |
| 3.3 空间管理 | 简单应用 | 第 8 节:簇大小、空闲链与位图 |
文件系统把用户使用的文件名与磁盘上的数据位置联系起来。访问文件时,系统先根据路径查找目录项,再取得文件属性和地址信息,最后定位数据块。
1 文件、文件系统与逻辑结构(1)¶
文件是保存在存储介质上的、有名称的信息集合。文件系统是文件、管理文件的软件和相关数据结构的总体,负责按名访问、存储空间管理、保护和共享等。
文件名用于识别文件。命名规则涉及允许字符、长度、大小写和扩展名约定,具体内容随系统变化。教材用 CP/M、MS-DOS 和 UNIX 比较不同实现。各自的命名规则和目录布局要结合相应模型理解。
| 逻辑结构 | 含义 | 示例 |
|---|---|---|
| 无结构字节序列 | 系统把文件看成字节流,解释由程序完成 | 普通文本、二进制数据 |
| 固定长度记录序列 | 记录长度固定,可按编号定位 | 固定字段的记录文件 |
| 树形结构 | 按关键字组织记录 | 需要按键检索的记录集合 |
“无结构”不等于字节没有意义,只是操作系统不规定应用内部的数据组织。逻辑结构描述用户怎样理解内容,物理分配描述内容怎样放在磁盘上,两者不是同一个分类维度。
教材讨论 ASCII 文件、二进制文件以及按用途区分的可执行文件、普通数据文件等。可执行文件通常包含装入所需的格式信息;二进制文件不能保证直接按文本解释可读。
2 存取方式、属性和操作(1)¶
顺序存取从当前位置依次处理数据;随机/直接存取可以指定位置读取或写入。定长记录文件中,若记录编号从 0 起、记录长为 r,则第 k 条记录的字节偏移为 k×r。随机存取能力不能仅凭文件扩展名判断。
常见属性包括名称或标识、类型、大小、所有者、保护权限、创建/访问/修改时间以及存放位置等。不同实现可能把文件名放在目录项,把其余属性放在 i 结点。
| 操作 | 主要作用 | 容易混淆的地方 |
|---|---|---|
| 创建 create | 建立新文件及其管理信息 | 不一定立即分配大量数据块 |
| 删除 delete | 撤销相应文件,按规则回收空间 | 与清空内容、关闭不同 |
| 打开 open | 查找文件并建立后续快速访问所需的内存信息 | 不等于把整个文件内容读进内存 |
| 关闭 close | 结束该次打开,释放有关内存状态,必要时更新元数据 | 不等于删除文件 |
| 读 read | 从文件向用户缓冲区传送数据 | 应考虑当前位置和实际读出长度 |
| 写 write/追加 append | 写入数据;追加从文件末尾写入 | 写入可能导致新分配数据块 |
| 定位 seek | 改变下一次访问的位置 | 本身通常不传输文件内容 |
| 获取/设置属性 | 查询或修改元数据 | 与修改数据正文不同 |
| 重命名 rename | 修改名称或命名关系 | 不必搬动文件所有数据块 |
打开文件时,系统将后续定位和访问控制所需的属性、地址等信息准备到内存中。此后的读写可以利用这些状态,无须每次都从根目录重新查找文件;文件内容则按读写请求传送。
3 目录与路径(2.1—2.3)¶
目录是一种特殊的组织结构,保存文件名与文件管理信息之间的对应关系。目录项的字段因文件系统而异。
| 目录结构 | 特点 | 局限/用途 |
|---|---|---|
| 单层目录 | 所有文件集中在一层 | 文件多时查找和命名冲突突出 |
| 两级/多级目录 | 按用户或类别逐级组织 | 逐层检索,便于分类 |
| 树形目录 | 根目录之下有子目录和文件 | 用路径唯一描述所在位置,支持不同目录同名 |
绝对路径从根开始,相对路径从当前工作目录开始。在 UNIX 风格路径中,/ 是根,. 是当前目录,.. 是父目录。
自编例:当前目录为 /home/student/os,要访问 /home/student/material/book.txt,相对路径是 ../material/book.txt。换一个当前目录,同一相对路径可能指向别的文件;绝对路径不依赖当前工作目录。
目录操作包括建立、删除、打开、关闭、读目录、重命名,以及教材列出的链接与解除链接。目录重命名改变的是命名关系;删除非空目录需要遵守系统规则,不能默认与删除普通文件完全相同。
硬链接可以理解为增加一个指向同一文件 i 结点的目录项,解除链接减少一个名字与该文件的联系。存在多个名字时,删除其中一个目录项并不销毁文件数据;名字与文件实体并不是一回事。
4 文件的物理分配(3.1)¶
目录确定文件的身份后,还需要借助地址信息找到内容。物理分配方式规定文件占用哪些簇,以及如何从文件内的逻辑块号定位这些簇。
4.1 连续分配¶
一个文件占用连续的磁盘簇,目录记录起始簇和长度。若起始簇为 s,逻辑块号为 j,则物理簇号为 s+j。优点是计算直接、顺序和随机读取效率高;缺点是增长不便,容易形成外部碎片,创建时常需估计长度。
自编例:簇大小 1 KB,文件起始簇 40、长度 2500 B。占 ceil(2500/1024)=3 簇,即 40、41、42。字节偏移 2200 落在逻辑块 2,簇内偏移 152,故读取簇 42 中偏移 152 的位置。最后一簇浪费 3072−2500=572 B。
4.2 盘块内链接¶
文件各簇可以不连续,每簇保存下一簇号,目录记录首簇。按链顺序即可读全文件,增长方便,无需寻找一整片连续区域。但随机读第 j 个块时,通常先沿链读取前面的块,指针占空间,链损坏也会影响后续访问。
若题目规定块长 B、块内指针占 a 字节,可用数据容量就是 B−a。文件所需块数为 ceil(文件长度/(B−a))。这一计算以指针保存在数据块内部为前提。FAT 将链接保存在独立表中,其数据块不需要扣除这部分指针空间。
4.3 FAT:集中保存簇间链接¶
FAT 为每个簇建立表项,表项存下一簇号或结束、空闲等状态。目录给首簇号,通过 FAT 追踪整条链。表可载入内存,沿链不必逐个读取数据块里的指针,但 FAT 本身需要空间。
| 比较 | 连续分配 | 盘块内链接 | FAT |
|---|---|---|---|
| 数据块位置 | 连续 | 可离散 | 可离散 |
| 下一个块的位置 | 起址加偏移 | 当前块内指针 | FAT 表项 |
| 随机定位 | 直接计算 | 磁盘沿链 | 沿 FAT 链查,驻内存时减少磁盘读 |
| 扩展 | 受相邻空闲区限制 | 方便 | 方便 |
| 主要代价 | 外部碎片、增长困难 | 指针、随机读慢 | 表的存储与维护 |
5 FAT 与按名访问(3.2,综合应用)¶
教材示例文件使用的簇为 4→7→2→10→12→结束。其 FAT 关系为 FAT[4]=7、FAT[7]=2、FAT[2]=10、FAT[10]=12、FAT[12]=EOF。
按文件名查目录 → 得到首簇 4
逻辑块 0 在簇 4
逻辑块 1 在 FAT[4] 指定的簇 7
逻辑块 2 在 FAT[7] 指定的簇 2
……直到结束标志
FAT 的下标表示“当前簇”,表项值表示“下一簇”,两者不能互换。目录首簇号与文件长度共同帮助定位和判断有效字节;最后一个簇未必填满。
自编例:簇长 1 KB,上述文件偏移 3500 B 对应逻辑块 3500//1024=3,块内偏移 428。从首簇向后走 3 条链接,得到簇 10。首簇对应逻辑块 0,所以第 3 号逻辑块只需 3 次后继链接。
若数据区有 N 个簇,每个 FAT 表项占 a 字节,则一份 FAT 大约需要 N×a 字节。教材 FAT12 的每项是 12 位,理想紧凑表大小应按 ceil(12N/8) 字节计算。不能把它直接当成每项 12 字节。
FAT 的可寻址容量受表项位数及保留簇号限制,文件长度字段也可能限制最大文件大小。理想模型可以按位数算出寻址上界;实际最大长度还要受长度字段等约束,单看首簇号字段的宽度不足以确定全部容量。
6 CP/M、MS-DOS、UNIX 目录的比较(3.2)¶
不同文件系统将属性和地址信息放在不同位置。CP/M 主要由目录项直接记录簇号,MS-DOS 通过首簇号连接 FAT,UNIX 则先由目录项定位 i 结点。
| 实现 | 目录项保存什么 | 怎样找到文件数据 |
|---|---|---|
| CP/M | 名称、属性信息和一组簇号等 | 直接由目录项中的簇号访问;大文件可占多个目录项 |
| MS-DOS | 文件名、属性、首簇号、长度等 | 首簇号作为 FAT 索引,再沿链查 |
| UNIX | 文件名和 i 结点号 | i 结点号定位 i 结点,由其中地址项定位数据 |
教材 CP/M 目录项有 16 个簇号域,单个目录项可描述的范围与簇大小有关。大文件通过范围字段对应多个目录项。MS-DOS 示例目录项总长 32 B,采用传统短文件名布局。这里讨论的是教材模型。
UNIX 路径查找以教材 /usr/ast/mbox 为例:
- 取得根目录 i 结点,找到根目录数据块。
- 在根目录中找
usr,获得其 i 结点号,再定位/usr的目录数据。 - 在
/usr中找ast,取得/usr/ast的 i 结点并找到目录数据。 - 在该目录中找
mbox,取得目标文件 i 结点。 - 从目标 i 结点中的地址项找到数据块,建立打开文件的内存状态。
相对路径采用相同的逐层方法,但从当前目录出发。若题目要计算磁盘 I/O 次数,必须说明根目录、目录块、i 结点和间接块是否已缓存。路径层数不能直接当成固定的 I/O 次数。
7 i 结点与最大文件长度(3.2,综合应用)¶
UNIX 目录项只需记录名称和 i 结点号,文件的数据位置由 i 结点进一步描述。由于 i 结点大小有限,系统需要在直接寻址效率和大文件寻址能力之间作出安排。
i 结点保存文件属性和地址信息。直接地址项直接指向数据簇;一次间接地址指向“保存数据簇号的索引簇”;二次间接地址先指向存放一次间接簇号的索引簇;三次间接再加一层。间接层数扩展寻址范围,同时增加定位开销。
设簇大小为 B 字节,每个地址项 a 字节,索引簇可存 n=B/a 个地址(题设须保证整除)。i 结点有 d 个直接地址,另有一、二、三次间接地址各一个,理论上可寻址的数据量为:
Lmax = (d + n + n² + n³) × B
这是地址结构的理论上界;若题目另给文件长度字段、文件系统限制,应再取约束中的较小值。索引簇虽然占用磁盘空间,但保存的是地址信息,因此不计入用户文件的数据容量。
7.1 教材综合题:4 KB 簇的 Ext2 地址模型¶
已知 15 个地址项,每项 4 B;12 个直接项,其余各为一级、二级、三级间接项,簇长 4096 B。
n = 4096 / 4 = 1024
直接:12 × 4 KB = 48 KB
一次:1024 × 4 KB = 4 MB
二次:1024² × 4 KB = 4 GB
三次:1024³ × 4 KB = 4 TB
合计:48 KB + 4 MB + 4 GB + 4 TB
这一结果与教材附录一致,表示给定地址结构能够覆盖的数据量。实际 Ext2 的单文件限制还可能受到其他字段与实现条件约束。
7.2 自编:判断逻辑块属于哪一层¶
沿用上例,数据逻辑块从 0 编号:
- 0—11:直接寻址。
- 12—1035:一次间接,索引为
j−12。 - 1036 起的 1024² 块:二次间接。令
r=j−1036,先取r//1024对应的一次间接块,再取r%1024对应的数据簇。
例如 j=1040,r=4,应取二次间接索引簇的第 0 项,再取下级索引簇的第 4 项。若相关管理信息都不在缓存,且 i 结点已在内存,读这个数据块共需 3 次磁盘块读取:两层索引簇加数据簇本身。
8 簇大小和空闲空间管理(3.3)¶
文件地址结构记录已分配的数据位置,空闲空间管理则记录后续还可以分配哪些簇。两类信息共同支持文件的建立、增长和删除。
分配的基本单位是簇,而应用文件长度可以按字节记录。设文件长 S,簇大小 B:
数据簇数 = ceil(S/B)
分配容量 = ceil(S/B) × B
末簇内部碎片 = 分配容量 − S
簇大可减少地址表项和块操作次数,但小文件浪费更多;簇小有利于减少内部碎片,却增加管理信息和访问开销。
空闲簇链接表保存空闲簇号,各表块之间用指针串联。教材的 1 KB 管理簇可容纳 256 个 32 位地址槽。若一个槽用作下一个管理块指针,最多剩 255 个槽记录空闲簇号,链接指针与空闲簇号共用这些地址槽。
位图用每簇一位记录占用状态,1/0 的意义由题目规定。位图不存文件名,也不直接表示每个文件的完整块链。
有 N 个簇:位图需 N 位 = ceil(N/8) 字节
块号 k,0 起编号:字节下标 k//8,字节内位下标 k%8
字节内从高位还是低位编号,必须按题意确认。自编例:块 19 对应第 2 号字节、字节内第 3 位(都从 0 计);8 GB 数据区、簇 4 KB,共 2^21 簇,位图需 2^18 B=256 KB。若每个 FAT 表项为 4 B,一份 FAT 则需 8 MB。
9 考核要求¶
本章条目中,文件的逻辑结构与目录、存取方式与操作属识记。FAT 按名访问与 i 结点地址结构属综合应用,需要能独立计算地址范围与最大文件长度。
本章重点为文件的操作、文件目录的实现方式、目录项的结构、索引结点的结构、文件的存储方式、实现文件按名访问的原理、文件存储空间的管理。难点为文件的存储方式、文件按名访问的实现、文件存储空间的管理。
10 教材本章习题¶
题目取自教材第五章“思考题与练习题”,答案依据教材附录“部分习题参考答案”第五章。
10.1 单项选择题¶
1. 关于文件系统,下列叙述正确的是【 】。
答案与解析
参考答案:D。
文件系统包含文件本身、管理文件的软件集合,以及相关的数据结构(如目录、i 结点、空闲表)。A、B、C 各只覆盖其中一部分。
2. 位图可用于管理【 】。
答案与解析
参考答案:B。
位图以每簇一位记录该簇是否已分配,用于磁盘空间(空闲块)管理。目录管理靠目录结构,访问与保护靠权限位等机制。
3. 从用户角度看,引入文件系统的主要目的是【 】。
答案与解析
参考答案:D。
用户只需给出文件名即可访问文件,无须知道它在磁盘上的物理位置。虚拟存储由存储管理完成,保存文档只是文件的用途之一。
10.2 填空题¶
1. 常用的文件存取方式有两种:顺序存取和___。
答案与解析
随机存取。
2. 在使用文件之前,必须先打开文件。打开文件的目的是将文件的和信息装入主存,以便于在对文件的后续访问中能快速存取文件信息。
答案与解析
属性;地址。
3. 目录是文件系统中实现___的重要数据结构。
答案与解析
按名访问。
10.3 简答题¶
1. 举例说明文件系统是如何实现文件的“按名存取”的?
答案与解析
系统沿路径逐级检索目录,取得目标文件的目录项。若文件采用 FAT,则由目录项中的首簇号沿 FAT 链追出全部数据簇;若采用 i 结点,则由目录项中的 i 结点号读出 i 结点里的直接与间接地址,再定位数据块。整个过程对用户只暴露文件名。
2. 文件系统如何管理空闲磁盘空间?
答案与解析
常用空闲簇链与位图两种方式。前者保存空闲簇号及其链接关系,后者以每簇一位表示占用状态。分配时删除相应的空闲记录或把状态位置为已占用,回收时执行相反操作。
3. 什么是 i 结点?在 i 结点中使用间接地址项有什么好处?
答案与解析
i 结点集中保存文件的属性和数据块地址。直接地址便于小文件快速访问;间接地址在 i 结点大小有限的前提下支持大文件,由一级、二级、三级间接项逐层扩展可索引的地址范围。
10.4 综合应用¶
教材原题:Ext2 文件系统的一个 i 结点包括 15 个地址项,每个地址项存 32 位地址(4 个字节),其中 12 个存直接地址,一个存一次间接地址,一个存二次间接地址,一个存三次间接地址。当簇大小为 4 KB 时,Ext2 能管理的文件的最大长度是多少?
答案:每个簇可存放的簇号个数为 4096 B ÷ 4 B = 1024 个。
| 地址类型 | 可寻址空间 |
|---|---|
| 12 个直接地址 | 12 × 4 KB = 48 KB |
| 一次间接 | 1024 × 4 KB = 4 MB |
| 二次间接 | 1024 × 1024 × 4 KB = 4 GB |
| 三次间接 | 1024³ × 4 KB = 4 TB |
最大长度 = 48 KB + 4 MB + 4 GB + 4 TB。注意教材所称“4 KB 的簇”,在 Ext2 中即 4 KB 的块。
11 闭卷复习与跨章联系(补充)¶
第 4 章的分页机制提供了 i 结点与簇都给不出的地址空间抽象。进程只需看到连续的虚拟地址,文件可以按名访问任意大小。一次文件读写的实际延迟,取决于第 6 章的缓冲与磁盘调度;共享文件的读写互斥,则由第 2 章的资源信号量负责。与计算机组成原理第 5 章对照:那边讨论虚拟地址到物理地址的硬件转换,这边讨论逻辑块号到物理簇的软件映射。同一次访存中,两者往往先后发生。