Chinaunix

标题: 为何把fork的实现写得再好都没有vfork高效? [打印本页]

作者: 雨丝风片    时间: 2006-03-21 08:46
标题: 为何把fork的实现写得再好都没有vfork高效?
这是【FreeBSD操作系统设计与实现】的习题5.5,原文如下:

5.5 Explain why the vfork system call will always be more efficient than a clever implementation of the fork system call.
作者: 雨丝风片    时间: 2006-03-22 15:30
先来段引自【APUE】的掌故:
vfork函数始于2.9BSD。有些人认为这个函数是个瑕疵,但本书所涉及的所有平台都支持它。事实上,BSD的开发者在4.4BSD版本中把它去掉了,但所有衍生自4.4BSD的开源BSD分支又都重新在它们各自的版本中提供了vfork。


虽然在fork实现中采用copy-on-write会极大地提高效率,但只要还有拷贝,就没有完全不拷贝来得快,这就是vfork。如果说fork是“花开两朵,各表一枝”,那vfork就是“借尸还魂,魂走尸还”。但问题就在于这个“还”回来的东西可能已经物是人非了。
作者: congli    时间: 2006-03-22 15:35
呵~正在看APUE,
先记住.
作者: liangyi571    时间: 2006-03-22 22:10
vfork 是什么?APUE 又是什么?
vfork 共享代码段?
APUE 是 Advanced Program in Unix Env?
vfork 有 thread 高效吗?
作者: 雨丝风片    时间: 2006-03-23 08:00
原帖由 liangyi571 于 2006-3-22 22:10 发表
vfork 是什么?APUE 又是什么?
vfork 共享代码段?
APUE 是 Advanced Program in Unix Env?
vfork 有 thread 高效吗?


vfork共享整个地址空间。
但vfork一般用于注定马上要通过exec分道扬镳的场合,和thread的应用场合不一样吧?
作者: gvim    时间: 2006-03-23 13:47
http://www.netbsd.org/Documentation/kernel/vfork.html
NetBSD Documentation: Why implement traditional vfork()
我还没看,嘿嘿。
作者: DarkBlueSea    时间: 2006-03-29 16:14
在FreeBSD下devel/Linuxthreads──先前从Linux那引入的内核线程,就是通过vfork()函数来实现的
现在使用KSE,如果你说的是这个线程的话,就是问诸葛亮和孔明哪个更聪明。
作者: mingyanguo    时间: 2006-03-29 19:11
原帖由 DarkBlueSea 于 2006-3-29 16:14 发表
在FreeBSD下devel/Linuxthreads──先前从Linux那引入的内核线程,就是通过vfork()函数来实现的
现在使用KSE,如果你说的是这个线程的话,就是问诸葛亮和孔明哪个更聪明。

不是rfork麽?难道是我记错了。。。。
作者: DarkBlueSea    时间: 2006-03-29 20:58
楼上的兄弟是对的
我记错了,那里调用的是rfork
刚才又看了一下kern_fork,其实rfork和vfork都是调用fork1实现的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2