从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

    • 我的操作系统学习笔记

    • 我的操作系统实验笔记

    • 操作系统网课-王道考研

      • 0_课程白嫖指南
      • 1_1_操作系统的概念(定义)、功能和目标
      • 1_2_操作系统的特征
      • 1_3_操作系统的发展与分类
      • 1_4_操作系统的运行机制与体系结构
      • 1_5_中断和异常
      • 2_1_6_系统调用
      • 2_1_1_进程的定义、组成、组织方式、特征
      • 2_1_2_进程的状态与转换
      • 2_1_3_进程控制
      • 2_1_4_进程通信
      • 2_1_5_线程概念和多线程模型
      • 2_2_1_处理机调度的概念、层次
      • 2_2_2_进程调度的时机、切换与过程、方式
      • 2_2_3_调度算法的评价指标
      • 2_2_4_FCFS、SJF、HRRN调度算法
      • 2_2_5_调度算法:时间片轮转、优先级、多级反馈队列
      • 2_3_1_进程同步、进程互斥
      • 2_3_2_进程互斥的软件实现方法
      • 2_3_3_进程互斥的硬件实现方法
      • 2_3_4_信号量机制
      • 2_3_5_用信号量实现进程互斥、同步、前驱关系
      • 2_3_6_生产者-消费者问题
      • 2_3_7_多生产者-多消费者问题
      • 2_3_8_吸烟者问题
      • 2_3_9_读者-写者问题
      • 2_3_10_哲学家进餐问题
      • 2_3_11_管程
      • 2_4_1_死锁的概念
      • 2_4_2_死锁的处理策略—预防死锁
      • 2_4_3_死锁的处理策略—避免死锁
      • 2_4_4_死锁的处理策略—检测和解除
      • 3_1_1_内存的基础知识
      • 3_1_2_内存管理的概念
      • 3_1_3_覆盖与交换
      • 3_1_4_连续分配管理方式
      • 3_1_5_动态分区分配算法
      • 3_1_6_基本分页存储管理的基本概念
      • 3_1_7_基本地址变换机构
      • 3_1_8_具有快表的地址变换机构
      • 3_1_9_两级页表
      • 43_3_1_10_基本分段存储管理方式
      • 3_1_11_段页式管理方式
      • 3_2_1_虚拟内存的基本概念
      • 3_2_2_请求分页管理方式
      • 3_2_3_页面置换算法
      • 3_2_4_页面分配策略
      • 4_1_1_初识文件管理
      • 4_1_2_文件的逻辑结构
      • 4_1_3_文件目录
      • 4_1_4_文件的物理结构(上)
      • 4_1_4_文件的物理结构(下)
        • 多级索引
        • 混合索引
        • 索引分配总结
        • 文件的物理结构总结
      • 54_4_1_5_文件存储空间管理
      • 4_1_6_文件的基本操作
      • 4_1_7_文件共享
      • 4_1_8_文件保护
      • 4_1_9_文件系统的层次结构
      • 4_2_1_磁盘的结构
      • 4_2_2_磁盘调度算法
      • 4_2_3_减少磁盘延迟时间的方法
      • 4_2_4_磁盘的管理
      • 5_1.2_I-O 控制器
      • 5_1.3_I-O 控制方式
      • 65_5_1_1_I-O 设备的概念和分类
      • 5_1_4_I-O 软件层次结构
      • 5_1_5_I-O 核心子系统
      • 5_1_6_假脱机技术
      • 5_1_7_设备的分配与回收
      • 5_1_8_缓冲区管理
  • Linux

  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

  • 计算机基础
  • 操作系统
  • 操作系统网课-王道考研
2023-05-15
目录

414_文件的物理结构(下)

# 4.1_4_文件的物理结构(下)

在这个小节中我们会继续学习文件的物理结构,也就是文件分配方式相关的问题。‍‍在之前的小节中,我们介绍了连续分配和链接分配这两种分配方式,‍‍连续分配要求给文件分配的必须是一些连续的磁盘块,‍‍而链接分配允许为文件分配的是一些离散的磁盘块

