码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 第四章 文件管理 五、文件存储空间管理


    目录

    一、逻辑结构和物理结构的比较

    二、空闲表法

    1、磁盘中的空闲块表

    2、例子

    3、如何回收空闲区间

    ①回收区的前后都没有相邻空闲区;

    ②回收区的前后都是空闲区;

    ③回收区前面是空闲区;

    ④回收区后面是空闲区;

    三、空闲链表法

    1、分类

    2、空闲盘块链

    (1)定义:

    (2)如何分配:

    (3)如何回收:

    (4)优点:

    2、空闲盘区链

    (1)定义:

    (2)如何分配:

    (3)如何回收:

    (4)优点:

    四、位示图法

    1、使用矩阵来表示

    (1)如何分配:

    (2)如何回收:

    五、成组链接法

    1、定义:

    2、超级块:

    (1)定义:

    3、如何分配:

    4、如何回收:

    六、总结


    一、逻辑结构和物理结构的比较

    二、空闲表法

    1、磁盘中的空闲块表

    2、例子

    (1)假设要创建一个占三个磁盘块的文件。

    (2)找到起始块号为10的空闲区间有3个空闲块。

    (3)存入,并更改空闲块表。

    3、如何回收空闲区间

    ①回收区的前后都没有相邻空闲区;

    增加一个空闲区

    ②回收区的前后都是空闲区;

    减少一个空闲区

    ③回收区前面是空闲区;

    不变

    ④回收区后面是空闲区;

    不变

    三、空闲链表法

    1、分类

    2、空闲盘块链

    (1)定义:

    操作系统保存着链头、链尾指针。

    (2)如何分配:

    若某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。

    (3)如何回收:

    回收的盘块依次挂到链尾,并修改空闲链的链尾指针。

    (4)优点:

    适用于离散分配的物理结构。为文件分配多个盘块时可能要重复多次操作。

    2、空闲盘区链

    (1)定义:

    操作系统保存着链头、链尾指针。

    (2)如何分配:
    • 若某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。
    • 若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。
    (3)如何回收:
    • 若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。
    • 若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。
    (4)优点:

    离散分配、连续分配都适用。为一个文件分配多个盘块时效率更高。

    四、位示图法

    1、使用矩阵来表示

    (1)如何分配:

    若文件需要k个块,

    • ①顺序扫描位示图,找到K个相邻或不相邻的“o”;
    • ②根据字号、位号算出对应的盘块号,将相应盘块分配给文件;
    • ③将相应位设置为“1”。
    (2)如何回收:
    • ①根据回收的盘块号计算出对应的字号、位号;
    • ②将相应二进制位设为“o”
       

    五、成组链接法

    1、定义:

    • 空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。
    • UNIX系统中采用了成组链接法对磁盘空闲块进行管理。
    • 文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致。

    2、超级块:

    (1)定义:

    所谓超级块,其实就是一个索引块,它的头存的是下一个超级块的地址,其他存的是空闲块的地址

    3、如何分配:

    Eg :需要1个空闲块

    • ①检查第一个分组的块数是否足够。1<100,因此是足够的。
    • ②分配第一个分组中的1个空闲块,并修改相应数据。

    Eg:需要100个空闲块

    • ①检查第一个分组的块数是否足够。100=100,是足够的。
    • ②分配第一个分组中的100个空闲块。但是由于300号块内存放了再下一组的信息,因此300号块的数据需要复制到超级块中。

    4、如何回收:

    Eg :假设每个分组最多为100个空闲块,此时第一个分组已有100个块,还要再回收一块。

    需要将超级块中的数据复制到新回收的块中,并修改超级块的内容,让新回收的块成为第一个分组。

    六、总结

  • 相关阅读:
    【Docker】Docker Swarm介绍与环境搭建
    申请专利流程及费用。
    jeecg vue3版本集成达梦数据库
    【数之道 08】走进“卷积神经网络“,了解图像识别背后的原理
    vue2使用vuedraggable实现拖拽删除添加重置功能
    HTC手机如何进行官方解锁Unlock
    【必知必会的MySQL知识】①初探MySQL
    jenkins安装以及基本配置
    【soc】bootrom注意事项
    工信部—高级软件开发工程师认证
  • 原文地址:https://blog.csdn.net/icbbm/article/details/134045289
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号