Linux文件管理

x33g5p2x  于2021-09-28 转载在 Linux  
字(1.2k)|赞(0)|评价(0)|浏览(574)

Linux文件管理简介

一个系统必须有文件管理系统,文件管理负责管理硬盘及文件。因为当关机了或者发生故障了,内存上的数据是会被清空的。

文件管理系统要实现以下目标:
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就是进程的文件描述符表的对应的文件记录的索引下标,是一个非负的整数

相关文章