文件系统

需熟练掌握文件系统的结构以及外存空闲空间管理方法,常在选择题中考察,也会在大题中考察相关知识点。

文件系统的全局结构

MBR
Parition 1
Partition 2
Partition Table
boot sector
super block
free space management
inodes
file and directory data
Disks
File System Metadata
Data Area

磁盘从逻辑上分为如下部分:

  1. 引导区(Boot Sector): 引导区位于磁盘的起始位置,通常是磁盘的第一个扇区。它包含引导加载程序(boot loader),用于引导操作系统。引导加载程序负责启动计算机并加载操作系统内核。
  2. 分区表(Partition Table): 分区表通常存储在磁盘的第一个扇区之后,用于记录磁盘上的分区信息。分区表指示了磁盘上每个分区的起始位置、大小和文件系统类型。不同操作系统使用不同的分区表格式,如MBR(Master Boot Record)和GPT(GUID Partition Table)。
  3. 文件系统元数据: 文件系统的元数据,包含如下部分:
    • 超级块:包含文件系统的关键信息,在计算机启动时,超级块会被载入内存。超级块中包含的典型信息包括分区的块的数量、块的大小、空闲空间的管理方式等。
    • 空闲块信息:管理磁盘中空闲块的存储数据,具体方法见下文空闲空间管理方法
    • inodes:管理文件的元数据
  4. 数据区: 文件系统的数据区存储了实际的文件数据。这是存储文件内容的地方。文件系统会将文件数据分为一个或多个块或簇,并将这些块分布在磁盘上的不同位置。文件系统的数据区通常占据了磁盘上的大部分空间。

以下是一个简单文件系统的具体存储方式:

D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
Data Region
Data Region
Inode Region
0
7
8
15
16
23
24
31
32
39
40
47
48
55
56
63
I
I
I
I
I
d
i
S
Abbreviation
Meaning
S
Superblock
i
inode bmap
d
data bmap
I
inode region
D
data region
Super
i-bmap
d-bmap
0
4
8
12
1
5
9
13
2
6
10
14
3
7
11
15
16
20
24
28
17
21
25
29
18
22
26
30
19
23
27
31
32
36
40
44
33
37
41
45
34
38
42
46
35
39
43
47
48
52
56
60
49
53
57
61
50
54
58
62
51
55
59
63
64
68
72
76
65
69
73
77
66
70
74
78
67
71
75
79
0KB
4KB
8KB
12KB
16KB
20KB
24KB
28KB
32KB
iblock 0
iblock 1
iblock 2
iblock 3
iblock 4
The Inode Table

外存空闲空间管理方法

1. 空闲表法

文件连续分配方案中的目录保存内容类似,这里用一个表格记录连续空闲块在存储空间中的位置。

序号第一个空闲盘块号空闲盘块数
124
293
3155
4

2. 空闲链表法

使用链表数据结构,其中每个节点代表一个空闲数据块。链表的头节点存储了第一个空闲块的位置(磁盘块号),每个节点的下一个节点指向下一个空闲块。因此,整个链表由一系列相邻的空闲块组成。

0
1
2
3
4
5
6
7
8
9
10
3
12
13
14
15
16:1
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
free-space
linked list head

3. 位示图法

位图是一个二进制位数组,其中的每个位对应于磁盘上的一个数据块。通常,位图中的每个位可以表示两个状态:

  • 0:表示相应的数据块是空闲的,可以分配给文件。
  • 1:表示相应的数据块已经被分配给文件,不再空闲。
col/row12345678910111213141516
11100011100100110
20001111110000111
31110001111110000
4
$\dots$
16

4. 成组链接法

文件混合索引分配方式思路类似,用一个磁盘块A来存储所有的空闲盘号,如果A满了,就用一个新的空闲磁盘B来作为头结点,并且将其中的一个盘块号标记为A的盘块号(作为一阶间址)。

size: 4
8
(single indirect)
4
5
6
· · · · · 
size: 10
23
53
16
77
· · · · · 
56
null
free block
free block
free block
free block
free block
free block
free block
free block

虚拟文件系统

虚拟文件系统(Virtual File System,VFS)是一种操作系统内核设计模式或框架,它允许不同的文件系统在一个统一的接口下协同工作。VFS 提供了一个抽象层,允许应用程序和系统调用与文件系统交互,而不必关心底层文件系统的类型。

VFS 的主要目标是提供一个标准接口,使不同类型的文件系统(如本地文件系统、网络文件系统、CD-ROM文件系统等)能够以一致的方式与操作系统内核进行通信。这有助于增强操作系统的可扩展性和可移植性,同时使应用程序更容易编写,因为它们可以依赖统一的文件系统接口。

VFS Interface
local file system
type 1
local file system
type 2
remote file system
type 1
disk
disk
network
file-system interface

文件系统挂载

文件系统挂载是指将一个文件系统与操作系统的目录结构关联起来,以便可以访问文件和目录。在大多数操作系统中,文件系统挂载是一种将存储设备(如硬盘分区、CD-ROM、网络共享等)上的文件系统连接到操作系统的文件树中的过程。

文件系统挂载是文件系统管理中的一个重要概念,它使操作系统能够有效地访问和管理不同类型的存储设备上的数据。通过挂载,不同文件系统可以在一个统一的文件树中协同工作,使文件和目录对用户和应用程序来说似乎是在同一个系统中。

/
sbin
etc
opt
fs
cups
/dev/sda1
/
app1
app2
/dev/sda2
mkdir /opt/mount_fs
mount /dev/sda2 /opt/mount_fs
/
sbin
etc
opt
fs
cups
/dev/sda1
mount_fs
app1
app2