【系统架构设计师】操作系统 - 文件管理 ① ( 索引文件结构 | 直接索引方式 | 间接索引方式 | 一级间接索引方式 | 二级间接索引方式 | 三级间接索引方式 )





一、索引文件结构 简介




1、索引文件结构 原理


索引文件结构 是一种 高效的 文件存储管理方式 , 通过引入 索引表 实现对 文件数据块快速定位随机访问 ;

索引文件结构 解决了 文件数据 顺序存储 和 链式存储随机访问效率低、扩展性差 等 局限性 , 现代的 文件系统 都是 基于 索引文件结构 进行设计的 ;


索引文件结构 设计思想 :每个文件 分配 一个 独立的 索引块 , 索引块中 直接 或 间接 存储 该文件 所有数据块的 物理地址 ;

  • 数据访问 方式 : 文件访问时 , 先 通过索引块找到 目标数据块 的 物理位置 , 再直接 访问数据 ;
  • 支持 随机访问 ( 文件访问 ) : 通过 索引表 快速定位 数据块 ;
  • 支持 动态扩展 ( 文件写出 ) : 灵活分配 数据块 ;

2、索引文件结构 关键部件


索引文件结构 关键部件 :

  • 文件控制块 : 包含 文件元数据 , 如 : 大小、权限等 , 并指向 索引块 ;
  • 索引块 : 存储文件 所有 数据块 的 物理地址 / 指针 / 物理块号 ;
  • 数据块 : 实际 存储 文件数据内容 的 物理块 ;

3、索引结构的操作流程


文件读取 操作流程 : 该过程 就是 随机访问 操作 ;

  • 路径访问 : 用户通过 逻辑路径 访问文件 ;
  • 查找控制块 : 操作系统 查找 inode 文件控制块 ;
  • 计算块号 : 根据 逻辑偏移量 计算 目标数据块号 , 逻辑偏移量 / 块大小 = 数据块号。
  • 查询索引 : 查询 索引块 , 找到对应的 物理地址 ;
  • 访问数据 : 直接访问 目标数据块。

文件写出 操作流程 : 该过程 就是 动态扩展 操作 ;

  • 查找空闲数据块 : 查找 空闲数据块 并 分配 给文件 ;
  • 更新直接索引 / 间接索引 : 更新索引块 ,
    • 直接索引 : 如果 直接索引块 块没用完 , 直接添加新数据块的 物理地址 作为直接索引 ;
    • 间接索引 : 如果 直接索引块 已满 , 分配新的 间接索引块 并 更新上级索引 ;




二、索引方式 简介




1、索引结点


在 LINUX / UNIX 系统中 , 每个 文件 默认有 13 个索引结点 , 结点编号是 0 ~ 12 , 每个编号中放置的就是 索引地址 , 索引地址 存储的是 物理块号 , 指向 具体的 物理盘块 ;

在这里插入图片描述


2、直接索引 和 间接索引


直接索引 : 又称为 单级索引 , 索引块 直接存储 所有 数据块 的 物理地址 ( 物理块号 ) ;

  • 适用场景 : 小文件 存储 , 如 : 文本文件、配置文件 ;
  • 优点 : 访问速度快 , 只需一次索引查询 , 实现简单 ;
  • 缺点 : 索引块大小固定,无法支持大文件 , 若文件需要的数据块数超过索引块容量,则需其他机制扩展 ;

间接索引 : 又称为 多级索引 , 通过 多级索引块 间接定位数据块 , 支持大文件存储 ;

  • 优点 : 支持超大文件 , 扩展性强 , 平衡存储效率和访问速度 ;
  • 缺点 : 多级索引需要多次磁盘访问 , 如二级索引需访问索引块两次 ;

3、直接索引方式


直接索引方式 : 13 个 索引结点 中 , 前 10 个索引结点 , 对应的 节点编号是 0 ~ 9 , 这 10 个索引结点都是 " 直接索引 " , 直接索引 就是 索引地址 直接指向 物理块 , 这些物理块中存放的就是 文件数据 ;

