首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解Linux VFS和Page Cache

编者注:在分析完 Linux inode 基础概念 之后,让我们看下inode在内存中对应的文件系统抽象VFS,然后分析下关于 磁盘操作 中Page Cache的回写策略。...VFS(虚拟文件系统层) VFS是虚拟文件系统层(进程与文件系统之间的抽象层),与它相关的数据结构只存在于物理内存当中。...其目的是屏蔽下层具体文件系统操作的差异,为上层的操作提供一个统一接口,正是由于VFS的存在,Linux中允许多个不同的文件系统共存。...VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的Inode、各种操作函数的转换入口等。...LinuxVFS依靠四个主要的数据结构来描述其结构信息,分别为超级块、索引结点、目录项和文件对象,这些数据结构大都会与磁盘上的对应上。 超级块(Super Block):超级块对象表示一个文件系统。

2.9K21
您找到你想要的搜索结果了吗?
是的
没有找到

解析Linux中的VFS文件系统之文件系统的注册(二)

文件系统的注册 这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指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 存在的基础。

1.9K60

解析Linux中的VFS文件系统之文件系统的来源与简介(一)

最近挂载了N多的文件系统,大致了不同文件系统的相应特性及挂载方式,却还是对Linux的文件系统没有从源码方面去了解。不求甚解确实不好不好。...于是借鉴一些大牛的博客及自己的理解,总结了博客系列: 一、VFS是什么: VFSLinux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(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来分析源码

2.1K90

快速了解虚拟文件系统(VFS

前言 为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?...甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。...VFS 是什么 虚拟文件系统,简称 VFS(Virtual Filesystem),是一个内核软件层。...VFS 的作用 概括地讲,VFS 有两个作用: 处理与 Unix 标准文件系统相关的所有系统调用 为各种文件系统提供一个通用的接口 VFS 支持的文件系统类型 以下列出以下常见的文件系统类型,本文暂时不对其进行详细分析...因此,Linux 有一句经典的话:一切皆文件。 关键数据结构介绍 Linux VFS 抽象出 4 种类型的数据结构,实现将不同类型的文件系统挂载到目录结构中。

1.9K20

Linux内核设备驱动之虚拟文件系统笔记整理

/******************** * 虚拟文件系统VFS ********************/ (1)VFS介绍 虚拟文件系统VFS作为内核的子系统,为用户空间程序提供了文件系统的相关接口...a.调用模型 write(): 用户空间 –> sys_write(): VFS –> 文件系统的写方法: 文件系统 –> 物理介质 (2)VFS采用的主要对象 VFS采用了面向对象的思路,采用一组数据结构来代表通用的文件对象...对于不基于磁盘的文件系统,比如基于内存的文件系统sysfs,linux会在使用现场创建超级块并将其保存到内存中。 超级块的结构体为super_block,定义在。...dentry结构体定义在中,对应的目录项操作函数结构体dentry_operations也定义在中。...文件对象由file结构体表示,定义在中。file对象的操作函数结构体为file_operations,定义在中。

2.1K20

你所不知道的 wechat-vfs —— 浅谈 Android 应用数据存储方案设计

三、通用存储组件 wechat-vfs 通用存储组件 wechat-vfs,全称是 WeChat Virtual File System。组件的首要设计目标就是实现高效高可用的数据迁移能力。 1....因此 VFS(wechat-vfs 后面简称 VFS) 考虑到这些点,提供了一套解决方案,基本接管了文件迁移方面的一切工作。方案具体是如何设计的? 首先要路径抽象化。...VFS 通过注册映射关系的方式支持不同路径访问同一个文件。...业务唯一要做的,就是(通过查找替换)将文件访问的接口换成 VFS 的等效接口。 然后,业务接入之后,迁移的事情就集中给 VFS 这边来实现了。...业务先给 VFS 注册迁移源(可以多个)和迁移目标(一个),VFS 将自动完成下面工作: 应用启动(准确来说是VFS准备阶段)时,先尝试能瞬间完成的方式——直接移动目录,如果成功了,迁移就完成了; 若不行

3.2K70

Linux rootfs_hdfs shell命令

文章试图从一个比较高的角度来解释Linux 下的 VFS 文件系统机制。 1.摘要 本 文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。...相对来说,VFS 部分的代码比较繁琐复杂,希望读者在阅读完本文之后,能对 Linux 下的 VFS整体运作机制有个清楚的理解。...2.VFS 概述 VFS 是一种软件机制,也许称它为 Linux的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中。...所以在每次系统初始化期间,Linux 都首先要在内存当中构造一棵VFS 的目录树(在 Linux 的源代码里称之为 namespace),实际上便是在内存中建立相应的数据结构。...VFS 目录树在Linux 的文件系统模块中是个很重要的概念,希望读者不要将其与实际文件系统目录树混淆,在笔者看来,VFS中的各目录其主要用途是用来提供实际文件系统的挂载点,当然在 VFS中也会涉及到文件级的操作

84310

read 文件一个字节实际会发生多大的磁盘IO?

对于我们的读取文件的需求,系统调用需要依赖 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。

84330

文件系统考古4:如何支持多个文件系统

两个抽象概念 Steven 研究了文件系统的各种操作,决定将他们抽象为两个概念: vfs,虚拟文件系统,代表文件系统 vnode,虚拟 inode,代表文件 vfs,虚拟文件系统,它提供统一的接口,使操作系统可以以一致的方式访问不同的文件系统...它包含 struct *vnodeops 指针,作为 vfs 的一部分,有指针 struct *vfs 指向文件系统实例。...在 Linux 系统中 通过查看 Linux 内核源代码,我们可以找到 Kleiman 设计的总体结构,尽管 Linux 内核的复杂性和丰富性掩盖了其中大部分内容。...Linux 内核拥有丰富的文件系统类型,并且还添加了许多在 40 年前的 BSD 中不存在的功能。...我们可以在此处找到[文件对象](](https://github.com/torvalds/linux/blob/v6.3/include/linux/fs.h#L942C3-L981),struct

20330

read文件一个字节实际会发生多大的磁盘IO?

但通过这个IO栈我们发现,我们对Linux文件的IO的理解还是远远不够,还有好几个内核组件:IO引擎、VFS、PageCache、通用块管理层、IO调度层等模块我们并没有了解太多。...当然了IO引擎也需要VFS、通用块层等更底层的支持才能实现。在sync引擎的read函数里会进入VFS提供的read系统调用。 2. VFS虚拟文件系统 在内核层,第一个看到的是VFS。...VFS提供的核心数据结构有四个,它们定义在内核源代码的include/linux/fs.h和include/linux/dcache.h中。...围绕这这四个核心数据结构,VFS也都定义了一系列的操作方法。...现在我们再从头整体过一下读取文件的过程 lib里的read函数首先进入系统调用sys_read 在sys_read再进入VFS里的vfs_read、generic_file_read等函数 在vfs里的

33720
领券