linux内核VFS虚拟文件系统总结

本文深入解析Linux内核的虚拟文件系统(VFS),介绍了VFS的四大核心对象:超级块、索引节点、目录项和文件对象。详细阐述了每个对象的作用、数据结构及其相互关系,帮助读者理解Linux如何通过VFS支持多种文件系统。

  最近手里有一个项目需要写一个简单的文件系统,利用周末时间把深入理解linux内核书第十二章虚拟文件系统学习了一下,加深了对vfs的理解,这里也做一下总结,以备后查。

  linux成功的关键因素之一就是它与其他操作系统和谐共存的能力,在linux下可以安装挂载很多格式的文件系统,之所以能实现就是通过虚拟文件系统这一中间系统层,虚拟文件系统的主要思想是引入了一个通用文件模型,它能够表示所有的文件系统,这也要求,具体文件系统的实现中需要给VFS提供相应的物理组织结构。

  通用文件模型有4大对象模型:超级块对象 索引节点对象 目录项对象 文件对象

  要注意的是,在VFS看来,超级块以及索引节点是存在于实际物理磁盘的,而目录项和文件对象是VFS在内存中创建的结构,这里也预示着超级块对象和索引节点对象存在这个内存和物理磁盘的同步问题。

  这里也说明在VFS看来,实际的物理磁盘除了实际数据外,应该还有超级块和索引节点表,当然这个我们可以在具体文件系统的实现来实现,因为不是所有的文件系统在物理磁盘上有超级块和索引节点表的。

  我们首先从空间上来一一介绍VFS这4大对象模型:

1.superblock

1)superblock简介

超级块用来描述特定文件系统的信息。物理的超级块存放在磁盘特定的扇区中 ,分区被mount时将会读取磁盘superblock信息存在于内存中,也就是VFS的超级块对象。VFS超级块是各种具体文件系统在安装时建立的,并在这些文件系统卸载时被自动删除 。超级块对象由结构体 super_block来体现。

VFS中超级块对象的数据结构如下:

1318struct super_block {
1319        struct list_head        s_list;                                      // 超级快链表指针
1320        dev_t                   s_dev;                                          // 设备表示符
1321        unsigned char           s_dirt;                                   //脏标志
1322        unsigned char           s_blocksize_bits;              //以位为单位的块的大小
1323        unsigned long           s_blocksize;                     //以字节为单位的块大小
1324        loff_t                  s_maxbytes;                              //文件大小上限
1325        struct file_system_type *s_type;                       //指向文件系统的file_system_type 数据结构的指针
1326        const struct super_operations   *s_op;                         //超级块方法
1327        const struct dquot_operations   *dq_op;                      //磁盘限额方法
1328        const struct quotactl_ops       *s_qcop;                       //限额控制方法
1329        const struct export_operations *s_export_op;           //导出方法
1330        unsigned long           s_flags;                                       //登录标志
1331        unsigned long           s_magic;                                    //文件系统的魔数
1332        struct dentry           *s_root;                                          //目录登录点
1333        struct rw_semaphore     s_umount;                           //卸载信号量
1334        struct mutex            s_lock;                                         //超级块信号量
1335        int                     s_count;                                              //超级块引用计数
1336        atomic_t                s_active;                                       //活动引用记数
1337#ifdef CONFIG_SECURITY                             
1338        void                    *s_security;                                      //安全模块
1339#endif
1340        const struct xattr_handler **s_xattr;      
1341
1342        struct list_head 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值