On a 16-bit system with at most 64K of RAM available for a user program, one would think of having an executable overlay mechanism as an indispensable tool to maximize the amount of memory available for data. For example, the 2.11 BSD a.out format has a provision for overlays:
#define NOVL 15 /* number of overlays */
struct ovlhdr {
int max_ovl; /* maximum overlay size */
unsigned int ov_siz[NOVL]; /* size of i'th overlay */
};
struct xexec {
struct exec e;
struct ovlhdr o;
};
#define A_MAGIC1 0407 /* normal */
#define A_MAGIC2 0410 /* read-only text */
#define A_MAGIC3 0411 /* separated I&D */
#define A_MAGIC4 0405 /* overlay */
#define A_MAGIC5 0430 /* auto-overlay (nonseparate) */
#define A_MAGIC6 0431 /* auto-overlay (separate) */
That looks quite late (the first BSD UNIX release was in 1978); so the question is, what was the chronologically first release of a UN*X for a computer with the PDP-11 instruction set with support for overlays at any level (an overlay linker + runtime library to load overlays would be sufficient)?
[rhetorical] If it was not from AT&T, what were they thinking? [/rhetorical]