为什么init进程无法动态创建?

时间:2015-01-25 12:07:00

标签: linux linux-kernel embedded-linux archlinux

根据我的理解,init进程是从Linux开始的第一个用户空间进程,在arch/ia64/kernel/init_task.c中创建了staticall。

为什么我们也不能动态创建这个init进程?一旦内核启动,slab分配器就可用,所以我们可以从slab分配器获取task_struct并创建init进程?

1 个答案:

答案 0 :(得分:1)

实际上,类型为init_task的{​​{1}}在arch / * / kernel / init_task.c文件中定义。这个结构在start_kernel的早期使用:http://lxr.free-electrons.com/source/init/main.c?v=3.10#L471

struct task_struct *

因此,slab分配器可能在471 asmlinkage void __init start_kernel(void) 472 { 481 smp_setup_processor_id(); 489 cgroup_init_early(); 498 boot_cpu_init(); 499 page_address_init(); 500 pr_notice("%s", linux_banner); 501 setup_arch(&command_line); 502 mm_init_owner(&init_mm, &init_task); 启动时可用,但init的task_struct在较早时使用,包括start_kernel和其他地方(http://lxr.free-electrons.com/ident?v=3.10&i=init_task),例如静态初始化其他CPU上的current_task指针。

http://lxr.free-electrons.com/source/arch/x86/kernel/cpu/common.c?v=3.10#L1080

init