一、文件概念
1.基本概念
- 文件:
- 操作系统对存储设备的物理属性加以抽象,从而定义逻辑存储单位
- 文件为抽象数据类型
- 文件由操作系统映射到物理设备上
- 存储设备通常是非易失的
- 计算机中信息存储的基本组织形式
- 记录外存上的具有文件名的相关信息集合
- 从用户角度上看,文件是逻辑外存的最小分配单元,数据只有通过文件才能写到外存
- 通常,文件表示程序(源形式和目标形式)和数据
- 通常,文件为位、字节、行或记录的序列,其含义由文件的创建者和用户定义
- 文件信息由创建者定义,文件可以存储许多不同类型的信息
- 操作系统对存储设备的物理属性加以抽象,从而定义逻辑存储单位
- 文件名:
- 文件被命名以方便用户,并且通过名称可以引用
- 按名存取:文件名⇨存储位置
- 文件名由一串ASCLL码或(和)汉字构成
- 名字长度:
- 8.3规则:文件名8个字符,类型3个字符,之间有"."分割
- 长文件名:可以最多输入255多个字符作为文件名
- 文件名可能大小写敏感
- 当文件被命名后,它就独立于进程、用户,甚至创建它的系统
2.文件结构
- 文件结构是指文件内信息的组织方式
- 文件类型可用于指示文件的内部结构
- 目的:便于程序理解文件内容
- (color{red}{操作系统})和(color{red}{应用程序})决定了文件的结构
- pdf文件的结构由pdf阅读器决定
- 可执行文件的结构由操作系统决定
- 常用文件结构
- 无结构:文字流、字节流等
- 简单记录结构:线性、固定长度、可变长度等
- 复杂结构:格式化文档、多媒体文件等
- 让操作系统支持多个文件结构带来一个缺点:操作系统会变得太复杂
- 解决:系统强加(并支持)最小数量的文件结构
- 操作系统不对这些位做出解释,灵活性大但支持的也少
- 每个应用程序必须包含自己的代码,以便按适当结构来解释输入文件
- 所有操作系统必须支持至少一种结构,即可执行文件的结构,以便系统能够加载和运行程序
- 解决:系统强加(并支持)最小数量的文件结构
3.内部文件结构
- 在内部,定位文件的偏移对操作系统来说可能是比较复杂的
- 磁盘系统通常具有明确定义的块大小,由扇区大小决定
- 所有磁盘I/O按块(物理记录)为单位执行,而所有块的大小相同
- 将多个逻辑记录包装到物理块中
- 逻辑记录大小、物理块大小和打包技术确定了每个物理块可有多少逻辑记录
- 打包可以通过用户应用程序和操作系统来完成
- 文件都可当作块的序列
- 所有基本I/O功能都以块为单位来进行
- 磁盘空间按块为单位来分配,因此每个文件的最后一块的某些部分通常会被浪费
- 所有文件系统都有内部碎片;块大小越大,内部碎片也越大
4.文件类型
- 文件类型一般由扩展名决定
- 文件扩展名(也称文件后缀名)
- 标识文件类型的一种机制
- 扩展名跟在主文件名后面,由一个分隔符"."分隔
- 指示文件类型和可用于文件的操作类型
- 扩展名不总是必需的
5.文件属性
- 文件名:唯一,便于记忆
- 标识符:这种唯一标记(通常为数字)标识文件系统的文件;它是文件的非人类可读的名称
- 文件位置:设备上文件位置的指针
- 文件类型:文件的格式
- 文件大小:文件当前大小
- 保护:读、写、执行等访问控制信息
- 时间、日期和用户标识:保护、 安全和使用跟踪的数据
- 文件属性保存在目录结构中
- 目录结构保存在外存上
- 目录条目由文件的名称及其唯一标识符组成
- 根据标识符可定位其他文件属性
- 由于目录(如文件)必须是非易失性的,因此必须存在设备上,并根据需要而被调入内存
- 有些文件系统支持扩展文件属性,包括文件的字符编码和安全功能,如文件校验和
6.文件操作
- 创建文件
- 必须在文件系统中为文件找到空间
- 必须在目录中创建新文件的条目
- 写文件
- 使用一个系统调用指定文件名称和要写入文件的信息
- 系统应保留写指针,用于指向需要进行下次写操作的文件位置,每当发生写操作时,写指针必须被更新
- 读文件
- 使用一个系统调用指定文件名称和需要文件的下一个块应该放在哪里(在内存中)
- 系统应保留读指针,用于指向需要进行下次读操作的文件位置,每当发生读操作时,写指针必须被更新
- 在文件内重定位
- 搜索目录以寻找适当的条目,并且将当前文件位置重新定位到给定值
- 不需要涉及任何实际的I/O
- 删除文件
- 截断文件
- 允许所有属性不变(除了文件长度),但让文件重置为零,并释放它的文件空间
- 打开文件
- 需要数据结构:
- 打开文件表:跟踪打开文件,维护所有打开文件的信息
- 首次引用文件时,操作open()根据文件名搜索目录,以将目录条目复制到打开文件表
- open()接受访问模式信息,根据文件权限检查模式,如果允许请求模式,则会为进程打开文件
- open()返回一个指针,以指向打开文件表的对应条目,指针不是实际的文件名,指针可以用于所有的I/O操作
- 请求文件操作时,可通过该表的索引指定文件,而不需要搜索
- 文件最近不再使用时,进程关闭它,操作系统从该表中删除它的条目
- 文件指针:指向最后一次读写的位置,每个进程1个,对操作文件的每个进程是唯一的,因此必须与磁盘文件属性分开保存
- 打开文件计数器:打开文件次数(调用open次数)
- 文件存储位置:文件存放在存储设备上的位置信息,该信息存放在内存中
- 访问权限:每个进程的访问权限
- 打开文件表:跟踪打开文件,维护所有打开文件的信息
- 优点:
- 方便文件共享
- 提高文件存取效率
- 需要数据结构:
- 关闭文件
二、逻辑文件及其访问方法
- 逻辑文件:
- 文件内容组织方式
- 面向用户
- 逻辑文件(文件逻辑结构):是指文件呈现在用户面前的组织结构
- 逻辑文件决定了文件访问方法
- 目录:
- 文件组织形式
- 文件属性
- 物理文件:
- 文件存储方式
- 面向系统
- 文件访问方式,即逻辑文件是影响文件访问效率的因素之一
- 有些系统只为文件提供一种访问方法;而其他的支持多种访问方法(访问设备因素影响)
1.顺序文件
- 顺序文件:顺序文件由一系列(color{red}{不等长记录})按照某种顺序(一般是写入时间)排列形成
- 访问方式:顺序访问
- 最简单的访问方式
- 文件信息按照存放顺序,一个记录一个记录地依次访问
- 典型存储设备:磁带
- 编辑器、编译器使用这种方法
- 依次访问数据,不能直接跳转到文件的指定位置
- 读和写构成文件的大部分操作
- 优点:记录存储紧凑,节省存储空间
- 缺点:访问效率差
- 例:
2.直接(随机)文件
- 直接文件一般组织为记录等长文件
- 由于逻辑记录为固定大小,所以容易读、写和删除记录
- 访问方式:直接(随机)访问
- 可以直接定位到文件的某条记录进行访问
- 必须修改文件操作以便包括块号作为参数
- 典型设备:磁盘
- 存放在磁盘上的顺序文件可以直接访问
- 直接通过计算得到需要读写记录的位置,直接跳转进行文件读写
- 对于大量信息的立即访问,直接访问文件极为有用。数据库通常是这种类型的
- 用户提供给系统的块号,通常为相对块号
- 相对块号:是相对于文件开头的索引
- 优点:访问效率高,可以直接定位到某条记录
- 缺点:浪费存储空间
- 例:
3.索引文件
- 顺序文件的存储形式,直接文件的检索方式
- 索引文件中,索引表的表项一般等长
- 基本方法:为顺序文件建立索引表或根据某个检索项作索引
- 索引文件存储容量接近顺序文件,访问速度接近直接文件
- 对于大文件,索引文件可能变得太大而无法保存在内存中
- 解决方案:为索引文件创建索引。主索引文件包含指针,以指向辅助索引文件;而辅助索引文件包括指针,以指向实际的数据项
- 解决方案:为索引文件创建索引。主索引文件包含指针,以指向辅助索引文件;而辅助索引文件包括指针,以指向实际的数据项
三、文件目录
1.文件控制块(FCB)
- 存放操控文件所需的各类文件属性信息
- 文件名
- 文件长度
- 创建时间
- 存放位置
- 访问控制权限
- 类似一个索引项
2.目录项和目录
- 目录:
- 包含着所有文件信息的节点集合
- 根据文件名检索文件的桥梁
- 目录项的有序集合
- 用户和文件之间的一个桥梁
- 目录项:
- 存放一个文件的各类属性
- 有的系统等同于文件控制块
- 目录文件:
- 目录组织形式
- 目录作为一个文件存在于文件系统
3.目录结构
- 目录和文件都驻留在存储设备(如磁盘)
- 每个目录项中存放了文件在存储设备的存放地址
4.目录相关操作
- 操作是将指针地址进行变换,并没有对文件本本身的内容进行改变
5.目录访问
- 用户根据文件名访问文件,而文件是存储在设备上的
- 文件检索:负责把文件名转换为文件在存储设备上的位置,根据文件名找文件存储位置信息的过程
- 文件检索是一个遍历目录项的过程:
- 1.根据文件所在目录打开目录文件
- 2.从磁盘读入该目录文件的1个(物理块),该块包含若干个目录项
- 3.根据文件名遍历内存中的该块,如找到对应文件名的目录块则结束
- 4.判断该目录文件是否还有物理块没有读入,如果是转到2;否则,结 束。表示该目录中没有此文件名的文件。
- 目录项由于经常变化,一般不排序
- 平均遍历目录项数:(1+n)/2
- 不包括文件查不到的情况
- 不包括文件查不到的情况
6.目录项的检索性能
- 物理块(Block):内存和存储设备数据交换基本单位。一个物理块一般为4KB、8KB和16KB等。每次读写文件都是以块为单位,至少一块
- 例如:当前物理块大小是4KB,则一个读入文件的1个字节的操作也要从存储设备读入4KB
- 目录性能:为了提高文件的检索效率,需要读入尽可能少的物理块(耗时少)
- iNode:降低ds
7.文件保护
- 访问控制列表和分组:
- 访问模式:读/写/执行,用R/W/X来表示
- 三种类型的用户:
- 所有者 7 -> 1/1/1(R/W/X)
- 同组用户 6 -> 1/1/0(R/W/X)
- 公共用户 1 -> 0/0/1(R/W/X)
- 建立一个组,加入一些用户
- 对特定的文件或目录(game),定义适当的访问权限