当前位置: 首页 > news >正文

认识文件系统

1.理解一下整体的文件系统

首先我们大概来了解一下,在磁盘里面,我们可以把磁盘的存储逻辑抽象成一整块,而对于一整块的存储单元,由于管理难度较大,我们又可以把他进行分区,假设说一个扇区是800GB,那我们就可以把他分成200GB,200GB,100GB,300GB这样子,大概就是这样的分区管理。

那然后,我们就可以在200GB里面进行分组,一个200GB的空间可以分成好多个组,一个基本的组假设我们可以设为10GB,而管理好这个10GB的组,那就能把其他的组管理好,进而就可以管理好200GB和更大的内存块空间。

而分组出来的内存卡,就叫做磁盘级的文件

然后从图中我们可以看到,有SuperBlock,GroupDescriptorTable,BlockBitmap,inodeBitmap,inodeTable,DataBlock

那我们就分别来简单的说一下里面分别是啥意思

首先我们来回顾一个内容

文件 = 内容 + 属性

实际上,这个属性也是数据的一种

当你创建一个空文件的时候,这个时候并不代表他真的是空文件,他还是占用了一定的字节的,而这一小段的内存就是存放这个这个文件的属性

在Linux中,文件和属性的存放特性就是文件内容和文件属性分开存储

1.DataBlock

这个是整个内存空间的数据存储的地方,也叫做数据块,这个是占据整个空间最大的地方,而他里面的空间则全部都是4KB的数据块,他将会把这些数据内容存到这些数据块中,当他跟操作系统进行文件IO的时候,就会以4KB的数据块为单位进行交互

2.Block BitMap

这个就是块位图,他里面主要是一个位图的结构,比特位的位置表述块号,比特位的内容表示着DataBlock中哪个数据块已经被占用,哪个数据块没有被占用

3.inodeBitMap

每个bit都表示一个inode是否空闲可用,比特位的位置表示第几个inode,比特位的内容表示是否被占用

这句话怎么理解?

假设一个inode table 里面有312个inode,其inode bitmap就会使用312个比特位来管理这些inode的分配状态,怎么表示呢?当inode bitmap 里面对应的比特位如果是1,则表示inode bitmap里面相应的位置的inode已被占用;当为0时,表示该inode处于空闲可用状态。

i节点表,存放着文件的属性和大小,文件所有者和最近修改时间等

而文件的属性,在Linux中,是一个大小固定的集合体!

就比如说,你我都共同有个名字的字段,但是字段存放的名字是不同的消息,但是我们总体的属性是一样的。

而这个大小固定的集合体,在Linux中叫做struct inode // 文件的属性

我们在上面可以看到,一个DataBlock里面有很多的数据块,那么一般来说,系统是怎么从那么多数据块中找到一个准确的数据块呢?

实际上在inode 结构体里面还有一个数据类型,一个inode节点表一般来说都是128字节

int datablocks[N],这个存储的就是datablock中的数据块,当我们需要寻找数据的时候,首先就会需要找到inode入口,然后找到tatablock[N],最后通过这个下标来找到对应的数据块。

4.inodeTable

这是一个存放属性的inode表,一个文件对应着一个inode

5.通过inode编号寻找到文件内容的过程

首先是通过文件/目录所对应的inode编号,进入到某个磁盘的分区,然后分区中会区分组0,组1,组2等等,每个组都会有自己的组号,一个是start_inode,一个是end_inode,假设我这里让组0的start_inode和end_inode的编号分别为0到10000,组1的编号分别是10001到20000,组1的编号是20001到30000,然后我现在要找inode编号为10010的文件,那我们就放进去找,首先他肯定是组1的,然后就放进组1里面找,由于inode bitmap是按比特位来表示inode文件有没有被占用的,所以我们进来寻找inode bitmap需要把当前的inode编号减去组1的start_inode,也就是10010-10001=9,我们就找到inode bitmap是9,然后根据这个9来对inode table进行映射,若为1,则表示inode有效,若为0,则表示inode无效,找到inode文件属性,最后映射到data block的数据块,找到文件的具体内容

2.如何获取inode编号

我们上面说了,如果要找到一个文件的内容,必不可少的是要使用到inode的编号,那凭什么你直接就拿到了inode编号?我们不是一直使用的是文件名吗?    

在此之前,我们先来谈一下目录

总所周知,目录 = 文件属性+文件内容,而其实目录的本质就是文件名和inode编号的映射关系。

所以说,当我们找到文件名的时候,就会找到对应的inode编号,然后用这个编号可以进行文件内容的查找。然后通过文件名和inode的映射关系,就可以找到相应的文件内容

明白了这个,我们就可以来讨论一下目录的r,w的本质

r的本质,实际上就是是否允许我们去读取目录的内容,也就是说,我们是否可以读取到文件名

w的本质,实际上就是新建文件,也就是向目录中写入,文件名和inode的映射关系

3.如何理解文件的增删查改?

首先我们来聊一下增加,也就是在目录里面写入文件。

前面说了,目录也是文件,他实际上跟文件=文件名+属性是一样的,也就是说,目录 = 目录名+属性。

首先我如果想在目录中写入一个文件,首先得检查我是否对目录有一个写入的权限,然后,在inode表里面,寻找一个空闲的inode,来分配到写进这个目录的文件,然后再把这个inode映射到相应的表里面,就可以把这个文件写进目录了

相关文章:

  • VMware+Windows 11 跳过安装阶段微软账号登录
  • 高性能无堆分配函数包装器的设计与实现原理(C/C++代码实现)
  • NumPy 数组重塑
  • 慢查询日志的开启与分析:优化SQL性能的实战指南
  • Win11亮度条和亮度设置消失的解决方法
  • 位运算基本知识:异或,左移,右移
  • 蓝桥杯178 全球变暖
  • 【辰辉创聚生物】FGF信号通路相关蛋白:解码生命调控的关键枢纽
  • some java面试题
  • C++23内存分配新特性:std::allocate_at_least
  • Linux 内核学习(8) --- 字符设备操作函数
  • 独占内存访问工作原理
  • 题目 3326: 蓝桥杯2025年第十六届省赛真题-最短距离
  • Linux 内核学习(9) --- Linux sysfs 文件系统
  • 驱动: file_operations、register_chrdev、/proc 文件系统概述
  • Android 启动流程开发注意事项
  • 删除链表的倒数第N个结点--LeetCode
  • 5.25本日总结
  • MySQL的查询进阶
  • 中断和信号详解
  • 芜湖做网站设计的公司/百度广告联盟app
  • 做自媒体的有哪些素材网站/discuz论坛seo设置
  • 郑州市做网站的公/网站seo内容优化
  • 有哪个网站可以做口腔执业助理医师题库/百度大数据搜索引擎
  • 做计量检定的网站/百度推广开户费用多少
  • 商城网站建设设计介绍/山西网络营销外包