Loading

34-文件存储空间管理

文件存储空间管理请添加图片描述

对存储空间的管理起始是对空闲块的管理

存储空间的划分与初始化

文件卷的概念

存储空间的划分:将物理磁盘划分位一个个的文件卷(逻辑卷逻辑盘)
有些系统支持超大型文件,可支持由多个物理磁盘组成的一个文件卷

目录区与文件区

存储空间初始化的时候将各个文件卷划分为目录区文件区
目录区:主要存放文件目录信息,主要用于磁盘处处空间的管理信息
文件区:用于存放文件数据

管理方法

空闲表法

空闲表法适用于连续分配方式
如何分配磁盘块:
与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间,同样采用首次适应,最佳适应,最坏适应来决定为文件分配哪个空间。
如何回收磁盘块:
注意表项的合并问题
1. 回收区的前后都没有相邻空闲区
2. 回收区的前后都是空闲区
3. 回收区的前面是空闲区
4. 回收区的后面是空闲区

空闲链表法

空闲盘块链

空闲盘块链:以盘块为单位组成一条空闲链
空闲盘块中存储着下一个空闲盘块的指针
操作系统保存着链头,链尾指针
如何分配:
若某文件申请K个盘块,则从链头开始一次摘下K个盘块分配,并修改空闲链的链头指针
如何回收:
回收盘块依次挂到链尾,并修改空闲链的链尾指针

空闲盘区链

空闲盘区链:以盘区为单位组成的一条盘区链
空闲盘区链离散分配、连续分配都适用。为一个文件分配多个盘块时效率更高。
操作系统保存着链头,链尾指针
如何分配:
若某文件申请K个盘块,则可以采用首次适应,最佳适应,最坏适应算法等,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针,盘区大小等数据。
如何回收:
与空闲表法相似,但是依旧要注意表项的合并问题
1. 若回收区与某个空闲盘区相邻,则需要将回收区合并到空闲盘区中
2. 若回收区没有和任何一个空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾

位示图法

考试中最常考
位示图:每个二进制位对应一个盘块,在图例中,"0"代表盘块空闲,"1"代表盘块已分配,位示图一般用连续的"字"表示,如本例中的一个字的字长是16位,字长中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号。
如何分配:
若系统需要K个块
1. 顺序扫描示位图,找到K个相邻或不相邻的0
2. 根据字号,位号算出对应的盘块号,将相应盘块分配给文件
3. 将相应位设置为1
如何回收:
1. 根据回收的盘块号计算出对应的字号、位号
2. 将相应的二进制设置为0请添加图片描述
注意题目条件:盘块号,字号,位号到底是从0开始还是从1开始
(字号,位号)=(i,j),对应盘块号 b=ni+j
b号盘块对应的字号 i=b/n,位号j=b%n

成组链接法[这块没有掌握清楚,做题时着重看一下]

空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表法可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。
文件卷的目录区专门用一个磁盘块作为"超级块",当系统启动时需要将超级块读入内存,并且要保证内存和外存中超级块的数据一致。超级块充当了链头作用
如何分配: 譬如需要1个空闲块
1. 检查第一个分组的块数是否足够,1<100 因此是足够的
2. 分配第一个数组中的1个空闲块,并且修改相应数据
如何分配: 譬如需要100个空闲块
1. 检查第一个分组的块数是否足够,100=100 因此是足够的
2. 把100个磁盘块全部分配.但是由于300号块内存放了再下一组的信息,因此300号块的数据需要复制到超级块中
如何回收:假设每个分组最多为100块,此时第一个分组已经有99块,还需要再回收一块
1. 需要将超级块中的数据复制到一个新回收的块中,并修改超级块的内容,让新回收的块称为第一个分组请添加图片描述

posted @ 2023-02-04 10:04  nliuc  阅读(140)  评论(0编辑  收藏  举报