linux虚拟文件系统-以ext2为例

介绍一下文件系统,本文的下限是对文件系统的一些概念进行介绍,并且存一下有用的图,上限是对ext2进行一个比较细致的分析。如果有任何问题,大家可以看一下诸如《现代操作系统》,《深入理解linux内核》,事实上本文也是这些书的读书笔记。

1文件系统

1 文件系统是方便对磁盘管理的一个操作系统提供的功能, 一个磁盘,他的所有磁头的运动,都由设备控制器管理(可以理解为一个小型的嵌入式计算机),这个设备控制器和 设备驱动的联系是通过 sata口。我们用c语言open一个文件,这个open是glic函数,他会调用相应的系统调用,然后操作系统有专门的代码会控制设备驱动,从而处理相应操作。

2VFS (虚拟文件系统)

vfs是对文件系统的封装。一个磁盘可以有好多文件系统linux虚拟文件系统-以ext2为例_第1张图片
比如说:linux虚拟文件系统-以ext2为例_第2张图片
可以说这样,
cp /floppt/TEST /tmp/test
一个复制指令。相当于这些代码(这些代码执行的底层和这个shell语句是否一样,我不清楚,不过我觉得应该差不多,因为他们底层都是vfs 提供的,shell语句只是方便和系统说话)

3.文件系统四大对象

3.1inode(索引节点)

远古思想1 一开始对磁盘空间的使用是顺序使用,那么会产生许多缝隙。(文件大小顺序 5 1 8 ,你把1大小的文件删除了,那么这个空隙不好填补)。
远古思想2:用链表分配(好像内存池。。 ),但是如果磁盘太大,那么这个表也很大。。也不行。
所以使用inode。一个文件一个inode。inode最基本的东西就是文件所在的块。
linux虚拟文件系统-以ext2为例_第3张图片
ext2中的inode有什么:
linux虚拟文件系统-以ext2为例_第4张图片
linux虚拟文件系统-以ext2为例_第5张图片
linux虚拟文件系统-以ext2为例_第6张图片
没有找到指向数据块的指针。。(但是有指向页块的指针)。。我猜测(文件系统四大对象包括两种,即内存中和硬盘中的,比如说inode,在磁盘中有存储,当读到特定文件时,会把他的inode加载出来,放到内存中。所以说如果在硬盘中,指向页块的指针就会指向数据块了。。

3.2 super block(超级块)

超级块保存的是具体文件系统的操作,比如说你的文件系统有ext2,ext4,每一个文件系统都有不同,所以有不同的super block(这个块中有一个 操作函数集合,是具体文件系统 操作的函数指针)
值得一提的是 ext2在磁盘中对super block保存了好多副本,可见很重要。
linux虚拟文件系统-以ext2为例_第7张图片

3.3 dentry(目录项)

超级块,索引节点,在磁盘中都是有具体存储的,dentry却不一样,是没有的。因为ext2把dentry也当成了一个inode。
所以说我们以为的目录树形结构,仅仅在内存中。(为了效率它使用了哈希表也不是树,哈哈)
给大家看一个东西
linux虚拟文件系统-以ext2为例_第8张图片
这是作为dentry的inode在磁盘中的存储(有colossal等三个目录项)。
目录分析过程:
如果我们的地址是 /colossal/…,那么他会载入colossal这个inode,然后继续递归,现实中这样真的太慢了,磁盘搞好多次,所以高速目录缓存就很有必要,还有hash表,能够很快的映射 文件地址和 具体inode的关系。 还有就是你看 这个目录分析,最后得到inode,就算得到文件了,inode就是文件的元数据,这点很重要

3.4,文件对象

文件对象也是很重要滴。因为假设好几个对象使用一个文件有的需要头部有的需要尾部。,那么我们需要存好几个文件指针。就存在文件对象里。
我们都知道文件描述符是 PCB(进程控制块)中一个文件描述符哈希表的key值,那么他的value 就是指向的具体的 文件对象。哈哈,我就是因为这个图,才写的这个笔记。
linux虚拟文件系统-以ext2为例_第9张图片
i节点就是 内存中inode节点。
还有这图,你还能知道超级块的作用
linux虚拟文件系统-以ext2为例_第10张图片

总结

1 不同的文件有不同inode,比方说pipe(无名管道)的inode就和别处不同。
linux虚拟文件系统-以ext2为例_第11张图片
2 整个vfs是面向对象的思想。
3 本文介绍的ext4是inode型文件系统,所以inode,dentry都有存,但是对于日志型文件系统,他也要有相似的东西来供vfs使用。满足vfs的接口规则。

不足之处

我一直不想写这个,就是因为这个东西可深可浅,学内核分析的可能觉得不够用(具体inode里的好多东西我也不太知道) ,1 但是有关 锁方面的应该补一下(因为这种 控制我觉得和IPC或许有点关系) 。2 希望早点学好pythonfuse,好好看一下这个。3 在写一个关于日志型文件系统的小介绍。这点就算完了。如果有什么问题交流,欢迎大家留言。3本文所有图都在《现代操作系统》和《深入理解linux内核》这两本书里的文件系统介绍里。

你可能感兴趣的:(从今你可都改了罢,linux)