Fault Tolerance: tolleranza ai guasti per un sistema informatico

Fault Tolerance: tolleranza ai guasti per un sistema informatico

Fault Tolerance - tolleranza ai guasti per un sistema informatico

Come si è compreso dall’articolo dal titolo Ottenere la Dependability per un sistema informatico e da quello relativo alla tecnica di prevenzione dei guasti (Fault Prevention), si capisce bene come quest’ultima tecnica, dell’ingegneria del software, sia volta a risolvere, in realtà, quegli errori deterministici e replicabili definiti come guasti solidi e che possono essere rimossi tramite rigorose fasi di testing e debugging. Tuttavia, l’utilizzo della sola tecnica di prevenzione non può assicurare che il software sia totalmente privo di guasti, soprattuto nel caso di sistemi di elevata complessità. Bisogna, quindi, considerare possibile che una qualche parte del software possa contenere guasti nascosti che potrebbero attivarsi nella fase operativa dello stesso. Per questo motivo i progettisti devono valutare l’impatto che potrebbe avere l’eventuale verificarsi di un guasto in una specifica parte del programma e in un momento successivo al rilascio del prodotto, adottando quindi le precauzioni appropriate. I guasti di cui stiamo parlando, che non vengono corretti nelle fasi di testing e debugging e che rimangono nel software al momento del rilascio, sono quegli errori che possono essere definiti come guasti sfuggenti, chiamati così appunto perché eludono i controlli della tecnica di prevenzione dei guasti.

L’attività di sviluppo del software è poi spesso condizionata, oltre che dalle problematiche di progettazione del sistema più volte menzionate, anche da vincoli economici e di mercato che obbligano a ridurre i tempi di sviluppo e produzione, costringendo i progettisti e gli sviluppatori a tempistiche che non permettono il corretto svolgimento di fasi importanti quali testing e verifica. Ciò aumenta ulteriormente la difficoltà di garantire l’assenza di difetti nel software.

Per questo motivo, oltre all’implementazione di tecniche per la prevenzione dei guasti, è necessario adottare un disegno (design) per l’applicazione in grado di gestire l’eventuale verificarsi di un errore in un momento successivo al suo rilascio. Tale design è fornito dalle tecniche di tolleranza ai guasti, le quali rimangono l’unica possibilità per poter produrre software affidabili. Le tecniche di tolleranza ai guasti sono volte a rilevare i guasti (ed eventualmente ad eliminarli) mantenendo il sistema in uno stato funzionante, evitando che lo stesso degeneri in fallimenti che comprometterebbero la corretta fornitura del servizio. La tolleranza ai guasti deve essere implementata nelle fasi di progettazione del sistema, onde evitare di accorgersi dell’inadeguatezza del software solo successivamente alla sua realizzazione, momento nel quale diventa difficile, se non impossibile, attuare modifiche al fine di migliorare l’affidabilità del sistema.

Quanto detto è fondamentale soprattutto in presenza di sistemi software che presentano specifiche di affidabilità di alto livello. Esistono, infatti, tecniche di tolleranza ai guasti realizzate appositamente per il livello hardware, altre realizzate per il livello software. e altre ancora che coinvolgo entrambi i livelli.

A livello hardware possiamo accennare alcune possibili implementazioni:

  • Ridondanza di alimentazione: l’adozione di sistemi di alimentazione supplementare è utile nel caso in cui venga a mancare l’alimentazione, magari in seguito ad un guasto dell’alimentatore principale oppure ad una mancanza di tensione. Grazie a questa tecnica il sistema è in grado di continuare a funzionare senza interruzione di servizio.
  • Sistemi hardware multiprocessore: la progettazione di sistemi hardware di questo tipo, definiti SMP (multiprocessore simmetrico), permette di utilizzare contemporaneamente i diversi processori sfruttando la potenza del calcolo distribuito ed evitando il blocco del sistema qualora uno dei processori dovesse guastarsi.
  • Ridondanza dell’informazione: questa tecnica è alla base del sistema RAID (Redundant Array of Independent Disks) e combina un insieme di supporti per il salvataggio dati al fine di distribuire e replicare le informazioni; il sistema è così dotato di maggiore robustezza, di una più sicura integrità dei dati, e di un aumento di prestazioni.

