一、VFS:
Linux系统支持几十种文件系统,为了屏蔽具体差异,便于用户使用,Linux在各文件系统之上引入了虚拟文件系统(vfs)。
A、VFS的概念:
1、VFS提供了一个通用的通用的文件系统模型,该模型能够表示Linux所支持的所有文件系统。
2、VFS屏蔽了底层操作细节,为用户提供了统一的系统调用,使得文件在不同文件系统间的移动成为可能。
3、VFS在内核中具体表现为一些抽象的数据结构和接口,各种不同的文件系统都必须提供这些接口的实现。
B、VFS对象:
VFS用C语言实现了面向对象的设计思路,与C++等面向对象的区别仅在于,C的对象用数据结构表示,成员默认公有。VFS主要有四个对象类型:
1、struct super_block:
表示一个已经安装的文件系统。对于磁盘文件系统,该数据结构保存在特定的扇区中,而对于一些特殊的文件系统,比如说基于内存的文件系统sysfs,会在内存中实时创建该数据结构。
2、struct inode:
代表存储设备上的一个实际的物理文件。
3、struct dentry:
描述了文件系统的层次结构。不管是普通文件还是目录,都有一个dentry。
4、struct file:
文件对象代表已经被进程打开的文件,用于建立进程与文件之间的关系。他有open()创建,由close销毁。同一个物理文件可能有多个file,但只能有一个inode。
C、VFS文件对象之间的关系:
进程控制块task_struct的files字段存储了进程所打开的所有文件。file_struct的fd[]记录了每个打开的文件的file结构体。
阅读(929) | 评论(0) | 转发(0) |