专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C++初阶算法 C++进阶
欢迎大家点赞,评论,收藏。
一起努力,一起奔赴大厂
目录
一.磁盘
操作系统存在大量的文件,其中大部分没有打开的文件,它们存储在哪里呢?磁盘!!!,下面是磁盘的物理结构,看图片:
其中每一个圆环是一个磁道,每一个圆弧就是一个扇区,一般情况下一个的扇区是512k,例如一个800G的磁盘可以将它抽象成为
每一块都是由扇区构成
这样我们就可以得到一个数组,每一个扇区都有一个应的数组下标,于是就出现了CHS寻址法,当我们知道一个扇区的下标就可以找到在哪一片磁盘的哪一个磁道的哪一个扇区,例如下标为500,每一片有1000个扇区,10个磁道,也就是说一个磁道有100个扇区,500/10000=0,所以在第0片,500%10000=500,500/100=5,所以在第5个磁道,500%100=0,所以在第0片的第5个磁道的0扇区。 一般来说操作系统和磁盘进行交互时的基本单位就是4KB,也就是8个扇区
二.对磁盘进行管理
磁盘可以分为多个分区,对一个分区管理好就可以管理好其它的分区,管理一个分区就可以对一个分区进行分组,这就是利用了分治的思想
管理就是先分区然后分组,对于其中的一个分组,每一个分组就有多个块组,
- Data blocks在一个块组占绝大数,它就是存放的是写在文件里面的内容,其中每一个小块是4kb。
- Block Bitmap是一个位图结构它是为了表示哪一个数据块存储了数据,存储了就是1,没有就是0.
- inode Table存放文件的属性,它是一个结构体,在Linux中它一般是128个字节。它也是有一个块,其中每一块是4kb,一个块是由4*1024/128=32个inode,所以一个块可以存放32个inode,也就是对32个文件的属性。
- inode Bitmap中每一个比特位都表示一个inode是否空闲。
- Super Block表示的是block的数量和indoe的数量,当然不是每一个块组都有这个,每几个块组就有一个超级快,当然超级块存放的内容是一样的(在一个分组),这是以应对数据的丢失。
在文件的属性中有一个数组datablocks它是为了寻找文件存储的内容,它的结构为:
其中0到11每个都指向一个数据块,12和13是指向一个块,但是这个块的4kb都是指向别的数据块,14是指向一个块,这个快指向一个和12一样的块。
三.通过inode找到文件
我们凭什么拿到文件的inode号??我们用的可是文件名啊!!文件=文件属性+文件的内容,其中文件的内容就是文件和inode的映射,所以我们就可以理解一个目录不可以由同名的文件,查找文件就是根据文件名然后找到文件的indoe,目录的r属性本质就是我们想得到文件的内容,我们没有这个权限就不能得到文件的inode,w同样;我们如何理解文件的删除呢?文件的删除只需要将文件的inode Bitmap置为0,然后将它的block Bitmap也置为0即可,所以当我们删除文件后可以将数据恢复。我们如何找到文件的inode号呢?例如一个文件的pwd为/home/yang/code我们想得到它的inode,需要得到code的inode,一次类推需要得到/的inode,/的inode是可以直接获取的,而linux是会缓存路径的,我们可以快速获取它的inode。