我在网上找到了下面这张图:
我从这张图片中了解到的是,如果例如流程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 总线等......)