文件系统——文件在磁盘中的分配方法

今天我来和大家一起讨论下文件系统的实现,主要讨论文件在磁盘中的分配方法
在讨论如何实现文件系统之前,我们先来了解下文件系统的结构。

文件系统的结构可分为六层(从下到上)

  • 1)设备层:寻找特定磁道,读写扇区
  • 2)I/O控制层:在主内存和磁盘系统之间进行信息交流;告诉设备要寻找哪个磁道、哪个扇区,要执行什么操作
  • 3)基本文件系统:向I/O控制层发送通用命令;管理内存缓冲区和保存各种文件系统、目录和数据块的缓存
  • 4)文件组织模块:知道文件及其逻辑块和物理块;将逻辑地址转成物理地址
  • 5)逻辑文件系统(用户可见):管理目录结构;根据给定文件名为文件组织模块提供所需信息
  • 6)应用程序

我们通过文件控制块(FCB)来控制和管理各个文件。(类似于进程控制块PCB)

文件系统的实现可分为三个主要层

  • 1)文件系统接口
  • 2)虚拟文件系统(VFS):定义了一个清晰的VFS接口,将文件系统的通用操作和实现分开
  • 3)实现具体的文件系统类型或远程文件系统协议

在这里我只简要提及文件系统的这个三个主要层,大家感兴趣可以深入了解下,本文的主讲内容是文件的分配方法。
我们都知道,磁盘中的空间是按一个又一个块来进行划分的。如何设计文件的分配算法是影响计算机性能、资源利用率的一个重要因素。下面我来谈谈三种常用的文件分配方法。

文件的分配方法

1. 连续分配

每个文件在磁盘上占有一组连续的块(类似于内存分配的动态内存分配方法)。

  • 在连续分配的方法下,目录的每一个项记录的是该文件首块的磁盘地址和连续的块数(即长度)。

优点
支持顺序访问和随机访问。
缺点

        1)存在外部碎片,浪费空间(出现的孔洞较多)。

        2)文件无法增长。

解决的方法:当连续的空间不足以分配时,或者文件需要增长时,添加另一块连续空间(扩展),用指针链表将各个部分的连续空间链接起来。

2.链接分配

每个块用链表链接起来(每个块都有下一个块的指针),磁盘块可能会散布在磁盘的任何地方。

  • 在链接分配的方法下,目录的每一个项记录的是该文件的第一个块和最后一个块的指针;
  • 当读取文件时,只需要从第一个块开始,根据链表的顺序读,直到读到最后一个块。

优点

        1)提高了空间利用率,不存在外部碎片。
        2)文件可增长(只要磁盘中还有空闲块)。

缺点

        1)只支持顺序访问,不支持随机(直接)访问。

        2)结构比较脆弱;当链表中的一个块丢失或损坏时,其后面的块也无法读取。

        3)链表指针占用一定的空间。

文件分配表(FAT):链接分配的一个变种;在该表中存储了每一个磁盘块的条目,即每一个磁盘块的下一个块的块号(通过查看FAT的方法连续读取块,从而读取文件;而非采用链表指针的方式链接读取)。

3.索引分配

给每个文件在磁盘中分配一个索引块(索引块的大小一般为一个磁盘块),存储该文件的所有块的指针(在索引块中,文件的块的指针是按照顺序来存放的)。

优点

        1)支持直接(随机)访问。

        2)不存在外部碎片的问题。

        3)满足了文件的动态增长和删除的需求。

        4)充分利用了外存空间。

缺点

        1)每次读取需要访问两次磁盘块(一次访问索引块,一次访问具体物理块)。

        2)索引块带来了系统的开销(索引块是固定大小的,初始化时其内存放的所有指针都是空指针。一个索引块中可能只有一两个指针非空,其他存放的指针都是空的(即该文件只分配到了一个或两个磁盘块))。

大多数计算机所使用的文件分配方法都是多级索引分配法。
多级索引分配:更高级的索引块存储低一级的所有索引块的指针,类似于二级页表对应一级页表。

以上便是本文的所有内容,希望对大家有所帮助
#操作系统知识点总结##面试题目##大学生活让你懂得了什么#
全部评论
文件系统很复杂的
点赞 回复 分享
发布于 2022-08-21 15:39 陕西

相关推荐

我的名字是句号:接好运
点赞 评论 收藏
分享
03-24 16:56
已编辑
肇庆学院 后端
一天代码十万三:你看看人家进大厂的简历就知道了,你这个学历得acm+大厂实习+熟悉底层+运气很好 才有可能进某个大厂,因为大部分是直接卡学历的
投递快手等公司10个岗位
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务