【操作系统】文件系统的实现

news2024/11/17 17:53:08

文章目录

  • 文件系统的层次结构
  • 文件系统的实现
    • 目录实现
      • 线性列表
      • 哈希表
    • 文件的实现
      • 连续分配
      • 链接分配
      • 索引分配
    • 文件存储空间管理
      • 空闲表法与空闲链表法
      • 成组链接法
      • 位示图法

文件系统的层次结构

文件系统从上往下分为了五层,分别是用户调用接口、文件目录系统、存取控制模块、逻辑文件系统与文件信息缓冲区、物理文件系统。

在这里插入图片描述

文件系统的实现

目录实现

在操作系统中,目录实现主要有两种方式:

  • 线性列表
  • 哈希表

线性列表

线性列表是一种常见的数据结构,有链表和数组两种。我们将FCB(文件控制块)中的信息简化为文件名与文件索引节点指针后,文件的目录结构如下:

链表:
在这里插入图片描述

数组:
在这里插入图片描述

哈希表

哈希表依赖于哈希算法,是一种散列算法,文件名进行哈希计算后得到一个值,将这个值作为索引。相较于线性列表,哈希表的方式使得文件名与索引之间建立了一种映射关系,查询效率更高。

在这里插入图片描述

文件的实现

文件最终是保存在磁盘上,磁盘的存储单位通常以一个固定大小作为分区(比如4K)。这样整个磁盘就被分为了很多个大小一致的盘块。

在这里插入图片描述
在这个前提下,文件在磁盘进行存储时,就有三种分配方式:

  • 连续分配;
  • 链接分配;
  • 索引分配;

连续分配

连续分配的概念很简单,就是文件在分配到磁盘时,所分配的盘区是连续的。在保存文件存储地址时,只需要保存起始块号以及所占用的块号数量或者结束块号即可。

这种方式实现简单,访问速度块。但是不方便扩展(比如一个文件分了0、1、2后还需要继续追加文件内容,3号块已被占用,就导致无法扩展),同时还有有大量的磁盘碎片。

在这里插入图片描述

链接分配

链接分配,其实就是采用了链表这一数据结构来实现文件的存储。 因此我们需要额外的开销来保存每个盘块的下一个盘块信息。

如果下一个盘块的信息保存在盘块内,称之为隐式链接

在这里插入图片描述
但是对于脆弱的机械磁盘而言,一旦收到轻微损伤,导致某一盘块中的链接信息丢失,将会导致整个链表断开,从而丢失文件。针对这个问题,提出了显式链接

显示链接将链表的下一盘块信息提取出来进行专门的维护,即:FAT文件分配表。在FAT中,如果下一块号为**-1**,表示该号块是链表的最后一个块号-2表示当前块号是空闲状态

在这里插入图片描述
链接分配意味着操作系统需要将FAT表加载至内存,如果磁盘很大,盘块很多,其实还要占用较大的内存空间。为了优化这个问题,就提出了索引分配方式。

索引分配

索引分配,存放的是文件名对应的索引块号,而不是其实块号。根据索引块号找到对应的盘块,该存储索引数据的盘块保存着文件的索引表,由逻辑块号和物理块号组成。

在这里插入图片描述
以上图为例,文件的索引表是一个数组,数组的每个值是一个整数,占4B。由于每个盘块大小为4K,因此一个盘块最多能存放1024个索引。即一个索引块最多关联1024个盘块,也就是4M。

4M对于文件而言,实在太小了,毕竟很多文件动辄几百兆甚至上G。因此一个文件必须多个盘块作为索引表的存储载体。

结合文件的分配方式,可以采用链接分配方式,即多个索引表的盘块使用链表结构进行连接。

相较于链接方式,与操作系统内存分配方式类似,可以采用多级思想,即使用多级的索引结构。如果使用二级索引,则最多可以存储1024个一级索引1024个二级索引4K=4G文件。

在这里插入图片描述
当然,上图展示的二级索引基础上还可以优化,比如将二级索引表中的热点数据直接存放于一级索引表中,可以提升文件读取效率。这种方式称为混合索引

文件存储空间管理

文件分配方式针对的是已分配的文件以及对应的磁盘空间。而文件存储空间管理,针对空闲的磁盘空间的管理。

物理磁盘通常会在逻辑上分成多个区域(比如卷C、卷D),而每个分区中又会分为目录区、文件区。目录区所存储的是数据结构(如FCB);文件区存放的是文件的数据。

