文件系统是操作系统中管理持久化数据的子系统,负责将文件以逻辑结构组织并存储到磁盘等外存设备,提供文件的创建、读写、删除和保护功能。其核心设计目标包括:
| 组件 | 描述 |
|------------------|-------------------------------------------------------------------------|
| 索引节点(inode) | 存储文件元信息(如大小、权限、数据块位置),唯一标识文件,持久化在磁盘 |
| 目录项(dentry) | 记录文件名与inode的映射关系,形成目录结构,缓存在内存以提高访问效率 |
| 超级块(Superblock) | 记录文件系统整体信息(如块大小、inode总数) |
磁盘被划分为以下区域:
| 类型 | 特点 | 优缺点 |
|------------------|-------------------------------------------------------------------------|---------------------------------------|
| 连续分配 | 文件占用连续的物理块,通过起始块号+长度定位 | ✔️顺序访问快 ✖️外部碎片严重 |
| 链式分配 | 文件块通过指针链接,支持离散存储 | ✔️无外部碎片 ✖️随机访问效率低 |
| 索引分配 | 建立索引表记录文件块位置,支持多级索引(直接/间接/双重间接指针) | ✔️支持大文件 ✖️索引表占用额外空间 |
| 方法 | 原理 | 应用场景 |
|-------------------|------------------------------------------|--------------------------|
| 空闲表法 | 维护空闲块列表,分配时顺序查找 | 简单但效率低 |
| 位图法 | 用二进制位表示块是否空闲(0/1) | 空间利用率高(如Ext4) |
| 成组链接法 | 将空闲块分组,通过栈结构管理 | UNIX系统常用 |
| 类型 | 特点 | 适用场景 |
|-------------------|------------------------------------------|--------------------------|
| 顺序存取 | 按文件逻辑顺序依次读写 | 磁带、流媒体 |
| 直接存取 | 随机访问任意位置(通过块号定位) | 数据库文件 |
| 索引存取 | 通过关键字(如记录ID)快速定位记录 | 大型结构化文件 |
Q1:索引节点(inode)与目录项(dentry)的区别?
Q2:如何处理大文件存储?
Q3:文件系统如何保证崩溃一致性?