在Tanenbaum的“现代操作系统”一书中,对于Linux文件系统,有两个草图:
在这两个草图中,“虚拟文件系统”下列出了特定文件系统(例如,ext4types)(第一个草图中的“文件系统”和第二个草图中的“文件系统1”)。
不同之处在于
我的理解是这两个草图显示的是同样的东西,所以它们应该是一致的。
我的问题是
特定的文件系统(例如ext4)是否实现设备文件并使其像普通文件一样对待,还是“虚拟文件系统”的工作?
我怎么理解上面提到的“文件系统”和“networking套接字”,“块/字符特殊文件”之间关系的两个草图之间的区别?
文件系统有inode ,它知道char设备和块设备(并返回它们,例如通过stat(2)系统调用)。
当你的程序(和进程)打开一个字符设备(在一些文件系统中)时,内核将使用一些设备驱动程序,通常与设备主号码有关。
Ext2 wikipage有一个很好的图片(显示inodes和数据),这是非常适用于Ext4 (但当然,许多细节已经改变)。
VFS是内核中的一个抽象层。 查看VFS浏览并查看内核源代码。
一个普通的文件系统(例如一个Ext3文件系统)可能包含char设备inode(在某些目录中可见,例如char设备文件),但是许多新的Linux系统通常使用devfs伪文件系统(挂载在/dev/
) (与udev & systemd有关 )。