要明白虚拟文件之前必须先搞清楚什么是文件。
狭义地说,“文件”是指“磁盘文件”,进而可以是有组织有次序地存储于任何介质(包括内存)中的一组信息。广义地说,凡是可以产生或消耗信息的都是文件。比方说设备文件、管道、套接字以及/proc目录下的特殊文件(实际上只存在于内存中),这些都是“文件”。磁盘文件只不过是个特例而已,你可以认为他是在磁盘设备上存储的、按照一定次序组织在一起的一组相关的信息。
上面这些是我从书上抄的,但我自己的看法是,计算机系统中所有内核向应用程序提供的信息输入输出接口都是文件。所以应用层看到的“文件”已经是被操作系统抽象过的一个输入输出接口。拿磁盘文件来说linux虚拟文件系统,对应用而言它看到的是一个个文件按照目录结构组织起来的一棵树,但实际上磁盘设备并不知道这么回事儿,它只认识磁头、柱面和扇区。从这个角度上来说,应用程序看到的文件本身就是虚拟的。所谓的对文件操作最终都要落实到磁盘设备对某些扇区的读写上,但这些都是内核处理的嵌入式linux,应用程序是看不见这一切的。
知道了广义的文件系统定义之后就不难理解,作为一个通用操作系统,linux需要为用户程序提供一个统一的系统操作界面来完成对各种文件的访问。虚拟文件系VFS就是这么一个统一的、抽象的、虚拟的文件操作界面。你可以认为它是应用层与驱动层之间的一个中间层linux虚拟文件系统,对上提供一组标准的接口open/close/read/write/lseek,对下则又根据不同的文件类型调用不同的驱动程序提供的接口完成对具体设备的操作。这些操作通常是通过读写外设上(磁盘也是外设)的控制寄存器和存储区间来完成的。
不知道我这样解释你明白了没,要是还不明白可以看看我共享在百度知道上的《Linux内核源代码情景分析》linux是什么,那里面有更详细的说明。
本文原创地址://lrxjmw.cn/xnwjxtzqbxxg.html编辑:刘遄,审核员:暂无