最近看到几篇介绍VFS的韩语文章,觉得里面的众多绘图清晰易懂,冒昧将其摘选出来,分享给大家,希望大家可以从更多的角度去理解和认识VFS的构成和原理。原文地址位于 https://m.blog.naver.com/eldkrpdla121/220706907723,对应PPT链接在Ch 12 Virtual File System (VFS)。

《Linux文件系统概述:硬盘驱动>通用块设备层>文件系统>虚拟文件系统(VFS)》

《Linux内核:一文读懂文件系统、缓冲区高速缓存和块设备、超级块》

《Linux虚拟文件系统概述》

正文

VFS的基本接口大家应该都比较熟悉了,比如open(), read(), write(), 而要知道这些基本操作的内核实现,得首先了解下构成VFS子系统的基础数据结构

superblockinode都位于磁盘,它们分别是「文件系统」和「单个文件」的control block(称为"meta data"),同时inode还记录了文件在磁盘上的data block的分布(即"user data")。

【进程和文件

当进程试图访问磁盘上的一个文件时(比如执行open系统调用),需要将该文件的磁盘inode中的一部分信息拷贝到内存中,这部分内容进而构成了内存中的"struct inode"结构体。

之后,通过这个内存中的inode对象,就可以获取到所需访问的文件的内容。

那如果有多个进程访问磁盘上的同一个文件呢?

这就引出了另一重要的结构体"struct file","inode"对应磁盘上的文件实体,是全局的,而"file"记录的是进程和文件之间的关联,比如访问文件的位置(即"offset"),因而是进程私有的。

有了这一关联,进程就可以通过file table,访问到文件的meta data,进而获取到文件的user data,实现对数据的读写等操作(比如readwrite系统调用)。

在描述进程的"task_struct"结构体中,由"files"域指向其打开文件的文件描述符表,由"fs"域指向其执行操作所在的目录和文件系统挂载点等相关信息。

【快速访问】

假设现在一个进程要在"/a/b/c/d/"目录下新建一个名称为"e"的文件,那么路径查找的过程大致如下:

在VFS的概念里,「目录」被视作一种特殊的文件,也具有对应的inode对象。因而在整个查找过程中,需要将多达6个inode的内容拷贝到内存。

如果能将之前获取的“路径结果”信息暂存起来(以dentry cache的形式),将大大加快路径访问的速度。

小结

可见,在构成VFS基石的四个数据结构中,"superblock"和"inode"是本就驻留在磁盘上(使用时会将其部分信息拷贝到内存中),而"file"和"dentry"则是为了文件访问的需要,在内存中诞生的,并不对应磁盘上的任何实体。

《Linux文件系统概述:硬盘驱动>通用块设备层>文件系统>虚拟文件系统(VFS)》

《Linux内核:一文读懂文件系统、缓冲区高速缓存和块设备、超级块》

《Linux虚拟文件系统概述》

《Linux文件系统-虚拟文件系统(VFS),与文件系统相关的数据结构》韩文

Linux虚拟文件系统VFS的相关数据结构和操作相关推荐

  1. linux 文件系统 vfs,linux虚拟文件系统vfs

    <操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...

  2. Linux虚拟文件系统vfs及proc详解

    /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用.可以使用的文件随系统配置的变化而变化.命令procinfo能够显示基于其中某些文件的多种系统信 ...

  3. Linux虚拟文件系统vfs与文件操作始末

    虚拟文件系统(vfs)是Linux内核的子系统,其设计目的是对用户层(系统调用)屏蔽底层(各特定文件系统)实现的复杂性,对底层提供统一的接口与数据结构,使得能衔接各个特定文件系统(如ext2.ext3 ...

  4. 理解linux虚拟文件系统VFS - 概述

    当前,除了Linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统,比如reiserfs, xfs, Windows的vfat NTFS,网络文件系统nfs 以及flash 文件系统 ...

  5. 理解Linux虚拟文件系统VFS

    当前,除了linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统,比如reiserfs, xfs, Windows的vfat NTFS,网络文件系统nfs 以及flash 文件系统 ...

  6. Linux虚拟文件系统(VFS)

    文件系统是操作系统里非常重要的一个子系统.虚拟文件系统,顾名思义.它为应用程序员提供一层抽象,屏蔽底层各种文件系统的差异.Linux的文件系统采用面向对象的方式设计,这使得Linux的文件系统非常容易 ...

  7. linux虚拟文件系统vfs

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

  8. Linux虚拟文件系统:数据结构与文件系统注册、文件打开读写

    数据结构 超级块 - super_block 索引节点 - inode 目录项 - dentry 文件结构 - file 虚拟文件系统实现 注册文件系统 - register_filesystem 打 ...

  9. Linux 文件系统原理 / 虚拟文件系统VFS

    Linux 文件系统原理 / 虚拟文件系统VFS 虚拟文件系统 VFS VFS 定义 VFS 的对象演绎 超级块 super_block 索引节点 inode 目录项 dentry 文件 file 文 ...

最新文章

  1. 深度学习模型压缩与加速综述
  2. 需要注意的小问题------闹的笑话
  3. java dump分析工具_Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化...
  4. C/C++经典面试题
  5. arcgis选出点规定范围的面
  6. flowable实战(十一)flowable 删除数据库表先后顺序
  7. 【三维深度学习】多视角场景点云重建模型PointMVS
  8. 关于一些电脑使用的小技巧
  9. 让数据库操作变成非阻塞的
  10. linux hook 任意内核函数,linux内核中的hook函数详解
  11. 边工作边刷题:70天一遍leetcode: day 26
  12. prince2 成功的项目管理_公开课受控环境下的项目管理PRINCE2认证培训(杭州)
  13. uniapp 复制 粘贴功能
  14. 140809暑期培训
  15. Imagination和浙江大学信电学院签署合作协议,校企共创大学课程新篇章
  16. 软件测试工具有哪些?--最全最新的软件测试工具下载地址都在这里,错过绝对后悔
  17. Java批量高效压缩支持加解密支持所有压缩格式(Zip/7z/rar)
  18. 把图片转换成视频-ffmpeg
  19. 安装npm cnpm方法
  20. R语言中dim函数_R语言中的方差分析方法汇总

热门文章

  1. html5 websocket插件,html5实现的WebSocket一个小例子(附代码)
  2. mysql中的extra是什么意思_1130mysql explain中的type列含义和extra列的含义
  3. 【UML关系(泛化、实现、依赖、关联(聚合,组合))】
  4. codevs1700 施工方案第二季
  5. 【数据分析学习】Pandas学习记录
  6. CodeFirst Update-Database 出现对象'DF__**__**__**' 依赖于 列'**'。
  7. Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
  8. wp实例开发精品文章源码推荐(8.20)
  9. 数据库取图片拼接ImageUrl
  10. 别以为用留言簿留言骂我我就查不出来!哼~