操作系统专栏2-文件系统from小林coding

文件系统

  • 文件系统构成
  • 虚拟文件系统
  • 文件的使用
  • 文件的存储
    • 连续存储
    • 非连续空间存放方式
      • 链表方式
      • 索引方式
    • Linux文件的实现方式
  • 空闲分区的管理
  • 文件系统结构
    • 目录的存储
    • 软链接和硬链接

文件系统构成

Linux的设计哲学有一点很重要:一切皆文件,不仅仅是普通的文件和目录,就连块设备,管道,socket都属于文件的范畴
Linux会为每个文件分配两个数据结构:索引节点目录项

  • 索引节点:inode,记录文件的元信息,比如inode编号,文件大小,访问权限,创建时间,数据在磁盘中的位置,同样是文件的唯一标识,索引节点同样占据磁盘空间
  • 目录项:也就是dentry,记录文件名字,索引节点指针以及与其他目录项之间的层级关系,多个目录项关联起来,形成目录结构.与索引节点不同的是,目录项内核维护,不存放在磁盘,而是缓存在内存中

索引节点唯一标识文件,目录项记录文件的名字,实际上目录项与索引节点之间的关系是多对一的,硬链接的实现就是多个目录项中的索引节点指向同一个inode节点,目录不是目录项,目录是一个文件(inode),目录项的inode指针要么指向目录,要么指向文件
在这里插入图片描述
磁盘进行格式化时,会划分三个区域,分别是超级块,索引节点区和数据块区

  • 超级块:存储文件系统的详细信息,比如块大小,块个数以及空闲块
  • 索引节点区,存储索引节点
  • 数据块,存储文件或者目录数据

上述区进入内存的时机是不同的,全部放入的话内存压力过大,加载进内存的时机如下

  • 超级块:文件系统挂载时装载
  • 索引节点区:当文件访问时进入

虚拟文件系统

文件系统种类众多,操作系统希望对用户提供一个同一的接口,引入了虚拟文件系统这个中间层
VFS定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解VFS提供的接口即可
在这里插入图片描述
linux提供的文件系统主要有以下三类

  • 磁盘文件系统 :直接把数据存储在磁盘中,比如ext2/3/4 等
  • 内存文件系统:文件系统的数据占用内存空间,代表有/proc,/sys(都是存放内核的统计数据和配置等信息),读写这类文件,实际上读取的是内核中的相关数据
  • 网络的文件系统:访问其他计算机的文件系统,比如NFS等

文件系统需要挂载之后才能使用,比如Linux启动时,会把文件系统挂载在根目录下

文件的使用

用户使用文件的方式如下
在这里插入图片描述
打开文件后,操作系统为每个进程维护一个打开文件表,文件表中的每一项为文件描述符,中间的内容如下

  • 文件指针:跟踪上次读写位置,对打开文件的某个进程来说是唯一的
  • 文件打开计数器:文件关闭时,操作系统必须重用打开文件条目(否则存储压力过大),多个进程打开同一个文件,因此需要记录最后一个关闭的进程,最后一个关闭才删除
  • 文件磁盘位置:文件操作修改数据,信息保存在内存中和,避免每个操作都是裸IO
  • 访问权限:每个进程打开文件都有一个访问模式,以便操作系统允许或者拒绝后续的IO请求

文件的存储

文件的存储有以下两种方案:连续存储和非连续存储

连续存储

文件存放在磁盘连续的空间中,指定起始块位置和长度即可存储和访问文件,缺点磁盘空间碎片(外部碎片)和文件长度不易扩展的缺点

非连续空间存放方式

链表方式

链表方式存放的是离散的文件块,这样存放可以消除磁盘碎片,同时文件的长度可以动态扩展,根据实现方式的不同,链表方式还可以分为隐式连接和显示连接两种

  • 隐式链接:文件头包含第一块和最后一块,每个文件快包含下一个文件块(很像自己实现的带头尾指针的链表)
  • 显示链接:将数据块指针显式的存放在内存的链表中,这样的表格称为FAT

索引方式

索引方式是为每个文件创建一个索引数据块,里面放的是指向文件数据块的指针列表在这里插入图片描述
当一个索引数据块存放不了索引时,有如下两种解决方式
在这里插入图片描述
在这里插入图片描述
上图的方式就是多级索引的雏形了,不过上面是二级索引

优点:

  • 文件创建,增大,缩小很方便
  • 不会有碎片问题
  • 支持顺序读写的随机读写

Linux文件的实现方式

