Paging uses fixed-size pages, which don’t match program structure (code, data, stack are different logical units). We need variable-size chunks that match program semantics.
Segmentation divides memory into variable-size logical units (segments) like code, data, stack, each with a segment table mapping to physical memory.
- Program divided into segments (code, data, stack, heap)
- Each segment has: base address, limit (size)
- Segment table maps segment number → (base, limit)
- Address = segment number + offset within segment
- Hardware checks offset < limit (protection)
- Variable-size segments (no internal fragmentation)
- Matches program structure (logical units)
- External fragmentation (gaps between segments)
- Easier sharing (share entire segment)
- Built from: Virtual Memory, Paging
- Builds into: Paging vs Segmentation
- Related: Segment Table, External Fragmentation
- Contrasts with: Paging (variable vs fixed size)
- External fragmentation: gaps between segments
- Segment table overhead per process
- Segment bounds checking required (hardware)