目录

0.连接之前写的文章

1.虚拟文件系统中对象的引入

2.VFS中共性对象的抽象

3.超级块对象-描述文件系统的属性

5.目录项对象-描述文件的路径

6.文件对象-描述进程打开的文件

7.进程打开文件表-与进程相关的文件结构

8.与进程相关的文件结构

9.数据结构关系图

10.与文件系统相关的数据结构-安装点数据结构

11.超级块,安装点和具体文件系统的关系

12.小结,推荐资源与思考问题


0.连接之前写的文章

点我-我是链接-链接内容虚拟文件系统中的主要数据结构

1.虚拟文件系统中对象的引入

虚拟文件系统这几个字中第一个词是虚拟,这就意味着这样的文件系统在磁盘或者其他
存储介质上并没有对应的存储信息,那么一个虚无的文件系统到底是怎样形成的呢?
尽管linux支持多达几十种文件系统,但是这些真实的文件系统并不是一下就都挂在
系统中,它们实际上是按需被挂载的.
老子说:有无相生.这个虚的VFS的信息都来源于实的文件系统,所以VFS必须承载各种
文件系统的共有属性,另外,这些实的文件系统,只有安装到系统中,VFS才予以认可.
也就是说,VFS只管理挂载到系统中的实际文件系统,既然VFS承担管家的角色,那么我们
分析一下它到底要管理哪些对象,linux在文件系统的设计全然汲取了UNIX的设计思想,
UNIX在文件系统中抽象出四个概念:
(1)文件
(2)目录项
(3)索引节点
(4)超级块

2.VFS中共性对象的抽象

(1)超级块对象(superblock):存放系统中与安装文件系统的有关信息;
(2)文件对象(file):存放打开文件与进程之间进行交互的有关信息;
(3)索引节点对象(inode):存放关于具体文件的一般信息;
(4)目录项对象(dentry):文件目录树种一个路径的组成部分,不管是目录还是普通文件,都是一个目录项
对象.上图给出了对象之间简要的关系图.

3.超级块对象-描述文件系统的属性

超级块对象用来描述文件系统的属性,用来描述整个文件系统的信息,
每个具体的文件系统都有各自的超级块,VFS的超级块是各种具体文件
系统在安装的时候建立的,并在卸载的时候被自动删除(可以执行dtrace mount查看).
其数据结构就是super block.
素有超级块的对象以双向链表的形式连接在一起,与超级块关联的方法
就是超级块操作表,这些操作是由super_operations来描述的.

4.索引节点对象-描述文件属性

索引节点对象存储了文件的相关信息,代表了存储设备上一个的
一个实际的物理文件,当一个文件首次被访问的时候,内核会在内存中
组织相应的索引节点对象,以便向内核提供对一个文件进行操作时所必须的
全部信息,这些信息一部分存储在磁盘特定的位置,另一部分在加载时动态
填充,大家要通过数据结构具体来了解索引节点到底描述了文件的哪些属性.

5.目录项对象-描述文件的路径

有目录项的概念主要出于查找文件为目的,一个路径的各个组成部分,不管是目录还是
一个普通文件都是一个目录项对象.比如说在/home/source/test.c中,
(1)目录:/
(2)目录:/home
(3)目录:/home/source/
(4)文件:/home/source/test.c
它们四个都对应者一个目录项对象,不同于前面的两个对象,目录项对象没有对应的磁盘
数据结构,VFS在遍历路径名的过程中现场将它们逐个解析成目录项对象.

6.文件对象-描述进程打开的文件

从数据结构中可以看出,文件对象是对已经打开的文件在内存中的表示,主要用于建立
进程和磁盘上文件的对应关系,由system_open现场创建,由system_close销毁,文件对
象和物理文件之间的关系有点像进程和程序的关系,当我们站在用户空间看待VFS的时
候,我们只需要与文件对象打交道,而无需关系超级块,索引节点或者目录项,因为多个
进程可以同时打开和操作同一个文件,所以同一个文件也可能存在多个对应的文件对象.
文件对象仅仅在进程观点上代表已经打开的文件,它反过来指向目录项对象,一个文件
对应的文件对象可能不是唯一的,但是其对应的索引节点和目录项对象是唯一的.

7.进程打开文件表-与进程相关的文件结构

8.与进程相关的文件结构

9.数据结构关系图

10.与文件系统相关的数据结构-安装点数据结构

11.超级块,安装点和具体文件系统的关系

12.小结,推荐资源与思考问题

