赞
踩
目录
我们都知道fork之后,会产生子进程,那么今天就来看一下,产生的子进程与父进程之间的数据共享问题。要说这个我们必须明确写实拷贝的概念
fork之后,子进程会拷贝父进程的PCB结构(这个拷贝是浅拷贝),然后对PCB里的数据做修改(pid,ppid等属性信息,也有保留的一些不做修改的)。我们现在假设一种情况,若fork之后,刚开始时就把父进程的所有页表直接拷贝给子进程,但子进程中并没有访问或修改这些页表,就要进程替换,岂不是白白做了一次复制(复制没有意义),所以,出现了写实拷贝技术,这样在刚开始时子进程并不是真正的复制父进程的空间,而是与父子进程共享所有的数据空间(全局、局部、堆区数据)。当父、子进程中任意一个进程试图去修改数据时,操作系统会将要修改的数据所在的页直接复制出来。可见写实拷贝技术是一种较高效的拷贝技术,省去了很多不必要的拷贝过程。
在这里,再提一下深拷贝和浅拷贝,二者仅在拷贝指针时存在区别
浅拷贝:只拷贝指针的值,而不拷贝指针所指向空间的内容
深拷贝:拷贝指针的值,同时也会将指针指向的内容拷贝一份
如图所示:
父子进程间对于全局数据、局部数据、堆区数据、文件描述符
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。