内核代码是专门进程运行的吗?

内核代码是专门进程运行的吗?

我们知道程序是一个进程(例如:gedit、ssh...等)。

内核和驱动怎么样?

它们是单独的进程吗?

前任:

运行内核代码的进程。

B 进程运行驱动程序 foo。

答案1

在 Unix 风格的上下文中,有些人将内核视为“进程 0”(在进程 1 之前init)。然而,这并不准确,特别是因为内核的调度方式与进程不同。

一般来说,Unix 风格的内核仅响应某些事件而运行。这些事件分为两类或三类:

  1. 系统调用:当进程调用系统调用时,就会调用内核;这发生在调用进程的上下文中,并且不涉及任何其他进程。

  2. 硬件中断:当硬件需要主CPU关注时,它发出硬件中断,并调用内核来处理它。不同操作系统的处理方式有所不同,但在大多数情况下,初始中断处理也不涉及任何新进程。

  3. 故障(可以被认为是硬件中断的一种形式):当出现问题并且CPU需要“负责任的成年人”的注意时,它会发出故障,并调用内核来处理它。这发生在故障过程的背景下。例如,当进程访问未映射的内存时,就会发生这种情况;如果进程被允许这样做,内核将映射丢失的内存,并返回给进程;如果不是,内核将终止该进程。

有些内核确实使用进程来完成其部分任务;例如,Linux 使用进程来执行长时间运行的任务这包括设备驱动程序,对于长时间运行的任务,并非全部使用设备驱动程序。在大多数系统中,设备驱动程序在运行时并不与内核分离。一旦加载,它们就成为内核的一部分。

也可以看看Linux内核如何知道哪个进程进行了系统调用?

请注意,以上所有内容都假设一个典型的 Unix 风格的大内核;微内核采用不同的方法,通常认为内核职责的许多部分都是由进程处理的。看赫德例如。

相关内容