Linux内核设计基础(四)之虚拟文件系统

本文深入解析了Linux虚拟文件系统(VFS)的实现原理,重点介绍了超级块、索引节点、目录项及文件对象四大核心组件的作用与结构。通过理解这些概念,读者能够更好地掌握Linux下文件操作的本质。

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

先来看一下写文件函数write的执行过程:

ret = write(fd, buf, len);

write适用于各种文件系统,它首先执行sys_write(),而正是这个sys_write()进行实际文件系统类型的判别并执行该类型文件系统下的写操作。我们可以看出在多种多样的文件系统上抽象出了一个通用接口性质的虚拟文件系统。



我们这里非常关心Linux 2.6是如何去实现VFS的。先来看一下VFS中的四个主要的对象类型:

  • 超级块对象,它代表一个具体的已安装文件系统。
  • 索引节点对象,它代表一个具体文件。
  • 目录项对象,它代表一个目录项,是路径的一个组成部分。
  • 文件对象,它代表由进程打开的文件。
超级块
该对象用于存储特定文件系统的信息,由super_block结构体表示。在文件系统安装时,文件系统会调用alloc_super()以便从磁盘读取文件系统超级块,并将其信息填充到内存中的超级块对象中。用超级块对索引节点进行操作,如创建和初始化、释放、写入磁盘等。

索引节点inode
用来代表文件,该对象包含了内核在操作文件或目录时需要的全部信息。inode的存在是将文件的数据信息和控制信息进行分离,用结构体struct inode描述。我们常见的文件操作create(创建文件)、mkdir(创建新目录)等,都是由索引节点对象来完成的。

目录项对象
VFS中目录本身按文件对待,所以目录不是目录项对象。目录项对象是为了方便查找引入的,用结构体struct dentry描述。

文件对象
不是用inode来描述文件吗,怎么又有一个文件对象。这个文件对象表示进程已打开的文件,是已打开的文件在内存中的表示。因为多个进程可以同时打开和操作一个文件,所以同一个文件也可能存在多个对应的文件对象。用struct file进行描述,常见操作如open()、write()等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值