Programmers think of a program as code, data, stack and heap, not as equal-sized pages. Segmentation divides memory along those logical pieces, each with its own base and limit. Use it when a question gives (segment, offset) pairs and asks for a physical address or a trap. Because segments vary in size, it brings back external fragmentation, which is why many systems page each segment.