UniTO/anno2/Sem1/Galla/MCAD/lesson1-03102017.md
Francesco Mecca 015f8ad739 scpd no git
2019-05-20 20:33:58 +02:00

55 lines
2.4 KiB
Markdown

# Introduzione - Programmazione Concorrente
## Concorrenza
La concorrenza di un programma e' l'interleaving di istruzioni atomiche.
In questo corso l'ipotesi generale e' che **l'operazione (statement) di assegnazione e' atomico**.
## Atomicita'
Differenti architetture supportano differenti **granularita'** di atomicita'.
La granularita' e' la piu' piccola istruzione atomica eseguibile dall'architettura.
* Monoprocessore -> istruzione macchina
* Multiprocessore (memoria **comune**) -> accesso alla memoria comune (microistruzioni LOAD/STORE)
-> Per valutare la **correttezza** di un programma concorrente e' necessario conoscere alcuni dettagli architetturali.
## Correttezza di un programma concorrente
La correttezza di un programma concorrente e' l'assenza di problematiche legate alla concorrenza/accesso alle risorse.
Pertanto, un programma concorrente e' corretto se non produce **deadlock, starvation, race conditions, etc**.
### Proprieta'
Gli statements di Lamport definiscono le due proprieta' di correttezza di un programma concorrente:
* **Safety**: la proprieta P deve **sempre essere vera**, in ogni istante della computazione.
* **Liveness**: la proprieta P **prima o poi deve essere vera**, in un determinato istante della computazione.
Legata alla proprieta' di liveness c'e' la Proprieta di **Fairness**:
Una computazione che per ogni suo stato ha uno *statement abilitato* che prima o poi sara' eseguito. Questo vuol dire che ogni statement viene eseguito (e quindi non ci sono statement che subiscono starvation). Richiede conoscenze hardware (Arbitro di Memoria, architettura processore, scheduler per single core, etc)
## Linguaggi Concorrenti
Deve implementare *moduli sequenziali asincroni interagenti*. (vedi slides, banale)
## Macchina Concorrente
Macchina virtuale o astratta, spesso basata su una macchina fisica molto piu' semplice.
* il Kernel e' la parte SW che si identifica come supporto run time, fornendo multiprogrammazione e sincronizzazione di moduli.
Due configurazioni di memoria:
* Comune, unica per le unita' di elaborazione
* Modello a Rete, elaboratori collegati da una sottorete di comunicazione, non condividono memoria.
Nota: modello a rete non implica piu' processori, puo' essere costruito su qualunque architettura. Un monoprocessore puo' effettivamente costituire un modello a reti nel caso la memoria sia separata per ogni processo.
(vedi slides per tabella di architettura)