在这里插入图片描述
文件的存储空间管理有以下几种方式:

  • 空闲表法;
  • 空闲链表法;
  • 成组链接法;
  • 位示图法;

空闲表法与空闲链表法

空闲表法就是将磁盘中那些空闲的盘块信息记录在空闲盘块表中。如果使用数组结构就是空闲表法,如果使用链接结构就是空闲链表法。

在这里插入图片描述
对于空闲链表法,如果把每个空闲盘块链接起来,称为“空闲盘块链”;如果结合空闲表法,将空闲表法的空闲盘块表的每项数据通过链表保存,称为“空闲盘块链”。

在这里插入图片描述
但是这两种方式在面对大量盘块时,链表过长,这些数据结构要加载到内存中导致占用内存空间大且效率不高

成组链接法

成组链接发,使用链表以及栈的数据结构。每个空闲盘号栈存放了固定数量的空闲盘号数据。

  • 超级块:通常可能从目录区的第一个盘块开始,存储了第一个空闲盘号栈信息;
  • 每个空闲盘号栈的第一个元素是特殊的,它不仅存放了自己的盘号,也存储着下一个空闲盘号栈的信息(相当于指针);
  • 倒数第二个空闲盘号栈的栈底是特殊的,保存特殊值0或者-1,表示后面一个空闲盘号栈式最后一个;

系统启动时,会将第一组连续的空闲扇区(根据超级块)加载入内存中,在进行盘块分配时依次出栈,到栈底时根据栈底盘号元素中保存的数据链接到下一空闲盘号栈。

盘号回收的时候,在一个已有的空闲盘号栈装满后,新构造一个空闲盘号栈,然后将其添加到整个链的最前面。

整个流程的示意图如下:

在这里插入图片描述

位示图法

位示图法就是构建一个二维表,每个坐标表示一个盘块,用0表示对于盘块空闲,1表示对应盘块已分配。

其说明如下图:

在这里插入图片描述

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

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

相关文章

【腾讯云云上实验室】探索保护数据之盾背后的安全监控机制

当今数字化时代,数据安全成为了企业和个人最为关注的重要议题之一。随着数据规模的不断增长和数据应用的广泛普及,如何保护数据的安全性和隐私性成为了迫切的需求。 今天,我将带领大家一起探索腾讯云云上实验室所推出的向量数据库&#xff0c…

Django QuerySet.order_by SQL注入漏洞(CVE-2021-35042)

漏洞描述 Django 于 2021年7月1日发布了一个安全更新,修复了函数QuerySet.order_by中的 SQL 注入漏洞。 参考链接: Django security releases issued: 3.2.5 and 3.1.13 | Weblog | Django 该漏洞需要开发人员使用order_by功能。此外,还可…

echarts设置容器宽度设置为100%只显示100px宽度

在使用echarts时,写在tab页中的图表宽度明明设成了100%,但是在页面上实际却只有100px宽 原因很简单,在tab页中,图表的父容器div是隐藏的(display:none),图表在执行js初始化的时候找…

比起转本备考不努力,更让人痛心的是这五点

在转本考试中,有一部分同学花费了很多时间去学习,看似很努力,却没有太大的进步与成果。 比起不努力,努力了没有效果才是更让人心痛的。下面这五点行为,希望大家一定要避免!一、纠结转本我们身边可能不乏转…

基本微信小程序的图书馆座位管理系统

项目介绍 图书馆因有良好的学习氛围、大量的学习资源吸引大家前来学习,图书馆还未开馆就有大量的用户在门口排队等待,有限的座位与日益增加的自主学习者之间形成了供不应求的现象,再加上不了解图书馆的座位使用情况和恶意占座等现象,使得有限的学习座位越发紧张。本团队针对此…

10年测试老鸟,自动化测试经验10条建议,一路狂飙...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、哪一刻&#x…

AIOps探索 | 应急处置中排障的降本增效方法探索(下)

文章来源:公众号ID-布博士(擎创科技资深产品专家) 哈喽~上期内容我们分享了传统调用链系统与CMDB系统的缺陷、服务所有权模型是什么、服务所有权模型分类。这期我们来说一说如何落地服务所有权模型,以及好用的模型推荐&#xff0…

Netty 模型理解

