当前位置: 首页 > news >正文

文件系统相关

文件系统部分的大纲要求:

  1. 文件系统的全局结构:文件系统在外存中的结构,文件系统在内存中的结构
  2. 外存空闲空间管理办法
  3. 虚拟文件系统
  4. 文件系统挂载

一、文件系统的层次结构

可分为三个层次:最低层是对象及其属性,中间层是对对象进行操纵和管理的软件集合,最高层是文件系统(提供给用户的)接口
请添加图片描述

  1. 对象及其属性:文件系统管理三类对象
    • 文件
    • 目录
    • 磁盘(磁带)存储空间
  2. 对对象进行操纵和管理的软件集合:是文件系统的核心部分。一般将与文件系统有关的软件分为4个层次:
    • I/O控制层:是文件系统的最低层,主要由磁盘驱动程序等组成,也可称为设备驱动程序层
    • 基本文件系统:主要用于实现内存与磁盘之间数据块的交换
    • 文件组织模块:也称为基本I/O管理程序,该层负责完成与磁盘I/O有关的事务,如将文件逻辑块号变为物理块号、管理磁盘中的空闲盘块、指定I/O缓冲等
    • 逻辑文件系统:用于处理并记录同文件相关的操作,如允许用户和应用程序使用符号文件名访问文件和记录、保护文件和记录等。
      请添加图片描述
  3. 文件系统接口:文件系统以接口的形式提供了一组对文件和记录进行操作的方法和手段。常用的两类接口是:
    • 命令接口:终端命令
    • 程序接口:系统调用

二、文件系统布局

  1. 一个磁盘从出厂->物理格式化->逻辑格式化这个过程中,文件系统在外存中是如何被建立的
    • 物理格式化:磁盘刚被生产出来的时候没有划分扇区,此时要进行物理格式化(也称低级格式化),即划分扇区、检测坏扇区,并用备用扇区替换坏扇区。坏扇区的存在对操作系统来说是透明的(即OS意识不到坏扇区的存在)
      请添加图片描述
    • 逻辑格式化:即磁盘分区(分卷),完成各分区的文件系统初始化。逻辑格式化后,灰色部分就有数据了,白色部分还没有数据
      请添加图片描述
  2. 文件系统在磁盘中的结构:
    • 整体:多个磁盘划分为一个或多个分区,每个分区有一个独立的文件系统。文件系统包含:启动操作系统的方式、总块数、空闲块数量和位置、目录结构、各个具体文件等
    • 下图是一个可能的文件系统布局,对其中一些部分的解释如下(前五个是在逻辑格式化后就有了实际数据,见上一个序号):
      • 主引导记录MBR:位于磁盘的0号扇区,后面就是分区表,该表给出每个分区的起始和结束地址。当计算机启动时,BIOS读入并执行MBR,MBR做的第一件事就是确定活动分区,读入它的第一块,即引导块
      • 引导块:引导块中的程序负责启动该分区中的操作系统。
      • 超级块:包含文件系统的所有关键信息(如分区的块数量、块大小、空闲块的数量和指针、空闲的FCB数量、FCB指针等)。计算机启动时或在该文件系统首次使用时,超级块会被读入内存。有了超级块就可以迅速找到这个磁盘分区里面所有的空闲块。用于新建一个文件时迅速分配多个磁盘块
      • 文件系统中空闲块的信息,可使用位示图或指针链接的形式给出。位示图可以迅速的判断某一个特定的磁盘块是否空闲(超级块的作用是迅速找到若干个空闲盘块)。
        • 位示图、超级块这两个数据结构在功能上有一定重合性(都可以标记哪些盘块空闲),但在实际使用中侧重点会有一些区别
      • 索引节点在i节点区连续存放,且大小相同,因此可以通过一个索引节点的下标迅速定位到一个指定的索引节点
      • 根目录
        请添加图片描述
  3. 文件系统在内存中的结构
    如下图,用户区有“文件描述符fd”;内核区有当前打开目录的缓存、系统打开文件表、进程(用户)打开文件表
    在这里插入图片描述

三、外存空闲空间管理

四、虚拟文件系统VFS

  1. 各种文件系统存在的问题
    • 不同的文件系统(UFS/NTFS/FAT),其函数名和参数不同(如UFS是open(参数a, b);NTFS是fopen(参数x);FAT是openf(参数p, q)),用户使用文件系统时没有统一接口
    • 不同的文件系统都使用同一VFS,新添加一个文件系统或修改一个文件系统的代码就去修改内核区VFS的代码显然不现实
    • 不同的文件系统,表示文件的数据结构也不相同。打开文件后,其在内存中的表示也不同(如UFS的目录项和inode、FAT的目录项)
  2. 为解决上述问题,VFS的特点/作用:
    • 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
    • 要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
    • 每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统
  3. 综上,如下图:
    在这里插入图片描述

五、文件系统挂载

  1. 文件系统挂载要做的事:
    • 在VFS中注册新挂载的文件系统:内存中的挂载表包含每个文件系统的相关信息(文件系统类型、容量大小等)
    • 新挂载的文件系统,要向VFS提供一个函数地址列表(如上图中的黄色小表。这样才能让VFS能够调用新挂载的文件系统所提供的功能函数)
    • 将新文件系统加到挂载点,也就是将新文件系统挂载在某个父目录下

相关文章:

文件系统相关

文件系统部分的大纲要求: 文件系统的全局结构:文件系统在外存中的结构,文件系统在内存中的结构外存空闲空间管理办法虚拟文件系统文件系统挂载 一、文件系统的层次结构 可分为三个层次:最低层是对象及其属性,中间层…...

edm邮件开发信模板

