操作系统之文件系统

news2025/1/13 19:22:41

目录

文件系统层次结构

文件系统在内存中的结构

外存空闲空间管理

空闲表法

空闲链表法

位示图法

成组链接法


文件系统层次结构

  • 磁盘上的文件系统结构
    • 主引导记录MBR:位于磁盘的第一个扇区,包含引导程序和分区表。计算机启动时,BIOS会读取MBR并执行其中的引导程序,以确定活动分区并加载其引导块。
    • 引导块:活动分区的第一个块,包含启动操作系统的程序。
    • 超级块:包含文件系统的全局信息,如块大小、inode数量、空闲块管理等。
    • i结点区:存放文件的inode(索引结点),每个inode包含文件的元数据,如文件大小、创建时间、最后修改时间等。
    • 根目录:文件系统的根目录,存放根目录下的文件和子目录信息。

文件系统在内存中的结构

  • 安装表:记录了每个已安装文件系统的信息,如挂载点、文件系统类型等。
  • 目录结构缓存:缓存最近访问的目录信息,以加快文件查找速度。
  • 系统的打开文件表:记录了系统中所有打开文件的描述信息,如文件位置、访问权限等。
  • 进程的打开文件表:每个进程都有自己的打开文件表,记录了该进程打开的文件信息。

外存空闲空间管理

  • 逻辑卷和物理卷的关系:逻辑卷是逻辑上的存储空间,而物理卷是实际的物理存储设备。逻辑卷管理器(LVM)可以将多个物理卷组合成一个逻辑卷,提供更灵活的存储管理。    
空闲表法

空闲表法维护一个数据结构,即空闲磁盘块表,该表记录了磁盘上所有空闲块的信息。这个表通常包含以下内容:

  • 磁盘块号:每个空闲块的唯一标识符。
  • 空闲块的数量:连续空闲块的数量,便于分配较大的文件。

工作原理

  • 当文件系统需要分配新的磁盘块时,它会查找空闲表,找到足够大小的连续空闲块,并更新表以反映新的分配状态。
  • 当文件被删除或磁盘块被释放时,这些块会被标记为空闲,并添加回空闲表中。

优点

  • 简单直观,易于实现。
  • 对于连续分配磁盘块的情况,可以快速找到连续的空闲块。

缺点

  • 当磁盘块频繁分配和释放时,空闲表可能会产生大量的外部碎片。
  • 空闲表本身可能变得很大,占用较多内存。
空闲链表法

空闲链表法通过将所有空闲块链接成一个链表来管理空闲空间。链表可以是基于单个磁盘块,也可以是基于空闲区(连续的多个磁盘块)。

工作原理

  • 空闲盘块链:每个空闲块包含一个指向下一个空闲块的指针。分配时,从链表头部取出一个空闲块;释放时,将空闲块添加到链表尾部。
  • 空闲盘区链:每个空闲区包含一个指向下一个空闲区的指针。分配时,可能需要使用首次适应算法(first fit)、最佳适应算法(best fit)或最坏适应算法(worst fit)来找到合适的空闲区。

优点

  • 有效地解决了外部碎片问题。
  • 管理相对简单,不需要维护一个大的空闲表。

缺点

  • 搜索空闲块可能需要遍历整个链表,效率较低。
  • 如果频繁分配和释放,链表可能会变得很长。
位示图法

位示图法使用一个二进制位数组来表示每个磁盘块的使用情况。

工作原理

  • 每个磁盘块对应位示图中的一个位,0表示空闲,1表示已使用。
  • 当需要分配或释放磁盘块时,操作系统会更新位示图。

优点

  • 占用空间小,可以快速检查磁盘块的状态。
  • 分配和释放操作简单快捷。

缺点

  • 对于大型磁盘,位示图可能变得很大。
  • 在多线程环境中,位示图的更新需要同步机制。
成组链接法

成组链接法是UNIX文件系统使用的一种空闲块管理方法,它结合了空闲表和空闲链表法的优点。

工作原理

  • 将磁盘块分成多个组,每组包含一定数量的空闲块。
  • 每组的第一个空闲块(称为超级块)包含一个指向下一组空闲块的指针和该组中空闲块的数量。
  • 当系统启动时,第一组的超级块被读入内存,从而形成一个链表。

优点

  • 减少了内存的使用,因为不需要将所有空闲块的信息都加载到内存中。
  • 有效地管理了大量的空闲块,减少了外部碎片。

缺点

  • 如果频繁进行分配和释放操作,可能会造成链表遍历的性能问题。
  • 需要额外的复杂性来维护超级块和空闲块之间的链接。

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

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

相关文章

springboot 默认的 mysql 驱动版本

本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…

[QCustomPlot] 交互示例 Interaction Example

本文是官方例子的分析: Interaction Example 推荐笔记: qcustomplot使用教程–基本绘图 推荐笔记: 4.QCustomPlot使用-坐标轴常用属性 官方例子需要用到很多槽函数, 这里先一次性列举, 自行加入到qt的.h中.下面开始从简单的开始一个个分析. void qcustomplot_main_init(void); …

openMetaData docker方式安装部署记录

