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!