[操作系统] 文件系统管理和优化

【王道操作系统】4.1.5 文件管理空闲磁盘块的几种算法 基于《王道操作系统》得出的理论知识精华 阅读详情

文件系统管理和优化



1. 磁盘空间管理

几乎所有文件系统都把文件分割成固定大小的块来存储,各块之间不一定相邻。

  1. 块大小

    拥有大的块尺寸意味着小的文件会浪费大量磁盘空间。小的块尺寸意味着大多数文件会跨越多个块,即需要多次寻道与旋转延迟才能读出它们,浪费了时间。

  2. 记录空闲块

    有两种方法被广泛采用。

    1. 磁盘块链表

      每个块中包含尽可能多的空闲磁盘块号,对于1KB大小的块和32位的磁盘块号,空闲表中每个块包含有255个空闲块的块号(32位 = 4字节,1KB = 1024字节,1024/4 = 256,还需要一个位置存放指向下一个块的指针,所以是255)。对于一个500G的磁盘,需要190万个块才能存放这些地址。所以通常情况下,将这些空闲表存放在空闲块中,该方法比较适合磁盘快满时使用。

    2. 位图

      n个块的磁盘需要n位位图,每一位用1表示该块空闲,0表示已分配。对于500G硬盘,只需要60000个1KB的块。

    空闲块

2. 文件系统备份

将磁盘备份有两种方案:物理转储和逻辑转储

  1. 物理转储

    从磁盘的第0块开始,将全部的磁盘块按需输出,直到最后一块复制完毕。对于未使用的磁盘块不需要备份,如果转储程序能够访问管理空闲块的数据结构,就可以避免备份未使用的磁盘块。要注意的是原磁盘和得到备份的磁盘块并不是一一对应的,所以应该在每个磁盘块前写上磁盘块号码。

    另一方面需要关注的是坏块的转储。可以通过建立一个包含所有坏块的“文件”来解决,以确保这些坏块不会被使用和分配。所以在转储时,需要跳过这些块。

    物理存储的优点是简单,快速,但是不能跳过选定的目录,也不能增量转储。

  2. 逻辑转储

    从一个或几个指定的目录开始,递归地转储其自给定基准日期(如最近一次转储的日期)后所更改的全部文件和目录。在逻辑存储中,得到转储的磁盘会有一连串被标识过得目录和文件,可以按要求恢复特定文件或目录。

3. 逻辑转储算法

如图,树中方框代表目录,圆圈代表文件。被阴影覆盖的项目代表在基准日期后被修改过,需要转储。到达修改过文件的所有目录也应该被转储,因为这样方便对文件的整体恢复。

文件树

该算法需要维持一个以i结点号为索引的位图。随着算法的执行,位图中的一些位会被设置或清除,算法分为四个阶段。

  1. 从起始目录开始(本例中为根目录)检查所有目录项,对每个修改过的文件在位图中标记,并递归标记所有目录(包括未被修改的)。
    步骤1

  2. 再次递归遍历目录树,并去掉目录书中所有不含被修改过的文件或目录的目录上的标记(这一阶段结束后所有被标记的文件和目录就是最后必须被转储的)。
    步骤2

  3. 以节点号为序,扫描i节点,并转储步骤2中所有标记的目录,并为这些目录添加目录属性前缀。
    步骤3

  4. 转储步骤2中所有标记的文件,并为这些文件添加文件属性前缀。
    步骤4

4. 文件系统一致性

