文件系统设计
文件系统
文件系统是干啥的,就是把文件像我们选择所写的xxx.txt、xxx.word、xxx.md还有img,mv等等之类的文件存入到磁盘中如何管理和操作了,就是文件系统干的事情。
假设一个磁盘的大小为1MB = 1024KB = 1024*1024B(字节)
把这个1MB的磁盘分为1024块,那么每一块就是1024字节
选择引入一个数据结构 结构体 inode来存放这个文件的相关信息;假设一个inode的结构体占128个字节,那么刚刚分的快,一个就能存放8块,我们把存放inode数据结构的块叫做inode表
那现在一个文件大小很大,需要很大的空间,不能把它所在的块全部写到inode所存的数据块中,那么选择就可以在一个块为间接索引,大小为1K所以可以存储块256块
那么现在又出现了一个文件是否是存放的数据,有些文件是目录而不是数据,那么现在就需要更改一些目录文件指向的数据块的类型,文件类型不是目录就按之前的来存储,如果文件是目录块就存放inode结构体数组来指向它存的inode表的位置,如此递归下去,进行了
现在文件太多,那么一个inode表就不行,所以就需要多个就行了;那么现在就有一个问题,inode表中哪些inode结构体被使用了,哪些没有被使用了,使用现在就设置一个inode位图来管理这个inode表中的inode结构体
有一个问题我们需要知道哪些块被使用了,哪些没有被使用了,使用现在就需要设置一个块来专门来存储哪些块被使用了哪些块没有被使用,就叫这个块为块位图,同样如果一个位图块不够用就多几个就行了
注意:inode位图是来管理inode表(块)中的inode结构体
块位图是来管理所有使用的块(数据块、inode表.....)
那我们应该如何知道块位图、inode位图、inode表的位置了,需要设置一个块描述符来存储这三个信息
最后在设计一个超级块来存储inode的数量,空闲inode数量、块数量、空闲块数量。
超级块放到0号位,块描述符放到1号位,块位图放到2号位,inode位图放到3号位