面试(四)fork创建子进程的流程是如何的?

fork接口创建出与原进程几乎相同的子进程,它们共享内存,但通过写时拷贝技术保证修改数据时的独立性。子进程和父进程各自有独立的pcb,且在需要修改数据时才会开辟新的物理内存空间,提高了效率并避免不必要的资源浪费。
摘要由CSDN通过智能技术生成

fork接口通过系统调用会创建一个与原来进程几乎完全相同的进程,也就是俩个进程可以做完全相同的事儿,当然,如果传入参数不同,也可以做不同的事儿。

一个进程具有着它自己的pcb,进程控制块,当该进程调用fork接口后,就会创建一个新的pcb进程控制块出来,新创建出来的进程就被叫做子进程,而之前的进程就被叫做父进程,fork接口具有返回值,如果创建子进程失败就会返回-1,在子进程中返回值为0,在父进程中返回子进程的pid一个大于0的值。

在子进程的pcb中拥有着与父进程pcb几乎一致的信息(比如上下文数据、内存指针……)子进程保留着大部分父进程的运行信息,即父进程现在运行到了那里,那么子进程也运行到了那里。

父子进程中的变量存在于各自的虚拟地址中,并分别通过页表映射到同一块物理内存,但是当子进程或者父进程中的数据内容将要发生修改的时候,子进程就会通过写时拷贝技术在物理内存中开辟一块新的空间,然后通过虚拟地址映射到这块新的物理内存中去。

写实拷贝技术:进程之间是相互独立、互不影响的,当操作系统要对父子进程数据进行修改的时候,就会重新开辟一块空间出来。

在子进程创建出来之后,二者通过虚拟地址空间经过页表映射到同一块内存地址,只有在需要修改父子进程数据的时候才会进行对子进程的空间开辟,这一举措是为了提高创建子进程的效率,防止对子进程进行空间开辟后却不进行修改的浪费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值