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设备. 虚 ...
随机推荐
-
复选框checkbox选中个数限制
今天遇到一个问题:就是项目里有用到限制 checkbox框选中个数,看起来很简单,但是确实花了点时间才弄清楚,废话不多说,上代码 <!DOCTYPE html> <html lang ...
-
re正则表达式7_{}
curly brackets {} instead of one number, you can specify a range by writing a minimum,a comma,and a ...
-
将HTML5 Canvas的内容保存为图片
主要思想是借助Canvas自己的API - toDataURL()来实现,整个实现 HTML + JavaScript的代码很简单. 代码如下: <html> <meta http- ...
-
小米盒子连接老式电脑显示器(VGA接口)
家里闲置一台老式显示器,只有VGA接口,无HDMI高清接口; 小米盒子上有三个输出接口: 一个HDMI高清接口:HDMI接口输出的有音频信号和视频信号,现在买的电视机一般都有HDMI高清接口: 一个A ...
-
将图片序列保存为GIF文件
http://*.com/questions/11459568/issue-with-rebuilding-and-saving-gifs-using-tgifimage 将图 ...
-
uva11021 - Tribles(概率)
11021 - Tribles GRAVITATION, n.“The tendency of all bodies to approach one another with a strengthpr ...
-
Xamarin.Android
Xamarin.Android之使用百度地图起始篇 一.前言 如今跨平台开发层出不穷,而对于.NET而言时下最流行的当然还是Xamarin,不仅仅能够让我们在熟悉的Vs下利用C#开发,在对原生态类库的 ...
-
详解Docker的网络模式
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式:使用--net=host指定container模式:使用- ...
-
Android Studio生成签名安装包(Generate Signed APK)
一 打开构建对话框. 二 创建新的密钥库(key store) 可以选择已创建的密钥库,也可以选择创建新的密钥库. 创建完成后,自动导入. 三 选择签名类型. 如果不选,会提示错误. 这里将新旧两种签 ...
-
设置网站URL启动
当新建一个MVC WEB程序 当你打开一个视图按F5运行 这时候并且不能政策运行会出现与个错误 无法找到资源. 这时候站点的默认设置是 把这个个默认设置更改成 红色框框的地方为修改点 你以为这样就完了 ...