目录
虚拟文件系统 VFS
文件系统挂载过程
虚拟文件系统 VFS
-
统一标准的系统调用接口:
- VFS定义了一组标准的文件操作API,如
open()
,read()
,write()
,close()
等,使得用户空间的应用程序无需关心底层文件系统的具体类型。
- VFS定义了一组标准的文件操作API,如
-
下层文件系统必须实现的函数功能:
- 为了与VFS兼容,每个具体的文件系统都必须实现一组标准的函数,这些函数对应于VFS提供的文件操作接口。
-
vnode(虚拟节点):
- 每当文件被打开时,VFS会在内存中创建一个
vnode
结构,它是一个通用的文件表示。vnode
包含了文件系统的相关信息,如文件类型、访问权限、文件大小等。
- 每当文件被打开时,VFS会在内存中创建一个
-
函数功能指针:
vnode
结构中包含了一组函数指针,这些指针指向具体文件系统实现的函数。当VFS接收到文件操作请求时,它会通过这些指针调用相应文件系统的具体实现。
文件系统挂载过程
-
注册新挂载的文件系统:
- 当一个新的文件系统(如插入U盘后识别的文件系统)需要挂载到操作系统中时,它必须在VFS中进行注册。这通常涉及到更新内存中的挂载表,该表记录了系统中所有已挂载文件系统的信息。
-
提供函数地址列表:
- 新挂载的文件系统需要向VFS提供一个函数地址列表,这些地址对应于该文件系统实现的VFS标准函数。这样,VFS就可以通过这些函数与新的文件系统交互。
-
挂载到挂载点:
- 挂载点是一个已存在的目录,新文件系统将被“附加”到这个目录下。挂载操作会将新文件系统的根目录与挂载点目录链接起来,使得用户可以通过挂载点访问新文件系统中的文件。
以下是文件系统挂载的步骤:
识别文件系统类型
-
超级块检查:操作系统在挂载文件系统时,首先会读取存储设备的超级块(Superblock)。超级块包含了文件系统的类型、块大小、inode数量等关键信息。通过分析这些信息,操作系统可以确定文件系统的类型,如EXT4、NTFS、FAT32等。
-
其他元数据:除了超级块,操作系统可能还会检查其他元数据,如文件系统签名或特定的文件系统标识符,以确保正确识别文件系统类型。
创建挂载点
-
选择目录:挂载点是文件系统中的一个目录,新文件系统将挂载到这个目录下。用户或系统管理员需要选择一个合适的现有目录作为挂载点。
-
目录状态:挂载点目录应该是空的,或者至少在挂载新文件系统时不应该被其他进程使用,以避免数据冲突或损坏。
执行挂载操作
-
调用挂载函数:操作系统提供了挂载函数(如
mount()
系统调用),该函数会被调用以执行挂载操作。挂载函数需要提供文件系统的类型、设备文件(如磁盘分区)、挂载点等信息。 -
关联文件系统:挂载函数会将新文件系统的根目录与挂载点目录链接起来,使得用户可以通过挂载点访问新文件系统中的文件和目录。
更新文件系统表
-
文件系统表:操作系统维护一个文件系统表,该表记录了所有已挂载文件系统的信息,包括它们的挂载点、文件系统类型、设备文件等。
-
更新记录:在挂载操作成功完成后,文件系统表会被更新,以包含新挂载的文件系统的信息。这样,操作系统就可以正确地管理所有的文件系统,并允许用户和应用程序通过统一的文件系统接口访问它们。