参考文章 1 参考文章 2 官网API文档 Reactor模型 Netty模型 Netty主要基于主从Reactor多线程模型进行了一定的修改,该模型包括以下几个组件: MainReactor(主Reactor):负责处理客户端的连接请求。它监听服务器上的端口…

【洛谷 P1636】Einstein学画画 题解(图论+欧拉通路)

Einstein学画画 题目描述 Einstein 学起了画画。 此人比较懒~~,他希望用最少的笔画画出一张画…… 给定一个无向图,包含 n n n 个顶点(编号 1 ∼ n 1 \sim n 1∼n), m m m 条边,求最少用多少笔可以画…

京东采销面对面,洞悉行业新趋势 京东3C数码生态大会在武汉圆满举行

为促进湖北省3C数码产业发展,本地企业降本增效、促进行业交流、充分发挥京东集团全链路生态服务能力,支持地方3C特色产业提质增量。2023年11月23日,由京东零售、京东物流主办,湖北省电子商务行业协会联合协办的“聚力共赢、携手共…

《C++ Primer》第10章 算法(一)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 10.1 概述(P336) 大多数算法定义在头文件 algorithm 中,头文件 numeric 中也定义了一组数值泛型算法。 一般情况下,算法不直接操作容器,而是通过…

SOLIDWORKS 2024新功能之CAM篇

SOLIDWORKS 2024 新功能 CAM篇目录概述 • 附加探测周期参数 • 反转切割的固定循环螺纹加工 • 包含装配体的零件的正确进给/速度数据 • Heidenhain 探测类型 • 2.5 轴特征向导中岛屿的终止条件 • 链接轮廓铣削操作的切入引导和切出引导参数 • 螺纹铣削操作的最小孔…

SpringCloud 微服务全栈体系(十七)

第十一章 分布式搜索引擎 elasticsearch 七、搜索结果处理 搜索的结果可以按照用户指定的方式去处理或展示。 1. 排序 elasticsearch 默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有&#…

标题导航点击导航滑动到指定位置滑动到指定位置选中对应导航vue3

菜单导航栏点击导航滑动到指定位置&滑动到指定位置选中对应导航 效果 实现 话不多说直接上代码,有用素质三连(点赞、评论、加关注) import { defineComponent, onBeforeUnmount, onMounted, reactive, ref } from "vue"; import { map } from &quo…

家用小型洗衣机哪款性价比高?口碑最好迷你洗衣机排行榜

由于我们的内衣、内裤和袜子等等贴身小件衣物的清洁频率比一般的衣物要高。而且,如果我们人工手洗的话,不仅会大大浪费了我们的时间,而且还不能进行对这些贴身的以为进行深层消毒和除菌。这种情况下,就得需要一台专门用于清洗内衣…

怎么去掉视频水印?分享三种视频去水印技巧,轻松搞定!

怎么去掉视频水印?在分享视频时,我们常常会遇到因为水印而影响观感的问题,因此,掌握有效的去水印方法显得尤为重要,随着技术的进步,现在有多种方法可以帮助我们去除视频中的水印。 接下来分享三种简单且有效…

【算法挨揍日记】day33——1027. 最长等差数列、446. 等差数列划分 II - 子序列

1027. 最长等差数列 1027. 最长等差数列 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度。 回想一下&#xff0c;nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] &#xff0c;且 0 < i1 < i2 < ... < …

两个链表的第一个公共节点(相交链表),剑指offer,力扣

目录 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff08;双指针&#xff09;&#xff1a; 具体思路流程&#xff1a; 代码实现&#xff1a; 算法思路补充证明&#xff1a; 力扣题目地…

Doris中的物化视图-查询(十九)

物化视图创建完成后&#xff0c;用户的查询会根据规则自动匹配到最优的物化视图。 比如我们有一张销售记录明细表&#xff0c;并且在这个明细表上创建了三张物化视图。一个存储了不同时间不同销售员的售卖量&#xff0c;一个存储了不同时间不同门店的销售量&#xff0c;以及每…

图数据库HugeGraph:HugeGraph-Hubble基于Web的可视化图管理初体验

原创/朱季谦 一、HugeGraph-Hubble简介 关于HugeGraph&#xff0c;官方资料是这样介绍的&#xff0c;它是一款易用、高效、通用的开源图数据库系统&#xff08;Graph Database&#xff09;&#xff0c; 实现了 Apache TinkerPop3 框架及完全兼容 Gremlin 查询语言&#xff0c…