A livello software invece, per comprendere l’importanza delle tecniche di tolleranza ai guasti, bisogna tener conto della pratica comune, da qualche decennio a questa parte, di spostare gli aspetti di controllo e gestione del sistema dal livello hardware al livello software. Per questo motivo, affinché i sistemi possano fornire il proprio servizio nel rispetto delle specifiche, è necessario sia adottare tecniche di tolleranza ai guasti a livello hardware sia anche, e soprattutto, implementare tecniche di affidabilità a livello software. L’utilizzo di queste tecniche permette di rilevare e gestire gli errori mantenendo l’esecuzione del sistema coerente alle specifiche dello stesso.

Tolleranza ai guasti e sistemi di nuova generazione

I sistemi software di prossima generazione sono sistemi dall’architettura hardware e software sempre più complessa e per questo motivo necessitano di tecniche per il controllo della correttezza dell’esecuzione. Pertanto la tolleranza ai guasti è diventata una componente imprescindibile per lo sviluppo di questi sistemi. Un esempio sono i sistemi embedded che sono progettati per eseguire una determinata funzione e sono spesso basati su una struttura hardware apposita e non riprogrammabile dall’utente finale. Gran parte di questi sistemi è progettata al fine di eseguire un numero definito di operazioni, nel rispetto di determinati vincoli di prestazione minimi. L’hardware stesso è progettato al fine di minimizzare le componenti necessarie e massimizzare le prestazioni ottenibili. Ciò che fa sì che il sistema embedded richieda un determinato livello di affidabilità è il fatto che questi sistemi siano il più delle volte progettati per rimanere costantemente attivi per un periodo di tempo relativamente lungo e senza l’intervento umano. Per questo motivo vengono dotati di determinati meccanismi di tolleranza ai guasti che gli permettano di essere autosufficienti e di recuperare uno stato di operatività qualora si verificasse un errore interno.

Tolleranza ai guasti e affidabilità di un sistema software

Più in generale si può evidenziare l’importanza dell’affidabilità di un sistema software prendendo in considerazione i sistemi cosiddetti real-time, quei sistemi, cioè, che richiedono che l’esecuzione del calcolo avvenga in un tempo definito affinché l’operazione possa considerarsi corretta. La necessità di ottenere i risultati dei calcoli entro un tempo limite è data dal fatto che questi sistemi hanno bisogno di eseguire determinate operazioni a velocità predefinite. Un altro requisito dei sistemi real-time è la continuità operativa, intesa come capacità di fornire il servizio per lunghi periodi senza alcuna interruzione. Per fare un esempio di sistemi complessi in grado di reagire ad un evento in real-time si pensi al sistema di controllo di volo di un aereo o al sistema di controllo di una centrale nucleare. Le tecniche di tolleranza ai guasti sono difatti utilizzate nei settori aerospaziale, energia nucleare, sanità, telecomunicazioni e industria dei trasporti di terra, e tanti altri.

Cogliere la necessità dell’introduzione di queste tecniche significa prima di tutto comprendere la natura stessa del problema che si intende risolvere. Ciò che queste tecniche mirano a correggere sono errori il più delle volte derivanti da un’errata fase di progettazione del software, che ha fatto sì che un errore umano divenisse un guasto interno del software. Questi errori umani sono estremamente comuni per il semplice motivo che, come già detto, negli ultimi tempi si tende a concentrare la complessità di un sistema hardware-software nella sola parte software. É stato stimato che il 60-90% degli errori che si verificano in un sistema provengono dal livello software.

Definiamo quindi la tolleranza ai guasti o fault tolerance di un prodotto software come la capacità dello stesso di rilevare e porre rimedio ad un errore che è avvenuto o che sta accadendo, minimizzandone le conseguenze; la tolleranza ai guasti serve ad evitare che un guasto in un componente o sotto-sistema porti ad un malfunzionamento dell’intero sistema.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *