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

被折叠的 条评论
为什么被折叠?