每个 直接索引 指向一个 物理块 ( 存放文件数据 ) ;


直接索引方式 不经过地址跳转 , 直接就可以找到 文件数据 ;

0 ~ 9 号索引结点 ( 直接索引表 ) -> 文件数据


参考下图红色矩形框部分 :

在这里插入图片描述


4、一级间接索引方式


一级间接索引方式 : 第 10 号 索引结点 的 索引方式 是 " 一级间接索引方式 " , 该索引结点 指向 的 物理块中 存放的是 一级地址索引表 , 包含 n 个 直接索引 ;

每个 10 号索引结点 指向一个 物理块 ( 存放 一级间接索引表 ) , 存放 直接索引地址;


一级间接索引方式 经过 1 次 地址跳转 可以找到 文件数据 ;


10 号索引结点 -> 一级间接索引表 -> 文件数据


参考下图红色矩形框部分 :
在这里插入图片描述


5、二级间接索引方式


二级间接索引方式 : 第 11 号 索引结点 的索引方式是 " 二级间接索引方式 " , 该索引结点 指向 的 物理块中 存放的是 n 个 一级间接索引 ;

每个 11 号索引结点存储的 索引 指向一个 物理块 , 存放 二级间接索引表 ,

每个 二级简介索引表 存放的是 n 个 一级间接索引表 的 索引地址 ;

每个 一级间接索引表 有 n 个 直接地址 , 直接地址 指向一个 物理块 ( 存放文件数据 ) ;


二级间接索引方式 经过 2 次地址跳转 可以找到 文件数据 ;


11 号索引结点 -> 二级间接索引表 -> 一级间接索引表 -> 文件数据


参考下图红色矩形框部分 :
在这里插入图片描述


6、三级间接索引方式


三级间接索引方式 :

第 12 号 索引结点 的索引方式是 " 三级间接索引方式 " , 该索引结点 指向 的 物理块中 存放的是 三级间接索引表 , 对应 n 个 二级间接索引表 ;

每个 二级间接索引表 指向一个 物理块 ( 存放 一级间接索引表 ) , 存放的是 n 个 一级间接索引 ,

每个 一级间接索引 指向一个 物理块 ( 存放直接索引 ) , 存放 n 个 直接索引 ,

每个 直接索引 指向一个 物理块 ( 存放文件数据 ) ;


三级间接索引方式方式 经过 3 次地址跳转 可以找到 文件数据 ;


12 号索引结点 -> 三级间接索引表 -> 二级间接索引表 -> 一级间接索引表 -> 文件数据

在这里插入图片描述





三、软考考点




1、不同索引方式指向对象


不同的索引方式 , 指向 的对象 是不同的 , 索引指向对象分为以下两类 :

  • 数据块 : 0 ~ 9 号 直接索引 指向 数据块 ;
  • 索引表 :
    • 10 号索引结点 指向 一级间接索引表 ;
    • 11 号索引结点 指向 二级间接索引表 ;
    • 12 号索引结点 指向 三级间接索引表 ;

在 索引结点表 / 一级间接索引表 ( 直接索引表 ) / 二级间接索引表 / 三级间接索引表 都可以理解成一个 数组元素 ,

上述 数组元素 存储的内容是 物理块号 , 可以理解成 地址 或 指针 , 根据这个 物理块号 / 地址 / 指针 可以找到一个 物理块 , 这个物理块中存放 数据块 或 索引表 ;

如下图所示 : 在 索引结点 或者 间接索引表 中 存储的都是 物理块号 ;

  • 在 第 0 号 索引结点 存储的是 108 , 指向 物理块号为 108 的 物理块 ;
    在这里插入图片描述

2、不同索引方式访问磁盘次数分析


