文件系统
文件系统的全局结构
磁盘从逻辑上分为如下部分:
- 引导区(Boot Sector): 引导区位于磁盘的起始位置,通常是磁盘的第一个扇区。它包含引导加载程序(boot loader),用于引导操作系统。引导加载程序负责启动计算机并加载操作系统内核。
- 分区表(Partition Table): 分区表通常存储在磁盘的第一个扇区之后,用于记录磁盘上的分区信息。分区表指示了磁盘上每个分区的起始位置、大小和文件系统类型。不同操作系统使用不同的分区表格式,如MBR(Master Boot Record)和GPT(GUID Partition Table)。
- 文件系统元数据: 文件系统的元数据,包含如下部分:
- 超级块:包含文件系统的关键信息,在计算机启动时,超级块会被载入内存。超级块中包含的典型信息包括分区的块的数量、块的大小、空闲空间的管理方式等。
- 空闲块信息:管理磁盘中空闲块的存储数据,具体方法见下文空闲空间管理方法
- inodes:管理文件的元数据
- 数据区: 文件系统的数据区存储了实际的文件数据。这是存储文件内容的地方。文件系统会将文件数据分为一个或多个块或簇,并将这些块分布在磁盘上的不同位置。文件系统的数据区通常占据了磁盘上的大部分空间。
以下是一个简单文件系统的具体存储方式:
外存空闲空间管理方法
1. 空闲表法
与文件连续分配方案中的目录保存内容类似,这里用一个表格记录连续空闲块在存储空间中的位置。
序号 | 第一个空闲盘块号 | 空闲盘块数 |
---|---|---|
1 | 2 | 4 |
2 | 9 | 3 |
3 | 15 | 5 |
4 | — | — |
2. 空闲链表法
使用链表数据结构,其中每个节点代表一个空闲数据块。链表的头节点存储了第一个空闲块的位置(磁盘块号),每个节点的下一个节点指向下一个空闲块。因此,整个链表由一系列相邻的空闲块组成。
3. 位示图法
位图是一个二进制位数组,其中的每个位对应于磁盘上的一个数据块。通常,位图中的每个位可以表示两个状态:
- 0:表示相应的数据块是空闲的,可以分配给文件。
- 1:表示相应的数据块已经被分配给文件,不再空闲。
col/row | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
2 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
3 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
4 | ||||||||||||||||
$\dots$ | ||||||||||||||||
16 |
4. 成组链接法
与文件混合索引分配方式思路类似,用一个磁盘块A来存储所有的空闲盘号,如果A满了,就用一个新的空闲磁盘B来作为头结点,并且将其中的一个盘块号标记为A的盘块号(作为一阶间址)。
虚拟文件系统
虚拟文件系统(Virtual File System,VFS)是一种操作系统内核设计模式或框架,它允许不同的文件系统在一个统一的接口下协同工作。VFS 提供了一个抽象层,允许应用程序和系统调用与文件系统交互,而不必关心底层文件系统的类型。
VFS 的主要目标是提供一个标准接口,使不同类型的文件系统(如本地文件系统、网络文件系统、CD-ROM文件系统等)能够以一致的方式与操作系统内核进行通信。这有助于增强操作系统的可扩展性和可移植性,同时使应用程序更容易编写,因为它们可以依赖统一的文件系统接口。
文件系统挂载
文件系统挂载是指将一个文件系统与操作系统的目录结构关联起来,以便可以访问文件和目录。在大多数操作系统中,文件系统挂载是一种将存储设备(如硬盘分区、CD-ROM、网络共享等)上的文件系统连接到操作系统的文件树中的过程。
文件系统挂载是文件系统管理中的一个重要概念,它使操作系统能够有效地访问和管理不同类型的存储设备上的数据。通过挂载,不同文件系统可以在一个统一的文件树中协同工作,使文件和目录对用户和应用程序来说似乎是在同一个系统中。