当前位置: 首页 > news >正文

Re:从零开始的文件分配方式(考研向)

文件分配方式

    • 前言
      • 思维导图
    • 连续分配
      • 两个优点
      • 两个缺点
    • 链接分配
      • 引入
      • 隐式链接
      • 解决连续分配提到的缺点
      • 显式链接
    • 索引分配
    • 结语

前言

我们之前学习了cache的地址映射和分页存储管理方式,总的来说:

  • 地址映射是cache和主存之间的映射
  • 分页存储管理方式讲的是 进程的页与页框之间的映射 以及我们如何借助进程的页表将逻辑地址转换为物理地址(基本地址变换)

其中具体的细节可以参考我的这篇 文章链接

这些说白了 最后都是在内存里面找我们想要的地址 而对于我们文件的物理结构讲的是内存与磁盘(外存)之间的映射,类似的 他们之间的数据交换也是以块为单位,这样的好处就是能够保证块内地址在移动之后依旧保持不变,
具体如下图:

在这里插入图片描述

思维导图

在这里插入图片描述

连续分配

两个优点

采用顺序分配的第一个优点就是支持随机访问 为啥我们看下面这张图是不是就非常清楚了 每个文件我们是不是只需要知道它在磁盘(外存)当中的起始块号和长度(用于判断是否越界)因为是连续存放的,而每个块大小又是一样的,这样不就能够算出来这个文件的任何一个数据块在磁盘的位置了吗 也就是随机访问
在这里插入图片描述

在我们前面学习机组的时候 我们在了解了磁盘的读写过程 (图片来源: 里昂学长)

在这里插入图片描述
简单回顾之后我再结合我们本章要说的顺序分配,说白了就是连着放 这样是不是就减少了我们磁头地移动距离 这就是我们顺序分配的第二个优点

在这里插入图片描述

两个缺点

第一个缺点:
简单说就是拓展的成本太高 我们举一个极端的情况就是现在我们有9999个连续的存放的块 假设里面都空间全部占满 我们现在想加入一个块达到拓展的目的 此时磁盘当中正好有连续的10000个连续的磁盘块,此时我们虽然很想在这9999后面再开辟一个新的块来达到目的,奈何连续存放是达不到的 我们只能讲这9999个块迁移到新的连续空间+我们需要拓展的空间正好占满10000个连续的块

在这里插入图片描述

  • 第二个缺点:如果我们只使用连续的大片空间 想象一下是不是会出现很多很多散落在内存当中的小磁盘块没有办法被很好的利用起来,回顾我们之前的分块存储思想 是不是就会出现很多的内部碎片 之后我们才有了分页(段)存储——>多级页表——>然后又引入了虚拟内存,介绍了请求分页存储管理方式

  • 采用我们之前所介绍的紧凑技术虽然可以解决这种问题 但是我们说过这种技术是需要耗费很大的时间代价的
    在这里插入图片描述
    总结:
    在这里插入图片描述

链接分配

引入

其实就是将那些散落在内存当中的磁盘块通过某种方式链接起来 类比于我们在学习数组(顺序存储)的时候,如果内存当中没有足够的连续空间的时候我们引入了链表来解决这个问题 现在也是如此 具体地链接方式分为隐式链接和显式链接两种

隐式链接

目录只存放起始块号和结束块号 我们在存储的时候 会开辟额外的一个指针域 每次都将下一个盘块的位置信息存储在里面,这样就能够顺藤摸瓜找到每一个磁盘块
在这里插入图片描述

解决连续分配提到的缺点

在这里插入图片描述

显式链接

这个其实在学的时候我就觉得非常表数据结构当中 树那一章所学的双亲孩子链表 对应文章链接
说白了就是对于每一个磁盘块,我们将他的下一块的信息整理成一章表格
(我的理解是只不过是将链式关系通过一张表来呈现了)
这样我们就可以通过查表的方式找到该文件所包含的所有磁盘块

在这里插入图片描述

相比于隐式链接 我们通过表格的形式达到了随机访问的功能 比如当我们想要去查找第i块我们之间从表中去找哪个磁盘块的下一块是它是不是就行了 并不用想向隐式链接一样 一个一个地顺序访问

在这里插入图片描述

  • 链接分配小结:
    在这里插入图片描述

索引分配

其实就是将我们上面的链式关系通过一张索引表来实现 里面按逻辑块号顺序存储了它与物理块号的映射(类似页表)
在这里插入图片描述
在这里插入图片描述

结语

PS:明天更完 劳逸结合 加纳(懒得敲了 QWQ~)
在这里插入图片描述

相关文章:

  • 深度学习实战:案例解析
  • 因果森林(R包grf)-治疗异质性探索
  • 三阶落地:腾讯云Serverless+Spring Cloud的微服务实战架构
  • 人工智能训练师——智能语音识别ASR
  • jvm简单八股
  • BERT架构详解
  • Spring Boot项目开发实战销售管理系统——系统设计!
  • 23种设计模式——单例模式的暗黑面
  • 常用的语义分割数据集标注格式
  • 三分钟学会利用deepseek将复杂信息转换成可视化图表
  • element-plus table合并列、合计行、表格填报添加验证
  • Spring Boot 2.2.6调用DeepSeek API并通过SSE将流式响应推送给前端的完整实现
  • vue-27(实践练习:将现有组件重构为使用组合式 API)
  • fish安装node.js环境
  • Spring Boot 性能优化与最佳实践
  • [论文阅读] 人工智能 | 机器学习系统构思新方法:Define-ML 解决传统 ideation 痛点
  • RabbitMQ 消费幂等性与消息重放实现
  • 车联网网络安全渗透测试:深度解析与实践
  • 机器学习中为什么要用混合精度训练
  • 学习设计模式《十五》——模板方法模式