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