Sono più o meno sinonimi. Il multiprogrammazione è più utilizzato quando è coinvolta una CPU, che viene commutata da un processo all'altro, processi che si stanno rimettendo in memoria contemporaneamente. Sono arrivati i thread, e non passava più da un programma all'altro ...
I processori, in particolare la linea Intel, disponevano dei meccanismi per un vero multitasking (interruzione del timer, istruzioni privilegiate) almeno dall'80286. L'M68000 utilizzato nel primo Mac era un processore con capacità multitaking a tutti gli effetti. Questo non è uno sviluppo recente nelle architetture. Si noti che la prima volta che i sistemi condivisi hanno scambiato i programmi dell'utente in entrata e in uscita, e quindi non erano realmente multiprogrammi nel senso di avere diversi programmi in memoria contemporaneamente.
L'idea è di avere diversi programmi che risiedono contemporaneamente nella memoria, in modo tale che quando uno cede la CPU (terminando o aspettando) ce ne sono altri pronti ad usare la CPU, aumentando così l'utilizzo della CPU (e come puoi considerare ogni scoppio della CPU essere preparazione per un utilizzo dell'I / O, aumento dell'utilizzo complessivo). Ciò fornisce un miglior pensiero (importante nei sistemi batch).
Arrivò la condivisione del tempo, diversi utenti interattivi collegati alla macchina. Stessa idea, mantieni i loro programmi in giro ma passa da uno all'altro abbastanza velocemente da avere l'illusione di "avere un computer per sé". Richiede un timer che interrompe la CPU per evitare la monopolizzazione.
Sulle macchine personali non vi erano molti incentivi per eseguire diversi programmi alla volta, almeno inizialmente (un utente di fronte a un dispositivo gravemente limitato non si aspettava molto). Con la crescita delle macchine, un modo per aggirare questo problema e consentire diversi programmi alla volta senza cambiare molto il sistema operativoera un "multitasking cooperativo", in quanto ogni programma è destinato a cedere periodicamente al sistema operativo per selezionarne un altro da eseguire. Dato che il programma in questo modo ha il pieno controllo, può scegliere di farlo quando nulla potrebbe essere incasinato da altri. Inutile dire che un programma che "dimentica" di adempiere al proprio dovere di rendimento ottiene un aumento interessante delle prestazioni ... i primi sistemi Mac hanno funzionato in questo modo, e per i motivi di cui sopra non è durato a lungo. Sui sistemi embedded con nessun sistema operativo o solo rudimentale e con una serie strettamente controllata di programmi in esecuzione, questa è certamente un'opzione attactive.