不同索引方式访问磁盘次数分析 :

  • 直接索引 : 只需要 访问 一次 数据盘 , 直接查看磁盘中的数据即可 ;
  • 一级间接索引 : 访问 1 次索引盘 , 1 次数据盘 , 总共访问 2 次磁盘 ;
    • ① 第一次访问磁盘 : 访问 索引盘 ( 一级间接索引表 ) , 从 一级间接索引表 中 找到 直接索引 ;
    • ② 第二次访问磁盘 : 访问 直接索引 指向的 物理块 ;
  • 二级简介索引 : 访问 2 次索引盘 , 1 次数据盘 , 总共访问 3 次磁盘 ;
    • ① 第一次访问磁盘 : 访问 索引盘 ( 二级间接索引表 ) , 从 二级间接索引表 中 找到 一级间接索引表 所在的 物理块 ;
    • ② 第二次访问磁盘 : 访问 索引盘 ( 一级间接索引表 ) , 从 一级间接索引表 中 找到 直接索引 ;
    • ③ 第三次访问磁盘 : 访问 直接索引 指向的 物理块 ;
  • 三级简介索引 : 访问 3 次索引盘 , 1 次数据盘 , 总共访问 4 次磁盘 ;
    • ① 第一次访问磁盘 : 访问 索引盘 ( 三级间接索引表 ) , 从 三级间接索引表 中 找到 二级间接索引表 所在的 物理块 ;
    • ② 第二次访问磁盘 : 访问 索引盘 ( 二级间接索引表 ) , 从 二级间接索引表 中 找到 一级间接索引表 所在的 物理块 ;
    • ③ 第三次访问磁盘 : 访问 索引盘 ( 一级间接索引表 ) , 从 一级间接索引表 中 找到 直接索引 ;
    • ④ 第四次访问磁盘 : 访问 直接索引 指向的 物理块 ;

3、文件逻辑位置计算


文件数据 在 逻辑位置 上是连续的 , 在 物理位置 上可以是分散的 ;

下图 红色矩形框 中 , 就是 文件的逻辑位置 ;

在这里插入图片描述


① 连续 逻辑位置


连续 逻辑位置 的理解 :

0 ~ 9 号 索引结点 分别指向 文件的前 10 个物理块 , 对应文件的 逻辑上的 序号为 0 ~ 9 的 10 个物理块 ;

第 10 号 索引结点 指向 一级间接索引表 , 其中有 n 个 直接索引 , 每个直接索引指向一个物理块存储文件数据 , 对应 文件的 逻辑上的 序号为 10 ~ n + 9 的 n 个物理块 ;

第 11 号 索引结点 指向 二级简介索引表 , 其中对应 n 个 一级间接索引表 , 每个 一级间接索引表 有 n 个 直接索引 , 每个直接索引指向 一个物理块存储文件数据 , 对应 文件的逻辑上的 序号为 n + 10 ~ n + 9 + n x n 的 n x n 个物理块 ;


② 一级间接索引 计算


10 号索引结点 指向一个物理块 , 该物理块中存储 一级间接索引表 , 该表中存放的物理块号 是固定的 ;

假设 每个 物理块 的大小固定为 1KB = 1024B , 每个 物理块号 占 4B ( 4 字节 ) 大小 ,

物理块号 就是 物理块地址 / 索引值 ,

那么 一个物理块中可以存储 1024 / 4 = 256 个 索引值 ;


在下图计算中 , 第 10 节点 指向 的 物理块 中存储的是 一级间接索引表 , 该物理块存储了 256 个 直接索引 , 对应文件中的 第 10 ~ 265 序号的 逻辑物理块 , 对应 256 个文件块 ;

在这里插入图片描述


③ 二级间接索引 计算


11 号索引结点 指向一个物理块 , 该物理块中存储 二级间接索引表 , 该表中存放的 物理块号 / 索引 个数是固定的 ;

在上个章节已经计算出 , 每个物理块 可存储 256 个索引值 ;

二级间接索引表 对应着 256 个 一级间接索引表 , 每个 一级间接索引表 指向一个物理块 , 又对应一个 一级间接索引表 , 其中又存放着 256 个直接索引 , 进而对应 256 个存放文件数据的 物理块 ;


