五 文件管理

author: spongehah from:hut

作者个人博客:https://blog.hahhome.top/

参考视频: B站王道考研计算机操作系统

[TOC]

1 初识文件管理

计算机中存放了各种各样的文件,一个文件有哪些属性?
文件内部的数据应该怎样组织起来?
文件之间又应该又应该怎么组织起来?
从下往上看,OS应提供哪些功能,才能方便用户、应用程序使用文件?
从上往下看,文件数据应该怎么存放在外存(磁盘)上?

1.1 文件的定义 和 属性

文件的定义:一组有意义的信息的集合

一个文件有哪些属性

  1. 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件。
  2. 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
  3. 类型:指明文件的类型
  4. 位置:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)
  5. 大小:指明文件大小
  6. 创建时间、上次修改时间
  7. 文件所有者信息
  8. 保护信息:对文件进行保护的访问控制信息

1.2 操作系统应提供的功能

image-20231129194845950

image-20231129194854951

image-20231129194905366

image-20231129194915387

image-20231129194921637

2 文件的逻辑结构

image-20231129195434754

分为:

  1. 无结构文件
  2. 有结构文件

主要讨论有结构文件的逻辑结构

image-20231129195711240

2.1 顺序文件

image-20231129195824929

顺序文件:

两种存储方式:

  1. 顺序存储(数组)、物理位置相邻
  2. 链式存储(链表)、物理位置不一定相邻

两种记录顺序:

  1. 顺序结构:按照关键字的顺序存储(对关键字进行有序排列)
  2. 串结构:通常按照存入时间排序

假设:已经知道了文件的起始地址(也就是第一个记录存放的位置)
思考1:能否快速找到第ⅰ个记录对应的地址?(即能否实现随机存取)
思考2:能否快速找到某个关键字对应的记录存放的位置?

image-20231129200209190

只有 顺序存储定长记录顺序结构,才能实现随机存取和快速定位关键字记录

那么可变长记录怎么办?那就看索引文件的了

2.2 索引文件

image-20231129200434838

建立 索引表,索引表本身是定长记录的顺序文件,所以支持随机存取
若索引表按关键字顺序排列,则可支持快速检索关键字

2.3 (多级)索引顺序文件

image-20231129200654234

image-20231129200933840

image-20231129201134308

总结

image-20231129201219033

3 文件目录

image-20231129163739736

3.1 文件控制块FCB

image-20231129164258451

目录也是一种特殊的文件:

需要对目录进行哪些操作?
搜索:当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
创建文件:创建一个新文件时,需要在其所属的目录中增加一个目录项
删除文件:当删除一个文件时,需要在目录中删除相应的目录项
显示目录:用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
修改目录:某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)

3.2 目录结构

  1. 单级目录结构
  2. 两级目录结构
  3. 树形目录结构
  4. 无环图目录结构

image-20231129164513159

image-20231129164629257

image-20231129164948519
image-20231129165337657

树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。

image-20231129165649340

3.3 索引结点(FCB的改进)

image-20231129170114822

当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。

总结

image-20231129202131605

4 文件分配方式(文件的物理结构)

image-20231129204703122
image-20231129204729914

image-20231129211814427

需要将 文件块的逻辑地址 映射为 外存的物理地址

4.1 连续分配

image-20231129212746877

连续分配方式要求每个文件在磁盘上占有一组连续的块
即 文件的逻辑结构 中 顺序文件的顺序存储(一个文件占用的块物理位置相邻)

优点:
1、可以直接算出逻辑块号对应的物理块号,因此连续分配支持顺序访问和直接访问(即随机访问)
2、读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。结论:连续分配的文件在顺序读/写时速度最快

缺点:
1、若此时文件A要拓展,需要再增加一个磁盘块(总共需要连续的4个磁盘块)。由于采用连续结构,因此文件A占用的磁盘块必须是连续的,因此只能将文件A全部“迁移”到绿色区域。结论:物理上采用连续分配的文件不方便拓展。
2、物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片。可以用紧凑来处理碎片,但是需要耗费很大的时间代价

4.2 链接分配

4.2.1 隐式链接(默认)

image-20231129213845335

即 文件的逻辑结构 中 顺序文件的链式存储(一个文件占用的块物理位置不一定相邻)

缺点:
1、只支持顺序访问,不支持随机访问
2、随机IO指针寻址花费时间,查找效率低
3、花费额外空间存储指针

优点:
1、链接分配方式,很方便文件拓展
2、不会有碎片问题,外存利用率高

4.2.2 显示链接

image-20231129214457504
image-20231129214737172

使用 文件分配表FAT

优点:
1、方便文件拓展
2、不会有碎片问题,外存利用率高
3、支持随机访问
4、FAT常驻内存,访问一下块时不需要访问磁盘,因此文件的访问效率更高

缺点:
1、文件分配表的需要占用一定的存储空间

考试题目中遇到未指明隐式/显式的“链接分配”,默认指的是隐式链接的链接分配

4.3 索引分配

4.3.1 索引分配

image-20231230205435139

和显示链接有点类似,只是显示链接是一整个磁盘只有一个FAT表,而索引分配是每个文件都有一个索引表

从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可知ⅰ号逻辑块在外存中的存放位置。可见,索引分配方式可以支持随机访问。文件拓展也很容易实现(只需要给文件分配一个空闲块,并增加一个索引表项即可)但是索引表需要占用一定的存储空间

优点:
1、支持随机访问
2、方便文件拓展
3、不会有碎片问题

缺点:
1、会花费额外的空间存储索引表
2、访问前需要先读入索引块,链接方案甚至需要很多次读磁盘操作

4.3.2 大文件的索引表一个磁盘块放不下?

image-20231230210050009

大文件的索引表太大,一个磁盘块放不下怎么办??

1)链接方案

image-20231230210625257

2)多层索引

image-20231230211300394

3)混合索引

image-20231230212154526

小总结

image-20231230212318941

总结

image-20231230212447196

附录:文件的逻辑结构与物理结构之间的区别

image-20231230223629502

简而言之:

  1. 逻辑结构是用户编程时决定使用顺序存储(如数组)还是链式存储(如链表),亦或者维护用户自己定义的索引表,与操作系统无关
  2. 物理结构是指操作系统在存储文件时,对一个文件拆分成的多个磁盘块实际进行存储的方式

王道视频P64-70暂未观看