Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中的Init和swapper任务_Linux_Init - Fatal编程技术网

Linux中的Init和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中

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

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

linux/INIT_TASK.h中有一个名称非常混乱的宏INIT_TASK,它似乎为swapper任务的任务控制块设置初始值


在哪里设置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的任务控制块的初始值设置为正常值