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.