目录
前言
文件管理:基础
基本概念
文件
文件系统
文件系统的实现模型
文件的组成
文件名
文件分类
文件结构
逻辑结构
物理结构
练习题
文件管理:目录
文件控制块FCB
FCB:File Control Block
FCB信息
目录
基本概念
目录功能
目录基本操作
⭐FCB组织方法
⭐改进的FCB组织方法
目录的组织
路径
无环图目录
链接
通用图目录
文件管理:磁盘管理
空闲分区表
概念
特点
空闲分区链表
概念
特点
位示图
成组块链接法
分配方法
释放方法
例题
文件一致性:盘块
链接数一致性检查
文件执行
数据结构
文件共享
文件操作
执行过程
虚拟文件系统 VFS
前言
设备管理模块已经更新,传送门:电子科技大学操作系统期末复习笔记(四):设备管理
本复习笔记基于电子科技大学计算机操作系统-教学大纲(2022)中的课程模块部分,分为五大章节,分别是:
- CM1:操作系统概念。操作系统基本功能、操作系统发展历史及趋势、操作系统主流架构、常见操作系统特点、操作系统安全机制。
- CM2:进程管理。进程概念、线程概念、进程生命周期、进程调度算法、进程同步互斥、进程间通信和死锁。
- CM3:内存管理。内存空间的概念、连续分配、离散分配(分页管理、分段管理、段页式管理)、虚拟存储管理和页面置换算法。
- CM4:设备管理。I/O 系统结构、缓冲管理、磁盘结构和磁盘调度算法。
- CM5:文件管理。文件系统的作用、逻辑结构、物理结构、目录、文件共享和文件系统的一致性。
本节是最后一部分,要点在CM5,大致内容如下:
第五章 文件管理(6 学时,多媒体课件结合板书面授)CM51、主要内容文件和文件系统的概念,文件逻辑结构(堆文件、顺序文件、索引顺序文件、索引文件、HASH 文件),外存分配方法(连续分配、链接分配、索引分配),目录管理(一级目录、二级目录、多 级目录),文件存储空间的管理技术(位示图、空闲链表、索引)。文件系统性能的改善、数据一致性控制。2、应达到的要求 记忆:文件系统性能的改善、数据一致性控制。理解:文件系统的基本概念、目录管理、文件共享、文件保护的方法。分析:文件逻辑结构、文件的物理结构、文件目录、外存空间的管理。
一共3个PPT,就分三大块:文件管理:基础、文件管理:目录、文件管理:磁盘管理。
文件管理:基础
基本概念
文件
- 一种具有符号名的、相关联元素的有序集合。
- 用户按照信息的逻辑功能将关联存储单元组织成文件。
- 文件是信息在磁盘上存储的基本逻辑单位。
- 文件名:对相关联元素的Naming
文件系统
- 概念:
- 对文件实施管理、控制与操作的一组软件。
- 用户或应用程序访问文件的唯一方式
- 目标与功能:
- 保证文件中的数据有效
- 减少或消除丢失或破坏数据的可能性
- 从系统角度优化总吞吐量,从用户角度优化响应时间
- 为各种类型的存储设备提供I/O支持,并提供统一接口
- 统一管理文件的存储空间,实施存储空间的分配与回收
- 实现文件的按名存取:文件名字空间
存储空间
- 实现文件信息共享,提供文件保护和保密措施
- 用户观点
- 实现“按名存取”功能
- 操作系统观点
- 文件目录怎样实现、管理存储空间、文件存储位置、磁盘实际运作方式(与设备管理的接口)
文件系统的实现模型
- 文件系统接口:命令、系统调用和图形窗口的文件系统访问功能。
- 逻辑功能层:根据接口层所发下的文件访问需求,通过相关的文件控制块、文件目录、文件分配表等,获取访问存储介质的物理参数。
- 物理驱动层 :将逻辑功能层所发下的命令转化为相应的驱动程序的动作,完成对文件物理存储设备的处理。
文件的组成
- 文件=元数据+文件内容
- 元数据:文件名、内部标识(如unix的inode)、拥有者、访问时间/权限、文件大小 ……
文件名
- 格式:A.B
- A: 文件名称 B: 文件类型/文件格式/文件扩展名
文件分类
- 对不同文件进行管理,提高系统效率
- 提高用户界面友好性
- 设备文件:统一的抽象接口(了解即可)
文件结构
逻辑结构
从用户角度研究文件的组织形式,独立于物理存储结构
- 无结构文件:流式文件
- 构成文件的基本单位是字节,文件是有逻辑意义的、无结构的一串字节的集合。
- 自身不提供任何数据结构 提供很大的灵活性
- 用户自定义文件内容含义
- 有结构文件:记录文件
- 文件是由若干个记录组成,每个记录有一个键,可按键进行查找。
- 记录(record)、字段(field)、键(key)
- 文件组织与访问
- 原则:
- 原则可能互相矛盾(如索引 vs. 空间)
- 优先级取决于使用文件的应用程序
- 堆文件:数据按到达时间顺序存放;每个记录长度、字段数量不确定;随机访问效率极低,对大多数应用都不可用;例:log(日志文件)
- 顺序文件:所有记录有序排列(主字段);字段定义、记录长度固定;批处理,顺序访问最佳;查询或更新记录的交互式应用,性能差;(随机)访问大型顺序文件时性能差(包含某个key的记录)
- 索引顺序文件:是一个顺序文件;将顺序文件中的记录进行分组(block);索引表仅记录每组中第一个记录的信息;组与组之间记录的关键字必须有序排列;搜索非key字段困难
- 索引文件:每个索引项指向一个记录,索引项按照记录中的某个关键字排序;记录大小不必相同,不必排序,存放在主文件中。 可以对不同的关键字域建立多个索引;主文件中增/减/变更记录时,索引文件须相应更新
- 直接,散列/哈希文件:记录的存储位置由以关键字为参数的哈希函数计算得到。 记录大小一般相同;检索时给出记录的关键字值,通过哈希函数计算出该记录在文件中的位置;访问速度快, 一次只需访问一条记录时使用。例:目录、价格表、调度和名字列表等。
- 原则:
- 有结构文件和无结构文件的区别:
物理结构
文件的逻辑地址和物理地址 文件在物理介质上的存放方式
- 文件访问方法
- 用户在使用文件时按何种次序存取文件
- 顺序存取:按照文件信息的逻辑顺序(记录的排列顺序)依次存取。
- 随机存取(直接存取):按任意的次序对文件进行读写操作
- 与文件使用方式有关
- 源程序文件用顺序存取
- 数据库文件用随机存取
- 与存储介质的特性有关
- 磁带
- 磁盘
- 用户在使用文件时按何种次序存取文件
- ⭐文件分配表
- 为了有效地管理文件存储器,通常把文件存储空间划分成若干个大小相等的物理块。
- 物理块是分配及传输信息的基本单位。
- 块的大小通常是扇区的倍数,如512B、1KB、2KB或者4KB。
- 文件分配表:描述文件所获得物理块的详细信息,不同的操作系统赋予了该结构不同的名字
- DOS:FAT / Windows NTFS: MFT (master file table)
- UNIX类操作系统:inode
- 分配方式
- 静态分配:文件创建时申明需要的最大空间
- 预分配,实现简单,易于维护,但灵活性差
- 动态分配:文件存储空间按需分配
- 实现较复杂,需要维护较多的数据结构,实用性高
- 静态分配:文件创建时申明需要的最大空间
连续结构(顺序)
- 文件信息存放在若干连续的物理块中
- 优点:简单;支持顺序存取和随机存取;顺序存取速度快:磁盘寻道次数(寻道时间)最少
- 缺点:不利于文件尺寸的动态增长(插入、删除);可能会导致磁盘碎片,降低外存空间的利用率(可以采用紧凑技术处理,从而改善)。
链接结构
- 文件信息存放在若干不连续的物理块中,各块之间通过指针连接。
- 隐式链接
- 每个物理块都设有一个指针字段,指向下一个物理块的位置。
- 随机访问性能差
- 显式链接
- 用于链接文件各物理块的指针,显示地存放在一张内存链表中,该表在整个磁盘中仅一张。
- 随机性能优于隐式链接
- 隐式链接
- 优点:提高了磁盘空间利用率,不存在外部碎片问题;有利于文件插入和删除
- 缺点:更多的寻道次数和寻道时间;随机访问性能差;可靠性问题,如指针出错
- 改进方法:扩大文件块分配单位。若干个连续的数据块,称之为簇(Cluster)。
- 簇(Cluster)
- 一组连续的扇区→虚拟扇区
- 分配单位 Cluster=2^n Sectors
- 簇(Cluster)
索引结构
文件信息存放在若干不连续物理块中,每个文件关联一个索引表,记录块号
索引表就是磁盘块地址数组,第i个条目指向文件的第i块
优点:支持随机存取(优于链接结构,找第i块更快);满足了文件动态增长、插入删除要求;利用多级索引,可以支持大型文件的存取
缺点:较多的寻道次数和寻道时间(对比页表)
一个数据块容纳不了一个文件的所有分区时,需要若干个索引结点进行存储
多级索引
- 盘块大小:1 KB,每个盘块号:4B
- 一个索引块中可存放1K/4B=256个盘块号
- 两级索引时, 最多可包含的存放文件的盘块总数N = 256 × 256 = 64 K个盘块号。
- 最大文件长度:64MB
- 计算:盘块大小:4KB,盘块号:4B,一级、两级索引时最大文件分别为?
- 4KB/4B=2^10; 1_file=2^10*4KB=4MB; 2_file=2^10*2^10*4KB=4GB
⭐综合/混合模式
将多种索引分配方式相结合而形成的一种分配方式。
例如,系统既采用了直接地址,又采用了一级索引分配方式,或两级索引分配方式,甚至还采用了三级索引分配方式。
Unix iNode
13个索引项,每项2个字节 前10项为直接块
第11项指向一个物理块,该块中最多可放256个文件物理块的块号(一次间接寻址)。
第12和第13项作为二次和三次间接寻址
单个文件最大长度:(10+256+256*256)*block-storage
练习题
设文件索引节点中有7个地址项 4个直接地址索引 2个一级间接地址索引 1个二级间接地址索引 每个地址项大小为4B 磁盘索引块和磁盘数据块均为256B
问:单个文件的最大长度是多少?
答:每个索引块中的项目数为:256/4=64个
4个直接地址索引块,可索引块数:4
2个一级间接地址索引块,可索引块数:2×64=128
1个二级间接地址索引块,可索引块数:1×64×64=4096
单个文件的最大长度为:(4+128+4096)*256B=1057KB
假定UNIX磁盘块的大小为1KB,每个盘块号占4个字节,文件索引节点中的磁盘地址明细表如图所示,请将下列文件的字节偏移量转换为物理地址?
1. 9000 2. 14000 3. 350000
答:字节偏移量为9000时
逻辑块号为:9000/1024=8 块内偏移量为:9000 % 1024=808 逻辑块号小于10→该块为直接块。逻辑块号8对应的物理盘块号为367,该块中的第808字节即为文件的第9000字节。
字节偏移量为14000时
逻辑块号为:14000/1024=13 块内偏移量为:14000 % 1024=688 逻辑块号9<13<266→该块为一次间接块。 一次间接的盘块号为428,从一次间接块中读出盘块号表,查得逻辑块号13的物理块号为952,该块中的第688字节即为文件的第14000字节。
字节偏移量为350000时
逻辑块号为:350000/1024=341 块内偏移量为:350000 %1024=816 因逻辑块号265<341<65802(256*256+256+10)→该块为二次间接块。 由图可知,二次间接块的盘块号为9156。一个一次间接块中可容纳256个块号,341-10-256=75 75/256=0,故字节偏移量350000在二次间接块的第0个一次间接块的第75个表项中,其盘块号为333,该块中的第816字节即为文件的第350000字节。
文件管理:目录
文件控制块FCB
FCB:File Control Block
描述和控制文件的数据结构 与文件一一对应
文件存在的标志
文件控制块的组成——与操作系统相关
FCB信息
文件名:用户利用该名字进行存取。
文件物理位置:在外存的存储位置(设备名、起始盘块号、占用的盘块等)
使用信息:创建时间:create time ;最后一次读访问的时间:access time ;最后一次写访问的时间:modify time
目录
基本概念
文件目录:一组文件的集合
目录:文件元数据(控制块)的集合
目录文件:目录项构成的文件
递归效果:目录也用FCB表示
目录即文件
目录文件具有固定格式 由系统进行管理,用户不能直接访问目录文件
目录功能
- 按名存取
- 提高检索速度
- 合理地组织目录结构,可以加快对目录的检索速度,从而提高对文件的存取速度。
- 文件共享
- 允许共享文件,节省存储空间,方便用户。
- 允许文件重名
- 方便用户按照自己的习惯来命名和使用文件。
目录基本操作
- 罗列文件
- 搜索文件
- 通过查找目录结构,实现特定文件的按名查找
- 创建文件
- 建立新文件,将相应控制块加到目录中去
- 删除文件
- 当一个文件不再需要时,从目录中删除
- 重命名文件
⭐FCB组织方法
计算: 一个FCB有48字节,假设物理块512字节,某目录有128个文件。 计算查找一个文件平均访盘次数。
- 每块存储的FCB数量:512/48=10
- 128个文件的目录文件需要磁盘块:128/10=13
- 平均访盘次数:(1+13)/2=7(最少一次找到,最多13次,取均值)
⭐改进的FCB组织方法
采用目录项分解法,把FCB分成两部分
一个FCB有48字节,符号目录项占 8字节(文件名6字节,文件号2字节),假设物理块512字节,某目录有128个文件。 采用改进的FCB组织方法,查找一个文件平均访盘次数。
每块存储的符号目录项:512/8=64
每块存储的基本目录项:512/42=12
128个文件,符号文件、基本文件分别需要:128/64=2, 128/12=11
平均访盘次数:(1+2)/2+1=2.5(最少一次查找符号目录,最多两次,取均值,再加上一次精准查找的基本目录项)
目录的组织
- 组织文件目录是文件系统的主要内容之一
- 有效性:快速定位一个文件
- 命名:用户使用方便
- 两个用户对不同的文件可以使用同一个文件名
- 同一个文件可能有不同的文件名
- 文件数据,元数据
- 空目录≠文件数为0的目录:不存在文件数为0的目录!
- 单级目录结构
- 所有文件都包含在同一目录中
- 缺点:查找速度慢;不允许重名;不便于共享;不能分组
- 两级目录结构
- 为每个用户创建单独的目录
- 用户文件目录UFD 主文件目录MFD
- 优点:不同用户可以有相同的文件名;提高了检索速度;将一个用户与另一个用户有效隔开
- 缺点:不利于文件的共享
- 树状目录结构
- 每一级目录可以包含文件,也可以包含下一级目录。
- 只有一个根目录,除根目录外,其余每个目录或者文件都有唯一的一个上级目录。(父目录、子目录)
- 优点:文件的层次和隶属关系清晰;便于实现不同级别的存取保护和文件系统的动态装卸
- 缺点:
- 不便于共享(相比较而言)
路径
从树根(namespace)到节点的唯一表达
不同文件→文件可以同名,但路径名不同。(路径名不同 ≠ 文件不同)
文件可按照相对于工作目录的方式访问:
绝对路径(absolute):从根目录开始指定
相对路径(relative):从当前工作目录开始(./当前目录)(../上一级目录)
练习:当前目录/spell/mail/copy 请用绝对和相对路径表达红色箭头文件
prog: ./prog ; /spell/mail/prog
find: .../programs/p/find ; /programs/p/find
all: /all ; /spell/mail/copy/all
first: ./prt/first ; /spell/mail/prt/first
无环图目录
在树型目录的基础上,允许多个目录项指向同一个数据文件或者目录文件,实现了目录或者数据文件的共享
一个文件或者目录在多个父目录中占有项目
目录结构不再是一颗树,而是一个无环图
实现共享文件:多个用户同时访问一个文件,可节约存储空间
数据复制:数据不一致
通过路径名共享:不灵活
链接:在多个目录中对要共享的文件建立相应的表项,一个文件或目录在目录树中多处出现(引用) 在外存上只有一份物理存储。
链接
硬链接:多个文件名链接到同一个索引结点,链接文件和被链接文件必须位于同一个文件系统中。
软链接:符号链接(symbolic link, shortcut) 特殊类型的文件,其内容是另一个目录或文件的路径。 无硬链接的限制,可跨盘,跨目录,甚至跨机器。建立符号链接文件,并不影响原文件→它们是独立的文件。
缺点: 空间和时间开销更大;如果设置不当,上下级目录关系可能会形成环状
硬链接和软链接的比较
硬链接
只允许文件链接,不允许目录链接;
只能在同一个文件系统范围内进行,不允许跨文件系统。
删除文件时,如果还有其他链接链至该文件,则该文件不能被删除。
软链接
访问速度相对慢一些,但适用范围和灵活性要大一些。
允许目录链接,允许在不同的文件系统间进行链接,这两个文件系统可以在同一个计算机上,也可以在不同的计算机上。
被链接文件的删除和符号链接的删除是完全独立的
通用图目录
无环图目录结构中,加上允许子目录对上层目录的引用的条件
允许环存在:搜索子目录时要避免无穷地循环搜索——限制访问目录的次数来确定;释放孤立环(orphan cycle)——垃圾回收(garbage collection) 。
文件管理:磁盘管理
磁盘存储器
文件存储空间的分配单位是磁盘块而非字节;
文件系统必须记录存储空间的使用情况;
文件系统对存储空间进行分配和回收;
常用的磁盘空间的管理方式有:
空闲分区表
概念
将空闲分区登记在一张表中,一个分区对应一个表项,每个表项包含有空闲分区号、分区起始块号、分区长度等主要信息,按起始块序号排序
特点
- 实现简单
- 将各空闲分区按照长度有序进行排列,能很快找到需要大小的空闲分区。 (排序规则不固定)
- 当空闲分区分布较分散且数量较多时,空闲分区表将会很大。
空闲分区链表
概念
利用空闲分区空间通过指针将各个空闲分区连接起来,并记载各空闲分区大小。
无空闲分区表的额外空间开销。
特点
回收由许多离散小分区组成的文件时,小分区链接到空闲分区链表中需要很长时间(按照某种规则,大小或者位置)。
类比可变分区管理
位示图
- 一个向量,每位(bit)对应于磁盘中的一个块(block)
- 空闲块:0,已使用块:1
- 方便地查找一个或一组连续的空闲分区。
- 位示图需要占用的存储空间大小
- 磁盘容量(字节数)/ (8×数据块大小) Byte
- 大位示图搜索将会降低文件系统的性能
成组块链接法
- 将所有空闲块每n块划分为一组,用索引表表示
- 每组的第一块用来存放后一组中各块的块号和总块数
- 各组间自然构成链表
- 第一组的块号与总块数放在一个专用栈中:空闲盘块号栈
- 栈计数count:栈中的空闲块数目
- 栈中的元素是空闲块编号
- 对块的分配和释放在栈中进行
分配方法
- 查看栈中是否count==1,若不是,那么就弹出栈顶元素N(表示可用磁盘块号),分配出去,--count;若是,弹出栈顶元素N,把空闲块N中的内容读入到栈中;返回空闲块编号N。因为所分配的磁盘块号是栈中最后一个可用盘块号,由于在该盘块中存放了下一组的所有盘块号,于是要先将该块的内容读入栈中,然后才能将该块分配出去
释放方法
- 被释放空闲块为编号N。查看是否栈已满,若不是,则N入栈,++count; 若是,则将栈(包括栈计数)写入到空闲块N,然后把N放入栈顶并置count为1。说明栈已满,须先将栈中所有盘块号复制到新回收的盘块中,再将新回收盘块的编号放到栈中,成为栈中第一个盘块
例题
解:92=41+50+1,所以是#400最下面的一个,也就是401。
文件一致性:盘块
链接数一致性检查
每个目录项都含有一个索引结点号
共享文件的索引结点号会在目录中出现多次
若某文件被共享(硬链接)N次,其索引结点号会在目录中出现N次;
另一方面,该共享文件索引结点中的链接计数count,用来指出共享本文件的引用数。
正常情况下这两个数据应该一致
数据块使用数组和空闲数组互补
文件执行
数据结构
用户打开文件表:每个进程一个,记录用户打开文件
系统文件打开表:整个系统一张:放在内存,用于保存已打开文件的FCB文件号、共享计数(打开共享)、读写位置、打开模式、修改标志等;指向内存inode(也有共享计数)
内存inode表:操作文件时要将磁盘inode加载到内存中;访问速度;共享控制(计数)
三张表之间的关系
文件共享
不同进程独立访问
同进程复制fd:dup() / dup2() / fcntl()
跨进程复制fd:fork()
fork()可以共享文件,但是fork()以后打开文件则不共享
文件操作
执行过程
create:实质是建立FCB,返回一个文件描述符
open:把FCB送到内存,创建用户、系统打开文件表项,建立与内存inode三者关联,返回文件描述符
close:缓存数据写回磁盘;清理用户文件打开表;清理系统文件打开表;清理内存inode表
虚拟文件系统 VFS
支持面向对象式的文件系统实现——多态
用户程序:统一接口
底层支持:不同文件系统
VFS接口:API,而非具体的文件系统实现