Dependability — I mezzi per la garanzia di funzionamento Monica Bianchini Dipartimento di Ingegneria dell’Informazione Università degli Studi di Siena Dipendenza fra i mezzi per la dependability — 1 …guasto errore fallimento … Nonostante la prevenzione del guasto, per mezzo di metodologie di progetto e regole di costruzione, i guasti si verificano Per garantire la dependability, i guasti devono essere eliminati. Anche le tecniche di eliminazione dei guasti sono imperfette, così come sono imperfetti i componenti commerciali, hardware e software, del sistema, e pertanto è importante la previsione del guasto. La nostra crescente dipendenza dai sistemi di elaborazione porta al requisito della tolleranza al guasto, che a sua volta si basa su regole di costruzione; pertanto nuovamente eliminazione del guasto, previsione del guasto, etc. Si noti che il processo è anche più ricorsivo: gli attuali sistemi di elaborazione sono così complessi che il loro progetto richiede strumenti computerizzati. Anche questi strumenti devono essere a funzionamento garantito, etc. Dipendenza fra i mezzi per la dependability — 2 L’eliminazione del guasto è strettamente associata con la prevenzione del guasto, a formare le tecniche per evitare i guasti (fault avoidance ). Considerare l’eliminazione del guasto e la previsione del guasto come costituenti la validazione, permette la comprensione della nozione di copertura e del problema della ricorsione: la validazione della validazione, ovvero come raggiungere la confidenza nei metodi e negli strumenti usati per avere confidenza nel sistema. La copertura è una misura della rappresentatività delle situazioni a cui è sottoposto il sistema durante la validazione, in confronto alle reali condizioni operative. Il concetto di copertura imperfetta rafforza la relazione fra eliminazione del guasto e previsione del guasto, perché la necessità di prevedere guasti deriva dalla copertura imperfetta dell’eliminazione del guasto. Tolleranza al guasto — 1 La tolleranza al guasto (fault tolerance ) è ottenuta per mezzo del trattamento dell’errore e del trattamento del guasto. Il trattamento dell’errore ha lo scopo di rimuovere gli errori dallo stato della computazione, preferibilmente prima del verificarsi di un fallimento. Il trattamento dell’errore può essere eseguito per… – Recupero dell’errore, con cui uno stato esente da errore viene sostituito allo stato erroneo; la sostituzione può avvenire con: • Recupero indietro, in cui la trasformazione dello stato erroneo consiste nel riportare il sistema in uno stato precedente al verificarsi dell’errore occorre determinare un punto di recupero; • Recupero in avanti, in cui la trasformazione dello stato erroneo consiste nell’evolvere in un nuovo stato dal quale il sistema possa operare, eventualmente in modo degradato. – Compensazione dell’errore, in cui lo stato erroneo contiene sufficiente informazione (ridondanza) per permettere la fornitura di un servizio esente da errore a partire dallo stato (interno) erroneo. Tolleranza al guasto — 2 Quando si usa il recupero dall’errore, occorre che lo stato erroneo venga identificato prima di essere trasformato: questo è lo scopo del rilevamento dell’errore, da cui il termine comunemente utilizzato di rilevamento dell’errore e recupero. Componenti con incorporati meccanismi di rilevamento dell’errore sono componenti autocontrollati. Quando si esegue una compensazione dell’errore in un sistema realizzato con componenti che si autocontrollano suddivisi in classi che eseguono gli stessi compiti (aree di confinamento dell’errore ), la trasformazione di stato è una commutazione da un componente fallito ad uno operativo approccio alla tolleranza al guasto noto come rilevamento dell’errore e compensazione. La compensazione può essere applicata sistematicamente, anche in assenza di errori, ottenendo il mascheramento del guasto, ad esempio nella votazione a maggioranza. Tolleranza al guasto — 3 Le tecniche di recupero dall’errore indietro e in avanti non sono mutuamente esclusive: può essere prima tentato un recupero indietro; se l’errore persiste, può essere tentato il recupero in avanti. Nel recupero in avanti, è necessario valutare il danno, causato dall’errore rilevato, o dagli errori propagati prima del rilevamento. Il tempo aggiuntivo necessario per il trattamento dell’errore dipende fortemente dal metodo adottato: – Nel recupero dell’errore all’indietro, per esempio, è relativo alla determinazione dei punti di recupero; – Nella compensazione dell’errore, il tempo aggiuntivo è lo stesso, o quasi, sia in caso di presenza che di assenza di errore. Tolleranza al guasto — 4 La durata della compensazione dell’errore è molto più breve della durata del recupero dell’errore, a causa della maggiore quantità di ridondanza strutturale. Questa osservazione… – …condiziona la scelta della strategia di trattamento dell’errore; – …ha introdotto una relazione fra il tempo aggiuntivo e la ridondanza strutturale; un sistema ridondante ha sempre un comportamento ridondante, caratterizzato da un tempo aggiuntivo di operazione; • Il tempo aggiuntivo può essere tanto breve da non essere percepibile dall’utente (che ha granularità temporale meno fine); • Con una certa approssimazione, maggiore è la ridondanza strutturale minore è il tempo aggiuntivo necessario. Tolleranza al guasto — 5 Il trattamento del guasto ha lo scopo di prevenire l’attivazione di guasti ulteriori. Il primo passo nel trattamento del guasto è la diagnosi del guasto che consiste nel determinare le cause degli errori, sia in termini di locazione che di natura. Seguono poi le azioni tese a prevenire che il guasto sia nuovamente attivato, tendendo a renderlo passivo: disattivazione del guasto. Ciò è ottenuto… – …rimuovendo i componenti identificati come guasti da ulteriori esecuzioni. Se il sistema non è più capace di fornire lo stesso servizio di prima, allora può aver luogo una riconfigurazione. Tolleranza al guasto — 6 Se si valuta che il trattamento dell’errore può rimuovere direttamente il guasto, o se la probabilità che si ripresenti è ragionevolmente bassa, la disattivazione del guasto può non essere eseguita. Finché il guasto non viene disattivato, viene considerato come guasto debole (soft ); eseguire la disattivazione del guasto implica considerarlo forte o solido (hard/solid ). Un guasto è debole quando la diagnosi del guasto non ha successo. Le nozioni di guasto debole/forte possono apparire sinonimi delle nozioni di guasto temporaneo/permanente: – La tolleranza ai guasti temporanei non necessita del trattamento del guasto, poiché il recupero dell’errore dovrebbe rimuovere direttamente gli effetti del guasto, purché un guasto permanente non sia stato creato nel processo di propagazione. Tolleranza al guasto — 7 Nel trattare sistemi tolleranti al guasto, si incontrano frequentemente situazioni che coinvolgono guasti e/o fallimenti multipli. Considerando le loro cause si possono distinguere: – Guasti indipendenti, che sono attribuiti a cause differenti; – Guasti correlati, che sono attribuiti ad una causa comune; i guasti correlati causano in fallimenti a modo comune. La relazione temporale fra fallimenti multipli porta a distinguere: – Fallimenti simultanei, che si verificano entro una certa finestra temporale predefinita; – Fallimenti sequenziali, che non si verificano entro la stessa finestra temporale. Tolleranza al guasto — 8 In un sistema tollerante al guasto, che è stato progettato per tollerare un guasto singolo alla volta, è necessario recuperare dagli effetti di un guasto prima che il sistema possa tollerare il guasto successivo. La finestra temporale che separa i guasti simultanei da quelli sequenziali è l’intervallo di tempo necessario per il trattamento dell’errore e possibilmente il trattamento del guasto, durante il quale il sistema è vulnerabile. Un aspetto importante della coordinazione delle attività di componenti multipli consiste nell’evitare che la propagazione degli errori influenzi le operazioni di componenti non falliti. Tolleranza al guasto — 9 Evitare effetti collaterali su componenti non falliti è particolarmente importante quando un dato componente deve comunicare qualche informazione, che lui solo possiede, ad altri componenti: i componenti operativi devono raggiungere un accordo sul come usare l’informazione ottenuta in modo mutuamente consistente. Attenzione specifica a questo problema è stata dedicata nel campo dei sistemi distribuiti. Sistemi tolleranti al guasto, geograficamente localizzati, possono usare soluzioni al problema dell’accordo che sarebbero giudicate troppo costose in un sistema distribuito classico, composto da componenti che comunicano tramite messaggi. Tolleranza al guasto — 10 La conoscenza di alcune proprietà del sistema può limitare la quantità di ridondanza necessaria — tolleranza al guasto a basso costo. Esempi di queste proprietà sono le regolarità di natura strutturale: – Codici rilevatori e correttori di errore; – Strutture dati robuste; – Multiprocessori e reti di calcolatori. I guasti tollerati sono dipendenti dalle proprietà che si tengono in conto, in quanto esse intervengono direttamente nelle ipotesi di guasto. È importante la segnalazione del fallimento di un componente ai suoi utenti gestione dell’eccezione. – Presente in alcuni linguaggi, costituisce un modo per implementare il recupero in avanti dell’errore di un componente software. Tolleranza al guasto — 11 La tolleranza al guasto è un concetto ricorsivo: è essenziale che i meccanismi tendenti ad implementare la tolleranza al guasto siano protetti nei confronti dei guasti che li possono influenzare. Esempi: – Replicazione dei votatori; – Controllori che si autocontrallano; – Memoria “stabile” per il recupero di dati e programmi. La tolleranza al guasto non è limitata ai guasti accidentali. La protezione contro le intrusioni coinvolge tradizionalmente la crittografia. Esistono meccanismi di rilevazione di errore orientati sia ai guasti intenzionali, che accidentali (ad es., tecniche di protezione sugli accessi in memoria) e sono stati proposti schemi per la tolleranza sia alle intrusioni che ai guasti fisici, che alla logica maliziosa. Crittografia Negli attuali sistemi informativi distribuiti, e più in generale nel settore delle telecomunicazioni, la crittografia ha assunto un rilievo ed un interesse crescenti nelle infrastrutture di sicurezza. La ragione è evidente: un numero considerevole di messaggi viaggia sui canali più disparati, dalla posta al telefono, alle comunicazioni via etere, al telex, fino alle linee di trasmissione dati. Altrettanto enorme è l’nformazione immagazzinata nelle memorie di massa dei calcolatori e nelle banche dati. Se da un lato il progresso tecnologico agevola la manipolazione (e l'intercettazione) dei dati, dall'altro facilita anche l'applicazione della crittografia per proteggere l'informazione stessa. Crittografia: Terminologia — 1 In un sistema crittografico, il testo in chiaro viene trasformato, secondo regole, nel testo in cifra o crittogramma; tale operazione si chiama cifratura. Il testo cifrato viene quindi trasmesso al destinatario attraverso un opportuno canale di comunicazione. Il canale non sarà completamente affidabile: lungo il percorso può trovarsi una spia che può intercettare il crittogramma e tentare di decifrarlo. Il destinatario legittimo decifra il crittogramma e riottiene il testo in chiaro: se il sistema di cifra, o cifrario, è ben congegnato, l'operazione di decifrazione o decifratura deve risultare semplice al destinatario legittimo, ma di complessità proibitiva alla spia possibile in quanto gli interlocutori legittimi possiedono un'informazione che deve rimanere inaccessibile alla spia, la chiave del cifrario. Crittografia: Terminologia — 2 Il modello delineato è schematizzato in figura: Cifratura (C), decifrazione (D1) e decrittazione (D2) Occorre notare la distinzione tra decifrazione e decrittazione: quest'ultima è l'operazione illegittima in cui non ci si può avvalere della chiave. Crittografia: Terminologia — 3 Il problema della distribuzione delle chiavi è un punto di importanza cruciale in qualsiasi cifrario: si dice che la chiave è comunicata al destinatario tramite un corriere. Per rendere nota la chiave segreta ci si può affidare ad un canale speciale assolutamente fidato, ma se così è, esso potrebbe essere usato per trasmettere il crittogramma o il messaggio in chiaro. In realtà, l'uso di un canale speciale è costoso inoltre esso potrebbe essere disponibile solo per brevi intervalli di tempo e/o in determinati momenti. I metodi di costruzione di un cifrario non possono essere disgiunti dallo studio degli eventuali metodi per demolirlo, ovvero non ci si può occupare di crittografia (la parte costruttiva) senza occuparsi di crittanalisi (la parte distruttiva): insieme esse costituiscono una disciplina unitaria detta crittologia. Nell'uso corrente si usa "crittografia" là dove si dovrebbe dire "crittologia". Crittografia: Algoritmi — 1 Alcuni sistemi crittografici si affidano esclusivamente alla segretezza degli algoritmi utilizzati solo di interesse storico, inadeguati per le applicazioni reali. Tutti i moderni algoritmi utilizzano una chiave per controllare sia cifratura che decifratura; un messaggio può cioè essere letto solo se la chiave di decifrazione corrisponde in qualche modo a quella di cifratura. Esistono due classi di algoritmi: – simmetrici (o a chiave segreta): utilizzano la stessa chiave per cifrare e decifrare (o la chiave di decifrazione è facilmente ottenibile a partire da quella di cifratura); – asimmetrici (o a chiave pubblica): utilizzano due chiavi diverse e la chiave di decifrazione non può essere ricavata a partire dalle informazioni contenute nella chiave di cifratura. Crittografia: Algoritmi — 2 Gli algoritmi simmetrici possono essere suddivisi in cifrari di flusso e cifrari di blocco. I cifrari di flusso possono crittare un singolo bit del messaggio in chiaro alla volta, mentre i cifrari di blocco trasformano l'informazione a blocchi di bit (tipicamente 64 bit ). I cifrari asimmetrici permettono che la chiave di cifratura sia resa pubblica, consentendo a chiunque di cifrare messaggi con tale chiave, mentre solo il legittimo destinatario (colui che conosce la chiave di decifrazione) può decifrare il messaggio. La chiave di cifratura è anche detta chiave pubblica e la chiave di decifrazione chiave privata o chiave segreta. In generale gli algoritmi simmetrici sono più rapidi di quelli asimmetrici; in pratica vengono utilizzati insieme. Crittografia: Algoritmi — 3 Il funzionamento di molti dei meccanismi di sicurezza per le transazioni in rete (commercio elettronico e applicazioni affini) infatti utilizzano un algoritmo a chiave pubblica per crittare una chiave di cifratura generata casualmente (detta chiave di sessione); quest'ultima è utilizzata per cifrare il vero messaggio usando un algoritmo simmetrico. Questa soluzione offre buone garanzie di prestazioni e di sicurezza, visto che normalmente gli algoritmi simmetrici sono più rapidi e che la chiave di cifratura viene cambiata ad ogni sessione. Esempio di trasmissione sicura Esempio: l’algoritmo RSA L'algoritmo RSA (così detto dai nomi degli ideatori R. Rivest, A. Shamir, e L. Adleman) è un algoritmo a chiave pubblica e basa i meccanismi di cifratura e di generazione delle chiavi sulla aritmetica modulare. In particolare, l‘algoritmo RSA sfrutta l'elevamento a potenza in modulo per cifrare e decifrare messaggi costituiti dall'equivalente numerico di un qualsiasi messaggio testuale. 1. 2. 3. 4. 5. Vengono scelti due numeri primi R, S molto grandi; Viene calcolato N=RS e la funzione di Eulero J(N) = (R-1)(S-1) dopo di che i due primi R, S vengono eliminati; Si sceglie un intero P<J(N) e primo con esso; Viene calcolato l'intero K così da avere PK = 1 mod J(N); Vengono resi pubblici i valori P, N che costituiscono la chiave pubblica e mantenuto segreto K che, utilizzato con N rappresenta la chiave privata. Eliminazione del guasto — 1 L’eliminazione del guasto è composta da tre fasi: verifica, diagnosi e correzione. La verifica è il processo di controllo di aderenza del sistema alle proprietà, dette condizioni di verifica. Se il sistema non rispetta le condizioni di verifica occorre quindi diagnosticare i guasti che ne hanno impedito il rispetto ed eseguire le correzioni necessarie. Dopo la correzione, il processo deve riprendere per poter controllare che l’eliminazione del guasto non abbia conseguenze indesiderate: verifica di non regressione. Le condizioni di verifica possono essere… – …condizioni generali, che si applicano ad una data classe di sistemi e sono relativamente indipendenti dalla specifica (ad es., assenza di deadlock, conformità alle regole di progetto e di realizzazione); – …condizioni particolari per il sistema considerato, dedotte direttamente dalle sue specifiche. Eliminazione del guasto — 2 Le tecniche di verifica possono essere classificate a seconda che esse comportino o no la messa in esercizio del sistema. La verifica di un sistema senza effettiva esecuzione è statica, e può essere effettuata: – Sul sistema stesso, nella forma di • Analisi statica (analisi del flusso di dati, analisi di complessità, controlli a tempo di compilazione); • Prova di correttezza; – Su un modello di comportamento del sistema (ad es., reti di Petri, automi a stati finiti), per ottenere un’analisi di comportamento. Eliminazione del guasto — 3 Verificare un sistema tramite la sua messa in esercizio, costituisce la verifica dinamica; gli ingressi forniti al sistema possono essere sia simbolici, nel caso di esecuzione simbolica, che con valori, come nel caso del test di verifica. Il test esaustivo di un sistema rispetto a tutti i suoi possibili ingressi è, in genere, troppo costoso. Le configurazioni di test devono essere opportunamente selezionate, utilizzando criteri… – …per la scelta degli ingressi di test, – …per la generazione degli ingressi di test. Eliminazione del guasto — 4 I criteri per la scelta degli ingressi di test possono essere considerati in base a: – Lo scopo del test: il controllo se il sistema soddisfa le sue specifiche funzionali prende il nome di test di conformità, mentre il test teso al rilevamento dei guasti si chiama test di individuazione; – Il modello del sistema: a seconda se i criteri sono relativi alla funzione o alla struttura del sistema, essi portano rispettivamente al test funzionale e al test strutturale; – L’esistenza di un modello di guasto: viene condotto il test basato sul guasto, teso a rilevare particolari classi di guasti (guasti nella produzione dell’hardware, guasti fisici che influenzano il set di istruzioni di un microprocessore, guasti di progetto nel software, etc.). La possibilità di definire un modello di guasto è strettamente correlata allo stadio del processo di sviluppo: più avanzato è lo stadio, più alta è la possibilità di definire un modello di guasto. Eliminazione del guasto — 5 La generazione degli ingressi deterministica o probabilistica: di test può essere – Nel test deterministico, le configurazioni di test sono predeterminate da una scelta selettiva secondo i criteri adottati; – Nel test casuale o statistico, le configurazioni di test sono scelte in accordo con una distribuzione di probabilità definita rispetto al dominio degli ingressi. Osservare le uscite del test e decidere se soddisfano o no le condizioni di verifica è noto come problema dell’oracolo. Le condizioni di verifica si possono applicare all’intero insieme delle uscite o ad una funzione compatta che le rappresenti. Eliminazione del guasto — 6 Poiché la verifica deve essere eseguita durante l’intero sviluppo del sistema, le tecniche precedenti si applicano naturalmente alle varie forme assunte dal sistema durante il suo sviluppo: prototipo, componente, etc. Verificare che il sistema non possa fare di più di ciò per cui è specificato è particolarmente importante rispetto ai guasti intenzionali. Progettare un sistema in modo da facilitare la sua verifica è ciò che si definisce progetto per la verificabilità. L’eliminazione del guasto durante la fase operativa della vita di un sistema è la manutenzione correttiva, tesa a preservare o migliorare la capacità del sistema a fornire un servizio in accordo con la specifica. Eliminazione del guasto — 7 La manutenzione correttiva può assumere due forme: – Manutenzione curativa, tesa a rimuovere guasti che abbiano prodotto uno o più errori e che siano stati registrati; – Manutenzione preventiva, tesa a rimuovere guasti prima che producano errori; i guasti possono essere… • Guasti fisici, che si siano verificati dalle ultime azioni di manutenzione preventiva, • Guasti di progetto, che abbiano portato ad errori in altri sistemi similari. Queste definizioni si applicano sia a sistemi non tolleranti il guasto che a sistemi tolleranti il guasto, che possono essere manutenibili in linea (senza interrompere la fornitura del servizio) o fuori linea. La frontiera fra manutenzione correttiva e trattamento del guasto è relativamente arbitraria; la manutenzione curativa può essere considerata come un mezzo estremo per ottenere tolleranza al guasto. Previsione del guasto — 1 La previsione del guasto si effettua eseguendo una valutazione del comportamento del sistema rispetto all’occorrenza o all’attivazione del guasto. La vita di un sistema è percepita dal suo utente come un’alternanza fra due stati del servizio fornito, rispetto alla specifica: – Servizio corretto, quando il servizio fornito è in accordo con la specifica; – Servizio non corretto, quando il servizio fornito non è in accordo con la specifica. Corretto può essere il servizio fornito dal sistema: difficilmente esistono sistemi non guasti, semplicemente possono non avere ancora fallito. Un fallimento è una transizione da un servizio corretto ad un servizio non corretto, e la transizione da un servizio non corretto ad uno corretto è un ripristino. Previsione del guasto — 2 Quantificare l’alternanza fra servizio fornito corretto e non corretto permette di definire l’affidabilità e la disponibilità come misure della dependability: – Affidabilità: una misura della fornitura continua di servizio corretto o, analogamente, del tempo al fallimento; – Disponibilità: una misura della fornitura di servizio corretto rispetto all’alternanza fra servizio corretto e non corretto. Una terza misura, la manutenibilità, viene di solito considerata, ed è definita come una misura del tempo al ripristino dall’ultimo fallimento o, analogamente, della fornitura continua di servizio non corretto. Lo stato del servizio corretto e lo stato del servizio conseguente a fallimenti benigni costituiscono lo stato di funzionamento sicuro (esente da danni catastrofici, non dal pericolo). Previsione del guasto — 3 La sicurezza (di funzionamento, safety ) è una misura della sicurezza di funzionamento continuo o, analogamente, del tempo al fallimento catastrofico può considerarsi come l’affidabilità rispetto ai fallimenti catastrofici. Una estensione diretta della disponibilità, non fornirebbe una misura significativa: quando un fallimento catastrofico si è verificato, le conseguenze sono talmente importanti che il ripristino del servizio non è di primaria importanza, perché… – …è secondario rispetto alla riparazione delle conseguenze catastrofiche; – …il lungo periodo prima di permettere la ripresa delle operazioni condurrebbe a valori numerici insignificanti. Previsione del guasto — 4 Una misura “ibrida” affidabilità–disponibilità può comunque essere definita: una misura della fornitura del servizio corretto rispetto all’alternanza del servizio corretto e del servizio non corretto dopo fallimenti benigni. Fornisce una quantificazione della disponibilità del sistema prima del verificarsi di un fallimento catastrofico, e permette di quantificare il compromesso affidabilità/ disponibilità e sicurezza di funzionamento. Nel caso di sistemi ad operazioni multiple, possono essere distinti diversi modi di fornitura del servizio, dalla piena operatività alla completa inoperatività: misure di dependability per tali sistemi sono misure di prestazione/ affidabilità congiunte (performability ). Previsione del guasto — 5 Gli approcci principali alla previsione del guasto sono di natura probabilistica, tesi cioè a derivare stime quantitative della dependability, e sono il modellamento ed il test (di valutazione). I due approcci sono complementari, poiché il modellamento necessita di dati relativi ai processi base modellati (processo di fallimento, processo di manutenzione, processo di attivazione del sistema, etc.), che possono essere ottenuti per mezzo del test. Nel caso del modellamento, si distinguono: – Affidabilità stabile: la capacità del sistema di fornire servizio corretto è preservata (identità stocastica dei tempi al fallimento successivi); – Crescita di affidabilità: la capacità del sistema di fornire servizio corretto è aumentata (incremento stocastico dei tempi al fallimento successivi). Previsione del guasto — 6 ESEMPI – Affidabilità stabile: ad un dato ripristino il sistema è identico a quello precedente il ripristino. Corrisponde alle seguenti situazioni: • Nel caso di un fallimento hardware, il componente fallito viene sostituito da un componente operativo identico; • Nel caso di fallimento software, il sistema viene riavviato con una configurazione di ingresso differente da quella che ha portato al fallimento. – Crescita di affidabilità: il guasto la cui attivazione ha portato al fallimento è diagnosticato come guasto di progetto (dell’hardware o del software) ed è rimosso. Previsione del guasto — 7 La valutazione della dependability dei sistemi affidabilità stabile è composta da due fasi principali: in – Costruzione del modello del sistema a partire dai processi stocastici elementari che modellano il comportamento dei componenti del sistema e le loro interazioni; – Elaborazione del modello per poter ottenere le espressioni ed i valori delle misure di dependability del sistema. La dependability di un sistema è fortemente dipendente dal suo ambiente, nel senso più ampio del termine, o, più specificamente, dal suo carico. Quando si valutano sistemi dependable, la copertura dei meccanismi di trattamento dell’errore e del guasto ha una influenza molto significativa; la valutazione può essere effettuata o tramite modellamento o tramite test, chiamato allora iniezione del guasto. Gli attributi della dependability — 1 Gli attributi della dependability sono stati definiti in accordo a proprietà differenti, che assumono diversi significati in dipendenza della particolare applicazione del sistema di elaborazione: – La disponibilità è sempre richiesta, sebbene ad un livello che dipende dall’applicazione; – L’affidabilità, la sicurezza e la protezione possono o no essere richieste a seconda dell’applicazione. Una proprietà addizionale, che è un prerequisito per l’ottenimento delle altre proprietà, è l’integrità, cioè la condizione del sistema di non essere deteriorato, sia per dati che programmi, rispetto a guasti accidentali o intenzionali. Gli attributi della dependability — 2 Le variazioni sull’enfasi da porre sugli attributi della dependability hanno influenza diretta sul giusto bilanciamento delle tecniche da usare perché il sistema risultante sia dependable. Questo è un problema difficile: alcuni degli attributi sono antitetici (ad es., disponibilità e sicurezza, disponibilità e protezione), necessitando di compromessi per essere attuati. La manutenibilità, inoltre, può essere considerata come un ulteriore attributo della dependability, relativo alla facilità con cui possono essere eseguite le azioni di manutenzione. Gli attributi della dependability — 3 La definizione di protezione — prevenzione dagli accessi non autorizzati e/o gestione non autorizzata della informazione — la caratterizza come la combinazione di… – confidenzialità (prevenzione dalla divulgazione non autorizzata di informazione), – integrità (prevenzione da cancellazione o variazione non autorizzata di informazione), – disponibilità (prevenzione dalla allocazione non autorizzata di informazione). Si noti che: – Un accesso o gestione di informazione non autorizzato può derivare sia da guasto accidentale che intenzionale e alcuni meccanismi per proteggere contro gli accessi non autorizzati sono comuni ad entrambi i tipi di guasto; – Rispetto ai guasti intenzionali, la nozione di autorizzazione deve essere intesa in senso lato: una persona autorizzata che abusa della propria autorità, viola, eseguendo azioni illegittime, l’autorizzazione che le era stata concessa. Gli attributi della dependability — 4 L’attendibilità (trustability ) è la capacità dei sistemi fault– tolerant (dovuta alla presenza di procedure di rilevamento dell’errore) di fornire agli utenti informazione di correttezza sul servizio fornito. La valutazione della dependability va oltre le tecniche di validazione descritte, per almeno tre motivi (limitazioni): – Controllare con certezza la copertura del progetto o le ipotesi di validazione rispetto alla realtà, implicherebbe una conoscenza ed un dominio della tecnologia usata, dell’uso effettivo del sistema, etc., che vanno ben oltre ciò che è normalmente ottenibile. – Eseguire la valutazione di un sistema secondo alcuni attributi di dependability rispetto a qualche classe di guasto è attualmente considerato non possibile o non significativo: le basi teoriche probabilistiche non esistono/non sono largamente accettate; – Le specifiche “contro” le quali viene eseguita la validazione non sono esenti da guasti (come qualsiasi altro sistema). Gli attributi della dependability — 5 Fra le conseguenze di questo stato di cose, si citano… – L’enfasi posta sul processo di sviluppo e di produzione quando si valuti un sistema: metodi e tecniche utilizzati e modalità di utilizzo; in alcuni casi viene assegnato un voto al sistema secondo… • …la natura dei metodi e delle tecniche usati, • …una valutazione della loro utilizzazione. – La presenza, in aggiunta ai requisiti probabilistici in termini di misura di dependability, del numero di guasti che devono essere tollerati; tale specifica non sarebbe necessaria se le limitazioni menzionate potessero essere superate. ESEMPI: – Per la sicurezza in avionica: i sistemi sono classificati da A1 (“progetto verificato”) a D (“protezione minima”); i software per aerei per trasporto civile sono classificati come Livello 1, 2 o 3 in base alla criticità delle funzioni che devono essere espletate (critiche, essenziali, o non essenziali). – Per le applicazioni aerospaziali: viene specificato il numero max di guasti tollerati, sotto la forma di requisiti di “fallimento operativo” o “fallimento non pericoloso”. Modelli per valutare l’affidabilità di un sistema: Guasti indipendenti — 1 Nel caso in cui i guasti dei componenti di un sistema sono indipendenti, possono essere usati modelli combinatori. Tecniche di calcolo Questi modelli associano ad ogni componente i del sistema una funzione del tempo Ri (t). Lo scopo è quello di derivare la funzione Rsistema (t) che denota la distribuzione di affidabilità del sistema in funzione del tempo. I modelli possono essere applicati sotto le seguenti condizioni: I fallimenti dei moduli sono indipendenti; Una volta che il modulo è fallito, si assume che produca sempre risultati scorretti; Il sistema è considerato guasto se non soddisfa le condizioni di funzionamento di un numero minimo di moduli; Se il sistema è fallito, successivi fallimenti non riportano mai il sistema in uno stato corretto. I modelli combinatori più usati serie/parallelo e sistemi k–of–n. sono per sistemi Modelli per valutare l’affidabilità di un sistema: Guasti indipendenti — 2 Modelli per descrivere sistemi R1(t) Rn-1(t) Rn(t) Modello con componenti in serie Il sistema con componenti in serie funziona correttamente solo se tutti i componenti operano correttamente. Se Ri (t) è l’affidabilità di ogni singolo componente i, Rserie (t) = i = 1,n Ri (t) dove indica il prodotto. Inoltre la distribuzione di fallimento F, per un sistema in serie, è: Fserie (t) = 1-Rserie (t) = 1-i = 1,n Ri (t) = 1-i = 1,n [1-Fi (t)] Modelli per valutare l’affidabilità di un sistema: Guasti indipendenti — 3 Il sistema con componenti in parallelo funziona correttamente se almeno uno dei componenti funziona correttamente. La distribuzione di fallimento è: Fparallelo (t) = i = 1,n Fi (t) L’affidabilità del sistema è: R1(t) R2(t) Rn-1(t) Rn(t) Modello con componenti in parallelo Rparallelo (t) = 1-Fparallelo (t) = 1-i = 1,n Fi (t) = 1-i = 1,n [1-Ri (t)] Modelli per valutare l’affidabilità di un sistema: Guasti indipendenti — 4 I modelli chiamati k–of–n servono per descrivere situazioni in cui il sistema è guasto se k degli n componenti si guastano, e dove i componenti sono indipendenti ed hanno la stessa distribuzione di fallimento. La figura: a b t1 t2 c d mostra una connessione di componenti sia in serie che in parallelo. Modelli per valutare l’affidabilità di un sistema: Guasti indipendenti — 5 Supponiamo che la configurazione funzioni correttamente se almeno uno fra i componenti a e c e b e d, rispettivamente in parallelo, funziona correttamente si ha una relazione 1–of–2, sia per il primo che per il secondo gruppo di componenti. Supponiamo tutti i componenti identici, indipendenti e con la stessa Ri (t). L’espressione per la distribuzione di fallimento è: Fsys = i = k,n ( n k ) F (1-F ) k i i n-k Modelli per valutare l’affidabilità di un sistema: Guasti indipendenti — 6 Supponiamo di avere componenti indipendenti, ma diversi fra loro, ad esempio p processori e m memorie condivise. Se il sistema funziona correttamente, nel caso in cui almeno una memoria ed un processore sono funzionanti si ha: Fsys = 1-Fm Fp = 1-(1-i = 1,p Ri (t)) (1-j = 1,m Rj (t)) dove Fm è la distribuzione di fallimento delle memorie e Fp è la distribuzione di fallimento dei processori. Nell’esempio precedente, se a e c sono processori e b e d sono memorie: 2 2 2 2 2 2 Fsys = 1-(1-Rp ) (1-Rm ) = Rp + Rm – Rp Rm Modelli per valutare l’affidabilità di un sistema: Guasti correlati — 1 Nel caso in cui esiste una relazione fra l’occorrenza dei guasti nei singoli componenti, occorre usare modelli basati sulle catene di Markov (Markov chains ). Tecniche di calcolo Una catena di Markov è un processo stocastico in cui il futuro dipende solo dal presente e non dal passato. Definizione Un processo stocastico X={ Xn: n } è una catena di Markov, se P { Xn+1=j | X0,…,Xn}= P { Xn+1=j | Xn}, j,n. Modelli per valutare l’affidabilità di un sistema: Guasti correlati — 2 Modelli Marcoviani Ogni stato della catena è una coppia (i,j ), dove i indica il numero di memorie funzionanti e j indica il numero di processori funzionanti. Nello stato (3,2), tutti i componenti sono funzionanti, mentre nello stato (2,2) una delle tre memorie si è guastata. La catena ha 10 stati. La condizione di funzionamento del sistema è che esista almeno una memoria ed un processore funzionante. Questo è modellato nella catena di Markov tramite gli stati (0,1), (0,2), (1,0), (2,0) e (3,0) che sono stati assorbenti, cioè corrispondenti a fallimento. Reliability Block Diagram mem proc mem proc mem Catene di Markov per il sistema con memorie condivise 32 22 12 02 31 21 11 01 30 20 10 La dependability Sempre di più, individui ed organizzazioni stanno sviluppando o acquistando sofisticati sistemi di elaborazione, sui cui servizi devono riporre assoluta fiducia, per… – – – – …servire distributori automatici di denaro, …calcolare orbite di satelliti, …controllare un aereo o un impianto nucleare, …mantenere la confidenzialità di una base di dati riservata. In circostanze differenti, l’attenzione viene posta su proprietà diverse dei servizi forniti: il tempo medio di risposta, la probabilità di produrre i risultati richiesti, la capacità di evitare fallimenti catastrofici per l’ambiente del sistema, la capacità di prevenire intrusioni. La nozione di dependability fornisce un mezzo molto conveniente per circoscrivere le varie richieste in un quadro concettuale unico, includendo, quali casi particolari, proprietà come l’affidabilità, la disponibilità, la sicurezza e la protezione.