虚拟文件系统介绍 Linux使用了虚拟文件系统(VFS,Virtual Filesystem,下文统称“虚拟文件系统”),它不是磁盘文件的组织格式,而是抽象出来的文件树的集合,它通过标准接口动态的向其中增加或移除对应的目录...虚拟文件系统支持以下归类的三种类型的文件系统: 磁盘文件系统,存储在本地磁盘、U盘、CDROM等的文件系统,它包含各种不同的文件系统格式,比如Windows NTFS、VFAT,BSD的UFS,CD的CD-ROM...等 网络文件系统,它们存储在网络中的其他主机上,通过网络进行访问,例如 NFS 特殊文件系统,内存的映射、例如/proc 案例如以下截图,Linux上的进程通过Sytem Calls(系统调用)将数据经过...vfs.png 虚拟文件系统对象类型 虚拟文件系统,有四个主要对象类型: Superblock 表示特定加载的文件系统 Inode 表示特定的文件 Dentry 表示一个目录项,路径的一个组成部分...File 虚拟文件系统最后一个主要对象是文件对象,文件对象表示进程已打开的文件。如果我们站在用户空间的角度考虑虚拟文件系统 ,文件对象会首先进入我们的视野。
Linux内核使用工厂的设计模式抽象出实际文件系统统一接口,这个就是虚拟文件系统(VFS),根据应用程序调用虚拟文件系统接口,根据不同的文件系统类型(xfs/zfs/ext4)来调用实际文件系统的接口...// linux 5.4.85/include/linux/fs.h 取出super_block核心字段 struct super_block { // 文件系统块大小 unsigned long...文件系统中的dentry就是反应这里的树状关系 在linux中每个文件都有一个dentry,这个dentry链接到上层目录的dentry.根目录有一个dentry结构,根目录中的文件和目录的dentry...对于一个文件查找一般先查找dentry cache中进行 // linux 5.4.85/include/linux/dcache.h 取出dentry核心字段 struct dentry { //...// linux 5.4.85/include/linux/fs.h 取出inode核心字段 struct inode { // 文件的权限信息 umode_t i_mode; // 操作文件的
虚拟文件系统简介 为了实现 一切对象皆是文件 这个目标,Linux 内核提供了一个中间层:虚拟文件系统(Virtual File System)。...今天,我们就来介绍虚拟文件系统的原理与实现。 虚拟文件系统原理 在阐述虚拟文件系统的原理前,我们先来介绍一个 Java 例子。通过这个 Java 例子,我们能够更容易理解虚拟文件系统的原理。...虚拟文件系统原理 上面的 Java 例子已经大概说明虚拟文件系统的原理,但由于 Linux 是使用 C 语言来编写的,而 C 语言并没有接口这个概念。...调用过程如下: 2. file_operations结构 底层文件系统需要实现虚拟文件系统的接口,才能被虚拟文件系统使用。...正是有了 虚拟文件系统,Linux 才能支持各种各样的文件系统。
这样的好处是,用户不用关心使用了什么文件系统,只需要使用统一的方式去处理文件即可。那么Linux是如何做到的呢?这就得益于 虚拟文件系统(Virtual File System,简称 VFS)。...虚拟文件系统 为不同的文件系统定义了一套规范,各个文件系统必须按照 虚拟文件系统的规范 编写才能接入到 虚拟文件系统中。...虚拟文件系统抽象数据结构 Linux奉行了Unix的理念:一切皆文件,比如一个目录是一个文件,一个设备也是一个文件等,因而文件系统在Linux中占有非常重要的地位。...虚拟文件系统的实现 接下来我们分析一下虚拟文件系统的实现。...注册文件系统 Linux为了支持不同的文件系统而创造了虚拟文件系统,虚拟文件系统更像一个规范(或者说接口),真实的文件系统需要实现虚拟文件系统的规范(接口)才能接入到Linux内核中。
mysql 11u REG 253,1 0 523587 /var/tmp/ibCjuqva (deleted) 那么,Linux...虚拟文件系统(virtual filesystem) 下图显示了Linux操作系统中负责文件管理的基本组件。上半区域为用户模式,下半区域为内核模式。...所有与文件相关的操作的入口都是虚拟文件系统(VFS),而非特定的额文件系统(如Ext3、ReiserFS和NFS)。VFS 提供了系统库和特定文件系统之间的接口。...目录树 综合来说,Linux 的 根文件系统(system's root filessystem) 是内核启动mount的第一个文件系统。...Linux 使用Write back作为索引节点的数据一致性策略。对于索引节点的数据,当文件被打开时,才会加载索引节点到内存;当不再被进程使用,则从内存踢出;如果中间有更新,则需要把数据写回磁盘。
要了解这些,就要先弄清楚并不容易,下面将从一些基本概念入手,一步步将这些梳理清楚: 什么是虚拟文件系统(VFS:virtual filesystem)? 什么是通用文件模型?...object) 目录项对象(dentry object) 文件的概念 文件的表达 内存表达 磁盘表达 目录树的构建 软链接 vs 硬链接 文件 & 磁盘管理 索引节点状态 文件 & 进程管理 操作:打开&删除 虚拟文件系统...图片 所有与文件相关的操作的入口都是虚拟文件系统(VFS),而非特定的额文件系统(如Ext3、ReiserFS和NFS)。VFS 提供了系统库和特定文件系统之间的接口。...目录树 综合来说,Linux 的 根文件系统(system’s root filessystem) 是内核启动mount的第一个文件系统。...Linux 使用 Write back 作为索引节点的数据一致性策略。
我们看看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节点的操作函数集进行。
这一篇我们来看看,虚拟文件系统是如何抹平各个文件系统的差异,又是如何和具体的文件系统串起来的。 我们先来回顾一下之前的讲的内容。..." readonly" : ""); // 直接返回,即第一个读取成功的文件系统成为根文件系统 return; } }...... } 我们看到由read_super加载超级块的内容,假设根文件系统是ext文件系统。...从函数sys_setup中我们知道ext文件系统的read_super函数是ext_read_super。...这一篇就先说到这里,现在有根节点了,下一篇看一下如何进行文件的读写和多文件系统是如何一起工作的。
上一篇博客:【Linux】磁盘结构和文件系统 Group中的组成部分 下面是每个group的组成部分,但是super block不是每个组都有的,这个点后面详谈。...inode table inode table 是 Linux 文件系统(如 Ext2、Ext3、Ext4)中用于存储 inode 的一张表格。...在 Linux 文件系统(例如 Ext2、Ext3、Ext4)中,inode bitmap 是块组元数据的一部分,用来跟踪某个块组内 inode 的使用情况。...为什么访问文件的是inode,但是我们操作的是文件名 在Linux系统中一切皆文件,所以目录也是文件。...Linux的目录中存放的是文件名和inode的映射关系,因为同一级目录下不可能存在同名文件,所以索引都是1:1,唯一的。 为什么Linux会这么做呢?
Linux是一个基于Unix的操作系统,具有强大的文件系统功能。Linux文件系统是在硬盘上组织和存储数据的一种结构,通过文件系统可以管理文件、目录、权限等信息。...在Linux中,文件系统被组织成一个树形结构,称为文件系统层次结构(Filesystem Hierarchy Standard,FHS),该标准规定了Linux操作系统中各级目录的名称和用途,使得Linux...根目录 根目录(/)是Linux文件系统中的最顶层目录,所有其他的目录和文件都是从根目录开始构建的。在根目录下可以存放各种文件和目录,如用户目录、系统文件、配置文件等。.../proc /proc目录是Linux系统中一个特殊的目录,用于提供进程和系统信息的虚拟文件系统。.../mnt /mnt目录是Linux系统中用于挂载文件系统的目录,通过挂载可以将其他文件系统的内容挂载到/mnt目录下,使得这些文件系统可以被访问。
(如何管理磁盘文件) 5.1 了解文件系统 有了上面的线性大地址,我们就可以开始构建出文件系统了。...在每个分区内部分组,然后写入文件系统的管理数据,称之为格式化!!! Linux 文件系统特定: 文件属性 与 文件内容 分开存储。...接下来我们来研究文件系统: 每个组里有这些部分: Block Group(占据空间最大的一部分):每个Block Group都有着相同的结构组成。...inode 表 : 存放文件属性 如 文件大小,所有者,最近修改时间等 Linux中文件的属性是大小固定的集合体(一般固定128字节) 不包含文件名,但是都有inode_number,通过inode号来标识一个文件...而Linux系统会进行路径的缓存,来方便我们的寻找工作。 我们一般使用的云服务器会有一个虚拟磁盘vda,系统中会有许多分区。
上面的逻辑图与之对应 文件 = 内容 + 属性 文件在磁盘存储,本质是文件的内容+文件的属性数据,Linux文件系统特定:文件内容和文件属性分开存储 文件系统的结构 数据块(Data Blocks...) 存放文件属性,如文件大小,所有者,最近修改时间等 Linux中的文件属性是一个大小固定的集合体,inode是用于描述文件属性的结构体 inode内部不包含文件名!...inode与文件名的映射 在 Linux 文件系统中,文件名 和 inode 之间的映射关系是通过 目录项(directory entry) 来建立的。...因为文件的新建最后一定要向当前所处的目录内容中写入文件名和inode的映射关系 目录项缓存(Dentry Cache) 目录项缓存(dentry cache) 用于缓存目录项结构(dentry) 缓存机制:当访问文件路径时,Linux...Linux 文件系统缓存路径的工作流程 当用户或程序访问文件时,操作系统通常会按照以下路径结构来处理缓存: 文件访问流程 路径解析:首先,操作系统会查找 目录项缓存(dentry cache) 来解析文件路径
目录 c语言文件操作: linux文件系统调用: open: 标志位传参: 虚拟文件系统: write: close: 跨平台性: c语言文件操作: 先来简单回顾一下c语言的文件操作,...linux文件系统调用: 在linux中,我们还可以使用系统调用来对文件进行修改,我们来认识几个系统调用接口: open: 我们先在linux下查一下这个函数的系统调用手册...虚拟文件系统: 回到open函数,可以注意到之前的代码,open函数有一个返回值,这个返回值是这个文件的文件标识符,一个进程,可能会打开很多文件,当一个文件被打开会创建一个struct files来描述这个文件...这套文件系统被称为虚拟文件系统 。 所以我们的操作系统在对文件进行操作时,只认文件描述符fd!!! write: 这里传fd的作用,想必不需要我多讲了,这个函数功能应该很明了了。...linux里面的不好m吗?
由之前的分析中我们知道,挂载根文件系统后,系统里存在根文件系统的超级块和一个根节点inode。并设置了init进程的工作目录和当前目录为根节点。...分析多文件系统的运作。看看虚拟文件系统在抹平各个文件系统的差异后,又是如何决定使用哪个文件系统的。...我们去看iget的实现,这是实现跨文件系统的关键。看到这个我们就知道操作系统是如何协调多个文件系统运作的了。...在看这个函数之前,我们要先看一个东西,那就是在根文件系统中挂载其他文件系统的实现。在根文件系统中挂载其他文件系统是通过sys_mount函数实现的。这个函数调用了do_mount函数实现挂载。...挂载文件系统主要有三个参数 需要挂载的设备 挂载点 文件系统类型 下面看看sys_mount的主要代码。
文件系统 磁盘 磁盘的物理结构 磁盘的储存结构 磁盘的逻辑结构 文件系统 分治 inode与数据块 软硬链接 什么是软硬连接 文件与引用计数 文件的三大时间 动静态库 什么是库 库的使用 静态库...Super Block:超级块对象,保存的是整个文件系统的信息。 如果想清空哪个盘里面的所有数据内容,其实就相当于重写文件系统。一个磁盘,第一步是分区,第二部就是格式化,也就是写入文件系统。...inode与数据块 文件 = 内容 + 属性 Linux中,文件的属性和内容是分批存储的。 保存文件属性的叫inode块:具体大小跟文件系统的版本有关,我的是ext3,128字节。...静态库在程序进入内存之前就被拷贝进了我们的程序内部,进入内存,在虚拟地址空间中也是在代码区里面,这样是很浪费空间的。...如果有很多个进程,那么内存当中也只需要加载这一个库就够了,因为每个进程操作系统都会帮助我们去映射对应库再虚拟地址空间的位置。
Linux文件系统 在Linux系统中所有的设备都统称为文件,所以同样必须要去学习下linux文件系统到底是何物??? 进入系统后我们使用命令ls -ll 就可以查看根目录下所有文件的信息 ?...二进制文件:linux中可执行文件(命令) ? 数据格式文件(一种特殊的文件 data) ? 2、d目录文件 ls -ld 可以显示所有目录文件 3、b块设备文件 ?...二:文件的扩展名 同样linux系统中的文件也有扩展名,不过意义不大,只是为了区分不同的文件 linux中常见的扩展名类型有以下几种: 1、.tar .tar.gz .tgz .zip 这类表示压缩文件...Inode:索引节点,linux中存储设备或分区被格式化为文件系统后,一般都会分成二个部分,第一部分就是inode,第二部分为block,inode存储的是文件的属性信息,我们可以使用ls -i查看Inode
Linux 文件系统具有以下特点:一切皆文件:在 Linux 文件系统中,一切都被视为文件,包括硬件设备、目录、文件、管道等等。这种一切皆文件的思想使得 Linux 文件系统非常灵活。...虚拟文件系统:Linux 文件系统使用虚拟文件系统(VFS)层,将不同类型的文件系统抽象为一个通用的文件系统接口,使得用户可以以相同的方式访问不同的文件系统。.../proc:包含内核和进程信息的虚拟文件系统。/root:超级用户的主目录。/sbin:包含一些系统管理的命令和二进制文件,如ifconfig、shutdown等。...Linux 文件系统格式Linux 文件系统可以使用多种格式来存储数据,包括 ext2、ext3、ext4、ReiserFS、XFS等。...以下是一些常见的 Linux 文件系统格式:ext2:是 Linux 文件系统的最早版本,它是一个简单的文件系统,不支持日志和数据恢复功能。
本文已基于GPLv2协议发布在https://docs.dragonos.org/zh_CN/latest/kernel/filesystem/vfs/overview.html 简介 DragonOS的虚拟文件系统是内核中的一层适配器...inode中的信息是从具体文件系统中读取而来,也可以被刷回具体的文件系统之中。并且,一个inode也可以被多个dentry所引用。 ...当我们挂载具体文件系统的时候,将会调用它的read_superblock方法,以确定要被挂载的文件系统的具体信息。 ...,为文件系统创建超级块结构。...该部分由具体文件系统实现,包含该inode在具体文件系统之中的特定格式信息。 struct vfs_inode_operations_t 该接口为inode的操作方法接口,由具体文件系统实现。
Linux 文件系统 操作系统中,用来管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。...RAW RAW文件系统是一种磁盘未经处理或者未格式化产生的文件系统。...HFS(+) 苹果电脑上的文件系统。 Linux里的文件系统 不同于Windows系统有盘符的概念(C盘、D盘等),Linux里只有一个盘符,是从 " / " 开始的,只有它是没有上级目录的。.../media Linux系统自动识别的一些设备,比如U盘、光驱等,当识别后,linux会把识别的设备挂载到这个目录下。...比如你安装一个ORACLE数据库就可以把它放到这个目录下 /proc 虚拟目录,它是系统内存的映射,可以通过直接访问这个目录来获取系统信息。
一、Linux文件系统 1.创建 int creat(const char *filename,mode_t mode) 参数mode是存储文件的权限 2.打开 int open(const char*...SEEK_CUR:相对文件读写指针的当前位置 SEEK_END:相对文件末尾 offset可取负值 lseek(fd,0,SEEK_END)文件的返回值长度 5.关闭 int close(int fd) 二、C库文件系统