Linux中的Init和swapper任务
我对Linux内核中的init和swapper任务感到困惑。我的理解是,swapper任务就像一个空闲任务——它在没有其他进程可运行的情况下运行。init任务保持休眠状态,并在需要时唤醒以获取进程 我在任务控制块中添加了另一个元素,我希望对所有任务(包括init和swapper)将其初始化为零 linux/INIT_TASK.h中有一个名称非常混乱的宏INIT_TASK,它似乎为swapper任务的任务控制块设置初始值Linux中的Init和swapper任务,linux,init,Linux,Init,我对Linux内核中的init和swapper任务感到困惑。我的理解是,swapper任务就像一个空闲任务——它在没有其他进程可运行的情况下运行。init任务保持休眠状态,并在需要时唤醒以获取进程 我在任务控制块中添加了另一个元素,我希望对所有任务(包括init和swapper)将其初始化为零 linux/INIT_TASK.h中有一个名称非常混乱的宏INIT_TASK,它似乎为swapper任务的任务控制块设置初始值 在哪里设置init的任务控制块的初始值?我可以在kernel/fork.c中
在哪里设置init的任务控制块的初始值?我可以在kernel/fork.c中的copy_process函数中设置所有其他任务分叉时的初始值。
INIT_TASK
宏用于初始化将链接到vmlinuz的空闲任务(p->comm=“swapper”
,即所谓的swapper)结构
系统中pid=1的“init”任务在start\u kernel()
末尾的rest\u init()中分叉
/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的任务控制块的初始值设置为正常值。init_task
宏用于初始化将链接到vmlinuz的空闲任务(p->comm=“swapper”
,即所谓的swapper)结构
系统中pid=1的“init”任务在start\u kernel()
末尾的rest\u init()中分叉
/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的任务控制块的初始值设置为正常值