gpt4 book ai didi

linux - Linux 中的初始化和交换器任务

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:07 24 4
gpt4 key购买 nike

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

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

在 linux/init_task.h 中有一个名字很容易混淆的宏 INIT_TASK,它似乎为交换任务的任务控制 block 设置了初始值。

init 的任务控制 block 的初始值在哪里设置?我可以在 kernel/fork.c 中的 copy_process 函数中为所有其他任务设置初始值,当它们 fork 时。

最佳答案

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

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

/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 的任务控制 block 的初始值。

关于linux - Linux 中的初始化和交换器任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7644551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com