文件系统相关
文件系统部分的大纲要求:
- 文件系统的全局结构:文件系统在外存中的结构,文件系统在内存中的结构
- 外存空闲空间管理办法
- 虚拟文件系统
- 文件系统挂载
一、文件系统的层次结构
可分为三个层次:最低层是对象及其属性,中间层是对对象进行操纵和管理的软件集合,最高层是文件系统(提供给用户的)接口
- 对象及其属性:文件系统管理三类对象
- 文件
- 目录
- 磁盘(磁带)存储空间
- 对对象进行操纵和管理的软件集合:是文件系统的核心部分。一般将与文件系统有关的软件分为4个层次:
- I/O控制层:是文件系统的最低层,主要由磁盘驱动程序等组成,也可称为设备驱动程序层
- 基本文件系统:主要用于实现内存与磁盘之间数据块的交换
- 文件组织模块:也称为基本I/O管理程序,该层负责完成与磁盘I/O有关的事务,如将文件逻辑块号变为物理块号、管理磁盘中的空闲盘块、指定I/O缓冲等
- 逻辑文件系统:用于处理并记录同文件相关的操作,如允许用户和应用程序使用符号文件名访问文件和记录、保护文件和记录等。
- 文件系统接口:文件系统以接口的形式提供了一组对文件和记录进行操作的方法和手段。常用的两类接口是:
- 命令接口:终端命令
- 程序接口:系统调用
二、文件系统布局
- 一个磁盘从出厂->物理格式化->逻辑格式化这个过程中,文件系统在外存中是如何被建立的
- 物理格式化:磁盘刚被生产出来的时候没有划分扇区,此时要进行物理格式化(也称低级格式化),即划分扇区、检测坏扇区,并用备用扇区替换坏扇区。坏扇区的存在对操作系统来说是透明的(即OS意识不到坏扇区的存在)
- 逻辑格式化:即磁盘分区(分卷),完成各分区的文件系统初始化。逻辑格式化后,灰色部分就有数据了,白色部分还没有数据
- 物理格式化:磁盘刚被生产出来的时候没有划分扇区,此时要进行物理格式化(也称低级格式化),即划分扇区、检测坏扇区,并用备用扇区替换坏扇区。坏扇区的存在对操作系统来说是透明的(即OS意识不到坏扇区的存在)
- 文件系统在磁盘中的结构:
- 整体:多个磁盘划分为一个或多个分区,每个分区有一个独立的文件系统。文件系统包含:启动操作系统的方式、总块数、空闲块数量和位置、目录结构、各个具体文件等
- 下图是一个可能的文件系统布局,对其中一些部分的解释如下(前五个是在逻辑格式化后就有了实际数据,见上一个序号):
- 主引导记录MBR:位于磁盘的0号扇区,后面就是分区表,该表给出每个分区的起始和结束地址。当计算机启动时,BIOS读入并执行MBR,MBR做的第一件事就是确定活动分区,读入它的第一块,即引导块
- 引导块:引导块中的程序负责启动该分区中的操作系统。
- 超级块:包含文件系统的所有关键信息(如分区的块数量、块大小、空闲块的数量和指针、空闲的FCB数量、FCB指针等)。计算机启动时或在该文件系统首次使用时,超级块会被读入内存。有了超级块就可以迅速找到这个磁盘分区里面所有的空闲块。用于新建一个文件时迅速分配多个磁盘块
- 文件系统中空闲块的信息,可使用位示图或指针链接的形式给出。位示图可以迅速的判断某一个特定的磁盘块是否空闲(超级块的作用是迅速找到若干个空闲盘块)。
- 位示图、超级块这两个数据结构在功能上有一定重合性(都可以标记哪些盘块空闲),但在实际使用中侧重点会有一些区别
- 索引节点在i节点区连续存放,且大小相同,因此可以通过一个索引节点的下标迅速定位到一个指定的索引节点
- 根目录
- 文件系统在内存中的结构
如下图,用户区有“文件描述符fd”;内核区有当前打开目录的缓存、系统打开文件表、进程(用户)打开文件表
三、外存空闲空间管理
四、虚拟文件系统VFS
- 各种文件系统存在的问题
- 不同的文件系统(UFS/NTFS/FAT),其函数名和参数不同(如UFS是open(参数a, b);NTFS是fopen(参数x);FAT是openf(参数p, q)),用户使用文件系统时没有统一接口
- 不同的文件系统都使用同一VFS,新添加一个文件系统或修改一个文件系统的代码就去修改内核区VFS的代码显然不现实
- 不同的文件系统,表示文件的数据结构也不相同。打开文件后,其在内存中的表示也不同(如UFS的目录项和inode、FAT的目录项)
- 为解决上述问题,VFS的特点/作用:
- 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
- 要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
- 每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统
- 综上,如下图:
五、文件系统挂载
- 文件系统挂载要做的事:
- 在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个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满…...

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数据结构之稀疏数组
目录 线性结构与非线性结构线性结构非线性结构 稀疏数组应用场景 代码实现二维数组转稀疏数组稀疏数组转二维数组 线性结构与非线性结构 线性结构 数据结构分两种,线性与非线性,线性结构的数据元素之间存在一对一的关系。 一对一指的是每个数据元素都…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...