【汤4操作系统】深入掌握操作系统-文件管理篇

第六章 文件管理

image-20230614091116769

文件

数据项&记录&文件

数据项分为:

  • 基本数据项:描述对象的某些属性,例如学生的年龄,姓名学号等
  • 组合数据项:由若干个基本数据项组合而成

记录:一组相关数据项的集合,用于描述一个对象在某方面的属性

文件:文件是指由创建者所定义的、 具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种

  • 有结构文件:文件由若干个相关的记录组成
  • 无结构文件:被看成一个字符流

文件的属性

  • 文件的类型

    • image-20230614091722409
    • image-20230614091733296
    • image-20230614091739266
    • image-20230614091747635
  • 文件的长度

  • 文件的物理位置

  • 文件的创立时间

文件系统模型

image-20230614091858579

  • 对象及其属性:文件管理的对象有文件、目录和文件存储器
  • 对对象操纵和管理的软件集合。这是文件系统的核心部分,实现了
    • 对文件存储空间的管理
    • 文件目录管理
    • 文件的逻辑地址向物理地址的转换
    • 文件的读写管理
    • 文件的共享和保护
  • 文件系统接口。文件系统向用户提供的接口有命令接口、程序接口、图形用户接口三类,用户可以通过它们来使用文件系统。

文件的逻辑结构

文件的逻辑结构:从用户观点出发,所观察到的文件组织形式,是用户可以直接处理的数据及结构,独立于物理特性,又称为文件组织

image-20230424171721227

  • 无结构文件:流式文件
  • 有结构文件:由一组相似的记录组成,又称记录式文件。每个记录又有若干数据项组成
  • 根据有结构文件中的各条记录在逻辑上如何组织可以分为三类

顺序文件

顺序文件:文件中的记录一个接一个地顺序排列

  • 串结构:记录之间的顺序与关键字无关
  • 顺序结构:记录之间的顺序按关键字顺序排列

image-20230424172220635

image-20230425091119063

  • 对于可变长记录,无法实现随机存取
  • 对于定长记录,可随机存取,串结构无法快速检索
  • 增加/删除一个记录比较困难

索引文件

解决可变长记录的随机存取

image-20230425091412244

  • 优点:将一个需要顺序查找的文件改造成一个可随机查找的文件,极大地提高了对文件的查找速度。
  • 利用索引文件插入和删除记录也非常方便
  • 缺点:除了主文件外还需要配置索引表,增加了存储开销

索引顺序文件

索引表是一个定长记录的串结构的顺序文件

  • 基本克服了变长记录的顺序文件不能随机访问,以及不便于记录的删除和插入的缺点
  • 仍保留的顺序文件的关键特征,即记录是按关键字的顺序组织起来的

image-20230425091545550

image-20230425091622289

多级索引顺序文件

image-20230425091706960

image-20230425091723883

image-20230425091811514

文件的物理结构

对任一文件都存在两种形式的结构

  • 文件的逻辑结构:从用户观点出发,所观察到的文件组织形式,是用户可以直接处理的数据及结构,独立于物理特性,又称为文件组织
  • 文件的物理结构:又称为文件的存储结构。是指系统将文件存储在外存上所形成的一种存储组织形式,用户看不见,与存储介质的存储性能有关还和采用的外存分配方式有关
  • 文件的逻辑结构和物理结构都将影响文件检索的速度

连续分配(顺序分配)

顺序文件结构

连续分配要求为每个文件分配一组相邻接的盘块,一组盘块的地址定义了磁盘上的一段线性地址。

  • 把逻辑文件中的数据顺序地存储到物理上邻接的各个数据块中,这样形成的物理文件可以顺序读取
  • 文件目录中为每个文件建立一个表项,其中记载文件的第一个数据库地址及文件长度
  • 对于顺序文件连续读写多个数据库内容时,性能较好

image-20230614094155074

  • 优点:
    • 顺序访问容易,可以随机存取可以很快检索文件中的一个数据库
    • 顺序访问速度快
      • 磁头移动距离短,效率高
  • 缺点
    • 要求有连续的存储空间,可能会导致外部碎片,降低外存利用率【可以紧凑】
    • 必须事先直到文件的长度
      • 空间利用率不高
      • 不利于文件尺寸的动态增长

