打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linux的VFS详解
土豆西瓜大芝麻
于 2019-05-29 13:46:05 发布
21233
 收藏 100
分类专栏: linux 文章标签: 文件系统
linux专栏收录该内容
270 篇文章11 订阅
订阅专栏
概念
VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为不同文件系统的通信提供了媒介。
架构
VFS在整个Linux系统中的架构视图如下:
Linux系统的User使用GLIBC(POSIX标准、GUN C运行时库)作为应用程序的运行时库,然后通过操作系统,将其转换为系统调用SCI(system-call interface),SCI是操作系统内核定义的系统调用接口,这层抽象允许用户程序的I/O操作转换为内核的接口调用。VFS提供了一个抽象层,将POSIX API接口与不同存储设备的具体接口实现进行了分离,使得底层的文件系统类型、设备类型对上层应用程序透明。
接口适配示例
用户写入一个文件,使用POSIX标准的write接口,会被操作系统接管,转调sys_write这个系统调用(属于SCI层)。然后VFS层接受到这个调用,通过自身抽象的模型,转换为对给定文件系统、给定设备的操作,这一关键性的步骤是VFS的核心,需要有统一的模型,使得对任意支持的文件系统都能实现系统的功能。这就是VFS提供的统一的文件模型(common file model),底层具体的文件系统负责具体实现这种文件模型,负责完成POSIX API的功能,并最终实现对物理存储设备的操作。
VFS这一层建模和抽象是有必要的,如果放在SCI层会导致操作系统的系统调用的功能过于复杂,易出bug。那么就只能让底层文件系统都遵循统一实现,这对于已经出现的各种存储设备来说天然就有不同的特性,也是无法实现的。因此VFS这样一层抽象是有其必要性的。
跨设备/文件系统示例
VFS为不同设备或文件系统间的访问提供了媒介,下面的示意图和代码中,用户通过cp命令进行文件的拷贝,对用户来说是不用关心底层是否跨越文件系统和设备的,具体都通过VFS抽象层实现对不同文件系统的读写操作。
VFS的抽象接口
上述示例中提到VFS也有自己的文件模型,用来支持操作系统的系统调用。下面是VFS抽象模型支持的所有Linux系统调用:
文件系统相关:mount, umount, umount2, sysfs,  statfs,  fstatfs,  fstatfs64, ustat
目录相关:chroot,pivot_root,chdir,fchdir,getcwd,mkdir,rmdir,getdents,getdents64,readdir,link,unlink,rename,lookup_dcookie
链接相关:readlink,symlink
文件相关:chown, fchown,lchown,chown16,fchown16,lchown16,hmod,fchmod,utime,stat,fstat,lstat,acess,oldstat,oldfstat,oldlstat,stat64,lstat64,lstat64,open,close,creat,umask,dup,dup2,fcntl, fcntl64,select,poll,truncate,ftruncate,truncate64,ftruncate64,lseek,llseek,read,write,readv,writev,sendfile,sendfile64,readahead
Linux系统VFS支持的文件系统
Disk-based 文件系统:Ext2, ext3, ReiserFS,Sysv, UFS, MINIX, VxFS,VFAT, NTFS,ISO9660 CD-ROM, UDF DVD,HPFS, HFS, AFFS, ADFS,
Network 文件系统:NFS, Coda, AFS, CIFS, NCP
特殊文件系统:/proc,/tmpfs等
统一文件模型(common file model)
VFS为了提供对不同底层文件系统的统一接口,需要有一个高度的抽象和建模,这就是VFS的核心设计——统一文件模型。目前的Linux系统的VFS都是源于Unix家族,因此这里所说的VFS对所有Unix家族的系统都适用。Unix家族的VFS的文件模型定义了四种对象,这四种对象构建起了统一文件模型。
superblock:存储文件系统基本的元数据。如文件系统类型、大小、状态,以及其他元数据相关的信息(元元数据)
index node(inode):保存一个文件相关的元数据。包括文件的所有者(用户、组)、访问时间、文件类型等,但不包括这个文件的名称。文件和目录均有具体的inode对应
directory entry(dentry):保存了文件(目录)名称和具体的inode的对应关系,用来粘合二者,同时可以实现目录与其包含的文件之间的映射关系。另外也作为缓存的对象,缓存最近最常访问的文件或目录,提示系统性能
file:一组逻辑上相关联的数据,被一个进程打开并关联使用
统一文件模型是一个标准,各种具体文件系统的实现必须以此模型定义的各种概念来实现。
Superblock
静态:superblock保存了一个文件系统的最基础的元信息,一般都保存在底层存储设备的开头;动态:挂载之后会读取文件系统的superblock并常驻内存,部分字段是动态创建时设置的。superblock的具体定义见linux/include/fs/fs.h,下图展示了内存中维护的superblock:
由于Linux系统支持同时挂载多个文件系统,因此s_list字段用于在内存中构建superblock链表来支持挂载多个文件系统。s_root字段标识该文件系统的根目录,s_bdev标识该文件系统所在的设备信息。其中最重要的字段是s_op,这个指针指向该文件系统所支持的各种操作的结构体,称为“super_operations”,具体定义如下:
struct super_operations {
struct inode *(*alloc_inode)(struct super_block *sb);
void (*destroy_inode)(struct inode *);
void (*dirty_inode) (struct inode *);
int (*write_inode) (struct inode *, int);
void (*drop_inode) (struct inode *);
void (*delete_inode) (struct inode *);
void (*put_super) (struct super_block *);
void (*write_super) (struct super_block *);
int (*sync_fs)(struct super_block *sb, int wait);
int (*freeze_fs) (struct super_block *);
int (*unfreeze_fs) (struct super_block *);
int (*statfs) (struct dentry *, struct kstatfs *);
int (*remount_fs) (struct super_block *, int *, char *);
void (*clear_inode) (struct inode *);
void (*umount_begin) (struct super_block *);
int (*show_options)(struct seq_file *, struct vfsmount *);
int (*show_stats)(struct seq_file *, struct vfsmount *);
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
};
这个结构体的每个成员都一个函数指针,用来代表这个操作具体应该执行的底层操作。例如需要写入数据时,VFS会通过superblock中的s_op字段最终去调用write_super来执行文件系统的具体操作:sb->s_op->write_super(sb)。所有这些调用都由VFS完成,向上对接了操作系统的sys_write系统调用,向下转交到具体文件系统的底层操作。
每一个文件系统使用前必须进行挂载(mount),superblock包含的s_type字段定义了这个文件系统的类型。通过系统调用register_filesystem()、unregister_filesystem()可以实现对具体文件系统的挂载和卸载,它们都只有一个参数,就是文件系统类型“ file_system_type”。本质上就是告诉操作系统挂载的文件系统信息。对于2.6.18之后的内核版本,该结构体定义如下:
truct file_system_type {
const char *name; //文件系统类型名称
int fs_flags;
struct super_block *(*get_sb)(struct file_system_type *,
int, char *, void *, struct vfsmount *); //挂载文件系统时由kernel调用,用于创建内存中的 superblock
void (*kill_sb) (struct super_block *); //卸载文件系统是由kernel调用,用于移除内存中的 superblock
struct module *owner;
struct file_system_type *next;
struct list_head fs_supers;
struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
};
另外,get_sb的最后一个参数是vfsmount类型,这是系统用来记录挂载信息的数据结构。它保存了挂载点、设备、挂载选项等信息。对于每个一个打开的进程来说,都会在其内核部分维护两个数据结构:fs_struct和file;分别用来描述关联的文件系统信息和打开的文件信息。
Index node
静态:创建文件系统时生成inode,保存在具体存储设备上,记录了文件系统的元信息;动态:VFS在内存中使用inode数据结构,来管理文件系统的文件对象,记录了文件对象的详细信息,部分字段与关联的文件对象有关,会动态创建。具体信息如下:
i_dentry字段指定当前inode标识的文件对象的名称,也就是dentry,是一个链表的,因为可能由多个dentry都指向这个inode(硬链接)。然后除了文件的一些权限信息、访问时间、大小等信息之外,最重要的就是记录了inode和file对象所提供的操作,分别是i_fop和i_op。其中inode支持的操作示例如下:
struct inode_operations {
int (*create) (struct inode *, struct dentry *, int);
struct dentry * (*lookup) (struct inode *, struct dentry *);
int (*link) (struct dentry *, struct inode *, struct dentry *);
int (*unlink) (struct inode *, struct dentry *);
int (*symlink) (struct inode *, struct dentry *, const char *);
int (*mkdir) (struct inode *, struct dentry *, int);
int (*rmdir) (struct inode *, struct dentry *);
int (*mknod) (struct inode *, struct dentry *, int, dev_t);
int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *);
int (*readlink) (struct dentry *, char *,int);
int (*follow_link) (struct dentry *, struct nameidata *);
void (*truncate) (struct inode *);
int (*permission) (struct inode *, int);
int (*setattr) (struct dentry *, struct iattr *);
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
int (*setxattr) (struct dentry *, const char *, const void *, size_t, int);
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
ssize_t (*listxattr) (struct dentry *, char *, size_t);
int (*removexattr) (struct dentry *, const char *);
};
inode在内存中创建后会有inode cache进行缓存,并执行延迟的write back策略保存到底层存储设备。
Directory entry
dentry是用来记录具体的文件名与对应的inode间的对应关系的,同时可以用来实现硬链接、缓存、多级目录等树状文件系统的特性。VFS的dentry设计上就是为了实现整个文件系统树状层次结构的,每个文件系统拥有一个没有父dentry的根目录(root dentry),这个dentry会被superblock引用,用来作为进行树形结构的查找入口。其余的所有dentry都是有唯一的父dentry,并可以由若干个孩子dentry。示例:对于一个文件"/home/user/a”,会存在“/”、“home”、“user”、“a”四个dentry,依次构成父子关系,每个dentry也都有一个inode与之关联,存储了具体的数据。
dentry没有在磁盘等底层持久化存储设备上存储,是一个动态创建的内存数据结构,主要是为了构建出树状组织结构而设计,用来进行文件、目录的查找。dentry创建之后会被操作系统进行缓存,目的是为了提升对文件系统进行操作的性能。dentry的结构如下示意,具体定义于“<linux/dcache.h>”。
其中最重要的有两个字段,一个是d_inode指针指向了当前dentry关联的inode。另一个就是d_op字段,指向了一系列dentry支持的操作的集合。典型的dentry支持的操作集合如下:
struct dentry_operations {
int (*d_revalidate)(struct dentry *, int);
int (*d_hash) (struct dentry *, struct qstr *);
int (*d_compare) (struct dentry *, struct qstr *, struct qstr *);
int (*d_delete)(struct dentry *);
void (*d_release)(struct dentry *);
void (*d_iput)(struct dentry *, struct inode *);
};
dentry在需要使用时动态创建,并会被缓存。每个dentry有三种状态:
used:与一个inode关联,正处于被VFS使用的状态,不能被损坏和丢弃
unused:与inode关联,但处于被缓存状态,没有被VFS使用
negative:没有与具体的inode关联(相当于是一个无效的路径)
dentry由于会被动态创建,为了提升系统性能,设计了一个dentry cache进行缓存,包括三个部分:
used dentries 链表:记录每个正在使用的dentry,将其关联的inode的i_dentry字段指向的dentry链表连接起来形成一个dentry链表的链表
LRU双向环链表:用于维护unused和negative状态的dentry对象,从头部插入,离头部越近就是最近访问过的。当需要删除dentry时,从队列尾部删除最旧的dentry
hash table和hash function:用来快速查询一个给定的路径到dentry对象
File
文件对象是打开一个具体文件之后创建的一个内存数据结构,与具体的进程和用户相联系。一个文件对象包括的内容就是编程语言支持设置的各种文件打开的flag、mode,文件名称、当前的偏移等,其中非常重要的一个字段就是f_op,指向了当前文件所支持的操作集合。
struct file {
struct dentry *f_dentry;
struct vfsmount *f_vfsmnt;
struct file_operations *f_op;
mode_t f_mode;
loff_t f_pos;
struct fown_struct f_owner;
unsigned int f_uid, f_gid;
unsigned long f_version;
...
}
基本的操作集合如下,这也是使用应用程序可感知到的一系列接口。
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*aio_read) (struct kiocb *, char *, size_t, loff_t);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
ssize_t (*aio_write) (struct kiocb *, const char *, size_t, loff_t);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*aio_fsync) (struct kiocb *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*sendfile) (struct file *, loff_t *, size_t, read_actor_t, void *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
};
VFS抽象组件间的关系
从用户角度来看VFS的时候,可以通过下图很容易的理解各个抽象组件间的协作关系:
每个打开的文件对用户来说有一个文件描述符,也就是VFS抽象的file object。file object指向一个dentry,dentry指向新的dentry或一个inode,inode最终代表了一个具体存储设备上的数据。
参考文献:
1、http://learnlinuxconcepts.blogspot.com/2014/10/the-virtual-filesystem.html
2、https://www.ibm.com/developerworks/library/l-virtual-filesystem-switch/
3、http://www.tldp.org/LDP/khg/HyperNews/get/fs/vfstour.html
4、https://www.win.tue.nl/~aeb/linux/lk/lk-8.html
5、https://www.kernel.org/doc/Documentation/filesystems/vfs.txt
原文:https://blog.csdn.net/u010487568/article/details/79606141
文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux935 人正在系统学习中
土豆西瓜大芝麻
关注
21
1
100
专栏目录
解析Linux的VFS机制
07-29
解析Linux的VFS机制。本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux 内核中 VFS 的内在机制,在这过程中会涉及到上层文件系统调用和下层实际文件系统的如何挂载。文章试图从一个比较高的角度来解释 Linux 下的 VFS 文件系统机制。
剖析Linux中的虚拟文件系统VFS的认识.pdf最新发布
09-07
剖析Linux中的虚拟文件系统VFS的认识.pdf
评论 1 您还未登录,请先 登录 后发表或查看评论
vfs概念_Android开发
2-22
f->f_op->write换成vfs_write代码正常运行 staticintstmvl53l0x_write_offset_calibration_file(void) { structfile*f; charbuf[8]; mm_segment_tfs; f =filp_open("/productinfo/offset", O_WRONLY|O_CREAT,0666); ...
linux VFS概述以及内核源代码分析_CAESAR的专栏
3-8
Linux能够支持各种不同的文件系统是通过VFS实现的,由于不同的物理文件系统具有不同的组织结构和不同的处理方式,为了能够处理各种不同的物理文件系统,操作系统必须把它们所具有的特性进行抽象,并建立一个面向各种物理文件系统的转换机制,通过...
解析Linux中的VFS文件系统
Asion
 6133
Vfs文件系统详解 前言: 本文基于linux kernel 3.14.17来讨论VFS机制,以及内核对VFS的支持,试图从源代码的角度来理解,所以在阅读本文之前需要读者对linuxVFS的基本的数据结构有所了解,(super_block、inode、dentry、vfsmount等)。 一、VFS的概念 VFS是Linux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(Virtual
VFS文件系统结构分析
guo8113的专栏
 2036
VFS文件系统结构分析 ,介绍linux中文件系统的组织结构,inode、超级块、dentry等的关系
VFS相关内容_zzm_的博客
3-10
VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用,是用户应用程序与文件系统实现之间的抽象层。它实际上向Linux 内核和系统中运行的进程提供了一个处理各种物理文件系统的公共接口,通过这个接口使得不同的物理文件系统在内核看...
[高级操作系统] VFS详解(虚拟文件系统)_the Blog of 等...
3-13
本文旨在介绍linux(Unix)中的虚拟文件系统(VFS),我觉得学习就应该用一问一答式的方法,这样才能解自己的惑,所以在此以问答式方法来进行内容的讲解(新知识的学习)。 br,1= 1 关于VFS,需要提出的几个问题(及对应答案) 1.1 VFS是...
Linux(一) VFS虚拟文件系统
qq_36908841的博客
 83
一、先了解一下什么是挂载 Linux有自己的一套文件系统,例如Ext2、Ext3,但是外部其他文件系统时,由于各个文件系统都各自有一套的文件管理体系,是无法通过Linux本身访问文件的方式直接访问的,这个时候挂载就产生了。 挂载,指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。 举个例子:将U盘插入Linux系统中,虽然可以通过图形界面查看设备信息,但是无法通过命令方式访问数据,访问此目录只会提供给你此设备的一些基本信息(比如容量),如下
Linux文件存储抽象VFS
Oshyn —— 乐而学,学而乐
 1676
概念VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为不同文件系统的通信提供了媒介。架构VFS在整个Linux系统中的架构视图如下:Linux系统的User...
什么是vfs以及vfs的作用
weixin_36145588的博客
 1万+
vfs(虚拟文件系统)是什么?我们知道文件系统的种类有很多。除了Linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统 。linux通过叫做VFS的中间层对这些文件系统提供了完美的支持。在大部分情况下,用户通过libc和kernel的VFS交互,不需要关心底层文件系统的具体实现。我的理解,vfs就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,类似于c++中虚基
VFS(虚拟文件系统)
qq_43646576的博客
 1430
Linux文件系统 在使用计算机的过程中,文件是经常被提到的概念,例如可执行文件、文本文件等,这里说的文件是一个抽象的概念, 它是存放一切数据化信息的仓库。用户为了保存数据或信息,首先要创建-一个文件,然后把数据或信息写人该文件。 最终这些数据被保存到文件的载体上,通常情况下是磁盘上,只要给出存放文件的路径和文件名,文件系统就可以 在磁盘上找到该文件的物理位置,并把它调人内存供用户使用。在这个过程...
对linuxVFS的理解
human!的专栏
 6008
讨论linuxVFS是个很沉重的话题, 个人觉得,从源码上分析确实不太明智,第一,看完分析完就忘,第二,太浪费时间,懂了后也无法应用在实际场合中,所以,理清脉络个人觉得对内核的学习是最重要的,理清实现的思路,之后在以后真的要应用时详细的分析代码细节,所以对VFS的理解要理解的关键点是 1.什么是VFS 2.inode, dentry 3.文件系统的注册,挂载 4.如何实现不同文件系统之间的
Linux内核中的vfs,详解linux内核VFS
weixin_29664063的博客
 228
虚拟文件系统(VFS)在我看来, “虚拟”二字主要有两层含义:1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统。 VFS隐藏了它们的实现细节, 为使用者提供统一的接口;2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构。 目录结构是由“地址空间(namespace)”来描述的, 不同的进程可能拥有不同的namespace, 不同的namespace可能有着不同的目录结构...
linux VFS文件系统 ----mount命令介绍(一)
weixin_37867857的博客
 457
mount翻译过来称为挂载,是linux 中比较重要的命令,尤其是对于文件系统来说,它是文件系统注册之后访问磁盘的基石。它可以将普通的目录文件或者挂载点或者磁盘文件挂载到目录供操作系统访问。 1. 基本的mount命令 在基本的mount命令介绍时候分为三部分: 磁盘的挂载 目录绑定 远程计算机目录挂载(或者叫绑定) 1.1 磁盘的挂载 mount实现之初的目的很简单:挂载磁盘。通过mount操...
操作系统-课堂笔记-虚拟文件系统VFS(南航)
鹏鹏的博客
 590
文章目录虚拟文件系统VFS简介VFS的作用举例说明VFS都支持哪些文件系统类型?1.基于磁盘的文件系统,它们管理在本地磁盘分区中可用的存储空间2.网络文件系统:用于访问属于其他网络计算机的文件系统所包含的文件3.特殊文件系统实现细节1.VFS中通用文件模型概念2.VFS所处理的系统调用proc 虚拟文件系统VFS 简介 什么是虚拟文件系统? VFS是一个软件层,用来处理与Unix标准文件系统相关...
linux内核之VFS文件系统图解
weixin_33738555的博客
 640
2019独角兽企业重金招聘Python工程师标准>>> ...
Linux内核学习笔记(一) 虚拟文件系统VFS
胡LiuJia@BLOG
 3676
什么是VFS Vritual Filesystem 是给用户空间程序提供统一的文件和文件系统访问接口的内核子系统。借助VFS,即使文件系统的类型不同(比如NTFS和ext3),也可以实现文件系统之间交互(移动、复制文件等), 从用户空间程序的角度来看,VFS提供了一个统一的抽象、接口。这使得用户空间程序可以对不同类型的文件系统发起统一的系统调用,而不需要关心底层的文件系统类型。 从文件系统的...
linux VFS概述以及内核源代码分析
03-04
linux VFS概述以及内核源代码分析
vfs实现原理
chenying126的博客
 1962
目录 1.    VFS结构概览    2 2.    文件系统挂载    3 2.1文件系统类型    3 2.2文件系统的挂载点    3 3.    文件打开    5 3.1 open系统调用    5 3.2 file创建和inode查找    5 4.    文件数据读取    8 4.1 read系统调用    8 4.2 通用文件
VFS剖析
changke的博客
 498
VFS:为各种文件系统提供了一个通用的接口,它使得上层进程在进行与文件系统相关的操作时可以使用同一组系统调用,但是系统调用在内核中可以根据不同的文件系统执行不同的操作。在一个Linux操作系统中,存在多种的文件系统,例如ext2,ext3,ext4等,每种文件系统都有自己的组织方式,和操作方法,对于用户来说,不可能所有的文件系统都了解,所以在Linux中在应用程序和各种文件系统之间添加了一层称为虚...
linux vfs文件类型,Linux虚拟文件系统–VFS简介
weixin_39722759的博客
 67
导读Linux中可以支持多种文件系统,而且支持各种文件系统之间相互访问,这是因为有一个虚拟文件系统。虚拟文件系统也叫虚拟文件系统转换(Virtual Filesystem Switch,简称VFS),之所以说它虚拟,是因为该文件系统的各种数据结构都是随时建立或删除的,在盘上并不永久存在,只能存放在内存中。也就是说,只有VFS是无法工作的,因为它不是真正的文件系统。我们把各操作系统中的实际文件系统叫...
Linux虚拟文件系统(VFS)
chk_plusplus的博客
 666
1 虚拟文件系统概述 Linux中“一切皆文件”,所有文件都放置在以 “/” 为根目录的一个目录树中。所有的硬件设备也都是文件,各有自己的yi'ta
Linux 虚拟文件系统(VFS)介绍热门推荐
落尘纷扰的专栏
 1万+
1. 通用文件模型Linux内核支持装载不同的文件系统类型,不同的文件系统有各自管理文件的方式。Linux中标准的文件系统为Ext文件系统族,当然,开发者不能为他们使用的每种文件系统采用不同的文件存取方式,这与操作系统作为一种抽象机制背道而驰。为支持各种文件系统,Linux内核在用户进程(或C标准库)和具体的文件系统之间引入了一个抽象层,该抽象层称之为“虚拟文件系统(VFS)”。VFS一方面提供一...
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
关于我们
招贤纳士
商务合作
寻求报道
400-660-0108
kefu@csdn.net
在线客服
工作时间 8:30-22:00
公安备案号11010502030143
京ICP备19004658号
京网文〔2020〕1039-165号
经营性网站备案信息
北京互联网违法和不良信息举报中心
家长监护
网络110报警服务
中国互联网举报中心
Chrome商店下载
©1999-2022北京创新乐知网络技术有限公司
版权与免责声明
版权申诉
出版物许可证
营业执照
土豆西瓜大芝麻
码龄13年
 暂无认证
198
原创
1万+
周排名
2432
总排名
88万+
访问
等级
8815
积分
492
粉丝
711
获赞
247
评论
3170
收藏
私信
关注
热门文章
Ubuntu 16.04安装docker详细步骤 
89927
在本地shell脚本中ssh到远程服务器并执行命令 
 85159
ubuntu 16.04下安裝和配置ros 
 29377
linux的VFS详解 
 21181
ROS基础教程--CostMap_2D包的一些理解
 18167
分类专栏
内核7篇
数据处理14篇
文件系统82篇
音视频17篇
数据结构21篇
量化交易2篇
数据融合20篇
配置管理1篇
笔记3篇
BiscuitOS1篇
计算机6篇
场景1篇
物理
ROS课程讲义7篇
小白动手学机器学习--Python版100-Days-Of-ML-Code(python)
linux270篇
ROS59篇
java9篇
C语言124篇
ElasticSearch开发4篇
安卓开发1篇
Python8篇
数学20篇
数据库32篇
其他15篇
AI28篇
社区发现10篇
观点2篇
最新评论
GeoJson用于表示地理信息数据dbaideng: 讲得浅显易懂,谢谢!
linux内核中根据inode获取文件的完整路径swich1234: 参数char* buffer,int len 代表什么
深度:一文看懂Linux内核!Linux内核架构和工作原理详解布莱克警长: 大神,你们是怎么写那么多字的
三分钟带你了解,什么是地理信息系统(GIS)kkkllllss: 怎么国内也没有一家做建模的软件呀
C++中使用宏定义来注释掉所有的cout输出oswin_: 没挛用,本来就是程序有大量的cout要注释, 你实际使用的是tcout。逗我呢
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
C语言函数参数是如何传递的?
早期Linux上的free命令详解
linux shell脚本模板
2022年3篇
2021年196篇
2020年189篇
2019年93篇
2018年54篇
2011年1篇
目录
概念
架构
接口适配示例
跨设备/文件系统示例
VFS的抽象接口
Linux系统VFS支持的文件系统
统一文件模型(common file model)
Superblock
Index node
Directory entry
File
VFS抽象组件间的关系
举报
×
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vfs 3
linux内核分析笔记----虚拟文件系统
模拟文件系统
Linux下获取文件大小的方法
【转】Linux那些事儿之我是Sysfs(6)文件系统 - wilson的日志 - 网易博...
VFS文件系统(2)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服