首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏大内老A

    文件系统抽象的“文件系统

    IFileProvider对象构建了一个抽象文件系统,我们不仅可以利用它提供的统一API来读取各种类型的文件,还能及时监控目标文件的变化。 一、树形层次结构 IFileProvider对象为我们构建了一个具有层次化目录结构的文件系统。 由于IFileProvider是一个接口,所以由它构建的是一个抽象化的文件系统,这里所谓的目录和文件都是一个抽象的概念。 为了让读者朋友们对这个文件系统有一个大体认识,我们先来演示几个简单的实例。 文件系统管理的所有文件以目录的形式进行组织,一个IFileProvider对象可以视为针对一个根目录的映射。 我们一直在强调由IFileProvider结构构建的是一个抽象的具有目录结构的文件系统,具体文件的提供方式取决于对具体的IFileProvider对象是怎样一个类型。

    2K40发布于 2019-11-20
  • 来自专栏Linux内核那些事

    虚拟文件系统

    虚拟文件系统 为不同的文件系统定义了一套规范,各个文件系统必须按照 虚拟文件系统的规范 编写才能接入到 虚拟文件系统中。 虚拟文件系统抽象数据结构 Linux奉行了Unix的理念:一切皆文件,比如一个目录是一个文件,一个设备也是一个文件等,因而文件系统在Linux中占有非常重要的地位。 虚拟文件系统的实现 接下来我们分析一下虚拟文件系统的实现。 注册文件系统 Linux为了支持不同的文件系统而创造了虚拟文件系统虚拟文件系统更像一个规范(或者说接口),真实的文件系统需要实现虚拟文件系统的规范(接口)才能接入到Linux内核中。 这个方法由真实的文件系统提供,所以真实文件系统只需要把创建文件的方法挂载到 inode结构 上即可,虚拟文件系统不需要知道真实文件系统的实现过程,这就是虚拟文件系统可以支持多种文件系统的真正原因。

    2K30发布于 2020-08-25
  • 来自专栏「玩转云计算」

    Linux 虚拟文件系统

    虚拟文件系统介绍 Linux使用了虚拟文件系统(VFS,Virtual Filesystem,下文统称“虚拟文件系统”),它不是磁盘文件的组织格式,而是抽象出来的文件树的集合,它通过标准接口动态的向其中增加或移除对应的目录 虚拟文件系统支持以下归类的三种类型的文件系统: 磁盘文件系统,存储在本地磁盘、U盘、CDROM等的文件系统,它包含各种不同的文件系统格式,比如Windows NTFS、VFAT,BSD的UFS,CD的CD-ROM vfs.png 虚拟文件系统对象类型 虚拟文件系统,有四个主要对象类型: Superblock 表示特定加载的文件系统 Inode 表示特定的文件 Dentry 表示一个目录项,路径的一个组成部分 Dentry 为了方便查找,虚拟文件系统引入目录项的概念。每个Dentry代表路径中一个特定部分。对于“/bin/ls”、“/”、“bin”和“ls”都是目录项对象。 File 虚拟文件系统最后一个主要对象是文件对象,文件对象表示进程已打开的文件。如果我们站在用户空间的角度考虑虚拟文件系统 ,文件对象会首先进入我们的视野。

    2K51发布于 2021-01-31
  • 来自专栏龙进的专栏

    DragonOS虚拟文件系统概述

    本文已基于GPLv2协议发布在https://docs.dragonos.org/zh_CN/latest/kernel/filesystem/vfs/overview.html 简介   DragonOS的虚拟文件系统是内核中的一层适配器 同时对内核中的不同文件系统提供了统一的抽象。各种具体的文件系统可以挂载到VFS的框架之中。   与VFS相关的系统调用有open(), read(), write(), create()等。 dentry对象   dentry的全称为directory entry,是VFS中对于目录项的一种抽象数据结构。当读取具体文件系统时,将会由创建dentry对象。 inode是VFS提供的对文件对象的抽象。inode中的信息是从具体文件系统中读取而来,也可以被刷回具体的文件系统之中。并且,一个inode也可以被多个dentry所引用。    ,为文件系统创建超级块结构。

    72320编辑于 2022-10-31
  • 来自专栏LINUX阅码场

    VFS- 内核是如何抽象文件系统

    ,满足了内核文件系统的接口,他们都是文件系统的一种实现。 对于这些文件系统,Linux 做了一层抽象就是 VFS 虚拟文件系统,这个其实就是软件设计必然的过程,对于不同的实现规定统一的接口,也就是定义与实现分离,如果想要自己实现一个文件系统的话只要实现一个满足 所以其实内核的文件和我们普通理解的文件其实有点不一样,这里的文件更像是一个接口,只不过最初是从磁盘上的文件衍生过来的,最后抽象成了一种可以对接各种功能的接口。 下面就开始剖析 VFS 的主要内容。 对于文件系统来说挂载点是个很有意思的点,在内核当中挂载点用vfsmount表示,挂载点是文件系统之间的衔接部分,如果要添加一个新的文件系统势必要将文件系统挂载在某个目录下面使得文件系统生效,vfsmount 以上讲的就是整个内核当中 VFS 层的抽象,并没有牵涉到具体的文件系统,在下一篇博客我将会实现一个简单的文件系统,不就具体的代码分析,来熟悉这里提到的这些概念。

    2.1K30发布于 2019-06-04
  • 来自专栏存储内核技术交流

    ​聊聊内核虚拟文件系统

    什么是虚拟文件系统? linux会实现多种基于磁盘的文件系统,比如ext4/xfs等,为了支持不同的磁盘文件系统,且多个磁盘文件系统互相访问,Linux内核在用户进程和磁盘文件系统系统之间引入一个臭小抽象层,这个就是虚拟文件系统 虚拟文件(vfs)系统有什么作用? vfs一方面用来提供操作文件、目录以及其他对象的统一方法;另外一方面,它必须能够与各种给出具体磁盘文件系统的实现达成妥协。 文件系统分为哪些类型? 目前文件系统基本可以分为三类,第一类是基于磁盘的文件系统,例如xfs.第二类是内核虚拟文件系统,是一种使用应用程序与用户进程通信的方法,内核的proc文件系统就是典型实现;第三种是网络文件系统,计算机通过网络连接到本地计算机 dentry也也叫做目录项,用来建立文件名和inode之间的关联每个dentry实例形成网络层次关系,与文件系统的结构形成一定的映射关系。

    1.1K11编辑于 2022-08-17
  • 来自专栏存储内核技术交流

    Linux虚拟文件系统初探

    Linux内核使用工厂的设计模式抽象出实际文件系统统一接口,这个就是虚拟文件系统(VFS),根据应用程序调用虚拟文件系统接口,根据不同的文件系统类型(xfs/zfs/ext4)来调用实际文件系统的接口 VFS自身仅仅存在于内存,VFS自身定义了几个重要的数据结构:inode、dentry、super_block,通过这几个重要的结构将真实硬盘的文件系统抽象到内存,通过dentry、inode这几个对象来进行文件的读写操作 超级块代表了整个文件系统,对应文件系统自身的控制块结构。超级块保存文件系统设定文件块大小、超级块操作函数,同时文件系统中所有的inode都链接到超级块的表头。 超级块的内容需要读取具体文件系统在磁盘上的超级块获得,因此超级块是具体文件系统超级块的内存抽象,所以如果磁盘上的超级块坏了,文件系统就坏了。 在文件系统中,文件和目录一般按照树状结构保存,比如找一个位于/a/b/c/1.txt文件,文件系统会从a开始一层一层的查找直到找到c目录下的1.txt文件。

    1.1K20编辑于 2022-08-17
  • 来自专栏Linux内核那些事

    细说|Linux虚拟文件系统原理

    虚拟文件系统简介 为了实现 一切对象皆是文件 这个目标,Linux 内核提供了一个中间层:虚拟文件系统(Virtual File System)。 从上图可以看出,虚拟文件系统为上层应用提供了统一的接口。如果某个文件系统实现了虚拟文件系统的接口,那么上层应用就能够使用诸如 open()、read() 和 write() 等函数来操作它们。 今天,我们就来介绍虚拟文件系统的原理与实现。 虚拟文件系统原理 在阐述虚拟文件系统的原理前,我们先来介绍一个 Java 例子。通过这个 Java 例子,我们能够更容易理解虚拟文件系统的原理。 调用过程如下: 2. file_operations结构 底层文件系统需要实现虚拟文件系统的接口,才能被虚拟文件系统使用。 正是有了 虚拟文件系统,Linux 才能支持各种各样的文件系统

    1.9K11编辑于 2023-02-26
  • 来自专栏嵌入式进阶之路

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

    甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。 VFS 是什么 虚拟文件系统,简称 VFS(Virtual Filesystem),是一个内核软件层。 VFS 的作用 概括地讲,VFS 有两个作用: 处理与 Unix 标准文件系统相关的所有系统调用 为各种文件系统提供一个通用的接口 VFS 支持的文件系统类型 以下列出以下常见的文件系统类型,本文暂时不对其进行详细分析 磁盘文件系统 ext2,ext3,··· 网络文件系统类型 nfs,smbfs,··· 特殊文件系统 tmpfs,ramfs,··· 伪文件系统 procfs,sysfs,··· VFS 的设计思想 VFS 关键数据结构介绍 Linux VFS 抽象出 4 种类型的数据结构,实现将不同类型的文件系统挂载到目录结构中。

    4.2K22编辑于 2022-08-23
  • 来自专栏GitHub专栏

    从 lsof 开始,深入理解 Linux 虚拟文件系统

    虚拟文件系统(virtual filesystem) 下图显示了Linux操作系统中负责文件管理的基本组件。上半区域为用户模式,下半区域为内核模式。 所有与文件相关的操作的入口都是虚拟文件系统(VFS),而非特定的额文件系统(如Ext3、ReiserFS和NFS)。VFS 提供了系统库和特定文件系统之间的接口。 因此,VFS 不仅充当抽象层,而且实际上它提供了一个文件系统的基本实现,可以由不同的实现来使用和扩展。因此,要了解文件系统是如何工作的,就要先了解VFS 。 内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后,从中把一些基本的初始化脚本和服务等加载到内存中去运行(文件系统和内核是完全独立的两个部分)。 其他文件系统,则后续通过脚本或命令作为子文件系统安装在已安装文件系统的目录上,最终形成整个目录树。

    1.6K40发布于 2020-09-28
  • 来自专栏入门小站

    从 lsof 开始,深入理解Linux虚拟文件系统

    要了解这些,就要先弄清楚并不容易,下面将从一些基本概念入手,一步步将这些梳理清楚: 什么是虚拟文件系统(VFS:virtual filesystem)? 什么是通用文件模型? object) 目录项对象(dentry object) 文件的概念 文件的表达 内存表达 磁盘表达 目录树的构建 软链接 vs 硬链接 文件 & 磁盘管理 索引节点状态 文件 & 进程管理 操作:打开&删除 虚拟文件系统 图片 所有与文件相关的操作的入口都是虚拟文件系统(VFS),而非特定的额文件系统(如Ext3、ReiserFS和NFS)。VFS 提供了系统库和特定文件系统之间的接口。 因此,VFS 不仅充当抽象层,而且实际上它提供了一个文件系统的基本实现,可以由不同的实现来使用和扩展。因此,要了解文件系统是如何工作的,就要先了解VFS 。 其他文件系统,则后续通过脚本或命令作为子文件系统安装在已安装文件系统的目录上,最终形成整个目录树。

    73010编辑于 2022-06-02
  • 来自专栏原创分享

    揭开虚拟文件系统的云雾之多文件系统是如何运作的(基于linux1.2.13)

    由之前的分析中我们知道,挂载根文件系统后,系统里存在根文件系统的超级块和一个根节点inode。并设置了init进程的工作目录和当前目录为根节点。 分析多文件系统的运作。看看虚拟文件系统在抹平各个文件系统的差异后,又是如何决定使用哪个文件系统的。 我们去看iget的实现,这是实现跨文件系统的关键。看到这个我们就知道操作系统是如何协调多个文件系统运作的了。 在看这个函数之前,我们要先看一个东西,那就是在根文件系统中挂载其他文件系统的实现。在根文件系统中挂载其他文件系统是通过sys_mount函数实现的。这个函数调用了do_mount函数实现挂载。 挂载文件系统主要有三个参数 需要挂载的设备 挂载点 文件系统类型 下面看看sys_mount的主要代码。

    86210发布于 2020-01-02
  • 来自专栏开发与安全

    Ext2文件系统布局,文件数据块寻址,VFS虚拟文件系统

    此书已经开源,阅读地址 http://www.kerneltravel.net 一、Ext2 文件系统 (一)、文件系统布局 ? Ext2 文件系统加上日志支持的下一个版本是 ext3 文件系统,它和 ext2 文件系统在硬盘布局上是一样的,其差别仅仅是 ext3 文件系统在硬盘上多出了一个特殊的 inode(可以理解为一个特殊文件 二、VFS 虚拟文件系统 Linux支持各种各样的文件系统格式,如 ext2、 ext3、 reiserfs、 FAT、 NTFS、 iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式 Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统(VFS,Virtual File 从某种意义上说,可以把VFS 看成“通用”文件系统,它在必要时依赖某种具体的文件系统。 ?

    2.2K01发布于 2017-12-28
  • 来自专栏用户2442861的专栏

    Ext2文件系统布局,文件数据块寻址,VFS虚拟文件系统

    此书已经开源,阅读地址 http://www.kerneltravel.net 一、Ext2 文件系统 (一)、文件系统布局 ? Ext2 文件系统加上日志支持的下一个版本是 ext3 文件系统,它和 ext2 文件系统在硬盘布局上是一样的,其差别仅仅是 ext3 文件系统在硬盘上多出了一个特殊的 inode(可以理解为一个特殊文件 二、VFS 虚拟文件系统 Linux支持各种各样的文件系统格式,如 ext2、 ext3、 reiserfs、 FAT、 NTFS、 iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式 Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统(VFS,Virtual File 从某种意义上说,可以把VFS 看成“通用”文件系统,它在必要时依赖某种具体的文件系统。 ?

    99220发布于 2018-09-20
  • 来自专栏原创分享

    虚拟文件系统源码解析之open(基于linux1.2.13)

    我们看看open在虚拟文件系统中大致的执行过程。不会分析具体的过程。主要分析一下虚拟文件系统的实现原理。 (inode->i_op) f->f_op = inode->i_op->default_file_ops; if (f->f_op && f->f_op->open) { // 调用底层文件系统的 在虚拟文件系统中,超级块、inode、目录、文件都是一个抽象的概念,具体的操作函数由各个文件系统实现。所以我们首先找到一个结构体,然后根据实际的操作值调用具体文件系统的操作函数就行。 return dir->i_op->lookup(dir,name,len,result); 以ext文件系统为例。看看lookup的实现。 一般文件系统没有实现open函数。所以直接返回inode,建立fd到file到inode的关系即可。后面对文件的操作也是通过inode节点的操作函数集进行。

    99510发布于 2019-12-18
  • 来自专栏北亚数据恢复中心

    VMFS文件系统下删除虚拟机数据恢复方法

    图片2.png 一、关于文件系统的概述 首先在这里介绍一下物理区和本地区是什么意思,物理区就是物理上连续的磁盘空间,即通常意义上的分区。 根据entry中的位图信息,使用北亚虚拟化恢复工具提取VMFS卷的自由子块。 2、分别筛选子块 解析每个块第一条指针至数据区,意在判断丢失虚拟磁盘头部是否存在,如果存在则进行虚拟机的拼接工作。 、SeSparse)等,并将判断结果保存至数据库中,数据库只记录磁盘类型和磁盘头部所在位置,需根据丢失虚拟机大小、文件系统等判断是否有符合丢失磁盘特征的头部。 图片3.png 4、拼接虚拟机 对符合特征的磁盘头部进行分析,按照文件系统存储结构进行寻址拼接,计算出需要匹配数据块的特征值和该数据块在磁盘中的位置,以及特征值在数据库内的偏移位置。 根据需要修复的文件系统特征值和位置,使用自主研发的专业分析工具进行匹配符合结构的数据块。 根据匹配结果及该数据块在子块中的连续性,使用自主研发的专业分析工具将正确的数据块进行拼接。

    2.2K20发布于 2021-03-19
  • 来自专栏原创分享

    揭开虚拟文件系统的云雾(1)(基于linux1.2.13)

    这一篇我们来看看,虚拟文件系统是如何抹平各个文件系统的差异,又是如何和具体的文件系统串起来的。 我们先来回顾一下之前的讲的内容。 " readonly" : ""); // 直接返回,即第一个读取成功的文件系统成为根文件系统 return; } } ... } 我们看到由read_super加载超级块的内容,假设根文件系统是ext文件系统。 从函数sys_setup中我们知道ext文件系统的read_super函数是ext_read_super。 这一篇就先说到这里,现在有根节点了,下一篇看一下如何进行文件的读写和多文件系统是如何一起工作的。

    67431发布于 2020-01-02
  • 来自专栏撸码那些事

    抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

    不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味。 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性。 多方面抽象 抽象被赋予不止一项职责时,将导致这种坏味。 为什么不可以有多方面抽象? 单一职责原则指出,抽象必须承担单一而明确的职责,且必须完全封装该职责。 未用的抽象 创建的抽象未用(未被直接使用或继承)时,将导致这种坏味。有以下两种表现形式: 未引用的抽象:未用的具体类 鳏寡抽象:没有任何派生抽象的接口/抽象类 为什么不可以有未用的抽象? 重复的抽象 两个抽象的名称、实现或两者相同时,将导致这种坏味。 名称相同 两个不同的抽象重名将影响可理解性。 重构建议 对于名称相同的重复抽象,可以将其中一个抽象改为不同的名称。 对于实现相同的重复抽象,如果实现完全相同,可将其中一个抽象删除。

    88120发布于 2018-06-21
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )

    抽象类总结 II . 抽象类声明 III . 抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) IV . 抽象类继承 V . 抽象方法的覆盖 VI . 抽象方法的实现 I . 抽象类总结 ---- 抽象类总结 : ① 声明 : 抽象类中使用 abstract 声明 ; ② 成员 : 抽象类中既可以定义正常属性和方法 , 又可以定义抽象的属性和方法 ; ③ 继承 : 抽象类可以继承抽象类 , 抽象类也可以继承正常类 , 正常类可以继承抽象类 ; ④ 重写 : 抽象类中可以使用抽象方法重写正常方法 , 也可以进行正常的方法重写 ; ⑤ 特征 : 抽象方法只能定义在抽象类中 , 正常类中不能有抽象方法 抽象类中的 ( 正常 / 抽象 ) 的 ( 成员 / 方法 ) ---- 0 . 抽象类内成员总结 : 抽象类中可以定义正常的成员和方法 , 也可以定义抽象的成员和方法 ; 1 . ("正常类继承抽象类 , 必须实现抽象类中的抽象方法") } } ② 抽象类子类 : 如果抽象类继承抽象类 , 可以不实现父累抽象方法 ; abstract class Father{

    2K40编辑于 2023-03-27
  • 来自专栏撸码那些事

    抽象那些事】缺失抽象

    这就是抽象。对于软件工程师来说,抽象能力是最重要的能力之一,也恰恰是最难得的能力之一。 应用抽象原则的实现手法 提供清晰的概念边界和唯一身份 每个抽象都必须有清晰而明确的概念边界,还必须有身份。 如果只提供方法的一部分,抽象既不内聚也不完整。 赋予单一而重要的职责 确保每个抽象都分配单一而重要的职责。 单一:每个抽象都应该只负责一件或一类事情。 重要:抽象不能太鸡肋。 违反抽象原则导致的坏味 我们这篇博客主要讲解分析缺失抽象坏味,对于其它抽象坏味将在后面的博客讲解分析。 缺失抽象 使用一系列数据或编码字符串,而不创建类或接口时,将引发这种坏味。 通常,由于缺失抽象,相关的数据和行为将会分散在其它抽象中,这将会导致两个问题l: 可能会向其它抽象暴露实现细节,违反封装原则 数据和相关的行为分散在不同的抽象中,可能导致实体之间高度耦合,结果是代码脆弱且难以重用 因为在创建抽象前,一定要根据应用抽象具体情况分析,再决定是否要创建抽象

    1.2K150发布于 2018-05-19
领券