链接分配

  • 链接文件:采用链接分配方式时,可通过在每个盘块上的链接指针,将同属于一个文件的多个离散盘块链接成一个链表,把形成的文件称为链接文件

  • 隐式链接

    • 文件目录的每个目录项中,都须含有指向链接文件第一个盘块和最后一个盘块的指针,每个盘块中都含有指向下一个盘块的指针
    • image-20230614094802566
    • 主要问题:只适合顺序访问,对随机访问极其低效
      • 为了提高检索速度和减少指针所占用的存储空间,可以将几个盘块组成一个簇
      • 减少了查找时间和指针所占用空间,但增大了内部碎片
  • 显式链接

    • 把用于链接文件各物理块的指针,显示地存放在内存的一张链接表中
    • 整个磁盘仅设置一张文件分配表(FAT)
      • 分配给文件的所有盘块号都存放在该表中
    • 凡是属于某一文件的第一个盘块号,均作为文件地址被填入相应文件的FCB的物理地址字段中
    • 查找记录的过程是在内存中进行的,因而不仅显著提高了检索速度,而且大大减少了访问磁盘的次数
    • image-20230614095552871
  • 优点:

    • 无外部碎片,没有磁盘空间浪费
    • 无需事先知道文件大小。文件动态增长时,可动态分配空闲盘块
  • 缺点:

    • 不能支持高效随机/直接访问,仅适合于顺序存取
    • 需要为指针分配空间【隐式链接】
    • 可靠性低
    • 文件分配表占用较大内存

索引分配

链接分配的问题

  • 不能支持高效的直接存取
  • FAT需要占用较大的内存空间1

image-20230614095932206

image-20230614095949988

image-20230614100008475

image-20230614100041447

image-20230614100046691

假设每个盘块大小为1KB,每个盘块号占4个字节,则在一个索引块中可放256个文件物理块的盘块号。在两级索引时,最多可包含的存放文件的盘块的盘块号总数为256*256=64K个盘块号。可以得出:采用两级索引时,所允许的文件最大长度为64MB。

image-20230614100202771

image-20230614101503609

文件存储空间的管理

  • 存储空间的基本分配单位是磁盘块

  • 空闲分区表:属于连续分配方式,为每个文件分配一块连续的存储空间,系统为空闲区建立一张空闲表,存储序号,第一空闲盘块号和空闲盘块数。适合于可变大小分区的连续分配

  • image-20230614104821272

    分配时,可以按照之前的分配算法进行分配,如首次适应算法,当删除文件释放空间时,系统回收其存储空间,合并相邻空闲分区。

    实现简单,空闲分区分布较分散且数量较多时,空闲分区表很大需要较大的内存空间,会降低空闲分区表的检索速度

    浪费存储空间,不适合登记分散且数目很多的空闲分区,不利于基于存储块的链接文件和索引文件的存储空间分配

  • 空闲链表法

    • 空闲盘块链:以盘块为单位,将空闲的盘块连接成一条链,当创建文件时,从链表头开始,依次摘下适当的数目的空闲盘块进行分配,系统回收时,将回收的盘块依次插入链表尾部

      • 优点:用于分配和回收一个盘块的过程非常简单
    • 空闲盘区链:以空闲盘区(可能包含多个连续空闲盘块)为单位,将空闲盘区连接成一条链,分配时一般采用首次适用算法,在回收盘区时,同样也要将回收区域相邻接的空闲盘区相合并

    • image-20230614105328629

    • 问题:一段时间后,可能空闲分区链表中太多小分区,文件分配的存储空间太过分散,删除回收需要很长时间,若一个文件申请连续存储空间,则需要花费较长时间查找相邻的空闲分区

    • 适合非连续存储文件位示图:利用0,1表示物理块是否被使用,一般采用二维数组来存储,在进行盘块分配时,书序扫

      描位示图,从中找出一个或一组的空闲盘块,进行分配后更改位示图中的值

  • 位示图:利用0,1表示物理块是否被使用,一般采用二维数组来存储,在进行盘块分配时,顺序扫描位示图,从中找出一个或一组的空闲盘块,进行分配后更改位示图中的值

    • image-20230614105644550
    • 盘块的回收:
    • 将回收盘块的盘块号转换为位示图的行号和列好
      • i = (b-1)div n + 1,j = (b-1)mod n + 1
    • 修改位示图 map[i,j] = 0
    • 优点:
      • 很容易找到一个或一组连续的空闲分区
      • 占用空间小
    • 缺点:
      • 对于大硬盘难以将位示图全部装入内存
      • 磁盘空间快用完,性能严重下降
  • 成组链接法

    • image-20230614110016466

    • image-20230614110026248

    • image-20230425112218742image-20230425112507218

    • 每一组的第一个盘块用来记录下一组的盘块数量和盘块号的信息,其余号对应空闲块;每一个用于记录的磁盘块都是记录下一组的信息。

      image-20230425112604962

      分配201号盘块

      image-20230425112653676

      把300的磁盘块数据复制到超级块中

      回收没满直接插

      image-20230425112737499

      回收满了,新建一个区,先复制超级块,再新建超级块指向新回收的块

      image-20230425112845390

      image-20230425113001992

