linux内核源码分析之进程创建

Posted 为了维护世界和平_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux内核源码分析之进程创建相关的知识,希望对你有一定的参考价值。

进程创建

  1. fork:重量级调用,建立父进程完整副本,作为子进程的执行;
  2. vfork:类似于fork,但并不创建父进程的副本,相反父子进程共享数据,节省大量CPU时间。fork的写时复制技术,vfork不再有优势,避免使用;
  3. clone:产生线程,可以对父子进程间的共享、复制进行精确控制。

fork,vfork,clone在创建时,内核中都是使用do_fork来处理,但传递的参数不同。

写时复制

内核使用写时复制技术,以防止在fork执行时将父进程的所有数据复制到了子进程。

不使用写时复制缺点:
1)使用大量内存;2)复制操作耗费时长。
举例
如果应用进程在进程复制后使用exec立即加载新程序,那么意味着此前的复制操作完全多余。

写时复制策略:
并不复制进程的整个地址空间,而只是复制其页表,建立虚拟地址和物理地址内存之间的联系。

如果主进程修改其中页B的数据,此时就会发生父子进程在内存分离。因为修改页导致子进程不得不去复制原来的页来保证父子进程干扰。

总结:内核只为新生的子进程创建虚拟空间,它们来复制于父进程的虚拟结构,但不为这些段分配物理内存,它们共享父进程的物理空间,当父进程中有更改相应的行为时,再为子进程相应的段分配物理空间。

以上是关于linux内核源码分析之进程创建的主要内容,如果未能解决你的问题,请参考以下文章

linux内核源码分析之实时调度

linux内核源码分析之性能优化

linux内核源码分析之CFS调度

Linux内核分析之六——进程的描述与进程的创建

linux内核源码分析之虚拟内存映射

Linux内核分析:实验六--Linux进程的创建过程分析