

Potential Solutions:
Not at the same time: run one program at a time. (unload other to swap)
use linker again when launching a program.

Contiguous Allocation:
segmentation fault when access address outside of segment
Growing: growing require address space moving, which is expensive
Fragmentation: new processes may not fit into holes (external) created by exiting processes.
Partial Memory Residence: entire program must be in memory to run
Swapping: entire program move to disk (and not runnable, blocked by implicite I/O), can take seconds
Paging: any page can map to any frame
Page: small area of virtual memory (1/2K, 4K, 8K)
Frame: small area of physical memory (same size as page)
benifits

One-layer page table:
1/2 average internal fragmentation
needs:
Page Table Entry
Since memory is "sparse list of dense list", giving entire address space a page table entry is wasteful. So we need multi-layer page table.

So you specify segment number and offset (implicitly), then it got translate to linear address space, then page table map linear address space to physical memory by translate page to frame address.
ASLR is not that secure and hurt performance, it is over.
Table of Content