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

操作系统-4.2文件系统的层次结构虚拟文件系统

文章目录

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

文件系统的层次结构

在这里插入图片描述
用一个例子来辅助记忆文件系统的层次结构:
假设某用户请求删除文件“D:/工作目录/学生信息.xlsx”的最后100条记录。

  1. 用户需要通过操作系统提供的接口发出上述请求–用户接口
  2. 由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项–文件目录系统
  3. 不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限–存取控制模块(存取控制验证层)
  4. 验证了用户的访问权限之后,需要把用户提供的“记录号”转变为对应的逻辑地址–逻辑文件系统与文件信息缓冲区
  5. 知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址–物理文件系统
  6. 要删除这条记录,必定要对磁盘设备发出请求–设备管理程序模块
  7. 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收–辅助分配模块

物理格式化

划分扇区,检测好的扇区,用好的扇区替换为坏的扇区。
用分区表,完成各区的文件系统初始化
超级块用来快速找到若干的空闲块。
i结点区:所有索引结点存放
根目录:从根目录出发建立子目录。

open系统调用打开文件的背后过程

在这里插入图片描述
从目录M读入缓存,将FCB复制到文件表,进程打开文件表新建一个条目,返回文件描述符,对打开文件进行操作。
这张图展示了文件打开的过程以及文件系统中与打开文件相关的数据结构

图中内容解释

  1. 内存结构

    • 目录M缓存:用于存储目录项和文件控制块(FCB),其中包含文件的元数据,如文件名、大小、存取权限等。
    • 系统打开文件表:位于内核区,用于管理当前系统中所有进程所打开的文件,存储文件在内存中的副本及相关信息。
    • 进程(用户)打开文件表:每个进程都有自己的打开文件表,用于维护该进程打开的文件信息。
  2. 磁盘结构

    • 磁盘上包含实际的文件,如图中展示的文件A文件B
    • 磁盘目录(如目录M)用于存储指向文件的索引信息。

文件打开的详细步骤

  1. 打开文件操作

    • 用户通过open函数指定文件路径进行文件打开操作。例如,调用open(.../M/A, 只读)来打开文件A
    • 系统会根据指定路径逐级遍历目录,找到对应的文件控制块(FCB)。
  2. 系统打开文件表

    • 在内存中,系统根据目录中找到的FCB,将其复制到系统打开文件表
    • 系统打开文件表存储文件的相关信息,包括文件指针和打开计数器(用于记录有多少个进程同时打开该文件)。
  3. 进程打开文件表

    • 系统在进程打开文件表中创建一项,存储打开文件的具体信息,如打开方式(只读、读写等)。
    • 该表中的每项指向系统打开文件表中的对应文件项。
  4. 返回文件描述符

    • 系统会为该打开文件分配一个文件描述符fd,返回给用户区,供程序后续对文件的操作使用。

操作总结

  • 文件打开计数:每次有进程打开文件时,系统打开文件表中的计数器会递增;文件关闭时计数器递减。当计数器为0时,系统释放该文件的内存资源。
  • 进程和系统关联:进程打开文件表中的每项通过索引与系统打开文件表项关联,这样可以共享文件信息,避免重复读取磁盘内容。

虚拟文件系统

虚拟文件系统(Virtual File System, VFS)是操作系统内核中一层抽象层,用于实现不同文件系统的兼容与统一接口。它使得操作系统可以通过统一的接口来访问不同类型的文件系统,例如 ext4、NTFS、FAT32 等。

1. 虚拟文件系统的作用

  • 统一接口:VFS 为用户程序提供一个统一的接口,使得应用程序无需关心底层实际使用的文件系统类型。程序员可以使用相同的系统调用(如 openreadwrite 等)来访问文件,而不需要考虑文件是存储在 ext4 文件系统还是 FAT32 文件系统中。
  • 文件系统兼容:VFS 通过抽象层将操作系统与具体文件系统实现分离,支持多个文件系统共存,使操作系统可以无缝地处理不同类型的文件系统。
  • 透明访问:用户或应用程序可以透明地访问网络文件系统、远程文件系统等,而不需要关注底层文件访问的细节。

2. 虚拟文件系统的结构

VFS 的实现通常包括以下几个核心部分:

  • VFS 接口:定义了文件系统的操作接口,如打开、关闭、读取和写入文件等操作。
  • 文件系统类型表:维护系统中已安装的文件系统类型列表,如 ext4、NTFS、NFS 等。每个文件系统类型都实现了 VFS 接口。
  • 超级块对象:表示文件系统的元数据,包括文件系统的类型、状态等。
  • 索引节点对象(inode):表示文件的具体元数据信息,如文件大小、权限、物理位置等。
  • vnode:函数功能指针,指向具体函数的指针。每个文件对应一个vnode
  • 目录项对象(dentry):用于表示目录项,维护文件和目录的层次结构。
  • 文件对象:用于表示打开的文件,维护文件描述符及文件状态等信息。

