如果多次调用设备驱动程序,内核是否会创建多个进程?

如果多次调用设备驱动程序,内核是否会创建多个进程?

open("/dev/mydrievr")如果一个设备驱动程序被多个程序多次调用,会发生什么情况?

是否为每个调用创建一个进程?

是否可以实例化线程而不是进程?

答案1

在大多数情况下,内核请求不会产生新的进程或线程;而是产生新的进程或线程。它们在调用线程的上下文中提供服务。换句话说,从调度意义上来说,系统调用不会切换到内核;而是会切换到内核。内核不是一个在必要时调用的单独进程。在您的示例中,每次调用open都将在调用程序的上下文中处理。

一些设备驱动程序确实需要能够处理进程上下文之外的工作,例如处理导致长时间处理的中断。此类驱动程序使用工作队列。在内核中,工作队列有效地使用线程,但它们在外部表现为进程。 Linux 中进程和线程之间的区别在内核线程的上下文中没有多大意义:它们都共享相同的地址空间,并且从调度的角度来看进程和线程无论如何都是等效的。

答案2

您对“设备驱动程序”的理解不太正确。

您的示例打开调用不会“调用设备驱动程序”,它会打开一个设备。一般来说,设备驱动程序和设备根本不创建进程。

设备文件通常对应于物理硬件设备,并用作用户进程访问该设备的句柄。该设备支持在设备驱动程序中实现的系统调用(如读、写、ioctl 等)。设备驱动程序可能支持多个设备,每个设备都有自己的设备文件。不涉及任何流程。

设备驱动程序的部分目的是协调多个进程和内核对设备的访问。 (内核可以直接访问设备而无需用户进程,而是通过设备驱动程序——例如磁盘。)

相关内容