没有合适的资源?快使用搜索试试~ 我知道了~
linux VFS概述以及内核源代码分析
4星 · 超过85%的资源 需积分: 42 37 下载量 73 浏览量
2013-03-04
12:43:39
上传
评论
收藏 15KB TXT 举报
温馨提示
试读
12页
linux VFS概述以及内核源代码分析
资源推荐
资源详情
资源评论
linux VFS概述以及内核源代码分析
Linux能够支持各种不同的文件系统是通过VFS实现的,由于不同的物理文件系统具有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文件系统,操作系统必须把它们所具有的特性进行抽象,并建立一个面向各种物理文件系统的转换机制,通过这个转换机制,把各种不同物理文件系统转换为一个具有统一共性的虚拟文件系统。
VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用,是用户应用程序与文件系统实现之间的抽象层。它实际上向Linux 内核和系统中运行的进程提供了一个处理各种物理文件系统的公共接口,通过这个接口使得不同的物理文件系统在内核看来都是相同的。
VFS通用文件模型将文件以及其操作抽象为以下几种对象类型:超级块对象(superblock object)存放文件系统相关信息;索引节点对象(inode object)存放具体文件的一般信息;文件对象(file object)存放已打开的文件和进程之间交互的信息;目录项对象(dentry object)存放目录项与文件的链接信息。
相关的数据结构以及其分析
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;
Linux能够支持各种不同的文件系统是通过VFS实现的,由于不同的物理文件系统具有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文件系统,操作系统必须把它们所具有的特性进行抽象,并建立一个面向各种物理文件系统的转换机制,通过这个转换机制,把各种不同物理文件系统转换为一个具有统一共性的虚拟文件系统。
VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用,是用户应用程序与文件系统实现之间的抽象层。它实际上向Linux 内核和系统中运行的进程提供了一个处理各种物理文件系统的公共接口,通过这个接口使得不同的物理文件系统在内核看来都是相同的。
VFS通用文件模型将文件以及其操作抽象为以下几种对象类型:超级块对象(superblock object)存放文件系统相关信息;索引节点对象(inode object)存放具体文件的一般信息;文件对象(file object)存放已打开的文件和进程之间交互的信息;目录项对象(dentry object)存放目录项与文件的链接信息。
相关的数据结构以及其分析
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 {
struct minix_sb_info minix_sb;
struct ext2_sb_info ext2_sb;
struct ext3_sb_info ext3_sb;
struct hpfs_sb_info hpfs_sb;
struct ntfs_sb_info ntfs_sb;
struct msdos_sb_info msdos_sb;
struct isofs_sb_info isofs_sb;
struct nfs_sb_info nfs_sb;
struct sysv_sb_info sysv_sb;
struct affs_sb_info affs_sb;
struct ufs_sb_info ufs_sb;
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 {
struct minix_sb_info minix_sb;
struct ext2_sb_info ext2_sb;
struct ext3_sb_info ext3_sb;
struct hpfs_sb_info hpfs_sb;
struct ntfs_sb_info ntfs_sb;
struct msdos_sb_info msdos_sb;
struct isofs_sb_info isofs_sb;
struct nfs_sb_info nfs_sb;
struct sysv_sb_info sysv_sb;
struct affs_sb_info affs_sb;
struct ufs_sb_info ufs_sb;
剩余11页未读,继续阅读
资源评论
- goforit2013-07-02源代码还好!有一定参考价值!
denniskal
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功