话说文件系统——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设备. 虚 ...
随机推荐
- C++ 重载 重写 重定义
重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰
- c# 内存泄漏检查心得
系统环境 windows 7 x64 检查工具:ANTS Memory Profiler 7 或者 .NET Memory Profiler 4.0 开发的软件为winform / windows s ...
- java数组回顾---线性查找最大值最小值---二分查找
import java.util.Scanner; public class ArrayDemo { public static void main(String []args) { //------ ...
- 从Vue-router到html5的pushState
最近在用vue的时候突然想到一个问题 首先,我们知道vue实现的单页应用中一般不会去刷新页面,因为刷新之后页面中的vuex数据就不见了. 其次,我们也知道一般情况下,url变更的时候,比如指定loca ...
- Docker扩展.md
逻辑卷 Volume 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数 ...
- 死磕salt系列-salt 配置文件管理
SLS是Salt State系统的核心,用来描述系统的目标状态,使用YAML语言书写.被用作配置文件管理. SLS文件 sls配置文件分为两种类型 top.sls 这是所有配置文件的入口 sls 这是 ...
- 贪心——HDU-5969 最大的位或
HDU-5969:http://acm.hdu.edu.cn/showproblem.php?pid=5969 一开始也是分了类,觉得要两种情况,l 与 r 位数相同与不同的情况,仔细想一下,可以一起 ...
- HTTPS科普扫盲
为什么需要HTTPS HTTP是明文传输的,也就意味着,介于发送端.接收端中间的任意节点都可以知道你们传输的内容是什么.这些节点可能是路由器.代理等. 举个最常见的例子,用户登陆.用户输入账号,密码, ...
- Linux 启动进程结束进程通用代码
linux启动springboot项目 start.sh #!/bin/sh rm -f tpid nohup java -jar restDate--SNAPSHOT.jar --spring.pr ...
- Angular动态表单生成(一)
好久不写博客了,手都生了,趁着最近老大让我研究动态表单生成的时机,撸一发博客~~ 开源项目比较 老大丢给我了两个比较不错的开源的动态表单生成工具,这两个项目在github上的star数量基本持平: h ...