一、文件系统基本概念
1、文件定义与属性
文件:存储在外部存储设备上的信息集合,是操作系统管理信息的基本单位
2、文件属性
名称:用户可读的标识符
类型:指明文件格式
位置:指向存储设备的指针
大小、保护、时间戳等元数据
3、文件操作
基本操作:创建、删除、打开、关闭、读取、写入、定位
扩展操作:复制、重命名、追加、属性修改
文件描述符(File Descriptor):操作系统为打开文件维护的内部数据结构
二、文件访问方式
1、顺序访问
按记录顺序访问,支持向前/向后读取
磁带机是典型的顺序访问设备
2、直接访问/随机访问
可直接跳转到文件任意位置
磁盘支持直接访问
3、索引访问
通过索引表查找记录
适合数据库系统
三、目录结构
1、目录功能
组织文件,提供命名和定位机制
实现文件名到文件实体的映射
2、目录结构类型
单级目录:所有文件在同一目录下
两级目录:主文件目录 + 用户文件目录
树状目录:现代操作系统常用结构
图形目录:支持文件/目录多归属(快捷方式/硬链接)
3、路径表示
绝对路径:从根目录开始的完整路径
相对路径:从当前工作目录开始的路径
四、文件系统实现
1、磁盘结构
磁盘划分为:引导块、超级块、inode区、数据区
超级块:包含文件系统元数据(大小、空闲块信息等)
2、文件存储分配方法
连续分配:文件占据连续的磁盘块
优点:顺序访问速度快,支持直接访问
缺点:外部碎片,文件大小调整困难
链接分配:通过指针连接文件块
隐式链接:每个块包含下一块的指针
显式链接:文件分配表(FAT)集中存储链接信息
索引分配:每个文件有独立的索引块
支持直接访问,无外部碎片
可能有多级索引(UNIX inode结构)
3、空闲空间管理
位图法:每个磁盘块对应一个位(0空闲,1占用)
链表法:空闲块通过指针链接
分组法:结合位图和链表的优点
五、磁盘调度算法
1、调度目标
减少寻道时间,提高磁盘I/O效率
2、常见算法
FCFS:先来先服务,简单但效率低
SSTF:最短寻道时间优先,可能产生饥饿
SCAN:电梯算法,来回扫描服务
C-SCAN:单向扫描,返回时不服务
LOOK:到达请求边界即折返
C-LOOK:C-SCAN的LOOK版本
六、文件系统可靠性
1、备份策略
完全备份:定期备份所有数据
增量备份:只备份上次备份后的变化
差分备份:备份自上次完全备份后的变化
2、一致性检查
块一致性检查:检查空闲块与已分配块的一致性
文件系统检查工具:fsck(UNIX)、chkdsk(Windows)
3、日志文件系统
记录文件系统操作到日志,提高崩溃恢复能力
示例:ext3/ext4(Linux)、NTFS(Windows)
七、文件共享与保护
1、文件共享
多用户共享:通过访问控制列表或权限位
远程文件系统:NFS、SMB/CIFS
2、保护机制
访问类型:读、写、执行、追加、删除、列表
访问控制列表(ACL):为每个用户/组设置权限
权限位模式(UNIX):user-group-other各三位(rwx)
八、性能优化技术
1、缓冲区缓存
在内存中缓存频繁访问的磁盘块
2、页面缓存
将文件I/O与虚拟内存页面缓存统一管理
3、预读取
预测并提前读取可能需要的文件块
4、延迟写入
修改先在内存缓存,稍后批量写回磁盘
九、现代文件系统特性
1、虚拟文件系统(VFS)
提供统一的文件系统接口,支持多种底层文件系统
2、分布式文件系统
特点:透明性、并发控制、容错性
示例:NFS、AFS、Google文件系统
3、特殊文件系统
设备文件:/dev目录下的设备接口
/proc文件系统:内核和进程信息的运行时接口
重要概念对比
|
特性 |
连续分配 |
链接分配 |
索引分配 |
|
随机访问 |
支持,高效。由于文件数据在磁盘上连续存储,可通过起始块地址和块偏移量直接计算出目标块的物理地址,无需遍历中间块,因此随机访问速度快、效率高。 |
低效。链接分配中文件数据块通过指针链接,随机访问某个块时需要从第一个块开始依次遍历指针,直到找到目标块,随着文件长度增加,遍历时间增长,随机访问效率低。 |
支持,高效。索引分配通过索引块记录所有数据块的地址,随机访问时只需访问索引块,根据索引块中记录的目标块地址直接定位,无需遍历数据块,效率较高。 |
|
外部碎片 |
有。连续分配要求为文件分配连续的磁盘空间,随着文件的创建、删除和大小变化,磁盘中会产生大量难以利用的小空闲区域,即外部碎片,这些碎片无法被分配给需要较大连续空间的文件。 |
无。链接分配采用离散分配方式,文件数据块可以分散存储在磁盘的各个空闲区域,只需要每个数据块之间通过指针链接即可,不会产生外部碎片,能充分利用磁盘空间。 |
无。索引分配同样是离散分配,文件数据块可分布在磁盘的任意空闲位置,通过索引块管理数据块地址,磁盘空间的利用较为灵活,不会产生外部碎片。 |
|
文件增长 |
困难。连续分配下文件增长需要在原文件末尾有足够的连续空闲空间,如果末尾空间不足,可能需要将整个文件移动到有足够连续空间的新位置,操作复杂且耗时,因此文件增长困难。 |
容易。链接分配中文件增长时,只需找到一个空闲的数据块,将其链接到文件的末尾,并更新前一个数据块的指针即可,无需移动其他数据块,操作简单,文件增长容易。 |
容易。索引分配下文件增长时,只需找到空闲的数据块,将其地址记录到索引块中即可,如果索引块已满,可采用多级索引等方式扩展索引块,实现文件的轻松增长。 |
|
存储开销 |
无。连续分配仅需要记录文件的起始块地址和文件长度,不需要额外的存储空间来记录指针或索引信息,因此存储开销为无。 |
指针空间。链接分配中每个数据块(除最后一个)都需要存储指向下一个数据块的指针,这些指针会占用一定的存储空间,产生指针空间的存储开销,随着文件数据块数量的增加,指针空间开销也会相应增加。 |
索引块空间。索引分配需要为每个文件分配一个或多个索引块来存储数据块的地址,索引块本身会占用一定的磁盘空间,构成索引块空间的存储开销,文件越大或采用的索引级数越多,索引块空间开销可能越大。 |
十、总结
1、文件系统层次结构:用户接口 → 逻辑文件系统 → 文件组织模块 → 基本文件系统 → I/O控制
2、inode与FAT对比:inode集中存储文件元数据,FAT分散存储分配信息
3、软链接与硬链接区别:硬链接共享inode,软链接是独立的文件
4、磁盘调度算法选择:根据负载特征选择合适的调度策略
5、RAID级别:0-6各级别的特点与应用场景
1886

被折叠的 条评论
为什么被折叠?



