fork函数可以创建一个带有自己独立虚拟地址空间的新进程。
当fork函数被当前进程调用的时候,内核为新进程创建各种数据结构,并且分配它一个唯一的PID。为了给这个新进程创建虚拟内存。它创建了当前进程的mm_struct,区域结构和页表的原样副本。它将两个进程的每个页面都标记成只读,并且将两个进程中的每个区域接哦古都标记成私有的写时复制。
当fork在新进程返回的时候,新进程现在的虚拟内存刚好和调用的fork时存在的虚拟内存相同。当这两个进程中的任意一个后来进行写操作,写时复制机制就会创建新的页面,因此,也就为每个进程保持了私有地址空间的抽象概念。
execve函数在虚拟内存和内存映射中将程序加载到内存的过程中扮演了关键的角色。
假设当前运行的程序执行了execve调用,就会执行删除已存在的用户区域,映射私有区域,映射共享区域,设置程序计数器。