Linux——基础IO2

news2024/9/25 7:14:39

引入

之前在Linux——基础IO(1)中我们讲的都是(进程打开的文件)被打开的文件

那些未被打开的文件呢?

大部分的文件都是没有被打开的文件,这些文件在哪保存?磁盘(SSD)

OS要不要管理磁盘上的文件?(如何让OS快速定位一个文件)

要(通过路径快速定位文件)

1.磁盘的了解

1.1机械构成

那个像铁片一样的叫盘片(数据是写在这里面的)

盘片可以理解为一种特殊的光盘,不过光盘是只读的(一旦进行光学拷贝,写一次下次就不能写了)   而盘片可以读取和写入,可以重复写

大部分桌面级磁盘只有一片(两面) 盘片,而企业级的磁盘(云盘)拆开是一摞的

盘片中心是一个高速旋转的马达,旁边有一个磁头(像针一样),关机时磁头会收起

背板(后面的电路板)上面是硬件电路->伺服系统

计算机中的0、1在不同的硬件上的表现不同,在磁盘上,可以把盘片上面存放大量的磁铁,而0、1就对应着磁铁的南、北极

1.2磁盘的物理存储 

盘片可以看成无数个 同心圆构成,划分成了一个个区域,这些区域叫磁道(柱面)

磁道中的某一部分称为扇区

扇区(512字节,4KB):是磁盘IO的基本单位(注意:不一定是系统和磁盘IO的基本单位)

磁头、盘面都有唯一的编号,而磁道、扇区也有唯一的编号

 如果我想访问磁盘中的一个扇区:

选择磁头==选择盘面

通过磁头定位:磁道/柱面

使用哪个磁头、哪一个扇区 CHS定位法

磁头    ->    磁道    ->    扇区

head        cylinder         sector

那么任何文件,不就是多个扇区承载的数据吗

为什么磁盘要高速旋转?寻址指定磁道上的扇区

为什么磁头要快速摆动呢?定位磁道/柱面的

上面两个回答都是机械运动(慢)且是外设

1.3磁盘的逻辑存储

磁带见过吧,里面是黑色的带子,这条很长的带子卷起来是圆形的,扯开就是直的带子(线性)

现在抽象一下啊,把磁盘中盘面也(展开)看成这样的线性空间,然后下一个盘面往后接上

假设有一个800G的磁盘

 

sector array[1677721600]

对磁盘的管理就变成了对数组的增删查改

注意:

不同操作系统IO基本单位可能不同但大部分操作系统都是4KB。

OS认为,一次和磁盘IO一个扇区(512字节)单位太小了,访问效率太慢了,所以操作系统将连续8个扇区作为一个基本数据块,即4KB, 所以这4KB就是IO的基本单位

 每8个扇区合成一个新的数据块,从而得到一个新的数组

通过数组的下标,该下标被称为LBA(logic block address)也就是逻辑块地址,我们只要知道 每个磁道上的扇区数 每个盘面上的扇区总数,就可以通过计算得到对应的扇区位置

sector / 单盘扇区的个数 = 0->H

sector % 单盘扇区的个数 = temp

temp / 一个磁道上的扇区个数 = 我在哪个磁道 ->C

temp % 一个磁道上的扇区个数 = 结果,我是特定一个磁道的一个扇区->S

线性地址   ->(磁盘自己转化)    CHS

4KB / 512字节 = 8

若要访问下标为 1 的地址块写入扇区

1*8 + [0,1,2,3,4,5,6,7] 起始扇区+8个下标的偏移量  

下标为2则         2*8 + 偏移量

2.文件系统

2.1认识inode

Linux磁盘文件的特性:                       文件 = 内容 + 属性

内容和属性分开存储的

内容的大小不确定,而属性的大小是固定的

因为文件属性的类别都是一样的,只不过不同文件中对应类别存储内容不同

所以设计出了一个结构体用来描述文件属性,该结构体即为inode,大小一般为128字节,每个文件都有自己的inode和对应的inode编号,该inode编号在所处分区内唯一

