文件系统总结

news2024/9/30 5:28:02

《本文件系统默认linux文件系统》

一、文件系统基本概念

  • 文件系统是操作系统中负责存取和管理信息的模块,它用统一的方式管理用户和系统信息的存储、检索、更新、共享和保护,并为用户提供一整套方便有效的文件使用和操作方法
  • 文件系统是操作系统中管理文件的机构,提供文件存储和访问功能。
  • 目录是由文件说明索引组成的用于文件检索的特殊文件。

二、文件系统基本组成

 

1、文件系统的作用

                为应用程序提供逻辑抽象(虚拟机)

                为磁盘空间提供管理机制(资源管理器)

2、磁盘格式化三区域

        超级块:存储文件系统详细信息。如块大小、块个数、空闲块等。

        索引节点区:存储索引节点。

        数据块区:存储文件或目录数据。

三区域数据加载至内存时机:文件系统挂载时加载超级块;访问数据时加载索引节点,数据。

3、磁盘中文件存储

        磁盘读写最小单位:扇区,512B;                                                                                                        文件系统读写最小单位:数据块,4KB;                                                                                             也就是读取文件系统的一个数据块,在磁盘上对应的就是读取8个扇区。                                           一个数据块对应着8个扇区目的就是提高文件读取效率。

4、文件俩数据结构

