Linux基础IO【文件系统】

news2025/1/23 15:03:58

 

目录

1.磁盘文件

2.磁盘概念

2.1基本结构

2.2数据存储 

3磁盘信息

3.1块组信息 

4.文件操作 

4.1文件创建 

4.2文件访问

4.3对文件增删查改

4.4大文件存储 

 总结:



1.磁盘文件

在计算机中,没有被打开的文件都是静静的躺在外存(磁盘)中,当需要对文件进行操作时,会通过 inode对文件进行访问 

通过以下指令查看当前目录中文件的详细信息及 inode 值

ll -i

 如同 pid 与进程的唯一对应性一样,inode 与文件也是唯一对应的(未被硬链接的情况下),可以通过 inode 访问文件在磁盘中的详细信息

2.磁盘概念

 现在市面上的磁盘主要分为 机械硬盘 和 固态硬盘,前者读取速度慢,但便宜、稳定;后者读取速度快,但价格高昂且数据易损,两者各有其应用场景,本文主要介绍的是 机械硬盘

2.1基本结构

 

机械硬盘 的结构主要包括以下几种:

  • 盘片:一片两面,每一面都可以存储数据,有一摞盘片
  • 磁头:一面配备一个磁头,专门用于读取盘面中的数据
  • 主轴:用于控制整块盘的转动
  • 音圈马达:控制磁头的进退
  • 磁头臂:链接磁头与音圈马达
  • 伺服电路板:控制读取数据的流向及各种结构的运行

 

2.2数据存储 

 数据是以 0 和 1 的方式进行存储的,常见的存储介质有:强信号与弱信号高电平与低电平波峰与波谷南极与北极 等,而盘面上比较适合的是 南极与北极

机械硬盘 不能在其运行时随意移动,因为角度的偏转也有可能导致发生摩擦,造成数据丢失,更不能用力拍打 机械硬盘

 

在盘面设计上,一个盘面被切割若干个扇区,单个扇区大小为 512 字节(或者 4 kb),这些扇区用来存储数据,同一半径中的所有扇区组成扇面;而半径相同的扇区组成磁道(柱面)

我们可以先根据磁头(head)确定盘面,再根据半径定位磁道(柱面 cylinder),最后根据块号确定扇区(sector)

这种寻址方法称为 CHS 定位法,是机械设备查找具体扇区时的方法

 

虽然 CHS 定位法很妙,但它太依赖于具体硬件信息了,假设其中的硬件参数有所不同,那么 OS 就得使用另一套 CHS 定位法,于是为了做到 解耦OS 使用的并非 CHS 定位法进行文件定位,而是采用 LBA 逻辑地址块进行寻址

