Memory management is one of the most important, and most difficult, tasks of an operating system.
The first part of the problem of memory management is memory allocation. The operating system does this with a memory allocation algorithm. A lot of research has been done on implementations of memory allocation, and most of it could be applied to allocation by an operating system. But what follows is a distillation of this research into several classifications of algorithms. In free list algorithms for memory management, the system keeps a list of available blocks of memory for allocation.