Linux 文件系统会为每个文件分配两个数据结构:索引节点(index node)和目录项(directory entry,它们主要用来记录文件的元信息和目录层次结构。

        索引节点(inode):(文件唯一标识)记录文件的元信息。如 inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等。存储在磁盘内

        目录项(dentry):用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成目录结构,但它与索引节点不同的是,目录项是由内核维护的一个数据结构,缓存在内存

联系 & 区别

索引节点标示唯一的文件,一个文件有多个名字,故索引节点与目录项为一对多关系。硬链接的实现就是多个目录项中的索引节点指向同一个文件。

目录与目录项

目录是个文件,永久保存在磁盘内;目录项是内核维护的数据结构,存储在内存。

目录存储在磁盘,为提高查询目录效率,内核将已访问过的目录用数据结构-目录项缓存在内存。再次查询目录时直接在内存查找目录项即可。

5、三大类文件系统

  • 磁盘文件系统,它是直接把数据存储在磁盘中,比如 Ext 2/3/4、XFS 等都是这类文件系统。
  • 内存文件系统,这类文件系统的数据不是存储在硬盘的,而是占用内存空间,我们经常用到的 /proc/sys 文件系统都属于这一类,读写这类文件,实际上是读写内核中相关的数据。
  • 网络文件系统,用来访问其他计算机主机数据的文件系统,比如 NFS、SMB 等等。

文件系统首先要先挂载到某个目录才可以正常使用,比如 Linux 系统在启动时,会把文件系统挂载到根目录。

 

三、虚拟文件系统

虚拟文件系统(Virtual File System,VFS定义一组所有文件系统都支持的数据结构和标准接口

由于文件系统众多,采用VFS可不用理解文件系统原理,只需要掌握VFS即可针对文件系统操作。

作用类比 JDBC:Java通过JDBC 操作各种关系数据库

四、文件的使用

文件打开关闭基本方式:系统调用

 

以下代码表示读取文件的过程:
fd = open(name, flag); # 用open系统调用打开文件,参数为文件名,路径名
...
write(fd,...);         # 用write写数据,参数包含open返回的 文件描述符
...
close(fd);             # 文件使用完毕,使用close系统调用关闭文件,避免资源泄露

进程打开文件,操作系统为每个进程维护一个 文件打开表,其每一项为 文件描述符

打开文件表中维护着打开的文件的状态和信息:

包括:文件指针,文件打开计数器、文件磁盘位置、访问权限。

用户习惯以字节的方式读写文件,而操作系统则是以数据块来读写文件,那屏蔽掉这种差异的工作就是文件系统。文件系统的基本操作单位是数据块。

五、文件的存储

 1、文件与数据区别

        数据就是可被计算机处理的符号总称。

        文件是存储在某种长期储存设备上的一段数据流。

2、连续存储

        文件存放在磁盘内连续的物理空间中。

        文件头 包含文件 起始位置 和 大小。

优点:读写效率高,一次磁盘寻道可读出全部文件。

缺点:产生磁盘空间碎片;文件长度不易扩展。

3、非连续存储

链表方式

隐式链表:每个node分为指针区与数据区,各节点通过指针连接。

        缺点:一旦某个节点指针丢失,则无法寻址。

显式链表:直接将指针存放到内存中的链接表(文件分配表FAT)中,                                                                        每个表项中存放链接指针,指向下一个数据块号

        优缺点:减少访问磁盘提高检索速度。但是不适用于大磁盘,FAT要占用内存!

索引方式

每个文件创建一个 <索引数据块>,存放着指向文件数据块的指针列表。

文件头 需只想索引数据块的 指针。这样通过文件头 可以知道 索引数据块位置,再通过索引数据块内的指针,找到文件数据块。

 

索引的方式优点在于:

易扩展;无空间碎片;可顺序读也可随机读。

六、空闲空间管理

目的:快速找到空闲空间存放数据。

1、空闲表法

        适用于建立连续文件;适合空闲空间个数少的。

为所有空闲空间建立空闲表,表内容包含空闲区第一个块号及空闲区块个数。

 

2、空闲链表法

        每个空闲块里的指针指向下一个空闲块

优缺点:其特点是简单,但不能随机访问,工作效率低,因为每当在链上增加或移动空闲块时需要做很多 I/O 操作,同时数据块的指针消耗了一定的存储空间。

空闲表法和空闲链表法都不适合用于大型文件系统,因为这会使空闲表或空闲链表太大。

3、最好的 -> 位图法

位图是利用二进制的一位来表示磁盘中一个盘块的使用情况。

当值为 0 时,表示对应的盘块空闲,值为 1 时,表示对应的盘块已分配。

七、文件系统的结构

文件系统由大量 块组 构成

 引导块,在系统启动时用于启用引导

八、目录的存储

目录文件的数据块里保存的是目录里面一项一项的文件信息(如文件名、 inode、文件类型等)。

目录文件的数据块内文件信息最简单格式:列表。缺点是查找效率低。

保存目录的格式:哈希表

        对文件名进行哈希计算,把哈希值保存起来,如果我们要查找一个目录下面的文件名,可以通过名称取哈希。如果哈希能够匹配上,就说明这个文件的信息在相应的块里面。

目录存储在磁盘内,内核会维护数据结构目录项,将访问的目录存储在内存中,实现快速访问。

九、软链接和硬链接

作用:为解决文件的共享使用。还带来了隐藏文件路径、增加权限安全及节省存储等好处。

硬链接:多个目录项中的「索引节点」(inode)指向一个文件。

软链接:重新创建一个文件,这个文件有独立的 inode,但此文件的内容是另外一个文件的路径

 区别:

1、本质:
硬链接:多个目录项同一个inode,只是文件名字不同。
软链接:是不同的文件,inode不同。
2、跨分区
不同文件系统inode数据结构类型不同。硬链接无法跨分区、跨设备建立,软链接可以。
3、目录
硬链接无法创建目录硬链接,软链接可以
4、相互关系
硬链接没有主次之分,相互独立
软链接依赖于原文件,原文件被删除,软链接即不可用
5、链接数
硬链接会删除增加会影响链接数,软链接不会,因为inode不一样。
6、相对路径
硬链接创建时,原始文件路径是相对于当前路径。
软链接创建时,原始文件路径是 相对于软链接的路径

十、文件I/O

1、缓冲与非缓冲 I/O

判断标准:是否利用标准库缓冲。

  • 缓冲 I/O:利用标准库的缓存实现文件的加速访问,而标准库再通过系统调用访问文件。
  • 非缓冲 I/O:直接通过系统调用访问文件,不经过标准库缓存。

2、直接与非直接 I/O

判断标准:是否利用操作系统的缓存。

  • 直接 I/O:直接经过文件系统访问磁盘。
  • 非直接 I/O:读操作时,数据从内核缓存中拷贝给用户程序,写操作时,数据从用户程序拷贝给内核缓存,再由内核决定什么时候写入数据到磁盘。

缓存内数据写入磁盘时机:内存资源紧张;超时;用户主动调用 sync。

3、 阻塞与非阻塞 I/O VS 同步与异步 I/O

阻塞 I/O

        当用户程序执行 read ,线程会被阻塞,一直等到内核数据准备好,并把数据从内核缓冲区拷贝到应用程序的缓冲区中,当拷贝过程完成,read 才会返回。

注意,阻塞等待的是「内核数据准备好」「数据从内核态拷贝到用户态」这两个过程

非阻塞 I/O

        非阻塞的 read 请求在数据未准备好的情况下立即返回,可继续往下执行,此时应用程序不断轮询内核,直到数据准备好,内核将数据拷贝到应用程序缓冲区,read 调用才可以获取到结果。

异步 I/O

      「内核数据准备好」和「数据从内核态拷贝到用户态」这两个过程都不用等待。

总结

 

I/O 是分为两个过程的:

  1. 内核数据准备的过程
  2. 数据从内核空间拷贝到用户进程缓冲区的过程

阻塞 I/O 会阻塞在「过程 1 」和「过程 2」,而非阻塞 I/O 和基于非阻塞 I/O 的多路复用只会阻塞在「过程 2」,所以这三个都可以认为是同步 I/O。

异步 I/O 则不同,「过程 1 」和「过程 2 」都不会阻塞。

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

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

相关文章

【Quartus FPGA】EMIF DDR3 读写带宽测试

在通信原理中&#xff0c;通信系统的有效性用带宽来衡量&#xff0c;带宽定义为每秒传输的比特数&#xff0c;单位 b/s&#xff0c;或 bps。在 DDR3 接口的产品设计中&#xff0c;DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置&#…

JAVA基础多线程-模拟线程死锁以及预防和避免死锁

引言 线程死锁描述的是这样一种情况&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 一&#xff0c;模拟死锁 示例代码&#xff1a; public class LockT1 {Object o …

最全面的msvcp110.dll丢失修复方法分享,快速修复msvcp110.dll文件

今天主要给大家详细的介绍一下msvcp110.dll丢失修复的方法&#xff0c;因为在网上看到很多人因为这个问题而烦恼&#xff0c;其实这个问题不难解决的&#xff0c;下面就给大家分享多种方法&#xff0c;一起来看看吧。 一. 修复msvcp110.dll丢失的方法 重新安装相关程序 首先&…

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…

从源码分析Handler面试问题

Handler 老生常谈的问题了&#xff0c;非常建议看一下Handler 的源码。刚入行的时候&#xff0c;大佬们就说 阅读源码 是进步很快的方式。 Handler的基本原理 Handler 的 重要组成部分 Message 消息MessageQueue 消息队列Lopper 负责处理MessageQueue中的消息 消息是如何添加…

githack的安装步骤+一次错误体验

一.githack的安装步骤 1.要在Kali Linux上安装GitHack工具&#xff0c;您可以按照以下步骤操作&#xff1a; 打开终端并使用以下命令克隆GitHack存储库&#xff1a; git clone https://github.com/lijiejie/GitHack.git2.进入GitHack目录&#xff1a; cd GitHack3.安装依赖项…

『HarmonyOS』万物互联,分布式操作系统

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位喜欢写作&#xff0c;计科专业大二菜鸟 &#x1f3e1;个人主页&#xff1a;starry陆离 &#x1f552;首发日期&#xff1a;2022年7月5日星期二 &#x1f30c;上期文章&#xff1a;『首期文章』 &#x1f4da;订阅专栏&…

leetcode刷题(柠檬水找零、接雨水、宝石与石头、将数组和减半的最少操作次数、更新数组后处理求和查询、删除每行中的最大值、并行课程③)

目录 1、柠檬水找零 2、接雨水 3、宝石与石头 4、将数组和减半的最少操作次数 5、更新数组后处理求和查询 6、删除每行中的最大值 7、并行课程③ 1、柠檬水找零 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:dollars [0, 0] # 美元数组&am…

每日一题——有序链表去重

题目 删除给出链表中的重复元素&#xff08;链表中元素从小到大有序&#xff09;&#xff0c;使链表中的所有元素都只出现一次。 例如&#xff1a;给出的链表为1→1→2,返回1→2。 给出的链表为1→1→2→3→3,返回1→2→3。 数据范围&#xff1a;链表长度满足 0≤n≤100&#…

深度学习训练营之DCGAN网络学习

深度学习训练营之DCGAN网络学习 原文链接环境介绍DCGAN简单介绍生成器&#xff08;Generator&#xff09;判别器&#xff08;Discriminator&#xff09;对抗训练 前置工作导入第三方库导入数据数据查看 定义模型初始化权重定义生成器generator定义判别器 模型训练定义参数模型训…

7.28

1.思维导图 2.qt的sever #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList> …

计组 [指令系统] 预习题目

PPT第5章 第2部分预习题目 预习内容及相关问题 什么是R,I,J型指令&#xff0c;它们的特点&#xff1f; &#xff08;二&#xff09;R型指令的数据通路 &#xff08;指令功能与其对应的逻辑结构&#xff09; 功能&#xff1a;R[rd] ← R[rs] op R[rt]&#xff0c;如&#xff1a…

React的UmiJS搭建的项目集成海康威视h5player播放插件H5视频播放器开发包 V2.1.2

最近前端的一个项目&#xff0c;大屏需要摄像头播放&#xff0c;摄像头厂家是海康威视的&#xff0c;网上找了一圈都没有React集成的&#xff0c;特别是没有使用UmiJS搭脚手架搭建的&#xff0c;所以记录一下。 海康威视的开放平台的API地址&#xff0c;相关插件和文档都可以下…

行列转换.

表abc&#xff1a; &#xff08;建表语句在文章末尾&#xff09; 想要得到&#xff1a; 方法一 with a as(select 年,产 from abc where 季1), b as(select 年,产 from abc where 季2), c as(select 年,产 from abc where 季3), d as(select 年,产 from abc where 季4) selec…

图像识别概述

图像识别的过程 图像识别技术的过程分以下几步&#xff1a; 1. 信息的获取&#xff1a; 是指通过传感器&#xff0c;将光或声音等信息转化为电信息。也就是获取研究对象的基本信息并通过某种方法将其转变为机器能够认识的信息。 2. 预处理&#xff1a; 主要是指图像处理中的…

行业追踪,2023-07-28

自动复盘 2023-07-28 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

Android中绘制的两个天气相关的View

文章目录 一、前言二、降雨的代码三、风向代码 一、前言 开发天气相关软件时候&#xff0c;做了两个自定义View&#xff0c;这里进行记录&#xff0c;由于涉及类较多&#xff0c;这里仅包含核心代码&#xff0c;需要调整后才可以运行&#xff0c;自定义View范围仅包含网格相关…

机器学习伦理:探讨隐私保护、公平性和透明度

文章目录 &#x1f340;引言&#x1f340;隐私保护&#x1f340;公平性&#x1f340;透明度&#x1f340;结论 随着机器学习技术的不断发展和应用&#xff0c;我们必须面对伦理问题&#xff0c;以确保这些智能系统的发展和使用是符合道德和法律规范的。本文将就机器学习伦理的关…

Revit二次开发 插件加密、打包、发布、授权全套教程

目录 代码加密及授权 添加授权工具引用 添加授权验证代码段 使用VMProtect进行代码保护 代码加密标记 代码加密 发布产品 软件打包 软件发布 相关文件的获取地址 本教程基于mxbim.com所提供的服务。 Revit二次开发 插件加密、打包、发布、授权全套教程 本网站(www.…

实锤研究,ChatGPT能力掉线!

早在一个多月前&#xff0c;ChatGPT性能下降的传闻便开始在网上流行&#xff0c;不少订阅了Plus版的用户纷纷表示&#xff0c;感觉ChatGPT在经历了几轮更新后开始降智&#xff0c;甚至有时反应速度也会出现问题。而如今&#xff0c;这一传闻终于得到了证实。 就在本周&#xf…