3. VFS 工作机制

VFS 的工作机制如下:

  1. 文件系统挂载:操作系统通过 VFS 接口将不同的文件系统挂载到统一的目录树上。每个文件系统在挂载时都会注册其超级块对象和其他数据结构。
  • 注册新挂载的文件系统(挂载表)。
  • 向VFS提供一个函数地址列表。
  • 将新文件系统加到挂载点上。
  1. 文件访问请求:当用户进程发出文件访问请求(如 open())时,VFS 接口接收该请求并在目录树中查找相应的目录项对象(dentry),确定所访问文件的索引节点(inode)。
  2. 文件操作:VFS 将操作请求发送到文件系统的实现中。每个具体的文件系统实现会根据自己的存储结构,完成读写等操作。
  3. 数据返回:文件系统返回操作结果,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"…...

Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程

Graphormer在计算毒理学中的应用&#xff1a;预测hERG通道抑制活性的完整建模流程 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子…...

告别手动重复!用Python+ArcPy实现多要素批量裁剪年度影像的保姆级教程

PythonArcPy自动化遥感影像裁剪&#xff1a;从原理到实战的完整解决方案 遥感影像处理是GIS工程师的日常必修课。每当拿到新一年的土地利用数据或行政区划影像时&#xff0c;最头疼的莫过于要为每个行政单元单独裁剪每年的数据。我曾花费整整一周时间手动处理30个乡镇5年的NDVI…...

解码汽车ECU的“健康档案”:剖析吉利Basetech五大运行周期计数器(OCC)的协同诊断逻辑

1. 汽车ECU的“健康档案”是什么&#xff1f; 当你去医院体检时&#xff0c;医生会查看你的病历记录、化验报告和近期症状&#xff0c;综合判断你的健康状况。汽车ECU&#xff08;电子控制单元&#xff09;也有类似的"健康档案"&#xff0c;它就是吉利Basetech技术中…...

2026年黄山钢筋网片供应厂家揭秘

在建筑行业蓬勃发展的今天&#xff0c;钢筋网片作为建筑施工中不可或缺的材料&#xff0c;其质量和供应厂家的选择至关重要。对于黄山地区的建筑项目来说&#xff0c;找到一家靠谱的钢筋网片供应厂家&#xff0c;是保障工程质量和进度的关键。今天&#xff0c;我们就来揭秘一家…...

终极Windows驱动管家:DriverStore Explorer释放系统空间完全指南

终极Windows驱动管家&#xff1a;DriverStore Explorer释放系统空间完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 引言&#xff1a;被遗忘的驱动仓库 你是否曾疑惑为…...

【Skills开发实战指南】第01篇:Skills开发入门:AI助手的能力扩展革命

快速导航 读完本文&#xff0c;你将获得&#xff1a; ✅ 深入理解Skills是什么以及为什么需要它✅ 掌握Skills在AI编程工具中的核心价值✅ 了解Skills的完整生态和应用场景✅ 明确Skills开发的学习路径和资源✅ 准备好开始你的第一个Skills开发项目 一、Skills是什么&#xf…...

STM32开发方式对比与HAL库实战指南

1. STM32开发方式概述作为一名嵌入式开发者&#xff0c;我亲历了STM32开发方式的变迁。从早期的寄存器操作到标准库&#xff0c;再到如今主流的HAL库&#xff0c;每种方式都有其独特的优势和适用场景。对于刚接触STM32的新手来说&#xff0c;选择合适的开发方式往往是个令人困惑…...

别再死磕状态机了!用Verilog实现I2C主机/从机,这份可综合代码直接拿去用

实战派Verilog I2C实现&#xff1a;模块化设计到上板调试全指南 在FPGA和数字IC开发中&#xff0c;I2C协议因其简洁的两线制接口&#xff08;SCL时钟线和SDA数据线&#xff09;而广受欢迎。但当工程师真正需要在项目中实现I2C功能时&#xff0c;往往会陷入状态机调试的泥潭——…...

OneMore插件:3大核心功能让OneNote效率提升300%

OneMore插件&#xff1a;3大核心功能让OneNote效率提升300% 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 传统笔记管理vs智能插件&#xff1a;效率差距在哪里&#…...

Qwen2.5-14B-Instruct开源大模型实战:像素剧本圣殿8-Bit UI部署详解

Qwen2.5-14B-Instruct开源大模型实战&#xff1a;像素剧本圣殿8-Bit UI部署详解 1. 项目概览 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。这个独特的创作环境将强大的AI推理能力与复古8-Bit视…...