All processes had to be written as position independent code that could sit anywhere in memory
Are you sure about that? I thought this applied only to relocatable modules, not application tasks which ran in user mode? IIRC the MEMC presented the memory pages allocated to a task as a fixed address space, protected from other tasks. Only relocatable modules run in a privileged mode / ring with access to the full physical address space.