linux内核源码分析之进程创建
Posted 为了维护世界和平_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux内核源码分析之进程创建相关的知识,希望对你有一定的参考价值。
进程创建
- fork:重量级调用,建立父进程完整副本,作为子进程的执行;
- vfork:类似于fork,但并不创建父进程的副本,相反父子进程共享数据,节省大量CPU时间。fork的写时复制技术,vfork不再有优势,避免使用;
- clone:产生线程,可以对父子进程间的共享、复制进行精确控制。
fork,vfork,clone在创建时,内核中都是使用do_fork来处理,但传递的参数不同。
写时复制
内核使用写时复制技术,以防止在fork执行时将父进程的所有数据复制到了子进程。
不使用写时复制缺点:
1)使用大量内存;2)复制操作耗费时长。
举例
如果应用进程在进程复制后使用exec立即加载新程序,那么意味着此前的复制操作完全多余。
写时复制策略:
并不复制进程的整个地址空间,而只是复制其页表,建立虚拟地址和物理地址内存之间的联系。
如果主进程修改其中页B的数据,此时就会发生父子进程在内存分离。因为修改页导致子进程不得不去复制原来的页来保证父子进程干扰。
总结:内核只为新生的子进程创建虚拟空间,它们来复制于父进程的虚拟结构,但不为这些段分配物理内存,它们共享父进程的物理空间,当父进程中有更改相应的行为时,再为子进程相应的段分配物理空间。
以上是关于linux内核源码分析之进程创建的主要内容,如果未能解决你的问题,请参考以下文章