What we have seen so far is actually not the complete picture; in reality, this address space needs to be shared between user and kernel space.
Recall what we mentioned in the Library segments section: if a Hello, world application is to work, it needs to have a mapping to the printf(3) glibc routine. This is achieved by having the dynamic or shared libraries memory-mapped into the process VAS at runtime (by the loader program).
A similar argument could be made for any and every ...