hello,各位读者大大们你们好呀
系列专栏:【Linux的学习】
本篇内容:基础概念;磁盘线性理解;文件系统;inode与文件名;理解增删查改;补充细节
⬆⬆⬆⬆上一篇:基础IO(一)
作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-
①磁盘是我们计算机上唯一的一个机械设备,同时也是外设,因此它非常慢
②内部结构:
盘片:一片两面,一沓盘片,可以进行读写
磁头:每一面的盘片都有一个磁头,一个磁头负责一个一面的读取,磁头共进退的,磁头和盘面是没有挨着的,但是距离很近,对数据做写入和读取是更改基本元素的南北极
③磁盘中存储的基本单元:
扇区:512字节或者4kb;一般磁盘,所有的扇区都是512字节
磁道:同半径的所有扇区
④读取定位:
通过磁头来确定哪一个面(编号)—>先定位在哪一个磁道(由半径决定,磁头会进行摇摆)—> 根据扇区的的编号,定位一个扇区
柱面是指相同位置上磁道的集合
也就是可以理解为当你知道了在哪一个盘面,就可以把柱面和磁道看成相同的,都能确定在哪个磁道上
因此磁头:head;柱面:cylinder;扇区:sector,未来定位任意一个扇区:CHS定位法
然而OS内部不能直接使用CHS的地址
①OS是软件,磁盘是硬件,硬件定位一个地址可以使用CHS定位法,但是如果OS直接使用了这个地址,万一硬件变了,OS也要发生变化,OS要和硬件做好解耦工作
②即便是扇区,512,字节,单位IO的基本数据量也是很小的!硬件:512字节,OS实际进行IO,基本单位是4kb(可以调整),因此磁盘被称为块设备,所以OS需要有一套新的地址来进行块级别的访问
而其中我们的OS是以4KB为单位进行IO的,故一个OS级别的文件块要包含8个扇区,甚至,在OS角度它不关心扇区
计算机常规的访问方式:起始地址+加上偏移量的方式(在C语言中,一个地址加上所对应的变量类型的大小)
那么在这里也是同理,只需要知道第一个扇区的下标地址+4KB(块类型)我们把数据块可以看做一种类型
所以块的地址,本质上就是数组的一个下标,以后要表示任何一个块,可以采用线性下标的方式
OS——>下标(N)——>LBA(逻辑块地址)
LBA和CHS可以互相转换的
OS要管理磁盘,就将磁盘看做一个大数组,对磁盘的管理就变成了对数组的管理
大家应该都知道windows下有好几个盘吧
这个就是文件系统的分治
磁盘是典型的块设备,硬盘分区被划分为一个个的block,一个block的大小由格式化的时候确定,并且不可更改
Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有相同的结构组成
超级块(Super Block):文件系统本身的结构信息:文件系统类型、整个分组的情况,其在各个分组里面都有可能存在,而且是统一更新的,是为了防止此区域坏掉,如果出现故障,整个分区不可被使用,做好备份
GDT:块组的描述符,组内的详细统计等属性信息
inode Table:inode节点表;一个文件,内部所有属性的集合,inode节点(128字节),一个文件一个inode,一个group需要有一个区域来专门保存该group内的所有文件的inode节点。分组内部可能会存在多个inode,需要将inode区分开来,每一个inode都会有自己的inode编号,也属于对应文件的属性id
Data blocks:存放文件内容,数据块,Linux查找一个文件,是根据inode编号,来进行文件查找的,一个inode对应一个文件,文件inode属性和文件对应的数据块是有映射关系的
Block Bitmap(块位图):每一个bit表示datablock中哪个数据块是否空闲可用
inode位图(inode Bitmap):每一个bit位表示一个inode是否空闲可用
Linux系统只认inode号,文件的inode属性中,并不存在文件名,文件名是给用户用的,目录也有inode,任何一个文件一定是在一个目录内部,目录的数据块里面保存的是该目录下文件名和文件inode编号对应的映射关系,而且两个互为key值
ls -i是可以查看文件的inode编号的
①当我们访问一个文件的时候,我们是特定目录下访问的,cat log.txt
②当前目录下,找到log.txt的inode编号
③一个目录也是一个文件,也一定隶属于一个分区,结合inode,在分区中找到分组,在该分组中inode table中,找到文件的inode
④通过inode和对应的databack的映射关系,找到该文件的数据块,并加载到OS,并显示到显示器
删:
①根据文件名找到inode编号
②inode编号——>inode属性中的映射关系,设置block bitmap对应的比特位值0
③inode编号设置inode bitmap对应的比特位为0
删除文件只需要修改位图
①当文件被误删时,会有日志可以找到对应的inode,来修改对应的block bitmap与inode bitmap
②inode,确定分组指的是每个组都有固定的inode编号范围,通过±组内的inode编号来确定分组
③我们所学到的分组、分区、增写系统属性OS做的,分区完成之后,后面要让分区能正常使用,我们需要对分区做格式化,格式化的过程其实是OS向分区写入系统的管理属性信息
④inode节点里有与数据的映射关系,就是一个数组,但是NUM的大小有限,万一数据很大怎么办呢?
那我们可以使用二级索引来解决这个问题
基础IO(二)的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!