linux内核分析 第六周 分析Linux内核创建一个新进程的过程
2016-04-01 20:34
686 查看
进程的描述
操作系统的三大管理功能:进程管理、内存管理、文件系统为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息。
进程控制块PCBtask_struct:进程状态、进程打开的文件、进程优先级信息
task_struct总体数据结构的抽象:
tty:控制台 fs:文件系统 files:文件描述符 mm:内存管理 signal:信号描述
进程的状态:
注意:Linux下,中就绪状态和运行状态都是TASK_RUNNING
一、gdb跟踪分析一个fork系统调用内核处理函数sys_clone
二、阅读理解task_struct数据结构
三、创建新进程
复制一个PCB——task_struct给新进程分配一个新的内核堆栈
修改复制过来的进程数据,如pid、进程链表
四、新进程是从哪里开始执行的
fork出来的子进程从ret_from_fork开始执行,然后跳转到
syscall_exit,从系统调用中返回。
五、fork函数创建一个子进程
fork一个子进程的代码#include<stdio.h> #include<stdlib.h> #include<unistd.h> intmain(intargc,char*argv[]) { intpid; /*forkanotherprocess*/ pid=fork(); if(pid<0) { /*erroroccurred*/ fprintf(stderr,"ForkFailed!"); exit(-1); } elseif(pid==0)//子进程pid==0时返回,子进程是在内核中返回 { /*childprocess*/ printf("ThisisChildProcess!\n"); } else//父进程可以返回 { /*parentprocess*/ printf("ThisisParentProcess!\n"); /*parentwillwaitforthechildtocomplete*/ wait(NULL); printf("ChildComplete!\n"); } }
六、总结
Linux中所有的进程创建都是基于复制的方式,Linux通过复制父进程来创建一个新进程,通过调用do_fork来实现,然后修改必要的信息,从而得到子进程的task_struck。fork创建的新的子进程是从
ret_from_fork开始执行的,然后跳转到
syscall_exit,从系统调用中返回。
相关文章推荐
- 浅谈linux虚拟机没有ip的问题
- 《Linux操作系统分析》之分析Linux内核创建一个新进程的过程
- Linux平台下变量在栈帧中的存储
- linux常用命令之cat使用方法
- CentOS 6.0 启动时出现fstab错误时的修复
- 如何禁用centos7中的ipv6
- linux命令(二)uname命令
- linux中eclipse报错: program g++ not found in path
- linux 文件夹/文件管理
- Linux工作管理(job control)
- Linux系统中主要系统目录的功能
- Linux常用软件总结
- linux文件系统的移植
- 每天一个linux命令(50):crontab命令
- linux磁盘管理
- GDB程序调试工具参考知识
- Linux GDB程序调试工具使用简介
- Linux中的软链接与硬链接
- centos7安装postgresql和pgadmin
- linux中php配置