使用程序检验文件系统一致性,包括:块的一致性检查和文件一致性检查。

  1. 块的一致性

    程序构造两张表,每张表为每一个块设立一个计数器,初始为0,第一个表中的计数器跟踪该块在文件中出现的次数,第二个表中的计数器跟踪该块在空闲表中出现的次数。

    接着检验程序使用原始设备读取全部i结点,从0开始。由i节点开始,可以建立相应文件中采用的全部块的块号表。每当读到一个块时,该块在第一个表中计数器加1。然后,程序检查空闲表或空闲位图,每当一个块未使用时,在第二张表中加1。

    检查完成后可能出现结果如下:

    1. 一致,即每一块要么在第一个表计数器为1,要么在第二个表计数器为1。

    2. 如果一个磁盘块在任何一张表中都是0,那么就称该块块丢失。解决方法是,检验程序将该块加入到空闲表中。

    3. 一个块在空闲表中出现了两次,即一个块在第二张表中数字为2。解决方法是,重新建立空闲表。

    4. 两个或多个文件中出现同一个数据块,即一个块在第一张表中数字为2。解决方法是,先分配一空闲块,将这个重复块的内容复制到空闲块中,然后把它插入到其中一个文件中。

  2. 文件一致性

    检验程序检查目录系统,同样创建一张计数表,但每个文件而不是一个块对应一个计数器。程序从根目录开始检验,沿着目录树递归,检查文件系统中的每个目录。对每个目录中的每个文件,将文件使用计数器加1。遇到硬连接,同样加一,但是符号连接不计数。

    检验完成后,会得到一张由i节点号索引的表,说明每个文件被多少个目录包含。然后,检验程序将这些数字与存储在文件i节点中的连接数目比较。

    最终可能得到的结果如下:

    1. i节点连接数与计数器相等,则说明文件系统一致

    2. i节点连接数大于计数器个数,说明即使所有该文件都被删除,计数仍是非0,i节点不会被删除。解决方法是,将i节点的值更新为计数器的值。

    3. i节点连接数小于计数器个数。可能导致一个目录指向错误i节点。解决方法同样是更新i节点值。

5. 文件系统性能

三种主要的优化措施

  1. 高速缓存

    常用算法为检查全部读请求,并检查高速缓存中是否有所需要的块。如果存在,可以直接执行读操作而无需访问磁盘。如果不存在,则将它读入到高速缓存,然后再复制到所需地方。为了快速确定所需块是否存在,通常使用散列表将设备和磁盘地址散列。

    为避免一致性遭到破坏(如一个块读进了高速缓存并进行过修改,但是在崩溃前没有写回磁盘),如果一个块关系到文件系统一致性且被修改,那应该立即将该块写回磁盘。该方法被称为通写高速缓存。

  2. 块提前读

    在需要用到块之前,提前将其写入高速缓存。对于许多顺序读的文件,预读操作很适合。但是对于随机存取文件,提前读策略并不好。

  3. 减少磁盘臂运动。

    把有可能顺序存取的块放在一起,最好是一个柱面上,以减少磁盘臂的移动次数。对于位图保存空闲块的系统来说,可以很简单的找到最近的空闲块。

    对于使用空闲表的系统,需要使用块簇技术。即不用块,而是连续块簇来跟踪存储区。例如,一个扇区512字节,一个块为两个扇区即1KB,但是按每两块即4个扇区来分配存盘存储区。不同于直接使用2KB的块,在高速缓存中依然使用1KB的块,磁盘与内存之间的数据传送也还是以1KB为单位进行,但在一个空闲的系统上顺序读取文件,寻道的次数可以减少一半。

    另一方面,在使用i节点的系统中,读取文件需要两次磁盘访问:一次访问i节点,一次访问块。为减少寻道时间,可以避免把磁盘开始处存放i节点,而是将磁盘凤城多个柱面组,每个组有自己的i结点、数据块和空闲表。


参考书目:现代操作系统第三版

现代操作系统 第四章 文件系统 习题 Chapter04 第四章 文件系统 习题 知识点小记 文件类型: ①普通文件:包含有用户信息的文件,分为ASCII文件和二进制文件。 ②目录:管理文件系统结构的系统文件; ③字符特殊文件(UNIX):与输入/输出有关,用于串行I/O类设备,如终端、打印机、网络等。 ④块特殊文件(UNIX):用于磁盘类设备。 文件访问方式:顺序访问、随机访问。 绝对路径名:由从根... 阅读详情

相关推荐

【操作系统】实验:文件系统

更深入理解了文件操作的系统命令实质内容和执行过程:通过实际操作文件的创建、删除、读取、写入和查找等命令,我不仅学会了如何使用这些命令,更重要的是理解了它们背后的执行机制和原理。其中,文件是数据的逻辑组织形式,目录是一种树形结构的组织形式,文件描述符是内核与文件之间的连接,i节点存储文件的元数据包括文件大小、创建时间、权限等信息,位图用于记录文件系统中的空闲块。文件系统是操作系统中用于管理和存储文件信息的软件机构,它负责在存储介质上组织文件的方法,并为用户提供文件的存储、检索、更新等功能。

m0_73970214的博客 1948

