一个系统必须有文件管理系统,文件管理负责管理硬盘及文件。因为当关机了或者发生故障了,内存上的数据是会被清空的。
文件管理系统要实现以下目标:
1、硬盘管理
2、文件的存储管理
3、文件系统的管理
硬盘被分为若干个block,一个block的大小为 4KB。
通过位图来标记一个block是否空闲,也就是一个block ,4K, 有4 /* 1024 /* 8 个bit ,可以表示 128M 的空间。
通过若干个头部block来管理整个硬盘中对应的block
每次分配的时候,从位图中找到一个 位图中为0的对应的block,并将其位图中的bit置为1
每次回收的时候,将位图中对应的bit置为0,
一个文件对应着一个inode,inode中记录了文件对应的详细信息,比如名字、更改时间、所属用户、所属组等信息,以及对应的存储的block信息。
每个Inode都有一个唯一的ID。
Linux通过哈希表来存放所有的Inode,并通过拉链来解决冲突。
可以快速的查找和插入Inode。
哈希表中存储的Inode的Id以及对应的块号。
ext3和ext4对应的组织方式不一样。
ext3架构图
ext3中,每个innode对应着block数组,前12个为直接映射,后3个为间接映射。
ext4的架构图
ext3有一个缺点:
对于大文件,需要多次读取硬盘才能访问到对应的数据。
ext4通过 树 的方式,类似于一种多叉树。
叶子节点存储的就是实际的数据,多叉树随着深度的增加,所对应的节点个数是指数增长的。
相较于EXT3,每次访问大文件,都需要经过多次间接的硬盘访问才能访问到存放真实数据的block。因为对应的block中存放的是存放真实数据的block的索引地址。
EXT4,因为引入了多叉树,每次只需要少数的间接的硬盘访问,就可以访问到存放真实数据的block。
一个操作系统中存在很多个文件,怎么有效的管理文件呢?
Linux采用的树状结构,也就是目录结构,通过目录来管理文件
这里面有一个非常关键的问题,目录怎么存储。
在Linux中,目录也被当作一个文件,也有对应的inode,只不过目录文件中存储的是 文件和目录信息。
为了快速的在目录文件中检索对应的文件或者目录,引入了 哈希索引,每个哈希值对应的有一个块号,对应的块中存储的有对应的文件信息和目录信息。
通过哈希值可以快速找到对应的块号。
硬链接: 新建文件和原始文件共用一个Inode节点,当所有文件都删除的时候,才会彻底删除对应的文件。不可以跨文件系统建立链接。
软链接: 文件新建一个Inode节点,文件中存储的是对应的链接,指向原始文件。可以跨文件系统建立链接。
文件描述符 简称FD,一个文件描述符对应着一个打开的文件。
与以下三个数据结构有关:
1、 每个进程都有的一个文件描述符表
2、 内核中唯一的文件记录表
3、 文件系统的INode的哈希表
FD就是进程的文件描述符表的对应的文件记录的索引下标,是一个非负的整数
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_40276626/article/details/120478538
内容来源于网络,如有侵权,请联系作者删除!