Linux 内核源码分析---通用文件模型及 VFS 结构

news2025/7/10 8:41:19

通用文件模型

通常一个完整的 Linux 系统由数千到数百万个文件组成,文件中存储了程序、数据和各种信息。层次化的目录结构用于对文件进行编排和分组

在这里插入图片描述

ReiserFS(新型的文件系统)–>Reiser4
它通过一种与众不同的方式—完全平衡树结构来容纳数据,包括文件数据、文件名、日志支持。它还可以支持少量磁盘和磁盘阵列,并能在上面继续保持很快的搜索速度和很高的效率。
特点:先进的日志机制。日志机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘,文件与数据的安全性有了很大提高。高效的磁盘空间利用、独特的搜寻方式、支持海量磁盘、优异的性能、搜寻方式、空间分配和利用情况。

Ext4–>Linux系统下的日志式文件系统,Ext3应用广泛
更大的文件系统和更大的文件( Ext3 文件系统最多只能支持 32TB 文件系统和 2TB 文件,实际要比容量少很多,文件系统 2TB 和 16GB 文件。Ext4 文件系统容量达到 1EB,文件容量则达到 16TB。);更多的子目录数量;更多的块和 i-节点数(Ext3 文件系统使用 32 位空间,Ext4 文件系统扩充到 64 位);多块分配;持久性预分配;延迟分配;盘区结构;新的i节点结构;日志检验功能;在线碎片整理。

XFS–>高性能的日志文件系统:XFS极具伸缩性、非常健壮
数据完全性、可扩展性(最大支持文件大小为 9exabytes,最大文件系统尺寸为 18exabytes)、传输特性、传输带宽(单个文件系统测试,吞吐量最高达7GB每秒,对意念文件读写操作吞吐量可达4GB每秒)内核支持40多种文件系统,MS-DOS 的 FAT 文件系统,UFS(berkeley UNIX)、网络文件系统(coda 和 NFS)和虚拟文件系统(如 proc)

文件系统类型一般可以分为3种:
(1)基于磁盘的文件系统( Disk-based Filesystem);
(2)虚拟文件系统( Virtual Filesystem);
(3)网络文件系统( Network Filesystem);

在这里插入图片描述

Linux 内核文件系统最重要的数据结构为 inode,一个inode就代表一个文件,inode结构体保存文件的大小,文件的块大小、创建时间等各种参数。一个文件(和目录)的inode只有唯一一个。
在这里插入图片描述

在 linux 系统中有种文件是链接文件,可以为解决文件的共享使用。
链接分为两种:一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。
硬连接】相当于给一个文件取了多个名称,多个文件名称对应同一个索引节点,索引节点的成员i_nlink是硬链接计数。
软链接】这种文件的数据是另一个文件的路径,软链接可对文件或目录创建。软连接是一个独立的文件所以有独立的 inode

VFS结构

在VFS接口实现当中,涉及大量的数据结构。VFS结构由两个部分组成:文件和文件系统,这些都需要管理和抽象。

inode是 Linux 内核选择用于表示文件内容和相关元数据的方法。
在抽象对底层文件系统的访问时,并未使用固定的函数,而是使用了函数指针。这函数指针保存在两个结构中,包括了所有相关的函数。
(1) inode操作:创建链接、文件重命名、在目录中生成新文件、删除文件。
(2) 文件操作:作用于文件的数据内容。它们包含一些显然的操作(如读和写),还包括如设置文件位置指针和创建内存映射之类的操作。

文件系统和超级块信息

VFS支持的文件系统类型通过一种特殊的内核对象连接进来,该对象提供了一种读取超级块的方法。除了文件系统的关键信息(块长度、最大文件长度,等等)之外,超级块还包含了读、写、操作inode的函数指针。
内核还建立了一个链表,包含所有活动文件系统的超级块实例。之所以使用活动(active)这个术语替代已装载(mounted),是因为在某些环境中,有可能使用一个超级块对应几个装载点。

打开的文件总是分配到系统中一个特定的进程,内核必须在数据结构中存储文件和进程之间的关联。
各个文件系统实现也能在 VFS inode 中存储自身的数据(不通过VFS层操作)。尽管每个文件系统在file_system_type中只出现一次,但所有超级块实例的链表中,可能有几个同一文件系统类型的超级块实例,因为在各个块设备/分区上可能存储了同一类型的几个文件系统。

