Multiprogramação
A multiprogramação funciona da seguinte maneira: inicialmente o sistema operacional escolhe um dos jobs da lista de jobs e começa a executá-lo. Eventualmente, o job deve esperar por alguma tarefa, como a montagem de uma fita, um comando digitado pelo teclado, ou mesmo o término de uma operação de E/S. Em um sistema monoprogramado a UCP permaneceria ociosa. Por outro lado, em um sistema multiprogramado, o sistema operacional simplesmente troca e executa outro job. Quando este novo job precisa esperar, a UCP troca para outro job e assim por diante. Em um dado momento, o primeiro job não precisa mais esperar e ganha a UCP. Assim, sempre que existirem jobs a serem processados, a UCP não ficará ociosa.
Sistemas operacionais multiprogramados são bastante sofisticados. Para que vários jobs estejam prontos para executar, é necessário que todos estejam presentes na memória RAM da máquina simultaneamente. Isto acarreta em um gerenciamento de memória para os vários jobs. Além disso, se vários jobs estão prontos para executar ao mesmo tempo, o sistema deve escolher qual deles deve ser executado primeiro. A política de decisão de qual job será executado é chamada de escalonamento de UCP. Por fim, o sistema operacional deve garantir que vários jobs rodando concorrentemente não afetem uns aos outros em todas as fases do sistema operacional, incluindo escalonamento de processos, armazenamento de disco e gerenciamento de memória.