文件系统类型

  • 基于磁盘的文件系统

    如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主要由两部分组成

  1. 文件(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实现的。

  2. 文件系统(读取超级块)

    VFS支持的底层文件系统通过一种内核特殊对象连接到VFS,该对象提供了一种读取超级块的方法。

    VFS 定义了一系列的数据结构和操作,如 struct super_block(超级块,描述整个文件系统)。VFS有目录项缓存机制,能够达到快速访问此前查找操作的结果。该目录项由结构struct dentry建立。所有的dentry实例保存在一个散列表中,由一个hashtable实现,使用d_hash解决散列冲突问题。

VFS文件系统注册

VFS提供了两种操作mount和umount装载\未装载文件系统,每个装载的文件系统都会 有一个vfsmount结构。

mount # 查看文件系统装载情况

虚拟文件系统VFS-片段一的更多相关文章

  1. 虚拟文件系统(VFS)

    原文链接:http://www.orlion.ga/1008/ linux在不同的文件系统之上做了一个抽象层,使得文件.目录.读写访问等概念都成为抽象层概念,这个抽象层被称为虚拟文件系统(VFS). ...

  2. 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解

    http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...

  3. 虚拟文件系统VFS

    Linux的文件系统是由虚拟文件系统作为媒介搭建起来的,虚拟文件系统VFS(Virtual File System)是Linux内核层实现的一种架构,为用户空间提供统一的文件操作接口.它在内核内部为不 ...

  4. Linux虚拟文件系统VFS解决

    参考<Linux内核设计与实现> 虚拟文件系统(VFS)它是linux核心和详细I/O一个普通的访问接口之间的包装设备,通过这层界面,linux内核能够以同一的方式訪问各种I/O设备. 虚 ...

  5. linux文件系统体系结构 和 虚拟文件系统(VFS)

    图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的 ...

  6. linux的虚拟文件系统VFS

    虚拟文件系统(virtual file system),别名虚拟文件系统开关,是linux中的一个软件层,向用户空间提供文件系统操作接口. VFS包含的系统调用包括open(2).stat(2).re ...

  7. linux虚拟文件系统vfs

    linux可以挂载不同的文件系统(EXT2,FAT,NTFS),用同一的样式呈现给用户,读写操作用起来都一样,这是怎样做到的呢? linux内核在各种不同的文件系统格式上做了一个抽象层,使得文件.目录 ...

  8. Linux虚拟文件系统(VFS)学习

    虚拟文件系统(Virtual Filesystem)也可称之为虚拟文件系统转换(Virtual Filesystem Switch),是一个内核软件层,用来处理与Unix标准文件系统相关的全部系统调用 ...

  9. (转)虚拟文件系统(VFS)浅析

    http://www.cnblogs.com/zsw-1993/p/5048144.html 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种 ...

  10. Linux虚拟文件系统–VFS简介

    http://www.embeddedlinux.org.cn/emb-linux/file-system/201712/20-7907.html 导读 Linux中可以支持多种文件系统,而且支持各种 ...

随机推荐

  1. 深度学习领域的名词解释:SOTA、端到端模型、泛化、RLHF、涌现 ..

    SOTA (State-of-the-Art) 在深度学习领域,SOTA指的是"当前最高技术水平"或"最佳实践".它用来形容在特定任务或领域中性能最优的模型或方 ...

  2. java生成word的解决方案比较

    1.Jacob Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.通过Jacob实现了在Java平台上对微软Office的COM接口进行调用. 优点:调 ...

  3. yb课堂之实战登陆模块开发整合Json Web Token《十》

    开发登陆模块功能,并整合Json Web Token 开发登陆功能 LoginRequest.java UserMapper.xml  UserMapper.java UserService.java ...

  4. C#——接口

    先来看看微软官方对接口的定义与说明. 接口定义协定. 实现接口的类或结构必须遵循它的协定. 接口可以从多个基接口继承,类或结构可以实现多个接口. 接口可以包含方法.属性.事件和索引器. 接口本身不提供 ...

  5. 今天我们来聊Java IO模型,BIO、NIO、AIO三种常见IO模型

    一.写在开头 很久没更新喽,最近build哥一直在忙着工作,忙着写小说,都忘记学习自己的本职了,哈哈,不过现在正式回归! 我们继续学习Java的IO相关内容,之前我们了解到,所谓的IO(Input/O ...

  6. 原创软件 | 系统服务工具箱原创软件(587KB)--基于aardio开发的第一个程序

    1 系统服务工具箱简介 该软件是我使用aardio开发的第一个程序,它集成了多个系统常用的快捷键,无需记住各种命令就能快捷使用cmd管理员.计算机管理.控制面板.组策略.注册表.服务.任务管理.卸载程 ...

  7. AT_abc215_d 题解

    洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 给定 \(N\),\(M\) 及含有 \(N\) 个整数的序列 \(A\). 求 \( ...

  8. Django model 层之事务管理总结

    Django model 层之事务管理总结 by:授客 QQ:1033553122 实践环境 Python版本:python-3.4.0.amd64 下载地址:https://www.python.o ...

  9. Linux podman容器实验

    要求 1.登录到指定的镜像仓库拉取镜像 2.以普通用户contsvc运行 3.配置 systemd-journald 服务,要求永久保留日志数据(物理机,创建文件mkdir /var/log/jour ...

  10. IDL根据Landsat QA波段去云处理【代码】

    IDL根据Landsat QA波段去云处理[代码] ​ landsat QA波段(质量评估波段)是Landsat卫星影像数据中的一个特殊波段,他在Landsat5-9的每个产品中都存在.虽然我们常用的 ...