话说文件系统——VFS简介(二)
linux可以与很多文件系统完美的结合,可以很容易地把Windows、其他Unix系统、甚至在市场上很小众的文件系统轻松地移植到linux中。
这对于linux今天的成功是功不可没的,那为什么这么厉害了,linux是怎么做到的呢?这里的功臣就是VFS,可以称为“虚拟文件系统”。VFS是
内核的一个子系统,它应用层的程序提供了文件和文件系统相关的操作提供了统一的接口,它的主要作用就是为各种文件系统提供统一的接口。
假设我们有如下的操作命令:
$ cp /floppy/TEST /tmp/test
其中/floppy是MS-DOS文件系统的挂载点,/tmp是Ext2的挂载目录。VFS是应用层软件和具体文件系统实现之间的抽象层。因此,cp 程序不需
要知道具体的/floppy/TEST和/tmp/test文件系统的类型。这样应用程序cp只是通过与VFS提供的统一接口交互,从而屏蔽了具体文件系统的实现。

由VFS支持的文件系统可以分为以下三类:
1. 磁盘文件系统,也就是咱们平常说的Ext2、Ext3、MS-DOS、NFTS等;
2. 网络文件系统,比如NFS、Coda、AFS、CIFS、NCP等;
3. 特殊文件系统,比如说linux中的sysfs、proc等。
厉害吧,我的国。这样一来,对于提供给应用层的系统调用很统一,且很容易维护,但又可以兼容各种形形色色的文件系统。VFS本身只存在
于内存中,它需要将硬盘上的文件系统抽象到内存中,而这个工作就是通过4个重要的结构体来实现的。
. super_block,存放一个已经挂载的特定文件系统的信息,对于磁盘文件系统来说,super_block与存储在磁盘上的文件系统控制块相对应;
. inode,存放具体文件系统中的一个文件信息,对于磁盘文件系统来说,它与存储在磁盘上的文件控制块相关联。每个inode有一个在对应的文件
系统中唯一的 inode number。
. dentry,表示一个目录项,就是文件路径中的一个单独组成部分,比如/tmp/helloworld.txt,/、tmp、helloworld.txt都是目录项。它主要反映了文件
系统中的树状结构。
. file,存放具体进程和一个打开文件的交互信息。它只有在一个进程打开一个文件是,存在与内核的内存中;
这部分的内容可以参考《linux内核设计与实现》、《深入理解linux内核》、《linux内核探秘:深入解析文件系统和设备驱动的框架与设计》。
接下来我们直接分析上一篇实现的aufs文件系统,感受一下linux文件系统的魅力和精妙。
话说文件系统——VFS简介(二)的更多相关文章
- Linux虚拟文件系统–VFS简介
http://www.embeddedlinux.org.cn/emb-linux/file-system/201712/20-7907.html 导读 Linux中可以支持多种文件系统,而且支持各种 ...
- 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解
http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...
- Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...
- (转)虚拟文件系统(VFS)浅析
http://www.cnblogs.com/zsw-1993/p/5048144.html 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种 ...
- linux文件系统体系结构 和 虚拟文件系统(VFS)
图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的 ...
- 虚拟文件系统(VFS)
原文链接:http://www.orlion.ga/1008/ linux在不同的文件系统之上做了一个抽象层,使得文件.目录.读写访问等概念都成为抽象层概念,这个抽象层被称为虚拟文件系统(VFS). ...
- linux基础-第十三单元 硬盘分区、格式化及文件系统的管理二
第十三单元 硬盘分区.格式化及文件系统的管理二 文件系统的挂载与卸载 什么是挂载 mount命令的功能 mount命令的用法举例 umount命令的功能 umount命令的用法举例 利用/etc/fs ...
- 虚拟文件系统VFS
Linux的文件系统是由虚拟文件系统作为媒介搭建起来的,虚拟文件系统VFS(Virtual File System)是Linux内核层实现的一种架构,为用户空间提供统一的文件操作接口.它在内核内部为不 ...
- Linux虚拟文件系统VFS解决
参考<Linux内核设计与实现> 虚拟文件系统(VFS)它是linux核心和详细I/O一个普通的访问接口之间的包装设备,通过这层界面,linux内核能够以同一的方式訪问各种I/O设备. 虚 ...
随机推荐
- ssh key生成步骤
1. 安装git,从程序目录打开 "Git Bash" ,或者直接用git shell,github自带的工具 2. 键入命令:ssh-keygen -t rsa -C " ...
- PL/SQL编程基础——PL/SQL简介
课程教师:李兴华 课程学习者:阳光罗诺 日期:2018-07-28 知识点: 1. 了解PL/SQL的主要特点 2. 掌握PL/SQL块的基本结构 PL/SQL PL/SQL是Oracle在关系数据库 ...
- sql大数据多条件查询索引优化
此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多 优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出 ...
- 关于Unity3d的世界空间和本地空间的一点思考
最近才开始学Unity3d,被这个本地空间和世界空间搞得有点晕头转向的.于是花了一点时间随便写了一点代码加深理解.代码如下: public class MoveX : MonoBehaviour { ...
- C#中Array、ArrayList和List三者的区别
1.Array 在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 它的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小. 2. ...
- Python学习---文件操作的学习1208
1.1. 对文件操作基本操作: 操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 注意:pyton中操作的文件是utf8保存的,打开文件时open函数是通过操作系统 ...
- 解决python3 UnicodeDecodeError: 'gbk' codec can't decode byte
本来想写个html来玩玩,结果读取文件得时候就BUG了.... 以下代码读取html中无中文没有问题. def handle_request(client): buf = client.recv(10 ...
- 读 CSI讲义 费马小定理
费马小定理 最近在上计算机安全学选修课.. 读老师博客..现在当是写阅读笔记吧. 这里贴出老师的简书建议先看看链接先..毕竟我这些东西只是搞笑一下的.. 遵循一下这个原则… 观察 找规律 求证 首先是 ...
- Apache Spark : RDD
Resilient Distributed Datasets Resilient Distributed Datasets (RDD) is a fundamental data structure ...
- yarn-site.xml
要保证spark on yarn的稳定性,避免报错,就必须保证正确的配置,尤其是yarn-site.xml. 首先来理解一下yarn-site.xml各个参数的意义(引自董的博客) 注:下面<v ...