andrew@frip.gwd.tek.com (Andrew Klossner) (11/07/87)
[] "Remember base registers? Base registers were originally introduced so that programs could be relocated, before virtual memory - on relocation, just update the base registers, plus the pool of address constants that the base registers are loaded from (ever wonder why PL/1 had a BASED attribute?). This requires that the base register + rest of address addition be atomic, or at least that no relocation may occur between them." I couldn't let this pass without some correction. From the reference to PL/I, it seems to be a comment on the IBM 360 architecture. Base registers were made a part of that design so that a program could be loaded at startup-time into any part of memory. Once it was loaded, it was never relocated by any operating system that IBM released. A friend and I once dabbled with the idea of runtime relocation as an alternative to the very expensive total process swapping that TSO, the time sharing option, did. It didn't pan out. System programs were written primarily in assembler (PL/I was used only for customer applications), and there was no way to determine whether the value in any particular register was meant to be an address. We looked at attaching new semantics to the assembler USING pseudo-op, but still couldn't get there. -=- Andrew Klossner (decvax!tektronix!tekecs!andrew) [UUCP] (andrew%tekecs.tek.com@relay.cs.net) [ARPA]