所以系统中标识一个文件,用的不是文件名,而是inode编号。

struct inode
{
    //类型
    //大小
    //权限
    //。。。
    //inode编号(每个分区唯一)
}

 2.2inode table

i节点表:存放文件属性 如:文件大小、所有者、最近修改时间等 inode table

2.3inode 位图

怎么知道哪些inode被使用、哪些没?

inode BitMap(inode 位图):每个bit表示一个inode是否可用

比特位的位置:inode Table中第几个inode
比特位的内容:标识该inode是否被使用

2.4Date block

Date block(数据区):存放文件内容

2.5Block BitMap

Block BitMap(块位图):Block BitMap其中记录着Date block中哪个数据块已经被占用,哪个数据块没被占用

比特位的位置:Date block中第几个数据块
比特位的内容:标识该数据块是否被使用

怎么找到一个文件? 

找到一个文件,得找到它的属性和内容,但不是一上来就找inode 、Date block,而是先找到文件在哪个组里

每个组都有起始编号和inode的个数

inode是在分区中唯一的,在组中起始位置和终止位置比较看inode属于哪个组,然后在inode BitMap中找bit确认这个文件是存在的

inode Table里面找到 Date block中的文件内容

 起始编号+inode bitmap 中为空的bit(偏移量)

编号 - 偏移量 = 我在inode BitMap 的第几个bitmap

进而能找inode Table  -> 进而能找到Date blocks

注意:数据块的大小仅有4KB,但文件可不止,即一个文件可能会占用多个数据块,所以inode结构体中还会有这样的一个设计:

struct inode
{
    //类型
    //大小
    //权限
    //。。。
    //inode编号(每个分区唯一)
    int block[15];//找多个块中的文件

}

inode表中        block[15]只有15位,只能记15个,每个4KB,难道每个文件最多只能记60KB吗?

其实不然15个下标[0,14]

其中[0,11]是直接映射 

[12,13]指向的数据块不直接存数据,而是存后续此文件数据块的编号(这最多也就存8MB)

,二级索引

下标14指向的数据块,里面存到是其它数据块的编号,而其它数据块存的才是后续文件数据块的编号(三级索引)

2.6Group Descriptor Table

Group Descriptor Table(GDT):对一个块组进行管理的数据结构,统计了这个分组的使用情况

2.7Super Block

Super Block:用来管理整个分区,会在Block group 0中存在,还会在零星的Block group(为防止防止文件系统结构被破坏无处覆盖)

分盘(D、E、F等)格式化:向指定分区,写入文件系统

2.8文件名

在Linux中我们一直没有用inode,访问文件用的是文件名

目录是不是文件?是,inode+目录内容

目录内容是啥?文件名:inode编号的映射关系

既然目录也是文件,那么目录也有自己的inode,打开这个目录之前也要找到此目录的inode,这样一直往前找,找到找到根目录(根目录的inode是确定的)

如果目录没有r、w、x权限,无’w'就没法向文件写入所要创建文件的文件名与inode编号的映射关系,自然也就无法创建文件

OS也要对目录做管理 struct dentry

文件的增删查改,对一个文件进行增删查改,都和文件所处的目录有关系

查找一个文件,在内核中,都要逆向的递归般得到 / ,从根目录进行路径解析

inode只在分区内有效,那么上面的内容就有一个大前提,我所要的文件究竟在哪个分区?

一个被写入文件系统的分区,要被Linux使用,必须要先把这个具有文件系统的分区进行"挂载"

既然有多个分区,每个分区都有文件系统,OS自然要对文件系统做管理(先描述,再组织)

挂载:将一个文件系统所对应的分区,挂载在对应的目录中

df -h可以查看分区挂载到哪个目录中        mount命令挂载分区到指定目录中

分区的访问都是通过所挂载的路径访问的

OS对文件系统目录都做管理,文件系统和目录都有对应的数据结构

