zoukankan      html  css  js  c++  java
  • 操作系统-第十一章-文件系统的实现

    一、文件系统

    • 磁盘提供大多数的外存,以便维护文件系统
    • 文件系统提供高效和便捷的磁盘访问,以便允许轻松存储、定位、提取数据
    • 在存储设备上组织文件的方法和数据结构
    • 操作系统中负责管理存储文件信息的模块
    • 系统角度的
      • 对存储设备的空间进行组织和分配
      • 负责文件检索、读写等操作
      • 目标:存取速度和存储空间效率
    • 用户角度
      • 提供按名存取的文件访问机制
      • 文件的组织管理,如目录等
      • 目标:方便的文件存取机制

    1.文件系统结构

    • 文件系统本身通常由许多不同的层组成,文件系统具有层次架构
    • 每层设计利用更底层的功能,创建新的功能,以用于更高层服务
    • 当使用分层结构实现文件系统时,可最小化代码的重复
      • I/O控制的代码,有时还包括基本文件系统的代码,可以用于多个文件系统
    • 每个文件系统可以拥有自己的逻辑文件系统文件组织模块
    • 分层可能增加了操作系统开销,导致性能降低
    • I/O控制
      • 包括设备驱动程序(Device Drivers)和中断
      • 设备驱动程序:
        • 控制I/O设备运行
        • 向硬件控制器发送专门控制命令
        • 操作系统通过设备驱动程序控制设备进行文件的读写操作
        • 可以作为翻译器
        • 输入为高级命令
        • 输出由底层的、硬件特定的指令组成,硬件控制器利用这些指令来使I/O设备与系统其他部位相连
        • 设备驱动程序通常在I/O控制器的特定位置写入特定位格式,告诉控制器对设备的什么位置采取什么动作
    • 基本文件系统
      • 负责物理块读写
      • 每个物理块由磁盘的数字地址来标识
      • 向设备驱动程序发送控制命令控制设备控制器对存储设备(磁盘的物理块)进行读写操作
      • 管理内存缓冲区和保存各种文件系统、目录和数据块的缓存
        • 在进行磁盘块传输之前,分配一块缓冲区
        • 当缓冲区已满时,缓冲管理器必须找到更多缓冲内存或释放缓存空间,以便允许完成I/O请求
        • 缓存用于保存常用的文件系统元数据,以提高性能
    • 文件组织模块
      • 管理文件、逻辑块和物理块
      • 把文件的逻辑地址转换为物理地址,以供基本文件系统传输
      • 每个文件的逻辑块从0(或1)到N编号,而包含数据的物理块并不与逻辑号匹配,因此需要通过转换来定位块
      • 管理空闲空间
      • 为文件分配物理块
      • 可用空间管理器:以跟踪未分配的块并根据要求提供给文件组织模块
    • 逻辑文件系统
      • 管理文件系统中的元数据
        • 除了文件数据外的所有结构数据
      • 文件按名存取,根据给定文件名称为文件组织模块提供所需信息
      • 文件目录组织管理
      • 把文件名转换为文件ID,文件句柄
      • 管理FCB,通过文件控制块来维护文件结构
        • FBC:包含有关文件的信息,包括所有者、权限、文件内容的位置等
      • 存储保护

    2.文件系统实现

    • 为了创建新的文件,应用程序调用逻辑文件系统。逻辑文件系统知道目录结构的格式;它会分配一个新的FCB。(或者如果文件系统的实现在文件系统创建时已经创建了所有的FCB,则可从空闲的FCB集合中分配一个可用的FCB)然后,系统将相应的目录读到内存,使用新的文件名和FCB进行更新,并将它写回到磁盘
    2-1.基本概念
    • 物理块):一个或多个(2n)扇区组成,基本文件读写单位
    • 物理分区Partition):磁盘分割成若干个独立的空间,每个空间称为分区
      • 两大类分区:主分区扩展分区
      • 主分区:能够安装操作系统的启动分区
      • 扩展分区:不能直接使用,必须分成若干逻辑分区
    • (逻辑磁盘)(Volume):磁盘上的逻辑分区,建立在物理分区上
      • 一般每个卷可以建立一个文件系统:
    • 典型文件系统

    2-2.两种文件系统
    • 文件系统的实现需要采用多个磁盘和内存的结构
    • 磁盘文件系统内存文件系统
    • 磁盘文件系统
      • 可能包含的信息:如何启动存储在那里的操作系统、总的块数、空闲块的数量和位置、目录结构以及各个具体文件等
      • 引导控制块:包含了系统引导操作系统的各种信息,只有安装操作系统的分区才会有引导控制块
        • UFS:引导块(Boot block)
        • NTFS:分区引导扇区(Partition boot sector)
      • 分区控制块(卷控制块):包含分区(卷)信息
        • 总的块数、空闲块数、块大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等信息
        • UFS:超级块(superblock)
        • NTFS:主控文件表(master file table)
      • 目录结构
        • 用于组织文件
        • 在UFS中,包含文件名和相关的inode的号码
        • 在NTFS中,存储在主控文件表中
      • FCB
        • 包含该文件的许多详细信息
        • 有一个唯一的标识号,以便与目录条目相关联
        • 在NTFS中,这些信息实际上存储在主控文件表中,它使用关系数据库结构,每个文件独占一行
      • 用户文件
      • 磁盘结构
    • 内存文件系统
      • 内存中的信息用于管理文件系统并通过缓存来提高性能
        • 这些数据在安装文件系统时被加载,在文件系统操作期间被更新
        • 在卸载时被丢弃
      • 包含:
        • 分区表:所有安装分区信息
        • 目录缓冲结构:保存最近访问的目录信息
        • 系统打开文件表:包括每个打开文件的FCB的副本以及其他信息
        • 进程打开文件表:包括一个指向整个系统的打开文件表中的适当条目的指针,以及其他信息
      • 文件操作需要用到内存文件系统
      • 目的:通过缓冲技术提高文件系统性能
      • 引入内存文件系统的目的是为了节省外存空间
      • 内存中文件系统结构

    2-3.虚拟文件系统(Virtual File System)
    • 目的
      • 为了支持多个文件系统,引入虚拟文件系统VFS
      • 把多个文件系统整合成一个目录结构
      • 为用户屏蔽各个文件系统的差异
      • 虚拟文件系统可以把多个文件系统整合成一个目录结构,为用户屏蔽各个文件系统的差异
    • 虚拟文件系统(VFS):
      • 提供了一种面向对象的方法来实现文件系统
      • 为不同类型的文件系统提供了接入VFS的接口
      • 为用户提供了统一的系统调用接口(API)
    • 文件系统接口(File system interface):
      • 统一的应用程序访问文件的接口
      • 各个文件系统提供给应用程序的接口可能不同,如:open、openfile、openf、open_file等
    • VFS接口(VFS interface):
      • 为各类不同的文件系统定义VFS接口
      • 符合该接口的文件系统都可以接入VFS
    • 示意图

    2-4.网络文件系统(NFS)
    • 网络文件系统(NFS,Network File System):用于通过LAN(或WAN)访问远程文件系统的软件系统的实现或规范
    • 好处:节省存储空间,实现共享


    2-5.CIFS
    • 通用Internet文件系统(Common Internet File System):在Windows主机之间进行网络文件共享
    • CIFS使用客户/服务器模式


    2-6.常用文件系统
    • Windows
      • FAT(File Allocation Table)
      • NTFS(New Technology File System)
      • ReFS(Resilient File System)
    • Linux
      • Ext(Ext2、Ext3、Ext4)
    • Mac OS
      • HFS(Hierarchical File System)
    • CD
      • CDFS

    二、分配方法

    1.基本概念

    1-1.物理块
    • 读写存储设备的基本单位
      • 文件读写操作时,以块为单位进行读写
      • 好处:减少读写次数,提高访问效率
    • 存储设备的基本分配单位
      • 以物理块为单位为文件分配存储空间
    • 和内存的页面大小相对应
      • 页面大小:4KB
      • 物理块大小:4KB的倍数

    1-2.逻辑块
    • 在文件空间中的块
    • 编号从0开始
    • 大小和物理块一致
    • 一个逻辑块存储在一个物理块中


    1-3.存储空间分配方式
    • 连续存储空间:连续存储空间分配,和内存的连续分配相似,是指一个 文件在磁盘上存储在连续的物理块中
      • 连续分配
    • 离散存储空间:离散存储空间分配,是指一个文件的物理块可以分布在 磁盘的各处,类似于内存分配中的分页和分段
      • 链接分配
      • 索引分配
    • 物理块块号
      • 一维空间
      • 从0开始编号
      • 可以根据物理设备的特性进行转换

    2.连续分配

    2-1.基本概念
    • 连续分配问题可以作为通用动态存储分配问题的一个具体应用
      • 从一组空闲孔中寻找一个空闲孔的最为常用的策略是:首次适合最优适合
    • 每个文件在磁盘上占用一组连续的物理块
    • FCB仅需给出:
      • 起始块号
      • 长度
    • 例:

    2-2.地址映射
    • 逻辑地址LA:文件内相对地址(一维)
    • 物理地址(B,D):存在在物理块中的地址(二维)
    • 物理块大小S


    2-3.性能分析
    • 优点
      • 支持顺序访问
      • 支持随机访问(可直接访问指定块号的物理块)
      • 存取速度快(上一个块到下一个块移动距离短)
      • 适用一次性写入操作
      • 例:
    • 缺点
      • 存在外部碎片
      • 预分配可能产生内部碎片(文件增长缓慢)
      • 难以确定一个文件需要多少空间
      • 浪费空间(小空间无法分配)
      • 文件不能动态增长(文件A)
      • 不利于文件的插入和删除(需要移动数据)
      • 例:

    2-4.连续分配的改进
    • 改进的连续分配方案(Veritas File System)
    • 基于扩展的文件系统(局部连续)
      • 扩展是一组连续的磁盘块集合
      • 扩展在文件分配时被分配
      • 一个文件可能包含一个或多个扩展
      • 需要一个指向下一个扩展的指针
      • 文件块的位置记录:地址、块数、下一扩展的首块的指针

    3.链接分配

    3-1.基本概念
    • 链接分配
      • 文件信息存放在若干个不连续物理块中
      • 文件的所有物理块通过指针链接成链表结构
      • 用户不能使用这些指针,在计算大小时要减去指针的大小
    • 分类
      • 显式链接
      • 隐式链接

    3-2.隐式链接-基本概念
    • 链表的指针隐藏在物理块中
    • 每个物理块中的指针指向下一个物理块
    • FCB给出文件首块地址
    • 文件结束于空指针
    • 每个物理块用于存放文件信息的空间变小
      • 减去指针占据的空间
      • 4KB物理块,指针4Bytes:4092Bytes
    • 例:

    3-3.隐式链接-地址映射
    • 逻辑地址LA:文件内相对地址(一维)
    • 物理地址(B,D):存在在物理块中的地址(二维)
    • 物理块大小S
    • 指针大小P


    3-4.隐式链接-性能分析
    • 优点
      • 没有外碎片,无需合并磁盘空间
      • 可以离散存放,提高磁盘的利用率
      • 可以动态扩充文件大小
      • 便于文件的插入和删除操作
    • 缺点
      • 只能有效用于顺序访问文件
      • 无法实现随机访问,访问文件慢,访问第i块,需要把0-(i-1)块都读入
      • 指针需要存储空间
      • 指针分散存放
      • 可靠性差
        • 解决方法:①双向链表②每块存储文件名称和相对块号(这些方案都为文件增加了额外开销)
    • 优化方法:多块集合成组(簇),按簇而不是按块来分配

    3-5.显示链接-基本概念
    • 指针集中存放
    • 把所有指针存放在一张链接表中
      • 每个卷的开头部分的磁盘用于存储该表
      • 在该表中,每个磁盘块都有一个条目,并可按块号来索引
    • 大大提高了检索速度
      • 先访问链接表,再访问物理块
    • 链接表一般在文件系统装载时装入内存
    • 链接表大小
      • 表项16位:最大216*2Bytes=128KB
      • 表项32位:最大232*4Bytes=16GB
    • 不适合大容量磁盘
      • 如4TB磁盘,物理块4KB
      • 链接表大小=(4TB/4KB)*4Bytes=4GB
    • 例:
      • FAT
      • FAT32

    4.索引分配

    4-1.基本概念
    • 每个文件一张文件分配表,即索引表
      • 磁盘地址块的数组
      • 索引块的第i个条目指向文件的第i个块
      • 目录包含索引块的地址
      • 当查找和读取第i个块时,采用第i个索引块条目的指针
      • 磁盘访问的次数:索引块访问次数+文件块的访问次数
    • 索引块:存放指向文件每个物理块块号的物理块
    • 索引块中的第i个项:存放第i个逻辑块对应的物理块块号
    • FCB指向索引块
    • 例:

    4-2.地址映射
    • 逻辑地址LA:文件内相对地址(一维)
    • 物理地址(B,D):存在在物理块中的地址(二维)
    • 物理块大小S


    4-3.索引分配性能
    • 优点
      • 支持随机访问(先访问索引块,然后访问具体的物理块)
      • 离散存放,没有碎片
    • 缺点
      • 需要额外空间存放索引表
      • 磁盘访问时间增加(物理块分布在磁盘各地)

    4-4.索引分配-链接策略
    • 一个索引块通常为一个磁盘块
      • 本身支持直接读写
    • 可以通过将多个索引块链接起来来支持大文件
    • 把索引块通过链表组织(没有长度限制)
      • 访问块号B=索引表中第Q1块索引块中第Q2项存放的块号
      • 块内偏移D=R2
      • 指针大小P
    • 缺点:可能需要读入多个索引块

    4-5.索引分配-多级索引
    • 比较适合大文件
    • 磁盘访问的次数:索引块访问次数+文件块的访问次数
    • 大文件无法用单级索引实现
      • 物理块大小S=4KB
      • 表项大小:4个字节(最多232块)
      • 每个物理块存放的块号数目:4K/4=1K个
      • 单级目录最大文:1K*4KB=4MB
      • 大于4MB的文件如何存放?⇨多级索引
    • 二级索引
      • 把索引块通过再次索引的模式组织(有长度限制)
      • 二级索引
        • 外层索引表(一个物理块)
        • 内层索引表(物理块数目=外层索引表的项数)
    • 二级索引地址映射
      • 访问块号B=外层索引表中第Q1项中存放的块号对应的内层索引块中第Q2项存放的块号
      • 块内偏移D=R2
    • 索引和文件大小

    4-6.联合策略:UNIX(每块4KB)
    • 多种索引混合
    • 将索引块的前几个指针存在文件的inode中
      • 这些指针的前12个指向直接块,即包含存储文件数据的块的地址
      • 接下来的3个指针(13、14、15)指向间接块,分别对应一级间接块二级间接块三级间接块
    • 0级索引:
      • FCB中12个指针指向文件开头的12个逻辑块
    • 一级索引:
      • 1K项,对应1K个物理块,总大小为4MB
    • 二级索引:
      • 1M块,容量为4GB
    • 三级索引:
      • 1G块,容量为4TB


    5.性能

    • 好的分配方法依赖于访问类型
    • 连续分配可用于随机或顺序访问,效率高
    • 链接分配适合顺序访问,不适合随机访问
    • 在文件创建时根据访问类型选择链接还是连续
    • 索引分配更加复杂
      • 依赖于索引结构、文件大小、块大小
    • 增加磁盘I/O速度是提高性能的一个因素

    三、空闲空间管理

    1.基本概念

    • 文件系统不仅需要记录下磁盘上还没有分配出去的空闲物理块,还需要为新文件分配物理块和回收被删除文件的物理块,所以文件系统需要包含空闲空间管理模块
    • 把不连续的空闲块集合在一起
    • 有利于给文件分配连续的物理块

    2.空闲空间管理方法

    2-1.空闲表
    • 空闲区:连续的未分配物理块集合
    • 空闲表
      • 每个表项对应一个空闲区
      • 内容:空闲区的第一块号、空闲块的块数
      • 条目可以存储在平衡树而不是链表中,以便于高效查找、插入和删除
    • 空闲表适用连续分配
    • 分配和回收方式:和内存的连续分配类似
    • 缺点:需要额外空间来存放空闲表
    • 例:

    2-2.空闲链表
    • 将磁盘上所有空闲块链接在一个链表中
    • 分配:从链表头依次摘下适当数目的空闲块
    • 回收:空闲块加入链表尾部
    • 优点:不需专用块存放管理信息,不浪费空间
    • 缺点:增加I/O操作,得到连续空间难
    • 例:

    2-3.位示图
    • 利用二进制一位(bit)来表示一个块的使用情况
      • 1:盘块空闲
      • 0:盘块已分配
    • 所有块都有一个二进制位与之对应
    • 所有块对应的位形成位示图
    • 位示图存放在物理块中
    • 分配:1⇨0      回收:0⇨1
    • 比较容易得到连续物理块
    • 在查找磁盘上的第1个空闲块和第n个连续的空闲块时相对简单和高效
    • 块号计算
      • 例:

    2-4.成组链接
    • 结合了空闲表和空闲链表
    • 例:
    • 从头分配,从头回收
    • 分配:从前往后分配,从第一组开始分配,分完再分下组
    • 回收
      • 先将释放的空闲块放到第一组
      • 满100块后,在第一组前再开辟一组
      • 原来的第一组变成第二组,新组为第一组

    四、一致性检查

    • 一致性检查程序:比较目录结构的数据和磁盘的数据块,并且试图修复发现的不一致。分配和空闲空间管理的算法**决定了检查程序能够发现什么类型的问题,及其如何成功修复问题
    • 每个文件的目录或FCB中会记录这个文件分配到的物理块信息,位示图同样会记录每个物理块是否被使用,这两者应该是一致的
    • 即文件系统中所有的物理块减去文件用掉的,剩余的都是空闲块。但是有 时不是这样,存不一致性
    • 所以,文件系统提供了一致性检查,将目录结构数据与磁盘空闲块结构相 比较,纠正发现的不一致
      • 空闲块在某个文件的物理块中(A)
      • 非空闲块不属于任意一个文件(B)
      • 一个物理块属于多个文件(C)


  • 相关阅读:
    consul服务注册于发现
    zookeeper注册服务中心
    Eureka自我保护机制
    发现服务
    修改主机名
    Eureka集群原理与搭建
    Eureka服务注册中心
    微服务简单规划
    开启多服务一键启动 run DashBoad,重启idea
    手撕代码:判断二进制串除以3的余数
  • 原文地址:https://www.cnblogs.com/fangzhiyou/p/14122162.html
Copyright © 2011-2022 走看看