文件系统、磁盘空间分配、分区

文件系统的实现

1)boot control block(引导控制块) :
-通常是卷的第一块
-从该卷中引导操作系统的所需信息
-如果磁盘不包含操作系统,则block为空

2)column control block(卷控制块) :
-包含块的基本信息
-在UFS中中被称为superblock(超级块)
在这里插入图片描述
3)目录结构 :
-用于组织文件
在这里插入图片描述

分区

  • 一个磁盘有多个分区。
  • 生 / 熟 :如果是生的,说明没有经过处理;如果是熟的,说明其被格式化过,已经经过处理。
  • 不需要每次都读磁盘(因此提高效率),因此将文字描述符拷贝到内存中去,方便读取

目录结构的实现: 目录的结构包含一个文件名的列表,然后把数据信息放在列表中。

  • 缺点:搜索文件的时候要遍历链表
  • solution:加入哈希表提高效率(根据文件名查目录结构,查出对应位置和具体信息)。

每个文件的block分配方法

1)连续分配:
分配占用的block是一组连续的block。连续分配的存取性能非常好,快,简单(只用记录开始位置和长度)
【问题】当出现新文件的时候,找到新空间分配给他会有麻烦——外部碎片。当被分配的文件非常大,想要连续分配,有可能本来容量够大,但是因为外部碎片的影响就存放不下。

2)链式分配:
一个文件的数据块被组织成链表的形式。链表每一块的末尾都包含下一块的指针。
【问题】1. 对于文件的直接访问效率非常低。2. 可靠性也低,如果指针丢失或损坏有些block可能就会找不到了。

3)索引分配:
将所有的指针放在一起,每个文件都有自己的索引块,是一个磁盘地址的数组。索引块的第i个条目指向文件的第i个块
在这里插入图片描述
【问题】管理机制更复杂。

空闲空间管理

1)bit vector(位向量):
每个块用一个bit来表示——如果块为空闲,则为1;如果块空闲,则为0。
【优点】容易找到、简答高效。
【问题】除非所有的位向量都保存在内存中,不然通过磁盘的访问也会造成低效。

2)link list(链表):
将所有空闲的block磁盘块用链表连接起来,将指向第一空闲快的指针保存在磁盘的特殊位置上,同时也将其缓存在内存中。
【问题】有时候访问的效率不高,因为需要遍历链表,从而需要大量的I/O时间。
在这里插入图片描述

发布了22 篇原创文章 · 获赞 18 · 访问量 7175

猜你喜欢

转载自blog.csdn.net/weixin_43525427/article/details/103608124