话说文件系统——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设备. 虚 ...
随机推荐
- VISO画UML用例图添加Include关系的方法
VISO画UML用例图添加Include关系的方法 今天用Microsoft Visio 2007画用例图时,发现visio UML用例里面找不到include关系,查到一个可行的解决办法: 1)创 ...
- iso、ios、osi的区别
ISO 国际标准化组织(International Organization for Standardization)简称ISO,是一个全球性的非政府组织,是国际标准化领域中一个十分重要的组织.IS ...
- 搭建spring boot+elasticsearch+activemq服务
目前时间是:2017-01-24 本文不涉及activemq的安装 需求 activemq实时传递数据至服务 elasticsearch做索引 对外开放查询接口 完成全文检索 环境 jdk:1.8 s ...
- 【重构.改善既有代码的设计】14、总结&读后感
14.总结 首先,这是一本太老的书,很多观点已经被固化或者过时了.但核心观点没有问题,虽然大多数观点已经被认为是理所当然的事情了. 重构的定义 重构分几种: 1.狭义的代码重构 就是本书讲的, ...
- fzu_oop_east 第二次作业
这次有四题: 题目1:(这题本身没难度,就是听说格式比较坑,好像) 代码: #include<iostream> #include<cstdio> using namespac ...
- BZOJ 1295 最长距离 BFS+枚举
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1295 题目大意: windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有 ...
- BZOJ 1050 旅行comf 并查集+枚举下界
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 题目大意: 给你一个无向图,N(N<=500)个顶点, M(M<=5 ...
- python 中的Array,Value及内存共享
官网文档的例子 from multiprocessing import Process, Value, Array def f(n, a): n.value = 3.1415927 for i in ...
- Mysql不带条件更新报错
执行命令SET SQL_SAFE_UPDATES = 0;修改下数据库模式即可: 恢复安全模式:SET SQL_SAFE_UPDATES = 1;
- Guava包学习--EventBus
之前没用过这个EventBus,然后看了一下EventBus的源码也没看明白,(-__-)b.反正大概就是弄一个优雅的方式实现了观察者模式吧.慢慢深入学习一下. 观察者模式其实就是生产者消费者的一个变 ...