【操作系统】文件系统(十一)

1. 文件系统基本概念

文件系统:一种持久性存储的系统抽象。

  • 在存储器上:组织、控制、导航、访问和检索数据。
  • 大多数计算机系统包含文件系统。

文件:文件系统中一个单元的相关数据在操作系统中的抽象。


文件系统的功能

  • 分配文件磁盘空间
    • 管理文件块(哪一块属于哪一个文件)
    • 管理空闲空间(哪一块是空闲的)
    • 分配算法(策略)
  • 管理文件集合
    • 定位文件及其内容
    • 命名:通过名字找到文件的接口
    • 最常见:分层文件系统
    • 文件系统类型(组织文件的不同方式)
  • 提供的遍历及特征
    • 保护:分层来保护数据安全
    • 可靠性/持久性:保持文件的持久,即使发生崩溃、媒体错误、攻击等


文件属性

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

文件头

  • 在存储元数据中保存了每个文件的信息
  • 保存文件的属性
  • 跟踪哪一块存储块属于逻辑上文件结构的哪个偏移


需要元数据来管理打开文件:

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


用户视角:

  • 持久的数据结构

系统访问接口

  • 字节的集合
  • 系统不会去关心你想存储在磁盘上任何的数据结构

操作系统内部视角

  • 块的集合(块是逻辑转换单元,而扇区是物理转换单元)


目录

  • 文件是以目录的方式组织起来
  • 目录是一类特殊文件
    • 每个目录都包含了一张表<name,pointer to file header>
  • 目录和文件的树型结构
    • 早期的文件系统时扁平的(只有一层目录)
  • 层次命名空间


  • 典型操作
    • 搜索文件
    • 创建文件
    • 删除文件
    • 枚举目录
    • 重命名文件
    • 在文件系统中遍历一个路径
  • 操作系统应该只允许内核模式修改目录
    • 确保映射的完整性
    • 应用程序能够读目录(如ls)


路径的遍历

  • 名字解析:逻辑名字转换成物理资源(如文件)的过程
    • 在文件系统中:到实际文件的文件名(路径)
    • 遍历文件目录直到找到目标文件
  • 举例:解析"'/bin/ls"
    • 读取root的文件头(在磁盘固定位置)
    • 读取root的数据块:搜索"bin"项
    • 读取bin的文件头
    • 读取bin的数据块,搜索"ls"项
    • 读取ls的文件头
  • 当前工作目录
    • 每个进程都会指向一个文件目录用于解析文件名
    • 允许用户指定相对路径来替代绝对路径


文件系统的挂载

· 一 个 文 件 系 统 需 要 先 挂 载 犭 能 被 访 问 
· 一 个 未 挂 载 的 文 件 系 统 被 挂 载 在 挂 载 点 上 
挂 载 点 
床 挂 载 
文 件 糸 统

文件别名

· 两 个 或 个 文 件 名 关 联 同 一 个 文 件 
root 
list rado w7 
· 硬 链 接 : 另 个 文 件 顶 指 向 一 个 文 件 
/dict/count 
/spell/count 
/dict/w/list 
/dict/all 
/spell/words/list 
· 软 链 接 : 以 “ 快 捷 万 式 ” 指 向 其 他 文 件 
通 过 存 储 真 实 文 件 的 逻 辑 名 称 来 实 现

  • 如果删除一个有别名的文件会如何呢?
    • 这个别名将成为一个“悬空指针”
  • Backpointers方案
    • 每个文件有一个包含多个backpointers的列表,所以删除所有backpointers
    • Backpointers使用菊花链管理
  • 添加一个间接层:目录项数据结构
    • 链接--已存在文件的另外一个名字(指针)
    • 链接处理--跟随指针来定位文件


文件系统种类

  • 磁盘文件系统
    • 文件存储在数据存储设备上,如磁盘
    • 例如、FAT, NTGS, ext2/3, ISO9660等
  • 数据库文件系统
    • 文件根据其特征是可被寻址的
    • 例如:WinFS
  • 日志文件系统
    • 记录文件系统的修改/事件
    • 例如: journaling file system
  • 网络/分布式文件系统
    • 例如:NFS,SMB,AFS,GFS
  • 特殊/虚拟文件系统


