11.文件系统实现

  • 文件系统

    • 在存储设备上组织文件的方法和数据结构
    • 操作系统中负责管理和存储文件信息的模块
    • 系统角度
      • 对存储设备的空间进行组织和分配
      • 负责文件检索、读写等操作
      • 目标:存取速度和存储空间效率
    • 用户角度
      • 提供按名存取的文件访问机制
      • 文件的组织管理
      • 目标:方便的文件存取机制
  • 文件系统的层次架构

    • I/O控制
      • 设备驱动程序
      • 中断
    • 设备驱动程序
      • 控制I/O设备运行
      • 向硬件控制器发送专门控制命令
      • 操作系统通过设备驱动程序控制设备
    • 基本文件系统
      • 物理块读写
      • 向设备驱动程序发送控制命令,例如read drive 1
    • 文件组织模块
      • 管理文件、逻辑块和物理块
      • 把文件的逻辑地址转换为物理地址
      • 管理空闲空间
      • 为文件分配物理块
    • 逻辑文件系统
      • 管理文件系统中的元数据(除了文件数据外的所有结构数据)
      • 文件按名存取
      • 文件目录组织管理
      • 把文件名转换为文件ID,文件句柄
      • 管理FCB
      • 存储保护
  • 文件系统实现

    • 物理块:基本文件读写单位
    • 分区:磁盘分割成若干个独立的空间个空间称为分区
      • 两大类分区:主分区和扩展分区
      • 主分区:能够安装操作系统的启动分区
      • 扩展分区:不能直接使用,必须分成若干逻辑分区
    • 卷:磁盘上的逻辑分区,建立在物理分区上
      • 一般每个卷可以建立一个文件系统
    • 两种文件系统
      • 磁盘文件系统
      • 内存文件系统
    • 磁盘文件系统结构
      • 引导控制块:包含了系统引导操作系统的各种信息,只有安装操作系统的分区才有
        • UFS:引导块
        • NTFS:分区引导扇区
      • 分区控制块:包含分区信息
        • 总的块数、空闲块数、块大小等信息
        • UFS:超级块
        • NTFS:主控文件表
      • 目录和FCB
      • 用户文件
  • 磁盘文件系统

  • 内存文件系统

    • 包括:
      • 分区表:所有安装分区信息
      • 目录缓冲结构:保存最近访问的目录信息
      • 系统打开文件表
      • 进程打开文件表
    • 文件操作需要用到内存文件系统
    • 目的:通过缓冲技术提高文件系统性能、
  • 虚拟文件系统

    • 目的:
      • 支持多个文件系统
      • 把多个文件系统整合成一个目录结构
      • 为用户屏蔽各个文件系统的差异
    • 虚拟文件系统VFS:
      • 提供了一种面向对象的方法来实现文件系统
      • 为不同类型的文件系统提供了接入VFS的接口
      • 为用户提供了统一的系统调用接口
    • 文件系统接口
      • 统一的应用程序访问文件的接口
      • 如:open、close、read、write等
    • VFS接口
      • 为各类不同的文件系统定义VFS接口
      • 符合该接口的文件系统都可以接入VFS
  • 网络文件系统:NFS

    • 用于通过LAN(或WAN)访问远程文件系统的软件系统的实现或规范
    • 好处:节省存储空间,实现共享
  • CIFS

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

    • Windows
      • FAT(File Allocation Table)
      • NTFS( New Technology File System )
      • ReFS (Resilient File System)
    • Linux
      • Ext
    • Mac OS
      • HFS
    • CD
      • CDFS
  • 物理块

    • 读写存储设备的基本单文
      • 文件读写操作时,以块为单位进行读写
      • 如:程序需要读1个字节,则OS把包含该字节的一块读入
      • 好处:减少读写次数,提高效率
    • 存储设备的基本分配单位
      • 以物理块为单位为文件分配存储空间
    • 和内存的页面大小相对应
      • 页面大小:4KB
      • 物理块大小:4KB的倍数
  • 逻辑块

    • 逻辑块:在文件空间中的块
      • 大小和物理块一致
      • 一个逻辑块存储在一个物理块中
  • 存储空间分配方式

    • 连续分配
  • 链接分配

  • 索引分配

  • 物理块块号

    • 一维空间
    • 从0开始编号
    • 可以根据物理设备的特性进行转换
  • 连续分配

    • 每个文件在磁盘上占用一组连续的物理块
    • FCB仅需给出:
      • 起始块号
      • 长度
    • 地址映射
      • 逻辑地址LA:文件内相对地址(一维)
      • 物理地址(B,D):存在在物理块中的地址(二维)
      • 物理块大小:S
      • 物理地址:
        • 访问块号B = Q + 起始块号
        • 块内偏移D
    • 性能分析
      • 优点
        • 支持随机访问
        • 存取速度快
        • 适用一次性写入操作
      • 例子:文件中偏移位12321位置的数据(块大小为4KB)
        • Q= [ 12321 / 4KB ] = 3 R=33
        • 读入块号b = Q + 起始块 = 3 + 6 = 9
      • 缺点
        • 浪费空间(小空间无法分配)
        • 文件不能动态增长(文件A)
        • 不利于文件的插入和删除(需要移动数据)
    • 连续分配的改进
      • 改进的连续分配方案
      • 基于扩展的文件系统(局部连续)
        • 扩展是一组连续的磁盘块集合
        • 扩展在文件分配时被分配
        • 一个文件可能包含一个或多个扩展
        • 需要一个指向下一个扩展的指针
  • 链接分配

    • 离散物理块分配方式
      • 连接分配
      • 索引分配
    • 链接分配
      • 文件信息存放在若干个不连续物理块中
      • 文件的所有物理块通过指针链接成链表结构
    • 分类
      • 显示链接
      • 隐式链接
  • 隐式链接

    • 链表的指针隐藏在物理块中
    • 每个物理块中的指针指向下一个物理块
    • FCB给出文件首块地址
    • 文件结束于空指针
    • 每个物理块用于存放文件信息的空间变小
      • 减去指针占据的空间
      • 4KB物理块,指针4Bytes:4092Bytes
    • 地址映射
      • 逻辑地址LA:文件内相对地址(一维)
      • 物理地址(B,D):存在在物理块中的地址(二维)
      • 物理块大小:S 指针大小:P
      • 物理地址
        • 访问块号B = 链表中第Q项对应的物理块块号
        • 块内偏移D = D
    • 性能分析
      • 优点
        • 可以离散存放,提高磁盘的利用率
        • 可以动态扩充文件大小
        • 便于文件的插入和删除操作
      • 缺点
        • 无法实现随机访问,访问文件慢(访问第i块,需要把0-(i-1)块都读入)
        • 可靠性差
      • 优化方法:多块集合成组
  • 显示链接

    • 隐式链接的问题
      • 指针分散存放
      • 为了读到一个指针而读入整个物理块
    • 显示链接
      • 指针集中存放
      • 把所有指针存放在一张链接表
    • 大大提高了检索速度
      • 先访问链接表,再访问物理块
    • 链接表一般在文件系统装载时装入内存
    • 链接表大小
      • 表项16位:最大2^16 * 2Bytes = 128KB
      • 表项32位:最大2^32 * 4Bytes = 16GB
    • 不适合大容量磁盘
      • 如4TB磁盘,物理块4KB
      • 链接表大小=(4TB/4KB)*4Bytes = 4GB
  • 显示链接例子:FAT

    • FAT文件系统是微软最早在MS-DOS开始使用的文件系统
    • FAT(File Allocation Table)
      • FAT12
      • FAT16
      • FAT32
      • FAT64(exFAT)
  • FAT32

    • 两份FAT表
    • 每个簇(物理块)固定为4KB~32KB
    • FAT表的表项占据32位
    • FAT表最大表项2^32项
    • 单个文件不能大于4GB
    • FAT32管理的单个最大磁盘空间:4KB*2^32 = 2TB

索引分配

  • 解决隐式链接分配的指针分配在各个块里的问题,解决方案是分散的FAT,为每个文件弄一个索引表
  • 多级索引
    • 大文件无法用单级索引实现
    • 访问块号B = Q1块索引的Q2项 块内偏移 D = R2

空闲空间管理

  • 空闲表适用连续分配
    • 空闲链表的分配是从连表头摘下适当的空闲块,回收就是空闲块加入尾部。
    • 优点:不需专用块存放管理信息,缺点:增加I/O操作,得到连续空间难
  • 位示图:利用二进制一位bit来表示一个块的使用情况
    • 1:盘块空闲,0:盘块已分配
    • 位示图需要额外的空间 n=230 / 212 =2 18

你可能感兴趣的:(11.文件系统实现)