‍

和链接分配类似的是‍‍索引分配这种第三种分配方式,它同样允许给文件分配的是一些离散的磁盘块,系统会为每一个文件建立一张‍‍索引表,而索引表当中记录了文件的各个逻辑块对应的物理块,所以这个地方大家会发现,‍‍索引表的功能其实有点类似于我们内存管理当中的页表的功能,页表是建立了逻辑页面‍‍到物理业之间的一个映射关系,‍‍磁盘当中用于存放索引表的磁盘块就称为文件的索引块,‍‍而用于存放文件实际数据的那些磁盘块就称为数据块。‍‍ ‍ 直接来看一个例子,‍‍假设有一个文件 AAA 它的数据依次存放在了 2,5,13,9 这么几个磁盘块当中,‍‍采用索引分配方式的话,系统会为 AAA 文件建立一张索引表,‍‍索引表记录了 AAA 的这些逻辑块和物理块之间的一一对应的这种映射关系,那么‍‍如果说 AAA 文件的索引表是存放在 7 号磁盘块当中的,‍‍那么 7 号磁盘块就是 AA 的索引块,而 2,5,13,9 这几个磁盘块是 AAA 的数据块

采用索引分配方式的这些文件需要在自己的目录项,也就是 fcb 当中‍‍记录自己的索引块到底是哪一块,索引块当中存放的是索引表,因此‍‍系统可以根据索引块的块号找到它的索引表,‍‍接下来就可以找到这些各个逻辑块对应的物理括号了。‍‍

像这个例子当中,‍‍AAA 的索引表是存放在 7 号块当中的,它的这些实际数据是依次存放在 2,5,13,9 这么几个块当中的,

类似的假如说有另外一个文件,BBB 它的索引块是 23 号块‍‍么 BBB 的索引表就应该是存放在这个地方。‍‍ ‍ 所以这个地方大家会发现,‍‍如果采用的是索引分配方式的话,那么每一个文件都会有一张自己的索引表,‍‍而之前咱们介绍的显示链接的链接分配方式当中,文件分配表也就是 fat,‍‍是一个磁盘只对应一张 fat,所以这是他们俩的一个小小的区别。‍‍

另外我们可以用固定长度,固定字节的存储空间来表示这些物理块号,‍‍也就是索引表的这些表项,比如说像一个磁盘的总容量,假如说是 1TB,也就是二的 40 次方个字节,‍‍并且磁盘块的大小是 1KB,那么这么大的磁盘就可以被分为‍‍2 的 30 次方个磁盘块,因此要表示这么多个磁盘块只需要用 30 个二进制位就可以了。‍‍那么 4 个字节的空间可以包含 32 个二进制位,它是足够表示 2 的 30 次方个磁盘块的块号的。‍‍

因此我们可以让索引表的块号每 1 个表项占 4 个字节,‍‍所以索引表当中的逻辑块号这些数据就可以是隐含的,‍‍因为索引表的表项每一行占的是 4 个字节,所以只要我们知道索引表的起始位置,‍‍那么我们就可以直接根据逻辑块号直接计算出某一个逻辑块号对应的表项到底是在‍‍什么位置了。‍‍

​

接下来我们要探讨的问题是‍‍采用索引分配方式应该怎么实现逻辑块号到物理块号的转变?假设此时用户想要访问的是逻辑块号 i ,‍‍那么操作系统首先需要找到这个文件对应的目录项,也就是它的 fcb‍‍,从中找到这个文件的索引块的块号,再从索引块当中读出文件的索引表的内容。‍‍

那么接下来就只需要通过逻辑块号来查询索引表,就可以找到‍‍某一个逻辑块号对应的物理块号到底是多少了。‍‍查表的方式其实和咱们内存管理当中介绍的,通过逻辑页号来查询页表项的那种方式是很类似的。‍‍

