在Linux中, fork和vfork
发布时间
阅读量:
阅读量
fork与vfork机制对比
区别
fork函数与vfork函数均具备生成子进程的功能。二者之间存在哪些差异呢?
首先来看fork:
- 操作系统会为子进程配置虚拟内存空间及进程标识,但不会立即分配物理内存
- 初始状态下,子进程与父进程共享相同的物理内存区域
- 当子进程执行写操作时,操作系统将为其分配专属的物理内存
接下来是vfork:
- 子进程与父进程共用同一虚拟地址空间
随后通过两幅图示分别说明其特性:
- 进程P1借助fork函数生成一个子进程P2:

分析:
如上图所示,P1生成了一个子进程P2,操作系统为该子进程分配了虚拟内存区域,并将P1的代码段、数据段、堆以及栈等虚拟内存内容直接复制至子进程对应的虚拟内存区域;然而,操作系统并未为该子进程分配实际的物理内存空间,因此子进程P2的虚拟内存区域直接映射到父进程P1的物理内存空间。
那么问题来了,子进程在何种情况下才能拥有独立的物理内存空间?
当子进程试图修改数据段或堆栈中的内容时,操作系统会通过写时复制机制为该子进程分配新的物理内存空间,并将父
全部评论 (0)
还没有任何评论哟~
