In the first multiprogramming systems, an entire program was loaded into its own block of memory, called its memory partition. These early systems implemented multiprogramming with fixed partitions. As the size of programs grew, it became difficult to find partitions large enough to accomodate programs and still have the multiprogramming level high enough to produce a good CPU utilization.
In order to achieve a high CPU utilization with larger programs, multiprogrammed systems were combined with virtual memory. This combination allows the selection of a partition which is smaller than the address space of the program. It relies on a paging policy to manage the contents of the partition.
Bringing virtual memory into a multiprogrammed system provided flexibility in the partition size. A process using fixed partitions must fit into a predetermined number of pages. A process using variable partitions may allocate and deallocate pages during its execution. The use of variable partitions permits the location, size and even the number of partitions to vary dynamically. The deallocation of pages then benefits processes that need to increase their partition sizes.
There are two modes of paging algorithms in multiprogramming:
Analysis of the various approaches to multiprogramming begins with the idea of space-time