所以从这个过程分析我们可以看到,如果我们想要访问逻辑块号为 i 的逻辑块的话,‍‍那么我们并不需要顺序的访问前面的 0 ~ i-1 号块,我们可以直接找到 i 号块存放的物理块号,因此‍‍索引分配这种方式是支持随机访问的。‍‍ ‍ 另外索引分配这种方式也很容易实现文件的拓展。‍‍比如说像 AA 这个文件现在想要继续拓展,也就是再分配一个物理块数据块的话,那么‍‍只需要随便找一个空闲的磁盘块,比如说是 19 号磁盘块把它分配给 AA,然后在 AA‍‍对应的索引表当中增加相应的表项,这就完成了文件的拓展。‍‍因此索引分配方式中文件的拓展也是很容易实现的。‍‍不过索引分配方式的索引表需要占用一定的存储空间,这是它的一个小小的缺点。‍‍

​

接下来我们再来考虑下一个问题,假设每个磁盘块的大小是 1KB,‍‍1 个索引表的表项,也就是这样的一行占用 4 个字节,那么 1 个磁盘块只能存放‍‍1k 除以 4,也就是 256 个索引项,假如说有一个文件它的大小已经超过了 256 个块,‍‍那也就意味着这个文件它对应的索引表肯定也要超过 256 个索引项。‍‍

既然如此,这么大的索引表肯定是没办法在一个磁盘块中就可以装得下的,‍‍也就是说一个很大的文件,它对应的索引表在一个磁盘块下‍‍肯定存不下,那么我们怎么解决这个问题?‍‍一般来说有这样的三种解决方案,第一种叫做链接方案,第二种叫做多层索引,第三种叫混合索引,我们会依次介绍。‍‍

​

首先来看链接方案,如果说一个文件的索引表太大,‍‍那么可以为文件的索引表分配多个索引块,并且用链接的方式把它们连起来。‍‍还是接着刚才的条件往下分析,假设一个磁盘块只能存放 256 个索引项,‍‍那么如果一个文件的大小超过了 256 块的话,‍‍那么就意味着这个文件的索引表,它的索引项肯定也超过 256 个,‍‍因此可以把索引表拆分,为文件分配多个索引块,‍‍每一个索引块当中存放 256 个索引项,并且在每一个索引块当中用一定的空间‍‍存储指向下一个索引块的指针,这样的话就可以把一个很长的索引表拆分成不同的部分,‍‍并且用这种链接的方式把它们连起来了。‍‍

如果采用的是链接方案的话,文件的 fcb 当中只需要记录它的第一个索引块的块号,‍‍像文件 AAA 就只需要记录它的第一个索引块,也就是 7 号块。‍‍假设现在用户想要访问的是 AAA 的逻辑块号为 256 的逻辑块的话,‍‍为了查到 256 号逻辑块对应的物理块号,那就肯定需要找到‍‍ AA 的第二个索引块,而由于各个索引块之间是用这种间接的方式把它们连起来的,‍‍所以为了找到第二个索引块的块号操作系统,首先需要把第一个索引块读入内存,‍‍然后才能根据索引块当中的指针找到第二个索引块的块号,并且把第二个索引块读入内存,‍‍只有这样才能找到 256 这个逻辑块号对应的物理块号到底是多少。‍‍ ‍ 因此可以看到‍‍如果说用户要访问的逻辑块号对应的索引项,是在索引表当中的第二个部分的话,‍‍那么系统首先必须先顺序的读取索引表的第一部分之后才能找到索引表的第二部分,‍‍这个特点就造成了一个问题,假设一个文件的大小是 64 兆字节,‍‍也就是 256×256 × 1KB,‍‍由于说每个磁盘块的大小是 1KB,所以这个文件应该占用 256×256 个磁盘块,‍‍也就需要对应同等数量的索引项。而每一个磁盘块每一个索引块当中只能存放 256 个索引项,‍‍因此这么多的索引项就需要用 256 个索引块来存储,‍‍并且如果采用的是链接方案的话,这些索引块之间是用这种链接的方式把它们连起来的。‍‍所以如果说一个用户想要访问这个文件的最后的一个逻辑块的话,‍‍那么就必须找到这个文件的最后一个索引块。通过刚才的分析我们知道‍‍如果要找到最后一个索引块的话,那么必须先依次读入前面的所有的那些索引块。‍‍所以可以看到如果采用的是链接方案的话,那么为了找到文件的某一个逻辑块对应的物理块号,‍‍光是这个地址转换的过程,就可能需要 200 多次读磁盘的操作,这显然是很低效的,‍‍这也是链接方案所存在的最大的一个问题,怎么解决这个问题?‍‍‍‍

