Table of Contents
Un processo è un programma in esecuzione, il modo più semplice per capire il concetto di processo è pensare ad un sistema a quanto di tempo. Periodicamente il sistema operativo decide di eseguire un processo differente, quindi l'alternarsi dei processi (dei programmi) nell'uso del processore da l'illusione all'utente del paralellismo, quindi di effettuare contemporaneamente più azioni. Processi indipendenti possono avanzare concorrentemente senza alcun vincolo di ordinamento, mentre se condividono risorse è necessaria l'introduzione di meccanismi di sincronizzazione di accesso. La modalità di accesso indivisa ad una variabile condivisa viene detta in mutua esclusione, cioè la variabile viene usata solamente dal processo che la possiede e l'accesso viene inibito a qualsiasi altro processo tramite una variabile definita lucchetto “lock” o mutual exclusion “mutex”.
L'uso dei semafori a livello di programma è difficile e rischioso poichè può causare situazioni di blocco infinito “deadlock” e situazioni erronee di difficile verifica. Linguaggi evoluti e di alto livello offrono all'utente strutture esplicite di controllo delle regioni critiche dette appunto monitor. Il monitor individua le regioni critiche e il compilatore automaticamente inserisce il codice necessario al controllo degli accessi; il monitor è in effetti un aggregato di sottoprogrammi e strutture dati che possono accedere alle variabili interne e permette a solo un programma per volta di essere attivo al suo interno. Questa proprietà è garantita dai meccanismi del supporto a tempo di esecuzione del linguaggio di programma corrente, il cui codice è inserito dal compilatore nel programma eseguibile. La sola garanzia di mutua esclusione può non bastare ad affrontare il problema, si procede pertanto all'introduzione di due procedure operanti su variabili speciali dette condition variables che consentono di modellare condizioni logiche specifiche per il problema: Wait – viene forzata l'attesa per il chiamante Signal – risveglia il processo in attesa
Le barriere consentono di sincronizzare gruppi di processi in quanto le attività cooperative sono suddivise in fasi ordinate. La barriera blocca tutti i processi che la raggiungono fino all'arrivo dell'ultimo.