在这里插入图片描述
根据文件的大小,存放的方式有所变化

  • 如果存放文件所需的数据块小于 10 块,则采用直接查找的方式
  • 如果存放文件所需的数据块超过 10 块,则采用一级间接索引方式
  • 如果前面两种方式都不够存放大文件,则采用二级间接索引方式
  • 如果二级间接索引也不够存放大文件,这采用三级间接索引方式

那个索引节点inode包含13个指针,10个直接指向数据块的,第11个指向一级索引的,第12个指向二级索引的,第13个指向三级索引的

空闲分区的管理

磁盘的空闲分区也需要进行管理,几种常见的管理方式如下

  • 空闲表法:为所有的空闲空间建立一张表,表内容为空闲区的第一个块号和空闲区块的个数,如果空闲区比较多的情况下,表的开销巨大
  • 空闲链表法:使用链表的方式管理空闲空间,每个空闲的块中有下一个指针指向空闲块
  • 位图法:位图利用二进制来表示磁盘中一个盘块的使用情况,值为0表示对应的盘块空闲,值为1表示对应的盘块已分配,linux系统即是采用位图的方式进行磁盘空间的管理,不仅是空闲磁盘空间的管理,还有inode空闲区间的管理

文件系统结构

Linux使用位图的方式管理空闲空间,用户创建新文件时,Linux通过inode的位图找到空闲可用的inode,进行分配,存储数据时,通过块的位图找到空闲的块并分配,一个页的位图最多能表示128Mb的数据,远远小于文件的大小,Linux提出了一个块组的概念
在这里插入图片描述

目录的存储

Linux将目录存储成了文件,甚至可以使用vim打开,普通的文件保存的是文件数据,目录文件保存的是目录中一项一项的文件信息
在这里插入图片描述

软链接和硬链接

硬链接和软链接用于提供文件共享使用功能,实现方式不相同
硬链接是多个文件目录项中的索引节点指向同一个inode,由于inode无法跨越文件系统,所以硬链接无法跨域文件系统,并且仅当所有硬链接和源文件被删除时,源文件才会被真正的删除
在这里插入图片描述
软链接相当于重新创建了一个文件,这个文件的inode独立,不过这个文件的内容是另一个文件的路径,因此软练可以跨越文件系统.
在这里插入图片描述

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

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

相关文章

程序员面试金典17.*

文章目录 17.01 不用加号的加法17.04 消失的数字17.05字母与数字17.06 2出现的次数17.07 婴儿名字17.08 马戏团人塔17.09 第k个数17.10 主要元素17.11 单词距离17.12 BiNode17.13 恢复空格(未做,字典树dp)17.14 最小K个数17.15 最长单词17.16…

webpack基础知识一:说说你对webpack的理解?解决了什么问题?

一、背景 Webpack 最初的目标是实现前端项目的模块化,旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候,我们会通过文件划分的形式实现模块化,也就是将每个功能及其相关状态数据各自单独放到不同的JS 文件中 约定每个文件是一…

数字孪生的「三张皮」问题:数据隐私、安全与伦理挑战

引言 随着数字化时代的来临,数据成为了当今社会的宝贵资源。然而,数据的广泛使用也带来了一系列隐私、安全与伦理挑战。数字孪生作为一种虚拟的数字化实体,通过收集和分析大量数据,模拟和预测现实世界中的各种情境,为…

windows美化任务栏,不使用软件

1.任务栏透明: 效果图: (1).winr打开命令行 输入regedit回车打开注册表 regedit (2).在注册表中打开 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 这个路径 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explore…

(自控原理)自动控制的分类与基本要求

一、分类 1、线性连续控制系统 2、非线性控制系统 判断是时变时不变看的是系数,判断线性还是非线性看的是变量 二、基本要求 三、自动控制的分析方法

C++库函数——String类的模拟实现

目录 ①String类的主体 ②String类的具体实现 1.构造函数、拷贝构造函数、赋值运算符、析构函数 ⑴构造函数 ⑵拷贝构造函数 ⑶赋值运算符 ⑷析构函数 2.迭代器(范围for的实现原理) 3.修改:push_back, apppend, , clear, swap, c_str ⑴push_b…

如何设计一个自动化测试框架?

一个成熟的测试框架主要由 4 部分组成:基础模块、管理模块、运行模块和统计模块 基础模块 底层核心库 一般指用于操作被测试应用程序的第三方库,例如在 Web 端的 Selenium/WebDriver。如API端的Requests 对象库 PO模式中的页面对象 可重用组件 如一些…

Spring系列二:基于注解配置bean【建议收藏】

