文件的概念
- 文件是具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列
- 文件(document)与计算机文件(file)
- 文件名是由字母、数字和其他符号组成的一个字符串,其格式和长度因系统而异
文件的命名
- 文件命名一般包括文件名和扩展名:前者用于识别文件,后者用于标识文件特性,两者之间用圆点隔开。
- 每个 OS 都有约定的扩展名,Windows 中:
.com
表示可执行的二进制代码文件.exe
表示可执行的浮动二进制代码文件.lib
表示库程序文件.bat
表示批命令文件.obj
表示编译或汇编生成的目标文件
- Linux 中:
.sh
表示批命令文件
文件的分类
- 按用途可分成:系统文件、库文件、用户文件
- 按保护级别可分成:只读文件、读写文件、不保护文件
- 按信息时限可分成:临时文件、永久文件、档案文件
- 按设备类型可分成:磁盘文件、磁带文件、光盘文件、软盘文件
- 还可以按文件的逻辑结构或物理结构分类
引入文件的优点
- 用户使用方便,使用者无需记住信息存放在辅助存储器中的物理位置,也无需考虑如何将信息存放到存储介质上,只要知道文件名,给出有关操作系统要求便可存取信息,实现了“按名存取”
- 文件安全可靠,由于用户通过文件系统才能实现对文件的访问,而文件系统能提供各种安全、保密和保护措施,故可防止对文件信息的有意或无意的破坏或窃用
- 文件可备份,可组织转储或备份,在文件使用过程中出现硬件故障时,文件系统可组织重执,提高可靠性
- 文件可共享,文件系统还能提供文件的共享功能,如不同的用户可以使用同名或异名的同一文件,提高了文件和文件空间的利用率
- 总之,把数据组织成文件形式加以管理和控制是计算机数据管理的重大进展
文件系统及其功能
文件系统的概念
文件系统是操作系统中负责存取和管理信息的模块,它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护,并为用户提供一整套方便有效的文件使用和操作方法。
文件系统中的文件
- 文件这一术语不但反映了用户概念中的逻辑结构,而且和存放它的辅助存储器(也称文件存储器)的存储结构紧密相关
- 所以,同一个文件必须从逻辑文件和物理文件两个侧面来观察它
文件系统的功能
- 文件系统面向用户的功能是:
- 文件的按名存取
- 文件的共享和保护
- 文件的操作和使用
- 为了实现这些功能,OS 必须考虑
- 文件目录的建立和维护
- 存储空间的分配和回收
- 数据的保密和保护
- 监督用户存取和修改文件的权限
- 实现在不同存储介质上信息的表示方式、编址方法、存储次序以及信息检索等问题
文件的存储
卷和块
- 文件存储介质有磁带、光盘和磁盘
- 卷是存储介质的物理单位,对应于一盘磁带、一块软盘、一个光盘片、一个硬盘分区
- 块是存储介质上连续信息所组成的一个区域,也叫做物理记录
- 块在主存储器和辅助存储器进行信息交换的物理单位,每次总是交换一块或整数块信息
- 决定块的大小要考虑用户使用方式、数据传输效率和存储设备类型等多种因素
- 不同类型的存储介质,块的长短常常各不相同;对同一类型的存储介质,块的大小一般相同,但也可以不同
- 外围设备由于启停机械动作或识别不同块的要求,两个相邻块之间必须留有间隙
- 间隙是块之间不记录用户代码信息的区域
顺序存取存储设备的信息安排
- 顺序存取设备是严格依赖信息的物理位置次序进行定位和读写的存储设备
- 磁带机是最常用的一种顺序存取存储设备,它具有存储容量大、稳定可靠、卷可装卸和便于保存等优点,广泛用作存档
- 磁带的一个突出特点是块长的变化范围较大,块可以很小,也可以很大,原则上没有限制光盘也是一种顺序存取存储设备
直接存取存储设备的信息安排
- 磁盘是一种直接存取存储设备,又叫随机存取存储设备
- 移臂与旋转两维组织,存取速度高
- 它的每个物理记录有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置
文件的逻辑结构
逻辑文件
逻辑文件,又称为文件的逻辑结构
- 独立于物理环境的,用户概念中的抽象信息组织方式
- 用户能观察到的,并加以处理的数据集合
文件的逻辑结构分为两种形式
- 一种是流式文件
- 一种是记录式文件
流式文件
- 流式文件指文件内的数据不再组成记录,只是由一串依次的字节组成的信息流序列
- 这种文件常常按长度来读取所需信息,也可以用插入的特殊字符作为分界
记录式文件
- 记录式文件是一种有结构的文件,它是若干逻辑记录信息所组成的记录流文件
- 逻辑记录是文件中按信息在逻辑上的独立含义所划分的信息单位
- 如,每个职工的工资信息是一个逻辑记录;整个单位职工的工资信息便组成了该单位工资信息的记录式文件
记录式文件与数据库
- 数据库管理系统也支持逻辑记录
- 但数据库有别于记录式文件,数据库中的记录之间可以通过数据冗余构成某种联系
- 数据库管理系统支持基于联系的数据查询,文件系统则不行
记录的成组与分解
成组和分解的目的本质是为了让空间的利用率提高,能够让多个逻辑记录对应一个物理记录;同时可以减少 I/O 操作的开销,设立缓冲区,通过一次 I/O 操作写入一块物理记录来减少多次写入的 I/O 开销;有点类似 Java 的缓冲字节流和缓冲字符流(
BufferedInputStream
和BufferedReader
)
提出
- 一个物理记录只存放一个逻辑记录可能造成极大的浪费
- 若干个逻辑记录合并成一组,写入一个块叫记录的成组,每块中的逻辑记录数称块因子
- 对于流式文件,一个物理记录可以存放很多个连续字节
操作
- 系统设置独立于用户数据区的输入/输出缓冲区
- 记录的成组操作在输出缓冲区内进行,凑满一块后才将缓冲区内的信息写到存储介质上
- 当存储介质上的一个物理记录读进输入缓冲区后,把逻辑记录从块中分离出来的操作叫做记录的分解操作
特征
- 优点:记录成组与分解不仅节省存储空间,还能减少输入输出操作次数,提高系统效率。
- 记录成组与分解处理带来的新特征:
- 用户读请求,导致包含该逻辑记录的物理块读入输入缓冲区,这一操作可能读入了多个逻辑记录,这一现象称为提前读(但是由于程序的局部性原理,这一操作其实是可以提高程序运行效率的)
- 用户写请求,首先是写入输出缓冲区,只有当该缓冲区中的逻辑记录满后才会引起实际输出,这一现象称为推迟写(系统异常导致缓冲区数据消失可能会导致写的记录消失,同时,还需要处理还没有写到存储时的并发读操作问题,即某个更改还在缓冲区,此时其他操作从存储空间读取的数据可能不是最新的)
文件的物理结构
- 文件的物理结构和组织是指文件在物理存储空间中的存放方法和组织关系
- 又称为物理文件
- 文件的存储结构涉及块的划分、记录的排列、索引的组织、信息的搜索等许多问题
- 其优劣直接影响文件系统的性能
顺序文件
- 将一个文件中逻辑上连续的信息存放到存储介质的依次相邻的块中便形成顺序结构,这类文件叫顺序文件,又称连续文件。
- 磁带文件、光盘文件是典型例子
顺序文件优缺点
- 优点:顺序存取记录时速度较快
- 批处理文件,系统文件用的最多
- 采用磁带存放顺序文件时,总可以保持快速存取的优点
- 建立文件前需要能预先确定文件长度,以便分配存储空间;修改、插入和增加文件记录有困难
连接文件
- 连接文件,又称串联文件;连接结构的特点是使用连接字来表示文件中各个物理块之间的先后次序
- 第一块文件信息的物理地址由文件目录给出,而每一块的连接字指出了文件的下一个物理块位置;连接字内容为0时,表示文件至本块结束
- 像输入井、输出井等都用此类文件
连接文件优缺点
其实就是链表的优缺点在操作系统中的映射
- 优点:易于对文件记录做增、删、改,易于动态增长记录;不必预先确知文件长度;存储空间利用率高。
- 缺点:存放指针需要额外的存储空间;由于存取须通过缓冲区,待获得连接字后,才能找到下一物理块的地址,因而,仅适用于顺序存取。
直接文件
- 直接文件,又称散列文件,它通过计算记录的关键字建立与其物理存储地址之间的对应关系
- 这种变换通常采用散列法(hash法)
- 计算寻址结构可能出现‘冲突’,即不同的关键字可能变换出相同的地址来,解决办法有拉链法、循环探查法、二次散列法、溢出区法等
索引文件
- 索引文件为每个文件建立了一张索引表,其中,每个表目包含一个记录的键(或逻辑记录号)及其存储地址
- 索引表的地址可由文件目录指出,查阅索引表先找到相应记录键(或逻辑记录号),然后获得数据存储地址
索引文件的访问方式
- 索引文件在文件存储器上分两个区:索引区和数据区
- 访问索引文件需两步操作:第一步查找索引表,第二步获得记录物理地址
- 需要两次访问辅助存储器,若文件索引已预先调入主存储器,那么,就可减少一次内外存信息交换
索引文件的优缺点
- 索引结构可以被认为是连接结构的一种扩展,除了具备连接文件的优点外,还克服了它只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件的增、删、改
- 索引文件的缺点是:增加了索引表的空间开销和查找时间
文件的目录结构
- 文件目录是实现文件的“按名存取”的关键数据结构
- 文件系统的基本功能之一就是负责文件目录的建立、维护和检索,要求编排的目录便于查找、防止冲突
- 文件目录需要永久保存,因此也组织成文件存放在磁盘上,成为目录文件
一级目录结构
- 一级目录结构:在操作系统中构造一张线性表,与每个文件的相关属性占用一个目录项,构成了一级目录结构
- 由于用户与文件众多,容易重名,不利于记忆
二级目录结构
- 第一级为主文件目录,它用于管理所有用户文件目录,它的目录项登记了系统接受的用户的名字及该用户文件目录的地址
- 第二级为用户的文件目录,它为该用户的每个文件保存一个登记栏,其内容与一级目录的目录项相同
- 每一用户只允许查看自己的文件目录
二级目录结构特点
- 采用二级目录管理文件的时候,因为任何文件的存取都通过主文件目录,于是可以检查访问文件者的存取权限,避免一个用户未经授权就存取另一个用户的文件,使用户文件的私有性得到保证,实现了对文件的保密和保护
- 特别是不同用户具有同名文件的时候,由于各自有不同的用户文件目录而不会导致混乱
- 对于同一个用户而言,同样存在文件多、容易重名问题
树形目录结构
- 每一级目录可以登记下一级目录,也可以登记文件,从而,形成了层次文件目录结构
- 层次目录结构通常采用树形目录结构,它是一棵倒向的有根树,树根是根目录;从根向下,每一个树分叉是一个子目录;而树叶是文件
树形目录结构的特点
- 较好地反映现实世界中具有层次关系的数据集合和较确切地反映系统内部文件的组织结构
- 不同文件可以重名,只要它们不位于同一末端的子目录中
- 易于规定不同层次或子树中文件的不同存取权限,便于文件的保护、保密和共享
树形目录结构中的文件定位
- 在树形目录结构中,一个文件的全名包括从根目录开始到文件为止,通路上遇到的所有子目录路径,又称为路径名
- 各子目录名之间用正斜线
/
(或反斜线\
)隔开 - 一个硬盘分区可以组织成一颗子树
- 每棵子树可以对应于一个逻辑盘符(Win)
- 也可以把众多子树嫁接成一颗大树(UNIX)
文件目录的管理
文件查找
- 文件查找时文件目录管理的重要工作,“按名存取”文件就是系统根据用户提供的文件路径名来搜索各级文件目录,找到该文件。
- 可以从根目录开始查找(绝对路径名)
- 也可以从“当前目录”查起(相对路径名),用
.
表示当前目录,用..
表示父目录 - 现代操作系统都设置有改变工作目录命令,即变更当前工作目录
目录项查找
- 搜索具体目录项的时候,可以采用顺序查找法,依次扫描文件目录中的目录项,将目录项中的名字与预查找的文件名相比较
- 可以采用一些优化办法加快查找目录的速度
- 目录表项时按键(By Key)的顺序编排,则可以采用“二分查找法”
- 或者采用“杂凑法”,把每个文件名经过变换函数变换成唯一的目录表表项
文件目录处理
- 树型目录结构存在的一个问题是:当一个文件经过许多目录节点时,使用很不方便;系统在沿路径查找目录时,往往要多次访问文件存储器,使访问速度大大减慢
- 若把所有文件的目录都复制到主存,访问速度是加快了,但又增加了主存的开销
- 一种有效办法是把常用和正在使用的那些文件目录复制进主存,这样,既不增加太多的主存开销,又可明显减少目录查找时间
活动文件表
- 系统可以为每个用户进程建立一张活动文件表,当用户使用一个文件之前,先通过“打开”操作,把该文件有关目录信息复制到指定主存区域,有关信息填入活动文件表,以建立用户进程和该文件索引的联系
- 当不再使用该文件时,使用“关闭”,切断用户进程和这个文件的联系,同时,若该目录已被修改过,则应更新辅存中对应的文件目录
文件的安全与保护
- 文件是计算机系统的重要资源,因此,要求文件系统具有保障文件安全的手段,提供文件保密的措施,有效地实现文件的共享
- 文件共享是指不同用户共同使用某些文件
- 文件保护是指防止文件被破坏
- 文件保密则是指防止文件及其内容被其他用户窃取
文件共享
- 文件共享是计算机用户完成共同任务所必需的
- 文件共享带来许多好处,如:减少用户大量重复性劳动;免除系统复制文件的工作;节省文件占用的存储空间;减少程序涉及输入输出文件的次数
文件共享的并发控制
- 在允许文件共享的系统中,操作系统应提供手段实现对共享文件的同步控制
- 多个进程可能同时存取一个文件,如果它们同时进行读操作,操作系统应对文件进行公用控制
- 如果有进程进行写操作,例如,有两个进程,进程A要求修改文件,同时进程B要求读出同一文件中的数据,则操作系统必须提供同步控制机制,以保证文件数据的完整性
文件保密
- 文件保密是指文件及其内容不能被未经文件主授权的其他用户窃取
- 文件的保密措施有以下几种:
- 隐蔽文件目录
- 设置口令
- 使用密码
文件的保护
- 文件保护是指防止文件被破坏
- 操作系统必须提供文件保护机制,有效实现文件的完整性
- 常用的文件保护办法
- 文件副本
- 文件存取矩阵与文件存取表
- 文件属性
文件副本
- 文件系统必须要有防止硬软件故障,保存信息完整性的能力
- 文件副本是主要实现机制
- 动态多副本技术
- 转储、备份与恢复
动态多副本
- 第一种办法是在多个介质上维持同一内容的文件,并且在更新内容时同时进行
- 这种方法需要增加设备费用和系统负载一般适用于容量较小且较为重要的文件,例如不需更新的系统文件及专用文件,当文件发生故障时只要切换到备用设备就可
文件转储
- 文件转储:定时把文件复制转储到其它介质上,当某介质上出现故障时,复原转储文件
- 转储又可分成两种方式:
- 一是在一定时间间隔或一个单位处理结束时,系统自动复写更新过的文件和数据
- 二是每天或每周把文件信息全部复写一遍,需要时再通过装入转储文件来恢复系统,诸如BACKUP、RESTORE等命令
文件存取控制矩阵
- 系统为每个用户设置访问每个文件对象的存取属性
- 系统的全部用户对全部文件的存取属性就组成的一个二维矩阵,称为存取控制矩阵
存取控制表
- 由于操作系统拥有很多用户和众多文件,存取控制矩阵是一个稀疏矩阵,可以将其简化为一张存取控制表
- 每行包括:用户、文件、存取属性
- 存取控制表仅登记那些对文件拥有存取属性的部分
基于存取控制矩阵/表的文件保护
- 存取属性:可以有访问、读、写、执行、创建、删除、授权等等
- 系统通过查阅(矩阵/表)核对用户对文件的存取权限
- 文件属主使用GRANT、REVOKE等命令进行授权,甚至把授权转授给他信任的用户
- 系统管理用户(超级用户)等同于文件属主权限,并获得对系统文件的授访问权权限
文件属性
- 存取控制表的一种简化方法是用户分类,再针对每类用户规定文件属性
- 用户分类:属主、合作者、其他
- 文件属性:读、写、执行、…
- 文件属性可以放在文件目录项中,管理大为简化
- 用户使用文件时,通过核对文件属性,实现保护
Linux 例子:
- chmod命令可以改变文件属性
- chown命令用于变更文件属主
- chgrp命令用于变更用户伙伴
文件的存取方法
- 文件存取方法是操作系统为用户程序提供的使用文件的技术和手段
- 文件存取方法在某种程度上依赖于文件的物理结构
顺序存取
- 按记录顺序进行读/写操作的存取方法称为顺序存取
- 读操作根据读指针读出当前的记录,同时推进读指针,指向下一次要读出的记录
- 写操作则设置写指针,把一个记录写到文件末端,同时推进写指针
- 允许对读指针进行前跳或后退 (整数)个记录的操作
直接存取
- 很多应用场合要求快速地以任意次序直接读写某个记录
- 例如,航空订票系统,用航班号作标识,把特定航班的所有信息存放在物理块中,用户预订某航班时,直接计算出该航班的存位置
索引存取
- 基于索引文件的索引存取方法
- 对于这种文件,信息块的地址都可以通过查找记录键而换算出
- 除可采用按键存取外,也可以采用顺序存取或直接存取的方法
- 实际的系统中,大都采用多级索引,以加速记录查找过程
文件的使用
- 用户通过两类接口与文件系统联系
- 第一类是与文件有关的操作命令,例如,UNIX 中的
cat
,cd
,cp
,find
,mv
,rm
,mkdir
,rmdir
等等 - 第二类是提供给用户程序使用的文件类系统调用,基本文件类系统调用有:建立、打开、读/写、定位、关闭、撤销
建立文件
- “建立文件” 用于创建一个文件
- 所需参数:文件名、设备类(号)、文件属性及存取控制信息
- 处理流程:在相应设备上建立一个文件目录项,为文件分配第一个物理块,在活动文件表中申请一个项,登记有关目录信息,并返回一个文件句柄
撤销文件
- “撤销文件”用于删除一个文件
- 所需参数:文件名和设备类(号)
- 处理流程:若文件没有关闭,先关闭文件;若为共享文件,进行联访处理;在目录文件中删去相应目录项;释放文件占用的文件存储空间
打开文件
- “打开文件” 用于建立起文件和用户进程之间的使用联系
- 所需参数:文件名、设备类(号)、打开方式
- 处理流程:在主存活动文件表中申请一个项,返回一个文件句柄;跟据文件名查找目录文件,把目录信息复制到活动文件表相应栏;按存取控制说明检查访问的合法性;若打开的是共享文件,则应有相应处理
关闭文件
- “关闭文件” 用于结束一个文件的读写
- 所需参数:文件句柄
- 处理流程:将活动文件表中该文件的“当前使用用户数”减1;若此值为0,则收回此活动文件表;完成“推迟写”;若活动文件表目内容已被改过,则应先将表目内容写回文件存储器上相应表目中,以使文件目录保持最新状态
读/写文件
- “读/写文件”用于读写文件
- 所需参数参数:文件句柄、用户数据区地址、读写的记录或字节个数
- 处理流程:按文件句柄从活动文件表中找到该文件的目录项信息;根据目录项指出的该文件的逻辑和物理组织方式,把相关逻辑记录转换成物理块
定位文件
- “定位文件”用于调整所打开文件的读写指针位置
- 所需参数:文件句柄,定位指针
辅助空间管理
- 磁盘等大容量辅存空间被OS及许多用户共享,用户进程运行期间常常要建立和删除文件,OS应能自动管理和控制辅存空间
- 随着用户文件不断建立和撤销,文件存储空间会出现许多「碎片」
- OS解决「碎片」的办法是整理「碎片」;在整理过程中,往往对文件重新组织,让其存放在连续存储区中
辅存空间的分配方式
- 连续分配:存放在辅存空间连续存储区中(连续的物理块号)
- 优点是顺序访问时速度快,管理较为简单,但为了获得足够大的连续存储区,需定时进行「碎片」整理
- 非连续分配:动态分配给若干扇区或簇(几个连续扇区),不要求连续
- 优点是辅存空间管理效率高,便于文件动态增长和收缩
空闲块的管理:位示图
- 使用若干字节构成一张表,表中每一字位对应一个物理块,字位的次序与块的相对次序一致。字位为「1」表示相应块已占用,字位为「0」状态表示该块空闲
- 其主要优点是,可以把位示图全部或大部分保存在主存中,再配合现代计算机都具有的位操作指令,可实现高速物理块分配和去配
Reference
- 南京大学软件学院本科三年级课程《计算机与操作系统》