文件管理-文件控制块和索引节点
1. 文件控制块(FCB):文件的“身份证”
FCB是操作系统用于管理文件的核心数据结构,记录文件的所有属性和控制信息,实现“按名存取”。
核心功能:
- 文件与FCB一一对应,FCB的有序集合构成文件目录(目录文件)。
- 创建新文件时,系统为其分配唯一FCB;删除文件时,释放FCB。
主要信息(FCB内容):
- 基本信息:文件名、物理位置(如磁盘块号)、逻辑结构(流式/记录式)、物理结构(连续/链接/索引)。
- 存取控制信息:文件主权限、用户组权限、其他用户权限(读
r
/写w
/执行x
)。 - 使用信息:创建时间、最后修改时间、最后访问时间、当前大小。
2. 索引节点(inode):FCB的优化版
问题:传统FCB包含所有文件信息(如64B),目录文件需存储大量FCB,导致目录检索效率低(频繁磁盘I/O)。
优化:UNIX系统将FCB拆分,仅保留文件名+索引节点号在目录项中,文件属性单独放入索引节点(inode)。
优势:
- 目录项大小减小(如16B=14B文件名+2B索引节点号),每个磁盘块可存储更多目录项(如1KB块存64项,原FCB仅存16项),减少目录检索的磁盘I/O次数(例:640个文件,原需20次I/O,优化后仅5次)。
3. 索引节点的分类
3.1、磁盘索引节点(磁盘inode)
存储在磁盘上,每个文件唯一对应一个,包含静态文件属性:
- 文件主标识符(UID)、文件类型(普通/目录/设备)、存取权限。
- 物理地址(13个地址项,直接/间接指向数据块,详见“文件物理结构”)。
- 文件长度、链接计数(指向该文件的文件名数量)、时间戳(创建/修改/访问时间)。
3.2、内存索引节点(内存inode)
文件打开时,从磁盘inode复制到内存,增加动态管理信息,提高访问效率:
- 索引节点号(唯一标识)、状态(是否上锁/修改)、访问计数(当前访问进程数)。
- 逻辑设备号(所属文件系统)、链接指针(空闲链表/散列队列指针)。
4. FCB与inode的对比
对比项 | 文件控制块(FCB) | 索引节点(inode) |
目录项内容 | 包含文件名+全部文件属性(如64B/项) | 仅含文件名+inode号(如16B/项) |
检索效率 | 低(目录项大,磁盘块存目录项少,I/O次数多) | 高(目录项小,磁盘块存目录项多,I/O次数少) |
存储位置 | 与文件名一起存放在目录文件中 | 磁盘inode单独存储,内存inode动态加载 |
典型系统 | 早期OS(如MS-DOS) | UNIX/Linux、现代OS |
核心考点 📌
- inode的作用:分离文件名与文件属性,减小目录项大小,降低目录检索的磁盘I/O开销。
- 磁盘inode vs 内存inode:磁盘inode存静态属性(长期),内存inode存动态信息(临时,文件打开时加载)。
- 链接计数:inode中的链接计数记录指向该文件的文件名数量(硬链接原理),计数为0时删除文件。
总结
FCB是文件管理的基础数据结构,但存在目录检索效率低的问题;inode通过“文件名与属性分离”优化这一缺陷,是现代文件系统(如UNIX/Linux)的核心设计。理解inode的结构与作用,是掌握文件目录管理和存储效率优化的关键。
✨ 一句话记忆:FCB全能但笨重,inode拆分提效率,目录仅存文件名+inode号,属性动态加载省I/O! ✨