标签:
关于VFS有一篇很好的博客http://www.ibm.com/developerworks/cn/linux/l-vfs/
建议先阅读本文为基础,然后继续阅读该文章。
VFS,虚拟文件系统,为用户提供了文件和文件系统相关的接口。
这些接口可以跨越各种文件系统和不同介质执行。
VFS提供了一个通用文件系统模型,该模型囊括了任何文件系统的常用功能集和行为。
该模型偏重于Unix风格的文件系统。
如下图,下图描述了VFS相关数据结构的关系
Unix使用了4个和文件系统相关的传统概念:文件,目录项,索引节点,安装点(mount point)
简单的面向字节流的抽象
文件通过目录组织起来,目录中的每一个部分都是一个目录条目, /home/wolfman/butter , / , home, wolfman , butter 都是目录条目,统称为目录项
Unix文件系统,将文件的相关信息和文件本身区分开来。文件控制信息,如权限,拥有者,大小,创建时间等”元数据”,被存储在一个单独的数据结构中,该结构被称为索引节点inode
linux中的磁盘文件系统的入口目录,类似于windows中的用来访问不同分区的C:、D:、E:等盘符。[百度百科词条]
文件系统的信息存储在超级块中,集单独文件信息和文件系统信息于一身。
对于FAT,NTFS这种,虽然也可以在Linux上工作,但必须进行封装。比如:一个文件系统不支持索引节点,也必须在内存中装配索引节点结构体,就像它本身包含一样。
超级块对象
<linux/fs.h>
<linux/fs.h>
索引节点对象
<linux/fs.h>
<linux/fs.h>
<linux/dcache.h>
<linux/dcache.h>
<linux/fs.h>
<linux/fs.h>
<linux/fs.h>
,如ext3,ext4struct file_system_type {
const char *name;
int fs_flags;
#define FS_REQUIRES_DEV 1
#define FS_BINARY_MOUNTDATA 2
#define FS_HAS_SUBTYPE 4
#define FS_USERNS_MOUNT 8 //Can be mounted by userns root
#define FS_USERNS_DEV_MOUNT 16 // A userns mount does not imply MNT_NODEV
#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */
struct dentry *(*mount) (struct file_system_type *, int,const char *, void *);
void (*kill_sb) (struct super_block *);
struct module *owner;
struct file_system_type * next;
struct hlist_head fs_supers;
struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
struct lock_class_key s_vfs_rename_key;
struct lock_class_key s_writers_key[SB_FREEZE_LEVELS];
struct lock_class_key i_lock_key;
struct lock_class_key i_mutex_key;
struct lock_class_key i_mutex_dir_key;
};
<linux/mount.h>
struct vfsmount {
struct dentry *mnt_root;/* root of the mounted tree */
struct super_block *mnt_sb;/* pointer to superblock */
int mnt_flags;
};
file_struct
定义于<linux/fdtable.h>
与单个进程相关的信息都包含在内
fs_struct
定义于<linux/fs_struct.h>
包含文件系统和进程相关信息
namespace
定义于<linux/mnt_namespace.h>
使得每一个进程在系统中看到唯一的安装文件系统,不仅是唯一的根目录,而是唯一的文件系统层次结构
[ https://www.thomaskrenn.com/en/wiki/Linux_Storage_Stack_Diagram ]
标签:
原文地址:http://blog.csdn.net/giantpoplar/article/details/51813211