文章目录
操作系统需要对磁盘进行那些管理
- 对非空闲磁盘块的管理
- 对空闲磁盘块的管理
文件存储空间管理
存储空间划分与初始化
- 文件卷的概念
- 目录区与文件区
几种管理办法
- 空闲表法
- 空闲链表法
- 位示图法
- 成组链接法
空闲表法
如下图就是一个磁盘空间,由无数个磁盘块组成,可以看到绿色为空闲块,橙色为非空闲块
我们可以使用这样一张表来记录每一个空闲块信息,例如0号位块附近有一个相邻的空闲块,所以他们空闲块长度为2,以此类推
而磁盘分配也可以按照下表所示,进行首次适应、最佳适应、最坏适应等算法完成文件分配到哪个区间
而回收也是 同理,例如上图中2号块回收了,他附近有0、1两个空闲块
空闲链表法
空闲盘链
即由一个个空闲块构成的链表,分配也很简单,需要几个就从链表头开始分配,回收则追加到链表尾
空闲盘区链
即由一个个连续空闲块构成的链,分配也是可以按照首次适应、最佳适应等算法分配空闲区,若不够就凑一个出来,回收也是同理看看回收的区附近有没有空闲区,若有则合并,没有则追加到链表尾巴
位示图法
很简单空闲区用0表示,非空闲就用1表示。若需要分配盘块,如下图所示,分配1字号10位号对应的物理块我们要怎么算呢?
可以看到1个字号16位,1字号的10号位说白了就是1个字号+10字节
即 1*16+10=26
所以他所对应的物理块号是26
而位示图法回收也很简单,将表位置为0即可
成组链表法
如下图所示,用一个超级块记录每一个空闲块。每个空闲块第一位记录下一组空闲块大小,后续空闲块指向下一组空闲块
假如我们要分配1个空闲块。我们会先看看超级块中是有一个空闲块,若有从拿出块尾指向的空闲块给系统,然后下一组空闲块数-1.
若需要分配100个空闲块,如下图所示,将超级快指向的下一组空闲块全部分配出去,超级快指向被分配出去的空闲的下一组空闲块数以及地址
回收也很简单,若超级块有足够的空间记录空闲块,则将空闲块信息记录起来,并增加空闲块数即可。
若没有则直接指向这个回收的空闲块,然后回收的空闲块记录并指向超级快原本维护的空闲块即可。