文章目录 💗通过注解配置bean🍝基本介绍🍝快速入门🍝注意事项和细节 💗自己实现Spring注解配置Bean机制🍝需求说明🍝思路分析🍝注意事项和细节 💗自动装配 Autowired&…

特性快闪:使用 Databend 玩转 Iceberg

作者:尚卓燃(PsiACE)澳门科技大学在读硕士,Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer https://github.com/PsiACE 几周前,Databricks 和 Snowflake 召开了各自的年度大会,除了今年一…

【WebRTC---序篇】(七)RTC多人连麦方案

服务端可以选择mediasoup,作为SFU服务器,只负责转发数据 下图举例三个Client (browser或者客户端)同时加入一个房间,每个app同时发布一路视频和一路音频,并且接受来自其他app的音视频流,mediasoup内部的结构如下&…

python爬虫基础

文章目录 前言爬虫简介urllib库的使用如何获取网页的源码一个类型六个方法一个类型六个方法1、read()方法2、readline()方法3、readlines()方法4、getcode()5、geturl()6、getheaders() urllib下载下载网页下载图片下载视频 请求对象的定制 未完待续 前言 爬虫爬的好牢饭吃的早…

Linux编辑器 - vim使用

1.vim的基本概念 Vim是一个广泛使用的文本编辑器,它是在Unix和Linux系统中常用的命令行文本编辑器之一。 vim的主要三种模式 ( 其实有好多模式,目前掌握这 3 种即可 ), 分别是 命令模式 ( command mode )、 插入模式 &#xff0…

/bin/bash: Resource temporarily unavailable

有现场反馈plsql无法连接数据库了,登录环境查看时发现从root切换到grid时报错/bin/bash: Resource temporarily unavailable [rootdb1 ~]# su - grid Last login: Thu Jul 27 18:45:04 CST 2023 su: failed to execute /bin/bash: Resource temporarily unavailab…

瑞吉外卖项目----(2)缓存优化

1 缓存优化 1.0 问题说明 1.1 环境搭建 将项目推送到远程仓库里,教程在git 提交远程仓库前建议取消代码检查 创建新的分支v1.0(用于实现缓存优化)并推送到远程仓库 1.1.1 maven坐标 导入spring-data-redis的maven坐标: &l…

2023年DevOps和云趋势报告!

要点 ●云创新已从革命性阶段转变为演进性阶段,重点是迁移和重新架构工作负载。云空间已发展为提供对可扩展资源和托管服务的按需访问,强调简化交互并减少团队的认知负担。 ●人工智能 (AI) 和大型语言模型 (LLM) 可以通过解决认知过载问题并支持即时管…

【ChatGLM_01】ChatGLM2-6B本地安装与部署(大语言模型)

基于本地知识库的问答 1、简介(1)ChatGLM2-6B(2)LangChain(3)基于单一文档问答的实现原理(4)大规模语言模型系列技术:以GLM-130B为例(5)新建知识库…

AgileBoot - 全栈项目启动

AgileBoot-Back-End: 基于Ruoyi做了大量重构优化的基础快速开发框架。采用Springboot Vue 3 Mybatis Plus 更面向对象的业务建模 面向生产的项目。(非玩具项目) 首先克隆代码,同是克隆前端和后端的代码。 前端代码启动: np…

飞桨AI Studio可以玩多模态了?MiniGPT4实战演练!

MiniGPT4是基于GPT3的改进版本,它的参数量比GPT3少了一个数量级,但是在多项自然语言处理任务上的表现却不逊于GPT3。项目作者以MiniGPT4-7B作为实战演练项目。 创作者:衍哲 体验链接: https://aistudio.baidu.com/aistudio/proj…

uniApp 对接安卓平板刷卡器, 读取串口数据

背景: 设备: 鸿合 电子班牌 刷卡对接 WS-B22CS, 安卓11; 需求: 将刷卡器的数据传递到自己的App中, 作为上下岗信息使用, 以完成业务; 对接方式: 1. 厂家技术首先推荐使用 接收自定义广播的方式来获取, 参考代码如下 对应到uniApp 中的实现如下 <template><view c…

阿里云域名备案

最好的爱情&#xff0c;不是因为我们彼此需要在一起&#xff0c;而是因为我们彼此想要在一起。 阿里云的域名如何备案&#xff0c;域名备案和ICP备案一样吗&#xff1f;&#xff1f; 截至我所掌握的知识&#xff08;2021年9月&#xff09;&#xff0c;阿里云的域名备案和ICP备案…