3

在 Tanenbaum 的 Modern OS 书中,对于 Linux 文件系统,有两个草图:

在此处输入图像描述

在此处输入图像描述

在这两个草图中,特定文件系统(例如 ext4 类型)(第一个草图中的“文件系统”和第二个草图中的“文件系统 1”)列在“虚拟文件系统”下。

不同之处在于

  • 在第一个草图中,“文件系统”与“终端”和“套接字”处于同一级别,不包括后两者,
  • 在第二个草图中,“文件系统 1”包括“常规文件”、“块特殊文件”、“字符特殊文件”和“网络套接字”。

我的理解是,这两个草图显示的是同一个东西,所以它们应该是一致的。

我的问题是

  • 特定文件系统(例如 ext4)是否实现了设备文件并使它们与常规文件一样对待,还是“虚拟文件系统”的工作?

  • 我该如何理解上面提到的“文件系统”和“网络套接字”、“块/字符特殊文件”之间的关系的两个草图之间的区别?

4

1 回答 1

3

文件系统inode,它知道字符设备和块设备(并返回它们,例如通过stat(2)系统调用)。

当您的程序(和进程)打开一个字符设备(在某些文件系统中)时,内核将使用一些设备驱动程序,通常与设备主编号相关。

Ext2 wikipage 有一张漂亮的图片(显示 inode 和数据),它非常适用于Ext4(当然,许多细节已经改变)。

VFS是内核中的一个抽象层。查看VFS之旅并查看内核源代码。

一个普通的文件系统(例如 Ext3 系统)可能包含 char 设备 inode(在某些目录中可见,例如 char 设备文件),但是许多新的 Linux 系统通常使用devfs伪文件系统(挂载在/dev/)为它们(与udevsystemd)。

于 2015-12-13T16:55:15.690 回答