内核和正常过程

时间:2013-03-30 17:53:54

标签: linux process linux-kernel

我知道一个进程有自己的地址空间,范围从0x0到0xffffffff(如果我错了,请更正)。 Linux内核是否也是一个具有自己地址空间的特殊进程? 如果CPU遇到从进程A到代码驻留在内核地址空间的函数的调用,CPU如何切换?

1 个答案:

答案 0 :(得分:2)

内核实际上并不像一个进程。它没有被调度,它或者代表进程运行(所谓的进程上下文或用户上下文),或者由于中断或异常(所谓的中断上下文)而运行。

也就是说,Linux内核产生内核线程来执行某些任务,或者避免在中断上下文中运行太长时间(这就是'ksoftirqd'线程所做的事情,避免过多的延迟,这可能导致例如:丢弃音频,...)。

您可以在ps命令的输出上看到内核线程。它们很容易识别:它们的名字在括号之间。其中一些每个CPU运行一个实例,CPU在斜杠后用数字标识,因此[ksoftirqd / 0]是CPU 0上ksoftirqd的实例。

进程只是意味着执行一些代码。是的,内核在init之前执行(以及之前的引导加载程序)。但是“过程”有一个特定的定义:

  • 在用户空间中运行
  • 使用进程ID运行
  • 许多交互都需要通过内核
  • 所有资源都需要来自内核
  • 需要由内核安排

因此,一旦内核初始化,它就会运行init进程,然后生成其配置所说的其他进程。

当进程调用作为内核代码一部分的函数时,该函数仅作为进程的一部分执行,否则部分内核本身代表此进程执行。