VFS中的数据结构(superblock、dentry、inode、file)

Linux的虚拟文件系统(VFS)提供了一致的接口来处理不同类型的文件系统。VFS的核心数据结构包括superblock(文件系统元信息)、inode(文件元信息)、dentry(文件路径与inode的关联)和file(进程与打开文件的交互信息)。superblock在磁盘上对应文件系统的元信息,inode存储文件控制块,dentry用于路径查找和缓存,file结构则处理进程与文件的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VFS简介

VFS的理念是使用统一的数据结构在内核中保存不同类型文件系统的信息(含操作)。

VFS是一个介于用户程序和文件系统实现之间的一个抽象层,VFS既给了不同类型的文件系统支持Linux系统的公共接口,也给用户程序提供了一个统一的调用接口。

VFS背后的核心idea是引入了通用文件模型(common file model),该模型其实就是Unix原生文件系统的一个镜像(这样可以在Unix原生文件系统了具有最小的开销,最高的性能)。其他非原生文件系统(比如FAT、MS-DOS filesystem)则需要做一些转换,从而支持该通用文件模型

通用文件模型(common file model)

通用文件模型由superblock、inode、dentry、file四种数据结构构成,这四种数据结构都是保存在内核空间中的。
- superblock数据结构存储了挂载的文件系统的元信息,对于基于磁盘的文件系统,通常在磁盘上有一个对应的superblock(比如ext2的superblock)。
- inode数据结构用于保存文件的元信息,一个文件对应一个inode,每个inode都有一个inode number唯一标识。inode通常对应磁盘上保存的文件控制块(file control block)
- dentry数据结构用于将inode(表示文件)和目录项(表示文件路径)关联起来。inode中是没有文件路径的,所以需要dentry来讲文件路径和文件关联起来。不同的磁盘文件系统使用各自的方式来存储dentry
- file数据结构用于存储进程和打开的文件之间交互的信息,这个信息只会存在于内核空间中,在磁盘上没有对应的信息。

下面将分别介绍这4种数据结构,所列举的信息使用的是2.6内核的数据。

superblock数据结构

superblock是文件系统的metadata,保存了文件系统的各种信息以及可以对其执行的操作。

包含的域(仅列举部分):

类型 域名 描述
int s_type 文件系统类型
unsigned long s_blocksize 块大小(block size)
struct dentry * s_root 指向文件系统根目录对应的dentry
struct list_head s_inodes 文件系统中所有文件的inode(使用list_head双向链表存储)
void
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值