8.文件存储空间管理

第四章 文件管理

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系统采用的策略,适合大型文件系统。成组链接法的规则比较复杂,并且不太方便用文字进行描述,所以这个知识点很难作为考题进行考察,不过只要理解了刚才分析的过程即使考到了也能够解决。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成集云 | 电子签署集成腾讯云企业网盘 | 解决方案

源系统成集云目标系统 方案介绍 电子签署是通过电子方式完成合同、文件或其他文件的签署过程。相较于传统的纸质签署&#xff0c;电子签署具有更高效、更便捷、更安全的优势。 在电子签署过程中&#xff0c;使用电子签名技术来验证签署者的身份并确保签署文件的完整性。电子…

万宾燃气管网监测解决方案,守护城市生命线安全

方案背景 城市燃气管网作为连接天然气长输管线与天然气用户的桥梁&#xff0c;担负着向企业和居民用户直接供气的重要职责。随着城市燃气需求的急剧增加&#xff0c;城市燃气管网规模日趋庞大&#xff0c;安全隐患和风险也随之增加。目前&#xff0c;我国燃气管网的运行仍存在…

AWS EKS 集群自动扩容 Cluster Autoscaler

文章目录 一&#xff0c;需求工作需求说明 二&#xff0c;部署精简命令执行1&#xff0c;要求2&#xff0c;查看EC2 Auto Scaling groups Tag3&#xff0c;创建Serviceaccount需要的Policy&#xff0c;Role4&#xff0c;部署Cluster Autoscaler5&#xff0c;验证6&#xff0c;常…

微服务系列文章之 Springboot+Vue实现登录注册

一、springBoot 创建springBoot项目 分为三个包&#xff0c;分别为controller&#xff0c;service&#xff0c; dao以及resource目录下的xml文件。 添加pom.xml 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mave…

macOS - 安装使用 libvirt、virsh

文章目录 关于 libvirt使用安装启动服务virsh 交互模式virsh 帮助命令 关于 libvirt libvirt 官网&#xff1a; https://libvirt.org/gitlab : https://gitlab.com/libvirt/libvirtgithub : https://github.com/libvirt/libvirt 只读&#xff0c;gitlab 的镜像 libvirt是一套…

学习笔记:Opencv实现图像特征提取算法SIFT

2023.8.19 为了在暑假内实现深度学习的进阶学习&#xff0c;特意学习一下传统算法&#xff0c;分享学习心得&#xff0c;记录学习日常 SIFT的百科&#xff1a; SIFT Scale Invariant Feature Transform, 尺度不变特征转换 全网最详细SIFT算法原理实现_ssift算法_Tc.小浩的博客…

hive高频使用的拼接函数及“避坑”

hive高频使用的拼接函数及“避坑” 说到拼接函数应用场景和使用频次还是非常高&#xff0c;比如一个员工在公司充当多个角色&#xff0c;我们在底层存数的时候往往是多行&#xff0c;但是应用的时候我们通常会只需要一行&#xff0c;角色字段进行拼接&#xff0c;这样join其他…

Mariadb高可用MHA

目录 前言 一、概述 &#xff08;一&#xff09;、概念 &#xff08;二&#xff09;、组成 &#xff08;三&#xff09;、特点 &#xff08;四&#xff09;、工作原理 二、案例 &#xff08;一&#xff09;、构建MHA 1.所有节点ssh免密登录 2、MySQL主从复制 &#x…

【计算机设计大赛】国赛一等奖项目分享——基于多端融合的化工安全生产监管可视化系统

文章目录 一、计算机设计大赛国赛一等奖二、项目背景三、项目简介四、系统架构五、系统功能结构六、项目特色&#xff08;1&#xff09;多端融合&#xff08;2&#xff09;数据可视化&#xff08;3&#xff09;计算机视觉&#xff08;目标检测&#xff09; 七、系统界面设计&am…

