Skip to content

Files

Latest commit

4b3ba63 · Jun 27, 2016

History

History
74 lines (56 loc) · 4.82 KB

README.md

File metadata and controls

74 lines (56 loc) · 4.82 KB

File System

通常,一个完整的Linux系统由数千到数百万个文件组成,文件中存储了程序、数据和各种信息。 层次化的目录结构用于对文件进行编目和分组。其中采用了各种方法来永久存储所需的结构和数据。 每种操作系统都至少有一种“标准文件系统”,提供了或好或差的一些功能,用以可靠而高效地执行 所需的任务。 Linux附带的Ext2/3/4文件系统是一种标准文件系统,在过去几年中,该文件系统被证实非常健壮 且适于日常使用。尽管如此,还有其他为Linux编写或移植的文件系统,所有这些都是Ext2可接受的 备选方案。当然,这并不意味着程序员必须对他们使用的每种文件系统采用不同的文件存取方法, 那与操作系统作为一种抽象机制的目的是背道而驰的。为支持各种本机文件系统,且在同时允许访问 其他操作系统的文件,Linux内核在用户进程(或C标准库)和文件系统实现之间引入了一个抽象层。 该抽象层称之为虚拟文件系统(Virtual File System),简称VFS。下图说明了该抽象层:

fs_frame.jpg

VFS的任务并不简单。一方面,它用来提供一种操作文件、目录及其他对象的统一方法。另一方面, 它必须能够与各种方法给出的具体文件系统的实现达成妥协,这些实现在具体细节、总体设计方面 都有一些不同之处。但VFS的回报很高,它使得Linux内核更加灵活了。内核支持40多种文件系统, 其来源各种各样:来自MS-DOS的FAT文件系统、UFS(Berkeley UNIX)、用于CD-ROM的iso9660、 网络文件系统(如coda和NFS)和虚拟的文件系统(如proc)。

Filesystem Type

  • 基于磁盘的文件系统(Disk-based Filesystem)

是在非易失介质上存储文件的经典方法,用以在多次会话之间保持文件的内容。实际上, 大多数文件系统都由此演变而来。比如,一些众所周知的文件系统,包括Ext2/3、Reiserfs、 FAT和iso9660。所有这些文件系统都使用面向块的介质,必须解决以下问题:如何将文件内容 和结构信息存储在目录层次结构上。在这里我们对与底层块设备通信的方法不感兴趣,内核中 对应的驱动程序对此提供了统一的接口。从文件系统的角度来看,底层设备无非是存储块组成的 一个列表,文件系统相当于对该列表实施一个适当的组织方案。

  • 虚拟文件系统(Virtual Filesystem)

在内核中生成,是一种使用户应用程序与用户通信的方法。proc文件系统是这一类的最佳示例。 它不需要在任何种类的硬件设备上分配存储空间。相反,内核建立了一个层次化的文件结构, 其中的项包含了与系统特定部分相关的信息。举例来说,文件/proc/version在用ls命令查看时, 标称长度为0字节。

root@hydrogen:/ # ls -l /proc/version
-r--r--r-- root     root            0 2016-06-15 13:50 version
root@hydrogen:/ # cat /proc/version
Linux version 3.10.84-perf-g2012411-00286-g92366e0 (liminghao@liminghao) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #2 SMP PREEMPT Wed Jun 15 10:06:48 CST 2016
  • 网络文件系统(Network Filesystem)

是基于磁盘的文件系统和虚拟文件系统之间的折中。这种文件系统允许访问另一台计算机上的数据, 该计算机通过网络连接到本地计算机。在这种情况下,数据实际上存储在一个不同系统的硬件设备上。 这意味着内核无需关注文件存取、数据组织和硬件通信的细节,这些由远程计算机的内核处理。 对此类文件系统中文件的操作都通过网络连接进行。在进程向文件写数据时,数据使用特定的协议(由具体 的网络文件系统决定)发送到远程计算机。接下来远程计算机负责存储传输的数据并通知发送者数据已经到达。

尽管如此,即使在内核处理网络文件系统时,仍然需要文件长度、文件在目录层次中的位置以及文件的其他 重要信息。它必须也提供函数,使得用户进程能够执行通常的文件相关操作,如打开、读、删除等。由于 VFS抽象层的存在,用户空间进程不会看到本地文件系统与网络文件系统之间的区别。

VFS

https://github.com/novelinux/linux-4.x.y/tree/master/fs/VFS.md

ROOTFS

https://github.com/novelinux/linux-4.x.y/tree/master/init/do_mounts.c/README.md

EXT4

https://github.com/novelinux/linux-4.x.y/tree/master/fs/ext4/README.md