虚拟文件系统VFS-片段一
文件系统类型
基于磁盘的文件系统
如FAT、EXT4
虚拟文件系统
如proc
网络文件系统
顾名思义,网络文件系统还将网络通信封装起来,这意味可以直接通过通信访问另一台设备的文件系统。
man fs # 查看文件系统,其实这里只是内存中使用的inode,底层介质上的inode内容会更少
文件系统基本概念
文件描述符
对于一个用户进程来说,一个文件由一个fd整数进行标识。两个用户进程,可以使用相同的fd整数,但是不会指向相同的文件,这是由于(struct file)唯一标识文件。task_strcut包含了一个成员,其中包含了所有打开的文件。
inode
内核处理文件的关键就是inode,inode中包括文件(目录)的元数据(访问权限、上次修改日期)、指向文件数据的指针等,但是并不包括文件名。假如访问/usr/bin/cat,查找从inode开始,表示根目录/,该目录由一个inode进行标记,其中数据段存的是根目录下的各个目录项,每个目录项由两个元素组成
- inode的编号
- 文件或目录的名称
系统中所有的inode都有一个编号,唯一标识一个inode,文件名和inode之间的关系通过编号建立。不通过名字标识inode的原因是,这样复用率高,更加高效。
每个修改过的inode会被记录在超级块列表中,被称为脏inode,内核会定期扫描列表,将修改写回底层硬件。
链接
链接可以认为是一种目录项,用于建立两种文件系统对象之间的联系,有两种类型的连接,符号链接与硬链接。
每个符号链接都由一个特定的inode进行标识,其中数据端包含了一个字符串,标识目标文件的路径。
硬链接作为一个inode,是使用一个现存的inode编号,此时同时绑定在这个编号上的文件,会无法区分文件是原来的,还是后来建立的。那么此时假如要删除硬链接会删去inode以及相关信息,这样会导致另一个文件也无法访问。
解决方案是增加一个计数器,但内核仍然无法区分删除的是硬链接还是原文件,但是可以保证一个文件删除之后,计数器减1,从而不会导致另一个文件因为硬链接释放inode和相关文件信息而无法进行访问,计数器减为0时才删除inode。
思考:为什么要设计硬链接和符号链接?
接口
每一个文件都要通过open\openat打开,成功之后内核会返回一个整数表示fd,这个fd时大于2的,这是因为0表示标准输入 、1表示标准输出、2表示标准错误输出。
使用fd作为通信手段的方式包括:
- 字符和块设备(/dev,真正的文件)
- 进程之间的管道
- 所有网络协议的套接字
- 用于交互输入和输出的终端
超级块
超级块中包含文件系统的关键信息(长度,大小、inode数量和空闲数量等),以及读、写、操作inode的函数指针,内核建立了一个链表,维护所有活动文件系统的超级块实例。
虚拟文件系统(VFS)
虚拟文件的系统(内核)的出现是为了解决底层文件系统无法向上提供统一调用的问题,所以通过VFS做的抽象层提供统一接口(系统调用)进行访问,而不用关心底层的细节。VFS提供了一种机制统一不同的文件系统的inode操作。目前来说,ubuntu已经有EXT4文件系统。在此情况下,内核可以支持多种文件系统包括FAT、NFS、proc等实现。VFS能够管理文件、目录以及文件对象。
df -Th # 查看磁盘文件系统
VFS主要由两部分组成
文件(inode操作、文件操作作用于文件的数据内容)
VFS 层定义了通用
inode结构,有些文件系统如FAT是没有inode结构的,VFS运行时,会自动加载inode相关信息。以及通用的inode操作集合,称为inode_operations,它包括了对inode进行操作的函数指针,如打开、读取、写入、释放等每个inode都有一个i_list成员,存储VFSinode。文件操作集合结构为
struct file_operations包括read\write\aio_read\aio_write\mmap\open\poll\writev\readv\pen\等系统调用,值得一提select/poll系统调用都是poll实现的。文件系统(读取超级块)
VFS支持的底层文件系统通过一种内核特殊对象连接到VFS,该对象提供了一种读取超级块的方法。
VFS 定义了一系列的数据结构和操作,如
struct super_block(超级块,描述整个文件系统)。VFS有目录项缓存机制,能够达到快速访问此前查找操作的结果。该目录项由结构struct dentry建立。所有的dentry实例保存在一个散列表中,由一个hashtable实现,使用d_hash解决散列冲突问题。
VFS文件系统注册
VFS提供了两种操作mount和umount装载\未装载文件系统,每个装载的文件系统都会 有一个vfsmount结构。
mount # 查看文件系统装载情况
虚拟文件系统VFS-片段一的更多相关文章
- 虚拟文件系统(VFS)
原文链接:http://www.orlion.ga/1008/ linux在不同的文件系统之上做了一个抽象层,使得文件.目录.读写访问等概念都成为抽象层概念,这个抽象层被称为虚拟文件系统(VFS). ...
- 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解
http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...
- 虚拟文件系统VFS
Linux的文件系统是由虚拟文件系统作为媒介搭建起来的,虚拟文件系统VFS(Virtual File System)是Linux内核层实现的一种架构,为用户空间提供统一的文件操作接口.它在内核内部为不 ...
- Linux虚拟文件系统VFS解决
参考<Linux内核设计与实现> 虚拟文件系统(VFS)它是linux核心和详细I/O一个普通的访问接口之间的包装设备,通过这层界面,linux内核能够以同一的方式訪问各种I/O设备. 虚 ...
- linux文件系统体系结构 和 虚拟文件系统(VFS)
图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的 ...
- linux的虚拟文件系统VFS
虚拟文件系统(virtual file system),别名虚拟文件系统开关,是linux中的一个软件层,向用户空间提供文件系统操作接口. VFS包含的系统调用包括open(2).stat(2).re ...
- linux虚拟文件系统vfs
linux可以挂载不同的文件系统(EXT2,FAT,NTFS),用同一的样式呈现给用户,读写操作用起来都一样,这是怎样做到的呢? linux内核在各种不同的文件系统格式上做了一个抽象层,使得文件.目录 ...
- Linux虚拟文件系统(VFS)学习
虚拟文件系统(Virtual Filesystem)也可称之为虚拟文件系统转换(Virtual Filesystem Switch),是一个内核软件层,用来处理与Unix标准文件系统相关的全部系统调用 ...
- (转)虚拟文件系统(VFS)浅析
http://www.cnblogs.com/zsw-1993/p/5048144.html 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种 ...
- Linux虚拟文件系统–VFS简介
http://www.embeddedlinux.org.cn/emb-linux/file-system/201712/20-7907.html 导读 Linux中可以支持多种文件系统,而且支持各种 ...
随机推荐
- Linux 内核:设备驱动模型(5)平台设备驱动
Linux 内核:设备驱动模型(5)平台设备驱动 背景 我们已经大概熟悉了Linux Device Driver Model:知道了流程大概是怎么样的,为了加深对LDDM框架的理解,我们继续来看pla ...
- C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏
前言 今天大姚给大家分享一款由C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏:SeeSharpSnake. 项目特点 该仓库中的项目文件和脚本可以用多种不同的配置构建相同的游戏,每个配置生成的输出大 ...
- 《DNK210使用指南 -CanMV版 V1.0》第二章 Kendryte K210简介
第二章 Kendryte K210简介 1)实验平台:正点原子DNK210开发板 2)章节摘自[正点原子]DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail. ...
- 3.8折钜惠,瑞芯微RK3568J国产工业评估板“限时折扣”!
- 全志T113-i+玄铁HiFi4开发板硬件说明书(2)
前 言 本文档主要介绍开发板硬件接口资源以及设计注意事项等内容,测试板卡为全志T113-i+玄铁HiFi4开发板,由于篇幅问题,本篇文章共分为上下两集,点击账户可查看更多内容详情,开发问题欢迎留言,感 ...
- WOE编码与IV值
参考: WOE与IV值浅谈 机器学习-变量筛选之IV值和WOE 0. Introduction WOE (weight of evidence): 证据权重 IV (information value ...
- 合合TextIn - 大模型加速器
TextIn是合合信息旗下的智能文档处理平台,在智能文字识别领域深耕17年,致力于图像处理.模式识别.神经网络.深度学习.STR.NLP.知识图谱等人工智能领域研究.凭借行业领先的技术实力,为扫描全能 ...
- MakeSense标注指南
1.网址 https://www.makesense.ai/ 2.操作流程 2.1 导入 点击get started 点击drop images,上传图片 选择obeject detection 新建 ...
- Cush:从辞职自学编程到被 Apple、PriceTag推荐
名字:Cush 开发者 / 团队:ShaSha 平台:iOS.macOS 请简要介绍下这款产品 也许你听过记账可以帮助省钱,但总是浅尝辄止? 快试试 Cush!它精简了记账中所有复杂繁琐的步骤,简单精 ...
- Vue3 之 reactive、ref、toRef、toRefs 使用与区别,源码分析详细注释
目录 reactive.ref.toRef.toRefs 使用与区别 reactive ref 作用及用法 toRef 作用及用法 toRefs 作用及用法 ref,toRef,toRefs 源码实现 ...