Linux虚拟文件系统–VFS简介
http://www.embeddedlinux.org.cn/emb-linux/file-system/201712/20-7907.html
导读 | Linux中可以支持多种文件系统,而且支持各种文件系统之间相互访问,这是因为有一个虚拟文件系统。虚拟文件系统也叫虚拟文件系统转换(Virtual Filesystem Switch,简称VFS),之所以说它虚拟,是因为该文件系统的各种数据结构都是随时建立或删除的,在盘上并不永久存在,只能存放在内存中。也就是说,只有VFS是无法工作的,因为它不是真正的文件系统。 |
我们把各操作系统中的实际文件系统叫做逻辑文件系统,VFS是Linux 内核与这些逻辑文件系统的一个接口,它们之间的关系。
VFS是Linux 核心的一部分,其他内核子系统与VFS打交道,VFS又管理其他逻辑文件系统。所以VFS是文件系统和Linux 内核的接口,VFS以统一数据结构管理各种逻辑文件系统,接受用户层对文件系统的各种操作。
1. 向上,对应用层提供一个标准的文件操作接口;
2. 对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上;
3. VFS内部则通过一系列高效的管理机制,比如inode cache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能;
4. 此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单。
VFS为底层文件系统提供了抽象,有两种策略提供这种抽象。
1. 提供一个最小的通用模型,使得这个模型支持的功能是所有文件系统的最小交集
2. 提供一个尽量大的通用模型,使得这个模型包含所有文件系统功能的合集。
Linux采用第二种策略来实现VFS,因此VFS封装了底层文件系统的所有功能和抽象,VFS负责把应用层的请求转发给特定的文件系统。
在处理文件时,应用空间和内核空间使用的对象是不同的。对应用程序来说,文件描述符用来表示一个文件,这个文件描述符是打开文件时内核分配给这个文件的一个整数,注意,这个文件描述符只在本进程内有效;而对于内核来说,则使用一个inode来表示一个文件,这个inode可能对应着应用层多个进程内的多个文件描述符。
最新文章
- NodeJS POST Request Over JSON-RPC
- 提高PHP代码质量的36个技巧
- dynamic_cast 和 static_cast 隐式类型转换的区别
- 表单 - Validatebox - 表单参数校验
- 屠龙之路_大杀技之倚天屠龙_TenthDay
- JeeSite环境搭建及运行和打包(master20161117)
- iOS 界面调试利器Reveal
- iOS:FFmpeg视频播放和直播框架
- 【待整理】PS切图基础教程
- Java中的数组排序
- Android RadioGroup/RadioButton
- ionic入门之基本布局
- nginx+fastcgi php 使用file_get_contents、curl、fopen读取localhost本站点.php异常的情况
- dede文章插入分页符不起作用,编辑器中出现分页符,导致文章显示不全
- mac os 10.12 Sierra 连接 惠普 M1136 MFP 打印机,通过 samba 协议,安装驱动,连接打印机
- Confluence 6 附件存储文件系统的分级
- js--基础(对象、数组、函数、if语句、while语句、do while语句、continue语句、break语句)
- 安卓开发_数据存储技术_sqlite
- [UE4]C++实现动态加载的问题:LoadClass<;T>;()和LoadObject<;T>;() 及 静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
- [A,D]=solverAdini(node,elem,bdEdge,h1,h2)
热门文章
- 论文《learning to link with wikipedia》
- gitlab(五):一个开发流程实例
- 【5min+】 设计模式的迷惑?Provider vs Factory
- MySQL索引那些事
- JS对象与字符串相互转换
- vue中阻止事件穿透的方法
- js中的innerHTML,innerText,value的区别
- GNU make doc - 6.6 追加变量值
- R语言入门:向量的运算
- 【React Native错误集】* What went wrong: Execution failed for task &#39;:app:installDebug&#39;.