From 9d2e360623b0261ff15d1fc5fe2343b210a8e78f Mon Sep 17 00:00:00 2001 From: gatieme Date: Thu, 19 May 2016 12:52:27 +0800 Subject: [PATCH] ... --- study/kernel/process/create/01-idel/README.md | 304 ++++++++++++++++-- .../01-idel/images/init_thread_union.png | Bin 0 -> 38362 bytes 2 files changed, 283 insertions(+), 21 deletions(-) create mode 100644 study/kernel/process/create/01-idel/images/init_thread_union.png diff --git a/study/kernel/process/create/01-idel/README.md b/study/kernel/process/create/01-idel/README.md index 96a1a30..456e9d7 100644 --- a/study/kernel/process/create/01-idel/README.md +++ b/study/kernel/process/create/01-idel/README.md @@ -1,4 +1,4 @@ -Linux下进程的创建过程 +Linux下0号进程idel ======= @@ -7,18 +7,9 @@ Linux下进程的创建过程 | 2016-05-12 | [Linux-4.5](http://lxr.free-electrons.com/source/?v=4.5) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux-进程管理与调度](http://blog.csdn.net/gatieme/article/category/6225543) | -http://www.linuxidc.com/Linux/2013-07/87011.htm -http://www.linuxeye.com/Linux/1827.html -http://bbs.csdn.net/topics/390872515 -http://blog.csdn.net/yjzl1911/article/details/5613569 -http://blog.csdn.net/dagouaofei/article/details/5644119 -http://blog.chinaunix.net/uid-23769728-id-3129443.html -http://baike.baidu.com/link?url=sCsQDvMUaAikV5W_eKrEL3RVijNHJtOJk8nsCnjlxtnU7yoJ9svp6cwaerQ6Dqc0I-kdoAYrOtMcocCUnzyggK -http://blog.chinaunix.net/uid-21718047-id-3070635.html -http://blog.163.com/boneshunter_1234/blog/static/340762320084472122207/ -http://blog.sina.com.cn/s/blog_626aed8b0100hws6.html - +#0号进程idel +------- Linux下有两个特殊的进程,idel进程($PID = 0$)和init进程($PID = 1$) @@ -39,30 +30,301 @@ http://blog.sina.com.cn/s/blog_626aed8b0100hws6.html 系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。整个linux系统的所有进程也是一个树形结构。**树根是系统自动构造的(或者说是由内核黑客手动创建的)**,即在内核态下执行的0号进程,它是所有进程的远古先祖。 +在smp系统中,每个处理器单元有独立的一个运行队列,而每个运行队列上又有一个idle进程,即有多少处理器单元,就有多少idle进程。 + #idel的创建 ------- +在smp系统中,每个处理器单元有独立的一个运行队列,而每个运行队列上又有一个idle进程,即有多少处理器单元,就有多少idle进程。 + >idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork()产生的进程。在smp系统中,每个处理器单元有独立的一个运行队列,而每个运行队列上又有一个idle进程,即有多少处理器单元,就有多少idle进程。系统的空闲时间,其实就是指idle进程的"运行时间"。既然是idle是进程,那我们来看看idle是如何被创建,又具体做了哪些事情? -  我们知道系统是从BIOS加电自检,载入MBR中的引导程序(LILO/GRUB),再加载linux内核开始运行的,一直到指定shell开始运行告一段落,这时用户开始操作Linux。而大致是在vmlinux的入口startup_32(head.S)中为pid号为0的原始进程设置了执行环境,然后原是进程开始执行start_kernel()完成Linux内核的初始化工作。包括初始化页表,初始化中断向量表,初始化系统时间等。继而调用 fork(),创建第一个用户进程: -  kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); +我们知道系统是从BIOS加电自检,载入MBR中的引导程序(LILO/GRUB),再加载linux内核开始运行的,一直到指定shell开始运行告一段落,这时用户开始操作Linux。 -  这个进程就是着名的pid为1的init进程,它会继续完成剩下的初始化工作,然后execve(/sbin/init), 成为系统中的其他所有进程的祖先。关于init我们这次先不研究,回过头来看pid=0的进程,在创建了init进程后,pid=0的进程调用 cpu_idle()演变成了idle进程。 +#0号进程上下文信息--init_task描述符 +------- -  current_thread_info()->status |= TS_POLLING; -  在 smp系统中,除了上面刚才我们讲的主处理器(执行初始化工作的处理器)上idle进程的创建,还有从处理器(被主处理器activate的处理器)上的 idle进程,他们又是怎么创建的呢?接着看init进程,init在演变成/sbin/init之前,会执行一部分初始化工作,其中一个就是 smp_prepare_cpus(),初始化SMP处理器,在这过程中会在处理每个从处理器时调用 +**init_task**是内核中所有进程、线程的task_struct雏形,在内核初始化过程中,通过静态定义构造出了一个task_struct接口,取名为init_task,然后在内核初始化的后期,通过rest_init()函数新建了**内核init线程,kthreadd内核线程** -  task = copy_process(CLONE_VM, 0, idle_regs(®s), 0, NULL, NULL, 0); +* **内核init线程**,最终执行/sbin/init进程,变为所有用户态程序的根进程(pstree命令显示),即用户空间的init进程 -  init_idle(task, cpu); +* **内核kthreadd内核线程**,变为所有内核态其他守护线程的父线程。 -  即从init中复制出一个进程,并把它初始化为idle进程(pid仍然为0)。从处理器上的idle进程会进行一些Activate工作,然后执行cpu_idle()。 +所以**init_task决定了系统所有进程、线程的基因, 它完成初始化后, 最终演变为0号进程idel, 并且运行在内核态** -  整个过程简单的说就是,原始进程(pid=0)创建init进程(pid=1),然后演化成idle进程(pid=0)。init进程为每个从处理器(运行队列)创建出一个idle进程(pid=0),然后演化成/sbin/init。 +内核在初始化过程中,当创建完init和kthreadd内核线程后,内核会发生调度执行,此时内核将使用该init_task作为其task_struct结构体描述符,当系统无事可做时,会调度其执行, 此时该内核会变为idle进程,让出CPU,自己进入睡眠,不停的循环,查看init_task结构体,其comm字段为swapper,作为idle进程的描述符。 + +>0号线程idel的优先级为120,从#define INIT_TASK(tsk)中可以看出。 +> +>这也就决定了,其优先级足够低, 以保证其他用户进程或者系统线程会被优先调度 + + +简言之, **内核中init_task变量就是是进程0使用的进程描述符**,也是Linux系统中第一个进程描述符,init_task并不是系统通过kernel_thread的方式(当然更不可能是fork)创建的, 而是由内核黑客静态创建的. + + +该进程的描述符在[init/init_task](http://lxr.free-electrons.com/source/init/init_task.c?v=4.5#L17 +)中定义,代码片段如下 + + +```c +/* Initial task structure */ +struct task_struct init_task = INIT_TASK(init_task); +EXPORT_SYMBOL(init_task); +``` + +init_task描述符使用宏INIT_TASK对init_task的进程描述符进行初始化,宏INIT_TASK在[include/linux/init_task.h](http://lxr.free-electrons.com/source/include/linux/init_task.h?v=4.5#L186)文件中 + +init_task是Linux内核中的第一个线程,它贯穿于整个Linux系统的初始化过程中,该进程也是Linux系统中唯一一个没有用kernel_thread()函数创建的内核态进程(内核线程) + +在init_task进程执行后期,它会调用kernel_thread()函数创建第一个核心进程kernel_init,同时init_task进程继续对Linux系统初始化。在完成初始化后,init_task会退化为cpu_idle进程,当Core 0的就绪队列中没有其它进程时,该进程将会获得CPU运行。新创建的1号进程kernel_init将会逐个启动次CPU,并最终创建用户进程! + +>备注:core0上的idle进程由init_task进程退化而来,而AP的idle进程则是BSP在后面调用fork()函数逐个创建的 + + +##进程堆栈init_thread_union +------- + +init_task进程使用init_thread_union数据结构描述的内存区域作为该进程的堆栈空间,并且和自身的thread_info参数公用这一内存空间空间, + +>请参见 http://lxr.free-electrons.com/source/include/linux/init_task.h?v=4.5#L193 +> +> .stack = &init_thread_info, + + +而init_thread_info则是一段体系结构相关的定义,被定义在[/arch/对应体系/include/asm/thread_info.h]中,但是他们大多数为如下定义 + +```c +#define init_thread_info (init_thread_union.thread_info) +#define init_stack (init_thread_union.stack) +``` + +其中init_thread_union被定义在[init/init_task.c](http://lxr.free-electrons.com/source/init/init_task.c?v=4.5#L21), 紧跟着前面[init_task](http://lxr.free-electrons.com/source/init/init_task.c?v=4.5#L17)的定义 + +```c +/* + * Initial thread structure. Alignment of this is handled by a special + * linker map entry. + */ +union thread_union init_thread_union __init_task_data = + { INIT_THREAD_INFO(init_task) }; +``` + +我们可以发现init_task是用INIT_THREAD_INFO宏进行初始化的, 这个才是我们真正体系结构相关的部分, 他与init_thread_info定义在一起,被定义在[/arch/对应体系/include/asm/thread_info.h](http://lxr.free-electrons.com/ident?v=4.5;i=INIT_THREAD_INFO)中,以下为[x86架构的定义](http://lxr.free-electrons.com/source/arch/x86/include/asm/thread_info.h?v=4.5#L65) + +> 参见 +> +> http://lxr.free-electrons.com/source/arch/x86/include/asm/thread_info.h?v=4.5#L65 + +```c +#define INIT_THREAD_INFO(tsk) \ +{ \ + .task = &tsk, \ + .flags = 0, \ + .cpu = 0, \ + .addr_limit = KERNEL_DS, \ +} +``` + +>其他体系结构的定义请参见 +> +>[/arch/对应体系/include/asm/thread_info.h](http://lxr.free-electrons.com/ident?v=4.5;i=INIT_THREAD_INFO)中 + +| 架构 | 定义 | +| ------------- |:-------------:| +| x86 | [arch/x86/include/asm/thread_info.h](http://lxr.free-electrons.com/source/arch/x86/include/asm/thread_info.h?v=4.5#L65) | +| arm64 | [arch/arm64/include/asm/thread_info.h](http://lxr.free-electrons.com/source/arch/arm64/include/asm/thread_info.h?v=4.5#L55) | + +init_thread_info定义中的__init_task_data表明该内核栈所在的区域位于内核映像的init data区,我们可以通过编译完内核后所产生的System.map来看到该变量及其对应的逻辑地址 +``` +cat System.map-3.1.6 | grep init_thread_union +``` + +![init_thread_union](./images/init_thread_union.png) + +#进程内存空间 +------- +``` +struct mm_struct init_mm = { + .mm_rb = RB_ROOT, + .pgd = swapper_pg_dir, + .mm_users = ATOMIC_INIT(2), + .mm_count = ATOMIC_INIT(1), + .mmap_sem = __RWSEM_INITIALIZER(init_mm.mmap_sem), + .page_table_lock = __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock), + .mmlist = LIST_HEAD_INIT(init_mm.mmlist), + INIT_MM_CONTEXT(init_mm) +}; +``` + + +#rest_init +------- + +Linux在无进程概念的情况下将一直从初始化部分的代码执行到start_kernel,然后再到其最后一个函数调用rest_init + +>大致是在vmlinux的入口startup_32(head.S)中为pid号为0的原始进程设置了执行环境,然后原是进程开始执行start_kernel()完成Linux内核的初始化工作。包括初始化页表,初始化中断向量表,初始化系统时间等。 + +从rest_init开始,Linux开始产生进程,因为init_task是静态制造出来的,pid=0,它试图将从最早的汇编代码一直到start_kernel的执行都纳入到init_task进程上下文中。 + +这个函数其实是由0号进程执行的, 他就是在这个函数中, 创建了init进程和kthreadd进程 + +这部分代码如下: + +>参见 +> +>http://lxr.free-electrons.com/source/init/main.c?v=4.5#L386 + +```c +static noinline void __init_refok rest_init(void) +{ + int pid; + + rcu_scheduler_starting(); + smpboot_thread_init(); + + /* + * We need to spawn init first so that it obtains pid 1, however + * the init task will end up wanting to create kthreads, which, if + * we schedule it before we create kthreadd, will OOPS. + */ + kernel_thread(kernel_init, NULL, CLONE_FS); + numa_default_policy(); + pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES); + rcu_read_lock(); + kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns); + rcu_read_unlock(); + complete(&kthreadd_done); + + /* + * The boot idle thread must execute schedule() + * at least once to get things moving: + */ + init_idle_bootup_task(current); + schedule_preempt_disabled(); + /* Call into cpu_idle with preempt disabled */ + cpu_startup_entry(CPUHP_ONLINE); +} +``` + +1. 调用kernel_thread()创建1号内核线程, 该线程随后转向用户空间, 演变为init进程 + +2. 调用kernel_thread()创建kthreadd内核线程。 + +3. init_idle_bootup_task():当前0号进程init_task最终会退化成idle进程,所以这里调用init_idle_bootup_task()函数,让init_task进程隶属到idle调度类中。即选择idle的调度相关函数。 + +4. 调用schedule()函数切换当前进程,在调用该函数之前,Linux系统中只有两个进程,即0号进程init_task和1号进程kernel_init,其中kernel_init进程也是刚刚被创建的。调用该函数后,1号进程kernel_init将会运行! + +5. 调用cpu_idle(),0号线程进入idle函数的循环,在该循环中会周期性地检查。 + +##创建kernel_init +------- + +在rest_init函数中,内核将通过下面的代码产生第一个真正的进程(pid=1): + +```c +kernel_thread(kernel_init, NULL, CLONE_FS); +``` + +这个进程就是着名的pid为1的init进程,它会继续完成剩下的初始化工作,然后execve(/sbin/init), 成为系统中的其他所有进程的祖先。 + +>但是这里我们发现一个问题, init进程应该是一个用户空间的进程, 但是这里却是通过kernel_thread的方式创建的, 哪岂不是式一个永远运行在内核态的内核线程么, 它是怎么演变为真正意义上用户空间的init进程的? +> +>1号kernel_init进程完成linux的各项配置(包括启动AP)后,就会在/sbin,/etc,/bin寻找init程序来运行。该init程序会替换kernel_init进程(注意:并不是创建一个新的进程来运行init程序,而是一次变身,使用sys_execve函数改变核心进程的正文段,将核心进程kernel_init转换成用户进程init),此时处于内核态的1号kernel_init进程将会转换为用户空间内的1号进程init。户进程init将根据/etc/inittab中提供的信息完成应用程序的初始化调用。然后init进程会执行/bin/sh产生shell界面提供给用户来与Linux系统进行交互。 +> +>调用init_post()创建用户模式1号进程。 + +关于init其他的信息我们这次先不研究,因为我们这篇旨在探究0号进程的详细过程, + +##创建kthreadd +------- +在rest_init函数中,内核将通过下面的代码产生第一个kthreadd(pid=2) + +```c +pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES); +``` + + +##0号进程演变为idel +------- + +```c + /* + * The boot idle thread must execute schedule() + * at least once to get things moving: + */ + init_idle_bootup_task(current); + schedule_preempt_disabled(); + /* Call into cpu_idle with preempt disabled */ + cpu_startup_entry(CPUHP_ONLINE); +``` + +因此我们回过头来看pid=0的进程,在创建了init进程后,pid=0的进程调用 cpu_idle()演变成了idle进程。 + +0号进程首先执行init_idle_bootup_task, **让init_task进程隶属到idle调度类中**。即选择idle的调度相关函数。 + +这个函数被定义在[kernel/sched/core.c](http://lxr.free-electrons.com/source/kernel/sched/core.c?v=4.5#L5075)中,如下 + +```c +void init_idle_bootup_task(struct task_struct *idle) +{ + idle->sched_class = &idle_sched_class; +} +``` + +接着通过schedule_preempt_disabled来**执行调用schedule()函数切换当前进程**,在调用该函数之前,Linux系统中只有两个进程,即0号进程init_task和1号进程kernel_init,其中kernel_init进程也是刚刚被创建的。调用该函数后,1号进程kernel_init将会运行 + +这个函数被定义在[kernel/sched/core.c](http://lxr.free-electrons.com/source/kernel/sched/core.c?v=4.5#L3342)中,如下 + +```c +/** +* schedule_preempt_disabled - called with preemption disabled +* +* Returns with preemption disabled. Note: preempt_count must be 1 +*/ +void __sched schedule_preempt_disabled(void) +{ + sched_preempt_enable_no_resched(); + schedule(); + preempt_disable(); +} +``` + + +最后cpu_startup_entry**调用cpu_idle_loop(),0号线程进入idle函数的循环,在该循环中会周期性地检查** + +cpu_startup_entry定义在[kernel/sched/idle.c](http://lxr.free-electrons.com/source/kernel/sched/idle.c?v=4.5#L276) + +```c + void cpu_startup_entry(enum cpuhp_state state) +{ + /* + * This #ifdef needs to die, but it's too late in the cycle to + * make this generic (arm and sh have never invoked the canary + * init for the non boot cpus!). Will be fixed in 3.11 + */ +#ifdef CONFIG_X86 + /* + * If we're the non-boot CPU, nothing set the stack canary up + * for us. The boot CPU already has it initialized but no harm + * in doing it again. This is a good place for updating it, as + * we wont ever return from this function (so the invalid + * canaries already on the stack wont ever trigger). + */ + boot_init_stack_canary(); +#endif + arch_cpu_idle_prepare(); + cpu_idle_loop(); +} +``` + +其中cpu_idel_loop就是idel进程的事件循环,定义在[kernel/sched/idle.c](http://lxr.free-electrons.com/source/kernel/sched/idle.c?v=4.5#L203) + + +整个过程简单的说就是,原始进程(pid=0)创建init进程(pid=1),然后演化成idle进程(pid=0)。init进程为每个从处理器(运行队列)创建出一个idle进程(pid=0),然后演化成/sbin/init。   3. idle的运行时机 diff --git a/study/kernel/process/create/01-idel/images/init_thread_union.png b/study/kernel/process/create/01-idel/images/init_thread_union.png new file mode 100644 index 0000000000000000000000000000000000000000..c744adde704c44e0a0b7e11e8f942fcb4ec9e326 GIT binary patch literal 38362 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 RfL;Iq002ovPDHLkV1kSryUzds literal 0 HcmV?d00001