第十二章 文件系统

一、基本概念

1. 文件系统和文件

概念

  • 文件系统是操作系统中管理持久性数据的子系统,是一种持久性存储的系统抽象,提供数据存储和访问功能;
  • 文件是文件系统中一个单元的相关数据在操作系统中的抽象,是具有符号名,由字节序列构成的数据项集合。

文件系统的作用

  • 分配文件磁盘空间;
  • 管理文件集合;
  • 提供文件保护,可靠性。

2. 文件和块

文件属性

名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间、…

文件头

文件系统元数据中的文件信息。

3. 文件描述符

文件打开模式

  • 进程访问文件数据前必须先“打开”文件
  • 操作系统为每个进程维护一个打开文件表
  • 文件描述符是打开文件的标识

管理打开文件的元数据

  • 文件指针:指向最近一次读写位置,每个打开了这个文件的进程都有这个指针;
  • 文件打开计数:记录文件打开的次数,当最后一个进程关闭了文件时,允许将其从打开文件表中移除;
  • 文件磁盘位置:缓存数据访问信息;
  • 访问权限:每个进程的访问权限信息

用户视图到系统视图的转换

  • 进程读文件:获取字节所在的数据块,返回数据块内对应部分;
  • 进程写文件:获取数据块,修改数据块中相应的部分,再写回数据块。

访问模式

  • 顺序访问:按字节依次读取;
  • 随机访问
  • 索引访问

文件内部结构

  • 无结构:单词、比特的队列
  • 简单记录结构
  • 复杂结构

Unix 模式访问控制

<用户|组|所有人, 读|写|可执行>

语义一致性

规定多进程如何同时访问共享文件,以文件不同的块形成锁,可以更加高效。

4. 目录

目录

目录是一类特殊的文件,它的内容是文件索引表<文件名, 指向文件的指针>。

典型操作

  • 搜索文件
  • 创建文件
  • 删除文件
  • 枚举目录
  • 重命名文件
  • 在文件系统中遍历一个路径

操作系统应该只允许内核修改目录

  • 确保映射的完整性
  • 应用程序通过系统调用访问目录

目录实现

  • 目录线性列表
  • 哈希表

路径遍历

  • 名字解析:逻辑名字转换成物理资源的过程;
  • 当前工作目录:每个进程都会指向一个文件目录用于解析文件名,允许用户指定相对路径来代替绝对路径。

挂载

文件系统需要先挂载才能被访问。

5. 文件别名

  • 两个或多个文件名关联同一个文件;
  • 硬链接:多个文件项指向一个文件;
  • 软链接:以快捷方式指向其他文件;
  • 通过存储真实文件的逻辑名称来实现。

6. 文件系统的类别

  • 磁盘文件系统
  • 数据库文件系统
  • 日志文件系统
  • 网络/分布式文件系统
  • 特殊/虚拟文件系统

二、虚拟文件系统

1. 分层结构

  • 上层:虚拟文件系统
  • 底层:特定文件系统模块

2. 虚拟文件系统的功能

  • 对不同文件系统的抽象;
  • 提供相同的文件和文件系统接口;
  • 管理所有文件和文件系统关联的数据结构;
  • 高效查询例程,遍历文件系统;
  • 与特定文件系统模块的交互。

3. 文件系统基本数据结构

  • 卷控制块(superblock)
  • 文件控制块(inode)
  • 目录节点(dentry)

三、数据缓存

1. 数据块缓存

![[Pasted image 20220820124557.png]]

2. 页缓存

![[Pasted image 20220820124623.png]]

四、打开文件的数据结构

1. 文件描述符

  • 每个被打开的文件都有一个文件描述符;
  • 文件状态信息:目录项、当前文件指针、文件操作设置等。

2. 打开文件表

  • 每个进程一个进程打开文件表;
  • 一个系统级的打开文件表;
  • 有文件被打开时,文件卷就不能被卸载。

五、文件分配

1. 连续分配

  • 文件头指定起始块和长度;
  • 位置分配策略:最先匹配,最佳匹配…
  • 优势:文件读取表现好,高效的顺序和随机访问;
  • 劣势:碎片,文件增长问题。

2. 链式分配

  • 文件以数据块链表方式存储;
  • 文件头包含了到第一块和最后一块的指针;
  • 优点:创建、增大、缩小很容易,没有碎片;
  • 劣势:不可能进行真正的随机访问,可靠性。

3. 索引分配

  • 为每个文件创建一个名为索引数据块的非数据数据块;
  • 文件头包含索引数据块;
  • 优点:创建、增大、缩小很容易,没有碎片,直接访问;
  • 缺点:当文件很小时,存储索引的开销大;大文件,多级索引。

六、空闲空间列表

  • 位图
  • 链式列表
  • 分组列表

七、多磁盘管理

  • RAID-0:磁盘条带化,把数据块分成多个字块,存储在独立的磁盘中;
  • RAID-1:磁盘镜像,向两个磁盘写入,从任何一个读取;
  • RAID-4:带校验的磁盘条带化;
  • RAID-5:带分布式校验的磁盘条带化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值