跳转至

第 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 为例:

  1. 取得根目录 i 结点,找到根目录数据块。
  2. 在根目录中找 usr,获得其 i 结点号,再定位 /usr 的目录数据。
  3. 在 /usr 中找 ast,取得 /usr/ast 的 i 结点并找到目录数据。
  4. 在该目录中找 mbox,取得目标文件 i 结点。
  5. 从目标 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. 关于文件系统,下列叙述正确的是【 】。

  • A. 文件的集合

  • B. 文件的目录

  • C. 实现文件管理的一组软件

  • D. 文件、管理文件的软件及数据结构的总体

答案与解析

参考答案:D。

文件系统包含文件本身、管理文件的软件集合,以及相关的数据结构(如目录、i 结点、空闲表)。A、B、C 各只覆盖其中一部分。

2. 位图可用于管理【 】。

  • A. 文件目录

  • B. 磁盘空间

  • C. 文件的访问

  • D. 文件的保护

答案与解析

参考答案:B。

位图以每簇一位记录该簇是否已分配,用于磁盘空间(空闲块)管理。目录管理靠目录结构,访问与保护靠权限位等机制。

3. 从用户角度看,引入文件系统的主要目的是【 】。

  • A. 实现虚拟存储

  • B. 保存系统文档

  • C. 保存用户文档

  • D. 实现对文件的按名存取

答案与解析

参考答案: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 章对照:那边讨论虚拟地址到物理地址的硬件转换,这边讨论逻辑块号到物理簇的软件映射。同一次访存中,两者往往先后发生。