Il multiprogrammazione è una forma rudimentale di elaborazione parallela in cui più programmi vengono eseguiti contemporaneamente su un monoprocessore. Poiché esiste un solo processore, non può esserci una vera esecuzione simultanea di diversi programmi. Invece, il sistema operativo esegue parte di un programma, poi parte di un altro e così via. All'utente sembra che tutti i programmi vengano eseguiti contemporaneamente.
Se la macchina è in grado di provocare un interrupt dopo un intervallo di tempo specificato, il sistema operativo eseguirà ciascun programma per un determinato periodo di tempo, riprenderà il controllo, quindi eseguirà un altro programma per un determinato periodo di tempo e così via. In assenza di questo meccanismo, il sistema operativo non ha altra scelta che iniziare a eseguire un programma con l'aspettativa, ma non la certezza, che il programma alla fine restituirà il controllo al sistema operativo.
Se la macchina ha la capacità di proteggere la memoria, è meno probabile che un bug in un programma interferisca con l'esecuzione di altri programmi. In un sistema senza protezione della memoria, un programma può modificare il contenuto della memoria assegnata ad altri programmi o anche la memoria assegnata al sistema operativo. I crash di sistema che ne derivano non sono solo dannosi, ma possono essere molto difficili da eseguire il debug poiché potrebbe non essere ovvio quale dei diversi programmi sia responsabile.
Vedi anche: Multithreading, multitasking, multiprocessing