文件系统基础 (二)——文件的物理结构

news2024/9/20 5:52:40

目录

  • 一. 前言
  • 二. 连续(顺序)分配
  • 三. 链接分配
    • 隐式链接
    • 显式链接
  • 三. 索引分配
    • 单级索引分配
    • 多级索引分配
    • 混合索引分配
    • 混合索引分配相关计算
  • 五. 总结

一. 前言

文件的物理结构就是研究文件的实现,即文件数据在物理存储设备上是如何分布和组织的。

  • 文件的分配方式:对磁盘非空闲块的管理。
  • 文件存储空间管理:对磁盘空闲块的管理。

类似于内存分页,磁盘中内存单元也被分为一个个的块,称为磁盘块,大小通常与内存页面大小相同。内存与磁盘之间的数据交换(磁盘 I/O)单位是块。

二. 连续(顺序)分配

  • 要求每个文件在磁盘上占有一组连续的块,如下图所示。(磁盘地址定义了磁盘上的一个线性排序,使得进程访问磁盘需要的寻道数和寻道时间最小)

联想截图_20240728162937.png

  • 优点
    • 支持顺序访问和直接访问。
    • 顺序访问容易,并且速度快,文件占用的块可能位于一条或几条相邻的磁道,磁头移动距离最小
  • 缺点
    • 为一个文件分配连续的存储空间,会产生许多外部碎片。【与内存分配类似】
    • 必须事先知道文件长度,无法满足文件动态增长的要求,否则会覆盖物理上相邻的后续文件。
    • 为保持文件的有序性,删除和插入记录时,需要对相邻的记录做物理上的移动。

三. 链接分配

链接分配是一种采用离散分配的方式。

  • 优点
    • 消除了磁盘外部碎片,提高磁盘利用率
    • 便于动态为文件分配盘块,因此无需动态知道文件的大小
    • 文件的插入,删除和修改很方便。
  • 链接分配分为:隐式链接,显式链接。

隐式链接

  • 目录项仅含有文件第一块和最后一块的指针(盘块号)。
  • 每个文件对应一个磁盘块的链表,磁盘块分布在磁盘任何地方。
  • 文件除最后一个盘块外,每个盘块都有一个指向文件下一个盘块的指针,指针对用户透明

联想截图_20240728170141.png

  • 优点

    • 方便拓展文件,不会有碎片问题,外存利用率高。
  • 缺点

    • 只支持顺序访问。访问文件的第 i 块,只能从第一块开始,通过盘块指针顺序查找到第 i 块,随机访问效率很低。
    • 稳定性问题,文件盘块中任何一个指针出问题,都会导致文件数据丢失。
    • 指向下一个盘块的指针也会耗费一定的存储空间。
  • 文件空间分配与簇的关系

    • 为了提高查找速度和减小指针所占用的存储空间,可以将几个盘块组成一个簇,按簇而不按块来分配
    • 可以大幅地减少查找时间,也可以改善许多算法的磁盘访问时间。

比如一簇为4块, 这样,指针所占的磁盘空间比例也要小得多。这种方法的代价是增加了内部碎片。

显式链接

  • 将用于链接文件的各物理块指针,显式地存放在内存的一张链接表中,整个磁盘仅设置一张,称为文件分配表(File Allocation Table,FAT)
  • 文件目录只需要记录文件起始块号,后续块号通过 FAT 查得。
  • FAT 的作用
    • 不难看出,FAT的表项与全部磁盘块一一对应
    • 并且可以用一个特殊的数字-1表示文件的最后一块,可以用-2表示这个磁盘块是空闲的(当然也可指定为-3,-4)。

因此,FAT还标记了空闲的磁盘块,操作系统可以通过FAT对磁盘空闲空间进行管理。当某进程请求系统分配一个磁盘块时,系统只需从FAT中找到-2的表项,并将对应的磁盘块分配给该进程即可。

