Linux IO 子系统的哪些组件是设备无关和设备相关的?

Linux IO 子系统的哪些组件是设备无关和设备相关的?

来自 Tanenbaum 的现代操作系统,

每个操作系统都有一个 I/O 子系统来管理其 I/O 设备。一些 I/O 软件是 设备无关,也就是说,同样适用于许多或所有 I/O 设备。它的其他部分,例如设备驱动程序,是 特定于特定 I/O 设备

还有一张I/O软件系统的层次图:

在此输入图像描述

在下面的两张图中Linux的 IO 子系统,你能在设备无关组件和设备相关组件之间划出界限吗?换句话说,哪些组件是设备相关的,哪些组件是设备无关的?我的想法是“驱动程序”是设备相关的,而“VFS”是设备无关的。但我不确定其他组件。

来自同一本书:

在此输入图像描述

Bovet 的 Understanding the Linux Kernel 2005 也有这样一篇:

在此输入图像描述

答案1

在第一个Linux图中,“设备驱动程序”部分上方; Bovet 的图也是如此。

在编写操作系统时,您希望尽可能隔离设备相关部分,以便可以干净地添加更多设备。在 Linux 的情况下,“磁盘设备驱动程序”(或“网卡”、“WiFi 卡”或其他)是一个班级在面向对象编程的意义上,进一步细化为各个设备类型的类(例如“瑞昱半导体有限公司 RTL8111/8168/8411 PCI Express 千兆位以太网控制器”),这些类又可以被实例化为多个根据需要,复制相同(或足够相似)的设备。例如谁的物体在某些情况下,设备特定的功能被抽象到更高级别的子系统中,例如 WiFi 管理域和限制的整个复杂处理(这最初是每个驱动程序的一部分)。有时,存在一层一层的设备,例如 USB 拇指驱动器,它使用 USB,并依次作为 USB 上的 SCSI 磁盘或 IP 上的 SCSI(依次在光纤网络接口上运行)进行处理。

长话短说:这种干净的分离(就像在“操作系统”文本中看到的那样)只是一个非常粗略的第一近似,现实是一个更有趣的混乱。

相关内容