The operating system dictates which processes get to live in main memory at a given time to control the use of shared hardware resources.
A location in memory is referenced using an address and is either free or allocated; that is, it is either occupied or available to be used.
Process registers are the type of memory closest to the processor; they contain the data and instructions the processor actually uses in its operations.
Segmentation is a memory management technique used to create segments - adjacent blocks of memory that vary in length depending on what is being stored within a given segment.
Fragmentation occurs when blocks of allocated memory are distributed inefficiently such that there are many small blocks of free contiguous memory but very few large blocks.
Virtualizing memory provides the ability to sandbox user-space processes such that they may not access memory beyond what is required for them to operate.
Paging is a technique that allows the memory of a process to be stored at non-contiguous addresses.
If a program is loaded statically, the entirety of that program is loaded into memory prior to execution.
If a program is loaded dynamically, only the parts which are necessary for execution are loaded at any given time.