Un sistema multiprogrammato è un sistema che permette l'esecuzione
simultanea di più programmi, che a loro volta possono essere
composti da vari processi o thread. Questo può
permettere a più utenti di accedere al sistema contemporaneamente,
o ad uno stesso utente di eseguire più programmi simultaneamente
(aumentando l'utilizzabilità del sistema), o ad un singolo
programma di scomporre la propria attività in un insieme di
attività concorrenti (semplificando la struttura logica del
programma).
Si passa così dal concetto di programma sequenziale al concetto di
programma parallelo, utilizzando un paradigma di programmazione
concorrente. Questo, se da un lato permette di strutturare meglio i
programmi, dall'altro richiede una particolare attenzione a problemi
di sincronizzazione fra le varie attività (spesso l'esecuzione di
un programma concorrente risulta non deterministica) e una stretta
interazione con il sistema operativo.
Prima di passare a vedere quali sono le funzionalità offerte dal
sistema operativo a supporto della programmazione concorrente e come
utilizzarle, è bene andare a definire in maniera più formale
alcuni concetti di base.