​

# 多级索引

人们提出了多级索引这种解决方案,‍‍多层索引的这种解决方案就有点类似于咱们之前学习过的多级页表的那种原理,就是要建立多层的索引表,‍‍使第一层索引块指向第二层索引块,如果说文件很大的话,甚至还可以建立第三层第四层索引块

还是用刚才的条件继续分析,假设一个磁盘块只能存放 256 个索引项,‍‍并且一个文件的大小是 256×256 个块的话,那么‍‍这个文件可以为它建立两层索引,第一层的索引块总共有 256 个索引项,第二层的索引块‍‍每一块也有 256 个缩影像,‍‍然后每一个索引项再指向某一个数据块,那在文件的目录表也就是 fcb,当中只需要记录‍‍它的顶级索引表存放的索引块号到底是多少就可以了。‍‍

如果说我们采用的是这种两层索引的结构的话,‍‍那文件的最大长度可以达到 256×256×1KB,也就是 64 兆字节这么大,‍‍这是因为如果我们采用了多级索引的结构的话,那么各层索引表的大小‍‍不能超过一个磁盘块。‍‍也就是说第一级的索引表最多只会有 256 个索引项,‍‍也就是会分别指向 256 个第二级的索引表,而第二级的索引表大小仍然不能超过一个磁盘块,‍‍所以第二级的索引表最多也只会含有 256 个索引项,‍‍每个索引向又会分别指向一个数据块,每一个数据块的大小就是 1KB 这么大,因此‍‍如果采用两层索引的话,那么文件的最大长度是 64 兆字节,‍‍这个条件十分重要,在考试当中经常会遇到让我们计算文件最大长度的这种类型的题。‍‍

接下来我们来看一下,如果采用多级索引的话,怎么实现逻辑块号到物理块号的转变?‍‍假设此时用户要访问的是 1026 号,逻辑块,那么 1026÷256=4,也就是说‍‍1026 号逻辑块对应的索引项应该是 4 号二级索引表当中存放的,‍‍而 4 号二级索引表存放的位置操作系统只需要从这个一级索引表当中‍‍找到 4 号索引项对应的物理块就可以知道了。‍‍

在读入了 4 号二级索引表之后,‍‍接下来应该查询 4 号二级索引表当中的哪一个表项,1026 对 256 取余等于二,‍‍说明此时需要查询的是 4 号二级索引表当中的 2 号表项,‍‍找到二号表项之后就可以找到 1026 号逻辑块对应的物理块到底是多少了。‍‍

所以如果采用这种两层索引的方式的话,‍‍那么操作系统首先是需要根据这个 fcb 当中记录的顶级索引块的块号‍‍来找到顶级索引表,先把顶级索引表读入内存,‍‍然后查询相应的表项之后,又找到相应的二级索引表存放的物理块号。‍‍接下来再把二级索引表读入内存,‍‍最后再查询二级索引表,就可以找到我们最终想要访问的逻辑块到底存放在哪个物理块当中了

所以整个过程访问目标数据块,总共进行了三次读磁盘操作。‍‍第一次是读入了一级索引表,第二次是读入了对应的二级索引表,第三次才是读入我们最终要访问的数据块。‍‍类似的如果我们采用的是三层索引的结构的话,那文件的最大长度应该是 256×256 再乘 256,‍‍再乘以 1KB,也就是 16GB 这么大。如果采用三层索引结构的话,‍‍访问 1 个目标数据块,总共需要 4 次读磁盘的操作,‍‍所以我们得到这样的一个结论,‍‍如果我们采用的是 k 层索引结构,并且顶级索引表的数据还没有调入内存的话,那么‍‍根据一个逻辑块号访问一个数据块,总共需要 k+1 次读磁盘操作才可以完成。‍‍相比于之前的那种链接方案来说,读磁盘的操作已经是少了很多了,‍‍这是多层索引需要注意的问题。‍‍第一,大家需要学会计算文件的最大长度到底是多少。‍‍第二,大家还需要学会分析访问一个数据块到底需要多少读磁盘操作。‍‍

