本文基于 Linux Kernel 2.6.11 分析进程复制系统调用 do_fork函数的实现过程。
详细分析了其中的 copy_process()、dup_task_struct()、copy_file()、copy_mm()、copy_thread()等一系列辅助函数的实现过程。
并详细讲解了进程描述符task_struct、小型进程描述符/内核栈 thread_info、内存描述符mm_struct中的主要字段含义。
讲解了线性区的概念和线性区对象 vm_area_struct、以及线性区数据结构的相关内容。并简单描述了写时拷贝机制的底层实现原理。
文章目录
进程复制概述
do_fork执行过程综述
do_fork函数执行过程的详细分析
函数原型
执行过程
进程复制概述
在Linux系统中,进程的产生通常是调用fork系统调用的结果,该系统调用通过复制一个现有的进程来创建一个全新的进程,在调用结束时,在返回点父进程恢复执行,子进程开始执行(执行点就是父进程调用fork()系统调用之后)。
fork函数返回了两次: