本文是个人分析《Linux内核设计与实现》而写的总结,欢迎转载,请注明出处:

http://blog.csdn.net/dlutbrucezhang/article/details/13004095

         第六章--虚拟文件系统

      我们都知道,其实我们的文件系统是在硬盘的分区中的,那么怎么才能利用硬盘中的文件系统呢?而且,文件系统的类型可能是不一样的,像以前我们用的是FAT,现在大多数情况下我们用的都是 NTFS ,那么操作系统是怎么识别和利用的呢?当然,这只是在Windows下的文件系统,在Linux下更常见的是ext3。Linux内核是怎么做到的呢?如果对于每一个文件系统都有一套处理机制,那么内核中处理文件系统的模块是异常的巨大,所以,这不太可能,不过,操作系统确实需要对于不同的文件系统调用不同的机制去处理,这时就是Linux内核中非常强大的一个子系统--虚拟文件系统。

      1.通用文件系统接口

      这里所说的通用意思是不管是什么操作系统,什么物理介质,我们对于文件系统的操作就只需要调用库函数即可,其他的工作是由内核代替我们来做的。比如,我们想打开一个文件,利用 open 即可,想读写一个文件,只需要调用 read/write 即可。这里的实现其实是面向对象的设计思路--多态。根据文件系统的不同,利用文件系统自身提供的接口,或者是利用虚拟文件系统提供的公共接口来做这些事情。当然,为了做这些事情,我们需要在内核中统一数据结构,让每个文件系统都能提供这个的结构就能利用这个子系统了。
      我们需要四个数据结构,分别是:超级块,i节点,目录项,文件,下面我将详细说明这些数据结构。

      2.超级块

      每一个文件系统需要自己管理自己,对于其中的每一个文件和对文件的操作都需要进行管理,毕竟文件系统就是用来管理文件的。所以,在文件系统中存在一个数据结构称为超级块提供了文件系统中关于文件的所有信息。通常它被称为文件系统控制块,在系统启动后,文件系统会被自动挂载,这时超级块就已经被拷贝到内存中了。
 

      3.i节点

      文件系统中最重要的东西当然是文件,对于每一个文件,在Linux中的做法是文件的说明和文件的数据分开存放,这样更利于管理。文件的信息被称为是文件的元数据,其中存储了文件的创建时间,文件的大小等数据。文件的数据则是单独存放的,它的地址记录在i节点中。Linux下的数据是字节流,文件中的数据是一系列的字节,文件的开始是文件头,也是用来描述文件的信息的,比如这是个什么类型的文件当然,它最重要的功能是标识文件内容的开始。文件的尾部是文件尾。文件的所有信息都存在与i节点中,包括文件的所有操作方法,所以,对于文件来说,i节点是最为重要的东西,它是和文件一一对应的,如果i节点被删除了,那么相应的文件也不再存在,反之亦然。

      4.目录项

      当我们需要打开一个文件时,我们需要文件的路径,可以使相对路径,这里我举一个绝对路径的例子。比如文件的地址是: /root/test/bz 。内核进行解析的时候会创建一系列的目录项,目录项和i节点是相对应的。这时,内核会创建 /,root,test,bz这四个目录项。

      5.文件

      文件这是一个对进程而言的数据结构,且是进程打开的文件。文件描述符指向这个数据结构,操作文件我们利用的就是这个数据结构,不过,最终是通过i节点的,毕竟,文件操作函数都是记录在i节点之中的。

      虚拟文件系统解决了内核支持不同文件系统的方法,不进高效而且美观,方便。理解文件系统用到的数据结构非常重要,当然,这只是基础,对于文件系统具体的工作方式,大家可以去看下《深入理解Linux内核》,这本书中有详细的说明,在这里就不赘述了。

Linux内核探讨-- 第六章相关推荐

  1. Linux内核探讨-- 第七章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/136 ...

  2. Linux内核探讨-- 第五章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/123 ...

  3. Linux内核探讨-- 第四章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处: http://blog.csdn.net/dlutbrucezhang/article/details/122 ...

  4. Linux内核探讨-- 第三章

    本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处:                                                         ...

  5. linux内核测试指南 第一章

    linux内核测试指南 第一章 内核,补丁,内核树 和 编译 1.1 内核 Linux内核的当前版本通常可以从linux内核档案网站(http://www.kernel.org/)以一个大的压缩文件的 ...

  6. Linux内核学习(六):linux kernel的Kconfig分析

    Linux内核学习(六):linux kernel的Kconfig分析 前面我们知道了makefile文件,makefile文件会结合配置文件.config来进行操作.这里就再来看看生成内核.conf ...

  7. Linux内核探讨-- 第二章

          本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处:                                                   ...

  8. Linux内核探讨-- 第一章

          本文是个人分析<Linux内核设计与实现>而写的总结,欢迎转载,请注明出处:                                                   ...

  9. Linux内核分析——第五章 系统调用

    第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...

最新文章

  1. mysql社区版与cluster 区别_MySQL版本Enterprise/Community/Cluster等版本的区别
  2. Python 字符串笔记(转自木木)
  3. 解决公众号的加载问题
  4. 用python绘制图形_使用Python的turtle画炫酷图形
  5. c ++ stl_获取列表的第一个和最后一个元素| C ++ STL
  6. Java_基础—try...catch的方式处理异常1
  7. 妙笔生花!文字图像图形生成技术研究进展
  8. 这个城市推出黄金“外卖”!价值低于5.8万元的,只能摩托车配送...
  9. phpcms图片无法上传
  10. 盐池元宵转九曲【山乡元夕】
  11. win7屏保时间设置_高逼格时钟屏保-冷高轮时间小人人体形状造型数字动态时钟windows pc端 电脑屏幕保护...
  12. 全国各省电信及网通DNS大全
  13. 从0开始制作简单的小程序AR
  14. HDU1507 Uncle Tom's Inherited Land*
  15. 笔记本计算机的功率一般多少,笔记本的功耗的一般值和实测值【图文】
  16. PB级企业电商离线数仓项目实战
  17. 低压差线性稳压器简介
  18. SAP Router是个啥
  19. 祝贺嘉华集团获得汽车经销商集团信息化管理大奖
  20. ubuntu12.04设置打印服务器

热门文章

  1. Material Design(十一)--CoordinatorLayout和自定义视图
  2. Spark1.0.0 开发环境高速搭建
  3. .NET(C#):使用Win32Exception类型处理Win32错误代码
  4. Thrift解读(五)——server端RPC接收与返回值的回送
  5. 区块链:游戏规则的改变者
  6. windows上安装Anaconda和python的教程详解
  7. ubuntu16.04 安装以及要做的事情
  8. crontab详解及实例
  9. 《Raspberry Pi用户指南》——2.4 使用外部存储设备
  10. 实例化Layout中的布局文件(xml)