Linux文件系统(操作系统的文件管理)

news2024/11/26 20:37:26

在这里插入图片描述

文章目录

  • 一.内存中的文件管理(文件与进程)
  • 二 .Linux系统视角下的计算机外设
  • 三.磁盘上的文件管理

参考Linux内核源码版本------linux-2.4.3

一.内存中的文件管理(文件与进程)

  • 操作系统之下,进程是计算机系统执行计算任务的基本单位,进程访问文件执行数据读写之前,操作系统会从外设获取相应的文件信息,在内存中建立struct file结构体对象来描述和管理文件,进程借助struct file结构体提供的文件信息执行文件操作.在这里插入图片描述
  • 进程PCBstruct task_struct与文件struct file之间的关联:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • Linux系统下,打开文件的系统调用接口:
    • int open(const char *pathname, int flags, mode_t mode);
    • 接口的返回值其实是fd_array列表中的元素数组下标,称为文件描述符,通过数组下标和fd_array列表,可以找到指定文件的struct file对象
  • Linux系统下,文件重定向接口:
    • int dup2(int oldfd, int newfd);
    • dup2接口原理:先关闭fd_array[newfd]指向的文件,然后在fd_array列表中,指针fd_array[oldfd]覆盖掉指针fd_array[newfd],后续使用oldfdnewfd执行文件操作,操作的便是同一个文件。
    • 进程替换不会影响进程PCB的大部分内容(包括struct file结构体),因此文件重定向在执行进程替换之后仍然生效.

二 .Linux系统视角下的计算机外设

在这里插入图片描述

  • 操作系统之下,计算机外设与计算机内存之间的交互必须依托于进程
  • 冯诺依曼计算机除了内存和CPU外,其他的与计算机内存进行交互的IO设备Linux系统中统一被视为被进程打开的文件
  • 与其他被进程打开的文件相同,工作中的IO设备在Linux内核中被统一描述为struct file结构体对象,不同的具体IO设备的struct file对象中的成员函数指针会指向不同的接口实现:
    在这里插入图片描述
  • 不同的IO设备对应的struct file中的函数指针指向不同的接口实现,这本质上就是C语言的多态编程,“Linux下一切皆文件”其实就是在Linux系统内核中体现的最早期的多态编程,这种编程模式在Linux内核中被频繁使用 (面向对象编程语言的始祖)

三.磁盘上的文件管理

  • Linux系统视角下,磁盘空间在呈线性排列,一个磁盘被分为多个分区,每个分区由多个块组构成,块组的结构如下:在这里插入图片描述
  • 块组的组成部分:
    • SuperBlock(超级块):包含的是整个文件系统的全局信息,比如 inode 总个数、块总个数、每个块组的 inode 个数、每个块组的块个数等等。SuperBlock的存在意义是备份文件系统的重要全局信息,保证文件系统的安全性和稳定性
    • GroupDescriptorTable(块组描述符):包含文件系统中所有块组的属性信息,与SuperBlock的作用类似。
    • BlockBitmap(数据位图)和inodeBitmap (inode 位图): 用于标识对应的数据块或inode是空闲的,还是正在被使用中。
    • inodeTable(inode 列表):包含了块组中所有的inodeinode与磁盘文件是一一对应的关系,inode中存储磁盘文件的文件信息和文件的数据块引索
    • Data blocks(数据块):存储文件的有效数据.
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1175695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 代码实例:并查集简单创建工具

文章目录 前言代码仓库代码说明main.cppMakefile 结果总结参考资料作者的话 前言 C 代码实例:并查集简单创建工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) 代码 说明 简单地创建并查集注…

MATLAB - Gazebo 联合仿真 —— 使用 UR10 机械臂检测和采摘水果

系列文章目录 文章目录 系列文章目录前言一、设置 Gazebo 仿真环境二、在 Gazebo 中模拟和控制机器人2.1 概述2.2 任务调度器2.3 感知和目标生成系统2.4 运动规划2.5 机械臂和关节控制系统 三、分配用于控制机器人的参数3.1 定义机器人模型和运动规划参数,3.2 定义机…

基于野马算法的无人机航迹规划-附代码

基于野马算法的无人机航迹规划 文章目录 基于野马算法的无人机航迹规划1.野马搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用野马算法来优化无人机航迹规划。 1.野马搜索算法 …

基于向量加权平均算法的无人机航迹规划-附代码

基于向量加权平均算法的无人机航迹规划 文章目录 基于向量加权平均算法的无人机航迹规划1.向量加权平均搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用向量加权平均算法来优化无…

CSS 滚动捕获 Scroll Snap

CSS 滚动捕获 Scroll Snap CSS 滚动捕获允许开发者通过声明一些位置(或叫作捕获位置)来创建精准控制的滚动体验. 通常来说轮播图就是这种体验的例子, 在轮播图中, 用户只能停在图 A 或者图 B, 而不能停在 A 和 B 的中间. 比如平时用淘宝或小红书, 当你上滑到下一个推荐内容时…

