-
文件系统
- 在存储设备上组织文件的方法和数据结构
- 操作系统中负责管理和存储文件信息的模块
- 系统角度
- 对存储设备的空间进行组织和分配
- 负责文件检索、读写等操作
- 目标:存取速度和存储空间效率
- 用户角度
- 提供按名存取的文件访问机制
- 文件的组织管理
- 目标:方便的文件存取机制
-
文件系统的层次架构
- I/O控制
- 设备驱动程序
- 中断
- 设备驱动程序
- 控制I/O设备运行
- 向硬件控制器发送专门控制命令
- 操作系统通过设备驱动程序控制设备
- 基本文件系统
- 物理块读写
- 向设备驱动程序发送控制命令,例如read drive 1
- 文件组织模块
- 管理文件、逻辑块和物理块
- 把文件的逻辑地址转换为物理地址
- 管理空闲空间
- 为文件分配物理块
- 逻辑文件系统
- 管理文件系统中的元数据(除了文件数据外的所有结构数据)
- 文件按名存取
- 文件目录组织管理
- 把文件名转换为文件ID,文件句柄
- 管理FCB
- 存储保护
- I/O控制
-
文件系统实现
- 物理块:基本文件读写单位
- 分区:磁盘分割成若干个独立的空间个空间称为分区
- 两大类分区:主分区和扩展分区
- 主分区:能够安装操作系统的启动分区
- 扩展分区:不能直接使用,必须分成若干逻辑分区
- 卷:磁盘上的逻辑分区,建立在物理分区上
- 一般每个卷可以建立一个文件系统
- 两种文件系统
- 磁盘文件系统
- 内存文件系统
- 磁盘文件系统结构
- 引导控制块:包含了系统引导操作系统的各种信息,只有安装操作系统的分区才有
- 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
- Windows
-
物理块
- 读写存储设备的基本单文
- 文件读写操作时,以块为单位进行读写
- 如:程序需要读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