文件系统
概述
文件系统:一种用于持久性存储的系统抽象
- 在存储器上:组织、控制、导航、访问和检索数据
- 大多数计算机包含文件系统
文件:文件系统中一个单元的相关数据在操作系统中的抽象
文件系统功能
- 分配文件磁盘空间
管理文件块
管理空闲空间
分配算法
- 管理文件集合
定位文件及内容
命名:通过名字找到文件的接口
最常见:分层文件系统
文件系统类型
- 提供的便利及特征
保护:分层来保护数据安全
可靠性和持久性:保持文件的持久即使发生崩溃
- 文件和块
文件属性:名称、位置、大小、保护、创建者、创建时间、最近修改时间等
文件头
在存储数据中保存了每个文件的信息
保存文件的属性
跟踪那一块存储块属于逻辑上文件结构的那个偏移
文件描述符
- 文件使用模式
使用程序必须在使用之前打开文件
- 内核跟踪每个进程打开的文件
操作系统为每个进程维护一个打开文件表
一个打开的文件描述符是这个表中的索引
- 需要元数据来管理打开文件
文件指针:指向最近的一次读写位置,每个打开了这个文件的进程都是这个指针
文件打开计数:记录文件打开的次数 - 当最后一个进程关闭文件的时候才允许其从打开文件表中移除
文件磁盘位置:缓存数据访问信息
访问权限:每个程序访问模式信息
- 用户视图:持久的数据结构
- 系统访问接口
字节 的集合
系统不会关系你想存储在磁盘上的任何数据结构
- 操作系统内部视角
块的集合(块是逻辑转换单元,而扇区是物理转换单元)
块大小<>扇区大小:在unix中,块大小是4kb
用户怎么访问文件?在系统层面需要知道用户的访问模式
- 顺序访问:按照字节依次读取
几乎所有的访问都是这种方式
- 随机访问:从中间读写
不常用,但是仍然重要,例如虚拟内存支持文件:内存页存储在文件中
更加快速 - 不希望获取文件中间的内容的时候也必须先获取块内所有的字节
- 基于内筒访问:通过特征
许多系统不提供此种访问方式,相反,数据库是建立在索引内容的磁盘访问上实现的(需要高效的随机访问)
文件内部结构
- 无结构
单词、比特的队列
- 简单记录结构
列
固定长度
可变长度
- 复杂结构
格式化文档
可执行文件
其他
文件共享和访问控制
- 多用户系统中的文件共享是很必要的
- 访问控制
谁能够获得那些文件的哪些访问权限
访问模式:读、写、执行、删除、列举等
- 文件访问控制列表(ACL)
文件实体,权限
- Unix模式
用户|组|所有人, 读|写|可执行
用户ID识别用户,表明每个用户所允许的权限以及保护模式
组ID允许用户组成组,并指定了组访问权限
- 指定多用户/客户如何同时访问共享文件
和过程同步算法相似
因磁盘I/O网络延时而设计简单
- Unix文件系统语义
对打开文件的写入内容立即对其他打开同一文件的其他用户可见
共享文件指针允许多用户同时读取和写入文件
- 会话语义
写入内筒只有当文件关闭时可见
- 锁
一些操作系统和文件系统提供该功能
目录
- 文件以目录方式组织起来
- 目录是一类特殊的文件
每个目录都包含了一张表
- 目录和文件的树形结构
早期的文件系统时扁平的(只有一层目录)
- 层次名称空间
- 典型操作
搜索文件
创建文件
删除文件
枚举目录
重命名文件
在文件系统中遍历一个路径
- 操作系统应该只允许内核模式修改目录
确保映射完整性
应用程序能够读目录
- 文件名的线性列表,包含了指向数据块的指针
编程简单
执行耗时
- Hash表 - hash数据结构的线性表
减少目录搜索时间
碰撞 - 两个文件名的hash值相同
固定大小
一个文件系统需要先挂载才能被访问
一个未挂载的文件系统被挂载在挂载点上
文件别名
- 两个活多个文件管理同一个文件
- 硬链接:多个文件项指向一个文件
- 软连接:以快捷方式指向其他文件
- 通过存储真是文件的逻辑名来实现
- 如果删除了一个有别名的文件会如何
这个别名将成为悬空指针
- Backpointers 方案:
每个文件有一个包含多个backpointers的列表,所以删除所有的backpointers
backpointers使用菊花链管理
- 添加一个间接层:目录项数据结构
连接 - 已经存在文件的另外一个名字
连接处理 - 跟随指针来定位文件
文件系统的种类
- 磁盘文件系统
文件处处在数据存储设备商,如磁盘
FATNTFS ext2/3等
- 数据库文件系统
文件根据其特征是可被寻址的
如:WinFS
- 日志文件系统
记录文件系统的修改/事件
例如:journaling file system
- 网络/分布式文件系统
NFS SMB AFS GFS
分布式文件系统
文件可以通过网络被共享
文件位于远程服务器
客户算远程挂载服务器的文件系统
标准文件系统访问被转换成远程访问
标准的协议:NFS CIFS
分布式文件系统的问题
客户端和客户端上的用户辨别起来很复杂
NFS是不安全的
一致性问题
错误处理模式
- 特殊/虚拟文件系统
文件系统和磁盘调度(下):https://developer.aliyun.com/article/1459604