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

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

文件分配方式

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

前言

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

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

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

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

在这里插入图片描述

思维导图

在这里插入图片描述

连续分配

两个优点

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

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

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

在这里插入图片描述

两个缺点

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

在这里插入图片描述

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

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

链接分配

引入

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

隐式链接

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

解决连续分配提到的缺点

在这里插入图片描述

显式链接

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

在这里插入图片描述

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

在这里插入图片描述

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

索引分配

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

结语

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

http://www.xdnf.cn/news/14774.html

相关文章:

  • 深入浅出Java NIO:原理、实战与性能优化
  • FPGA在嵌入式图像处理中的深度应用!
  • Springboot多用户博客管理系统的设计与实现0ce8q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 【大数据】大数据产品基础篇
  • 微信小程序:实现树形结构组件
  • 用 pnpm + TurboRepo,构建多项目高效开发体系
  • 【C语言】知识总结·指针篇
  • PIXHAWK(ardupilot4.52)NMEA的解析bug
  • HarmonyOS NEXT仓颉开发语言实现画板案例
  • Python爬虫实战:研究Levenshtein库相关技术
  • FrozenBatchNorm2d 详解
  • Win10安装dify
  • AI+时代已至|AI人才到底该如何培育?
  • 跨越十年的C++演进:C++14新特性全解析
  • [论文阅读] 人工智能+ | 用大语言模型给建筑合规检查“开挂“:BIM领域的自动化革命
  • Unity2D 街机风太空射击游戏 学习记录 #14 环射和散射组合 循环屏幕道具
  • mysql无法启动的数据库迁移
  • 从提示工程(Prompt Engineering)到上下文工程(Context Engineering)
  • 力扣-合并区间
  • 蜂鸟代理IP+云手机:跨境电商多账号运营的“隐形风控引擎”
  • 供应链管理:供应链计划主要计算公式/方法
  • 使用 ReAct 框架在 Ollama 中实现本地代理(Agent)
  • Linux 驱动开发详解:从入门到实践
  • 易拓SAP培训分享:身为SAP顾问,应当了解哪些ABAP开发知识?
  • 强化学习理论基础:从Q-learning到PPO的算法演进(1)
  • Java课后习题(编程题)
  • Spring Cloud Ribbon核心负载均衡算法详解
  • 《高等数学》(同济大学·第7版)第九章 多元函数微分法及其应用第一节多元函数的基本概念
  • Android14音频子系统-ASoC-ALSA之DAPM电源管理子系统
  • MQTT 客户端(MQTT Client)工具介绍及分享