3.1 - 文件系统概述

Unix操作系统

一篇围绕文件系统章节展开的总览笔记。


在 概述 里已经把操作系统拆成了进程、内存、文件、I/O 这些大块。前面两章讨论了进程与内存,接下来进入"文件系统"这一章。

这一篇不展开文件系统的细节,而是先建立整章会反复出现的前置信息:文件系统要解决什么问题、它按什么层次组织、每一层分别承担什么职责。

导览

1. 核心问题

文件系统的核心目标是为磁盘访问提供完整的抽象与保护。具体可以拆成下面几个方面:

问题关键对象
文件的定义与命名文件、文件名、扩展名
文件的组织与定位目录、目录项、inode
逻辑地址到物理块的映射分配方法(连续、链接、索引)、空闲空间管理
磁盘硬件的交互磁盘结构、磁盘调度、格式化、引导块、交换空间
多进程与用户的安全共享一致性语义、访问控制、RAID
多种文件系统的统一访问VFS、文件描述符、打开文件表、POSIX API

2. 路线图

这一章后续几篇文章的大致分工如下:

主题对象中心议题对应文章
文件系统抽象文件、目录与磁盘结构文件、目录与磁盘的结构是怎样的文件系统抽象
文件系统硬件磁盘数据在物理介质的组织,操作系统的磁盘调度文件系统硬件
文件系统的保护一致性、权限与 RAID一致性、访问权限与冗余实现文件系统的保护
VFS 与 POSIXVFS 与 POSIX API使用统一接口访问不同文件系统虚拟文件系统与文件系统POSIX API

文件系统层次

文件系统是一组按职责分层的模块。由上到下大体可分为3层:

层级职责操作对象
逻辑文件系统管理元数据,维护文件结构文件控制块(FCB)、目录
文件组织模块将文件的逻辑地址映射为物理地址逻辑块、物理块
基本文件系统向设备驱动程序发送读写物理块的命令物理块号,设备驱动程序

应用程序不直接接触物理块或 I/O 端口。它通过逻辑文件系统暴露的路径名、文件描述符和读写接口访问数据;底层细节由文件组织模块和基本文件系统逐级消化。

1. 逻辑文件系统

逻辑文件系统管理的是用户视角下的文件与目录——文件名、路径、权限、时间戳等元数据。

它通过文件控制块(FCB,File Control Block)维护每个文件的结构信息。在 Unix 中,FCB 的核心部分就是 inode。逻辑文件系统不关心文件数据落在哪个物理块上,只关心"这个文件的 inode 里记录了什么"以及"目录如何把文件名映射到 inode"。

2. 文件组织模块

文件组织模块负责把"文件内的第 N 个逻辑字节"翻译成"磁盘上的第 M 个物理块"。它清楚文件的逻辑块与物理块之间的映射关系。

这一层的核心决策是分配方式——文件数据块在磁盘上如何排布:

分配方式思路优势代价
连续分配文件占据连续的物理块访问快,计算简单外部碎片,扩展困难
链接分配每个数据块存放下一个块的指针无外部碎片随机访问慢,指针占用空间
索引分配所有数据指针集中在索引块中随机访问快,无外部碎片索引块额外占用存储

具体的分配细节、变体及空闲空间管理方法属于文件系统抽象篇,本篇只建立层级概念。

3. 基本文件系统

基本文件系统位于文件组织模块之下,它不再关心"文件"这个概念,只关心"从哪个物理块号读,向哪个物理块号写"。它的主要工作是向 I/O 控制层发出对特定物理块的读写命令。

I/O 控制层再往下,就是设备驱动程序和硬件本身——磁头寻道、盘片旋转、DMA 传输都在这一层完成。这些内容将在文件系统硬件篇中展开。

章节关系

序号文章内容
3.2文件系统抽象文件结构、目录结构、磁盘结构与数据分配
3.3文件系统硬件磁盘分类、连接、调度、格式化与引导
3.4文件系统的保护一致性语义、访问控制、RAID
3.5VFS 与 POSIX API虚拟文件系统与文件系统编程接口