En un entorno multiprogramación suele haber más trabajos a ejecutar de los que posiblemente podrían ejecutarse al mismo tiempo. Antes que el sistema operativo pueda planificarlos, necesita resolver tres limitaciones del sistema: 1) hay un número finito de recursos (como unidades de disco, impresoras y unidades de cinta); 2) algunos recursos, una vez asignados, no pueden compartirse con otro trabajo (por ejemplo, impresoras); y 3) algunos recursos requieren la intervención del operador; es decir, no es posible reasignarlos automáticamente de un trabajo a otro (como las unidades de disco).