挂载的本质就是让这两种数据结构产生关系

前缀路径根分区挂载的路径进行匹配就能得出此文件是哪个分区的

3.软硬链接

3.1软链接

观察现象

我们可以通过命令:ln -s 文件名 软链接名 创建软链接

link.soft -> test.txt                         link.soft本质是文件(有inode) 

软链接本质就是一个独立的文件,内容存放的是目标文件所在的路径信息,类似于windows系统的  快捷方式 

3.2硬链接

也可以用ln 创建硬链接

硬链接本质不是一个独立的文件,其inode与链接的文件相同

若把链接文件删了,硬链接还存在,还能访问链接文件的内容

 优点像重命名,硬链接其实是新的文件名和目标文件inode的映射关系

硬链接本质就是在指定的目录下,插入新的文件名和目标文件的映射关系,并让inode的引用计数++

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

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

相关文章

数据库基本概念Day01--基本概念

目录 一. 数据库的基本概念 1. 数据 2. 数据库 3. 数据库管理系统 4. 数据库应用程序 5. 数据库管理员 6. 最终用户 7. 数据库系统 一. 数据库的基本概念 1. 数据 数据(Data)是指:对客观事物进行描述并乐意鉴别的符号。这些符号可识别的、抽…

PN结击穿与电容效应分析

