当前位置: 首页 > 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.lryc.cn/news/592295.html

相关文章:

  • Java 抽象类与接口深度解析
  • 进阶数据结构:红黑树
  • 可靠消息最终一致性分布式事务解决方案
  • Web3加密货币交易:您需要知道的所有信息
  • MySql:索引,结构
  • 服务器mysql数据的简单备份脚本
  • Ansible + Shell 服务器巡检脚本
  • C#`Array`进阶
  • ChatGPT Agent技术架构探析
  • 力扣面试150(33/150)
  • 解决 IDEA 中 XML 文件的 “URI is not registered” 报错
  • 优先算法——专题九:链表
  • Logback 配置的利器:深入理解<property>与<variable>
  • 深度解析Linux文件I/O三级缓冲体系:用户缓冲区→标准I/O→内核页缓存
  • 【C语言】深入理解柔性数组:特点、使用与优势分析
  • MySQL安装包安装方法
  • Vue (Official) v3.0.2 新特性 为非类npm环境引入 globalTypesPath 选项
  • 28、鸿蒙Harmony Next开发:不依赖UI组件的全局气泡提示 (openPopup)和不依赖UI组件的全局菜单 (openMenu)、Toast
  • ModbusRTU转profibus网关与涡街液体流量计通讯读取流量计温度
  • 回归预测 | MATLAB实现SA-BP模拟退火算法优化BP神经网络多输入单输出回归预测
  • jvm分析篇---1、先认识下dump文件
  • Kubernetes Pod 深度理解
  • 【C语言进阶】题目练习(2)
  • Composer 可以通过指定 PHP 版本运行
  • uni-app 跳转外部连接
  • 网络原理——UDP
  • 如何 ASP.NET Core 中使用 WebSocket
  • html复习
  • 【收集电脑信息】collect_info.sh
  • 电脑插上u盘不显示怎么回事