分类: LINUX
2013-01-21 17:01:20
文件系统一般可以分为下面3种。
(1)基于磁盘的文件系统(Disk-based Filesystem)是在非易失介质上存储文档的经典方法,用以在多次会话之间保持文件的内容。实际上,大多数文件系统都由此演变而来。比如,一些众所周知的文件系统,包括Ext2/3、Reiserfs、FAT和iso9660。所有这些文件系统都使用面向块的介质,必须解决以下问题:如何将文件内容和结构信息存储在目录层次结构上。在这里我们对与底层设备通信的方法不感兴趣,内核中对应的驱动程序对此提供了统一的接口。从文件系统的角度来看,底层设备无非是存储块的一个列表,文件系统相当于对该列表实施一个适当的组织方案。
(2)虚拟文件系统(Virtual Filesystem)在内核中生成,是一种使用户应用程序与用户通信的方法。proc文件系统是这一类的最佳实例。它不需要在任何种类的硬件设备上分配存储空间。相反,内核建立了一个层次化的文件结构,其中的项包含了与系统特定部分相关的信息。举例来说,文件/proc/version在用ls命令查看时,标称长度为0字节。
但如果使用cat输出文件内容,内核会产生一个有关系统处理器的信息列表。这列表从内核内存中的数据结构提取而来。
(3)网络文件系统(Network Filesystem)是基于磁盘的文件系统和虚拟文件系统之间的折中。这种文件系统允许访问另一台计算机上的数据,该计算机通过网络连接到本地计算机。在这种情况下,数据实际上存储在一个不同系统的硬件设备上。这意味着内核无需关注文件存取、数据组织和硬件通信的细节,这些由远程计算机的内核处理。对此类文件系统中文件的操作都通过网络连接进行。在进程向文件写数据时,数据使用特定的协议(由具体的网络文件系统决定)发送到远程计算机。接下来远程计算机复制存储传输的数据并通知发送者数据已经到达。
尽管如此,即使在内核处理网络文件系统时,仍然需要文件长度、文件在目录层次中的位置以及文件的其他重要信息。它必须也提供函数,使得用户进程能够执行通常的文件相关操作,如打开、读、删除等。由于VFS抽象层的存在,用户空间进程不会看到本地文件系统与网络文件系统之间的区别。