2. 虚拟文件系统

· 分 层 结 构 
上 层 : 虚 拟 ( 逻 辑 ) 文 件 糸 统 
底 层 : 特 定 文 件 糸 统 模 块 
文 件 / 文 件 系 统 API 
虚 拟 文 件 系 统 层 
ext2 fat 
is09660 
Device I/O 
nfs 
smb 
Network I/O

目的

  • 对所有不同文件系统的抽象

功能

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


3. 文件分配

大多数文件都很小

  • 需要对小文件提供强力支持
  • 块空间不能太大

一些文件非常大

  • 必须支持大文件
  • 大文件访问需要相当高效

分配方式

  • 连续分配
  • 链式分配
  • 索引分配

指标

  • 高效:如存储利用(外部碎片)
  • 表现:如访问速度

(1) 连续分配

· 文 件 头 指 定 起 始 块 和 长 度 
· 位 置 / 分 配 策 路 
最 先 匹 配 , 最 佳 匹 配 , 
· 优 势 
龙 文 件 读 取 表 现 好 
龙 高 效 的 顺 序 和 随 机 访 问 
· 劣 势 
龙 碎 片 ! 
》 文 件 虐 长 问 题 
※ 预 分 配 ? 
※ 需 分 配 ?

(2) 链式分配

· 文 件 以 数 据 块 链 表 万 式 存 储 
· 文 件 头 包 含 了 到 第 一 块 和 最 后 一 块 的 指 针 
· 优 点 
· 缺 点 
》 创 建 、 虐 大 、 缩 小 很 容 易 
龙 不 呵 能 进 行 真 正 的 随 机 访 问 
龙 可 靠 性 
龙 没 有 碎 片 
※ 破 坏 一 个 链 然 后 “ · (3) 索引分配

· 为 每 个 文 件 创 建 一 个 名 为 索 引 数 据 块 的 非 数 据 数 据 块 
龙 到 文 件 据 块 的 指 针 列 表 
· 文 件 头 包 含 了 索 引 数 据 块 
· 优 点 
》 创 建 、 贈 大 、 缩 小 很 容 易 
龙 没 有 碎 片 
龙 支 持 直 接 访 问 
· 缺 点 
》 当 文 件 很 小 时 , 存 储 索 引 的 开 
》 如 何 处 理 大 文 件 ?


4. 空闲空间列表

  • 跟踪在存储中的所有未分配的数据块
  • 空闲空间列表存储在哪里?
  • 空闲空间列表的最佳数据结构是什么样的?

· 用 位 图 代 表 空 闲 数 据 块 列 表 : 
龙 1 1 1111111111111001110101011101111. , 
龙 如 果 i : 0 表 明 数 据 块 i 是 空 闲 , 反 之 则 已 分 配 
· 使 简 单 但 是 可 能 会 是 一 个 big vector: 
》 160GB disk 一 > 40M blocks 一 > 5MB worth of bits 
龙 然 而 , 如 果 空 闲 空 间 在 磁 盘 中 翊 匀 分 布 , 那 么 在 找 到 “ 0 ” 之 前 需 要 
扫 }än/r 
. n : 磁 盘 上 数 据 块 的 总 数 
. r : 空 闲 块 的 数 目








· 需 要 保 护 : 
指 向 空 闲 列 表 的 指 针 
位 图 
· 必 须 保 存 在 磁 盘 上 
. 在 内 蓿 和 磁 盘 拷 贝 可 能 有 所 不 同 
. 不 允 许 block [ 刀 在 内 存 中 的 状 态 为 bit 囝 = 1 而 在 磁 
盘 $bit[i] = 0 
龙 解 决 : 
· 在 磁 盘 上 设 置 bit [ 刀 
· 分 Eblock[iJ 
· 在 内 蓿 中 设 置 bit [ 刀


5. 多磁盘管理(RAID)

RAID部分参考:计算机组成原理(下)

posted @ 2021-12-28 10:34  no_forget  阅读(53)  评论(0编辑  收藏  举报