文章目录
文件和文件系统
文件系统的管理功能是将其管理的程序和数据通过组织为一系列文件的方式实现的。而文件则是指具有文件名的若干相关元素的集合。
元素通常是记录,而记录又是一组有意义的数据项的结合
可见,基于文件系统的概念,可以把数据组分为:数据项,记录和文件三级
文件名和类型
-
文件名和扩展名
-
文件类型
- 按性质和用途分:系统文件,用户文件,库文件
- 按文件中数据的形式分:源文件,目标文件(.obj),可执行文件(.exe/.com)
- 按保护方式分:只读文件,读写文件,只执行文件
- 按组织形式和处理方式分:普通文件,目录文件,特殊文件
文件系统的层次结构
- 最底层是对象及其属性说明(包括文件,目录和磁盘存储空间)
- 中间层是对对象操作和管理的软件集合(我们所关注的)
- 最高层是文件系统接口(命令接口和程序接口)
文件操作
- 最基本的文件操作:创建文件,删除文件,读文件,写文件,设置文件的读/写位置
- 文件的“打开"和“关闭”操作
- 其他文件操作:关于文件属性的操作,关于目录的操作,还有实现文件共享的系统调用。
文件的逻辑结构
按文件是否有结构分类
-
有结构文件
- 定长记录:指文件中所有记录的长度都是相同的
- 变长记录
-
无结构文件:在系统中运行的大量的源程序,可执行文件,库函数等就是无结构的文件形式,即流式文件
按文件的组织方式分类
-
顺序文件
-
排列方式
- 串结构:按存入文件的先后时间进行排序
- 顺序结构:由用户指定一个关键字,文件中的所有记录按照关键字排序
-
优点:对文件中的记录进行批量存取时,效率最高。对于顺序存储设备(磁带)也只有顺序文件才能被存取,检索时可利用有效的查找算法
-
缺点:增删改查比较慢
-
记录寻址
- 隐式寻址方式:顺序访问,下一块的地址,存放在块里
- 显示寻址方式:直接/随机访问,单独建表,可以快速找到对应的盘块号
-
-
索引文件
- 建立一个索引表:用来存放记录在逻辑地址空间中的起始地址和记录的长度。
- 有效克服了变长记录文件不便于直接存取的缺点
- 便于增删改查
-
索引顺序文件
文件目录
目录管理的要求
- 实现“按名存取”:用户只须向系统提供所须访问文件的名字,便能快速找到指定文件的存储位置
- 提高对目录文件的检索速度
- 文件共享
- 允许文件重名
文件控制块FCB
- 基本信息:文件名,文件物理位置,文件逻辑结构,文件的物理结构
- 存取控制信息类:文件的存取权限,核准用户的存取权限以及一般用户的存取权限
- 使用信息类:文件的建立日期,时间,文件上一次修改的日期和时间
索引结点
- 磁盘索引结点:文件主标识符,文件类型,文件存取权限,文件物理地址,文件长度,文件连接计数,文件存取时间
- 内存索引结点:索引结点编号,状态,访问计数,文件所述文件系统的逻辑设备号,链接指针
单级文件目录
- 在整个文件系统中只建立一张目录表,每个文件占一个目录项,目录项中含文件名,文件扩展名,文件长度,文件类型,文件物理地址等,表明目录项是否空闲的状态位
两级文件目录
- 套娃,再建立一个单独的用户文件目录UFD,每个目录文件都占有一个目录项,其中目录项包括用户名和指向该用户目录文件的指针
树形结构目录
路径名和当前目录
- 路径名:从根目录到任何数据文件都只有一条唯一的通路
文件共享
有向无循环图:在严格的树形结构目录中,每个文件只允许有一个父目录,父目录可以有效的拥有该文件,也就是说,树形结构目录不适合文件共享
利用索引结点:即文件的物理地址及其他的文件属性等信息,不再是放在目录项中,而是放在索引结点中,由索引结点指向文件的物理地址。在文件目录中只设置文件名及指向相应索引结点的指针
文件保护
人为因素:人们有意无意的行为会使文件系统中的数据遭到破坏会丢失
- 通过存取控制机制
系统因素:系统的某部分出现异常情况会造成数据的破坏或丢失,特别是磁盘
- 采取系统容错技术
自然因素:随着时间的推移,存放在磁盘上的数据会逐渐消失
- 建立后备系统
磁盘存储器管理
外存的组织方式
-
连续组织方式:文件物理结构是顺序式文件结构
- 顺序访问容易–仅需要起始块号和长度
- 顺序访问速度最快
- 支持随机访问
- 要求分配连续的存储空间,会产生许多外碎片
- 必须事先知道文件的长度
- 不能灵活的删除和插入记录
- 文件不能动态增长
-
链接组织方式:文件物理结构是链接式文件结构
- 消除了磁盘的外碎片,提高了外存的利用率
- 对插入和删除和修改记录非常容易
- 文件可动态增长
- 隐式链接:指针存放在每个盘块中,只适合于顺序访问
- 显式链接:指针显式地存放在内存的文件分配表FAT中
-
索引组织方式:文件物理结构是索引式文件结构
- 不能支持高效的直接存取
- FAT表需占用较大的内存空间
- 索引方式:把所有的磁盘块号放在一个索引块(表)中
- 优点:支持随机访问,动态存取没有外碎片,但索引块的负担较重
- 对小文件的利用率低
-
增量式(混合)索引方式
文件存储空间管理
文件存储空间的基本分配单位是盘块
空闲区表法:系统为外存上所有空闲区建立一张空闲表,属于连续分配方式
-
存储空间的分配和回收
-
分配采用首次适应算法和最佳适应算法
- 首次适应算法 :顺序地检索空闲表的各表项,直至找到第一个大小能满足要求的空闲区,将该空闲区分配给用户
- 最佳适应算法:找到一堆大小合适的空闲区,将最贴合的空闲区分配给用户
-
回收:类似于内存回收的方法
- 要考虑回收区是否与空闲盘块表中插入点的前后相连,对相邻接者予以合并
-
空闲链表法:将空闲盘区拉成一条空闲链
-
空闲盘块链:以盘块为单位,其中每个盘块都有指向后继盘块的指针
- 当用户因创建文件而请求存储空间时,系统便从链首开始,依次摘下适当数目的空闲盘块分配给用户
- 当用户因删除文件而释放存储空间时,系统便将回收的盘块依次挂在空间盘块链的末尾
- 分配和回收效率低,盘块链会很长
-
空闲盘区链:将所有的空闲盘区(可包含多个盘块)连成一条链。每个盘区上除了含有用于指示下一个空闲盘区的指针外,还有指明本盘区大小的信息
- 通常采用首次适应算法进行分配:为了提高检索速度,可以采用显式链接组织方式,即在内存中为空闲盘区建立一张链表
- 回收盘区,也要将与相邻盘区合并
- 分配与回收的过程比较复杂,但是分配与回收的效率较高
位示图法:利用二进制的一位来表示磁盘中一个盘块的使用情况,值为0 空闲,值为1 已分配
-
二进制起始可能从 0 也可能从 1 , 都是一个意思。
-
mxn等于磁盘的总块数=>map[i , j]
-
盘块的分配
- 顺序扫描位示图,从中找出一个或一组值为0的二进制位
- 将所找到的一个或一组二进制位,转换成与之相应的盘块号:假定找到的是第i行,第j列,则其相应的盘块号为:b = n(i-1)+j
- 修改位示图,令 map[i , j ] = 1
-
盘块的回收
-
将回收盘块的盘块号b 转换成位示图的行号和列号
- i = (b - 1 ) div n + 1
- j = (b - 1) mod n + 1
-
修改位示图,令map[ i, j ] = 0
-