第 11 节点 指向 二级间接索引表 , 其中索引指向 256 个 一级间接索引表 , 每个 一级间接索引表 包含的索引 指向 256 个 直接索引 ,

该 索引结点 间接 指向的 物理块 有 256 x 256 = 65536 个 , 对应文件中的 第 266 ~ 65801 序号的 逻辑物理块 , 对应 65536 个文件块 ;


④ 三级间接索引 计算


第 12 节点 指向的 三级间接索引表 , 包含 的 索引 指向 256 个 二级间接索引表 , 每个 二级间接索引表 包含的 索引分别 指向 256 个 一级间接索引表 , 每个 一级间接索引表 包含 256 个 直接索引 ,


该 索引结点 间接 指向的 物理块 有 256 x 256 x 256 = 256^3 = 16,777,216 个 ,

对应文件中的 第 65802 ~ ( 65801 + 256^3 = 16,843,017 ) 序号的 逻辑物理块 ,

对应 256^3 个文件块 ;


4、文件长度计算


假设 每个 物理块 的大小固定为 1KB = 1024B , 每个 物理块号 占 4B ( 4 字节 ) 大小 , 一个物理块中可以存储 1024 / 4 = 256 个 索引值 ;


0 ~ 9 号 直接索引方式 , 可以表示 10 KB 大小的文件 ;

10 号 一级间接索引方式 , 指向 256 个文件块 , 可以 表示 256 KB 大小的文件 ;

11 号 二级简介索引方式 , 指向 256 x 256 个文件块 , 可以 表示 65536 KB 大小的文件 ;

12 号 三级间接索引方式 , 指向 256^3 个文件块 , 可以 表示 256^3 KB 大小的文件 , 等于 16384 MB = 16 GB 大小的文件 ;

在这里插入图片描述





四、软考案例



下图是一个 索引文件 示意图 , 文件有 8 个索引结点 , 分别是 i-addr[0] ~ i-addr[7] ;

  • 直接索引 : i-addr[0] ~ i-addr[4]
  • 一级间接索引 : i-addr[5] ~ i-addr[6]
  • 二级简介索引 : i-addr[7]

索引盘 和 数据块 的 物理块大小为 1 KB , 每个 索引地址值 为 4 字节 ;

在这里插入图片描述

文件的 逻辑块号 从 0 开始计数 , 在最右侧的文件块 依次向下累加 , 将 文件的 逻辑号 标记在 下图的 最右侧 文件块 中 ;

  • 直接索引 : i-addr[0] ~ i-addr[4] 是 直接索引 , 直接指向 存放文件数据 的 物理块 , 对应 0 ~ 4 序号的 逻辑文件块 ;
  • 一级间接索引 :
    • i-addr[5] 是 一级间接索引方式 , 指向 一级间接索引表 , 包含 256 个 直接索引 , 分别指向 256 个文件块 , 对应的文件块的 逻辑序号为 5 ~ 260 这 256 个逻辑块 ;
    • i-addr[6] 是 一级间接索引方式 , 指向 一级间接索引表 , 包含 256 个 直接索引 , 对应的文件块的 逻辑序号为 261 ~ 516 这 256 个逻辑块 ;
  • 二级简介索引 : i-addr[7] 是 二级间接索引方式 , 指向 二级间接索引表表 , 包含的 256 个 索引 分别指向 一级间接索引表 ; 一级间接索引表 , 包含 256 个 直接索引 , 分别指向 256 个文件块 ;
    • 对应的 文件逻辑序号为 517 ~ 66052 的 65536 个逻辑块 ;

该文件最多可以存储 65536 + 256 + 256 + 5 = 66053 个文件块 , 每个 1 KB , 则文件最多 66053 KB 大小 ;

在这里插入图片描述

物理块 索引表 名称 :

  • 90 号 / 91 号 / 156 号 / 168 号 物理块 中 , 存储的是 一级地址索引表 ;
  • 101 号 物理块 中 , 存储的是 二级地址索引表 ;

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/146101839
今日推荐