4.文件管理

什么是文件

概念

文件File

定义:以计算机硬盘为载体的存储在计算机上的信息集合

属性

​ 文件的属性是描述文件状态的一组信息

​ 例如名称,标识符,类型,大小,位置等

结构

逻辑结构

​ 以逻辑结构来看文件,文件还可以分为无结构文件和有结构文件

  • 无结构文件(流式文件)

​ 以字节为单位,没有具体结构

​ 例如记事本里的数据,全是用户输入的数据,没有规定好的结构

  • 有结构文件(记录式文件)

​ 顺序文件:数据是有一定顺序的,例如表格里的数据

​ 索引文件:数据有一个索引,一个索引对应一个数据

​ 索引顺序文件:索引的一个项对应着一组数据,数据有一定顺序

​ 直接文件或散列文件:数据以键值对形式表现,一个key对应一个value

目录

​ 通过目录查找和管理文件,目录的具体表现形式就是文件夹

目录的结构:
  • 文件控制块FCB

基本信息(大小,类型),存取控制信息(读写权限),使用信息(修改,创建信息)

目录中的每个条目都是一个FCB

一个FCB条目可能是文件,也可能是下一个目录

  • 索引节点

根据文件名建立一个索引,以索引查找文件和目录

  • 目录结构

目录是一种树形结构

文件的共享和保护

共享

文件的共享分为硬链接和软连接

  • 硬链接(索引节点)

​ 每个用户建立一个索引节点表,存储文件名和索引节点指针等信息,根据表中的一个条目与访问文件的索引节点建立联系

​ 每个索引节点建立一个计数器,每当一个用户访问文件就+1,不在访问就-1

​ 当没有用户访问时,文件就会被删除

  • 软连接(符号链)

​ 创建一个新的.lnk文件(快捷方式文件),该文件记录了目标文件的地址,

​ 访问快捷方式时,计数器同样+1image-20240607103706526

​ 不再访问时,删除快捷方式即可,保护原文件的存在

QQ截图20240607103756
保护

保护文件不被随便访问和修改

  • 口令保护

访问文件之前要输入密码口令,在索引节点进行拦截

  • 加密保护

通过加密算法,对文件数据进行加密,需要解密才能得到正确的文件数据

  • 访问控制

针对用户,限制用户对读写文件进行限制

文件系统的实现

文件系统层次结构

  • 用户调用接口(用户对文件进行操作,打开,读写等)
  • 文件目录系统(系统管理操作文件)
  • 存取控制验证模块(判断用户访问权限)
  • 逻辑文件系统与文件信息缓冲区
  • 物理文件系统
  • 辅助分配模块
  • 设备管理程序模块
QQ截图20240607105047

文件系统的实现

目录的实现

目录实际上就是FCB的集合

实现由线性列表或哈希表实现

线性列表

​ 线性列表可以由链表或数组实现,其中每个元素都是一个FCB

​ 由于链表和数组在查询和插入上各有缺陷,所以哈希表实现效率更高

哈希表

​ 实现一个哈希表,通过键值对形式存放FCB。

​ 通过文件名计算出hash值,找到对应的FCB

​ 但是有可能不同的文件得到相应的哈希值,为了避免这种错误,当通过哈希值找到FCB后还要比较一下文件名,如果文件名相同则成功访问。

image-20240611081056772

文件的实现

文件如何在硬盘中存放,如何分配空间

文件分配方式

​ 磁盘也会像内存一样分页,分成一个个大小相等的盘块,一般大小为4K

  • 连续分配:

​ 文件所占用的空间是连续的

​ 连续分配支持顺序和直接访问,速度快

​ 但不方便扩展,并且会产生磁盘碎片

由于是连续的,则文件扩大后多的数据还要存放在连续的地址上。如果后面的块已经被占用,就无法扩展了

  • 链接分配:

​ 文件可以存储在离散的盘块中,按照顺序将这几个盘块像链表一样连接起来

​ 链接分配解决了扩展问题,直接向后链接即可

​ 磁盘内维护一张文件分配表FAT,来存放一个文件所占的块的信息

磁盘内维护的表有两种形式:

​ 隐式:存放文件名,以及该文件名起始块号和结束块号

​ 显示:存放物理块号,以及该块指向的下一个块的块号。

​ -1表示该块为最后一个块;其他负数代表其为空闲块,一般为-2

​ 隐式连接支持顺序访问,没有碎片,方便扩展

​ 但由于离散存放,不支持直接访问

​ 显示连接也支持顺序访问,还支持随机访问(通过文件分配表)

​ 效率高,无外部碎片,方便扩展

  • 索引分配

    文件维护一张索引表,存放逻辑块号和物理块号。

    image-20240611084431049逻辑块号从0开始,每个逻辑块号对应一个实际存放在的物理块号

​ 索引表也可以指向下一个索引表,类似于两级页表

文件存储空间管理

​ 存储空间管理主要处理空闲空间

​ 物理磁盘在实际使用时会分成一个一个卷,卷也称为逻辑盘,即我们在文件管理器中可以看到的C盘,D盘等

​ 每个卷都分为两个区域:目录区和文件区

如何管理空闲的区域,分为四种方法

  • 空闲表法:

​ 建立一张表,记录空闲块号和空闲块数

​ 为了减少空闲表的大小,对于连续的空闲盘块,空闲块号存放最小块号,空闲块数表示这几个连续的空闲盘块有几块

​ 例如盘块1,2,3空闲,则空闲块号为1,空闲块数为3

image-20240611091834271

表由数组实现

  • 空闲链表法:

​ 存放方式和空闲表法相同,只是表的实现形式是链表

​ 链表元素还是存放空闲块号和空闲块数

​ 这两种方法的缺陷是表容易过大,并且查询空闲块效率低,不利于大型文件分配空间

  • 成组链接法

​ 把空闲空间分成一个一个大小相等的组,每个组存放相同数量的盘块

​ 每个组类似于链表相连,组由栈实现

​ 组用于存放盘块,每个组还会维护一个表。表存储的信息是下一个组的存放的盘块数量和盘块编号

​ 假设一个组存放100个盘块,则第一组存放第二组的盘块数量(N=100),以及每个盘块的编号

​ 对于最后一个组,他有可能没有存满,则在倒数第二个组中,对于没满的空间的盘块号常为0或-1,以表示下一个组无后续分组

​ OS在调用分配空闲空间时,第一组会被加载,根据信息分配。当这个组分配完后,根据该组的表去调用下一个组的信息

​ 第一组的表信息会分配到一个单独的盘块中,这个块称为超级块,OS启动后,把超级块加载到内存中,也就把第一组的信息加载到了内存中,以供使用。第一组使用完后,加载第二组,以此类推

​ 在超级块中的组称为空闲盘号栈

  • 位视图法

​ 通过创建一个二维矩阵,每个元素对应一个盘块,如果元素值为1表示该块已经被使用,0表示未使用

​ 分配时从左到右每行依次查找

posted @ 2024-06-13 12:17  顾巧  阅读(25)  评论(0)    收藏  举报