【操作系统学习笔记】文件管理1.6
参考书籍: 王道考研
视频地址: Bilibili
文件存储空间管理
存储空间的划分与初始化
安装 Windows 操作系统的时候,一个必经步骤是磁盘分区。每个区分为目录区(存放文件目录信息 FCB、用于磁盘存储空间管理的信息)和文件区
几种管理方法
空闲表法
适用于连续分配方式。与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间
当回收某个存储区时需要有四种情况:
- 回收区的前后都没有相邻空闲区: 新增一个表项
- 回收区的前后都是空闲区: 会合并表项,导致表项数量减一
- 回收区的前/后是空闲区
空闲链表法
空闲盘块链
以盘块为单位组成一条空闲链
系统保存着链头和链尾的指针,若某文件申请 K 个盘块,则从链头开始依次摘下 K 个盘块分配,并修改空闲链的链头指针
回收: 回收的盘块依次挂到链尾,并修改空闲链的尾指针
适用于离散分配的物理结构。为文件分配多个磁盘块需要多次操作
空闲盘区链
以盘区(连续的盘块)为单位组成一条空闲链
系统保存着链头和链尾的指针,若某文件申请 K 个盘块,则从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区。如果没有合适的连续空闲区,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据
位示图法
每个二进制位对应一个盘块。例如用 0 代表盘块空闲,1 表示盘块已分配。位视图一般用连续的字来表示,字中的每一位对应一个盘块。因此可以用(字号、位号)对应一个盘块号
如果某个文件需要 K 个块,顺序扫描位示图,找到 K 个相邻或不相邻的 0,根据字号、位号计算盘块号进行分配,将相应位设置为 1
成组链接法
空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX 系统中采用了成组链接法对磁盘空闲块进行管理
文件卷的目录区中专门用一个磁盘块作为超级块,当系统启动时需要将超级块读入内存,并且要保证内存与外存中的超级块数据一致
超级快第一块表示下一组空闲盘块数,后面都是空闲块号
若需要 100 块
- 检查第一个分组的块数是否足够
- 将分组的信息先保存到超级块中再分配