Linux 将磁盘块分为三个部分:
1)超级块,文件系统中第一个块被称为超级块。这个块存放文件系统本身的结构信息。比如,超级块记录了每个区域的大小,超级块也存放未被使用的磁盘块的信息。
2) i-节点表,超级块的下一个部分就是i-节点表,每个文件都有一些属性,如文件的大小、文件所有者、和创建时间等,这些性质被记录在一个称为 i-节点 的结构中。所有 i-节点 都有相同的大小,并且 i-节点表 是这些结构的一个列表,文件系统中每个文件在该表中都有一个i-节点
3)数据区,文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上所有块的大小都一样。如果文件包含了超过一个块的内容,则文件内容会存放在多个磁盘块中。一个较大的文件很容易分布上千个独立的磁盘块中。
https://blog.csdn.net/ds1130071727/article/details/89409426

VFS 的 inode 结构
在这里插入图片描述

inode 操作:
内核提供了大量函数,对inode进行操作。为此定义了一个函数指针的集合,以抽象这些操作,因为实际数据是通过具体文件系统的实现操作的。调用接口总是保持不变,但实际工作是由特定于实现的函数完成的。
在这里插入图片描述
inode 结构有两个指针(i_opi_fop),指向实现上述抽象的数组。inode 结构和 file 结构包括一个指向file_operations结构的指针。file_operations用于操作文件中包含数据,inode_operations负责管理结构性的操作(删除一个文件)和文件相关的元数据(属性等)。

文件操作:
在这里插入图片描述

目录项缓存

由于块设备速度较慢,可能需要很长时间才能找到与一个文件名关联的inode。即使设备数据已经在页缓存。Linux使用 目录项缓存(简称dentry 缓存) 来快速访问此前的查找操作的结果。该缓存围绕着struct dentry建立。
在 VFS 连同文件系统实现读取的一个目录项(目录或文件) 的数据之后,则创建一个 dentry 实例,以缓存找到的数据。

在这里插入图片描述

dentry 结构不仅使得易于处理文件系统,对提高系统性能也很关键。dentry 对象在内存中的组织,涉及下面两个部分。
(1) 一个散列表( dentry_hashtable)包含了所有的dentry对象。
(2) 一个LRU(最近最少使用, least recently used)链表,其中不再使用的对象将授
予一个最后宽限期,宽限期过后才从内存移除。

dentry 操作
dentry_operations结构保存了一些指向各种特定于文件系统可以对dentry对象执行的操作的函数指针。该结构定义如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1977922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高并发下的分布式缓存 | 设计和实现LRU缓存

LRU缓存介绍 什么是LRU缓存? LRU缓存是一种缓存策略,当缓存满了,需要腾出空间存放新数据时,它会删除最近最少使用的数据。换句话说,它会优先淘汰那些最久没有被访问的元素,以确保缓存中的数据是最近使用的…

学习安卓开发遇到的问题

问题1:学习禁用与恢复按钮中: java代码报错:报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下:(实现功能在代码后面) package com.example.apptest;import static java.…

04 表的操作

目录 创建查看修改删除 1. 创建 语法: CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储殷勤; 说明: field,表示列名 datatype,表示列的类型…

专题十_哈希表

