操作系统-4.2文件系统的层次结构虚拟文件系统
文章目录
- 文件系统的层次结构
- 物理格式化
- open系统调用打开文件的背后过程
- 图中内容解释
- 文件打开的详细步骤
- 操作总结
- 虚拟文件系统
- 1. **虚拟文件系统的作用**
- 2. **虚拟文件系统的结构**
- 3. **VFS 工作机制**
- 4. **VFS 的优点**
文件系统的层次结构

用一个例子来辅助记忆文件系统的层次结构:
假设某用户请求删除文件“D:/工作目录/学生信息.xlsx”的最后100条记录。
- 用户需要通过操作系统提供的接口发出上述请求–用户接口
- 由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项–文件目录系统
- 不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限–存取控制模块(存取控制验证层)
- 验证了用户的访问权限之后,需要把用户提供的“记录号”转变为对应的逻辑地址–逻辑文件系统与文件信息缓冲区
- 知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址–物理文件系统
- 要删除这条记录,必定要对磁盘设备发出请求–设备管理程序模块
- 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收–辅助分配模块
物理格式化
划分扇区,检测好的扇区,用好的扇区替换为坏的扇区。
用分区表,完成各区的文件系统初始化
超级块用来快速找到若干的空闲块。
i结点区:所有索引结点存放
根目录:从根目录出发建立子目录。
open系统调用打开文件的背后过程

