La multiprogrammazione è uno dei tipi più basilari di elaborazione parallela che può essere impiegata in molti ambienti diversi. In sostanza, consente a più programmi di essere attivi contemporaneamente, pur continuando a funzionare attraverso un singolo processore. La sua funzionalità in questo ambiente implica un processo continuo di esecuzione sequenziale di attività associate alla funzione di un programma, per poi passare all’esecuzione di un’attività associata al programma successivo.
Questo tipo di elaborazione è molto diverso dal multiprocessing perché, anche se ci possono essere più programmi attualmente attivi, l’uniprocessore non sta eseguendo contemporaneamente i comandi per tutti i programmi. Invece, il processore indirizza ciascun programma, esegue un singolo comando, quindi passa al programma successivo nella coda. Il programma precedente rimane attivo, ma entra in uno stato passivo fino a quando l’uniprocessore non torna in cima alla coda ed esegue un secondo comando.
Dal punto di vista dell’utente finale, il processo è senza soluzione di continuità. Per quanto riguarda l’effettiva funzionalità, l’utente sembra utilizzare diverse applicazioni contemporaneamente. Questo perché la multiprogrammazione utilizza l’uniprocessore per eseguire rapidamente i comandi. Il risultato finale è che un utente nota un ritardo minimo o nullo quando riduce al minimo un’applicazione per eseguire un’attività associata a un’altra applicazione.
Il meccanismo all’interno della multiprogrammazione è noto come interrupt. Ad ogni attività viene concesso un tempo specifico per l’elaborazione prima che i sistemi operativi passino al programma successivo e all’attività successiva. In un certo senso, questo metodo consiste nel destreggiarsi tra più attività contemporaneamente, eseguire rapidamente una parte dell’azione richiesta, quindi passare a fare qualcosa con un’attività diversa prima di tornare al lavoro precedente.
La memoria è importante per il corretto funzionamento di questa forma di elaborazione. È necessario disporre di una capacità sufficiente per garantire che, se un programma all’interno della coda rotante incontra un problema, non impedisca ritardi o influisca sul funzionamento di altre applicazioni aperte. Allo stesso tempo, dovrebbe essere presente un tipo di protezione della memoria. In caso contrario, un problema con un’applicazione può creare un effetto a cascata che arresta o almeno rallenta le altre applicazioni aperte.