​ ‍

不过多层索引的方式也存在一个小小的问题,‍‍假如一个文件本来很小,它的数据块只有 1KB 这么大,‍‍但是这个文件如果在物理上采用的是两层索引的这种结构的话,‍‍那么读入这个文件 1KB 的内容依然需要一次读磁盘,两次读磁盘,三次读磁盘操作,‍‍可不可以用某种方式来解决这个问题?‍‍为此人们又提出了混合索引的这种方案 ‍

# 混合索引

混合索引它是多种索引分配方式的一种结合,比如说一个文件的顶级索引表当中,‍‍它可能会包含一些直接地址索引,比如说 8 个直接地址索引,所谓的直接地址索引就是指‍‍这些索引项是直接指向了一个数据块,所以‍‍8 个直接地址索引会对应 8 个数据块。‍‍

另外顶级索引表当中还有可能会包含一些一级间接索引,‍‍一级间接索引会指向一个单层索引表,单层索引表的各个索引项,‍‍又会分别指向一个数据块,每个数据块是 1KB。‍‍

另外顶级索引表还有可能会包含一些‍‍二级间接索引,二级间接索引会指向一个两层索引表,‍‍索引表的各个表项又依次指向了一个下一级的索引表,‍‍而第二层索引表的各个表项又分别指向了一个的数据块,‍‍所以如果有 8 个直接地址索引的话,他们会分别指向 8 个数据块,‍‍一个一级间接索引会指向一个单层的索引表,‍‍而每个索引表最多只会有 256 个表项,因此索引表最多只会对应 256 个数据块。相应的二级间接索引最多会指向 256×256,也就是这么多个数据块。‍‍

因此如果一个文件它的混合索引的顶级索引表是这样的结构的话,那么这个文件最大长度可以有‍‍8+256 再加 65536 这么多个块,也就是 65800KB 这么多,‍‍根据顶级索引表的这些结构来计算一个文件的最大长度,‍‍这种题型在考试当中也是很常见的,大家需要重点的把握。‍‍

​

接下来我们来分析一下,如果要访问某一个逻辑块,那么需要几次读磁盘操作?‍‍假设此时这个顶级索引表还没有读入内存,‍‍那么如果说我们要访问的是 07 号逻辑块,也就是要访问的是这个直接地址部分的话,‍‍那么我们总共需要两次读磁盘操作,第一次是读入顶级索引表,第二次是根据顶级索引表当中的某一个直接地址,‍‍找到我们的目标数据块存放的位置,然后再把这个目标数据块读入内存,所以总共需要两次读磁盘操作。‍‍

如果说我们要访问的是 8~263 号逻辑块,也就是要访问的是这些‍‍一级间接逻辑块的话,那么总共需要第一次读磁盘操作是读入顶级索引表,‍‍第二次是根据一级间接索引找到这一级的索引表,‍‍然后把索引表读入内存,第三次是根据索引表的内容再找到我们的目标数据块存放的位置,‍‍然后再把目标数据块读入内存,所以总共需要三次读磁盘操作。‍‍

相应的如果我们要读的是这个范围的逻辑块,也就是这些磁盘块的话,那么总共需要 4 次读磁盘操作。‍‍

所以可以看到采用混合索引的 1 个好处,就是对于小文件来说,‍‍它可能只需要占用前面的这几个块就可以了。‍‍小文件的读取只需要访问比较少的读磁盘的次数,一般来说我们计算机当中小文件是更多的,‍‍所以这是混合索引这种方式带来的一个好处。‍‍

​

# 索引分配总结

那么我们介绍了当文件太大索引表项太多的时候,‍‍可以采取的三种解决方案,‍‍

