您好、欢迎来到现金彩票网!
当前位置:彩之网 > 子程序指针 >

linux vfork的子程序与父进程共享内存那为什么子进程执行exec

发布时间:2019-07-03 20:31 来源:未知 编辑:admin

  回复humjb_1983 谢谢你的回答,你说很精简!自己回复一下,大神们有错快帮我指出来不管vfork 还是fork都需要新的内存页面来保存新进程数据的, vfork创建一个进程空间,但是虽然有空间,但里面什么都没有复制,子进程共享父进程的堆栈和地址空间,就是说新创建的pcb里面关于地址的数据都是父进程的, 是只读共享。其实使用cow的fork也是这样的,pcb里面关于地址的数据都是父进程的。Exec:开始时父子两个指针指向父亲的data addr,子进程克隆了父进程的相关指针以达到数据共享.exec后指针值就变了,指向了新的内存,调用exec后,exec会修改子进程的指针值指向新的内存即exec用新调用程序的数据替换当前进程的对应数据, Vfork改变的是共享部分,要挂起主进程以达到数据不乱的目的,而fork一改变就复制,就不需要挂起主进程Vfork比fork多了一个同步动作,父进程会在子进程后继续执行,但是exec后就不存在这样的限制了,但是父子关系还是存在的。Cow内核的实现:内核的实现很简单。页面在内核的页面相关数据结构中被标识为只读和写入时复制。如果某个进程尝试修改某个页,将产生一个页面错误。然后内核处理页面错误,透明地复制这个页。在这个时候,当前进程的页面的写入时复制属性被清除,从此不再共享。就是说fork的时候凡是修改的部分都同时修改指针指向的地址和地址中的内容,没修改的部分指针指向共享内容。 查看原帖

http://ibtlsports.com/zichengxuzhizhen/156.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有