目录 题型总结 1. 两数之和 解析 题解 面试题 01.02. 判定是否互为字符重排 解析 题解 217. 存在重复元素 解析 题解 219. 存在重复元素 II 解析 题解 49. 字母异位词分组 解析 题解 题型总结 1. 两数之和 1. 两数之和 解析 题解 class Solution { public:ve…

ECMAScript 12 (ES12, ES2021) 新特性

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

Rewrite功能配置

Rewrite Rewrite是Nginx服务器提供的一个重要基本功能。主要的作用是用来实现URL的重写。 Nginx服务器的Rewrite功能的实现依赖于PCRE的支持,因此在编译安装Nginx服务器之前,需要安装PCRE库。 Nginx使用的是ngx_http_rewrite_module模块来解析和处理Re…

用VBA在Word中随机打乱单词表,进行分列

一、效果展示(以下是三次随机打乱的结果) 二、代码 Sub 随机分单词到后面的单元格()Dim C1 As CellDim str, str1, aDim shuffledArray() As VariantSet C1 Selection.Range.Tables(1).Cell(1, 1)str C1.Range.textstr mid(str, 3, Len(str) - 4)str…

微信小程序版NetAssist局域网工具使用

微信小程序搜《TCPUDP局域网小助手》即可使用,电脑端,安卓端,苹果端都可以使用

【前端面试】七、算法-递归、拷贝等

目录 1.常考算法 2.遍历方法 3.链式调用 4.递归 5.拷贝和比较 1.常考算法 排序算法:快速排序、归并排序、堆排序等。 查找算法:二分查找、哈希表查找等。 动态规划:解决最优化问题,如斐波那契数列、最长公共子序列等。 图…

8.3 day bug

bug1 文件名字写错了&#xff0c;找了半天bug原因 freecodecamp的致敬页的测试验证不通过bug 已经写了display: block;和max-width: 100% 以及通过margin: 0 auto;居中&#xff0c;可是却通不过验证 问了通义千问 通义帮我修改后的html代码为 <!DOCTYPE html> 2<h…

打扫朋友圈

我把上周写的一篇文章&#xff0c;发到了老家的一个群里&#xff0c;结果有个多年没联系的亲戚&#xff0c;立马私信给我说&#xff0c;让我不要在群里发&#xff0c;说我写的东西不行&#xff0c;他自己看了两行就看不下去了&#xff0c;然后给我讲了一堆大道理。 哎呦我去&a…

从零开始的CPP(34)——字符串乘法

给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3" …

RAG 的优化进阶与引入 Reranker

引言 在简单的 RAG 系统中&#xff0c;通过结合检索和生成技术&#xff0c;已经可以显著提升了对复杂查询的响应质量。Reranker 作为 RAG 系统中一个关键的进阶组件&#xff0c;通过对原 RAG 中检索到的内容进行重新组织&#xff0c;可以进一步提高系统的准确性。 本文将深入…

vmware虚拟机linux服务器的IP需要重启才能生效问题

vmware虚拟机linux服务器的IP需要重启才能生效问题 问题说明处理办法关闭&禁用网络管理 再次重启linux服务器&#xff0c;IP显示正常 问题说明 用vmware虚拟的linux服务器&#xff0c;配置了静态IP&#xff0c;但是每次重启liunx&#xff0c;IP都不是设置的静态IP&#xf…

国外教育人工智能发展与应用

在全球化与信息化交织的时代背景下&#xff0c;人工智能正迅速推动教育发生颠覆性变革。从大洋彼岸到东方之滨&#xff0c;世界主要国家和组织正采取相关行动和策略&#xff0c;深度挖掘和释放教育AI的潜能。本文从政策支持、教育应用两个方面&#xff0c;聚焦“教育人工智能”…

centos 安装nacos

nacos官网下载安装包&#xff08;安装nacos之前&#xff0c;先下载安装好jdk&#xff09; 概览 | Nacos 官网 2.下载好nacos压缩包之后&#xff0c;上传到linux目录中&#xff08;在/opt/目录下建好一个文件夹&#xff09; 将nacos解压 uzip nacos-server-1.4.7.zip 进入naco…

【STM32系统】基于STM32设计的按键PWM控制舵机窗帘柜子门禁家居等控制系统——文末资料下载

演示 摘要 随着智能家居技术的不断发展&#xff0c;舵机在自动化家居设备中的应用变得越来越广泛。本文设计并实现了一种基于STM32单片机的按键PWM控制舵机系统。通过按键可以精确控制舵机角度&#xff0c;实现对窗帘、柜子、门禁等家居设备的智能化控制。系统采用STM32F10x系…

C# Unity 面向对象补全计划 七大原则 之 单一职责

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 1.单一职责原则&#xff08;SRP&#xff09; 单一职责原则&#xff08;Single Responsibility P…

iPhone怎么大批量删除照片:释放你的存储空间

随着iPhone相机质量的提升&#xff0c;我们越来越倾向于使用手机捕捉生活中的每一个瞬间。不久后&#xff0c;我们就会发现手机内存充满了成千上万的照片&#xff0c;这不仅占用了大量的存储空间&#xff0c;也让照片的管理变得越来越困难。对于需要释放空间的用户来说&#xf…

谷粒商城实战笔记-125-全文检索-ElasticSearch-整合-SpringBoot整合high-level-client

文章目录 一&#xff0c;技术选型1. 通过 TCP 连接&#xff08;9300 端口&#xff09;2. 通过 HTTP 连接&#xff08;9200 端口&#xff09;3.最终选择 二&#xff0c;SpringBoot整合Elasticsearch-Rest-High-Level-Client1&#xff0c;新增模块gulimall-search1&#xff0c;添…