现在很多从事外贸的工作人员在寻找一些邮件模板,今天一米软件给大家总结了几套常用的开发新客户的邮件模板 开发新模板1: Hi Sir, Glad to hear that youre on the market for **. We specialize in this field for several years, with the strengt…...

边缘服务器的未来是什么?思考 5G 和 AI 需求

什么是边缘服务器 边缘服务器是一种分布式计算模式,旨在提高数据中心和云服务的效率,并解决设备之间通信的延迟问题。它将业务从中央数据中心转移到边缘设备附近,将计算、存储和网络资源靠近终端用户和设备,以实现更快速的数据处…...

老卫带你学---leetcode刷题(438. 找到字符串中所有字母异位词)

438. 找到字符串中所有字母异位词 问题: 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 …...

unity中使用protobuf工具将proto文件转为C#实体脚本

unity中使用protobuf工具将proto文件转为C#实体脚本 介绍优点缺点Protobuf 为什么比 XML 快得多?Protobuf的EncodingProtobuf封解包的过程通常编写一个Google Protocol Buffer应用需要以下几步: Protostuff是什么Protobuf工具总结 介绍 protobuf也就是G…...

1024程序员狂欢节有好礼 | 前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术

🌹欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 1024程序员狂欢节有好礼 🚩🚩🚩点击直达福利前言一、IT技术 IT Technology《速学Linux:系统应用从入门到精通》《Pytho…...

常用Web安全扫描工具合集

漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 1、A…...

Zoho Mail荣登福布斯小型企业企业邮箱排行榜

在过去的数十载里,电子邮件已成为电子通信领域中不可或缺的一环,而在未来的岁月里,它有望继续在全球范围内普及应用。尽管如今市场上有许多免费的企业邮箱供用户和企业选用,但其中许多产品在特定场景下的专业化功能尚显不足&#…...

Cave Cows 3

题目描述 约翰的 N (1≤N≤50000 )只牛在一个黑魃魃的洞里探险,他们只能通过叫声交流。 两只牛之间的曼哈顿距离决定了声音传播的时间。即牛1与牛2交流,需要的时间为 ∣x1​−x2​∣∣y1​−y2​∣ 。其中 −2≤106−106≤x1​,x2​,y1​,y2​≤106 。…...

Java程序设计2023-第四次上机练习

8-1三子棋 编写程序,实现简单的三子棋游戏。在三子棋中,双方在33的棋盘中轮流下棋,一方用*示,另一方用O表示。如果一方的3个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满&#xf…...

nonaDlA 逻辑分析仪 使用记录

注意事项,很灵敏,不要用手碰,产生误触发 安装软件 github地址 官方提供的淘宝地址与使用说明 1.安装 1.安装程序 :下载githubDLA源码,打开 software\PulseView.exe安装 2.安装驱动:安装完第一步后&a…...

用HFSS仿真平面线圈的电感量

用HFSS工具仿真平面线圈的电感量 平面线圈是指在平面上绕制而成的线圈,如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈,六角形线圈、八角形线圈、螺旋原型线圈等。 网络上的计算平面线圈电感量…...

字节面试题——数据库, linux

数据库 1.sq|语句取-一个月内的id分组取-一个年级中每个班级年龄最小的同学名字成绩表输出前三名的 成绩,后三名呢拷贝A表的数据到B表查询每1 ]科目都大于80分的学生名字筛选出每个小时 的记录考察where考察聚合函数where和having的区别-一个数据库sq|查询重复个数…...

ES基础知识

ES基础知识 单独查询一个文档(_doc)时,Elasticsearch 会返回该文档的原始数据,通常以 JSON 格式呈现。以下是一些常见字段及其含义: _index: 表示文档所属的索引名称。_type (在较早的 Elasticsearch 版本中使用&…...

当年很流行,现在已经淘汰的前端技术有哪些?

近几年,前端技术真可谓是飞速发展,不断有新的技术涌现,爆火的前端框架 Astro,前端运行时 Bun,构建工具 Vite 等都给前端提供了强大动力。当然,也有很多前端技术随着技术的发展不再需要使用,有了…...

IP地址定位是什么?有哪些优缺点?

IP地址定位是一种用于确定设备或用户地理位置的方法,具有一些明显的优点和缺点。以下是IP地址定位的优缺点: 优点: 广泛适用性: IP地址定位适用于几乎所有与互联网连接的设备,包括计算机、智能手机、平板电脑和物联网…...

scrapy爬虫之网站图片爬取

Scrapy是一个强大的Python爬虫框架,可以用于爬取网站上的各种数据,包括图片。以下是一个简单的示例,演示如何使用Scrapy来爬取网站上的图片: 安装Scrapy: 如果尚未安装Scrapy,可以使用以下命令安装它&…...

flask整合rabbitMQ插件的方式

文章目录 二、Python-flask-rabbitMQ-插件方式整合引言具体步骤1 安装依赖:2 编写实体类:3 编写消费者和生产者:4 初始化消费者和生产者:5 其他地方使用生产者 二、Python-flask-rabbitMQ-插件方式整合 引言 当今互联网应用的高…...

【React】高频面试题

1. 简述下 React 的事件代理机制? React使用了一种称为“事件代理”(Event Delegation)的机制来处理事件。事件代理是指将事件处理程序绑定到组件的父级元素上,然后在需要处理事件的子元素上触发事件时,事件将被委托给…...

Java数据结构之稀疏数组

目录 线性结构与非线性结构线性结构非线性结构 稀疏数组应用场景 代码实现二维数组转稀疏数组稀疏数组转二维数组 线性结构与非线性结构 线性结构 数据结构分两种,线性与非线性,线性结构的数据元素之间存在一对一的关系。 一对一指的是每个数据元素都…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...