进程的创建和删除 based on Linux3.2

8
进进进进进进进进 based on Linux3.2 进进 进进0512-68839302 进进进进@mengning997 进进进进@ 进进 V5 E-mail [email protected] 进进http://staff.ustc.edu.cn/~mengning 进进 进进进进进进进进进进进进进进进进进 166 进进进进 A302 进 2012 进 3 进

description

进程的创建和删除 based on Linux3.2. 孟宁 电话:0512-68839302 腾讯微博:@mengning997 新浪微博:@孟宁V5 E-mail:[email protected] 主页:http://staff.ustc.edu.cn/~mengning 地址:苏州工业园区独墅湖高等教育区仁爱路166号明德楼A302室. 20 1 2 年 3 月. 0号进程与1号进程. start_kernel 0 - mm_init_owner(&init_mm, &init_task); rest_init - PowerPoint PPT Presentation

Transcript of 进程的创建和删除 based on Linux3.2

Page 1: 进程的创建和删除 based on Linux3.2

进程的创建和删除based on Linux3.2

孟宁电话: 0512-68839302 腾讯微博: @mengning997 新浪微博: @ 孟宁 V5E-mail : [email protected]主页: http://staff.ustc.edu.cn/~mengning地址:苏州工业园区独墅湖高等教育区仁爱路 166 号明德楼 A302室

2012 年 3 月

Page 2: 进程的创建和删除 based on Linux3.2

0 号进程与 1 号进程♦ start_kernel

– 0- mm_init_owner(&init_mm, &init_task);– rest_init

• 1- kernel_thread(kernel_init– init_post

» run_init_process("init"); 调用 kernel_execve 变成用户态进程

• 2- kernel_thread(kthreadd• schedule();• cpu_idle();

Page 3: 进程的创建和删除 based on Linux3.2

init 进程♦ 在系统启动阶段,操作系统内核部分初始

化阶段的结尾,依据 /etc/inittab 配置文件来对系统进行用户态的初始化。

♦ 在系统运行当中 root 用户可以运行 init 命令把系统切换到不同运行级别( run level )

♦ 在系统起来以后, init 作为一个 daemon 进程运行

Page 4: 进程的创建和删除 based on Linux3.2

进程的创建♦ 新的进程通过复制旧进程(即父进场)而

建立, fork , vfork 和 clone 。– 在物理内存中为新进程创建一个 task_struct 结

构– 复制旧进程的 task_struct 结构并修改部分内容– 为新进程分配新的内核堆栈和进程标识符– 新进程 task_struct 结构插入进程链关系(包括

运行队列)– 新进程即可被调度选择执行

Page 5: 进程的创建和删除 based on Linux3.2

do_fork

♦ copy_process– dup_task_struct

• alloc_task_struct_node• alloc_thread_info_node

– alloc_pid– INIT_LIST_HEAD(&p->thread_group);

♦ wake_up_new_task

Page 6: 进程的创建和删除 based on Linux3.2

撤销进程♦ 进程终止的一般方式是 exit() 系统调用

– 这个系统调用可能由编程者明确的在代码中插入

– 另外,在控制流到达主过程 [C 中的 main() 函数 ] 的最后一条语句时,执行 exit() 系统调用

♦ 内核可以强迫进程终止– 当进程接收到一个不能处理或忽视的信号时– 当在内核态产生一个不可恢复的 CPU 异常而

内核此时正代表该进程在运行

Page 7: 进程的创建和删除 based on Linux3.2

do_exit

♦ /* causes final put_task_struct in finish_task_switch(). */

♦ tsk->state = TASK_DEAD;

♦ schedule();/__schedule– context_switch– finish_task_switch– put_task_struct/__put_task_struct– free_task

Page 8: 进程的创建和删除 based on Linux3.2

谢谢大家!

不论你多么富有,多么有权势,当生命结束之时,所有的一切都只能留在世界上,唯有灵魂跟着你走下一段旅程。人生不是一场物质的盛宴,而是一次灵魂的修炼,使它在谢幕之时比开幕之初更为高尚。——稻盛和夫

参考资料:《深入理解 Linux 内核》第三版http://www.linuxfromscratch.orghttp://savannah.nongnu.org/projects/sysvinit