Concorrenza e Transazione
La concorrenza è una caratteristica dei sistemi di elaborazione nei quali può verificarsi che un
insieme di processi o sottoprocessi (thread) computazionali sia in esecuzione nello stesso istante.
Tale sistema viene appunto chiamato sistema a concorrenza o sistema concorrente. L'esecuzione
parallela può condurre a interazione tra processi quando viene coinvolta una risorsa condivisa.
Una transazione è una sequenza di operazioni, che può concludersi con un successo o un
insuccesso; in caso di successo, il risultato delle operazioni deve essere permanente o persistente,
mentre in caso di insuccesso si deve tornare allo stato precedente all'inizio della transazione.
Perché le transazioni operino in modo corretto sui dati è necessario che i meccanismi che le
implementano soddisfino queste quattro proprietà:
•
atomicità: la transazione è indivisibile nella sua esecuzione e la sua esecuzione deve
essere o totale o nulla, non sono ammesse esecuzioni parziali;
•
coerenza: quando inizia una transazione il database si trova in uno stato coerente e quando
la transazione termina il database deve essere in un altro stato coerente, ovvero non deve
violare eventuali vincoli di integrità, quindi non devono verificarsi contraddizioni
(inconsistenza) tra i dati archiviati nel DB;
•
isolamento: ogni transazione deve essere eseguita in modo isolato e indipendente dalle
altre transazioni, l'eventuale fallimento di una transazione non deve interferire con le altre
transazioni in esecuzione;
•
durabilità: detta anche persistenza, si riferisce al fatto che una volta che una transazione
abbia richiesto un commit work, i cambiamenti apportati non dovranno essere più persi.
Per evitare che nel lasso di tempo fra il momento in cui la base di dati si impegna a
scrivere le modifiche e quello in cui li scrive effettivamente si verifichino perdite di dati
dovuti a malfunzionamenti, vengono tenuti dei registri di log dove sono annotate tutte le
operazioni sul DB.
Il deadlock (o stallo) è una situazione in cui due o più processi o azioni si bloccano a vicenda,
aspettando che uno esegua una certa azione (es. rilasciare il controllo su una risorsa come un file,
una porta input/output ecc.) che serve all'altro e viceversa.
Per starvation (termine inglese che tradotto letteralmente significa inedia) si intende l'impossibilità
perpetua, da parte di un processo pronto all'esecuzione, di ottenere le risorse sia hardware che
software di cui necessita per essere eseguito.
Un utilizzo tipico delle transazioni è il seguente:
•
Prima di eseguire una transazione, si esegue un'istruzione di "inizio transazione".
•
Si eseguono le operazioni di interrogazione e modifica dei dati.
•
Se si riscontra qualche anomalia, si esegue un'istruzione detta di abort, per abortire la
transazione che produce un meccanismo di "rollback".
•
Se si sono eseguite tutte le operazioni senza riscontrare anomalie, si esegue un'istruzione
detta di "commit", per confermare la transazione.
La tolleranza ai guasti (o fault-tolerance, dall'inglese) è la capacità di un sistema di non subire
avarie (cioè interruzioni di servizio) anche in presenza di guasti. La tolleranza ai guasti è uno degli
aspetti che costituiscono l'affidabilità. È importante notare che la tolleranza ai guasti non garantisce
l'immunità da tutti i guasti, ma solo che i guasti per cui è stata progettata una protezione non
causino fallimenti.
In telecomunicazioni e informatica il checksum (tradotto letteralmente significa somma di
controllo) è una sequenza di bit che, associata al pacchetto trasmesso, viene utilizzata per verificare
l'integrità di un dato o di un messaggio che può subire alterazioni durante la trasmissione su canale
di comunicazione.
Il termine inglese downtime (traducibile in «tempo di fermo») , denota lo stato di un sistema che
non è operativo oppure l'intervallo di tempo in cui un sistema è in tale stato, che può essere dovuto
ad un guasto, a manutenzione o altre cause.