对于linux 0.11文件系统,是直接沿用MINIX文件系统的,整体上这种类型的文件系统由以下几个部分内容组成:引导块+超级块+i节点位图+逻辑块位图+i节点+数据区(逻辑块);
首先,在MINIX文件系统的超级块中,每个文件最终都是一个i节点,而i节点中存储着该文件的文件类型,文件权限,文件大小等信息,而i节点有无使用原本可以通过在i节点中直接定义一个标志来说明,但是为了寻找空闲i节点的时候尽可能的快,因此有了i节点位图,通过位图的0、1标志说明对应的i节点是否已经被使用,可以理解为信息的抽取组成单独的一个结构;其中索引为0的i节点位图是弃用的,用来表示所有的i节点都被使用完毕了,当然,在创建文件系统的时候也对其直接进行了置一处理,文件系统的索引为1的i节点,就是根节点,所有的文件节点都是基于该节点进行扩展的,具体扩展方式为目录项,一个目录项占据16 byte数据,14byte文件名称,2byte为i节点号;
单从文件寻找这个角度,文件系统中的文件类型分为两类,一种是目录文件,一种是非目录文件,对于一个目标文件,首先从根目录开始,先从目录文件中根据目录名称找到下一级目录,找到后便可得到对应目录的i节点,这样一直循环,直到找到目标文件i节点;
找到文件i节点后就是提取i节点中数据,i节点数据是通过i_zone[]进行管理的,其中i_zone[0]-i_zone[6]为直接块,i_zone[7]为一次间接块,i_zone[8]为二次间接块,首先呢,上面存储的数据都是一个逻辑块号,直接块中直接存储了对应文件的数据,一次间接块中的数据并不是文件数据,而是一个个逻辑块号,这些逻辑块号对应的块中存储的就是文件中数据;二次间接块中存储了逻辑块号,只不过对应的逻辑块存储了一次间接块块号数据,也就是要查两次块;
而在创建的时候,申请一个i节点或逻辑块资源的时候,直接扫描i节点位图与逻辑块位图数据找到空闲资源,然后将其位图置一;
释放的时候,就是从小到大的顺序进行释放,首先就是i_zone中的逻辑块号资源释放,然后就是i节点资源释放;
对于一个i节点是如何提取i节点数据的,首先通过超级块信息中的i节点位图块数和逻辑块数来定位i节点所在的起始块,然后计算根据i节点号进行计算即可;