Linux-文件系统

1. 物理结构

计算机的存储硬件有很多,这里讲磁盘。

磁盘的物理结构大致分为:

  • 磁盘(数据存储)
  • 磁头
  • 音圈马达
  • 主轴

所有的数据都存储在磁盘上,磁盘有很多片,每一个面都有对应的磁头来对数据进行更改

磁头是怎么找到对应的数据的呢?

磁盘存储的数据以扇区为基本单位(每个扇区512byte)

磁盘被划分为

想找到某一个扇区,就要找到,哪一个柱面,哪一个盘面,哪一个扇区

C:柱面,通过磁头的摆动

H:盘面,也可以是磁头,找到对应的磁头

S:扇区,通过盘面的旋转

所有找到磁盘上的某一个扇区,就需要知道CHS

数据存储在磁盘的一个个扇区中,在一圈圈磁道上,我们可以把这个空间抽象成一个线性结构,就像磁带

2. 逻辑结构

逻辑结构是线性结构,就像数组

我们对于磁盘的管理,转变成对于数组的管理

操作系统对于硬件,做了一个软件封装

LBA是操作系统的一个算法,把数组下标,转化为对应的CHS

通过数组下标,就找到了对应的扇区上的数据

3. 文件系统的管理

先对大的区间进行分组,分成小的块组,在对块组进行区域划分

Block Group:文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相 同的结构组成

超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息,Super Block的信息被破坏,可以说整个文件系统结构就被破坏了

块组描述符(Group Descriptor Table,GDT):,描述块组属性信息

块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没 有被占用

inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。

inode节点表(inode Table) : 存放文件属性如 文件inode编号,文件大小,所有者,最近修改时间等(128byte)

数据区(Data blocks):存放文件内容,多个4kb大小的集合

通过这样的结构,把文件的属性和内容分开存储,但是一个文件,知道了文件的inode,怎么找到对应的文件内容呢?

inode包含:

  • inode编号(OS层面上,一个文件的唯一标识符)
  • blocks[15]

其中blocks存的就是指向data block对应的指针数组

数组下表前12个指针,都指向对应的单个data block

下标为12,13,14,他们存放数据块编号所指向的数据块内容,存放的不再是文件内容,同样是属于该文件的数据块编号。

4. 目录

目录也是文件,目录文件的data block存的是 文件名与inode的映射关系

文件名 :inode

此时我们就清楚了为什么inode中包含文件的所有属性,但是就是没有文件名了,因为文件的文件名和它对应的inode存在上级目录的data blocks中

5. 文件操作

创建文件:

在inode Table 申请未被使用的inode

文件属性存入inode中

文件名和inode的映射关系保存在目录的data block

写入文件:

在目录的映射关系中找到对应的inode

通过inode找到存放文件数据的data block写入

block Bitmap更新

inode属性更新

读文件:

在目录的映射关系中找到对应的inode

通过inode找到存放文件数据的data block读取数据加载到内存上

删除文件:

在目录的映射关系中找到对应的inode

通过inode找到存放文件数据的data block

对应的block Bitmap置0 inode Bitmap 置0

如何找到目录,目录也是一个文件,也有对应的inode,这个目录的inode在上级目录的内容里,所以就要一路从/(根目录开始),操作系统对此问题的解决方案是:Dentry

关于这个具体看下面这个:

大佬写的

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

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

相关文章

轻松处理文件名,告别重复命名烦恼!一键覆盖复制操作,让文件管理更高效!

我们每天都在与大量的文件打交道。从工作文档到生活照片,从学习资料到娱乐视频,每一个文件都承载着我们的记忆和辛勤付出。然而,随着文件数量的不断增加,文件名冲突、重复命名等问题也愈发突出,给我们的文件管理带来了…

Python:解析pyserial串口通讯

简介:串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单&#…

DC-DC电源芯片规格书上的各种参数详解

1.输出电压精确度 输出电压的精确度,也被称为设定点精度,它描述了输出电压的允许误差。该参数通常是在常温,满载和额定输入电压的条件下测得的,它是这样定义的: 输出电压之所以产生误差,是因为元器件本身存在误差,特别是输出端的分压电阻,它将输出电压降低后比PWM比较…

【白盒测试】单元测试的理论基础及用例设计技术(6种)详解

目录 🌞前言 🏞️1. 单元测试的理论基础 🌊1.1 单元测试是什么 🌊1.2 单元测试的好处 🌊1.3 单元测试的要求 🌊1.4 测试框架-Junit4的介绍 🌊1.5 单元测试为什么要mock 🏞️…

BGP配置和应用案例

