十五、文件管理(一)
主要内容
- 文件和文件系统
- 文件管理要素
- 文件命名和分类
- 文件目录
- 文件逻辑结构和存储方式
10.1 文件和文件系统
10.1.1 文件系统的引入
- 所有的计算机应用程序都需要:存储信息、检索信息
- 三个基本要求
- 能够存储大量的信息(程序的输入/输出)
- 长期保存信息(不会随用户注销和关系而丢失)
- 可以共享(并发存取)信息
- 把信息以一种单元,即文件的形式存储在磁盘、U盘、存储卡、固态硬盘或其他介质上
- 文件是通过操作系统来管理的,包括文件的结构、命名、存取、使用、保护和实现等方法————文件(管理)系统
- 文件典型操作:创建/删除、打开/关闭、读写
10.1.2 文件结构
- 文件相关术语
- 字段/域(field):基本数据单元(数据类型、长度,如姓名、年龄)
- 记录(record):一组相关的域(如雇员的信息)
- 文件(file):相似记录的集合(通过名字访问的实体)
- 数据库(database):相关数据的集合(由若干类型文件组成)
- 文件是一个抽象机制
- 它提供了一种把信息保存在存储介质上,而且便于以后访问/存取分方法
- 用户不必关心实现细节
文件
- 文件:带标识(称为文件名)的在逻辑上有完整意义的一组信息项序列
- 信息项:构成文件内容的基本单位
- 信息项长度:单个或多个字节
- 文件内容的意义:由文件的创建者和使用者解释
10.1.3 文件[管理]系统
- 文件系统:操作系统中管理文件的模块,提供文件存储和访问功能
- 文件管理的目的:
- 方便的文件访问和控制:以符号名为文件标识,便于用户使用
- 并发文件访问和控制:在多道系统中支持对文件的并发访问和控制
- 统一的用户接口:在不同设备(硬盘/U盘/光盘)上提供同样的接口,方便用户操作和编程
- 多种文件访问权限:在多用户系统中的不同用户对同一文件会有不同的访问权限
- 优化性能:存储效率、检索性能、读写性能
- 差错恢复:能够验证文件的正确性,并具有一定的差错恢复能力
10.1.4 文件系统软件结构
10.1.5 文件管理要素
10.1.6 文件管理功能
- 文件管理系统要向上层用户提供的服务元素
- 文件命名:作为文件标识
- 访问控制:并发访问和用户权限
- 文件结构管理:划分记录、顺序、索引
- 目录管理:用于文件访问和控制的信息,不包括文件内容
- 文件操作:文件的创建、打开、读写和关闭
- 文件存取:用于完成文件的修改、追加、搜索等操作
- 限额(quota):限制每个用户能够创建的文件数目、占用外存空间大小等
- 审计(auditing):记录对指定文件的使用信息(如访问时间和用户等),保存在日志中
- 有关操作系统实现的功能元素
- 文件的分块存储:与外存的存储块相配合
- I/O缓冲和调度:性能优化
- 文件分配:在外存上分配文件的各个存储块
- 外存存储空间管理:包括外存空闲存储块的管理,如分配和释放。主要针对可改写的外存(如磁盘)
- 外存设备的访问和控制:包括由设备驱动程序支持的各种基本文件系统如磁盘、软盘、光盘等
10.1.7 文件的命名
- 文件命名规则
- 长度
- 合法字符(是否区分大小写)
- 扩展名的支持(一个或多个)
- 例子
- .bak .c .exe .gif .hlp .html .mpg
- .0 .ps .tex .txt .zip
- 例子
- 按文件性质和用途分:
- 系统文件:有关OS及有关系统所组成的文件
- 库文件:标准子程序及常用应用程序组成的文件,允许用户使用但不能修改
- 用户文件
- 按信息保存期限分:临时文件、永久文件、档案文件
- 按文件保护方式分:只读文件、读写文件、可执行文件
- 按文件的逻辑结构分:流式(无结构)文件、记录式(结构化)文件等
- 按文件的物理结构分:顺序(连续)文件、链接文件、索引文件
10.2 文件组织与访问
- 文件组织指的是文件的逻辑结构
- 从用户角度来看文件,研究文件的组织形式
- 它可以独立于外存上的物理存储
- 文件逻辑结构的设计要求(原则)
- 访问性能:访问快速(便于检索)、易于修改
- 存储性能:节省空间、维护简单(向物理存储访问方便)、可靠
- 常见的文件组织结构
- 字节序列:即是无结构(字符流、流式文件)
- 记录序列:每个记录大小相等或不等(结构化文件,如数据库)
- 堆(顺序堆积,不等长记录)
- 顺序文件(最常用,等长记录、按关键域、字段顺序组织,查询和更新性能差【改进:新纪录入堆、链表】)
- 索引顺序文件
- 索引文件
- 直接文件或者散列文件
10.2.1 五种基本文件组织的性能等级
10.2.2 存取方式
- 顺序存取
- 从开始处顺序读取文件中的全部字节或者记录,不能跳过某些内容
- 适合老式磁带文件
- 随机(直接)存取
- 可以非顺序或按关键字读取文件中的字节或者记录
- 现代OS中文件创建后都为随机存储文件
10.2.3 字节序列
- 构成文件的基本单位是字节,文件是一个无结构的字节序列,其逻辑意义由用户程序解释
- 管理简单,提供很大的灵活性
- 不便于检索
- Unix、MS-DOS 中采用
10.2.4 堆
- 数据按它们的到达顺序收集
- 目的是积累并存储大量数据
- 记录可能有不同的域
- 没有结构,通过特定的分隔符划分记录
- 通过穷举搜索访问记录
- 如:日志log、电子邮件的邮箱文件mailbox
10.2.5 顺序文件
- 记录格式固定
- 字段的大小和顺序固定
- 关键字段唯一
- 记录按关键字顺序存储
- 特点
- 通常用于批处理应用(如账目)
- 容易在磁盘和磁带上存储
- 可组织成链表
- 随机访问性能差
- 必须顺序搜索
- 插入新纪录很难(可采用日志或事务文件来解决)
10.2.6 索引顺序文件
- 记录仍然按关键字的顺序组织
- 增加了索引以提高随机查找速度
- 索引文件是顺序索引
- 可以有多级索引
- 索引文件中的每个记录由两个字段组成————关键字段和指向主文件的指针
- 溢出区用来处理新纪录
- 主文件在每个记录中增加一个附加字段,保存指向溢出区中新纪录的指针,初始化为空
- 新纪录添加到溢出区
- 修改主文件中在逻辑顺序位于该新纪录前的记录中的附加字段,使其指向溢出区中的新加记录
- 溢出区以批处理方式合并到主文件
10.2.7 索引文件
- 可以有多个索引
- 为每个可能搜索的字段设置一个索引
- 只通过索引来访问记录
- 索引可以是完全索引或部分索引
- 记录大小不必相同、不必排序
- 索引指针可指向文件中的任意位置
- 主要用于强调速度但很少会处理文件中所有数据的场合
10.2.8 散列文件
- 使用关键字的散列查找记录
- 没有顺序存储的概念
- 常用于要求快速访问记录的情形
10.2.9 B树
- 对于大型文件/数据库,仅仅靠主键进行索引的顺序文件,访问速度慢
- 提高访问效率的方法————使用结构化的索引文件
- 多层树状结构————分支长短不一,导致搜索时间不均衡
- B树————平衡树状结构,是数据库中组织索引的标准方法
10.3 文件目录
- 从文件管理角度来看,文件由文件体(文件本身的信息,数据)和文件说明组成(元数据)
- 文件说明(也称文件控制块)是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的所有相关信息
- FAT文件系统中[32B长]的目录项/文件条目
- 文件控制块是文件存在的标志
10.3.1 目录
- 把所有的FCB组织在一起,就构成了文件目录,即文件控制块的有序集合
- 一个FCB就称作一个目录项
- 通常将文件目录以文件的形式保存在外存,这个文件就叫目录文件(OS所有)
- 主要功能是建立从文件名到文件内容的映射
10.3.2 目录内容
- 目录中的部分内容是用户可获取的文件属性
- 基本信息
- 文件名:字符串,不同系统有不同命名规则;可以修改;有些系统允许一个文件有多个别名
- 文件类型:可有多种不同划分方法
- 文件结构(如顺序、索引等)
- 文件类型:可以有多种不同划分方法,如:
- 有无结构(记录文件/流式文件)
- 内容(二进制/文本)
- 用途(源代码/目标代码/可执行文件/数据/音频/视频)
- 属性(如系统/隐含等)
- 文件结构(如顺序、索引等)
- 地址信息
- 存放位置:包括哪个设备或文件卷(如C:、D:等)、起始位置、以及各个存储块位置
- 文件长度(当前和上限):以字节、字或存储块为单位,可以通过写入或创建、打开、关闭等操作而改变
- 访问控制信息
- 文件的所有者:通常是创建文件的用户,或者改变已有文件的属主
- 访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等
- 使用信息
- 创建时间(FAT有)
- 最晚一次读访问的时间(新FAT有访问日期,NTFS有访问时间)和用户(FAT和NTFS无)
- 最晚一次写访问的时间(新FAT和NTFS都有)和用户(FAT和NTFS无)
10.3.3 目录操作
- 文件访问的两大步骤
- 目录检索(根据用户给出的文件名,按名寻找目录项)
- 文件寻址(根据目录项中的文件物理地址等信息,计算出文件的任意记录或字节在存储介质上的地址)
- 目录上执行操作的类型
- 查找文件项(打开)
- 创建新文件
- 删除文件
- 列出目录中的文件
- 修改目录中的文件
10.3.4 目录结构
- 目录的设计目标主要是提高检索效率
- 常见目录结构
- 一级目录
- 二级目录
- 多级目录
- 改进的多级目录
10.3.5 一级目录
- 整个目录组织是一个线性结构
- 系统中的所有文件都建立在一张目录表中
- 如CP、M、DOS 1.0、Orang's
- 主要用于非常简单的单用户操作系统
- 优缺点
- 结构简单、容易实现
- 文件多时目录检索时间长,从而平均检索时间长
- 有命名冲突:如多个文件有相同的文件名(不同用户的相同作用的文件)或一个文件有多个不同的文件名(不同用户对同一文件的命名)
10.3.6 二级目录
- 在根目录(第一级目录,主文件目录MFD)下,每个用户对应一个目录(第二级目录,用户文件目录UFD)
- 用户目录下是该用户的文件,而不再有下级目录
- 适用于多用户系统,各用户可有自己的专用目录
- 优缺点
- 降低了平均检索时间
- 部分克服了命名冲突问题
- 不利于用户对文件的分类管理
10.3.7 多级目录
- 采用层次结构
- 每个用户可在其用户目录下自主创建若干层次的子目录(树)
- 也称为树形目录
- 当前主流OS采用
- 几个与目录相关的概念
- 目录名:可以修改
- 目录树:中间节点是目录,叶节点是目录或者文件
- 目录的上下级关系:
- 当前目录,一般用单个句点表示:.
- 父目录,一般用双句点表示:..
- 子目录
- 根目录,一般用单斜线表示:/(类Unix)、\(DOS&Windows)
- 优缺点
- 层次结构清晰、便于管理和保护,适用于较大的文件系统
- 解决了命名冲突问题
- 目录级别太多时,会增加路径检索时间(目录文件存放在外存)
10.3.8 改进的多级目录
- 为了提高目录检索速度,可以把目录项(FCB,文件控制块)中的文件说明(文件描述符)信息分成两个部分:
- 符号目录项(次部):文件名、文件内部标识号
- 基本目录项BFCB(主部):其他文件说明信息
- 把符号目录项构成的符号文件目录组织成树状结构,按文件名排序
- 把基本目录项构成的基本文件目录组织成线性结构,按文件内部标识排序
- 举例
- 设一个FCB有48个字节,其中文件名6字节,文件号2字节(所以符号目录项占8字节)
- 一个目录文件有128个目录项
- 物理块(扇区)大小512字节
- 分解前
- 一个物理块(扇区)可放512/48=10个FCB,则目录文件共占13个物理块
- 查找一个文件的平均访问磁盘次数为(1+13)/2=7次
- 分解后:
- 一个物理块可放512/8=64个符号目录项
- 或512/40=12个基本目录项
- 符号目录项占2个物理块,基本目录文件占11个物理块
- 查找一个文件的平均访盘次数为(1+2)/2+1=2.5次