Linux是否使用硬盘分区的设备文件来访问硬盘?

Linux是否使用硬盘分区的设备文件来访问硬盘?

我在网上找到了下面这张图:

enter image description here

我从这张图片中了解到的是,如果例如流程1想要读取某个文件,它将执行以下操作:

  • 调用read()文件的文件描述符并将其作为参数传递给 read().
  • 虚拟文件系统将检查该文件驻留在什么文件系统类型上,假设它驻留在 ext2 文件系统上。
  • ext2驱动程序(不知道它是否被称为“驱动程序”)将要求适当的设备驱动程序从HDD检索文件。

现在我想知道的是:图中的“设备驱动程序”框代表什么,它是否代表诸如/dev/sda1/dev/sda2/dev/sdb1等设备文件?

那么基本上Linux实际上是使用这些设备文件来访问HDD(即当Linux想要读取某个文件时,它是否调用open()设备/dev/sda1文件,然后从返回的文件描述符中读取),或者这些设备文件仅供用户使用以及使用它们的程序,Linux 使用其他方式来访问 HDD 分区?

答案1

那么基本上Linux实际上是使用这些设备文件来访问HDD(即当Linux想要读取某个文件时,它是否调用open()设备/dev/sda1文件,然后从返回的文件描述符中读取),或者这些设备文件仅供用户使用以及使用它们的程序,Linux 使用其他方式来访问 HDD 分区?

不。

Linux 内核是实施系统调用(2);这是不是直接地使用它们

系统调用仅在以下情况下才有意义用户模式应用程序代码。内核代码在内核模式下运行。阅读CPU模式

当然,打开(2)-然后阅读(2)-ing 一些磁盘分区,例如/dev/sda1 间接地涉及到一些核心被其他内核代码共享和使用的代码(例如,特别是由页面缓存文件系统代码)。

这些设备文件是否仅供用户和程序使用,Linux 使用其他方式来访问 HDD 分区?

是的,内核代码不使用设备文件,例如标准差(4)(但某些代码层在某处共享)。内核不使用(但只是提供当用户进程使用系统调用时)文件描述符并处理内核索引节点和其他数据(dentries、vfsmounts...)。其他一些类型的索引节点由文件系统层写入磁盘。

图像中的“设备驱动程序”框代表什么,

它代表内核代码(读设备驱动维基页面)相关SATA磁盘并到您的芯片组

操作系统:三个简单的部分(可免费下载)因为需要整本书来解释这一切。然后看到内核新手对于Linux内核特定的事情并研究内核源代码(它是自由软件) 从内核.org

(这是一个总体简化;内核代码是模块化的并按软件层组织,例如虚拟FS、SATA 总线等......)

相关内容