Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!think!harvard!seismo!mcvax!ukc!cstvax!hwcs!aimmi!andrew From: andrew@aimmi.UUCP (Andrew Stewart) Newsgroups: net.lang.c,net.arch Subject: Re: pointers to freshly minted functions. Message-ID: <745@aimmi.UUCP> Date: Sat, 15-Mar-86 10:11:34 EST Article-I.D.: aimmi.745 Posted: Sat Mar 15 10:11:34 1986 Date-Received: Fri, 21-Mar-86 05:30:17 EST References: <1700003@umn-cs.UUCP> <1700004@umn-cs.UUCP> <6449@utzoo.UUCP> <204@dg_rtp.UUCP> <2277@phri.UUCP> Reply-To: andrew@aimmi.UUCP (Andrew Stewart) Organization: Heriot-Watt/Strathclyde Alvey MMI Unit, Scotland Lines: 31 Xref: watmath net.lang.c:8197 net.arch:2868 In article <2277@phri.UUCP> roy@phri.UUCP (Roy Smith) writes: >In article <204@dg_rtp.UUCP> throopw@dg_rtp.UUCP writes: >[In an ongoing discussion about self-modifying code] > > The Buroughs B5700 had (in addition to the strangest subroutine >linkage I've ever seen) a tagged architecture. Each memory word had a >(3-bit?) tag which defined the value stored there as integer, real, >pointer, instruction, etc. This tag was not directly accessible by a >programmer which made it kind of hard to implement a compiler. Presumably >(I never actually used a B5700) there was some magic way the OS used to >convert data into code, but I never ran accross any reference to it. There was a simple trick - the tag bits were not held on disk, only in memory. (I'm not sure if they even existed when a segment was paged out); the compiler generated a file whose format was defined and understood by the loading procedures. When a program was run, the MCP (Burrough's name for the OS) created a new stack segment for the run-time info which was linked back to the system stack; it then built the segment dictionary for the code segments and the data segments, loaded the segments and lit the blue touch paper. Only the system could change tag bits, and not even the system could change certain tag bits once they were created. You had to destroy the segment and reallocate it. It also did memory management ('buddy' method, I think) in microcode. Nice machine. Bit sluggish in a hundreds-of-little-jobs environment, though. Have a look at Elliot Organick's book on the B6700 - it's quite a machine. -- ------------------------------------------- Andrew Stewart USENET: ...!mcvax!ukc!aimmi!andrew "My axioms just fell into a Klein bottle"