联想截图_20240728170713.png

  • 优点
    • 支持顺序访问和直接访问
    • FAT 启动时就被读入内存,检索记录在内存中进行,显著提高了检索速度

由于不需要查找磁盘,故 显式链接查找速度比隐式链接快得多。

  • 方便对文件实现扩展
  • 缺点
    • FAT 需要占用一定的内存空间。

联想截图_20240728171422.png

三. 索引分配

单级索引分配

事实上,在打开某个文件时,只需将该文件对应的盘块的编号调入内存即可,完全没有必要将整个FAT调入内存。

  • 索引分配的思想:应该将每个文件所有的盘块号集中地放在一起,当访问到某个文件时,将该文件对应的盘块号一起调入内存即可。

为每个文件分配一个索引块(表),将分配给该文件的所有盘块号都记录在该索引块
联想截图_20240728182958.png

  • 优点
    • 支持直接访问,当要访问第 i 块时,索引块的第i个条目指向的便是文件的第i个块。
    • 索引分配也不会产生外部碎片。缺点是索引块增加了额外的存储空间开销
  • 缺点:每个文件必须有一个索引块
    • 当文件很小时,比如只有数个盘块,该方式仍为之分配一个索引块,此时索引块的利用率很低;
    • 当文件很大时,若其盘块号需要占用若干索引块,此时可通过链指针将各索引块按序链接起来,但这种方法是低效的。

多级索引分配

显然,当文件太大而索引块太多时,应该为这些索引块再建立一级索引,称为主索引,将第一个索引块的盘块号、第二个索引块的盘块号……填入该主索引表,这样,便形成了二级索引分配方式。
其原理类似于内存管理中的多级页表,如图4.10所示。查找时,通过主索引查找第二级索引,再通过第二级索引查找所需数据块。如果文件非常大,那么还可使用三级、四级索引分配方式。
联想截图_20240728183258.png

例如,假设盘块大小为4KB,每个盘块号占4B,一个索引块中可存放1024个盘块号,若采用两级索引,则支持的最大文件为1024×1024×4KB=4GB
联想截图_20240728183714.png联想截图_20240728183721.png

  • 优点
    • 极大加快了对大型文件的查找速度。
  • 缺点
    • 当访问一个盘块时,其所要启动磁盘的次数随着索引级数的增加而增多,即使是对数量众多的小文件也是如此。

由此可见,如果在文件系统中仅采用了多级索引组织方式,那么并不能获得理想的效果。

混合索引分配

为了能够较全面地照顾到小型、中型、大型和特大型文件,可采用混合索引分配方式。

  • 对于小文件,为了提高对众多小文件的访问速度,最好能将它们的每个盘块地址直接放入FCB,这样就可以直接从FCB中获得该文件的盘块地址,即为直接寻址。
  • 对于中型文件,可以采用单级索引分配,需要先从FCB中找到该文件的索引表,从中获得该文件的盘块地址,即为一次间址。
  • 对于大型或特大型文件,可以采用两级和三级索引分配。UNIX 系统采用的就是这种分配方式,在其索引节点中,共设有13个地址项,即i.addr(0)~i.addr(12),如图4.11所示。

联想截图_20240728184258.png

混合索引分配相关计算

  • 直接地址。为了提高对小文件的检索速度,在索引节点中可设置10个直接地址项,即用i.addr(0)~i.addr(9)来存放直接地址,即文件数据块的盘块号。假如每个盘块的大小为4KB,当文件不大于40KB时,便可直接从索引节点中读出该文件的全部盘块号。

  • 一次间接地址。对于中、大型文件,只采用直接地址并不现实的。为此,可再利用索引节点中的地址项i.addr(10)来提供一次间接地址,即采用一级索引分配。一次间接地址中记录了文件的一次间址块号,一次间址块就是索引块,其中记录了文件数据块的盘块号。一次间址块中可以存放1024个盘块号,可以表示1K×4KB=4MB大小的文件。因此,同时采用直接地址和一次间址,允许的文件最大长度为4MB+40KB。

  • 多次间接地址。当文件长度大于4MB+40KB时,还需利用地址项i.addr(11)来提供二次间接地址,即采用两级索引分配。二次间接地址中记录了文件的主索引块号,主索引块中记录了文件的一次间址块号。当地址项 i.addr(11)作为二次间址块时,可以表示1K×1K×4KB=4GB大小的文件。因此,同时采用直接地址、一次间址和二次间址时,允许的文件最大长度为4GB+4MB+40KB。同理,同时采用直接地址、一次间址、二次间址和三次间址时,允许的文件最大长度为4TB+4GB+4MB+40KB。

