BSD daemon

NetBSD Documentation:

Weshalb wir das traditionelle vfork() nutzen

vfork() ist für den speziellen Fall wenn ein Child Prozeß sich mit einem anderen Programm via exec() überlagert und der Parent Prozeß bis dahin blockiert bleibt, entwickelt worden. Ein traditionalles fork() erfordert die Duplikation aller Pages des Parent Prozesses im Child Prozeß- ist also wesentlicher kostspieliger.

Das Mach VM System lieferte COW (Copy On Write), wodurch fork() erheblich effizienter wurde; in BSD 4.4 wurde vfork() dann als Synonym zu fork() gestaltet. Nach dem Release von NetBSD 1.3 wurde dann das traditionelle vfork() erneut implementiert.

Erheblicher Aufwand wurde unternommen, COW im UVM zu verbessern, jedoch stellte sich heraus, dass ein Zugriffs-teilendes vfork() immer noch die bessere Lösung war. Der vollständige Build von libc auf einem 200MHz PPro wird um einige Sekunden verkürzt.

vfork()/exec() durch 4.4BSD vfork() und COW:

Das 3.0BSD/NetBSD vfork() mit Addressspeicher-Teilung: Es zeigt sich also, dass im Falle eines fork() gefolgt von einem Aufrug von exec() die zweite Prozedur offensichtlich schneller ist. Selbst wenn die verwendeten COW Algorithmen gut sind, so wird doch mehr Aufwand gefordert im Vergleich zu der vmspace-sharing Prozedur.


Zurück zu NetBSD Dokumentation: Kernel
NetBSD Home Page
NetBSD Dokumentation

(Ihre Meinung) $NetBSD: vfork.html,v 1.6 2004/10/30 22:34:03 jschauma Exp $
Copyright © 1994-2003 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.