PN结是半导体器件中的一个基本结构,它由P型半导体和N型半导体紧密接触并相互结合在一起形成。P型半导体富含空穴(正电荷载体),是通过掺入受主杂质原子得到的;而N型半导体富含自由电子(负电荷载体&#xff0…

计算机嵌入式实习一定要掌握这些知识

在进行计算机嵌入式实习时,掌握以下这些知识是至关重要的! 当你踏入嵌入式领域的大门,首先需要扎实掌握嵌入式系统基础,这是整个嵌入式开发的根基。同时,C 语言和 C编程也是必不可少的技能。C 语言以其高效的性能和与…

上传文件到 linux

一、mac 法一:scp 先进入mac的 Node_exporter文件(要上传的文件)目录下 输入scp -P 端口号 文件名 rootIP:/存放路径 scp -P 22 node_exporter-1.8.0.linux-amd64.tar.gz root192.***.2:/root 法二、 rz mac 安装 lrzsz,然后…

《OriginBot V2.0.2新功能体验::Froxglove》

0x00 官方通知; 最新消息:OriginBot V2.0.2版本正式发布,新增Webviz可视化,点击查看 0x01 Webviz基本概念; Webviz和rviz一样都是ROS开发中的可视化利器。区别在于rviz只能运行在ros环境中,而Webviz可能多…

《罪与罚》读后感

陀思妥耶夫斯基和列夫托尔斯泰是公认的俄国文学黄金时代的两座高峰,分别代表着俄国文学的“深度”和“广度”。列夫托尔斯泰的鸿篇巨著《复活》《安娜卡列尼娜》等等都已经拜读过,但陀思妥耶夫斯基的作品却一本也没有看过,实在是有点遗憾。这…

输电线路防鸟挡板,保电更护鸟

随着电力需求的不断增长,输电线路的安全和稳定运行变得愈发重要。然而,鸟类的活动却时常给输电线路带来隐患。他们经常在输电线路上筑巢或停歇,导致线路短路、绝缘子闪络等故障频发,而且一不小心触电的话就一命呜呼了~ 为了能够让…

初学python记录:力扣1652. 拆炸弹

题目: 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 ,将第 i 个数字用…

根据Docker部署nginx并且实现https

一、根据Docker部署nginx并且实现https 1.1、Docker中启用HTTPS有几个重要的原因 安全性:HTTPS通过加密数据传输,可以确保数据在传输过程中不被窃听或篡改。这对于保护敏感信息(如用户凭据、支付信息等)的传输至关重要。 数据完…

VGA项目:联合精简帧+双fifo+sobel算法 实现VGA显示(未完)

前言:该项目实际上是在很多基础的小练习上合成起来的,例如涉及到uart(rs232)的数据传输、双fifo流水线操作、VGA图像显示,本次内容在此基础上又增添了sobel算法,能实现图像的边沿监测并VGA显示。 文章目录…

使用第三方接口,查询实时快递单号

开通接口服务 全国快递物流查询-快递查询接口【最新版】_自动识别接口_快递查询_数据API-云市场-阿里云 RestTemplate: RestTemplate是Spring框架中的一个用于发送HTTP请求的客户端工具类。它提供了丰富的方法来发送GET、POST、PUT、DELETE等类型的HTTP请求,并支持…

Java内存区域详解

一、Java内存区域划分 1、分为运行时数据区域和本地内存 运行时数据区域是指 Java 虚拟机在运行 Java 程序时使用的不同内存区域,由虚拟机动态管理。本地内存是指由操作系统分配和管理的内存区域,它与虚拟机无关。在 Java 中,本地内存通常用…

生信网络学院|05月10日《全新DWG/DXF文件编辑工具——DraftSight Enterprise》

课程主题:全新DWG/DXF文件编辑工具——DraftSight Enterprise 课程时间:2024年05月10日 14:00-14:30 主讲人:任宇泽 生信科技 解决方案顾问 DraftSight介绍图形用户界面通用命令自定义块尺寸标注导入、导出和附加图纸集管理器Power Tools机…

大学生租房|基于Springboot+vue的大学生租房平台(源码+数据库+文档)

大学生租房平台 目录 基于Springbootvue的大学生租房平台 一、前言 二、系统设计 三、系统功能设计 1 管理员功能实现 5.1.1 房东管理 2 房东功能实现 5.2.1 信息审批管理 3 用户功能实现 5.3.1 房源信息 四、数据库设计 五、核心代码 六、论文参考 七、最新计…

半导体制冷片厂商正元泰达授权世强硬创代理,产品制冷率高寿命长

近日,为扩充旗下产品创新及供应平台世强硬创的半导体制冷片产品,满足硬科技企业不同层次的选择,世强先进(深圳)科技股份有限公司(下称“世强先进”)与正元泰达科技(深圳)…

PG 全页写

1.什么是全页写 修改一个块的时候,把块读到内存中,commit后,WAL写进程会触发写,把修改的块写到WAL日志文件,如果再往这个块中插入一条数据,数据缓冲区里面的块有两条数据了,再次commit后,PG会把…

最新AI实景自动无人直播软件招商加盟:引领直播行业的智能化未来;商家最新拓客工具

随着直播行业的迅速发展,AI实景自动无人直播软件正日益成为商家推广的新宠。该软件具备智能讲解、一键开播和智能回复功能,同时支持手机拍摄真实场景或自行搭建虚拟场景,给观众带来更好的观赏体验。在不断变化的市场竞争中,AI实景…

js浏览器请求,post请求中的参数形式和form-data提交数据时数据格式问题(2024-05-06)

浏览器几种常见的post请求方式 Content-Type 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认表单数据会编码为 "application/x-www-form-urlencoded" post请求的参数一般放在Body里。 Content-Type(内容类型),一般…

论文精读-存内计算芯片研究进展及应用

文章目录 论文精读-存内计算芯片研究进展及应用概述背景介绍前人工作 存内计算3.1 SRAM存内计算3.2 DRAM存内计算3.3 ReRAM/PCM存内计算3.4 MRAM存内计算3.5 NOR Flash存内计算3.6 基于其他介质的存内计算3.7 存内计算芯片应用场景 总结QA 论文精读-存内计算芯片研究进展及应用…

“A”分心得:我的云计算HCIE学习之路

大家好,我是誉天云计算HCIE周末班梁同学,在誉天老师和同学们的帮助下,我终于在4月24日顺利通过了云计算3.0 HCIE的认证考试,而且获得了A,这是让我特别惊喜的,功夫不负有心人。 我日常的工作是网络运维&…