Advertisement

在Linux中, fork和vfork

阅读量:

fork与vfork机制对比

区别

fork函数与vfork函数均具备生成子进程的功能。二者之间存在哪些差异呢?

首先来看fork:

  • 操作系统会为子进程配置虚拟内存空间及进程标识,但不会立即分配物理内存
  • 初始状态下,子进程与父进程共享相同的物理内存区域
  • 当子进程执行写操作时,操作系统将为其分配专属的物理内存

接下来是vfork:

  • 子进程与父进程共用同一虚拟地址空间

随后通过两幅图示分别说明其特性:

  1. 进程P1借助fork函数生成一个子进程P2:

![1234

](https://ad.itadn.com/c/weblog/blog-img/images/2025-05-31/rWc3FiDPqv8GEYRUkfZVgdt1p9Ca.png)

分析:
如上图所示,P1生成了一个子进程P2,操作系统为该子进程分配了虚拟内存区域,并将P1的代码段、数据段、堆以及栈等虚拟内存内容直接复制至子进程对应的虚拟内存区域;然而,操作系统并未为该子进程分配实际的物理内存空间,因此子进程P2的虚拟内存区域直接映射到父进程P1的物理内存空间。

那么问题来了,子进程在何种情况下才能拥有独立的物理内存空间?
当子进程试图修改数据段或堆栈中的内容时,操作系统会通过写时复制机制为该子进程分配新的物理内存空间,并将父

全部评论 (0)

还没有任何评论哟~