编者注:在分析完 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允许设备驱动程序以文件的形式存在,使得设备可以像文件一样被访问和操作。云存储集成:VFS可以用于集成云存储服务,使得远程存储资源可以像本地磁盘一样被操作系统和应用程序访问。...文件系统过滤和安全:VFS可以用于实现文件系统级别的安全策略和过滤,例如,通过VFS层实现的加密文件系统。...跨平台文件系统支持:VFS使得应用程序可以无需修改即可在不同的文件系统上运行,提高了应用程序的可移植性。容器的实际应用:微服务架构:容器是微服务架构中的关键技术,允许服务独立部署、扩展和管理。
文件系统的注册 这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS 中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。...比如在笔者的 Linux 机器下就注册有 "rootfs"、"proc"、"ext2"、"sockfs" 等十几种文件系统。...3.1 文件系统的数据结构 在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示(include/linux/fs.h): 1 struct file_system_type { 2...,之所以单独介绍 rootfs 文件系统的注册过程,实在是因为该文件系统 VFS 的关系太过密切,如果说 ext2/ext3 是 Linux 的本土文件系统,那么 rootfs 文件系统则是 VFS 存在的基础...),但是 rootfs 的注册却是通过 init_rootfs() 这一初始化函数来完成,这意味着 rootfs 的注册过程是 Linux 内核初始化阶段不可分割的一部分。
最近挂载了N多的文件系统,大致了不同文件系统的相应特性及挂载方式,却还是对Linux的文件系统没有从源码方面去了解。不求甚解确实不好不好。...于是借鉴一些大牛的博客及自己的理解,总结了博客系列: 一、VFS是什么: VFS是Linux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(Virtual Filesystem Switch),是一种软件机制...引入文件系统的目的是:为了屏蔽各种文件系统的差异 (1)VFS对实际文件系统进行抽象,采用统一的文件系统向用户提供相应的一组统一的标准的文件操作接口(open,read,close,select,poll...等); (2)通过系统调用到VFS到实际文件系统的操作。...Reference: https://www.ibm.com/developerworks/cn/linux/l-vfs/ 在链接中,文章选用的是Linux2.4.20,我选择Linux3.4.2来分析源码
这个 wiki 上列出了很多 Linux 的文件系统类型。...对于这些文件系统,Linux 做了一层抽象就是 VFS 虚拟文件系统,这个其实就是软件设计必然的过程,对于不同的实现规定统一的接口,也就是定义与实现分离,如果想要自己实现一个文件系统的话只要实现一个满足...VFS 层的文件系统就能加入到内核当中。...所以其实内核的文件和我们普通理解的文件其实有点不一样,这里的文件更像是一个接口,只不过最初是从磁盘上的文件衍生过来的,最后抽象成了一种可以对接各种功能的接口。 下面就开始剖析 VFS 的主要内容。...dentry 和 inode 的关系是多对一的,即多个 dentry 可以指向同一个文件,这和 linux 当中的文件链接有关。
在 Linux 中查找可用的网络接口 我们可以通过几种方式找到可用的网卡。在本指南中,我们将讨论列出 Linux 中网络接口卡的 10 种方法。 1....使用 ifconfig 命令列出网络接口 使用ifconfig命令查找网络接口详细信息的最常用方法。我相信一些 Linux 用户可能仍在使用它。...并连接无线网卡(见UP字样) 这两个命令 (ifconfig和ip) 足以在你的 Linux 系统上找到可用的网卡。 但是,在 Linux 上列出网络接口的方法很少。 3....使用 hwinfo 显示网络接口列表 Hwinfo 是一个命令行应用程序,用于查看 Linux 系统中的硬件信息。它探测 Linux 系统中存在的硬件并显示每个硬件设备的详细信息。...到目前为止,我们看到的是在 Linux 中查找可用网络接口的各种方法。
配天线ipx1代大接口(没有更换天线) ---- 【开始更换】 由于华硕这款旧笔记本的无线网卡接口是miniPCI,天线是ipx1代大接口,所以如果要更换AX200的话,需要用到转接卡(NGFF M...接口转好了,AX200也固定了,然后接到笔记本上就行了。如果对于一般的电脑接口可能没有问题,但是华硕X450V不能这样,还需要剪掉中间的螺孔的位置。...1.2、华硕X450V特殊剪裁 华硕X450V的无线网卡接口位置空间很小,容纳不下这么长的转接卡,而且接口下面位置还有一个SD卡插口,整个空间看起来只有miniPCI卡那么大,如果直接装上转接卡和AX200...需要注意的是,找好多余天线的塞的位置,接了转接线肯定会很长的,塞在周边空的位置,注意顺着转接线的接口方向布置天线。...2.1、天线主副的区别 两个接口的网卡都有Main和Aux接口的区别,主天线和副天线要区分开来,具体怎么区分不太好说,最好根据更换前的网卡的接法确定主天线和副天线。
使用select接口写高精确延时。...select接口 intselect(intmaxfdp,fd_set*readset,fd_set*writeset,fd_set*exceptset,structtimeval*timeout);...原理 利用select的timeout参数实现定时器; 设置timeval的值,而将其他参数都置为NULL,当内部时间耗尽后select便会退出。...{ err = select(0, NULL, NULL, NULL, &tv); } while(err < 0 && errno == EINTR); } 注意 内核支持的延时分辨率一般不能达到微秒级...; 由于存在内核调度延时现象; 内核分辨率一般为10ms的倍数。
普通文件、目录、硬盘、U盘、键盘、显示器,甚至进程信息和网络连接…… 在Linux看来,它们统统都可以被抽象成一个可以打开、读写、关闭的“文件”。 这样做的好处是统一了接口。...二、核心演员——VFS,那位伟大的翻译官 如果让文件系统和设备驱动直接对话,它们可能会因为“语言不通”(接口不同)而打起来。...VFS的职责:它定义了一套所有文件系统都必须支持的通用接口和数据结构(就像一个标准的工作流程模板)。...有了VFS,应用程序就再也无需关心它操作的文件是在本地硬盘、U盘、网络上,还是根本就是一个设备。它只需要和VFS这一个接口打交道就行了。...七、关键概念图 Linux文件系统与设备驱动协作 ├── 核心纽带:VFS(虚拟文件系统) │ ├── 作用:统一接口,屏蔽差异 │ ├── 对接对象:文件系统、设备驱动、用户程序 │ └─
虚拟文件系统 VFS的作用——万能适配器 想象一个国际旅行转换插头: 各国插座标准不同(英标、美标、欧标) 转换插头提供统一接口 你的电器只需适配转换插头 VFS就是内核的“转换插头”: 应用程序 →...一致性:网络和文件使用相同的read/write接口 抽象性:VFS屏蔽了网络和磁盘的巨大差异 模块化:各层独立工作,互不干扰 五、总结表格:Linux内核设计精髓 设计原则 解决的问题 实现方式 带来的好处...一切皆文件 设备接口杂乱 统一文件描述符 编程简单,接口一致 VFS抽象层 文件系统差异 虚拟文件系统接口 支持多文件系统,应用透明 分层设计 系统复杂度高 清晰层次划分 易于开发、调试、维护 关键理解要点...文件描述符是万能钥匙:一个整数fd可以代表任何资源 VFS是翻译官:将统一调用翻译成具体系统的操作 分层是分工协作:每层专注自己的职责,通过接口协作 模块化是演进保障:可以单独升级某一层而不影响其他层...这种设计让Linux能够: ✅ 运行在从嵌入式到超级计算机的各种设备 ✅ 支持数百种文件系统 ✅ 驱动成千上万种硬件设备 ✅ 保持30多年的持续演进而不被淘汰 最后记住这个核心比喻: Linux内核就像一个高度组织的快递公司
cgroups是Linux下控制一个(或一组)进程的资源限制机制,全称是control groups,可以对cpu、内存等资源做精细化控制,比如目前很多的Docker在Linux下就是基于cgroups...Linux内核有一个很强大的模块叫 VFS (Virtual File System)。VFS 能够把具体文件系统的细节隐藏起来,给用户态进程提供一个统一的文件系统 API 接口。...通过cgroups适配VFS,用户可以使用VFS接口来操作cgroup功能。 VFS 是一个内核抽象层(通用文件模型),能够隐藏具体文件系统的实现细节,从而给用户态进程提供一套统一的 API 接口。...VFS 使用了一种通用文件系统的设计,具体的文件系统只要实现了 VFS 的设计接口,就能够注册到 VFS 中,从而使内核可以读写这种文件系统。...这很像面向对象设计中的抽象类与子类之间的关系,抽象类负责对外接口的设计,子类负责具体的实现。其实,VFS本身就是用 c 语言实现的一套面向对象的接口。
而为了兼容,操作系统或者内核,要以相同的表现形式,同时支持多种类型的文件系统,这就延伸出了虚拟文件系统(VFS)的概念。...VFS的功能就是管理各种各样的文件系统,屏蔽它们的差异,以统一的方式,为用户程序提供访问文件的接口。...我们对硬件设备的访问控制,也可以归纳为读取或者写入数据,因而可以用统一的文件操作接口访问。Linux内核就是这样做的,除了传统的磁盘文件系统之外,它还抽象出了设备文件系统、内存文件系统等等。...这些逻辑,都是由VFS子系统实现。 VFS子系统包括6个子模块(见下图),它们的功能如下: 1. Device Drivers,设备驱动,用于控制所有的外部设备及控制器。...Network Device Drivers,网络设备的驱动,和VFS子系统中的设备驱动是一样的。 2. Device Independent Interface,和VFS子系统中的是一样的。
BPF 是在 1997 年首次被引入 Linux 的,Linux 内核中的报文过滤机制其实是有自己的名字的:Linux Socket Filter,简称 LSF。...,在接口的设计以及易用性上,eBPF 也有了较大的改进。...cBPF 所覆盖的功能范围很简单,就是网络监控和 seccomp 两块,数据接口设计的粗放;而 eBPF 的利用范围要广的多,性能调优、内核监控、流量控制什么的,数据接口的多样性设计。...应用层接口的封装。...,虚拟化技术以及Linux内核的研发与产品化。
具体而言,他希望设计一个能够提供以下功能的架构: 一个可以支持多个实现的通用接口; 支持 BSD FFS,以及两个远程文件系统 NFS 和 RFS,还有特定的非 Unix 文件系统,如MS-DOS; 接口定义的操作需要是原子性的...两个抽象概念 Steven 研究了文件系统的各种操作,决定将他们抽象为两个概念: vfs,虚拟文件系统,代表文件系统 vnode,虚拟 inode,代表文件 vfs,虚拟文件系统,它提供统一的接口,使操作系统可以以一致的方式访问不同的文件系统...新增的系统调用 为了使系统高效地运行,需要添加一些新的系统调用来完善接口。...在 Linux 系统中 通过查看 Linux 内核源代码,我们可以找到 Kleiman 设计的总体结构,尽管 Linux 内核的复杂性和丰富性掩盖了其中大部分内容。...Linux 内核拥有丰富的文件系统类型,并且还添加了许多在 40 年前的 BSD 中不存在的功能。
前言 Linux系统上的/proc目录是一种文件系统,即proc文件系统。...Proc文件接口,主要用于驱动代码调试,获取内核信息,可以直接使用cat命令访问proc目录下的对应文件接口即可。...需要使用的头文件: #include linux/proc_fs.h> #include linux/fs.h> 下面介绍内核里proc接口实现的相关函数接口: 1....编写proc接口测试驱动 4.1 案例1 下面驱动代码注册之后,会在proc目录下创建一个tiny4412_proc文件,通过cat读取这个文件,可以打印驱动代码里设置好的信息。...#include linux/kernel.h> #include linux/module.h> #include linux/miscdevice.h> #include linux/fs.h
Linux下修改网卡接口名 by:授客 (测试环境:CentOS-6.0-x86_64-bin-DVD1.iso+Vmware) 作用 可以用于解决类似如下Device not found的问题:...修改网卡接口名之前的相关信息如下 # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:F3:8B:8A inet addr:172.25.75.4...步骤1.修改网卡接口配置文件 #把eth0对应的配置文件ifcfg-eth0重命名为ifcfg-eth1--如要设置网卡接口名为ethN,则重命名为ifcfg-ethN # cd /etc/sysconfig.../network-scripts/ # mv ifcfg-eth0 ifcfg-eth1 说明:如果网卡接口名为ethN,则对应的配置文件为ifcfg-ethN #修改ifcfg-eth1配置文件,把...,则此处为NAME="ethN" 注意: 1.如果存在多条仅NAME的值不一样的记录,则删除多余的记录,仅保留一条记录 2.如果有对网卡MAC地址进行修改过,即网卡mac地址并非原始mac地址,则推荐步骤
系统调用将内核中其它组件的功能进行封装,然后通过接口的形式暴露给用户进程来访问。 对于我们的读取文件的需求,系统调用需要依赖 VFS 内核组件。...1.3 VFS 虚拟文件系统 VFS 的思想就是在 Linux 上抽象一个通用的文件系统模型,对我们开发人员或者是用户提供一组通用的接口,让我们不用 care 具体文件系统的实现。...VFS 提供的核心数据结构有四个,它们定义在内核源代码的 include/linux/fs.h 和 include/linux/dcache.h 中。...因为每一个分区都可以单独进行格式化,所以一台 Linux 机器下可以同时使用多个不同的文件系统。 文件系统里提供对 VFS 的具体实现。除了数据结构,每个文件系统还会定义自己的实际操作函数。...通过对设备进行抽象后,不管是磁盘还是机械硬盘,对于文件系统都可以使用相同的接口对逻辑数据块进行读写操作。 对下层。I/O 请求添加到设备的 I/O 请求队列。
而为了兼容,操作系统或者内核,要以相同的表现形式,同时支持多种类型的文件系统,这就延伸出了虚拟文件系统(VFS)的概念。...VFS的功能就是管理各种各样的文件系统,屏蔽它们的差异,以统一的方式,为用户程序提供访问文件的接口。...我们对硬件设备的访问控制,也可以归纳为读取或者写入数据,因而可以用统一的文件操作接口访问。Linux内核就是这样做的,除了传统的磁盘文件系统之外,它还抽象出了设备文件系统、内存文件系统等等。...这些逻辑,都是由VFS子系统实现。 VFS子系统包括6个子模块(见下图),它们的功能如下: 1. Device Drivers,设备驱动,用于控制所有的外部设备及控制器。...Network Device Drivers,网络设备的驱动,和VFS子系统中的设备驱动是一样的。 2. Device Independent Interface,和VFS子系统中的是一样的。 3.
Linux bridge使用dummy接口调用IPVS的问题 在IPVS: How Kubernetes Services Direct Traffic to Pods一文中,作者给出了一个简单的组网(...问题描述 当在netns_leah命名空间中测试通过VIP访问netns_dustin中的服务时,发现如果不创建一个类型为dummy,且IP为VIP(10.100.100.100)的接口时,访问是不通的...作者怀疑bridge_home接口并没有调用IPVS规则。 如下图,IPVS规则实际是iptables处理路径上挂载的钩子。 ?...本机的IP地址(192.168.118.148)和默认路由如下: ? 删除dummy接口,并在出接口ens33上抓包,发现bridge_home果然按照默认路由转发了报文。 ?...总结 dummy接口相当于提供了一个让bridge_home进入iptables的机会,这样就可以使用IPVS规则处理报文。
基本概念 | 官方定义VFS(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层,为用户提供统一的类Unix文件操作接口。...而通过在系统中添加VFS层,提供统一的抽象接口,屏蔽了底层异构类型的文件系统的差异,使得访问文件系统的系统调用不用关心底层的存储介质和文件系统类型,提高开发效率。...VFS层具体实现包括四个方面:通过三大函数指针操作接口,实现对不同文件系统类型调用不同接口实现标准接口功能;通过Vnode与PathCache机制,提升路径搜索以及文件访问的性能;通过挂载点管理进行分区管理...三大操作接口VFS层通过函数指针的形式,将统一调用按照不同的文件系统类型,分发到不同文件系统中进行底层操作。...各文件系统的各自实现一套Vnode操作(VnodeOps)、挂载点操作(MountOps)以及文件操作接口(file_operations_vfs),并以函数指针结构体的形式存储于对应Vnode、挂载点