Linux中的Init和swapper任务

时间:2011-10-04 07:28:51

标签: linux init

我对Linux内核中的init和swapper任务感到困惑。我的理解是交换器任务就像一个空闲任务 - 它在没有其他进程可运行时运行。 init任务保持睡眠状态,并在需要时唤醒以获取进程。

我在任务控制块中添加了另一个元素,我想为所有任务(包括init和swapper)初始化为零

在linux / init_task.h中有一个非常容易混淆的命名宏INIT_TASK,它似乎设置了交换器任务的任务控制块的初始值。

在哪里设置init的任务控制块的初始值?我可以在fork / fork.c中的copy_process函数中设置所有其他任务的初始值。

1 个答案:

答案 0 :(得分:2)

INIT_TASK宏用于初始化空闲任务(p->comm="swapper",所谓的交换器)结构,它将链接到vmlinuz。<​​/ p>

系统中pid = 1的'init'任务分叉在rest_init()末尾的start_kernel()

/kernel-3.0.36/init/main.c

347static noinline void __init_refok rest_init(void)
348{
349 int pid;
350
351 rcu_scheduler_starting();
352 /*
353  * We need to spawn init first so that it obtains pid 1, however
354  * the init task will end up wanting to create kthreads, which, if
355  * we schedule it before we create kthreadd, will OOPS.
356  */
357 kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);

因此您可以正常设置init的任务控制块的初始值。