学内核之十九:Linux文件系统结构大蓝图

news2024/11/26 3:22:50

目录

一:参考资料

二:整理的原因及基本原则

三:Linux文件系统大蓝图

四:补充说明


一:参考资料

博主梳理的关于文件系统的基础知识:

7.5 文件系统_定义_龙赤子的博客-CSDN博客

博主转载的关于page cache与buffer cache关系的博文:

Linux内核Page Cache和Buffer Cache关系及演化历史_龙赤子的博客-CSDN博客

博主整理的关于Linux内存大蓝图的结构:

学内核之十六:linux内存管理结构大蓝图_linux内存管理框架图_龙赤子的博客-CSDN博客

博主找打的关于Linux层次关系比较好的博文:

https://www.cnblogs.com/pwl999/p/15534976.html

其他网络资料不再一一列出。

二:整理的原因及基本原则

1 相对于文字描述,图形的表达力更强,俗话说一图胜千言。

2 内核的复杂结构,导致文字描述的内容容易遗忘,图形则因为适合大脑记忆的结构,可以辅助理解重要信息,在重要的推演过程中,助人一臂之力。

3 文件系统各个结构体的关系并不是简单的一对一或者我指向你,你指向他,而是我中有你,你中有我,相互直接或者间接的达成关系链。所以,不需要严格或者死记这些关系,只需要大概理清各个结构代表的什么,基本上也就根据逻辑推出它们之间是否有联系。如果实际中不好确定或者需要明确时,再查找确认也来得及。

4 当前整理的结构类型、内容、关系基于2.6内核,基于linux内核设计与实现这本书。现在内核的结构可能增减或者有其他方面的变化,但是根本的东西是不变的,所以倒不必太在意,因为目的是构建文件系统关系概念,而非细抠具体的实现。

5 结合具体的使用场景来辅助理解这些结构体的作用及其关系的特点。比如,文件系统、文件系统的挂载、文件的创建、修改、删除等。还有文件系统与其他子系统的关系等。

整体上我们会看到数据结构之间的关系错综复杂,其实如上所述,不需要纠结于细节,整体把握即可。

三:Linux文件系统大蓝图

基于上面五条原则,整理出结构体关系。仅供参考。如下图:

四:补充说明

部分细节补充说明如下:

1 open系统调用会创建file结构对象。可能会创建一个新文件,或者打开已有文件。

2 可能多个file对象对应一个实际文件,比如多次打开的情况

3 目录项表示实际打开的文件,是唯一的

4 file对象不对应具体磁盘数据,没有相关域。通过目录项和iNode找到具体的物理磁盘数据。

5 但是目录项也没有对应的磁盘数据结构,所以,这本质上是一个辅助结构,根据路径创建。

6 索引节点有磁盘对应的结构。索引节点也可以表示设备或管道等特殊文件。

7 梳理线路

进程角度,存在任务结构体task_struct,其中包含了当前进程的根目录,挂载点等信息,关联mnt_namespace结构,包含当前进程打开的文件信息,关联files_struct结构,包含文件系统信息,关联fs_struct结构。

Fs_struct结构包含根路径,关联path结构。

Mnt命名空间包含挂载点信息,关联vfs mount结构

Path结构的挂载点信息也指向vfs mount结构

通过path的dentry结构,可以找到超级块结构,从超级块出发,可以获取文件系统和磁盘相关的映射信息。

Files struct包含file结构,通过file结构,可以找到file_path结构,通过file_path结构,回到上面的路径关系。通过file结构,也可以找到address_space结构。

通过address_space结构,建立文件和磁盘的映射关系,即通过page cache与bufferhead建立关系。

这样,从当前进程信息就可以获取当前进程相关的文件系统及其关联磁盘信息。

注意,这里挂载和文件都是以树结构来组织的,也就是可以存在多个实例。任务如果是独立创建的,则可以有自己的mnt命名空间。命名空间实现资源的隔离。

另外注意,目录也是一个文件。

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

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

相关文章

深入理解深度学习——正则化(Regularization):参数范数惩罚

