Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!mimsy!eneevax!iarocci
From: iarocci@eneevax.UUCP (Bill Dorsey)
Newsgroups: comp.sys.atari.st
Subject: Re: Forwarded message
Message-ID: <560@eneevax.UUCP>
Date: Sat, 10-Jan-87 19:43:35 EST
Article-I.D.: eneevax.560
Posted: Sat Jan 10 19:43:35 1987
Date-Received: Sat, 10-Jan-87 23:51:45 EST
References: <8701022135.AA07189@ucbvax.Berkeley.EDU> <7472@utzoo.UUCP> <539@eneevax.UUCP> <10979@sun.uucp> <7487@utzoo.UUCP>
Reply-To: iarocci@eneevax.UUCP (Bill Dorsey)
Organization: never
Lines: 27

There has been much discussion about porting MIMIX over to the ST.  The
biggest problem people have been complaining about is the difficulty of
implementing fork().  The two approaches that have been discussed are
using a compiler which generates relocatable code, and swapping a program
into and out of a fixed area of memory.

The discussion so far seems to indicate that it would be more feasible to
swap a program into and out of the memory location it was loaded into than
to write a compiler that generates relocatable code.  The argument, if I
recall, is that such a compiler would generate slow and inefficient code,
not to mention would require the effort of writing such a compiler.  Then,
the discussion goes on to point out that such memory swapping is highly
inefficient, to the point that it wouldn't be worth porting MIMIX.

Well, I was all ready to give up on the idea as too much effort, when I was
told that the Megamax C compiler generates fully relocatable code.  All
code is either PC relative, or referenced through an address register which
contains the location of the base of the code/data area.  While I'm not real
familiar with the compiler (I have Mark Williams), I am aware the the comp- 
iler generates fast and efficient code, and is considered one of the better
C compilers for the ST.

So, using the Megamax C compiler, where is the difficulty in implementing the
fork() function?  It's rather trivial to make an image of a running program
in another area of memory, and change the address register used for variable
references, etc.  All of this could be done at the time the fork() function
was invoked, no more painful swapping or writing compilers!