OpenMetadata一站式元数据管理平台&#xff0c;是一款功能强大的开源元数据管理平台&#xff0c;旨在帮助企业更好地发现、理解和管理其数据资产。它提供了一套全面的工具和功能&#xff0c;涵盖了数据发现、数据血缘、数据质量、数据探查、数据治理和团队协作等多个方面。 那…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu&#xff0c; 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

Spring Boot 支持哪些日志框架

Spring Boot 支持多种日志框架&#xff0c;主要包括以下几种&#xff1a; SLF4J (Simple Logging Facade for Java) Logback&#xff08;默认&#xff09;Log4j 2Java Util Logging (JUL) 其中&#xff0c;Spring Boot 默认使用 SLF4J 和 Logback 作为日志框架。如果你需要使…

快速导入请求到postman

1.确定请求&#xff0c;右键复制为cURL(bash) 2.postman菜单栏Import-Raw text&#xff0c;粘贴复制的内容保存&#xff0c;请求添加成功

Golang的网络流量分配策略

## 1. Golang中的网络流量分配策略 简介 在Golang中&#xff0c;网络流量分配策略是指如何有效地管理和优化网络请求的分配&#xff0c;以提高系统的性能和稳定性。优秀的网络流量分配策略能够使系统更好地应对高并发和大流量的情况&#xff0c;同时有效地避免网络拥堵和性能瓶…

【硬件介绍】Type-C接口详解

一、Type-C接口概述 Type-C接口特点&#xff1a;以其独特的扁头设计和无需区分正反两面的便捷性而广受欢迎。这种设计大大提高了用户的使用体验&#xff0c;避免了传统USB接口需要多次尝试才能正确插入的问题。Type-C接口内部结构&#xff1a;内部上下两排引脚的设计虽然可能不…

二、BIO、NIO编程与直接内存、零拷贝

一、网络通信 1、什么是socket&#xff1f; Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作 系统提供。客户端连接上一个服务端&#xff0c;就会在客户端中产生一个 socket 接口实例&#xff0c;服务端每接受 一个客户端…

Android车机DIY开发之软件篇(九)默认应用和服务修改

Android车机DIY开发之软件篇(九)默认应用和服务修改 默认应用位置 ~/packages/apps/Car 增加APP 1.增加 XXXX.app 和Android.mk 2. 修改~/build/make/target/product/handheld_system_ext.mk 默认服务位置 ~/frameworks/base/services/java/com/android/server 查看服务列…

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误&#xff08;Recoverable Errors&#xff09; 2.2 不可恢复错误&#xff08;Unrecoverable Errors&#xff09; 三、Rust 的错误处理机制 3…

DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议

文章目录 Pre概述业务流程需求分析的困境统一语言建模事件风暴会议什么是事件风暴&#xff08;Event Storming&#xff09;事件风暴会议 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对…

用HTML + CSS实现太极图

目录 一、效果图 二、实现思路 三、完整代码 四、总结 一、效果图 如图所示&#xff0c;太极图一半为黑色&#xff08;代表阴&#xff09;&#xff0c;另一半为白色&#xff08;代表阳&#xff09;。这两部分相互环绕&#xff0c;形成一种流动的、旋转的感觉。 二、实现思…

Apache Hadoop YARN框架概述

一、YARN产生和发展简史 1.1背景 数据、程序、运算资源&#xff08;内存、CPU&#xff09;三者组在一起&#xff0c;才能完成数据的计算处理过程。在单机环境下&#xff0c;三者之间协调配合不是太大问题。为了应对海量数据的处理场景&#xff0c;Hadoop软件出现并提供了分布…

一个个顺序挨着来 - 责任链模式(Chain of Responsibility Pattern)

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;概述责任链结构图责任链模式概述责任链模式涉及的角色 talk is c…

.NET framework、Core和Standard都是什么?

对于这些概念一直没有深入去理解&#xff0c;以至于经过.net这几年的发展进化&#xff0c;概念越来越多&#xff0c;越来越梳理不容易理解了。内心深处存在思想上的懒惰&#xff0c;以为自己专注于Unity开发就好&#xff0c;这些并不属于核心范畴&#xff0c;所以对这些概念总是…

【Java回顾】Day5 并发基础|并发关键字|JUC全局观|JUC原子类

JUC全称java.util.concurrent 处理并发的工具包(线程管理、同步、协调) 一.并发基础 多线程要解决什么问题&#xff1f;本质是什么&#xff1f; CPU、内存、I/O的速度是有极大差异的&#xff0c;为了合理利用CPU的高性能&#xff0c;平衡三者的速度差异&#xff0c;解决办法…

android framework.jar 在应用中使用

在开发APP中&#xff0c;有时会使用系统提供的framework.jar 来替代 android.jar, 在gradle中配置如下&#xff1a; 放置framework.jar 依赖配置 3 优先级配置 gradle.projectsEvaluated {tasks.withType(JavaCompile) {Set<File> fileSet options.bootstrapClasspat…

CHAIN OF RESPONSIBILITY(职责链)—对象行为型模式

1. 意图 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 2. 动机 考虑一个图形用户界面中的上下文有关的帮助机制。用户在界面的任一部分…