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

这篇具有很好参考价值的文章主要介绍了学内核之十九:Linux文件系统结构大蓝图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:参考资料

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

三: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文件系统大蓝图

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

学内核之十九: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命名空间。命名空间实现资源的隔离。

另外注意,目录也是一个文件。文章来源地址https://www.toymoban.com/news/detail-450692.html

到了这里,关于学内核之十九:Linux文件系统结构大蓝图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux文件目录结构

    使用 Linux 时,通过命令行输入 ls -l / 可以看到,在 Linux 根目录(/)下包含很多的子目录(称为一级目录),例如 bin、boot、dev 等。同时,各一级目录下还含有很多子目录(称为二级目录),比如 /bin/bash、/bin/ed 等。Linux 文件系统目录总体呈现树形结构,/ 根目录就

    2024年02月11日
    浏览(34)
  • 1、Linux 文件与目录结构

    Linux 文件 Linux 系统中一切皆文件。 Linux 目录结构 VI/VIM 编辑器 是什么 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。 VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜 色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼

    2024年02月15日
    浏览(90)
  • Linux目录结构与文件管理(01) (三)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Linux 系统的组成 二、目录结构 根目录  三、文件管理 目录管理  总结 今天主要学习了Linux的目录结构,主要是一些命令的含义和用法,希望我的此篇文章内容对于刚接触Linux系统的人有

    2024年02月11日
    浏览(23)
  • Linux目录结构于文件管理(03)(五)

    目录 前言 一、系统信息修改 1、主机名 2、时间查看 3、显示输出系统信息 4、文件的详细属性查看 5、连接文件 6、生成指定容量的文件 二、内容统计于筛选 1、目录 2、文件 总结 今天是在前几天学习的基础上,又学习的一些新的内容,虽然同样是基础性的东西,但也是我们

    2024年02月11日
    浏览(24)
  • Linux操作系统(二):操作系统结构与内核设计

     在(一)详解CPU中介绍了操作系统所基于的硬件CPU后,本部分学习操作系统的架构。在计算机系统中,操作系统的架构通常包括以下几个主要组件: 内核(Kernel) 进程管理(Process Management) 内存管理(Memory Management) 文件系统管理(File System Management) 设备管理(Device

    2024年02月13日
    浏览(32)
  • Linux中与“系统内存”相关的内核数据结构

    【摘要】本文讲述了在Linux中与系统内存相关的内核数据结构,通过逐行分析源代码讲述了内存数据结构之间的关联。 7.1 mm_struct 指向进程所拥有的内存描述符,保存了进程的内存管理信息 7.2 vm_area_struct 进程虚拟内存的每个区域表示为 struct vm_area_struct 的一个实例。 vm_flags是

    2024年02月04日
    浏览(30)
  • 【Linux】Linux系统编程——Linux目录结构

    Linux的文件系统呈现为一种树状结构,以根目录 / 为最顶层,其下分布着各种不同的子目录,每个目录都有其特定的用途和功能。下面是Linux目录结构的详细介绍: 1. 根目录 / 根目录是整个文件系统的基础。所有的目录和文件都从这里开始分支。 它是所有其他目录的父目录。

    2024年01月20日
    浏览(35)
  • Linux目录结构和系统指令

    Linux目录结构 /boot : 系统启动相关的文件,包括内核、initrd和grub(BootLoader)。 /etc : 存放配置文件的目录。 /home : 用户的家目录,每个用户的家目录通常默认为 /home/USERNAME 。 /root : 超级用户的家目录。 /lib : 存放库文件的目录,包括静态库(只能在特定程序中使用)和动态库

    2024年02月09日
    浏览(30)
  • Linux 之十八 Ubuntu 22.04 配置内核版本、GRUB 引导、远程桌面、包后缀(-dev、-dbg等)、Ubuntu 阶段更新

      前段时间重新安装了 Ubuntu 22.04 LTS,安装后没有显示 GRUB 引导页面(默认自动跳过),直接使用默认内核启动,而我需要变更一下默认的内核版本,特此记录一下修改过程。   Ubuntu 中安装其他版本的内核非常简单,内核其实就是相当于一个软件(DEB 包),安装方式与

    2024年02月07日
    浏览(46)
  • 嵌入式Linux底层系统开发 +系统移植+内核文件系统(基础)

    搭建交叉编译开发环境 bootloader的选择和移植 kernel的配置、编译、移植和调试 根文件系统的制作 前两个要点通常芯片厂家提供。后边两个要点是公司的工作重点。 学习方法:先整体后局部,层层推进 如何编译—如何添加命令和功能—如何定义自己的开发板。 移植的基本步

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包