8.文件存储空间管理

news2024/12/25 12:31:06

第四章 文件管理

8.文件存储空间管理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

空闲表法
  空闲盘块表和在内存管理的动态分区分配中学习过的空闲分区表是类似的,空闲盘块表记录了每一个空闲区间的起始位置和这个空闲区间的长度这两个信息。像第一个空闲区间是0,1这两个空闲块,所以这个空闲区间对应的是第一个表项,第一个空闲盘块号是0,空闲盘块数是2。空闲区间10-14在空闲盘块表中对应表项的第一个空闲盘块号是10,空闲盘块数是5。 空闲表法适用于文件的物理结构是连续分配方式。

​   分配磁盘块:采用空闲表法为文件分配的是连续的存储空间。举例:假设此时新创建的文件请求3个磁盘块,如果采用首次适应算法,系统会依次检查这个空闲表中的各个表项,找到第一个能够满足3个块的空闲区间。分配之后需要修改空闲盘块表(修改起始盘块号和空闲盘块数)。最佳适应与最坏适应和在内存管理中学习过的思想是一样的,最佳适应是找到一个能满足要求且最小的空闲区间进行分配;最坏适应就是找到一个能满足需求并且最大的连续空闲区间进行分配。

​   回收磁盘块:与内存管理中的动态分区分配类似,有四种情况①回收区的前后都没有相邻空闲区,这种情况下需要在空闲盘块表中新增一个表项。②回收区的前后都是空闲区,则需要把前后的空闲区和新回收的区域合并为同一个空闲区,此时空闲盘块表中表项数-1。③回收区的前面是空闲区。④回收区的后面是空闲区,最后这两种情况并不会导致空闲盘块表的表项数改变。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

​   空闲盘区链比起空闲盘块链来说为一个文件分配多个盘块时的效率更高。因为空闲盘块链只能从链中一个一个的把这些磁盘块摘下来,而空闲盘区链可以一次摘出一大片连续的空闲区间,所以为一个文件分配多个盘块时的效率更高。

在这里插入图片描述

在这里插入图片描述

​    位示图法:位示图一般会存储为连续的“字”,比如说在这个例子中一个字的字长是16位,每个字由16个二进制位组成,因此可以用(字号,位号)这样的二元组来定位到其中的某一个二进制位。所以考试中经常考察的就是如何从(字号,位号)推算出它所对应的盘块号,或者怎么从盘块号逆推出这个盘块号所对应的(字号,位号)。位示图法连续分配和离散分配都适用。在连续分配时,在扫描位示图的时候可以尝试找到连续的K个空闲块(连续的K个“0”,因为在位示图中“0”表示空闲);在离散分配时,在扫描位示图的时候可以不用非得找到连续的K个空闲块。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

