文件系统如何管理文件,文件系统通过“文件路径名”索引找到文件,(文件属性)【linux】(t)

时间:2024-04-10 17:33:28

文件系统如何管理文件

文件系统就是一个软件代码,属于OS的一部分。
文件系统管理文件的逻辑结构——树形结构

文件系统使用树形结构来管理文件的,凡是涉及管理的,都是以树形结构来管理的,比如班级学生组织结构,*、公司的人员组织结构,都是以树形结构来管理的。

对于文件系统来说,目录是非常重要的文件组织节点。

但是文件系统是软件代码来实现的,所以树形管理结构,是以程序代码的形式来构建的。文件在库设备上存储好之后整个文件系统的代码才回去管理文件。

我们的U盘,电脑的硬盘,移动硬盘等都是块设备。
文件在块设备上是如何存储的:
文件系统如何管理文件,文件系统通过“文件路径名”索引找到文件,(文件属性)【linux】(t)

第一个自举区我们不用关系。

超级区
存放了很重要的数据结构,例如各种结构体,链表等等,负责块设备空间的分配和释放,超级区会记录块设备空间那些用了哪些没用。也就是负责文件属性存储区空间,文件数据存储区空间的分配和释放。

inode节点区
被划分为了一个个相连的,空间大小相同的inode节点空间。
每个节点空间被用于存放某个文件的属性信息,每个节点空间大小是固定的
每个节点都有一个节点编号,通过节点编号就可以索引找到inode节点空间。使用stat读取文件属性时,struct stat结构体中的st_dev成员,就是用来存储inode节点编号的。

数据区
数据区专门用于存放文件的数据,当然我们前面就提到过,不是所有的文件都有数据,只有普通文件、目录、链接文件有数据,其它的文件只有属性,没有数据。
存储数据时,实际上并不是数据有多少个字节,就分配对应多少的字节空间给你,为了便于物理空间高效管理,往往都是按块分配空间的,一块往往为4k字节(4*1024)。文件中的数据小于一块时,还是给你分配一块,当数据超过一块时,会给你再分配一块,当这一块又满了时,再给你分配一块。不同的数据块之间物理位置上不一定是连续的,块之间使用地址进行相互链接,也即是说每一块都有存放前后块的地址,通过地址就可以找到前后块空间。

普通文件存放数据
如果是文本文件,数据就是文字编码。
如果是纯二进制文件,数据就是机器指令之类。

目录文件
目录文件的数据量小,所以一般就只有一块数据。
目录文件里面放的内容,并不是目录所包含文件的数据,放的只是所包含文件的基本信息,其中两个信息最重要:
文件名
文件的inode节点号

这个两个有什么用,后面我们会详细说明。

链接文件
存放的数据很简单,就是所指向文件的文件名。

文件系统通过“文件路径名”索引找到文件

索引找到普通文件

fd = open("/new/xxx.txt", O_RDWR);
文件系统如何利用/new/xxx.txt,找到xxx.txt文件。
文件系统如何管理文件,文件系统通过“文件路径名”索引找到文件,(文件属性)【linux】(t)
首先要找到根目录,通过地址找到根目录的inode节点空间。这个地址是块设备的地址,这个地址是固定的,找到之后在这个节点空间里面存放数据空间的地址,找到/目录的数据空间,/目录的数据空间存放的是文件名和inode节点号,然后找到new的文件名,找到文件名就找到了对那个的inode节点编号,然后通过inode节点编号在inode节点表里面进行查找到对应编号为2的inode节点,然后里面存放了new这个目录数据的地址,然后根据地址索引到new目录数据的数据空间,里面存放了文件的基本信息,在new目录数据图中的…代表上一级目录,.代表当前目录xx.txt是个普通文件,文件名所对应的节点号是1,通过1然后通过inode节点编号在inode节点表里面进行查找到对应的编号为1的inode节点空间,xx.txt数据的起始地址放在编号为1的inode节点空间。那么我们得到了xx.txt数据的起始地址之后,读写这个文件的的时候,底层的驱动程序就可以通过这个地址去操作这个文件。操作完之后通过当前块所存放的下一个块的地址,找到下一个块,返回的时候下一块也存放了上一块的地址,所以跳到第一个数据块。找到数据存放空间的起始地址后,read、write调用驱动读写数据时,“块设备驱动程序”通过这个地址,就能够实现数据的读写。

stat("/new/xxx.txt", …);
这个函数获取文件属性时,也是按照相同的原理来索引的,找到文件的inode节点空间后,就可以将inode节点中的文件属性读取出来。
文件系统如何管理文件,文件系统通过“文件路径名”索引找到文件,(文件属性)【linux】(t)

索引找到目录文件

cd /new/,如何进入new目录的

文件系统如何管理文件,文件系统通过“文件路径名”索引找到文件,(文件属性)【linux】(t)

在/目录下,cd .
文件系统如何管理文件,文件系统通过“文件路径名”索引找到文件,(文件属性)【linux】(t)

在new目录下,cd . 和cd …
文件系统如何管理文件,文件系统通过“文件路径名”索引找到文件,(文件属性)【linux】(t)