As per Galvin's book, segmentation is the solution to external fragmentation. But in segmentation, the memory blocks are of different sizes. So, if one segment is removed that creates a hole. If we put the small segment many times then this creates external fragmentation. How, then, is segmentation solution to external fragmentaton?
If segments are referenced indirectly (via a segment table), then the memory manager can move segments in physical memory to fill the holes, as long as it updates the segment pointers. And the segment table cannot have fragmentation because all segment pointers are the same size.