第一种链接方案就是把各个索引块用链接的方式把它连起来,但是它所带来的缺点,‍‍如果一个文件很大,索引表很长的话,那么想要找到 i 号索引块,就必须先依次读入 0 到 ~ i-1 号索引块,这就导致‍‍要查询一个索引项的时候,磁盘 l 次数可能会很多的问题,所以这种方案查找效率低下。‍‍

为此我们可以建立多级索引,就有点类似于我们在内存管理当中采用的多级页表那样,‍‍然后第一层索引块会指向第二层的索引块,如果说一个文件很大的话,甚至还可以建立 3 层甚至 4 层的索引块,‍‍如果我们采用的是 k 层索引结构,并且顶级索引表还暂时没有掉入内存的话,‍‍那么访问一个数据块只需要 k+1 次读磁盘的操作,‍‍但是这种方式的缺点就是即使是小文件访问一个数据块,依然是需要 k+1 次读磁盘操作

所以人们又提出了混合索引这种方式,一个文件的顶级索引表当中,可以既包含直接地址索引,‍‍也包含一级间接索引,也包含二级间接索引,直接地址索引,会直接指向一个数据块,‍‍而一级间接索引会指向一个单层的索引表,索引表再依次又指向各个数据块,‍‍而两极间接索引是指向一个两层的索引表,‍‍如果采用这种混合索引的方式的话,对于小文件来说,访问一个数据块所需要的读磁盘次数就可以变得更少了。‍‍ ‍ 索引分配方式在考试当中是经常进行考察的,无论是小题还是大题,‍‍所以大家需要重点掌握的是这样的两个点。

第一要学会根据多层索引或者混合索引的那种结构,‍‍来计算出一个文件的最大长度是多少。那要计算最大长度,大家最关键的是需要理解,‍‍各级索引表最大是不能超过一个块的,要知道这个条件。‍‍

第二个大家要学会的是‍‍要能够自己分析访问某一个数据块,或者说访问某一个逻辑块号对应的物理块‍‍所需要的读磁盘次数到底是多少,‍‍操作系统需要从外存当中依次的读入顶级索引块,然后下一级的索引块,再下一级的索引块以此类推。‍‍大家需要注意的是题目当中的条件,顶级索引块到底是不是已经调入内存了,这个部分内容十分重要,特别是混合索引相关的知识点,很容易综合的来考察大家,‍‍所以大家还需要根据大量的课后习题来进行进一步的巩固。‍‍

​

# 文件的物理结构总结

这个地方我们再把上个小节和小节的内容进行一个汇总总结,我们需要掌握‍‍各种分配方式的一个思想。

像顺序分配就是要求为文件分配的必须是连续的磁盘块,‍‍而链接分配又分为隐式链接和显示链接两种,他们都可以为文件分配离散的次方块,‍‍而隐式链接是把每个磁盘块都用链接指针的方式把它们连起来,显示链接的话是为磁盘建立一个文件分配表,然后在这个表当中‍‍记录各个磁盘块的先后关系,并且这个文件分配表是在开机的时候就会调入内存,并且之后会一直常驻内存

而索引分配方案会为文件的数据块建立一些索引表,而如果文件的索引表太大的话,‍‍又可以采用链接方案多层索引和混合缩影这几种方式来解决。‍‍采用不同的分配方式,在文件的目录像 fcb 当中所需要记录的这些信息也是有一定的区别的

另外大家还需要理解这些各种分配方式的优点和缺点,‍‍各种分配方式的优点和缺点很容易在选择题当中进行考察。最后还需要强调一遍,‍‍如果说题目当中只是简单的告诉我们一个文件采用的是链接分配方式,‍‍而并没有告诉我们它到底是隐式还是显示链接的话,‍‍我们一般都是默认为它指的链接分配是隐式链接的方式

​

上次更新: 2025/5/9 14:55:39
4_1_4_文件的物理结构(上)
54_4_1_5_文件存储空间管理

← 4_1_4_文件的物理结构(上) 54_4_1_5_文件存储空间管理→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式