根文件系统
首先要明白的是“什么是文件系统”,文件系统是对一个存储设备
上的数据和元数据进行组织的机制。这种机制有利于用户和操作系
统的交互。在一篇 oracle 的技术文章中看到这样一句话“尽管内核
是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工
具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用
文件 I/O 机制管理硬件设备和数据文件”,这句话我是这样理解的,
在 Linux 没有文件系统的话,用户和操作系统的交互也就断开了,
例如我们使用最多的交互 shell,包括其它的一些用户程序,都没有
办法运行。在这里可以看到文件系统相对于 Linux 操作系统的重要
性。下面是 Linux 文件系统组件的体系结构。
用户空间包含一些应用程序(例如,文件系统的使用者)和
GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关
闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统
调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一组接口,然
后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。
有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存
最近使用过的文件系统对象。
每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,
供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。
例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。