补充
[!IMPORTANT]
- inode节点:用于存储文件的元数据和数据块引用,是实现按名存取功能的关键。
- 空闲块:用于文件系统的存储管理,与按名存取无直接关系。
- 目录项:实现了文件名到inode编号的映射,是按名存取文件的重要组成部分。
- 超级块:存储文件系统的全局信息,不直接参与按名存取。
5.1.1 文件的概念
文件系统的首要需求:按名存取
文件是具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列
文件命名
- 文件命名一般包括文件名和扩展名:
- 前者用于识别文件,后者用于表示文件特性
引入文件的优点
- 用户使用方便
- 文件安全可靠
- 文件可备份,可组织转储或备份
- 文件可共享
- 总之,把数据组织成文件形式加以管理和控制是计算机数据管理的重大进展
5.1.2 文件系统及其功能
文件系统是操作系统中负责存取和管理信息的模块
- 文件这一术语不但反映了用户概念中的逻辑结构,而且和存放它的辅助存储器(也称文件存储器)的存储结构紧密相关
- 所以,同一个文件必须从逻辑文件和物理文件两个侧面来观察它
文件系统的功能
- 文件的按名存取
- 文件的共享和保护
- 文件的操作和使用
文件系统的功能
- 为了实现这些功能,OS必须考虑:
- 文件目录的建立和维护
- 存储空间的分配和回收
- 数据的保密和保护
- 监督用户存取和修改文件的权限
5.2.1 文件的存储
卷和块
- 文件存储介质有磁带、光盘和磁盘
- 卷是存储介质的物理单位,对应于一盘磁带、一块软盘、一个光盘片、一个硬盘分区
- 块是存储介质上连续信息所组成的一个区域,也叫做物理记录
-
块在主存储器和辅助存储器进行信息交换的物理单位,每次总是交换一块或整数块信息
- 外围设备由于启停机械动作或识别不同块的要求,两个相邻块之间必须留有间隙
顺序存取存储设备的信息安排
- 顺序存储设备是严格依赖信息的物理位置次序进行定位和读写的存储设备
- 磁带机是最常用的一种顺序存取存储设备,广泛用作存档
直接存取存储设备的信息安排
- 磁盘是一种直接存取存储设备,又叫随机存取存储设备
- 移臂与旋转两维组织,存取速度高
- 它的每个物理记录有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置
5.2.2 文件的逻辑结构
逻辑文件
- 逻辑文件 又称为文件的逻辑结构
- 逻辑结构的两种形式
- 流式文件
- 流式文件指文件内的数据不再组成记录,只是由一串依次的字节组成的信息流序列
- 这种文件常常按长度来读取所需信息,也可以用插入的特殊字符作为分界
- 记录式文件
- 记录式文件是一种有结构的文件,它是若干逻辑记录信息所组成的记录流文件
- 逻辑记录是文件中按信息在逻辑上的独立含义所划分的信息单位
- 流式文件
[!IMPORTANT]
记录式文件不是物理文件
数据库管理系统也支持逻辑记录
5.2.3 记录的成组与分解
若干个逻辑记录合并成一组,写入一个块叫记录的成组,每块中的逻辑记录数称块因子
- 记录的成组操作在输出缓冲区内进行,凑满一块后才将缓冲区内的信息写到存储介质上
- 当存储介质上的一个物理记录读进输入缓冲区后,把逻辑记录从块中分离出来的操作叫记录的分解操作
固定组块(fixed blocking):使用固定长度的记录,并且若干条完整的记录被保存在一个块中。在每个块的末尾可能会有一些未使用的空间,称为内部碎片。
可变长度非跨越式组块(variable-length unspanned blocking):使用可变长度的记录,但并不采用跨越的方式。如果下一条记录比块中剩余的未使用的空间大,则无法使用这一部分,因此在大多数中都会有未使用的空间。
成组与分解的特征
- 优点:记录成组与分解不仅节省存储空间,还能减少输入输出操作次数,提高系统效率
- 记录成组与分解处理带来的新特征:
- 用户读请求,导致包含该逻辑记录的物理块读入输入缓冲区;这一操作可能读入了多个逻辑记录,这一现象称为提前读
- 用户写请求,首先是写入输出缓冲区,只有当该缓冲区中的逻辑记录满后才会引起实际输出,这一现象称为推迟写
5.2.4 文件的物理结构
- 文件的物理结构和组织是指文件在物理存储空间中的存放方法和组织关系
- 又称为物理文件
- 文件的存储结构涉及块的划分、记录的排列、索引的组织、信息的搜索等许多问题
- 其优劣直接影响文件系统的性能
顺序文件
- 将一个文件中逻辑上连续的信息存放到存储介质的依次相邻的块中便形成顺序结构,这类文件叫顺序文件,又称连续文件
- 磁带文件、光盘文件是典型例子
- 优点
- 顺序存取记录时速度快
- 建立文件前需要能预先确定文件长度,以便分配存储空间;修改、插入和增加文件记录有困难
连续文件
- 连接文件,又称串联文件;连接结构的特点是使用连接字来表示文件中各个物理块之间的先后次序
- 第一块文件信息的物理地址由文件目录给出,而每一块的连接字指出了文件的下一个物理块位置;连接字内容为0时,表示文件至本块结束
- 像输入井、输出井等都用此类文件
- 优点
- 易于对文件记录做增、删、改,易于动态增长记录;不必预先确知文件长度;存储空间利用率高
- 缺点
- 存放指针需要额外的存储空间
- 由于存取须通过缓冲区,待获得连接字后,才能找到下一物理块地址,因而只适用于顺序存取
索引文件
- 索引文件为每个文件建立了一张索引表,其中,每个表目包含一个记录的键(或逻辑记录号)及其存储地址
- 索引表的地址可由文件目录指出,查阅索引表先找到相应记录键(或逻辑记录号),然后获得数据存储地址
索引文件的访问方式
- 索引文件在文件存储器上分两个区:索引区和数据区
- 访问索引文件需两步操作:第一步查找索引表,第二步获得记录物理地址
- 需要两次访问辅助存储器,若文件索引已预先调入主存储器,那么,就可减少一次内外存信息交换
索引文件的特点
- 索引结构可以被认为是连接结构的一种扩展,除了具备连接文件的优点外,还克服了它只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件的增、删、改
- 索引文件的缺点是:增加了索引表的空间开销和查找时间
索引标的组织
- 一级索引
- 两级索引
- 多级索引
eg
5.3.1 文件目录结构
文件目录结构
[!IMPORTANT]
文件目录组织和管理文件
-
一级目录结构
- 一张线性表,与每个文件的相关属性占用一个目录项
-
二级目录结构
- 第一级 主文件目录 目录项登记了系统接受的用户的名字及该用户目录的地址
- 第二级 用户的文件目录 为用户的每个文件保存一个登记栏,内容与一级目录目录项相同
- 每一用户只允许查看自己的文件目录
-
树形目录结构
-
每一级目录可以登记下一级目录,也可以登记文件,从而,形成了层次文件目录结构
-
层次目录结构通常采用树形目录结构,它是一棵倒向的有根树,树根是根目录;从根向下,每一个树分叉是一个子目录;而树叶是文件
-
5.3.2 文件目录的管理
- 文件查找
- 目录项查找
- 文件目录处理
活动文件表
5.4.1 文件的安全与保护
文件的安全与保护
- 文件共享是指不同用户共同使用某些文件
- 文件保护是指防止文件被破坏
- 文件保密则是指防止文件及其内容被其他用户窃取
5.4.2 文件的保护
文件副本
动态多副本
文件转储
文件的存取控制矩阵
存取控制表
基于存取控制矩阵/表的文件结构
文件属性
5.5.1 文件的存取方法
文件的存取方法
顺序存取
直接存取
索引存取 基于索引文件的索引存取方式
5.5.2 文件的使用
[!IMPORTANT]
- 建立文件
- 所需参数:文件名、设备类(号)、文件属性及存取控制信息
- 处理流程:在相应设备上建立一个文件目录项,为文件分配第一个物理块,在活动文件表中申请一个项,登记有关目录信息,并返回一个文件句柄
- 撤销文件
- 所需参数:文件名,设备类(号)
- 处理流程:若文件没有关闭,先关闭文件;若为共享文件,进行联访处理;在目录文件中删去相应目录项;释放文件占用的文件存储空间
- 打开文件
- 所需参数:文件名、设备类(号)、打开方式
- 处理流程:在主存活动文件表中申请一个项,返回一个文件句柄;跟据文件名查找目录文件,把目录信息复制到活动文件表相应栏;按存取控制说明检查访问的合法性;若打开的是共享文件,则应有相应处理
- 关闭文件
- 所需参数:文件句柄
- 处理流程:将活动文件表中该文件的“当前使用用户数”减1;若此值为0,则收回此活动文件表;完成“推迟写”;若活动文件表目内容已被改过,则应先将表目内容写回文件存储器上相应表目中,以使文件目录保持最新状态
- 读/写文件
- 所需参数:文件句柄、用户数据区地址、读写的记录或字节个数
- 处理流程:按文件句柄从活动文件表中找到该文件的目录项信息;根据目录项指出的该文件的逻辑和物理组织方式,把相关逻辑记录转换成物理块
- 定位文件
- 所需参数:文件句柄,定位指针
文件系统磁盘结构
- 用户打开文件表:
- 进程的PCB结构中保留一个files_struct,称为用户打开文件表或文件描述符表,表项的序号为文件描述符fd,该登记项内登记系统打开文件表的一个入口指针fp,通过此系统打开文件表项连接到打开文件的活动inode。
- 系统打开文件表
- 是为解决多用户进程共享文件、父子进程共享文件而设置的系统数据结构file_struct,主存专门开辟最多可登记256项的系统打开文件表区,当打开一个文件时,通过此表项把用户打开文件表的表项与文件活动inode联接起来,以实现数据的访问和信息的共享
- 主存活动inode表
- 为解决频繁访问磁盘索引节点inode表的效率问题,系统开辟的主存区,正在使用的文件的inode被调入主存活动索引节点inode中,以加快文件访问速度
5.6.1 辅存空间管理
辅存空间管理
- 磁盘等大容量辅存空间被OS及许多用户共享,用户进程运行期间常常要建立和删除文件,OS应能自动管理和控制辅存空间
- 随着用户文件不断建立和撤销,文件存储空间会出现许多‘碎片’
- OS解决‘碎片’的办法是整理‘碎片’;在整理过程中,往往对文件重新组织,让其存放在连续存储区中
辅存的分配方式
- 连续分配:存放在辅存空间连续存储区中(连续的物理块号)
- 优点:顺序访问时速度快,管理较为简单
- 但为了获得足够大的连续存储区,需定时进行’碎片‘整理
- 非连续分配:动态分配给若干扇区或簇(几个连续扇区),不要求连续
- 优点:辅存空间管理效率高,便于文件动态增长和收缩
空闲块的管理:位示图
- 使用若干字节构成一张表,表中每一字位对应一个物理块,字位的次序与块的相对次序一致。字位为“1”表示相应块已占用,字位为“0”状态表示该块空闲
- 其主要优点是,可以把位示图全部或大部分保存在主存中,再配合现代计算机都具有的位操作指令,可实现高速物理块分配和去配
[!IMPORTANT]
位示图 磁盘空间的管理
在给文件分配空间时,是以磁盘的盘块为基本单位分配的,必须记录磁盘可用于分配的盘块(即空闲盘块),以及提供磁盘分配和回收的手段
5.6.2 文件系统的实现层次
已存在的文件的索引节点的inode编号与别名构成一个目录项
文件共享
- 静态共享
-
动态共享
-
同一用户父、子进程协同完成任务,使用同一读/写位移,同步地对文件进行操作。
-
该位移指针宜放在相应文件的活动索引节点中。当用系统调用fork建立子进程时,父进程的PCB结构被复制到子进程的PCB结构中,使两个进程的打开文件表指向同一活动的索引节点,达到共享同一位移指针的目的。
-
多用户共享文件,每个希望独立地读、写文件,这时不能只设置一个读写位移指针,须为每个用户进程分别设置一个读、写位移指针。
-
位移指针应放在每个进程系统打开文件表的表目中。这样,当一个进程读、写文件,并修改位移指针时,另一个进程的位移指针不会随之改变,从而,使两个进程能独立地访问同一文件。
-
-
文件的符号链接共享
-
符号链接又称软链接,是一种只有文件名,不指向inode的文件
-
符号链接共享文件的实现思想:
- 用户A目录中形式为afile→bfile,实现A的目录与B的文件的链接。其中只包含被链接文件bfile的路径名而不是它的inode号,而文件的拥有者才具有指向inode的指针。
-
主存映射文件
-
系统提供两个新的系统调用
- 映射文件,有两个参数:一个文件名和一个虚拟地址,把一个文件映射到进程地址空间。
- 移去映射文件,让文件与进程地址空间断开,并把映射文件的数据写回磁盘文件。
-
优点是:方便易用、节省空间、便于共享、灵活高效
虚拟文件系统