文件管理
背景以及意义
在使用计算机的过程中,需要大量的程序以及数据,而内存的容量有限,并且不能长期保存数据,于是便将数据以文件的形式保存在外存中。随着而来就又出现了新的问题了,如果直接将数据保存在外存中,用户直接面向磁盘进行操作,就会带来很多的问题,比如:要求用户熟悉磁盘的结构,了解各种文件的属性,在磁盘上的具体位置,在多用户环境下还必须保持数据的安全性以及一致性,这是非常麻烦的事情,于是,就在操作系统中引入了文件管理的概念,也就是构建一个文件系统,专门用于文件的管理、组织工作,并且提供简单、方便的操作给用户。
文件以及文件系统
文件
文件可以通俗地理解为就是一堆数据的集合,可以分为有结构文件以及无结构文件(流式文件),文件自身具有一些属性,如:文件类型、文件长度、文件的物理位置、建立时间等。
文件类型
划分文件类型的目的是为了更好地管理文件,按照不同的分类,可以将文件类型进行不同的划分
- 按照用途划分
- 系统文件
- 用户文件
- 库文件
- 按照文件中数据的形式划分
- 源文件
- 目标文件
- 可执行文件
- 按照存取控制权限划分
- 只执行文件
- 只读文件
- 读写文件
- 按照组织形式和处理方式划分
- 普通文件
- 二进制文件
- 特殊文件
文件系统模型
文件系统一般划分为三个层次:从上到下分别是:文件系统接口 - 对对象操作和管理的软件集合 - 对象(文件、目录、磁盘)及属性
文件操作
创建文件、删除文件、读文件、写文件、打开文件、关闭文件、对文件属性的操作、对目录的操作等
文件的逻辑结构
所谓的文件的逻辑结构,是指从用户的观点出发所看到的文件的组织形式,是用户可以直接处理的数据及结构,跟具体的物理存储结构没有关系,也称为文件的组织,分为有结构文件(记录式文件)、无结构文件(流式文件)
对于文件的逻辑结构,有一些基本的要求
- 能提高检索速度:在大文件中检索数据
- 便于修改:在文件中增加、删除、修改记录
- 降低文件的存储费用:减少文件占用的磁盘空间、不要求大片的连续存储空间
有结构文件
有结构文件根据用于和系统管理的需要,根据组织形式的不同,可以分为一下几种
- 顺序文件:文件中的记录按照某种顺序排列而成,记录一般是指定长的记录,能用较快的速度查找文件中的记录
- 索引文件:为变长记录建立索引表,并且为每个记录设置一个表项,用于加快检索速度
- 索引顺序文件:为文件建立索引表,为每一组记录中的第一个记录设置一个表项
顺序文件
两种不同的排序方式:串结构(基本按照时间排序)、顺序结构(按照关键字进行排序)
顺序文件中,如果是定长记录,则访问可以按照头指针加偏移即可;如果是不定长记录,则每个记录需要保存多一个指针,用于保存当前文件的长度
优点:读取效率高,尤其是在大文件的情况下
缺点:文件比较大是,查找某几个记录速度慢,增加、删除操作比较困难。可以设置一个记录日志/事务文件,将具体操作记录下来,在一定时间内统一处理(延迟操作)
索引文件
为文件中的记录建立索引表,每个表项用于记录:记录的长度、指向该记录的指针。检索时,先根据关键字检索索引表,然后再根据索引表中的指针读取对应的文件
优点:检索速度快
缺点:增加了一个索引项,所以增加了费用
索引顺序文件
克服了变长记录文件的不便于存取的缺点,而且付出的代价也不算大
将顺序文件的所有记录进行分组:为顺序文件建立一张索引表,索引表中为每组的第一个记录建立一个索引项,含有该记录的键值和指向该记录的指针。在检索时,先利用关键字在索引表中进行检索,然后找到该记录所在记录组中第一个记录的表项,从而得到该记录组的地址,然后再用顺序索查找方式在主文件中进行查找,对于大文件,更是可以建立多级索引从而提高检索速度
外存分配方式
常见用外存分配方式有连续分配、链接分配、索引分配
连续分配
连续分配即为每个文件分配一组连续/相邻接的磁盘块,保证了逻辑文件中的记录顺序与存储中所占用的盘块顺序一致
优点:顺序访问容易、访问速度快
缺点:要求有连续的存储空间、必须事先知道文件的大小
链接分配
链接分配采用离散的分配方式,消除了碎片问题,提高了利用率,同时也适应文件的动态增长、删除、修改等
隐式链接
在文件目录的每个目录项中,都含有链接文件第一个盘块以及最后一个盘块,而且每个盘块都含有指向下一个盘块的指针
缺点:只适合顺序访问,每次读写都必须从起始盘块开始、仅通过一个链接指针将盘块链接起来,如果其中一个链接出错,整个链就断开
显式链接
把链接各个物理盘块的指针,显示地存放在内存中的一个链接表(FAT File Allocation Table)上,将链首指针所对应的盘块存放在FCB中
缺点:FAT需要占用比较大的内存空间
索引分配
索引分配为每个文件分配一个索引块,再把分配给该文件的所有盘块号都记录在该索引块中,在建立一个文件时,只需要为之建立的目录项中填入指向该索引块的指针
缺点:对于小文件来说,索引块的利用率比较低
常见分配方式:单级索引、多级索引、混合索引(多种索引分配方式混合而成)
目录管理
对目录的要求
- 实现按名存取:提供名字即可快速找到文件所在磁盘
- 提高对目录的检索速度
- 文件共享
- 允许文件重命名
文件控制块和索引节点
文件控制块中的信息
- 基本信息:文件名、文件物理位置、文件逻辑结构、文件的物理结构
- 存取控制信息:文件主的权限、核准用户的权限以及一般用户的权限
- 使用信息:文件的建立时间、修改时间等
一个文件控制块就是一个目录项,文件控制块的集合就是一个目录
索引节点:将文件描述信息与文件名分离,使文件描述信息单独形成一个数据结构
文件系统中每个目录项仅由文件名和指向文件所对应的inode节点的指针
文件目录结构
单级结构、两级结构、多级结构
文件存储空间的管理
用于记录磁盘空间的使用情况,便于更好地进行分配
空闲表法以及空闲链表法
空闲表法
空闲表法属于连续分配,系统为外存上的所有空间建立一张空闲表,每个空闲区对应一个空闲表项
分配时采用首次适应算法、循环首次适应算法等
空闲链表法
将空闲链分为:空闲盘块链、空闲盘区链
位图法
通过位图(二进制的一个位)来表示磁盘使用情况
成组链接法
文件共享与保护
- 基于索引节点的共享方式
- 利用符号链实现文件共享
- 磁盘容错技术
- 第一级容错技术
- 双份目录和双份文件分配表
- 热修复重定向和后读写校验
- 第二级容错技术
- 磁盘镜像
- 磁盘双工
- 基于集群技术的容错能力
- 双机热备份模式
- 双机互为备份模式
- 公用磁盘模式
- 第一级容错技术