前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >空闲空间管理(文件系统)

空闲空间管理(文件系统)

作者头像
shysh95
发布2021-10-26 12:37:56
1.2K0
发布2021-10-26 12:37:56
举报
文章被收录于专栏:shysh95

Hi~朋友,关注置顶防止错过消息

摘要

  1. 空闲空间管理
  2. 文件系统结构
  3. 目录存储
  4. 软链接和硬链接

空闲空间管理

为了提高为文件分配空闲空间的效率,我们需要通过空闲空间管理来维护好现有的空闲空间,避免每次为文件分配空间时去扫描整个磁盘。

常见的空闲空间管理方式有以下几种:

  • 空闲表法
  • 空闲链表法
  • 位图法

空闲表法

空闲表法的实现?

空闲表法就是为所有的空闲空间建立一张表,表中的内容包括空闲区的第一个块号和该空闲区的个数。

请求分配磁盘空间时,需要扫描空闲表里的内容,直到找到一个合适的空闲区域为止。当用户删除一个文件时,系统也需要回收空间,也需要扫描空闲表,寻找一个空闲表条目并将第一个物理块号和它占用的块数填到这个条目中。

该方法不适合管理有着大量小空闲区的磁盘,因为这样整个表会很大,扫描效率会很低。

空闲链表法

每一个空闲块里有一个指针指向下一个空闲块,这样只需要在系统中维护一个指针(令他指向第一个空闲块),便可以找到所有的空闲块,结构简单,但是不能随机访问,工作效率低,同时数据块的指针消耗了一定的存储空间。

位图法

位图就是利用二进制的每一位来表示磁盘中一个块的使用情况,磁盘上所有的块都有一个二进制位与之对应。

当值为0时,表示块空闲,值为1时,块已分配,形式如下:

代码语言:javascript
复制
11111111001111111100......

Linux操作系统中就采用了位图的方式来管理空闲空间,不仅用于数据空闲块的管理,还用于inode空闲块的管理,因为inode也是存储在磁盘的。

文件系统的结构

用户在创建一个文件时,Linux内核会通过inode的位图找到空闲可用的inode,并进行分配。存储数据时,会通过块的位图找到空闲的块并分配。

Linux中有一个结构成为块组,通过N多个块组我们能够表示N大的文件,

  • 引导块:在系统启动时启用引导
  • 超级块:存储了文件系统的重要信息,比如inode总个数、块总个数、每个块组的inode个数、每个组块的块个数等等
  • 块组描述符:存储了文件系统中各个块组的状态,比如块组中空闲块和inode的数目,每个块组都包含了文件系统中所有块组的描述符信息
  • 数据位图和inode位图:用于表示对应的数据块或inode是空闲的还是被使用中
  • inode列表:包含了块组中所有的inode,inode用于保存文件系统中与各个文件和目录相关的所有元数据信息
  • 数据块:包含文件的有用数据

超级块和块组描述符表都是全局信息,之所以在每个块组中都存在主要有两个原因:

  • 如果系统崩溃损坏了超级块或块组描述符,通过冗余的备份也可恢复
  • 通过使文件和管理数据尽可能的近,减少了磁头的寻道和旋转,提高文件系统的性能。

Ext2的新版本采用了稀疏技术,就是超级块和块组描述符表不再存在于每一个块组,而是只写入到块组0、块组1和其他ID可以表示为3、5、7的幂的块组中。

目录存储

普通文件的块里面保存的是文件数据,目录文件的块里面保存的是目录里面的一项一项的文件信息。

目录块的列表中每一项代表该目录下的文件的文件名和对应的inode,通过这个inode就可以找到真正的文件。

通常第一项是.,表示当前目录,第二项是..,表示上一级目录,接下来就是一项一项的文件名和inode。

如果一个目录有很多文件,在目录下找文件将会比较耗时,于是保存目录的格式改为哈希表,对文件名进行哈希计算,把哈希值保存起来,这样会提高查询效率,这种方式需要一些预备措施避免哈希冲突。

目录查询是通过在磁盘上反复搜索完成,需要不断进行IO操作,因此为了减少IO操作,把当前使用的文件目录缓存在内存,从而降低了磁盘的操作次数,提高了文件系统的访问速度。

软链接和硬链接

硬链接是多个目录项中的索引节点指向一个文件(同一个inode),但是inode是无法跨文件系统的,因此硬链接是不可用于跨文件系统的。

由于多个目录项都是指向一个inode,因此必须删除文件的所有硬链接及源文件时,系统才会彻底删除该文件。

软链接相当于重新创建一个文件,这个文件有独立的inode,但是这个文件的内容可以是另一个文件的内容,软链接是可以跨文件系统的,目标文件即使被删除了,链接文件还是在的,只不过找不到指向的文件而已。

本期文件系统就到这,扫码关注,更多内容我们下期再见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员修炼笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档