分类目录:《深入理解深度学习》总目录 正则化在深度学习的出现前就已经被使用了数十年。线性模型,如线性回归和逻辑回归可以使用简单、直接、有效的正则化策略。许多正则化方法通过对目标函数 J J J添加一个参数范数惩罚 Ω ( θ ) \Omega(\theta) Ω(θ…

三、Neo4j 源码研究系列 - 持久化

version: v-2023051401 author: 路__ 说到数据库,那么离不开的模块就是持久化(Persistence),数据持久化是数据库不可缺少的重要组成模块之一。可以说一个数据库少了持久化功能,可以说这个数据库就不足以称为数据库。…

并查集:解密算法面试中的常客

文章目录 1. 并查集原理🍑 举例说明🍑 并查集的应用 2. 并查集实现🍑 接口总览🍑 构造函数🍑 查询操作🍅 代码实现 🍑 合并操作🍅 动图演示🍅 代码实现 🍑 判…

Linux文件打开函数open()

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(void) {int fd -1; /*这个整数用来存放文件描述符*/char filename[] "good.txt"; /*打开的文件名&#xff0c;是一个字符数组…

String类 [下]

目录 一、拷贝构造和赋值重载的传统写法和现代写法 0x01 拷贝构造的传统写法 0x02 拷贝构造的现代写法 0x03 赋值重载的传统写法 0x04 赋值重载的现代写法 0x05 总结 二、 增删改查之后的string 0x01 成员函数swap: 0x02 reserve&#xff1a;改变容量 0x03 push_back: 尾…

带你深入理解Java异常

&#x1f495;“人生就像一盘棋&#xff0c;有时候你慢一步&#xff0c;就输掉了一局。但只要你不停止思考和行动&#xff0c;就永远有机会翻盘。”&#x1f495; &#x1f43c;作者&#xff1a;不能再留遗憾了&#x1f43c; &#x1f386;专栏&#xff1a;Java学习&#x1f38…

《计算机网络——自顶向下方法》精炼——3.4.1-3.4.3

聪明出于勤奋,天才在于积累。——华罗庚 文章目录 对协议的进一步改进rdt2.1rdt2.2rdt3.0&#xff1a;含有比特差错和丢包的可靠数据传输协议 流水线协议回退n步&#xff08;GBN&#xff09; 对协议的进一步改进 rdt2.1 在上一篇文章中&#xff0c;我们讲到对于产生比特差错的…

A2-RIDE Long-tailed recognition by routing diverse distribution-aware experts

文章目录 0. Abstract1. Introduction2. Related Works3. RIDE&#xff1a;ROUTING DIVERSE DISTRIBUTION-AWARE EXPERTS4. Experiments5. Summary论文总结长尾数据分布 (Long-tailed Data Distribution)RIDE方法及模型1. **Multi-expert framework**2. **Routing diversified …

RabbitMQ如何保证顺序消费

目录标题 生产者有序的情况下如何保证顺序生产单个消费者多个消费者 生产者无序的情况下消息返回队列消息不返回队列 生产者有序的情况下 如何保证顺序生产 单一生产者&#xff1a;消息生产的顺序性仅支持单一生产者。 串行发送&#xff1a;如果生产者采用多线程并行发送&…

借助国内ChatGPT平替+markmap/Xmind飞速生成思维导图

系列文章目录 借助国内ChatGPT平替MindShow&#xff0c;飞速制作PPT 文章目录 系列文章目录前言一、科大讯飞“星火”认知大模型二、使用步骤1.借助讯飞星火生成思维导图的文案2.选择markmap绘制思维导图3.选择Xmind绘制思维导图 总结 前言 随着人工智能技术的不断发展&#x…

自动操作魔法师4.9.0.0

产品下载 (won-soft.com) 如下图所示&#xff1a; 彻底远离枯燥乏味的工作 在日常办公中&#xff0c;开发票&#xff0c;更新客户资料&#xff0c;打印报表&#xff0c;录入数据等等工作是极为重要&#xff0c;但大部分时候这些工作是相当枯燥的。你不得得一遍又一遍的进行重复…

第二章: Mybatis-Plus 快速入门

目录 1. 准备工作 数据库准备: 创建Maven 父模块 2. Mybatis 整合 Mybatis-Plus 创建子模块: 准备 log4j.properties 日志文件 3. Mybatis 原生写法实现查询User 编写mybatis-config.xml文件&#xff1a; 编写User实体对象&#xff1a;&#xff08;这里使用lombok进行了…

Hyper-V搭建免费桌面云

Hyper-V 是 Microsoft 的硬件虚拟化产品。 它用于创建并运行计算机的软件版本&#xff0c;称为“虚拟机”。 每个虚拟机都像一台完整的计算机一样运行操作系统和程序。 如果需要计算资源&#xff0c;虚拟机可提供更大的灵活性、帮助节省时间和金钱&#xff0c;并且与在物理硬件…

【AI面试】RoI Pooling 和 RoI Align 辨析

RoI Pooling和RoI Align是两种常用的目标检测中的RoI特征提取方法。它们的主要区别在于&#xff1a;如何将不同大小的RoI对齐到固定大小的特征图上&#xff0c;并在这个过程中保留更多的空间信息。 一、RoI Pooling RoI Pooling最早是在Fast R-CNN中提出的&#xff0c;它的基…

MySQL MHA

概述 什么是 MHA MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中…

JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

文章目录 一、什么是Comparator二、Java compare方法和compareTo方法三、java中Comparable和Comparator的区别 Comparator的例子三、demo&#xff1a;java8使用Lambda表达式比较器Comparator给List对象排序&#xff0c;按时间、数字、字典排序 一、什么是Comparator Comparato…

Unittest单元测试框架之unittest_执行用例的详细信息

unittest_执行用例的详细信息 用unittest.main()执行测试集 这里的verbosity是一个选项,表示测试结果的信息复杂度&#xff0c;有三个值&#xff1a;0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功801 (默认模式): 非常类似静默模式 只是在每…

MySQL数据库从入门到精通学习第3天(查看,选择,修改,删除数据库)

查看&#xff0c;选择&#xff0c;修改&#xff0c;删除数据库 查看数据库选择数据库修改数据库删除数据库 查看数据库 创建完数据库&#xff0c;可以通过SHOW命令来查看所有的数据库信息&#xff0c;语法&#xff1a; SHOW DATABASES [LIKE %模式% WHERE 条件]; >>>…

MySQL进阶-索引

本文介绍MySQL索引的结构、语法、使用规则等 文章目录 索引介绍索引结构二叉树B-TreeBTreeHash 索引分类思考题 语法SQL性能分析SQL的执行频率慢查询日志PROFILE详情EXPLAIN执行计划 索引使用规则最左前缀法则索引失效情况索引列运算字符串不加引号模糊查询or连接的条件数据分布…

(免费分享)基于微信小程序的旅游系统

目 录 1绪论 1 1.1概述 1 1.2课题意义 2 1.3主要内容 2 2 相关技术简介 3 2.1 HBuilder X技术介绍 4 2.2 JAVA简介 5 2.3 MYSQL数据库 6 2.4 SSM框架 7 3 系统分析 8 3.1 系统需求分析 9 3.1.1系统功能需求 10 3.1.2系统技术需求 11 3.1.3系统安全需求 12 3.2 可行性分析 13 3…