策略路由的配置步骤 l 策略路由的配置步骤如下: 创建route-map 通过ACL匹配感兴趣的数据,定义策略动作 在指定接口下通过ip policy 命令应用route-map l 最终实现对通过该接口进入设备的数据进行检查,对匹配的数据执行规定的策略…

pytest参数化数据驱动(数据库/execl/yaml)

常见的数据驱动 数据结构: 列表、字典、json串 文件: txt、csv、excel 数据库: 数据库链接 数据库提取 参数化: pytest.mark.parametrize() pytest.fixture()…

大语言模型在研究领域的应用——信息检索中的大语言模型

信息检索中的大语言模型 大语言模型提升信息检索任务利用大语言模型进行信息检索大语言模型增强的信息检索模型. 检索增强的大语言模型输入优化策略.指令微调策略.预训练策略. 总结应用建议未来方向 大语言模型对于传统信息检索技术与应用范式带来了重要影响。这两者在技术路径…

数字接龙(蓝桥杯)

文章目录 数字接龙【问题描述】解题思路DFS 数字接龙 【问题描述】 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏,游戏在一个大小为N N 的格子棋盘上展开,其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下: 从左上…

游戏发行困境及OgGame云游戏解决方案简述

随着全球化浪潮的持续推进,中国游戏开发者们不再满足于国内市场的发展,而是开始将目光投向更为广阔的海外市场。这一趋势的崛起背后,是中国企业意识到国际化是其发展的必由之路,也是游戏行业突破国内困境的体现。本文将简要阐述游…

【线性代数 C++】求逆矩阵

对于 n n n阶矩阵 A A A,如果有 n n n阶矩阵 B B B,使 A B B A E ABBAE ABBAE,则说 A A A是可逆的,并把 B B B称为 A A A的逆矩阵. A A A的逆矩阵记作 A − 1 A^{-1} A−1,则 B A − 1 BA^{-1} BA−1.若 ∣ A ∣ ≠…

Recommended Azure Monitors

General This document describes the recommended Azure monitors which can be implemented in Azure cloud application subscriptions. SMT incident priority mapping The priority “Blocker” is mostly used by Developers to prioritize their tasks and its not a…

Hive-Sql复杂面试题

参考链接:hive sql面试题及答案 - 知乎 有哪些好的题目都可以给我哦 我来汇总到一起 1、编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 数据: userid,month,visits A,2015-01,5 A,2015-01,15 B,2015-01,5 A,2015-01,…

MySQL面试——聚簇/非聚簇索引

存储引擎是针对表结构,不是数据库 引擎层:对数据层以何种方式进行组织 update:加索引:行级锁;不加索引:表级锁

Java 网络编程之TCP(三):基于NIO实现服务端,BIO实现客户端

前面的文章,我们讲述了BIO的概念,以及编程模型,由于BIO中服务器端的一些阻塞的点,导致服务端对于每一个客户端连接,都要开辟一个线程来处理,导致资源浪费,效率低。 为此,Linux 内核…

Stable Diffusion WebUI 使用 VAE 增加滤镜效果

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本文主要介绍 VAE 模型,主要内容有:VAE 模型的概念、如果下载 VAE 模型、如何安装 VAE 模型、如…

520提升幸福感的好物有哪些?5款必备产品推荐!

520作为年度表白节日,提醒人们别忘了在日常中向所爱之人表达浪漫。从鲜花、美酒到护肤品,礼物成为表达爱意的重要方式。然而,如何选购适合对方的礼物成为人们的难题。过去,关于“硬核520礼物”等话题热度不减,各种送礼…

MQ面试题

为什么要使用消息队列? 优点:解耦、异步、流量削峰 缺点:可用性降低、复杂性提高、一致性问题 为什么选择了RabbitMQ而不是其它的MQ? kafka是以吞吐量高而闻名,不过其数据稳定性一般,而且无法保证消息有…

同旺科技 USB TO SPI / I2C适配器读写24LC256--页写

所需设备: 1、USB 转 SPI I2C 适配器;内附链接 2、24LC256芯片 适应于同旺科技 USB TO SPI / I2C适配器升级版、专业版; 从00地址开始写入64个字节,然后再将64个字节读回; 页写时序: 读时序&#xff1a…

C语言中整型与浮点型在内存中的存储

今天让我们来看看整型的数据和浮点型的数据在内存中是怎么存储的呢 整型数据在内存中的存储 整型数据在内存中存储的是二进制的补码 正数的话也没什么可说的,原码反码补码都相同 我们来看看负数: 以-5为例 原码:10000000 00000000 00000000 0…

Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总

一 问题一 pod [!] Unknown command: package 1.1 如果没有安装过cocoapods-packager,安装cocoapods-packager,sudo gem install cocoapods-packager 1.2 如果已经安装cocoapods-packager,还是出现上面的错误,有可能是pod的安…