【内核】——文件和文件系统的内部结构1

0. 要认识到个人的能力是有限的,这么多的代码根本看不过来。
1. 选择你喜欢的特性  如内存管理
2. 学习对应特性的计算机知识 如虚拟地址、TLB等等,抱本书最好
3. 阅读代码要义:
    3.1  阅读目录、文件分工,从makefile看 
    3.2  选择主线 1级、2级 函数串起来,不要进入3级、4级,否则容易晕。主线入口一般是初始化、API、进程入口 
    3.3  精读感兴趣的核心结构体,对着书  
    3.4  精读结构体相关的处理函数   
    3.5  没活干,这个程度差不多了。碰到具体问题或工作,再去精读相关代码。如果想了解整个系统,可从 Linux 0.11 版本看起,配合 Linux 0.11 完全注释看。

作者:谢仰锟
链接:https://www.zhihu.com/question/22573737/answer/23141971
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

  kernel没有main函数,但是有start_kernel().。在linux/init/main.c下面。这是程序的起点,从这里开始看。但是,很显然从这里开始看,依然有很多很多的东西,像我这种没有毅力的人,估计看到死,还在看怎么开机启动吧。所以,我还是按照课本,从课本(《UNIX操作系统设计》)上讲的内容开始看起。

  然而第一个小点是(页)高速缓存的内容,可他应该有前置内容mm(memory management)之后,所以这里,我先将第二点文件系统开始吧。

  关于查看Linux内核源码的程序,我还是选择了SI(source insight),并在Linux2.6下面建立了源码project。

1、综述

  现代Unix的filesystem通常由三大模块组成:本地文件系统(user filesystem,UFS),网络文件系统(network filesystem,NFS),虚拟文件系统(virtual filesystem,VFS)组成。

  上图中ext2,以及其衍生版本ext3,ext4和xfs都是本地文件系统,Block I/O连接的是物理存储介质,另一边则是网络文件系统。UFS和NFS都接入虚拟文件系统(VFS)。

2、几个名词解释

  磁盘扇区=物理块,块(block)=逻辑块=数据块。下面关于块的描述请结合上下文自己判断。

  关于物理块:其大小是由硬件厂商决定的,主流的磁盘扇区大小为512字节,不过也有了4K的扇区。另外在固态硬盘上,是在原来U盘的基础上进行的技术更新.没有机械部分,就一块存贮空间.没有转动部分,就一个方块,直接就寻址. 速度非常快。

  4K对齐:相关联的是一个叫做“高级格式化”的分区技术。高级格式化”是国际硬盘设备与材料协会为新型数据结构格式所采用的名称。这是主 要鉴于目前的硬盘容量不断扩展,使得之前定义的每个扇区512字节不再是那么的合理,于是将每个扇区512字节改为每个扇区4096  个字节,也就是现在常说的“4K扇区”。
  逻辑块:文件系统的逻辑块大小,即DEV_BSIZE*2^n。可以是1k,2k,4k....,目的是为了提高传输速度,减少overhead。

  逻辑片:DEV_BSIZE*2^n,目的是为了减少文件尾的碎片浪费。

2、本地文件系统(UFS)

【Unix】

  一个物理磁盘划分成一个或多个的逻辑文件系统(简称文件系统),每个逻辑文件系统被当做一个由逻辑设备号标识的逻辑设备。Unix的普通文件和目录文件就保存在这样的文件系统中,而本地文件系统(是逻辑文件系统)由根文件系统和(若干)子文件系统构成:

    •   根文件系统存放本操作系统的最主要和最基本的部分,可以独立运行,且系统启动后,根文件系统不能卸载下来;
    •   子文件系统主要存放应用程序和用户文件,一般不能独立启动,且系统运行过程中随时安装和卸载。

  这样的逻辑文件系统的存储结构分为两个类型:

    •   一级存储结构型:常用于运行环境较小的文件系统。
    •        二级存储结构型:常用于运行环境较大的文件系统。

一级存储结构型结构如下:

  引导块:boot程序

  超级块:文件系统结构,存放文件系统的静态参数,

  inode表块:磁盘incommon表,

  数据区:各个数据块。

二级存储结构型结构如下:

  除了上述的引导块,超级块,iNode表块,数据区,还多了超级块拷贝块,柱面信息块(cg)。

【Linux】

  Unix的文件系统的实现方式不太相同,第一个版本的Linux是基于MINIX文件系统的,而当Linux成熟时,引入了扩展文件系统(extended filesystem),这里我们介绍ext2文件系统。关于Unix各个不同的磁盘数据结构(超级块,引导块等),讲会在下面结合具体的代码解释。

  ext2的一般特征(优缺点):【再写】

  

  ext2文件系统也是包括引导块(boot sector)和若干块组(块组就是柱面组信息块的简称),每个块组包括超级块(super block),组描述符(block group descriptors)(也可以说是柱面组信息块),数据块位图(data block bitmaps),索引节点表(iNode table)以及数据块(data blocks)。

  相比Unix二级存储结构的不同点:1、相比二级存储结构少了一个第一级的超级块;

                 2、ext2的超级块即Unix的超级拷贝块

                 2、Unix的位示图放在柱面信息块中,因此Unix中的柱面信息块而不相同,而ext2中的每个组块都相同。

  虽然超级块与柱面组信息块被复制到每个块组中,只有块组0中所包含的超级块和柱面组信息块才由内核使用,而柱面组信息块保持不变。之所以在每个柱面组块中存放一个超级块拷贝块(和柱面组信息块)其目的是是系统在超级块意外破坏时,能从任何一个柱面组中进行恢复而不致使整个文件系统陷入瘫痪。因此超级块拷贝块为安全不一定都装载柱面组中的最前面,如果第n号柱面组中的超级块拷贝块开始于该柱面组的第i磁道,则第n+1柱面组中的超级块拷贝块则开始于该柱面组中的第i+1磁道。但文件系统一旦建立,他们的位置就固定不变了。

  

相关推荐阅读:https://blog.csdn.net/xiakan008/article/details/5913714

猜你喜欢

转载自www.cnblogs.com/SsoZhNO-1/p/10858031.html
今日推荐