五. 总结

联想截图_20240728184449.png联想截图_20240728184458.png

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

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

相关文章

【计算机网络原理】网络层IP协议的总结和数据链路层以太网协议的总结.

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

anaconda searchanaconda show | conda 检索包资源安装指定版本包指定源安装命令package

conda issuehttp://t.csdnimg.cn/ndZZK 目录 常规安装 检索包资源 获取指定包的安装源&安装指令 安装指定包 常规安装 conda 常规安装xxx包 conda install xxx conda install有可能会受限于channel导致报错PackagesNotFoundError: The following packages are not av…

RedisTemplate、StringRedisTemplate、序列化器配置

Lettuce和Jedis RedisTemplate是SpringDataRedis中对JedisApi的高度封装,提供了Redis各种操作、 异常处理及序列化,支持发布订阅。 首先我们要知道SpringData是Spring中数据操作的模块,包括对各种数据库的集成,比如我们之前学过…

SpringBoot轻松实现多数据源切换

一.需求背景 项目需要实现在多个数据源之间读写数据,例如在 A 数据源和 B 数据源读取数据,然后在 C 数据源写入数据 或者 部分业务数据从 A 数据源中读取、部分从B数据源中读取诸如此类需求。本文将简单模拟在SpringBoot项目中实现不同数据源之间读取数…

数据结构:二分图以及判定二分图

文章目录 一、二分图的基本知识1、特性2、图示3、检查一个图是否为二分图3.1、着色的算法原理和思路3.2、算法示例:使用 BFS 检查二分图3.3、算法示例:使用 DFS 检查二分图 4、应用 二、例题1.LeetCode:785. 判断二分图2.Acwing:8…

软件开发中UML的基本概念与UML类图中存在哪些关系与如何绘制?

UML的概述 UML在维基百科中是这样子描述的 可以使用的工具这里网上说的有些花哨,我自己一般使用processon,里面的UML相关功能就很全。 UML类图的相关概念解释 解释一下什么是类图? 定义系统中的类,描述系统中类的属性和方法,就是描述类的内部结构,表示类与类之间的关…

手摸手教你撕碎西门子S7通讯协议04--S7COMM请求

1、S7通讯回顾 - (1)建立TCP连接 Socket.Connect-》已实现 - (2)发送访问请求 COTP-》已实现 - (3)交换通信信息 Setup Communication-》本节实现 - (4)执行相关操作 …

诱骗IoT恶意软件跟踪CC服务器

工作背景 在分析 IoT 僵尸网络时,识别C&C 服务器至关重要。C&C 服务器的 IP 地址一直都是商业威胁情报的重要组成部分,由于 C&C 服务器通信协议日渐复杂并且活跃周期较短,时效性和准确性也非常重要。如果可以自动化识别 IoT 恶意…

深度学习实战笔记3循环神经网络实现

我们要训练一个基于循环神经网络的字符级语言模型,根据用户提供的文本的前缀生成后续文本。 import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l batch_size, num_steps 32, 35 train_iter, voc…

防震减灾知识竞赛的规则和流程方案

防震减灾知识竞赛的规则主要包括赛制、比赛形式、参赛对象、竞赛内容等方面。 赛制:通常包括选拔赛、分区预赛和全国决赛三个阶段。选拔赛可以根据地区实际情况选择合适的组织形式,预赛和决赛则以现场比赛形式进行,由主办单位统一组织。 比…

