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