2.5 文件管理
操作系统文件管理知识点整理
一、什么是文件
文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合。
信息项是构成文件内容的基本单位,可以小到一个字符,也可以大到一个记录。记录可以是等长的(如固定格式表格),也可以是不等长的(如变长编码日志)。
每个文件由两部分组成:
- 文件体:文件的真实内容
- 文件说明:操作系统用来管理文件的元数据
二、文件系统
文件系统是操作系统中负责统一管理文件的一组软件和相关数据的集合。
核心功能包括:
- 按名存取:用户只需输入文件名即可访问文件
- 统一用户接口:提供一致的操作命令(open/read/write/close)
- 并发访问控制:多人同时访问时保证数据一致性
- 安全性控制:通过权限管理保护文件
- 优化性能:通过缓存等手段加速访问
- 差错恢复:系统崩溃后能恢复数据
三、文件的分类
按性质和用途分类:
- 系统文件:操作系统自身的文件(如内核文件)
- 库文件:系统提供的公用程序(如C语言标准库)
- 用户文件:用户自己创建的文件
按保存期限分类:
- 临时文件:用完即删(如编译过程中的中间文件)
- 档案文件:较少访问但需要保留(如去年的财务报表)
- 永久文件:长期保存的关键文件(如系统配置文件)
按保护方式分类:
- 只读文件:只能看不能改
- 读/写文件:可以查看和修改
- 可执行文件:可以被运行的程序
- 不保护文件:任何人都可以操作
UNIX系统的特殊分类:
- 普通文件:存放数据或程序
- 目录文件:存放文件名和inode的映射关系
- 设备文件:把硬件设备抽象为文件
在Linux中,打印机是/dev/lp0,硬盘是/dev/sda,终端也是文件/dev/tty,体现了"一切皆文件"的设计哲学。
四、文件的逻辑结构
从用户视角看,文件有两种逻辑结构:
有结构的记录式文件:由一个或多个记录组成,每条记录有明确的边界。例如一张学生成绩表,每行是一条记录(学号、姓名、成绩),可以按学号查找某条具体记录。
无结构的流式文件:由一串连续的字符流或字节流组成,没有内部结构划分。例如一篇散文、一张照片、一段音乐,操作系统只看到一长串字节。
五、文件的物理结构
文件在磁盘上的存放方式主要有三种:
连续结构(顺序结构):把文件的所有数据块依次存放在连续的磁盘块上。优点是查找快、支持随机访问,缺点是容易产生碎片。
链接结构(串联结构):文件的数据块可以分散在磁盘任意位置,每个块里有一个指针指向下一个块。优点是不会产生碎片,缺点是只能顺序访问。
索引结构:为每个文件建立一张索引表,记录逻辑块号到物理块号的映射。优点是支持随机访问,缺点是需要额外的空间存储索引表。
六、UNIX的混合索引结构
UNIX系统采用混合索引结构,每个inode包含13个地址项:
0到9号(共10个):直接索引,每个地址项直接指向一个数据块。
10号(1个):一级间接索引,地址项指向一个索引块,索引块里存放数据块的地址。
11号(1个):二级间接索引,地址项指向一个二级索引块,其中每个条目又指向一个一级索引块。
12号(1个):三级间接索引,地址项指向一个三级索引块。
容量计算(假设每个物理块大小为4KB,每个地址占4字节):
直接索引:10 × 4KB = 40KB
一级间接索引:(4KB ÷ 4B) × 4KB = 1024 × 4KB = 4MB
二级间接索引:1024 × 1024 × 4KB = 4GB
三级间接索引:1024 × 1024 × 1024 × 4KB = 4TB
单个文件最大长度:40KB + 4MB + 4GB + 4TB ≈ 4TB
设计精妙之处:小文件用直接索引,一次磁盘I/O就能读到数据;大文件用间接索引,虽然多几次寻址但能存储海量数据。
七、文件控制块(FCB)
每个文件都有一个FCB,包含三类信息:
基本信息类:文件名、物理地址(存放在磁盘的块号范围)、文件长度、文件块数。
存取控制信息类:UNIX的三类用户权限模型如下:
| 用户类别 | 读 | 写 | 执行 |
|---|---|---|---|
| 文件主(owner) | 是 | 是 | 是 |
| 同组用户(group) | 是 | 否 | 否 |
| 其他用户(others) | 是 | 否 | 否 |
使用信息类:创建日期、最后修改日期、最后访问日期、当前打开该文件的进程数、等待队列中的进程数。
八、文件目录与路径
FCB的有序集合就构成了文件目录。
路径的两种表示方式:
绝对路径:从根目录 / 开始的完整路径,例如 /home/alice/documents/report.docx
相对路径:从当前工作目录开始的路径,例如假设在 /home/alice 下,则为 documents/report.docx
注意:绝对路径和相对路径本身不包含最后的文件名,只是路径序列。全文件名 = 路径 + 文件名。
九、文件存储空间管理
空闲区表法:维护一张表,记录所有连续空闲区域的起始位置和大小。适用于需要连续空间的场景。
位示图法(Bitmap):用一个二进制位表示一个物理块的状态,0表示空闲,1表示已占用。优点是能快速找到空闲块,也能快速找到连续的空闲块。计算公式:若第i行第j位为0,则对应物理块号 = i × 字长 + j。
空闲块链法:把所有空闲块用指针串成一条链表。优点是不需要额外的管理表、节省空间,缺点是只能顺序遍历、找特定空闲块效率低。
成组链接法:将空闲块分组(如每100块一组),每组的第一个空闲块记录下一组的信息。这是UNIX/Linux系统实际采用的方法,兼顾了空间效率和访问效率。
十、文件的存取方法
顺序存取:按文件信息的逻辑顺序依次读/写。例如像听磁带,必须从头开始,一首一首按顺序听。
随机存取:可以按任意次序读/写文件中的任意位置。例如像听CD或流媒体,想听哪首直接点哪首,不需要按顺序来。索引结构的文件天然支持随机存取。
十一、总结
| 概念 | 核心要点 |
|---|---|
| 文件 | 有符号名的信息集合,等于文件体加文件说明 |
| 文件系统 | 管理文件的软件机构,核心功能是按名存取 |
| 逻辑结构 | 记录式(有结构)与流式(无结构) |
| 物理结构 | 连续、链接、索引三种基本方式 |
| 混合索引 | UNIX经典设计:10直接加1一级加1二级加1三级 |
| FCB | 文件的身份证:基本信息加权限信息加使用信息 |
| 目录 | FCB的有序集合,支持树形多级结构 |
| 空间管理 | 空闲表、位示图、空闲块链、成组链接法 |

浙公网安备 33010602011771号