编者注:在分析完 Linux inode 基础概念 之后,让我们看下inode在内存中对应的文件系统抽象VFS,然后分析下关于 磁盘操作 中Page Cache的回写策略。...VFS(虚拟文件系统层) VFS是虚拟文件系统层(进程与文件系统之间的抽象层),与它相关的数据结构只存在于物理内存当中。...其目的是屏蔽下层具体文件系统操作的差异,为上层的操作提供一个统一接口,正是由于VFS的存在,Linux中允许多个不同的文件系统共存。...VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的Inode、各种操作函数的转换入口等。...Linux中VFS依靠四个主要的数据结构来描述其结构信息,分别为超级块、索引结点、目录项和文件对象,这些数据结构大都会与磁盘上的对应上。 超级块(Super Block):超级块对象表示一个文件系统。
VFS(Virtual File System)和容器(Containers)是两种在现代计算中非常重要的技术,它们在不同的场景和应用中发挥着关键作用。...以下是VFS和容器的一些实际应用:VFS(虚拟文件系统)的实际应用:操作系统核心组件:VFS是大多数现代操作系统(如Linux、Unix)的核心组件,它提供了一个统一的接口来访问不同类型的文件系统。...文件系统抽象:通过VFS,操作系统可以透明地处理本地文件系统、网络文件系统(如NFS、SMB)以及其他特殊文件系统(如procfs、sysfs)。...设备驱动程序:VFS允许设备驱动程序以文件的形式存在,使得设备可以像文件一样被访问和操作。云存储集成:VFS可以用于集成云存储服务,使得远程存储资源可以像本地磁盘一样被操作系统和应用程序访问。...文件系统过滤和安全:VFS可以用于实现文件系统级别的安全策略和过滤,例如,通过VFS层实现的加密文件系统。
继上一篇文章: http://yehe.isd.com/column/support-plan/article-edit/93709 四、file结构体 文件对...
文件系统的注册 这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS 中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。...比如在笔者的 Linux 机器下就注册有 "rootfs"、"proc"、"ext2"、"sockfs" 等十几种文件系统。...3.1 文件系统的数据结构 在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示(include/linux/fs.h): 1 struct file_system_type { 2...mount:这个函数非常重要,它VFS能够和底层文件系统交互的起始点,该函数是不能放在super_block结构中的,因为super_block是在get_sb执行之后才能建立的。...的关系太过密切,如果说 ext2/ext3 是 Linux 的本土文件系统,那么 rootfs 文件系统则是 VFS 存在的基础。
最近挂载了N多的文件系统,大致了不同文件系统的相应特性及挂载方式,却还是对Linux的文件系统没有从源码方面去了解。不求甚解确实不好不好。...于是借鉴一些大牛的博客及自己的理解,总结了博客系列: 一、VFS是什么: VFS是Linux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(Virtual Filesystem Switch),是一种软件机制...等); (2)通过系统调用到VFS到实际文件系统的操作。...二、文件系统种类: (1)基于磁盘的文件系统; (2)网络文件系统(NFS); (3)伪文件系统(sysfs、proc); VFS 目录树结构: ?...Reference: https://www.ibm.com/developerworks/cn/linux/l-vfs/ 在链接中,文章选用的是Linux2.4.20,我选择Linux3.4.2来分析源码
前言 为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?...甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。...VFS 是什么 虚拟文件系统,简称 VFS(Virtual Filesystem),是一个内核软件层。...VFS 的作用 概括地讲,VFS 有两个作用: 处理与 Unix 标准文件系统相关的所有系统调用 为各种文件系统提供一个通用的接口 VFS 支持的文件系统类型 以下列出以下常见的文件系统类型,本文暂时不对其进行详细分析...因此,Linux 有一句经典的话:一切皆文件。 关键数据结构介绍 Linux VFS 抽象出 4 种类型的数据结构,实现将不同类型的文件系统挂载到目录结构中。
例如:open一个文件/home/xxx/yyy.txt,那么/、home、xxx、yyy.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的inode,那么沿着目录项进行操作就可以找到最终的文件...d_op:目录项操作 d_sb:这个目录项所属的文件系统的超级块 d_vfs_flags:一些标志 d_fsdata:文件系统私有数据 d_iname:存放短的文件名 一些解释:一个有效的dentry结构必定有一个
article/1053842 二、inode结构体:(转自http://blog.csdn.net/shanshanpt/article/details/38943731) inode结构体在(include/linux...( 注意数据分成:元数据+数据本身 ) 同时注意:inode有两种,一种是VFS的inode,一种是具体文件系统的inode。前者在内存中,后者在磁盘中。...其实在Linux内部的时候,访问文件都是通过inode号来进行的,所谓文件名仅仅是给用户容易使用的。
这个 wiki 上列出了很多 Linux 的文件系统类型。...对于这些文件系统,Linux 做了一层抽象就是 VFS 虚拟文件系统,这个其实就是软件设计必然的过程,对于不同的实现规定统一的接口,也就是定义与实现分离,如果想要自己实现一个文件系统的话只要实现一个满足...VFS 层的文件系统就能加入到内核当中。...下面就开始剖析 VFS 的主要内容。...dentry 和 inode 的关系是多对一的,即多个 dentry 可以指向同一个文件,这和 linux 当中的文件链接有关。
linux虚拟文件系统四大对象: 1)超级块(super block) 2)索引节点(inode) 3)目录项(dentry) 4)文件对象(file) 现在先介绍第一个 一、super_block的含义...worse than a second */ 60 u32 s_time_gran; 61 62 /* 63 * The next field is for VFS...You had been warned. 65 */ 66 struct mutex s_vfs_rename_mutex; /* Kludge */ 67 68 /*...,这个list上边的就是所有的在linux上记录的文件系统。...(同一类型的文件系统通过这个子墩将所有的super_block连接起来) s_dquot:磁盘限额相关选项 Reference: http://www.linuxidc.com/Linux/2011-02
VFS(虚拟文件系统)作为核心插件之一,通过实现VFSPlugin接口无缝集成到微内核中,提供分布式文件管理能力。...核心服务模块设计2.1 客户端服务(VFSClientService)设计目的:作为前端应用与VFS系统的交互入口,提供面向业务的高层API,封装底层复杂逻辑。...磁盘服务API2.1 文件夹操作API路径请求方法描述参数返回类型/api/vfs/disk/MkDirPOST创建目录path: StringResultModel/api/vfs/disk...无论是构建企业网盘、内容管理系统,还是需要处理海量文件的大数据平台,OneCode-VFS都能提供可靠、高效的文件管理解决方案。...通过本速查手册,开发者可以快速掌握VFS API的使用方法,加速应用集成过程。
其实这背后藏着 Linux 最精妙的设计之一 —— 文件系统与设备驱动的协同工作。...于是,Linux内核引入了一位伟大的翻译官和调度员——VFS(Virtual File System,虚拟文件系统)。...Linux 的哲学体现 这种设计背后藏着 Linux 的核心哲学:一切皆文件。...七、关键概念图 Linux文件系统与设备驱动协作 ├── 核心纽带:VFS(虚拟文件系统) │ ├── 作用:统一接口,屏蔽差异 │ ├── 对接对象:文件系统、设备驱动、用户程序 │ └─...驱动执行实际硬件操作 八、看懂它们,就看懂了 Linux 的半壁江山 理解文件系统与设备驱动的关系,以及file、inode结构体的作用,相当于掌握了 Linux 内核的 "任督二脉"。
1、VFS结构体定义在文件components\fs\vfs\fs_operations.h中定义了VFS虚拟文件系统操作涉及的结构体。...(*Stat)(const char *path, struct stat *buf); int (*Ftruncate)(int fd, off_t length); };2、VFS...重要的内部全局变量在文件components\fs\vfs\los_fs.c中有2个全局变量比较重要,⑴处定义的数组g_fsmap维护文件系统类型映射信息,数组大小为2,支持"fat"和"littlefs...相关的操作接口在之前的系列文章《鸿蒙轻内核M核源码分析系列十九 Musl LibC》中介绍了相关的接口,那些接口会调用VFS文件系统中操作接口。...的结构体和全局变量,分析了下VFS文件操作接口,对于随机数文件也进行了分析。
基本概念 | 官方定义VFS(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层,为用户提供统一的类Unix文件操作接口。...而通过在系统中添加VFS层,提供统一的抽象接口,屏蔽了底层异构类型的文件系统的差异,使得访问文件系统的系统调用不用关心底层的存储介质和文件系统类型,提高开发效率。...OpenHarmony内核中,VFS框架是通过在内存中的树结构来实现的,树的每个结点都是一个Vnode结构体,父子结点的关系以PathCache结构体保存。VFS最主要的两个功能是:查找节点。...三大操作接口VFS层通过函数指针的形式,将统一调用按照不同的文件系统类型,分发到不同文件系统中进行底层操作。...、File结构体中,实现VFS层对下访问。
resolv.conf,将nameserver地址改为: 114.114.114.114 将yaffs2源码来配置到内核里(使内核支持yaffs2) vi /work/nfs_root/yaffs2/README-linux.../patch-ker.sh c m /work/system/linux-3.4.2//c:将yffs2文件夹copy到linux-3.4.2/fs里, m:指定多版本 /*通过menuconfig...,来使内核支持yaffs2*/ cd /work/system/linux-3.4.2/ make menuconfig 搜索yaffs,找到位于: -> File systems ->...然后进入yaffs2/yaffs_vfs.c,第1958行: (linux下显示的是yaffs_vfs.c,vi可以打开yaffs_vfs.c。...但是在si工程中没有找到yaffs_vfs.c,所以从ubuntu中拷贝一份yaffs_vfs.c添加到si中。) ?
文章试图从一个比较高的角度来解释Linux 下的 VFS 文件系统机制。 1.摘要 本 文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。...相对来说,VFS 部分的代码比较繁琐复杂,希望读者在阅读完本文之后,能对 Linux 下的 VFS整体运作机制有个清楚的理解。...2.VFS 概述 VFS 是一种软件机制,也许称它为 Linux的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中。...所以在每次系统初始化期间,Linux 都首先要在内存当中构造一棵VFS 的目录树(在 Linux 的源代码里称之为 namespace),实际上便是在内存中建立相应的数据结构。...VFS 目录树在Linux 的文件系统模块中是个很重要的概念,希望读者不要将其与实际文件系统目录树混淆,在笔者看来,VFS中的各目录其主要用途是用来提供实际文件系统的挂载点,当然在 VFS中也会涉及到文件级的操作
Linux 2上吧。...BPF 是在 1997 年首次被引入 Linux 的,Linux 内核中的报文过滤机制其实是有自己的名字的:Linux Socket Filter,简称 LSF。...1 vfs_statfs 96 vfs_writev 108 vfs_getxattr...405 vfs_get_link 1895 vfs_fstat 3814 vfs_write...20974 vfs_fstatat 151758 vfs_getattr 168803 vfs_getattr_nosec
编者注:cgroup从2.6.4引入linux内核主线,目前默认已启用该特性。...Linux下的cgroups的数据结构图示如下: ?...Linux内核有一个很强大的模块叫 VFS (Virtual File System)。VFS 能够把具体文件系统的细节隐藏起来,给用户态进程提供一个统一的文件系统 API 接口。...通过cgroups适配VFS,用户可以使用VFS接口来操作cgroup功能。 VFS 是一个内核抽象层(通用文件模型),能够隐藏具体文件系统的实现细节,从而给用户态进程提供一套统一的 API 接口。...VFS 使用了一种通用文件系统的设计,具体的文件系统只要实现了 VFS 的设计接口,就能够注册到 VFS 中,从而使内核可以读写这种文件系统。
对于我们的读取文件的需求,系统调用需要依赖 VFS 内核组件。...1.3 VFS 虚拟文件系统 VFS 的思想就是在 Linux 上抽象一个通用的文件系统模型,对我们开发人员或者是用户提供一组通用的接口,让我们不用 care 具体文件系统的实现。...VFS 提供的核心数据结构有四个,它们定义在内核源代码的 include/linux/fs.h 和 include/linux/dcache.h 中。...因为每一个分区都可以单独进行格式化,所以一台 Linux 机器下可以同时使用多个不同的文件系统。 文件系统里提供对 VFS 的具体实现。除了数据结构,每个文件系统还会定义自己的实际操作函数。...在其中包含的VFS中定义的 read 函数的具体实现:do_sync_read 和 do_sync_write。
三、通用存储组件 wechat-vfs 通用存储组件 wechat-vfs,全称是 WeChat Virtual File System。组件的首要设计目标就是实现高效高可用的数据迁移能力。 1....因此 VFS(wechat-vfs 后面简称 VFS) 考虑到这些点,提供了一套解决方案,基本接管了文件迁移方面的一切工作。方案具体是如何设计的? 首先要路径抽象化。...VFS 通过注册映射关系的方式支持不同路径访问同一个文件。...业务唯一要做的,就是(通过查找替换)将文件访问的接口换成 VFS 的等效接口。 然后,业务接入之后,迁移的事情就集中给 VFS 这边来实现了。...业务先给 VFS 注册迁移源(可以多个)和迁移目标(一个),VFS 将自动完成下面工作: 应用启动(准确来说是VFS准备阶段)时,先尝试能瞬间完成的方式——直接移动目录,如果成功了,迁移就完成了; 若不行