成组链接法
  文件卷的目录区中会设置一个专门的磁盘块作为“超级块”,当系统启动时要把“超级块”读入内存,并且在整个过程中需要保持内存和外存中的“超级块”的数据一致。
  在超级块中记录了下一组空闲盘块的数量,比如说下一组总共有100个空闲盘块,另外它还需要记录这100个空闲盘块的盘块号依次是多少,通过这些盘块号就可以依次找到下一个分组的各个盘块了,第1个空闲分组共有100个,分别是201~300号磁盘块,需要注意300号磁盘块它作为这个分组的第一个磁盘块在这个块当中还需要记录下一组空闲盘块的信息,同样的这个地方的100表示的是下一个空闲盘块的分组总共有100个空闲盘块,下面的的数字代表了下一个分组的各个盘块的盘块号,所以通过这些盘块号又可以找到再下一分组的盘块分别是哪些,同样与刚才类似,在这个分组当中400号盘块是这个分组当中的第一个盘块,所以400号盘块也会再记录再下一个分组的盘块数和各个盘块的盘块号,用这种方式就可以把整个系统中所有的空闲盘块给一一连起来。在倒数第二个分组的第一个盘块的起始位置这里可以设置为一个特殊的值-1,用来表示再下一个分组已经是最后一个分组了(所以如果找到这个值为-1的结点的话就证明在之后已经没有更多的分组了。另外需要注意其实每一个分组的盘块号并不需要连续,这个地方把这些数字设置为连续的原因是为了更方便的看出每一个分组到底有多少个盘块。另外需要在成组链接法中每一个分组的盘块数量有一个上限,这个例子中每个分组最多只有100个盘块,另外需要注意最后一个分组的盘块数是要比前面的分组的盘块数少一个(原因是在倒数第二个分组的第一个盘块的起始位置这里可以设置为一个特殊的值-1,用来表示再下一个分组已经是最后一个分组了,这里占用了)。

​   成组链接法如何分配:假设此时某一个文件需要分配一个空闲块,首先需要检查第一个分组中的磁盘块到底够不够这个文件的需求,由于此时超级块已经是读入内存的了,所以在进行这个检查的时候并不需要读磁盘操作,只需要找到内存当中超级块的数据并且检查一下下一组的空闲盘块数是否大于此时要求得到的空闲盘块数,由于1<100,所以说明这个第一个分组中的空闲盘块是足够分配的,接下来就会把这些分组中的最后这个盘块(201号盘块)分配给这个文件,这个盘块分配出去之后就需要把超级块中记录的201号盘块号的数据删除并且要把超级块中用于表示下一个分组的空闲盘块数-1;如此便完成了分配一个空闲块的事情。 如果此时需要分配100个空闲块,第一件事同样是检查第一个分组到底够不够分配,由于此时第一个分组的数量共有100个空闲盘块,因此第一个分组是足够分配的,因此接下来会把第一个分组的100个磁盘块全部分配出去,不过这里需要注意的是300号磁盘块存储了再下一个分组的磁盘块的信息,因此如果把300号磁盘块直接分配给那个文件不做任何处理的话那么和下一组的链接信息就断掉了,因此在我们把300号磁盘块正式分配给文件之前我们需要把300号磁盘块中的数据将其复制到超级块中,这样就可以保证虽然这个分组已经全部分配给这个文件了,但是下一个分组的链接信息依然是保存在超级块当中的。如果文件要求的是更多数量的空闲块的话,那么我们依然可以用同样的方法把这些分组一个一个的全部分配出去,不过需要注意的就是每一个分组正式分配出去之前需要把这个分组指向下一个分组的链接信息都先复制到超级块中。所以超级块其实就是充当了链头的作用,在这个链头当中永远要保持指向下一个分组的一系列信息。

​   成组链接法如何回收空闲块:假设每一个分组的磁盘块上限是100块,而第一个分组此时只有99块,假如此时还要再回收一个空闲块的话,由于此时第一个分组还没有满,所以我们可以把这个空闲块插到第一个分组当中,比如回收的是201号块,那么就可以把201号块的链接信息放到超级块中,并且把超级块中的下一组空闲盘块数+1,这是第一种情况如果分组没满的话可以把回收的空闲块插到第一个分组当中。第二种情况:假设现在第一个分组已经满了(第一个分组现在共有100个块),如果此时还要再回收一个空闲块的话应该怎么处理?由于这个分组已经满了,显然这个空闲块不能把它放到这个分组中,所以可以把这个新回收的块作为一个新的分组,不过需要注意的是我们需要把这个超级块中的内容复制到新回收的块当中,这样这个新回收的块作为一个新的分组它就拥有了指向下一个分组的链接指针,而由于超级块是永远指向第一个分组,所以超级块的数据就需要进行修改,让它指向第一个分组也就是新的这个回收块组成的新分组,由于这个新分组当中只有一个空闲块,所以超级块中表示下一个分组空闲块数的位置的值是1。

在这里插入图片描述

总结
  空闲表法可能结合首次适应、最佳适应等策略进行考察,需要回顾在内存管理中学过的这些算法的策略;在空闲表法中注意回收时是否需要合并。
  最常考察的还是位示图法,要能够自己推出盘块号<—>(字号,位号)之间的相互转换公式。需要注意题目的条件,二进制的0/1到底哪个代表空闲,哪个代表不空闲;字号,位号,盘块号到底是从0开始还是从1开始。
  成组链接法是UNIX系统采用的策略,适合大型文件系统。成组链接法的规则比较复杂,并且不太方便用文字进行描述,所以这个知识点很难作为考题进行考察,不过只要理解了刚才分析的过程即使考到了也能够解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【克罗恩病是银屑病及银屑病关节炎的因果风险因素】

克罗恩病是银屑病及银屑病关节炎的因果风险因素 ①纳入463372名欧洲人&#xff0c;包括12882例IBD患者、5621例银屑病患者、2063例银屑病关节炎患者&#xff1b;②单变量孟德尔随机化&#xff08;MR&#xff09;分析表明&#xff0c;基于遗传因素预测的IBD与较高的银屑病和银屑…

复数混频器、零中频架构和高级算法开发

文章里讲解了关于射频IQ调制器、零中频架构相关的原理及技术&#xff0c;全都是干货&#xff01;其实好多同行对软件无线电的原理、IQ调制、镜像抑制都是一知半解&#xff0c;知其然不知其所以然。好好研读这篇文章&#xff0c;相信会让你有种恍然大悟的感觉。 RF工程常被视为…

【Selenium学习】环境搭建 API学习

目录 一、javaSelenium的环境搭建&#xff1f; 二、认识Selenium 1、什么是自动化&#xff1f; 2、什么是Selenium? (重点) 3、selenium的工作原理&#xff1f;&#xff08;重点&#xff09; 三、Selenium操作元素API&#xff08;重点&#xff09; 第一部分&#…

【数据结构OJ题】合并两个有序链表

原题链接&#xff1a;https://leetcode.cn/problems/merge-two-sorted-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 可以先创建一个空链表&#xff0c;然后依次从两个有序链表中选取最小的进行尾插操作。&#xff08;有点类似双…

【数据结构OJ题】环形链表

原题链接&#xff1a;https://leetcode.cn/problems/linked-list-cycle/description/ 1. 题目描述 2. 思路分析 整体思路&#xff1a;定义快慢指针fast&#xff0c;slow&#xff0c;如果链表确实有环&#xff0c;fast指针一定会在环内追上slow指针。 即慢指针一次走一步&…

分布式 | 如何搭建 DBLE 的 JVM 指标监控系统

本篇文章采用 Docker 方式搭建 Grafana Prometheus 实现对 DBLE 的 JVM 相关指标的监控系统。 作者&#xff1a;文韵涵 爱可生 DBLE 团队开发成员&#xff0c;主要负责 DBLE 需求开发&#xff0c;故障排查和社区问题解答。 本文来源&#xff1a;原创投稿 爱可生开源社区出品&a…

“开发和运维”只是一个开始,最终目标是构建高质量的软件工程

随着技术的飞速发展&#xff0c;软件行业不断寻求改进和创新的方法来提供更高质量的产品。在这方面&#xff0c;DevOps已经展现出了巨大的潜力。通过打破开发和运维之间的壁垒&#xff0c;DevOps将持续集成、持续交付和自动化流程引入到软件开发中&#xff0c;使团队能够更快地…

PSP - 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132334671 Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization Open…

循环队列的实现(c语言)

前言 循环队列是队列的一种特殊的结构&#xff0c;在生产者——消费者模型中常常使用它&#xff0c; 它在逻辑上是一个环形的连续的结构。在物理可以使用数组来实现。 目录 1.循环队列的逻辑结构 2.空的循环队列和满的循环队列 3.循环队列插入和删除 4.代码实现 …

关于小程序收集用户手机号行为的规范

手机号在日常生活中被广泛使用&#xff0c;是重要的用户个人信息&#xff0c;小程序开发者应在用户明确同意的前提下&#xff0c;依法合规地处理用户的手机号信息。 而部分开发者在处理用户手机号过程中&#xff0c;存在不规范收集行为&#xff0c;影响了用户的正常使用体验&a…

如何使用ChatGPT创建个性化的健身锻炼计划

ChatGPT广泛应用于各个行业&#xff0c;健身也不例外。 ChatGPT 在健身领域的一个常用案例是创建个性化的锻炼计划。 在要求 ChatGPT 创建锻炼计划时&#xff0c;简单地输入自己的目标和当前的健身水平是一个很好的开始。完成此操作后&#xff0c;你还可以使用其他提示和措施来…

视频汇聚集中存储EasyCVR平台调用iframe地址视频无法播放,该如何解决?

安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中存储、视频存储磁盘阵列、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、AI算法中台智能分析无缝…

Git 删除 GitHub仓库的文件

新建文件夹 git bash here 在新建的文件夹里右键git bash here打开终端&#xff0c;并执行git init初始化仓库 git clone <你的地址> 找到github上要删除的仓库地址&#xff0c;并复制&#xff0c;在终端里输入git clone <你的地址> 要删除文件的库里右键git b…

使用 Apache Kafka 和 Go 将数据引入 OpenSearch

需要编写自定义集成层来满足数据管道中的特定要求&#xff1f;了解如何使用 Go 通过 Kafka 和 OpenSearch 实现此目的。 可扩展的数据摄取是OpenSearch等大规模分布式搜索和分析引擎的一个关键方面。构建实时数据摄取管道的方法之一是使用Apache Kafka。它是一个开源事件流平台…

Ceph如何操作底层对象数据

1.基本原理介绍 1.1 ceph中的对象(object) 在Ceph存储中&#xff0c;一切数据最终都会以对象(Object)的形式存储在硬盘&#xff08;OSD&#xff09;上&#xff0c;每个的Object默认大小为4M。 通过rados命令&#xff0c;可以查看一个存储池中的所有object信息&#xff0c;例如…

配资平台app(正规股票配资软件)架构是怎么搭建的?

随着股票市场的发展&#xff0c;越来越多的投资者开始尝试使用股票配资平台进行杠杆炒股&#xff0c;因此&#xff0c;搭建一套稳定、可靠的配资平台app架构显得尤为重要。本文将介绍配资平台app架构设计的关键要素&#xff0c;以及建立一个正规的配资平台app所需考虑的问题。 …

独立站站群模式是什么意思?站群模式的定义?自建站站群策略含义是什么?

什么是独立站站群模式&#xff1f; 在当今数字化时代&#xff0c;互联网已经成为了人们生活中不可或缺的一部分。随着互联网的发展&#xff0c;独立站站群模式逐渐引起了人们的关注。那么&#xff0c;究竟什么是独立站站群模式呢&#xff1f;让我们一起深入了解一下。 独立站…

85-基于stm32单片机厨房MQ4天然气泄露浓度DHT11温湿度监测报警系统Proteus仿真+源码...

资料编号&#xff1a;085 一&#xff1a;功能介绍&#xff1a; 1、采用stm32单片机OLED显示屏MQ4可燃气体浓度检测DHT11温湿度电机按键蜂鸣器&#xff0c;制作一个温湿度采集、MQ4可燃气体浓度采集&#xff0c;OLED显示相关数据&#xff0c; 2、通过按键设置温度上限、可燃气体…

高性能本地缓存Ristretto(四)—— NumCounters 与 MaxCost参数的设置

ristretto 参数 我在使用ristretto时&#xff0c;对于参数的设置有些疑问。主要是 NumCounters &#xff0c;MaxCost 分别表示什么含义&#xff0c;以及如何确定其数值的问题。 在此记录并分享一下&#xff0c;欢迎各位批评指正&#xff0c;谢谢 官方的指导 先看一下官方的…

模糊测试面面观 | 模糊测试工具知多少

自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来&#xff0c;模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法&#xff0c;旨在通过向程序输入模糊、随机、异常的数据&#xff0c;探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐…