[comp.arch] History of base registers

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]