赞
踩
fork接口通过系统调用会创建一个与原来进程几乎完全相同的进程,也就是俩个进程可以做完全相同的事儿,当然,如果传入参数不同,也可以做不同的事儿。
一个进程具有着它自己的pcb,进程控制块,当该进程调用fork接口后,就会创建一个新的pcb进程控制块出来,新创建出来的进程就被叫做子进程,而之前的进程就被叫做父进程,fork接口具有返回值,如果创建子进程失败就会返回-1,在子进程中返回值为0,在父进程中返回子进程的pid一个大于0的值。
在子进程的pcb中拥有着与父进程pcb几乎一致的信息(比如上下文数据、内存指针……)子进程保留着大部分父进程的运行信息,即父进程现在运行到了那里,那么子进程也运行到了那里。
父子进程中的变量存在于各自的虚拟地址中,并分别通过页表映射到同一块物理内存,但是当子进程或者父进程中的数据内容将要发生修改的时候,子进程就会通过写时拷贝技术在物理内存中开辟一块新的空间,然后通过虚拟地址映射到这块新的物理内存中去。
写实拷贝技术:进程之间是相互独立、互不影响的,当操作系统要对父子进程数据进行修改的时候,就会重新开辟一块空间出来。
在子进程创建出来之后,二者通过虚拟地址空间经过页表映射到同一块内存地址,只有在需要修改父子进程数据的时候才会进行对子进程的空间开辟,这一举措是为了提高创建子进程的效率,防止对子进程进行空间开辟后却不进行修改的浪费。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。