linux VFS概述以及内核源代码分析

本文概述了Linux的虚拟文件系统(VFS)概念,并深入分析了相关数据结构,如dentry。讨论了VFS如何进行文件系统的挂载操作,包括查找文件系统信息、加载模块以及检查设备是否已安装。同时提到了VFS的read操作。
摘要由CSDN通过智能技术生成
报告内容

 一、           概述

Linux能够支持各种不同的文件系统是通过VFS实现的,由于不同的物理文件系统具有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文件系统,操作系统必须把它们所具有的特性进行抽象,并建立一个面向各种物理文件系统的转换机制,通过这个转换机制,把各种不同物理文件系统转换为一个具有统一共性的虚拟文件系统。
VFS是一个软件层,用来处理与 Unix标准文件系统相关的所有系统调用,是用户应用程序与文件系统实现之间的抽象层。它实际上向Linux 内核和系统中运行的进程提供了一个处理各种物理文件系统的公共接口,通过这个接口使得不同的物理文件系统在内核看来都是相同的。
VFS通用文件模型将文件以及其操作抽象为以下几种对象类型:超级块对象( superblock object)存放文件系统相关信息;索引节点对象(inode object)存放具体文件的一般信息;文件对象(file object)存放已打开的文件和进程之间交互的信息;目录项对象(dentry object)存放目录项与文件的链接信息。
 

 二、           VFS相关的数据结构以及其分析

1.超级块对象
VFS 超级块是各种具体文件系统在安装时建立的,并在这些文件系统卸载时自动删除,它只存在于内存中。VFS超级块在 inculde/Linux/fs.h 中定义,即数据结构 super_block ,该结构及其主要域的含义如下:

struct super_block {

      struct list_head       s_list;             /* 指向超级块链表的指针 */
/*
* 包含该具体文件系统的块设备标识符。

*例如,对于 /dev/hda1,其设备标识符为 0x301

*/
      kdev_t                   s_dev;
   /* 该具体文件系统中数据块的大小,以字节为单位 */
      unsigned long        s_blocksize;
/* 块大小的值占用的位数,例如,如果块大小为 1024 字节,则该值为 10*/
      unsigned char         s_blocksize_bits;
      unsigned char         s_dirt;          /* 修改标志 */
      unsigned long long s_maxbytes;       /* 文件的最大长度 */
      struct file_system_type   *s_type;
/* 指向某个特定的具体文件系统的用于超级块操作的函数集合的指针 */
      struct super_operations   *s_op;
      struct dquot_operations *dq_op;  /* 指向磁盘限额方法的指针 */
      unsigned long        s_flags;
   /* 魔数,即该具体文件系统区别于其它文系统的一个标志 */
      unsigned long        s_magic;
      struct dentry          *s_root;
      struct rw_semaphore      s_umount;
      struct semaphore    s_lock;
      int                 s_count;
      atomic_t         s_active;
 
      struct list_head       s_dirty;               /* 已修改索引节点的链表 */
      struct list_head       s_locked_inodes;      /* 涉及 I/O 的索引节点的链表 */
      struct list_head       s_files;               /* 分配给超级的文件对象的链表 */
 
      struct block_device *s_bdev;
      struct list_head       s_instances;
      struct quota_mount_options s_dquot;        /* 磁盘限额的选项 */
/* 一个共用体,其成员是各种文件系统的 fsname_sb_info 数据结构 */
      union {
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值