【linux内核分析与应用-陈莉君】虚拟文件系统的主要数据结构相关推荐

  1. 【linux内核分析与应用-陈莉君】动手实践-编写一个文件系统

    目录  0.一些链接 1.一些数据结构 2.编写一个文件系统的过程 3.用到的一些数据结构及函数的原型 3.1 struct file_system_type-文件系统类型 3.2 register_ ...

  2. 【Linux内核分析与应用-陈莉君老师】动手实践-把虚拟内存转换成物理地址

    目录 1.地址转换 2.Linux4级页表 3.64位线性地址 4.实际观察寻页的过程  1.地址转换 进程中不直接对物理地址直接操作,CPU在运行时指定的地址需要经过内存管理单元MMU 转换后才能访 ...

  3. 【linux内核分析与应用-陈莉君】Linux内存管理机制

    目录                   1.内存层次 2.虚拟内存实现机制 3.进程的虚拟地址空间和地址空间布局 4.如何用数据结构描述进程的用户空间 5.mm_struct 6.vm_area_s ...

  4. 【linux内核分析与应用-陈莉君】进程的一生

    目录 1.进程与线程 2.TASK_STRUCT结构的统一性与多样性 3.进程API的实现 4.do_fork()的代码流程 5.进程的生命周期 1.进程与线程 2.TASK_STRUCT结构的统一性 ...

  5. Linux内核学习笔记(一) 虚拟文件系统VFS

    什么是VFS Vritual Filesystem 是给用户空间程序提供统一的文件和文件系统访问接口的内核子系统.借助VFS,即使文件系统的类型不同(比如NTFS和ext3),也可以实现文件系统之间交 ...

  6. 《Linux内核完全剖析-基于0.12内核》书评之陈莉君

    <Linux内核完全剖析-基于0.12内核>书评之陈莉君 <Linux内核完全剖析-基于0.12内核>一书出版之后,机械工业出版社编辑希望我就此书抽空写一个书评.在我拿到这本书 ...

  7. Linux内核分析——可执行程序的装载

    链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可 ...

  8. Linux内核分析(三)----初识linux内存管理子系统

    原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...

  9. 庖丁解牛linux内核 百度云,庖丁解牛Linux内核分析笔记-1

    2019-5-3 主要内容摘自 孟宁<庖丁解牛Linux内核分析> 天下大事必作于细,天下难事必作于易 1.计算机三大法宝 存储程序计算机 函数调用堆栈 中断 2.虚拟一个x86的CPU硬 ...

  10. 庖丁解牛山linux内核的析,# 庖丁解牛Linux内核分析笔记-1

    2019-5-3 主要内容摘自 孟宁<庖丁解牛Linux内核分析> 天下大事必作于细,天下难事必作于易 1.计算机三大法宝 存储程序计算机 函数调用堆栈 中断 2.虚拟一个x86的CPU硬 ...

最新文章

  1. 程序员论坛炫耀公司福利:一线互联网公司的下午茶,什么水平?
  2. Linux就业技术指导(二):简历项目经验示例
  3. photoimpression 5中文版
  4. 启动python内核时发生错误_启动内核时出错
  5. 23种设计模式之原型模式
  6. 使用maven构建web项目
  7. Android 系统调试(1)---禁止Selinux 的方法
  8. loss值多少才算收敛_你了解TDS值是多少才是合格的吗?
  9. 数据结构笔记(三十四)二叉排序树的删除
  10. java基础之 反射_Java基础之反射原理与用法详解
  11. Ubuntu安装开发者中心Ubuntu Make(原Ubuntu Developer Tools Center)
  12. python打砖块游戏算法设计分析_基于pygame的打砖块游戏,做到一半,不带做了
  13. 机器学习之树模型的学习(一):决策树
  14. 驾校考试科目二完整流程
  15. 【华人学者风采】王祥科 华北电力大学
  16. 网络环路原理及其影响
  17. geoserver之gs-kml、gs-wcs、gs-rest、gs-gwc、gs-sec-jdbc
  18. ant modal 修改样式 style
  19. 【Verilog】inout 端口信号的使用
  20. 谷歌卫星地图下载器bigemap的优势

热门文章

  1. [音乐欣赏]夜空中最亮的星,张杰,苏阳,新闻晚高峰结束曲
  2. linux创建裸磁盘,Linux上如何创建裸设备
  3. 开源homekit adk 测试
  4. 超过2t硬盘分区_大于2T的磁盘怎么分区呢?
  5. Torch是什么,如何使用Torch,为什么选择Torch?
  6. AI的10个开源工具/框架
  7. Windows中的SID详解
  8. 重装系统感悟之设置系统还原点
  9. 时序逻辑电路的设计(一) -- 模10的计数器电路(附Multisim)
  10. oracle dbms_utility.get_time,dbms_utility如何使用?