Linux 中的 Init 和 swapper 任务
我对 Linux 内核中的 init 和 swapper 任务感到困惑。我的理解是,交换器任务就像一个空闲任务 - 它在没有其他进程可运行时运行。 init 任务保持休眠状态,并在需要时唤醒以收割进程。
我在任务控制块中添加了另一个元素,我想将所有任务(包括 init 和 swapper)初始化为零。
在 linux/init_task.h 中有一个命名非常令人困惑的宏 INIT_TASK,它似乎设置了交换器任务的任务控制块的初始值。
在哪里设置 init 的任务控制块的初始值?当它们分叉时,我可以在 kernel/fork.c 中的 copy_process 函数中为所有其他任务设置初始值。
I'm confused about init and swapper tasks in the Linux kernel. My understanding is that the swapper task is like an idle task - it runs when no other processes are runnable. The init task stays asleep, and wakes up to reap processes when required.
I've added another element to the task control block, which I want to initialize to zero for ALL tasks (including init and swapper)
There is a very confusingly named macro, INIT_TASK, in linux/init_task.h, which, seemingly sets the initial values for the task control block of the swapper task.
Where do I set the initial values for the task control block of init? I'm able to set the initial values for all other tasks in the copy_process function in kernel/fork.c when they fork.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
INIT_TASK
宏用于初始化空闲任务(p->comm="swapper"
,所谓的swapper)结构,该结构将链接到vmlinuz。系统中 pid = 1 的“init”任务在
start_kernel()
末尾的rest_init()
中分叉。/kernel-3.0.36/init/main.c
这样你就可以像平常一样设置init的任务控制块的初始值。
INIT_TASK
macro is used to initialise the idle task (p->comm="swapper"
, so called swapper) structure which will linked into vmlinuz.the 'init' task with pid = 1 in the system, is forked in the
rest_init()
in end of thestart_kernel()
./kernel-3.0.36/init/main.c
so you can set the initial values for the task control block of init as normal.