我的问题涉及 Linux 源代码,以及它是否确实包含本机安装、解析和使用文件系统所需的代码,或者是否已将其添加到源代码中。
如果 Linux 源代码包含通过文件系统解析和访问/组织文件的代码,那么可以肯定地说文件系统是由编码到 Linux 中的设备驱动程序控制的,或者这个过程是否根据发行版、发布等
Linux 如何使用其他存储设备上的文件系统访问文件,即用户空间程序如何访问 proc、ext3、ext4 等,并且 ext3、ext4 被视为“设备驱动程序”,因为它们直接与硬件操作,还是我有错吗?
答案1
内核中有一个组件(称为虚拟文件系统,或简称 VFS),为所有文件系统提供通用接口。它理解文件类型(常规文件、目录、符号链接等)、元数据(时间、权限等)和文件内容等内容。
每个 Linux 进程都位于指定文件系统挂载位置的命名空间中。通常所有进程都位于同一个命名空间中;命名空间主要是为了支持虚拟化。命名空间本质上是路径的集合,每个路径都有一个内部文件系统引用。挂载和卸载包括更改该命名空间。
当进程访问文件时,VFS组件根据进程的命名空间和当前目录解析路径,并确定文件位于哪个挂载点下。然后,VFS 根据与挂载点关联的内部文件系统引用,将与文件相关的命令分派到适当的文件系统驱动程序。
文件系统驱动程序的工作是将命令转换为数据存储或检索。每种文件系统类型。大多数文件系统驱动程序不直接与硬件交互,而仅与其他驱动程序交互。磁盘支持的文件系统(ext4、btrfs、vfat 等)的驱动程序将命令转换为块存储操作(从分区或其他块设备读取和写入扇区)。网络支持的文件系统(nfs、cifs 等)的驱动程序将命令转换为通过网络通道的通信。内部内核文件系统(proc、sysfs...)的驱动程序可以独立工作。这保险丝文件系统驱动程序将命令传递给用户态进程。
答案2
对于每个文件系统,都有一个使用 Linux 的 API 编写的驱动程序虚拟FS当遇到存储在该类型文件系统上的对象时可以调用。这使得整个目录层次结构对于 Linux 的面向文件和文件系统的系统调用具有透明度(尽可能多,例如,对 VFAT 没有权限,因此chown(2)
将会失败)。
答案3
每一种类型的文件系统都是内核中的一个驱动程序。文件系统驱动程序调用磁盘驱动程序来访问块设备。