进程的创建和删除 based on Linux3.2
-
Upload
hercules-pasha -
Category
Documents
-
view
62 -
download
1
description
Transcript of 进程的创建和删除 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 月
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();
init 进程♦ 在系统启动阶段,操作系统内核部分初始
化阶段的结尾,依据 /etc/inittab 配置文件来对系统进行用户态的初始化。
♦ 在系统运行当中 root 用户可以运行 init 命令把系统切换到不同运行级别( run level )
♦ 在系统起来以后, init 作为一个 daemon 进程运行
进程的创建♦ 新的进程通过复制旧进程(即父进场)而
建立, fork , vfork 和 clone 。– 在物理内存中为新进程创建一个 task_struct 结
构– 复制旧进程的 task_struct 结构并修改部分内容– 为新进程分配新的内核堆栈和进程标识符– 新进程 task_struct 结构插入进程链关系(包括
运行队列)– 新进程即可被调度选择执行
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
撤销进程♦ 进程终止的一般方式是 exit() 系统调用
– 这个系统调用可能由编程者明确的在代码中插入
– 另外,在控制流到达主过程 [C 中的 main() 函数 ] 的最后一条语句时,执行 exit() 系统调用
♦ 内核可以强迫进程终止– 当进程接收到一个不能处理或忽视的信号时– 当在内核态产生一个不可恢复的 CPU 异常而
内核此时正代表该进程在运行
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
谢谢大家!
不论你多么富有,多么有权势,当生命结束之时,所有的一切都只能留在世界上,唯有灵魂跟着你走下一段旅程。人生不是一场物质的盛宴,而是一次灵魂的修炼,使它在谢幕之时比开幕之初更为高尚。——稻盛和夫
参考资料:《深入理解 Linux 内核》第三版http://www.linuxfromscratch.orghttp://savannah.nongnu.org/projects/sysvinit