当前位置: 首页 > 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"…...

天地图入门|标注|移动飞行|缩放,商用地图替换

“天地图”是国家测绘地理信息局建设的地理信息综合服务网站。集成了来自国家、省、市&#xff08;县&#xff09;各级测绘地理信息部门&#xff0c;以及相关政府部门、企事业单位 、社会团体、公众的地理信息公共服务资源&#xff0c;如果做的项目是政府部门、企事业单位尽量选…...

Flutter PC端UI组件库

一、参考Element-ui的设计和交互&#xff0c;构建基于dart的Flutter UI组件库 https://javonhuang.github.io/sky-ui-page/index.html...

NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备汇聚公共资源场景方案全析

随着信息技术的飞速发展&#xff0c;视频监控已经成为现代社会安全管理和业务运营不可或缺的一部分。特别是在公共资源管理方面&#xff0c;视频监控的应用日益广泛&#xff0c;涵盖了智慧城市、智能交通、大型企业以及校园安防等多个领域。NVR小程序接入平台EasyNVR作为一款功…...

干部谈话考察系统:革新传统,精准高效

在干部选拔任用和考核评价的过程中&#xff0c;谈话考察一直是关键环节之一。然而&#xff0c;传统的谈话考察方式却面临着诸多痛点&#xff0c;严重影响了干部考察工作的质量和效率。干部谈话考察系统的出现&#xff0c;为解决这些问题提供了有力的武器。 一、传统谈话考察的…...

反转链表(Leetcode)

反转链表 Leetcode题目链接 题意&#xff1a;翻转一个单链表 &#x1f330;: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 在链表本身进行反转即可&#xff0c;不用重新定义链表&#xff0c;这同时浪费时间和空间。 需要采用哑…...

制作游戏外挂的技术栈有哪些

制作游戏外挂是一项涉及多方面技术的复杂任务。这项技术通常被用于在游戏中获得不公平的优势&#xff0c;因此也遭到了大量的讨论与争议。制作外挂需要深厚的编程基础、对系统底层的深入理解以及对具体游戏架构的详细研究。以下是一篇全面的分析文章&#xff0c;旨在揭示制作游…...

python下载pdf

要下载 PDF 文件并将其保存到本地文件夹中&#xff0c;你可以使用 Python 的 requests 库来发送 HTTP 请求&#xff0c;并使用 os 和 io 库来处理文件操作。以下是一个示例代码&#xff0c;展示了如何从给定的 URL 下载 PDF 文件并将其保存到本地 data 文件夹中&#xff1a; i…...

我们来学mysql -- 同时使用 AND 和 OR 查询错误(填坑篇)

AND 和 OR 一同使用问题 现象分析处理扩展 现象 业务上在“锁定”当前零件所在出口国的所有零件时&#xff0c;出现其他国家零件 问题定位 分析 or 切断了操作符之间的连续性&#xff0c;从union角度分析 where k1 Td621 and k1 Vda96 or k3 P00009等同 select * fr…...

关于Websocket

Websocket的基本概念 Websocket是一个“应用层协议”&#xff0c;和HTTP地位是对等的。都是基于传输层的TCP实现的一个广泛被使用的应用层协议。这个协议可以实现服务器主动给客户端推送数据这样的功能。 websocket报文格式 简单了解一下Websocket的报文格式&#xff1a; FIN表…...

vue2 pdf 链接地址打开

vue2 pdf 链接地址打开 1、先下载依赖 “vue-pdf”: “^4.3.0”, “pdfh5”: “^1.4.0”, “pdfjs-dist”: “2.5.207”, 3、打开pdf <template><div id"app"><div id"demo"></div></div> </template> <script&g…...