从目录M读入缓存,将FCB复制到文件表,进程打开文件表新建一个条目,返回文件描述符,对打开文件进行操作。
这张图展示了文件打开的过程以及文件系统中与打开文件相关的数据结构
图中内容解释
-
内存结构:
- 目录M缓存:用于存储目录项和文件控制块(FCB),其中包含文件的元数据,如文件名、大小、存取权限等。
- 系统打开文件表:位于内核区,用于管理当前系统中所有进程所打开的文件,存储文件在内存中的副本及相关信息。
- 进程(用户)打开文件表:每个进程都有自己的打开文件表,用于维护该进程打开的文件信息。
-
磁盘结构:
- 磁盘上包含实际的文件,如图中展示的文件A和文件B。
- 磁盘目录(如目录M)用于存储指向文件的索引信息。
文件打开的详细步骤
-
打开文件操作:
- 用户通过
open函数指定文件路径进行文件打开操作。例如,调用open(.../M/A, 只读)来打开文件A。 - 系统会根据指定路径逐级遍历目录,找到对应的文件控制块(FCB)。
- 用户通过
-
系统打开文件表:
- 在内存中,系统根据目录中找到的FCB,将其复制到系统打开文件表。
- 系统打开文件表存储文件的相关信息,包括文件指针和打开计数器(用于记录有多少个进程同时打开该文件)。
-
进程打开文件表:
- 系统在进程打开文件表中创建一项,存储打开文件的具体信息,如打开方式(只读、读写等)。
- 该表中的每项指向系统打开文件表中的对应文件项。
-
返回文件描述符:
- 系统会为该打开文件分配一个文件描述符
fd,返回给用户区,供程序后续对文件的操作使用。
- 系统会为该打开文件分配一个文件描述符
操作总结
- 文件打开计数:每次有进程打开文件时,系统打开文件表中的计数器会递增;文件关闭时计数器递减。当计数器为0时,系统释放该文件的内存资源。
- 进程和系统关联:进程打开文件表中的每项通过索引与系统打开文件表项关联,这样可以共享文件信息,避免重复读取磁盘内容。
虚拟文件系统
虚拟文件系统(Virtual File System, VFS)是操作系统内核中一层抽象层,用于实现不同文件系统的兼容与统一接口。它使得操作系统可以通过统一的接口来访问不同类型的文件系统,例如 ext4、NTFS、FAT32 等。
1. 虚拟文件系统的作用
- 统一接口:VFS 为用户程序提供一个统一的接口,使得应用程序无需关心底层实际使用的文件系统类型。程序员可以使用相同的系统调用(如
open、read、write等)来访问文件,而不需要考虑文件是存储在 ext4 文件系统还是 FAT32 文件系统中。 - 文件系统兼容:VFS 通过抽象层将操作系统与具体文件系统实现分离,支持多个文件系统共存,使操作系统可以无缝地处理不同类型的文件系统。
- 透明访问:用户或应用程序可以透明地访问网络文件系统、远程文件系统等,而不需要关注底层文件访问的细节。
2. 虚拟文件系统的结构
VFS 的实现通常包括以下几个核心部分:
- VFS 接口:定义了文件系统的操作接口,如打开、关闭、读取和写入文件等操作。
- 文件系统类型表:维护系统中已安装的文件系统类型列表,如 ext4、NTFS、NFS 等。每个文件系统类型都实现了 VFS 接口。
- 超级块对象:表示文件系统的元数据,包括文件系统的类型、状态等。
- 索引节点对象(inode):表示文件的具体元数据信息,如文件大小、权限、物理位置等。
- vnode:函数功能指针,指向具体函数的指针。每个文件对应一个vnode
- 目录项对象(dentry):用于表示目录项,维护文件和目录的层次结构。
- 文件对象:用于表示打开的文件,维护文件描述符及文件状态等信息。
3. VFS 工作机制
VFS 的工作机制如下:
- 文件系统挂载:操作系统通过 VFS 接口将不同的文件系统挂载到统一的目录树上。每个文件系统在挂载时都会注册其超级块对象和其他数据结构。
- 注册新挂载的文件系统(挂载表)。
- 向VFS提供一个函数地址列表。
- 将新文件系统加到挂载点上。
- 文件访问请求:当用户进程发出文件访问请求(如
open())时,VFS 接口接收该请求并在目录树中查找相应的目录项对象(dentry),确定所访问文件的索引节点(inode)。 - 文件操作:VFS 将操作请求发送到文件系统的实现中。每个具体的文件系统实现会根据自己的存储结构,完成读写等操作。
- 数据返回:文件系统返回操作结果,VFS 通过统一的接口将结果返回给用户程序。
4. VFS 的优点
- 抽象和扩展性:增加一个新的文件系统时,只需要实现 VFS 接口即可,系统内核不需要更改。
- 跨平台支持:VFS 提供了一个抽象层,便于操作系统兼容不同的存储介质和文件系统类型。
- 简化开发:开发人员只需针对 VFS 编写代码,无需针对每种文件系统分别编写。
相关文章:
操作系统-4.2文件系统的层次结构虚拟文件系统
文章目录 文件系统的层次结构物理格式化open系统调用打开文件的背后过程图中内容解释文件打开的详细步骤操作总结 虚拟文件系统1. **虚拟文件系统的作用**2. **虚拟文件系统的结构**3. **VFS 工作机制**4. **VFS 的优点** 文件系统的层次结构 用一个例子来辅助记忆文件系统的层…...
【深度学习】DreamClear:提升图片分辨率的模型
基于PixArt-XL-2模型,效果很好。 DreamClear:高容量真实世界图像修复与隐私安全数据集构建 在图像修复领域,处理真实世界中的低质量(Low-Quality, LQ)图像并恢复其高质量(High-Quality, HQ)版本一直是一个具有挑战性的任务。今天,我们将介绍一个最新的开源项目——Dr…...
操作系统进程互斥的四种软件实现和三种硬件实现
进程互斥是操作系统中保证多个进程不会同时访问共享资源的一种机制。 进程互斥的四种软件实现方式: 一、单标志法 核心思想:使用一个布尔变量(或称为标志位)来表示临界区的访问权限。该变量为true时表示允许某个进程访问临界区&…...
C++虚继承演示
在继承中如果出现: 这种情况,B和C都继承了A,D继承了B、C 在D中访问A的成员会出现: 这样的警告 是因为在继承时A出现两条分支:ABD、ACD 编译器不知道访问的A中的元素是经过B继承还是C继承 所以B、C在继承A时要用到…...
React Native的生命周期
React Native 组件的生命周期分为三个阶段:Mounting(挂载)、Updating(更新) 和 Unmounting(卸载)。每个阶段都会触发不同的生命周期方法。 下面是详细的生命周期解释,并通过一个项目…...
linux系统中涉及到用户管理的命令知识
用户创建与密码设置 Linux中新建用户使用useradd命令,只有root用户才能执行,若useradd命令直接输入不管用,可使用绝对路径/usr/sbin/useradd。设置用户登录密码使用passwd命令。 su命令相关 su代表switch user,用于切换用户。切换…...
LeetCode 0685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图)
【LetMeFly】685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图) 力扣题目链接:https://leetcode.cn/problems/redundant-connection-ii/ 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点&…...
Dubbo负载均衡
负载均衡策略与配置细节 Dubbo 内置了 client-based 负载均衡机制,如下是当前支持的负载均衡算法,结合上文提到的自动服务发现机制,消费端会自动使用 Weighted Random LoadBalance 加权随机负载均衡策略 选址调用。 如果要调整负载均衡算法…...
PymuPDF4llm提取pdf文件文字、表格与图片
一、PymuPDF4llm 的功能特点 (一)文本提取 简单易用 PymuPDF4llm 的文本提取功能非常简单易用。只需使用pip install pymupdf4llm进行安装,然后通过import pymupdf4llm导入库,就可以使用md_text pymupdf4llm.to_markdown("…...
20241108通过iperf3确认中科创达的高通CM6125的WIFI的网速【失败】
20241108通过iperf3确认中科创达的高通CM6125的WIFI的网速【失败】 2024/11/8 15:43 由于以太网不能用,那就测试一下WIFI,iperf3链接/测试异常。 一般认为可能的原因有: 1、CM6125开发板的WIFI不带天线,影响性能。 2、CM6125的And…...
Stored procedures in PostgreSQL
select 存储过程,在现了解的情况,还是没有mysql,sqlserver等好写好用。 --postgreSQL 11.0 以下版本 create or replace FUNCTION procInsertSchool (pSchoolId Char(5),pSchoolName VarChar(100),pSchoolTelNo VarChar(8) ) RETURNS void language plp…...
第10章 多表查询
一、什么是多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立…...
【基于LSM的ELF文件安全模块设计】参考
《基于LSM的ELF文件安全模块设计文档》 一、设计目标 本设计致力于通过 Linux 安全模块(LSM)构建一个强大而严密的安全防护体系,以实现对 ELF 文件(涵盖可执行文件和动态链接库)的绝对严格的合法性和完整性检查。其核…...
全卷积和全连接
全连接网络和全卷积网络不一样 以下是对两者的正确解释和代码示例: 1. 全连接网络(Fully Connected Network) 全连接网络使用的是 线性层(nn.Linear),也就是我们常说的“全连接层”。它是用于将每一个输入…...
Unity图形学之Shader结构
Unity - Manual: ShaderLab: Legacy Lighting 1.Shader 语言: OpenGL:SGL 跨平台性能非常好 GLSL语言 OpenGL Shader LanguageDX:微软 非跨平台 性能非常好 HLSL语言 High Level Shader LanguageCG:微软和英伟达 联合开发CG …...
离散时间信号的产生
文章目录 前言1.单位冲激序列函数1.2 函数:1.3 实现代码:1.3 调用方式1.4 调用结果 2.单位阶跃序列函数2.1 函数2.2实现代码2.3调用方式2.4调用结果 3.矩形序列3.1函数3.2 实现代码3.3调用方式3.4 调用结果 4.实指数序列4.1函数4.2实现代码4.3调用方式4.…...
物联优化汽车齿轮锻造
在汽车齿轮的锻造工艺中,锻造温度、锻造压力与行程、锻造速度与锤击方式以及热处理工艺等核心参数扮演着举足轻重的角色。这些参数的精准控制与实时监测,对于提升生产效率、确保产品质量、削减生产成本以及推动生产智能化转型具有不可估量的价值。明达技…...
CocosCreator 构建透明背景应用(最新版!!!)
文章目录 透明原理补充设置截图以及代码step1: electron-js mian.jsstep2:ENABLE_TRANSPARENT_CANVASstep3:SOLID_COLOR Transparentstep:4 Build Web phonestep5:package electron-js & change body background-color 效果图补充 透明原理 使用Cocos creator 做桌面应用开…...
使用CentOS宝塔面板docker搭建EasyTier内网穿透服务
0. 前言 EasyTier是一个简单、安全、去中心化的内网穿透 VPN 组网方案,部署方便,支持 MacOS/Linux/Windows/FreeBSD/Android平台,而且作者搭建了一个公共服务器,不想折腾自建服务,可以使用默认的公共服务器地址 tcp:/…...
HTMLCSS: 实现可爱的冰墩墩
效果演示 HTML <div class"wrap"><div class"body"></div><div class"ear"></div><div class"ear rightEar"></div><div class"leftHand"></div><div class"…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