【ESP系列】ESP01S官方MQTT案例实验

前言 偶然发现安信可官网有ESP01S和STM32连接TCP和MQTT的案例。弄了一两天&#xff0c;把我使用的流程在这里记录下。MQTT的固件一定要烧录进去&#xff0c;默认固件是没有MQTT相关的AT指令的。 环境 Keli5&#xff0c;STM32F103C8T6 官方Keil工程链接&#xff1a;ESP8266的S…

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效…

换过3个工作,我却得出10年测试人的血泪经验

我跟大多数IT职场的测试新人起点差不多&#xff0c;在测试的这条路上&#xff0c;没有天生的聪明天资&#xff0c;也没有一个耀眼的学历。在北京这样一个随便一个同事不是清华的本硕&#xff0c;就是北邮北航的硕士下&#xff0c;自己也常常感到惭愧。 自己从事测试多年&#…

【SLAM】ORBSLAM34macOS: ORBSLAM3 Project 4(for) macOS Platform

文章目录 配置ORBSLAM34macOS 版本运行步骤&#xff1a;版本修复问题记录&#xff1a;编译 fix运行 fix 配置 硬件&#xff1a;MacBook Pro Intel CPU 系统&#xff1a;macOS Ventura 13.4.1 ORBSLAM34macOS 版本 https://github.com/phdsky/ORB_SLAM3/tree/macOS 运行步骤&…

【模拟集成电路】反馈系统——基础到进阶(一)

【模拟集成电路】反馈系统——基础到进阶 前言1 概述2 反馈电路特性2.1增益灵敏度降低2.2 终端阻抗变化2.3 带宽拓展2.4 非线性减小 3 放大器分类4 反馈检测和返回机制4.1 按照检测物理量分类4.2 按照检测拓扑连接分类 5 反馈结构分析6 二端口方法7 波特方法6 麦德布鲁克方法 前…

归并排序:从二路到多路

前言 我们所熟知的快速排序和归并排序都是非常优秀的排序算法。 但是快速排序和归并排序的一个区别就是&#xff1a;快速排序是一种内部排序&#xff0c;而归并排序是一种外部排序。 简单理解归并排序&#xff1a;递归地拆分&#xff0c;回溯过程中&#xff0c;将排序结果进…

Android12之com.android.media.swcodec无法生成apex问题(一百六十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

源于传承,擎领未来,新架构、新工艺下的“换心工程”——金融电子化访中电金信副总经理、研究院院长况文川

当前&#xff0c;商业银行的经营环境正在发生着深刻而复杂的变化&#xff0c;在深化改革主旋律的指引下&#xff0c;数字化转型已成为我国商业银行普遍认同、广泛采用的战略性举措。核心系统作为承载银行业务的关键支柱系统&#xff0c;一直是各银行在金融科技建设中重点关注和…

多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)

多种方法实现 Nginx 隐藏式跳转(隐式URL,即浏览器 URL 跳转后保持不变)。 一个新项目,后端使用 PHP 实现,前端不做路由,提供一个模板,由后端路由控制。 Route::get(pages/{name}, [\App\Http\Controllers\ResourceController::class, getResourceVersion])

Redis数据结构——快速列表quicklist、快表

定义 Redis中的数据结构&#xff0c;链表和压缩列表这两种数据结构是列表对象的底层实现方式。 当时考虑到链表的附加空间太大&#xff0c;节点的内存都是单独分配的&#xff0c;还会导致内存碎片化问题严重。 因此从Redis3.2开始&#xff0c;对列表的底层数据结构进行了改造&…

css学习1

1、样式定义如何显示元素。 2、样式通常保存至外部的css文件中。 3、样式可以使内容与表现分离。 4、css主要有两部分组成&#xff1a;选择器与一条或多条声明。 选择器通常为要改变的html元素&#xff0c;每条声明由一个属性和一个值组成。每个属性有一个值&#xff0c;属性…