电子科技大学操作系统期末复习笔记(五):文件管理

目录

前言

文件管理:基础

基本概念

文件

文件系统

文件系统的实现模型

文件的组成

文件名

文件分类

文件结构

逻辑结构

物理结构

练习题 

文件管理:目录

文件控制块FCB

FCB:File Control Block

FCB信息

目录

基本概念

目录功能

目录基本操作

⭐FCB组织方法

⭐改进的FCB组织方法

目录的组织

路径

无环图目录

链接

通用图目录

文件管理:磁盘管理

空闲分区表

概念

特点 

空闲分区链表

概念

特点

位示图

成组块链接法

分配方法

释放方法

例题

文件一致性:盘块

链接数一致性检查

文件执行

数据结构

文件共享

文件操作

执行过程

虚拟文件系统 VFS


前言

设备管理模块已经更新,传送门:电子科技大学操作系统期末复习笔记(四):设备管理

本复习笔记基于电子科技大学计算机操作系统-教学大纲(2022)中的课程模块部分,分为五大章节,分别是:

  • CM1操作系统概念。操作系统基本功能、操作系统发展历史及趋势、操作系统主流架构、常见操作系统特点、操作系统安全机制。
  • CM2进程管理。进程概念、线程概念、进程生命周期、进程调度算法、进程同步互斥、进程间通信和死锁。
  • CM3内存管理。内存空间的概念、连续分配、离散分配(分页管理、分段管理、段页式管理)、虚拟存储管理和页面置换算法。
  • CM4设备管理。I/O 系统结构、缓冲管理、磁盘结构和磁盘调度算法。
  • CM5文件管理。文件系统的作用、逻辑结构、物理结构、目录、文件共享和文件系统的一致性。

本节是最后一部分,要点在CM5,大致内容如下:

第五章 文件管理(6 学时,多媒体课件结合板书面授)CM5
1、主要内容
文件和文件系统的概念,文件逻辑结构(堆文件、顺序文件、索引顺序文件、索引文件、HASH 文件),外存分配方法(连续分配、链接分配、索引分配),目录管理(一级目录、二级目录、多 级目录),文件存储空间的管理技术(位示图、空闲链表、索引)。文件系统性能的改善、数据一致性控制。
2、应达到的要求 记忆:文件系统性能的改善、数据一致性控制。
理解:文件系统的基本概念、目录管理、文件共享、文件保护的方法。
分析:文件逻辑结构、文件的物理结构、文件目录、外存空间的管理。

一共3个PPT,就分三大块:文件管理:基础、文件管理:目录、文件管理:磁盘管理。


文件管理:基础


基本概念

  • 文件

    • 一种具有符号名的、相关联元素的有序集合。
    • 用户按照信息的逻辑功能将关联存储单元组织成文件。
    • 文件是信息在磁盘上存储的基本逻辑单位。
    • 文件名:对相关联元素的Naming
  • 文件系统

  • 概念:
  • 对文件实施管理、控制与操作的一组软件。
    • 用户或应用程序访问文件的唯一方式
  • 目标与功能:
    • 保证文件中的数据有效
    • 减少或消除丢失或破坏数据的可能性
    • 从系统角度优化总吞吐量,从用户角度优化响应时间
    • 为各种类型的存储设备提供I/O支持,并提供统一接口
    • 统一管理文件的存储空间,实施存储空间的分配与回收
    • 实现文件的按名存取:文件名字空间 \leftrightarrow 存储空间
    • 实现文件信息共享,提供文件保护和保密措施
  • 用户观点
    • 实现“按名存取”功能
  • 操作系统观点
    • 文件目录怎样实现、管理存储空间、文件存储位置、磁盘实际运作方式(与设备管理的接口)
  • 文件系统的实现模型

    • 文件系统接口:命令、系统调用和图形窗口的文件系统访问功能。 
    • 逻辑功能层:根据接口层所发下的文件访问需求,通过相关的文件控制块、文件目录、文件分配表等,获取访问存储介质的物理参数。  
    • 物理驱动层 :将逻辑功能层所发下的命令转化为相应的驱动程序的动作,完成对文件物理存储设备的处理。
  • 文件的组成

    • 文件=元数据+文件内容
    • 元数据:文件名、内部标识(如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

索引结构

文件信息存放在若干不连续物理块中,每个文件关联一个索引表,记录块号

索引表就是磁盘块地址数组,第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,而非具体的文件系统实现

猜你喜欢

转载自blog.csdn.net/m0_59180666/article/details/129053557