Interazioni tra processi
È possibile classificare le modalità di interazione fra i processi in base a quando sono consapevoli l’uno dell’altro:
- Processi Ignari l’uno dell’altro:
Sono processi indipendenti, ognuno prova ad accedere alle risorse del sistema senza pensare all’altro, quindi deve essere il sistema operativo a arbitrare la competizione ed assegnare le risorse a ciascuno.
- Processi indirettamente a conoscenza l’uno dell’altro:
Sono processi che non si riconoscono fra loro se non per delle risorse condivise che usano per scambiare informazioni; anche questi processi devono sincronizzarsi per utilizzare le risorse, in questo caso il sistema operativo deve facilitare la cooperazione fornendo meccanismi di sincronizzazione.
- Processi direttamente a conoscenza l’uno dell’altro:
comunicano fra loro sulla base dell’id del processo; comunicano in maniera diretta e si scambiano messaggi, il sistema operativo facilita la cooperazione fornendo meccanismi di comunicazione.
Proprietà
I programmi concorrenti hanno essenzialmente due tipi di proprietà:
- Safety: sono proprietà che mostrano che se il programma va avanti, va nella direzione giusta, ovvero non esegue azioni scorrette;
- Liveness: il programma avanza, non si ferma.
Consensus - esempio
Si consideri un sistema con $n$ processi attivi; all’inizio ogni processo propone un valore e alla fine tutti i processi si devono accordare su uno dei valori proposti.
- Proprietà di safety: se un processo decide, deve decidere uno dei valori proposti; se due processi decidono, devono decidere lo stesso valore.
- Proprietà di liveness: prima o poi ogni processo corretto (non in crash) prenderà una decisione.
Programmi sequenziali
Quali proprietà dovrebbero essere comuni a tutti i programmi concorrenti?
Proprietà di Safety
- I programmi non devono interferire fra di loro per l’accesso alle risorse condivise;
- Non vale per i processi che interagiscono comunicando.
<aside>
🚧 Devono esserci meccanismi di sincronizzazione per garantire la proprietà di safety: devono essere correttamente usati dal programmatore altrimenti si rischiano delle race condition.
</aside>