当前位置: 首页 > news >正文

文件管理-文件控制块和索引节点

1. 文件控制块(FCB):文件的“身份证”

        FCB是操作系统用于管理文件的核心数据结构,记录文件的所有属性和控制信息,实现“按名存取”。

核心功能

  • 文件与FCB一一对应,FCB的有序集合构成文件目录(目录文件)。
  • 创建新文件时,系统为其分配唯一FCB;删除文件时,释放FCB。

主要信息(FCB内容)

  1. 基本信息:文件名、物理位置(如磁盘块号)、逻辑结构(流式/记录式)、物理结构(连续/链接/索引)。
  2. 存取控制信息:文件主权限、用户组权限、其他用户权限(读r/写w/执行x)。
  3. 使用信息:创建时间、最后修改时间、最后访问时间、当前大小。

 


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

 


核心考点 📌

  1. inode的作用:分离文件名与文件属性,减小目录项大小,降低目录检索的磁盘I/O开销。
  2. 磁盘inode vs 内存inode:磁盘inode存静态属性(长期),内存inode存动态信息(临时,文件打开时加载)。
  3. 链接计数:inode中的链接计数记录指向该文件的文件名数量(硬链接原理),计数为0时删除文件。

总结

        FCB是文件管理的基础数据结构,但存在目录检索效率低的问题;inode通过“文件名与属性分离”优化这一缺陷,是现代文件系统(如UNIX/Linux)的核心设计。理解inode的结构与作用,是掌握文件目录管理和存储效率优化的关键。

一句话记忆:FCB全能但笨重,inode拆分提效率,目录仅存文件名+inode号,属性动态加载省I/O! ✨

 

http://www.dtcms.com/a/287020.html

相关文章:

  • 深入解析Linux文件描述符:原理、机制与应用实践
  • 光伏系统遮挡分析与设计优化策略
  • 网络基础12--可靠性概述及要求
  • b-up:Enzo_Mi:深度学习基础知识
  • 回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测
  • 7.19 pq | 并查集模板❗|栈循环|数组转搜索树
  • CCF编程能力等级认证GESP—C++4级—20250628
  • Nestjs框架: 关于controller中的常用装饰器
  • 3.3 参数传递方式
  • 写case杂记
  • Glary Utilities(系统优化工具) v6.20.0.24 专业便携版
  • JavaSE -- 数组详细讲解(数组介绍,Arrays常用方法,二维数组创建)
  • Redis学习其三(订阅发布,主从复制,哨兵模式)
  • 优迅股份IPO隐忧:毛利水平“两连降”,研发费用率不及行业均值
  • decltype是什么,什么作用?
  • 【c++】指针的另一大用途:限制实参必须是变量
  • Fish Speech:开源多语言语音合成的革命性突破
  • Nestjs框架: 基于TypeORM的多租户功能集成和优化
  • LeetCode1047删除字符串中的所有相邻重复项
  • wsl 安装 nvm
  • [QOI] qoi_desc | qoi_encode | qoi_decode
  • 高防IP能够防御CC攻击吗?它具备哪些显著优势?
  • 服务管理智能化:R²AIN SUITE 升级带来的两大功能更新哪些值得关注?
  • T5(Text-to-Text Transfer Transformer) 模型
  • 20250718-5-Kubernetes 调度-Pod对象:重启策略+健康检查_笔记
  • 【Spring WebFlux】什么是响应式编程
  • 前缀和 HASH
  • proxy_cache缓存系统
  • 期刊论文-图片格式要求
  • UNet改进(23):如何用SLCAM模块提升UNet的分割性能