分享90个节日庆典PPT,总有一款适合您

分享90个节日庆典PPT,总有一款适合您 PPT下载链接:百度网盘 请输入提取码 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知识付费甚欢喜,为咱码农谋福利…

浅析C/C++的内存分段

这部分是计算机系统相关的知识,碍于本人才疏学浅,如本文存在疏漏或者错误,还望大佬能帮忙指出,感激不尽。 内存分段 从狭义上讲内存的分段可以分为堆、栈、数据段以及代码段(内存映射区比较复杂,暂不涉及…

C++ Concurrency in Action 2nd Edition

《C Concurrency in Action - SECOND EDITION》的中文翻译-面圈网 (mianshigee.com) C/C 学习教程源码-C/C源码推荐-面试哥 (mianshigee.com) 作者正是为C11标准引入线程库的C标准委员会成员本人!并且本书作者还编写了众多构成C标准的多线程和并发相关的提案、制定…

基于天鹰算法的无人机航迹规划-附代码

基于天鹰算法的无人机航迹规划 文章目录 基于天鹰算法的无人机航迹规划1.天鹰搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用天鹰算法来优化无人机航迹规划。 1.天鹰搜索算法 …

如何使用腾讯云+Picgo搭建图床

目录 一、进入腾讯云进行实名认证 二、领取免费存储额度 2.1新用户界面概览就可以领取 三、开始创建远端图床并生成秘钥等信息 3.1创建存储桶 3.2配置基本信息 3.3配置高级选项 3.4确认配置页面点击创建即可 3.5创建访问秘钥 3.6查看秘钥等信息 3.7查看桶名称 四、图…

《向量数据库指南》——开源框架NVIDIA Merlin 向量数据库Milvus

NVIDIA Merlin & Milvus 推荐系统 pipeline 中至关重要的一环便是为用户检索并找到最相关的商品。为了实现这一目标,通常会使用低维向量(embedding)表示商品,使用数据库存储及索引数据,最终对数据库中数据进行近似最近邻(ANN)搜索。这些向量表示是通过深度学习模型获…

Sentinel黑白名单授权规则解读

目录 基本介绍 代码实战 架构说明 RequestOriginParser的实现类 网关添加请求头 配置授权规则 基本介绍 授权规则可以对请求方来源做判断和控制。 很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源…

zigbee路灯无线通讯机制

zigbee路灯无线通讯机制 wang20160630 前言 目前路灯上通讯主要有电力载波和无线通讯;各有利弊,众说纷纭;本文不对两种技术进行比较,也不讨论哪种好,毕竟同种通讯模块,有的开发出来稳定,有的…

cesium示例教程100+目录

cesium示例教程100旨在为开发者提供简单快捷的代码示例,复制即可用。在每一个示例中,解释相应的API知识点,做到简易实现,轻松学会。 文章目录 目录基础设置及界面配置设置材质material显示图形绘制图形加载文件数据加载各种地图综…

2023.11.6-分析 Gateway 和 VirtualService

2023.11.6-分析 Gateway 和 VirtualService 目录 本节实战 实战名称 正文 前面我们创建了一个 Gateway 和 VirtualService 对象,用来对外暴露应用,然后我们就可以通过 ingressgateway 来访问 Bookinfo 应用了。那么这两个资源对象是如何实现的呢&…

PyTorch深度学习实战——图像着色

PyTorch深度学习实战——图像着色 0. 前言1. 模型与数据集分析1.1 数据集介绍1.2 模型策略 2. 实现图像着色相关链接 0. 前言 图像着色指的是将黑白或灰度图像转换为彩色图像的过程,传统的图像处理技术通常基于直方图匹配和颜色传递的方法或基于用户交互的方法等完…

提升你的C#技能:掌握PrintDocument实现打印操作的秘诀

前言: 我们用C#在开发应用的时候,经常需要打印操作,比如你需要打印某些记录,或者是某些图像都需要用到打印的操作,比如我需要打印报警记录,按照指定的格式打印出来,我需要PrintDocument类&…

项目管理之如何识别并应对项目风险

项目风险管理是项目管理中不可忽视的环节,如何识别并应对项目的风险对于项目的成功实施至关重要。本文将介绍风险管理的流程、风险分解结构、定性及定量风险评估方法,以及消极和积极的风险应对策略,旨在帮助读者更好地理解和应对项目风险。 …

(1)(1.12) LeddarTech LeddarVu8

文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 LeddarTech LeddarVu8 是一款长距离(185m)激光雷达,可在 16 度至 99 度视场范围内提供 8 个单独的距离,具体取决于所使用的型号。ArduPilot 始终使用所提供的 8 个距离中最…

VSCode设置中文语言界面(VScode设置其他语言界面)

一、下载中文插件 二、修改配置 1、使用快捷键 CtrlShiftP 显示出搜索框 2、然后输入 configure display language 3、点击 (中文简体) 需要修改的语言配置 三、重启 四、可能出现的问题 1、如果configure display language已经是中文配置,界面仍是英文 解决&a…