操作系统中 哪些优化方法能够提高文件访问速度

讲写数据写入缓冲区,并置上 延迟写 标志,以备不久之后访问,在读取当前盘块时,讲下一个要访问的盘块数据读入缓冲区。

iamy0u的博客 1919

操作系统:磁盘调度算法和文件系统

目录磁盘调度算法1. 先来先服务算法(FCFS)First Come First Service2. 最短寻道时间优先算法(SSTF) Shortest Seek Time First3. 扫描算法(SCAN)电梯调度 距离+方向4. 循环扫描算法(C-SCAN)5. 单向扫描文件系统基本概念文件系统与文件文件系统的功能文件属性和文件头文件描述符虚拟文件系统虚拟文件系统的目标虚拟文件系统的功能: 磁盘调度算法 1. 先来先服务算法(FCFS)First Come First Service 根据进程请求访

夏野和弦的博客 491

linux运行run文件_探索 Linux 上的 /run

Linux 系统在运行时数据方面的工作方式发生了微小但重大的变化。-- Sandra Henry-stocker(作者)如果你没有密切关注,你可能没有注意到 Linux 系统在运行时数据方面的工作方式有一些小但重大的变化。 它重新组织了文件系统中可访问的方式和位置,而这个变化在大约八年前就开始了。虽然这种变化可能不足以让你的袜子变湿,但它在 Linux 文件系统中提供了更多一致性,值得进行一些探索...

weixin_34404671的博客 1705

Linux 操作系统——文件系统管理

一、 Linux文件系统的基本概念 文件系统(File System)是磁盘上有特定格式的一片区域,操作系统利用文件系统保存和管理文件。不同的操作系统需要使用不同的文件系统,为了与其他操作系统兼容,通常操作系统都支持很多种类型的文件系统。Linux文件系统Linux系统使用ext2/ext3文件系统。在Linux系统中,存储数据的各种设备都属于块设备,对于磁盘设备,通常在0磁道第一个扇区上存放引导信息,称为主引导记录(MBR),该扇区不属于任何一个分区,每个分区包含许多数据块,可以认为是一系列块组的集合。在

m0_47635965的博客 1073

操作系统之文件系统

所有的应用程序都需要存储和检索信息。进程运行时,它能够在自己的存储空间内存储一定量的信息。然而,存储容量受虚拟地址空间大小的限制。对于一些应用程序来说,存储空间的大小是充足的,但是对于其他一些应用程序,比如航空订票系统、银行系统、企业记账系统来说,这些容量又显得太小了。 第二个问题是,当进程终止时信息会丢失。对于一些应用程序(例如数据库),信息会长久保留。在这些进程终止时,相关的信息应该保留下来,是不能丢失的。甚至这些应用程序崩溃后,信息也应该保留下来。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1147

Postgresql杂谈 24——针对Postgresql的文件系统调优

自数据库诞生之后,数据库优化就是一个各家公司绕不开的课题,也是面试造飞机时逃不开的知识点。因为当一个系统发展到了一定的规模,瓶颈往往都在数据库上,也因此催生了各种数据库的优化技术。某里的子柳就在《淘宝技术这十年》中提到,最初淘宝的系统架构中数据库部分就是1主2备的mysql,顶住了日均30W个PV(Page View)。再以后随着用户规模越来越大,使用连接池+单个oracle,然后就是在单个oracle基础之上的硬件的向上拓展,机器从服务器到小型机,存储从普通硬盘到SAN,再到NAS,总而言之...

Hyman的博客 1645

Linux 操作系统原理 — 文件系统 — 管理与优化

目录 文章目录目录磁盘空间管理磁盘配额文件系统备份文件系统的一致性文件系统性能高速缓存块提前读减少磁盘臂运动磁盘碎片整理 磁盘空间管理 文件通常存在磁盘中,所以如何管理磁盘空间是一个操作系统的设计者需要考虑的问题。在文件上进行存有两种策略:分配 n 个字节的连续磁盘空间;或者把文件拆分成多个并不一定连续的块。在存储管理系统中,主要有分段管理和 分页管理 两种方式。 正如我们所看到的,按连续字节序列...

烟云的计算 2713

linux 系统调优fsck,FSCK修复Unix/Linux系统中被破坏的文件系统的理论

