Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!jsq From: domo@tsa.co.uk (Dominic Dunlop) Newsgroups: comp.std.unix Subject: Re: qfork() (again) Message-ID: <17527@cs.utexas.edu> Date: 31 Jan 91 10:05:36 GMT References: <16992@cs.utexas.edu> <17010@cs.utexas.edu> <17402@cs.utexas.edu> Sender: jsq@cs.utexas.edu Reply-To: domo@tsa.co.uk Organization: The Standard Answer Ltd. Lines: 40 Approved: jsq@cs.utexas.edu (Moderator, John S. Quarterman) X-Submissions: std-unix@uunet.uu.net Submitted-by: domo@tsa.co.uk (Dominic Dunlop) In article <17402@cs.utexas.edu> michael@CS.UCLA.EDU (michael gersten) writes: > May I humbly ask what was wrong with vfork? Yup. I'll humbly try to answer. > > As I understand it, vfork's semantics was a virtual fork-- > conceptually two execution threads would return from the call, > and they may or may not be sharing data space--any program > that relied on one or the other was by definition broken. The problem -- one problem -- is in coming up with a ``portable'' definition of ``data space''. On what we currently assume to be ``vanilla flavour'' architectures such as that of the 68000 which you cite, it's fairly obvious. But on others, it's not. What about registers? Are they data space? No? Even on architectures with register windows which may or may not map onto main memory addresses? Bear in mind that such exotica are not so exotic any more: RISCs use them widely. It seems that any definition which is safe on all architectures is liable to constrain what one may do between [qv]fork() and exec() so greatly that it turns out to be better to define a combined spwan() function. This would make it less likely that the POSIX standards would contain explicit or implicit assumptions about the architecture of the hardware on which a conforming implementation runs. While this might be nice for aging architectures such as that of (say) the Unisys 1100 series, more importantly, it would not constrain architectural advances of the future needlessly to conform to the nineteen seventies' ideas of what was a ``clean machine'' in order to be able efficiently to implement POSIX interfaces. > Now, why was it removed? What is wrong with it? -- see also comp.std.unix Volume 22, Number 69. -- Dominic Dunlop Volume-Number: Volume 22, Number 93