我知道一个进程有自己的地址空间,范围从 0x0 到 0xffffffff(如果我错了,请更正)。Linux内核是否也是一个具有自己地址空间的特殊进程?如果 CPU 遇到从进程 A 到代码驻留在内核地址空间中的函数的调用,CPU 如何切换?
问问题
88 次
1 回答
2
内核根本不像一个进程。它没有被调度,它要么代表进程运行(所谓的进程上下文或用户上下文),要么作为中断或异常的结果运行(所谓的中断上下文)。
也就是说,Linux 内核生成内核线程来执行某些任务,或者避免在中断上下文中运行太长时间(这就是“ksoftirqd”线程所做的,避免可能导致例如:音频丢失、.. .)。
您可以在 ps 命令的输出中看到内核线程。它们很容易识别:它们的名字在括号之间。其中一些每个 CPU 运行一个实例,CPU 用斜线后面的数字标识,因此 [ksoftirqd/0] 是 CPU 0 上的 ksoftirqd 实例。
进程只是意味着一些执行代码。是的,内核在 init 之前执行(甚至在此之前的引导加载程序)。但是“过程”有一个特定的定义:
- 在用户空间运行
- 使用进程 ID 运行
- 很多交互需要经过内核
- 所有资源都需要来自内核
- 需要内核调度
因此,一旦内核初始化,它就会运行 init 进程,然后它会生成它的配置所说的任何其他进程。
当一个进程调用作为内核代码一部分的函数时,该函数仅作为进程的一部分执行,否则内核本身的一部分代表这个进程。
于 2013-10-01T12:59:04.597 回答