An operating system used to be a set of routines, and the sole running program consumed the rest of the memory.
Saving and restoring memory to disk is too slow, so we’re leaving the process in memory while switching.
However, a running process shouldn’t be able to read or write the memory space of other processes.

Address space is an easy-to-use abstraction of physical memory, and as well the process’ view of system memory. It contains all memory states of a program, such as code, stack and heap.
Conventionally, code is placed at the end with lower address, and stack and heap are placed at opposite ends of the remaining space.
The address space is not physical address; rather it’s loaded at some arbitrary physical addresses. That’s when OS is virtualizing memory(虚拟化内存).