有很多方式可以使文件系统遭到破坏,最通常的是不正常关机和一些硬件错误。原因是在关闭系统并且挂起CPU之前没有执行sync来将数据写入磁盘,导致文件系统不完整。另外,硬件错误也是很致命的,特别是磁盘的物理损伤,将导致数据永久性地丢失。Fsck提供的功能将有助于减少系统破坏所造成的损失,修复损坏的文件系统。Fsck的主要功能如下:(1) 检测和修复被破坏的文件系统平时,fsck不进行交互式执行,而是在...

weixin_28982257的博客 308

别再手动填数据了!Vivado里用.coe文件给ROM IP核预装数据的保姆级教程

本文详细介绍了在Vivado中使用.coe文件为ROM IP核预装数据的全流程教程,包括文件格式规范、数据转换技巧和Vivado配置指南。通过自动化数据加载,开发者可以显著提升FPGA开发效率,避免手动输入错误,适用于查找表、波形存储等多种应用场景。

weixin_33377602的博客 337

深入了解AES_GCM算法

常见的对称加密算法,在解密过程中无法确认密钥是否正确的。这就意味着,密文可以用任何密钥执行解密运算,得到一组疑似密文;由于不知道密钥是否正确,故也不能确定解密出来的明文数据是否正确。因此,需要在对称加密算法上增加一层验证机制,常见思路为使用加密算法进行加密保证机密性,使用摘要算法计算MAC保证完整性和真实性,这就涉及到摘要计算和加密计算的前后顺序和参与计算的数据、密钥等,使用起来略微麻烦。

huaqianzkh的专栏 4186

读书笔记-现代操作系统-4文件系统-4.4文件系统管理和优化

4.4 文件系统管理和优化4.4.1 磁盘空间管理几乎所有的文件系统都是把文件分割成固定大小的块来储存的(各块之间不一定相邻) 块大小 通常需要在空间利用率和磁盘数据率之间提供一定平衡,通常用4KB。 记录空闲块。 磁盘块链表,每个块包含尽可能多的空闲磁盘块号。如果空闲区域连续的话可以考虑添加空闲块的数量。 位图,但是不常用,只有在磁盘接近满的情况下才比较划算。 还有一个问题需要考虑的是如果保

千念飞羽的专栏 672

告别QXDM:在Android Studio中调试与验证高通NV读写功能的完整流程

本文详细介绍了在Android Studio中调试与验证高通NV分区读写功能的完整流程,替代传统的QXDM工具。通过JNI接口层、HAL服务层和Diag通信层的架构设计,开发者可以在熟悉的IDE环境中高效完成NV操作,包括环境配置、错误处理和性能优化等关键实践。

weixin_27013291的博客 260

操作系统——文件系统

操作系统总结,系列4——文件系统 操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版 其他系列链接: 操作系统总结,系列1——进程与线程 操作系统总结,系列2——内存管理 操作系统总结,系列3——死锁 操作系统总结,系列4——文件系统 文章目录操作系统总结,系列4——文件系统一、文件1、概念2、文件命名3、文件结构字节结构记录序列树4、文件类型5、文件访问**顺序访问**:随机访问文件6、文件属性概念举例7、文件操作二、目录1、概念2、一级目录系统3、层级目录

Quan的博客 1094

GEO优化实战:用AnswerBit量化AI搜索可见度与品牌监控体系

生成式引擎优化(GEO)正取代传统SEO,成为品牌在AI搜索生态中获取可见度的关键。当用户习惯从“翻列表”转向“直接问AI”,品牌能否被生成式引擎识别、引用并正向推荐,直接决定了其在用户决策链条中的存在感。AI搜索可见度因此从模糊概念演变为可度量的运营指标,涵盖提及率、引文率、情感分与回源质量等维度。腾讯AnswerBit作为答案侧分析工具,帮助运营者拆解AI回复中的品牌语境与引用来源,让优化动作有据可循。从内容结构化改造、品牌实体建设到第三方权威背书,GEO要求团队建立“度量-优化-再度量”的闭环。文章结

weixin_31100517的博客 150

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1566

Python语言的操作系统

Python无疑是一个功能强大的工具,可以用于操作系统的开发和管理。无论是文件和目录操作、进程管理、网络编程还是性能优化,Python都提供了简洁且易于使用的接口。随着Python在数据科学、人工智能等领域的广泛应用,它的操作系统相关模块也在不断完善,为开发者提供更多的便利和可能性。通过本文,我们期望能够帮助读者更好地理解如何使用Python进行操作系统相关的编程,同时鼓励大家在实际项目中灵活运用Python的各种特性。

