Path: utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!snorkelwacker!spdcc!ima!esegue!johnl From: johnl@esegue.segue.boston.ma.us (John R. Levine) Newsgroups: comp.arch Subject: Re: IBM PC prehistory Message-ID: <1990Jan16.055625.8255@esegue.segue.boston.ma.us> Date: 16 Jan 90 05:56:25 GMT References: <7413@drilex.UUCP> <380@bambam.UUCP> Reply-To: johnl@esegue.segue.boston.ma.us (John R. Levine) Organization: Segue Software, Cambridge MA Lines: 21 In article <380@bambam.UUCP> bpendlet@bambam.UUCP (Bob Pendleton) writes: >> I would suggest that an MMU is necessary for anything which wants to >> implement fork() while allowing two tasks to occupy memory at once. >My conclusion is that you've never heard of a relocating loader. Don't be so rude, he's right. When you do a fork, you create two copies of the same program. In the absence of an MMI either they have to run at different addresses or you have to do the old mini-Unix hack of only swapping in one program at a time. Coding a program so that it can be moved while it's running is a lot harder than a relocating loader. Either you have to tag every single pointer that the program uses, which is impractical in C, or else you need a coding style that reserves some registers as base pointers and make all memory references relative to the base pointers. It's been done, but it's pretty gross and depends critically on the good will and non-bugginess of the compilers. -- John R. Levine, Segue Software, POB 349, Cambridge MA 02238, +1 617 864 9650 johnl@esegue.segue.boston.ma.us, {ima|lotus|spdcc}!esegue!johnl "Now, we are all jelly doughnuts."