Fragmentation

External fragmentation means that the available memory is broken up into lots of little pieces, none of which is big enough to satisfy the next memory requirement, although the combined holes' size could.

Internal fragmentation means that a process is given a chunk of memory that is larger than what the process requested. Since memory is allocated to processes in blocks, the portion of a block that the process doesn't use is an internal fragment.

All the memory allocation strategies suffer from both external and internal fragmentation. Moreover, the same effect happens with hard drives.

Possible solutions: (1) use variable size blocks to minimize losses due to internal fragmentation, (2) if the programs in memory are relocatable, reduce external fragmentation with compaction, i.e. moving all processes down to one end of physical memory by only updating the relocation register for each process, and (3) allow processes to use non-contiguous blocks of physical memory, with a separate relocation register for each block (i.e., segmentation.)