文件存储空间管理

之前的文件物理结构实际上是对磁盘非空闲块的管理,下面来看看操作系统对磁盘空闲块的管理

下面将涉及以下内容

存储空间的划分与初始化

现在我们肯定要对电脑做的一件事就是给我们的电脑分盘(C,D,E,F····盘)

空闲表法

如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。

如何回收磁盘块:与内存管理中的动态分区分配很类似,当回收某个存储区时需要有四种情况①回收区的前后都没有相邻空闲区;②回收区的前后都是空闲区;③回收区前面是空闲区;④回收区后面是空闲区。总之,回收时需要注意表项的合并问题。

空闲链表法

  • 空闲盘块链:以盘块为单位组成一条空闲链

操作系统会保存链头,链尾指针(上图中链头是20,链尾是0)

如何分配:当某文件申请k个盘块,则从链头开始一次摘下K个盘块分配,并修改空闲链的链头指针

如何回收:回收的盘块一次挂到链尾,并修改空闲链的链尾指针

适用于离散分配的文件结构,而且当为一个文件分配多个磁盘块时需要多次操作,需要一个个摘

  • 空闲盘区链:以盘区为单位组成一条空闲链(比如下面0一组,6,7一组,12,13,14一组···每一组就是一个区),每个空闲盘区的第一块惠济路盘区的长度,下一盘区的指针

解释一下最后那句,比方说现在要回收17,18这两块,因为前后没有相邻的空闲盘区,就把他俩作为一个空闲盘区挂在链尾

既适用于离散分配又适用于连续分配,为一个文件分配多个盘块时效率更高

位示图法

上图中字长就是16,n就是16,比方{1,10},那盘块号就是1*16+10=26

比方说盘块号是17,那字号就是17/16=1,位号,就是17%16=1

既适用于连续分配又适用于离散分配

成组链接法

因为空闲表和空闲链表可能过大,因此不适用于大型文件系统,unix系统采用了成组链接发对磁盘空闲块进行管理

文件目录区专门用一个磁盘块作为超级块,当系统启动时将超级块读入内存,并保证内存与外存中的超级块数据一致

如下图就是成组链接的一个实现,超级块要保存下一组空闲块号,比如图中100,还有下一组的空闲块号。同样的下一组也可像超级块这样保存下一组的,但是注意,最后一组比前面的是要少的,因为有上一组有1个-1来表示终止了;注意图中虽然是按顺序来的,什么300-201呀啥的,只不过是为了表明数量关系,实际上不需要时连续的

如何分配:比方说需要一个空闲块,拿去与超级块存的那个100比,发现可以,是小于100的,那就将第一分组的一个空闲块分给他,并修改超级块中数据,但是注意像,300这块不能乱动,因为会牵连到后面的组

如果需要100块,发现100=100,是足够的,可以把第一个分组的100块分给他,但是因为300号块内存储了下一组的数据,因此需要将300号内的数据复制到超级块中

怎么回收空闲块:比方说每个分组最多有100块

如果此时第一个分组没满,只有99块,那就把这个空闲块加到第一组

如果此时第一个分组已经满了,就把超级快的内容复制到新的空闲块中,并让他作为第一个分组

-------------本文结束感谢您的阅读-------------