将磁道拉长,会得到一串线性空间(数组),其中的每个单位(扇区)为 512 字节(或者 4 kb

 

现在 OS 想访问具体的扇区时,只需通过 起始扇区的地址 + 偏移量 就可以获取 LBA 地址,然后通过特定手段转为 CHS 地址,交给外设进行访问即可 LBA和CHS转换

 

因此对于外设中文件的管理,经过 先描述,再组织 后,变成了对数组的管理,这个数据就是 task_struct 中的 struct block

最后我们就能理解为什么 IO 的基本单位是 4 kb 了,因为直接读取一个数据块(4 kb),这样可以提高 IO 效率(内存对齐)即使造成内存浪费也只会有最后一个内存浪费

3磁盘信息

系统在分区后,需要对区块进行格式化 

 

不同的文件系统在格式化时写入的数据是不同的,这里讨论的是 EXT 文件系统

  • 磁盘分区后,分组、填写系统属性是 OS 做的事

  • 为了使分区能被正常使用,需要对分区进行格式化

  • 分区格式化:OS 向分区写入文件系统的管理属性信息

  • 在具体分区内,还可以细分为 块组

 由 块组 构成的线性空间亦可称为 组线 (代表一个 分区

struct part
{
    struct part group[100];	//分为100个块组
    int lba_start;	//起始与结束位置
    int lba_end;
    //……
}

 

将现有资源再分配后,可以 最大化利用资源,避免造成浪费及拖慢效率

块组(Block Group)是本文的重点内容

3.1块组信息 

 块组 是由 分区 细分出的产物,它与分区的关系如图所示:

 

其中, Boot Block 是 启动块,大小固定为 1 kb,在每一条 组线 前都有此 块组,它用来 存储分区信息和系统启动,属于被保护的内容,不允许用户私自修改

至于其他 块组,它们有着统一的格式,具体内容如图所示:

 

其中一个文件对应一个 inode,而 inode 中存储了该文件的所有属性,包括所使用的数组块信息,因为文件很多,所以需要 先描述,再组织,即通过 inode Table 对 inode 进行管理 

 

注意:

  • inode 属性中并不包含文件名,文件名只是给用户用的
  • 目录文件也有 inode,目录中的数据块保存的是该目录下的 文件名 和 inode 编号对应的映射关系,而且在此目录内,文件名和 inode 互为 key 值
  • inode 确定分组,inode 值只在一个分区内有效,不能跨分区

 


4.文件操作 

4.1文件创建 

创建一个文件的步骤如下:

  1. 申请一个空闲的 inode,将文件信息记录至 inode 属性中
  2. 寻找空闲的数据块(Data block),将数据块信息填入 inode 中的磁盘分布区
  3. 添加文件名至当前目录文件的 Data block 中,同时将文件名和 inode 之中的属性链接起来

 注意: 每使用一个 inode 和一个 Data block,需要把它们对应位图中的信息改为已占用

4.2文件访问

 

文件创建后,如何根据 inode 访问文件呢?

  • 找到文件的 inode 编号,在目录分组中查找
  • 通过 inode 和 Data block 的映射关系,找到文件的数据块,并加载至内存中

这也就解释了为什么在 file 对象中会存在 inode 信息,因为它与 fd 一样重要

4.3对文件增删查改

 

文件创建后,如何删除?删除并不是真删除,而是将 inode Bitmap Block Bitmap 中位图信息进行修改即可(只要访问不到,就是删除)

根据文件名找到 inode 编号

再根据 inode 属性中的映射关系,设置 Block Bitmap 对应的比特位,设置为 0 (删内容)

最后根据 inode 编号设置 inode Bitmap 中对应的比特位为 0 (删属性)

将位图信息置为 0 后,创建新文件时,系统可以直接使用

至于文件的查找与修改,通过 inode 修改其内部属性即可

注意: inode 和 Data blcok 可能存在失衡的情况

一直创建空文件,导致 inode 满载,而 Data block 空余很多
不断往同一个文件中写入数据,导致 Data block 被占用,后续创建文件时,inode 无法再分配到 Data block

4.4大文件存储 

 

单个数据块大小有限(4 kb),如何做到一个数据块存储大量数据?

答案是 套娃Data block 中存储其他 Data block 信息,此时称为多级索引,可以做到一个数据块中存储大量数据

 

 总结:

文件部分复盘结束,这章确实很难理解,我第一遍稀里糊涂,第二遍马马虎虎,还是要多复盘,多整理。 

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

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

相关文章

《富爸爸:巴比伦最富有的人》读书笔记

目录 作者简介 感悟 经典摘录 观点: 支付给自己(理解是投资自己) 观点:源源不断地放入金币 观点: 把收入的一部分留给我自己 观点: 从专业的人士得到建议 观点:一旦为自己规定了任务,就一定要完成 …

如何修复Microsoft Edge不能以全屏模式打开​?这里提供几个故障排除方法

随着越来越多的Windows 10用户将Edge设置为默认浏览器,各种错误和小故障层出不穷。例如,许多用户抱怨他们无法在全屏模式下启动Edge。如果你正在寻找解决方案来解决这个恼人的问题,请按照下面的故障排除步骤进行操作。 修复Microsoft Edge不…

[Flink01] 了解Flink

Flink入门系列文章主要是为了给想学习Flink的你建立一个大体上的框架,助力快速上手Flink。学习Flink最有效的方式是先入门了解框架和概念,然后边写代码边实践,然后再把官网看一遍。 Flink入门分为四篇,第一篇是《了解Flink》&…

SaaS系统介绍

本文系个人学习笔记,内容来源于资料整合及个人理解。 1. 概念介绍 SaaS系统英文全称为Software as a Service(软件即服务),通俗来讲就是提供固定功能的在线软件。从宏观上看,SaaS有三大特点: 1. 用户无需…

【Java程序员面试专栏 Java领域】Java并发 核心面试指引

关于Java 并发部分的核心知识进行一网打尽,主要包括Java为什么会有并发问题,并发问题的解决方案,到最后的锁和JUC包的解决方案,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 基础概念 关于并发与并行,Java的内存模型,以及并发编程…

VScode主题推荐-个人使用

在介绍主题之前,先看一下怎么在 VS Code 中切换主题。VS Code 提供了便捷的快捷命令面板,里边各种常用的主题都可以搜索到,包括更换主题。打开快捷命令面板的快捷键是: Command/Ctrl shift p 下载安装主题需要打开VScode&…

MyBatisPlus - 润物无声、效率至上、丰富功能

目录 一、简介 1.1、为什么要使用 MybatisPlus 二、使用指南 2.1、依赖 2.2、配置 2.3、常用注解 2.4、BaseMapper 的使用 2.4.1、定义 Mapper 接口 2.4.2、基于 QueryWrapper 的查询(不推荐) 2.4.3、基于 UpdateWrapper 的修改(不…

VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle 在vtk 中有时我们需要监听 键盘或鼠标做一些事; 1. 创建 Actor; Sphere vtk.vtkSphereSource() Sphere.SetRadius(10)mapper vtk.vtkPolyDataMapper() mapper.SetInputConnection(Sphere.GetOutputPort()) actor vtk.vtkAc…

【Redis篇】详解布隆过滤器(原理 | 操作 | 代码)

文章目录 🍔简述布隆过滤器🌺原理🛸存入过程🛸查询过程 🏳️‍🌈优缺点⭐优点⭐缺点 🌹代码实现(本地)🌹代码实现(分布式) &#x1f3…

【鸿蒙系统学习笔记】TypeScript开发语言

一、背景 HarmonyOS 应用的主要开发语言是 ArkTS,它由 TypeScript(简称TS)扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。值得注意的是,TypeScrip…

第二篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:深度解读pyttsx3支持多种语音引擎

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录前言一、三种语音引擎支持介绍和示例代码二、SAPI5引擎适用场景介绍和示例代码三、nsss引擎适用场景介绍和示例代码四、eSpeak适用场景介绍和示例代码五、归纳总结 系列短博文目…

【STM32 CubeMX】SPI_Flash_W25Q64的操作方法

文章目录 前言一、W25Q64操作方法基本概念1.1 读数据1.2 写使能1.3 读状态1.4 擦除扇区1.5 烧写页 总结 前言 在嵌入式系统开发中,使用外部 SPI Flash 存储器可以为 STM32 微控制器提供额外的存储空间,以存储程序代码、配置数据等。W25Q64 是一款常见的…

说说对BOM的理解(常见的BOM对象了解哪些)

文章目录 一、是什么二、window三、location四、navigator五、screen六、history 一、是什么 BOM (Browser Object Model),浏览器对象模型,提供了独立于内容与浏览器窗口进行交互的对象 其作用就是跟浏览器做一些交互效果,比如如何进行页面的后退&…

数据库小技能:事务隔离级别

文章目录 引言I 数据库1.1 事务的隔离级别1.2 报表业务场景:可重复读1.3 高并发场景:读已提交1.4 读写分离1.5 分表规范1.6 分析数据库死锁引言 事务隔离级别的选择: 报表业务场景:可重复读报表业务场景需要同一时间维度进行统计,反应数据趋势,进行查询的时候需要使用re…

基于springboot车辆充电桩管理系统源码和论文

随着信息化时代的到来,管理系统都趋向于智能化、系统化,车辆充电桩管理系统也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,…

Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136131310 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

2023年全球架构师峰会(ArchSummit北京站2023):核心内容与学习收获(附大会核心PPT下载)

本次峰会是一场集结了全球顶级技术专家和行业领袖的盛会。作为一年一度的重要技术交流活动,本次峰会聚焦当前及未来软件架构的发展趋势、技术挑战与创新实践,旨在为参会者提供一个深度交流、学习与合作的平台。在为期两天的会议中,与会者不仅…

宠物赛道都卷出了哪些花样?媒介盒子分享

如今的宠物市场,已经从让宠物吃饱喝足的基本生理需求,拓展到五花八门的精神需求,与“马斯洛需求定理”高度一致。商家们看到宠物经济的潜力,不再满足于给人类造节,给毛孩子造节也是重中之重,今天媒介盒子就…

vcruntime140.dll文件下载的多种方案分享,最新下载安装方法解析

安装或运行软件时常遇到缺失系统文件的相关问题,一个典型的例子是vcruntime140.dll​丢失错误,这种情况经常发生在运行那些基于Visual Studio 2015开发的应用上。缺乏这个文件的提示可能会严重拖慢程序的响应速度,并有可能阻碍用户使用受影响…

[每周一更]-(第87期):主流软件负载均衡器对比(LVS、Nginx、HAproxy)

负载均衡的实现方式一般来说有以下三种: 基于DNS负载均衡:直接通过DNS来实现负载均衡。优点是非常简单,缺点是调整后不知道啥时生效(当然正常情况下几十分钟,长的也可能更长) 基于硬件负载均衡:购买硬件,也…