2501_90425659的博客 815

OTP/EEPROM 读取与处理

Camera OTP/EEPROM 读取与处理 文章目录Camera OTP/EEPROM 读取与处理1. OTP概念1.1 基本概念1.2 OTP存储类型1.3 OTP烧录信息类型1.4 OTP 作用2. 配置准备2.1 基本认识2.2 OTP/EEPROM配置3. OTP/EEPROM datasheet理解 以及 读取方式3.1 data sheet 内容3.2 一般OTP/EEPROM(e...

Understand-image 1万+

操作系统十一文件系统实现

1.文件系统结构       磁盘有两个特点使其称为存储的方便介质           可以原地重写           可以直接访问磁盘的任意一块信息。文件的切换只需移动磁头并等待磁盘的转到。。       内存与磁盘之间的IO转移是以块为单位的。每块为一个或多个扇区。扇区大小通常为512B       文件系统本身又许多不同的层组成。每层利用较低层的功能来为更高层服务。

壞得彻底的专栏 3173

YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025

文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。

魔改工程师的博客 905

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 143

【操作系统笔记】-文件系统

为了避免刚删除文件导致空闲链表写回磁盘后马上又有需要写文件导致刚写回的空闲链表块又读回内存,做了一个优化,当内存中的空闲链表块满时,不是整块写回磁盘,而是写一半,然后内存中的空闲块就只剩一半左右的空闲块,来处理临时的释放和申请空闲块,减少磁盘IO。虽然单级目录系统有简单和定位文件快的好处,但是现在计算机的用户通常有成千上万的文件,不可能放到一个目录中,因此需要一种方法将有关系文件分组聚集在一起,一种方案是层级目录,就像一本书的目录,如下图,不仅可以分组聚集相关文件,还可以为不同用户创建独立的目录。

weixin_40293999的博客 720

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

文件系统在操作系统中的实现

它涉及设计一个高效、可靠、安全的文件系统,并支持一系列操作,例如文件创建和删除、打开和关闭、读取和写入、查找和定位以及属性和权限。文件系统有不同类型,包括基于磁盘和基于网络的文件系统,以及高级主题,例如日志文件系统、网络文件系统、分布式文件系统和虚拟文件系统。文件系统的实现对于确保操作系统文件存储功能的可靠性、性能和安全性起着至关重要的作用,并且需要复杂的软件设计和工程技术来实现这些目标。不同的文件系统可以以不同的方式组织文件和目录,并且可以使用不同的方法来存储和访问它们。

新华编程特战队 527

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

操作系统(十二)- 文件系统

1 基本概念 1.1 文件系统和文件 文件系统: 一种用于持久性存储的系统抽象 在存储器上:组织、控制、导航、访问和检索数据 大多数计算机系统包含文件系统 个人电脑、服务器、笔记本电脑 iPod、 Tivo /机顶盒、手机/掌上电脑 Google 可能是由一个文件系统构成的 文件:文件系统中一个单元的相关数据在操作系统中的抽象 1.1.1 文件系统的功能 分配文件磁盘空间 管理文件块(哪一块属于哪一个文件) 管理空闲空间(哪一块是空闲的) 分配算法(策..

Y_M的博客 704

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

操作系统-文件系统详解

Chapter 4文件系统 长期存储信息的基本要求: 能够存储大量信息 使用信息的进程终止,信息仍旧存在 使多个进程并发访问相关信息 储存信息的一种方式:磁盘。 磁盘的功能:读块+写块——能实现长期存储 在服务器等大型系统上使用磁盘解决长期存储存在的问题:{如何找到信息如何防止一个用户读取另一个用户的信息如何知道哪些块是空闲的 在服务器等大型系统上使用磁盘解决长期存储存在的问题:\begin{cases} 如何找到信息\\ 如何防止一个用户读取另一个用户的信息\\ 如何知道哪些块是空闲的\\ \end{

weixin_45745854的博客 867
上一篇: [操作系统] 文件系统的实现(二)
下一篇: [LeetCode] 264. Ugly Number II
LLLZHLIU
博客等级 码龄10年 19粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值