掌握 Spring Boot + MyBatis-Plus 动态数据源切换,只要5分钟!

数据量猛增&#xff0c;通过动态数据源切换&#xff0c;我们不仅能提高查询效率&#xff0c;还能保证系统的高可用性。 通过将写操作集中在主库&#xff0c;读操作分散到多个从库&#xff0c;可以有效减轻数据库的压力。 在pom.xml中添加以下依赖&#xff1a; xml <depend…

记录|LabVIEW从0开始

目录 前言一、表达式节点和公式节点二、脚本与公式2.1 公式 三、Excel表格3.1 位置3.2 案例&#xff1a;波形值存入Excel表中3.3 案例&#xff1a;行写入&#xff0c;列写入 四、时间格式化4.1 获取当前时间4.2 对当前时间进行格式化 更新时间 前言 参考视频&#xff1a; LabVI…

hadoop学习(二)

一.MapReduce 1.1定义&#xff1a;是一个分布式运算程序的编程框架 1.2核心功能&#xff1a;将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在一个Hadoop集群上。 1.3优点 1&#xff09;易于编程 它简单的实现一些接口&#…

从入门到精通:电商设计师的职业发展指南

在当今数字时代&#xff0c;电商设计师的作用越来越重要。从电子商务网站的整体造型设计到产品页面的具体布局&#xff0c;他们的工作范围是电子商务企业成功的关键因素之一。然而&#xff0c;并不是每个人都对这个职业有深刻的理解。因此&#xff0c;在本文中&#xff0c;我们…

web3d值得学习并长期发展,性价比高吗?

在数字化浪潮日益汹涌的今天&#xff0c;Web3D技术以其独特的魅力和广泛的应用前景&#xff0c;逐渐成为技术领域的焦点。对于许多热衷于技术探索和创新的人来说&#xff0c;学习并长期发展Web3D技术无疑是一个值得考虑的选择。那么&#xff0c;Web3D技术的学习和发展究竟是否性…

华为openEuler 24.03 LTS系统安装系统后用SSH工具不能连接

sudo dnf install vim #安装VIM vim /etc/ssh/sshd_config #修改文件如图systemctl restart sshd #重启服务再用SSH工具连接成功

【树莓派+OpenCV+STM32】智能小车巡线_提取线路数据并通过串口通信传输

一、所用材料 树莓派4B树莓派官方摄像头STM32F103C8T6最小系统板 二、实现功能 在树莓派上用OpenCV对摄像头中的图像进行处理&#xff0c;将图像处理后的数据通过串口通信给到下位机STM32F103C8T6&#xff0c;再由下位机给出控制信号&#xff0c;利用pid算法实现对小车运动轨…

备忘录系统

目录 一、 系统简介 1.简介 2需求分析 3 编程环境与工具 二、 系统总体设计 1 系统的功能模块图。 2 各功能模块简介 3项目结构 4 三、 主要业务流程 &#xff08;1&#xff09;用户及管理员登录流程图 &#xff08;2&#xff09;信息添加流程 &#xff0…

强烈推荐这三款IOS应用,让你的生活更美好

Dino记账 Dino记账是一款结合了简洁设计和强大功能的记账应用&#xff0c;它通过多维度图表帮助用户轻松掌握金钱流向。应用界面明亮且配色突出&#xff0c;使得记录内容易于阅读&#xff0c;让记账和管理账目变得更加简单。 主要特性&#xff1a; 极简风格与易用性&#xff1…

史上最全Spring的@Transactional不生效的12大场景

一、事务不生效 1、访问权限的问题 在Spring框架中&#xff0c;AbstractFallbackTransactionAttributeSource是用于确定一个给定的方法是否应该被事务管理的一个抽象类。它的computeTransactionAttribute方法用于计算并返回一个方法的TransactionAttribute。computeTransacti…