目录
1.磁盘的物理结构
2.CHS定位法
3.磁盘的逻辑存储
4.系统层面
inode.block[15]
创建文件的流程
查找文件的流程
了解文件系统,首先要了解磁盘是如何存储和读取数据的。
1.磁盘的物理结构
可以理解这个盘上有很多的小磁铁,通过旋转盘面和摆动磁头,就可以访问修改这个盘上的所有的磁铁。
每个盘面上都有一个磁头,一个盘的正反面都是可以存储数据的。
整个盘面又分为不同的磁道和扇区,每个扇区存储容量相同。
扇区:是磁盘io的进本单位,通常为512字节或者4KB。
扇区不一定是系统io的基本单位。
2.CHS定位法
想要定位一个文件
首先要看该文件在哪个磁道(cylinder)
然后选择磁头(head)
最后看在那个扇区(sector)
就定位到了文件所在位置,任何文件就是多个扇区承载的数据。
3.磁盘的逻辑存储
把磁盘上所有的磁道都拉直,连接在一起,看成一个数组,这样就把对磁盘的管理,转化成了对扇区数组的管理。
要把线性地址sector = 999999转化为CHS
1.sector/单盘的容量,确定想访问的文件在哪块盘。(H)
2.sector%单盘扇区的个数 = tmp。
3.tmp/磁道个数 确定在哪个磁道。
4.sector%磁道上扇区的个数 确定在那个扇区。
4.系统层面
操作系统觉得一次io512字节太小了
os系统io的基本单位是4kb
操作系统在对这些4Kb的数据进行分区管理
在对每个区进行分组管理
最后再对每个组进行管理,管理好一个组就管理好整个文件系统了。
inode:LINUX的磁盘文件都是内容+属性,inode就是存储文件的属性,inode在当前分区是唯一的。
文件名不是文件的属性。
struct inode
{
类型;
大小;
权限;
acm时间;
inode编号;
....
int block[15];
}
inodeTable:他是一张存储inode的表,根据inode的编号,就可以在inodeTable中找到对应的inode。
dataBlock:datablock里面是一个一个的4KB的数据块,每个数据块都有编号,就是存放文件内容的。
inodebitmap:inode编号对应的inode是否被使用。
blockBitmap:block编号对应的块是否被使用。
GroupDescriptorTable:描述分组的信息,GroupDescriptorTable被破坏整个分组就被破坏。
superBlock:描述整个组的文件系统的,bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的 时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个 文件系统结构就被破坏了。
inode.block[15]
block[15]中存放的是该文件使用的block的编号
[0,11]直接存放的是block的编号。
[12,13]存放的是block编号的二级索引的编号,这些索引存储的是block的编号。
[14]存放的是block编号的三级索引同理。
创建文件的流程
1.去inodebitmap,找到一个未使用inode编号。
2.将创建文件信息填入,inodeTable中inode编号所对应的inode。
3.去blockBitmap,找到未使用的块编号。
4.填入inode中的block[15]
5.把创建文件的名字和inode编号映射起来,写到目录去。
查找文件的流程
1.根据文件名,拿到inode = 1005。
2.inode,根据inode编号,看是在哪个分组。
假设group0用的是1 - 1001 的4kb数据块,group1用的是1001 - 2001的数据块。
1005在第二个分组
用1005减去group1的起始地址,用这个结果去inodeBitmap寻找是否真的存在,如果真的存在。
再用1005减去group1的结果去inodeTable,找到inode,就找到文件的所有属性。