文件系统
基本概念
文件
文件是指一组带表示(文件名),在逻辑上有完整意义的信息项序列.信息项时构成文件内容的基本单位,各个信息项之间具有一定的顺序关系.文件包含两部分内容.:
- 文件体:文件本身的数据
- 文件说明:文件存储和管理的相关信息(名字,地址,访问权想,创建时间,修改时间等).
文件是一种对数据的抽象,它使得用户不必关心信息保存在磁盘上的方法和访问细节.
其本质是一组字节序列,源于用户程序对所要输入处理的原始数据和输出结果的长期保存,并按照一定格式呈现.
所有 I/O 设备都可以看作为字节序列的载体,因此 I/O 设备也可以抽象成文件,这就是一切皆文件的含义.
文件管理
- 用户视角(使用逻辑文件)
- 用户关心文件中所要使用的数据,不关系具体的存放形式和位置
- 关心文件系统对外接口
- 操作系统视角(组织和管理物理文件)
- 关心如何实现与文件有关的各个功能模块,包括存储,布局,管理,接口等.
文件系统
文件系统时操作系统中统一管理信息资源的一种软件,管理文件的存储,检索,更新.提供安全可靠的共享和保护手段,并且方便用户使用.
文件系统的任务:
- 统一管理磁盘空间,实施磁盘空间的分配和回收
- 实现文件的按名存取
- 实现文件信息的共享
- 向用户提供一个方便使用的几口
- 提高文件系统性能
- 提供与 IO 系统的统一接口
文件名
当文件创建的时候必须有一个名字方便用户访问.
- 命名规则
- 文件名一定是一个有限长度字符串
- 文件名由两部分组成,模式如下: 文件名.扩展名
文件类型
- 按性质和用途: 系统文件,库文件,用户文件
- 按数据形式:源文件,目标文件,可执行文件
- 按对文件实施的保护级别:只读文件,读写文件,执行文件,不保护文件
- 按逻辑结构:有结构文件,无结构文件
- 按文件中物理结构分:顺序文件,链接文件,索引文件
文件逻辑结构
这是从用户角度看文件,由用户进程对文件的访问方式决定.
- 字节为单位的流式结构:文件是由有逻辑意义,无结构的一串字符组成的集合
- 记录式文件结构:文件由记录组成,可以按照记录读写,每条记录由其内部的结构
- 树形结构:类似B-树
目录管理
目录是由文件说明索引组成的用于文件检索的特殊文件.
文件目录的内容主要是文件访问和控制的信息.
目录内容
- 基本信息:
- 文件名
- 别名:有些操作系统允许文件有别名(alias)
- 文件类型
- 地址信息
- 访问控制信息
- 使用信息
文件目录的分类
- 单级文件目录:只有一个目录:根目录
- 结构简单
- 文件多的时候,检索时间长
- 命名冲突:不同用户的相同作用文件可能是同一个名字,不同用户对同一个文件的命名可能不同
- 不便于共享
- 二级文件目录:在根目录之后给每个用户一个目录
- 多级文件目录:多个目录,几乎所有现代操作系统都采用这个.
- 绝对路径:从根目录开始依次经由的各级目录名,再加上最终的文件名
- 相对路径:结合当前路径进行使用
- 特点:
- 层次清楚
- 解决重命名问题
- 查找速度块
- 目录级别太多,增加路径检索时间
文件系统
定义和目的
定义:
操作系统中与文件管理有关的那部分软件和被管理的文件以及实施管理所需要的数据结构的总体.
目的:
- 方便文件访问
- 并发文件访问和控制
- 统一的用户接口
- 多种文件访问权限
- 执行效率高
- 差错恢复强
文件系统模型的三个层次
- 文件系统的接口(最接近用户的)
- 命令行接口:用户和文件系统的交互的接口
- 程序接口:用户程序和文件系统的接口
- 对象操作管理的软件集合
- 对存储空间的管理
- 对文件目录的管理
- 将文件逻辑地址转换成物理地址的机制
- 读写管理
- 共享和保护功能
- 对象及其属性
- 文件:直接管理对象
- 目录
- 磁盘存储空间
实现方法
文件控制块和文件属性
文件控制块:
为管理文件而设置的数据结构,保存管理文件所需的所有有关信息
- 基本信息
- 文件名
- 物理位置
- 文件逻辑结构:有无结构(记录文件,流式文件)
- 文件物理结构:索引,顺序等
- 访问控制信息
- 文件所有者
- 访问权限
- 使用信息
- 创建时间,上一次修改时间,当前使用信息
文件逻辑结构
提高检索效率,便于修改,降低文件存储费用
文件物理结构
文件在存储介质上的存放方式,表示一个文件在文件存储介质上的位置,链接和编目的方法.
主要结构:连续结构,索引结构,串联结构
文件物理结构
顺序结构
- 优点
- 结构简单,实现容易,没有额外的空间开销
- 支持顺序存取和随机存取
- 连续存取数据块
- 缺点
- 文件长度固定后不容易改变
- 不利于文件动态增加和修改
串联/链接文件结构
- 优点
- 空间利用率高
- 文件动态扩充和修改容易
- 顺序存取效率高
- 缺点
- 随机存取效率低
- 可靠性问题,容易指针出错
- 指针占据空间
索引结构
系统为每个文件建立一个数据结构:索引表
索引表是磁盘块地址数组,其中第 i 个目录项指向文件的第i块
索引表存在于文件目录,文件开头等位置
访问索引文件:
查文件索引号
查此磁盘物理块
优点
- 既能顺序存取,又能随机存取
- 满足了动态增长
- 充分利用外存空间
缺点
- 空间开销和时间开销
索引表的组织
- 链接模式:多个索引表链接
- 多级索引:讲所有索引表的地址放在另一个索引表
- 综合模式:综合上面二者
目录的主要功能和显示
目录实现需要解决:
- 目录项内容
- 直接法:目录项 = 文件名 + PCB
- 间接法:目录项 = 文件名 + PCB的地址
- 长文件名的问题
- 固定长度
- 长度可变,分为三部分:目录项长度(固定),文件的属性信息(固定),文件名(改变),问题是删除之后,文件名占的内存不好回收
- 目录项本身的长度固定,把长度可变的文件名统一放在目录文件的末尾。
- 目录的搜索方式
- 顺序查询法
- Hash
保护文件的方法
- 建立副本:把同一个文件保存在不同存储介质
- 优点: 简单
- 缺点:设备费用和开销大
- 定时转储
- 每隔一定时间把文件转储到其他存储介质上,当文件发生故障,就用转储的文件来复原,把有故障的文件恢复到转储时刻文件的状态
- 规定文件的权限:保护文件不被非法篡改
- 防止未被批准的用户存取文件
- 防止用户冒充其他用户存取文件
- 防止核准用户(包括文件属主)误用文件.
文件的一致性检查
- 磁盘块的一致性:
- 每个磁盘块设置两个计数器,一个记录在文件中出现的次数,另一个记录在空闲块中出现的次数,最终检查两个计数器是否存在不一致问题。
- 文件的一致性:
- 每个文件设置两个计数器,一个记录其i节点被引用的次数,另一个记录文件目录中引用它的次数,最终检查两个计数器是否存在不一致问题。
文件的并发访问
文件并发访问控制的目的是提供多个进程并发访问同一文件的机制。
可以利用文件锁定(file lock)协调对文件指定区域的互斥访问
利用进程间通信,协调对文件的访问
文件系统性能提升
磁盘速度限制了文件系统的速度,所以文件系统要尽可能减少对磁盘的访问,常用方法:
- 目录项(FCB)分解、当前目录、磁盘碎片整理、块高速缓存、磁盘调度、提前读取、合理分配磁盘空间、信息的优化分布、RAID技术等
块高速缓存
在内存中为磁盘块设置的一个缓冲区,保存了磁盘中某些块的副本。
磁盘块大小
磁盘块大小需要权衡
- 太大了访问次数少,但是碎片多
- 太小了碎片少,访问次数多
基于日志系统的文件系统 LFS
基本思路
将磁盘看作一个日志对待,每次添加文件总是顺序添加到磁盘,每次添加先放入缓存,再一次性读入
数据结构
- 段:包含数据块和元数据的日志
- inode:包含文件的物理块指针
- inode map: 一个存放inode节点在磁盘上位置的表
- 段摘要:段中数据信息
- 段使用情况:段数据块中有效数据的量
读写操作
先操作缓冲区,再操作磁盘
失效恢复
不需要检查整个磁盘,日志回退即可,最近的一次操作就会被覆盖
清理
为了提供连续的空闲磁盘空间,所以需要清理段.
对于访问频繁的段,填充到达0.75之后就会清理,释放出空闲空间
对于访问不频繁的段,达到0.15之后,释放空闲空间