文件系统实现

结合Linux系统,果然理解更进一步。

  1. 文件系统层次结构
    现代操作系统由多种文件系统类型,层次结构也不尽相同,但是一种基本的层次结构如下:
  • 用户调用接口
    文件系统为用户提供与文件及目录有关的调用
  • 文件目录系统
    主要功能是管理文件目录
  • 存取控制验证
    用户的访问要求和FCB中指示的访问控制权限进行比较,确认访问的合法性
  • 逻辑文件系统和文件信息缓冲区
    根据文件的逻辑结构将用户要读写的逻辑记录转换成文件逻辑结构内的相应块号,得到相应文件内容的逻辑地址。
  • 物理文件系统
    将逻辑记录所在的相对块号转换成实际的物理地址
  • 分配模块
    管理辅存空间,分配辅存空闲空间和回收辅存空间,如果要释放这块空间,那么交给辅助分配模块,如果要把这块空间分配给设备用于输入输出,那么把任务交给设备管理程序模块。
  • 设备管理程序模块
    分配设备,分配设备读写用缓冲区,磁盘调度,启动设备,处理设备中断,释放设备读写缓冲区,释放设备等。
  1. 目录实现
    目录项中提供了查找文件磁盘块所需要的信息,目录实现的基本方法有线性列表和哈希表。目录的实现就是为了查找。线性列表对应线性查找,哈希表实现对应散列查找。
  • 线性列表
    最简单的目录实现方法为使用存储文件名和数据块指针的线性表。
  • 哈希表
    哈希表通过文件名得到一个值,并返回一个指向线性列表中元素的指针。最大困难是哈希表长度固定和哈希函数对表长的依赖性。
  1. 文件实现
    抽象数据类型,研究其逻辑结构,物理结构和一系列操作。
    文件的实现就是研究其物理结构,文件数据在物理存储设备上是如何分布以及组织起来的。
    第一个是文件的分配方式,是对磁盘非空闲块的管理。
    第二个是文件存储空间管理,是对磁盘空闲块的管理。
  • 文件分配方式
    文件分配对应于文件的物理结构,指如何为文件分配磁盘块。
    • 连续分配
      每个文件在磁盘上占有一组连续的块,文件的连续分配可以用第一块的磁盘地址和连续块的数量来定义。一个文件的目录条目包括开始块的地址和该文件所分配区域的长度。
      支持顺序访问和直接访问,但是文件长度不宜动态增加,容易产生外部碎片。
    • 链接分配
      离散分配,消除了外部碎片。
      • 隐式链接
        每个文件对应一个磁盘块的链表,磁盘块分布在磁盘的任何地方,除最后一个磁盘块外,每一个盘块都有指向下一个盘块的指针(隐式),目录包括文件第一块的指针和最后一块的指针。
        无法直接访问盘块,只能根据指针顺序访问文件,另外可能导致链表中的指针丢失或者损坏,文件数据丢失。
      • 显式链接
        将链接文件各物理块的指针,从物理块的块末尾中提取出来,显示的放在内存一张链接表中,每个表项中存放对应块的下一块链接指针,即下一个盘块号。第一个盘块号,链首指针对应的盘块号,作为文件地址填入文件FCB的物理地址字段中。分配给该文件的所有盘块号都在该表中,称为文件分配表。
    • 索引分配
      将每个文件的所有的盘块号都集中放在一起构成索引块(表),可以随机访问。
      每个文件都有索引块,磁盘块地址的数组,索引块的第i个条目指向文件的第i个块,目录条目包括索引块的地址。
      支持大文件:为了处理大文件,将多个索引块链接起来。或者多层索引。混合索引,直接地址,单级索引分配方式或者两级索引分配方式。
  • 文件存储空间管理
    一个文件存储在一个文件卷中,文件卷可以是物理盘的一部分,也可以是整个物理盘,支持超大型文件的文件卷也可以由多个物理盘组成。
    在一个文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分离的。
    文件管理模块,通过这些模块访问不同格式的逻辑卷中的文件,逻辑卷在提供文件服务前,必须由对应的文件程序进行初始化,划分好目录区和文件区,建立空闲管理表格及存放逻辑卷信息的超级块。
    文件存储设备的管理实质上是对空闲块的组织和管理,包括空闲块的组织,分配与回收等问题。
    • 空闲表法
      连续分配方式,为每个文件分配一块连续的存储空间,所有空闲区建立一张空闲盘块表,每个空闲区对应一个空闲表项。
      空闲区分配同样有首次适应算法,循环首次适应算法。
      考虑回收的时候进行合并。
    • 空闲链表法
      所有空闲盘区拉成一条空闲链。
      • 空闲盘块链
        盘块为单位拉成一条链。
      • 空闲盘区链
        空闲盘区(可能包含多个盘块)拉成一条链,每个盘区上除了含有指示下一个空闲盘区的指针外,还有本盘区的大小信息,分配使用首次适应算法,回收时,要将回收区与相邻接的空闲盘区合并。
    • 位示图法
      由位置号码计算盘块号,b=n(i-1)+j n表示一行多少位
      由盘块号计算行号列号 i=(b-1) DIV n+1取商的整数和余数
    • 成组链接法
      把顺序的n个空闲扇区地址保存在第一个空闲扇区中,其后一个空闲扇区则保存另一顺序空闲扇区的地址,直到所有空闲扇区都有链接,系统只需要保存一个指向第一个空闲扇区的指针。
      第一个成组链块以及卷中的目录区,文件区划分信息都需要保存在辅存储器中,一般放在卷头位置,UNIX系统中称之为超级块。在对卷中的文件进行操作之前,超级块预先读入系统空闲的主存,并且保持主存超级块和卷中超级块的一致。

Tips:

  1. 直接地址索引指向数据块大小就是物理块的大小,一级间接地址索引指向的数据块大小,是物理块容纳的地址项数目乘以物理块大小,二级间接地址索引指向的数据块大小,是物理块容纳的地址项数目的平方乘以物理块大小。
  2. 文件存储空间管理即文件空闲空间管理,文件管理要解决的问题是,如何为创建文件分配存储空间,即如何找到空闲盘块,并对其进行管理。
  3. 理解盘块数,FCB(目录项),物理盘块的大小,容纳的地址项数目相关的计算。

你可能感兴趣的:(文件系统实现)