1、内核通过抽象层能够方便、简单的支持各种类型的文件系统。实际文件系统通过编程提供VFS所期望的抽象接口和数据结构。
2、Unix系统将文件信息和文件本身区分。文件信息包括:访问控制权限、大小、拥有者、时间信息等。称为元数据。存储在索引节点中。
3、Unix文件系统的物理磁盘按照VFS的组织概念布局。其他非Unix风格的文件系统也可以工作在Linux上。但是需要在使用现场引入一些特殊处理,在内存中建立满足VFS的组织结构。
4、
VFS对象和数据结构:
超级块对象:代表一个已经安装的文件系统
索引节点:代表一个具体文件,主要包含文件的信息
目录项对象:代表一个目录项(没有对应的磁盘数据结构,没有葬、写回标志)
文件对象:代表进程打开的文件(没有对应的磁盘数据),同一个文件被多个进程打开,存在多个文件对象。
日志文件系统:
超级块:文件系统的控制信息存储在超级块中,超级块是一种包含文件系统信息的数据结构。
所谓文件系统,就是VFS,而根文件系统是其中的一个属性项而已;而每个设备本身是内核数据区里的一个数据结构,经过VFS的映射,才被用户层视为一个文件。所以,内核要创建继而访问一个设备,是可以直接传递"/dev/ram"这样的参数给create_dev函数来实现的。
至于设置根文件系统,只是C语言里对一个数据结构的成员赋值而已。而所谓目录项,也是内核数据区里的一个数据结构。要创建/dev/ram0,只需赋值根文件系统的值,创建dev目录项,并且创建这个ram设备即可。
要区分内核层以及用户层的区别,可以用一个很简单的逻辑来解释,试想一个,你在用户层删除了/dev里的ram0,那是不是内核就没有了这个设备了呢?再想,如果你删除了你正在使用的硬盘的设备节点/dev/hda,那么是不是内核就不能操作硬盘了呢?答案是很明显的,没有了设备节点,只意味着用户不能操作该设备,并不代表内核不能访问该设备。在最新的设备管理体系中,设备管理的操作逻辑是放在用户层的,那就是udev,默认的规则中没有/dev/eth0设备节点,但你可以照样上网。