文件目录

  • 文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用

    • 对目录管理的要求如下:
      • 实现按名存取
      • 提高对目录的检索速度
      • 文件共享
      • 允许文件重名
  • **文件控制块【FCB】:**用于描述和控制文件的数据结构

    • 从文件管理的角度来看,文件由文件体和FCB组成
    • 文件控制块是操作系统为了管理文件而设置的数据结构,存放了文件的有关说明信息,记录了系统对文件进行管理所需要的全部信息
    • FCB是文件存在的标志
    • FCB保存在文件目录中,一个FCB就是一个目录项
    • 内容包含
      • 基本信息:文件名、文件类型等
        • 地址信息:卷【存储文件的设备】、起始地址、文件长度
      • 存取控制信息:文件存取权限
      • 使用信息:创建时间、修改时间、访问时间
  • 文件目录:文件控制块的有序集合

  • 目录项:构成文件目录的项目,就是FCB

  • **目录文件:**为了实现对文件目录的管理,通常将文件目录以文件的形式保存在外存,文件叫做目录文件。

索引结点

  • UNIX系统中,采用了把文件名和文件描述信息分开的方式,把文件描述信息单独形成一个数据结构,叫索引结点
    • 为什么引入?
      • 在检索目录文件时,只用到了文件名,仅当找到一个目录项时,才需要从目录项中读取出该文件的物理地址,而其他一些对该文件进行描述的信息在检索目录时一概不要,显然在检索目录时这些信息不需要调入内存

目录结构

  • 单级目录结构:所有用户的全部文件目录保存在一张目录表中,每个文件的目录项占用一个表项

    • image-20230614112843501
    • 优点:实现了按名存取
    • 缺点
      • 查找速度慢
      • 不允许重名
      • 不便于实现文件共享
  • 两级目录结构:分为主目录和用户目录

    • 为每个用户建立单独的用户文件目录
    • 系统中为所有用户建立一个主文件目录
    • image-20230614112747221
    • 优点:
      • 一定程度解决了重名问题
      • 提高了文件目录检索效率
      • 简单的文件共享
    • 问题:不便用户文件的逻辑分类
  • 层次目录结构:现在使用的多级目录,主目录称为根目录,数据文件称为树叶,其他的目录称为树的结点

    • image-20230614113200552

    • 路径名:从树的根目录开始,把全部目录文件名和数据文件名,依次用/连接起来,即构成该数据文件的路径名

      • 系统中每个文件都有唯一的路径名
    • 当前目录:为每个进程设置一个当前目录,又称为工作目录。进程对各个文件的访问都相对于当前目录进行

    • 从当前目录到数据文件为止所构成的路径名称为相对路径名

    • 查询速度更快,层次结构更加清晰,能更有效地进行文件的管理和保护

    • image-20230614113435978

    • image-20230614113445202

    • image-20230614113450795

image-20230425093229031

文件共享和访问控制

文件共享的有效控制涉及两方面

  • 同时存取
  • 存取权限

image-20230614113929085

  • 实现文件共享的实质是可以从不同地方打开同一个文件
  • 首要步骤是找到文件的目录项进而读取文件在外存的起始地址

链接目录项实现文件共享

image-20230614114132198

image-20230614114146086

即有向无环图实现

利用索引结点实现文件共享

  • 文件物理地址及其它文件的属性相关信息,不再是存放在目录项中,而是放在索引结点中,在文件目录中只设置文件名和指向相应索引结点的指针
  • 可以通过共享文件索引结点来共享文件。当用户需要共享文件时,新建目录项将索引结点指针指向共享文件的索引结点

image-20230425201807257

利用符号链共享

image-20230425201848919

由系统创建一个Link类型的新文件,新文件中只包含被创文件的路径名

新文件中的路径名,则只被看作是符号链。当B要访问被链接的文件F且正要读LINK类新文件时,将被OS截获, OS根据新文件中的路径名去读该文件,于是就实现了用户B对文件F的共享。

  • 只是文件主才拥有指向其索引结点的指针,而共享文件的其他用户只有路径名
    • 优点:能连接任何机器上的文件
    • 缺点:备份可能产生多个拷贝

利用URL实现文件共享

image-20230614114750194

image-20230614114807336

总结

image-20230614114911649

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值