目录
- ❗文件由很多扇区构成------>文件由很多的index构成----->文件由很多的块构成------>文件由很多LBA地址构成。
- 思想:分治思想
1.分区
计算机的磁盘空间是庞大的,OS是怎样去管理磁盘呢❓
- 分区管理:只要知道磁盘空间的大小→/4KB就知道块数多少→进行编号即可→800GB是由无数个块空间构成的。我们最终的目标是把整个磁盘管理好——磁盘上的文件管理好。所以我们进行分区操作。把磁盘拆分成几个区。只要需要一套方法,把磁盘所有内容管理好。
- 这个线性结构是一个LBA数组。只需要存储每个区的起始LBA和结束LBA即可。(LBA:逻辑块地址)
- 电脑中的C/D盘都是磁盘的分区,想要把整个磁盘管理好,就把一个分区管理好即可。
- 接下来细分一个分区的管理方法。以200GB为样例。只需要记录start block ~ end block就可以完成分区的范围记录。
2.分组
- 只要能把一组管理好,就能把整个分区的所有组管理好,就能把整个分组管理好。
- 研究磁盘的文件系统 转化 研究磁盘的每个组里面的内容。
- 分区有很有很多分组,每个分组都有如下字段。
文件 -= 文件内容+文件属性(内容和属性的本质都是数据)
文件保存和提取在文件在磁盘中存储本质是:文件的内容数据和文件的属性数据。
文件系统非常多(ext2/ext3/ext4...........)
Linux文件系统的特点:将文件内容 和 文件属性 分开存储。
3.Data blocks
- Date blocks又称数据区/块数据区。
- 数据块只存储文件的内容数据
- 整个分组当中,占据数据最大的一块区域。(90%以上)
- 里面存放的都是 基本单位为4KB的数据块。(本来逻辑块已经是大小为4KB的块了,所以没必要划分直接使用即可)
- 每个块都有各自的块号。只要有块号。就可以通过计算得到CHS地址。(逆向回去)
- 文件加载到内存。以块为单位分批加载到内存。
- 文件系统和磁盘进行IO的时候是以4GB为基本单位的。
- 所以即便你只需要5GB,但是是以8GB IO交互的。(只不过只能使用5GB的空间大小)
4.Block Bitmap
- Block Bitmap又称块位图,其实就是一张位图(0/1序列)
- Date block有多少个数据块,就在Block Bitmap中申请多少个比特位。
- Block Bitmap也是由块构成的。(逻辑块)
- 4*1024*8=32768字节(一个块位图可以保存32768个比特位的数据)
- 1000个块 = 4*32768 (十万个块相当于只需要4个块位图即可)
- 可以把 Data blocks数据块的使用状态/情况 表示出来。
- 位图结构:比特位的位置表示块号。
- 比特位的内容:表示该块是否被占用。
5.inode Table
- inode table又称inode节点表,inode表。
- 基本单位也全都是块。
- inode表里面保存的所有文件的属性。
- Linux中文件的属性是一个大小固定的集合体。类和结构体struct。结构体:struct inode(inode节点,表示文件的所有属性类别)
- 可执行程序文件,文本文件,库文件,源代码,文件夹等文件struct inode都是一样的。文件属性大小struct inode一样,只有struct inode字段里面的值不一样,字段类别是一样的。
- struct inode中一个重要字段:int inode_number (inode号)
- Linux文件系统规定struct inode大小固定为128字节
- inode table里面也是一个一个的块(4KB)(4✖1024➗ 128=32:一个块里面可以存储32个inode表)
- 一个正常文件,一个inode属性集合。
Linux中的文件的属性是一个大小固定的集合体。属性值可以不相同,但是属性的类别肯定是一样的。
先描述再组织。先描述:先定义好就是一个类/结构体。再组织。
类的大小是固定的。例如:学生1名字:张三 学生2名字:李四 它们共同有一个属性:名字name
❗文件的属性和内容区别是:文件的内容可以大小不一样,但是文件的属性类别一定是一样的。
6.inode Bitmap
- Inode bitemap又称inode位图,每个比特位表示一个inode是否空闲可用。
- 比特位的位置表示:第几个inode(根据inode号映射)
- 比特位的内容表示:inode是否被占用。
- 0:表示未被占用可以直接被覆盖写入。1:表示已经被占用了。
7.GDT
- GDT(Group Descriptor Table):块组描述符。
- GDT也是结构体,是描述所在块组的属性情况。是一个管理字段,管理整个块组情况。
- 块组多大,每个区域的块的划分,以及inode Table和Date blocks的使用情况等。
8.Super Block
- Super block简称Sb,超级块。代表一个文件系统。描述的是整个分区的整个文件系统的相关情况。
- 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
- SB并不是每个分组都有的❌也不是在整个分组中只有一个在最前面❌
- SB根据不同的文件系统,在2~3个分组/块组 存在✔即便同时存在多个组,但是内容必须保持一致。
- SB为什么这么干❓因为SB代表是整个分组的使用情况,一旦有数据遗失。分区就挂了。磁盘一旦有一个分区不能使用。几百G的空间不能使用,代价很大。不是每个分组都有:效率问题没必要。几个同时有:为了系统的安全性/稳定性考虑。即便遗失也可以恢复。处于稳定性考虑。
9.格式化
- 一个分组里面文件系统的基本结构如上。
- 分区------分组:每个分组都要有这样一个文件系统的基本结构
- 分区之后,确定分组的区域(需要体现在SB和GDT)
- 分组之后,确定文件系统的基本结构划分区域(需要体现在SB和GDT)
- 写入文件系统管理数据:如 划分区域信息并且填入、每个区域的属性信息填入、需要清空清空。
所以格式化的本质:写入文件系统❗