You are on page 1of 95

Appunti di Impianti Informatici Pagina 1 di 95

Università degli Studi di Brescia

Facoltà di Ingegneria

Corso di laurea in Ingegneria dell'Informazione

Appunti
del corso di

Impianti Informatici

A cura di: Stefano Bennati

Docente del corso: Prof. Pietro Baroni

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 2 di 95

Disclaimer:

ATTENZIONE!
Questo documento è stato scritto da uno studente, utilizzando come fonte gli appunti
presi a lezione.
L'autore sconsiglia di basare il proprio studio unicamente su questo testo, esso è da
intendersi come una base su cui prendere i propri appunti durante le lezioni.
Questo documento non è stato visionato nè approvato da alcun professore, usatelo a
vostro rischio e pericolo! L'autore non si prende alcuna responsabilità riguardo al
risultato dei vostri esami!

Licenza:
Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-Non
commerciale-Condividi allo stesso modo 2.5 Italia. Per leggere una copia della
licenza visita il sito web http://creativecommons.org/licenses/by-nc-sa/2.5/it/ o
spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San
Francisco, California, 94105, USA.

Il copyright delle illustrazioni contenute nel testo è da attribuirsi ai loro autori.

Contatti:
Se sentite il bisogno di contattare l'autore per comunicargli suggerimenti, critiche
costruttive, la presenza di errori di qualsiasi tipo presenti nel testo, oppure se volete
ringraziarlo per il lavoro svolto;
potete mandare una e-mail all'indirizzo: stbenna@hotmail.it
Questo documento è rilasciato sotto licenza Creative Commons; quindi, se desiderate,
potete modificarlo nei limiti concessi dalla licenza. In caso apportiate modifiche al
testo e vogliate pubblicarlo, siete pregati di comunicarlo all'autore all'indirizzo
riportato sopra.
Se invece sentite il bisogno di contattare l'autore per comunicargli insulti, denunce,
ricatti, minacce o simili; potete mandare una e-mail all'indirizzo fake@nomail.nil

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 3 di 95

Indice
Molteplicità (distribuzione) 5
Architettura di un impianto informatico 6
Communication abstraction 6
Terminologia 7
Stratagemmi per ridurre il tempo di comunicazione 7
Tipi di atti comunicativi 8
Artifactual Communication 8
Tipi di elaborazioni eseguite dagli impianti informatici 9
Organizzazione delle architetture parallele 9
Tassonomia di Flynn 9
Architetture Multi-Processore a Memoria Condivisa 10
UMA (Uniform Memory Access) 10
Split-Transaction Bus 15
Shared Cache 16
Gestione software dei sistemi multiprocessore 17
Sincronizzazione 18
Scheduling 18
Multiprogrammazione scalabile (+ di 60 CPU) 19
Tipologie di messaggio 19
Deadlock 19
NUMA (Not Uniform Memory Access) 20
Directory Memory Based 21
Directory Cache Based 25
COMA (Cache Only Memory Access) 27
Caratteristiche di Workload 28
High Performance I/O Interconnect 32
Tipologie 32
Routing 35
Esempi di architetture reali 35
I/O Ad alte prestazioni 37
RAID (Redundant Array of Inexpensive Disks) 38
Architetture di storage 41
Canali di I/O (Peer to Peer) 42
Availability 44
Cluster 45
Load Balancing 46
Failover Failback 48
Architettura NOW (Net Of Workstation): Organizzazione SW 50
Paradigma client/server 50
Stratificazione delle applicazioni client/server 50
Middleware 52
Tipi di middleware 54
Remote Procedure Call 54
Object Request Brocker 57
Problematiche di progetto client/server 58
Tecniche di base per sistemi distribuiti 59

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 4 di 95

Mutua esclusione 60
Deadlock distribuiti 62
Distributed snapshot 63
Messaggi “falsificati” (o dei generali bizantini) 67
Replicazione 67
Name Service 69
DNS (Domain Name System) 69
NetBios 71
Esecuzione Remota 71
Grid Computing 75
File System Remoti 75
FTP (File Transfer Protocol) 76
NFS 76
SMB Server Message Block (Samba-CIFS) 79
Protocolli di supporto all'amministrazione 80
DHCP (Dynamic Host Configration Protocol) 80
SNMP (Simple Network Management Protocol) 83
Protocolli per la gestione di utenti e informazioni di amministrazione e configurazione 84
NIS/YP (Network Information Service/Yellow Pages) 84
Directory Service 84
LDAP (Lightweight Directory Access Protocol) 84
Posta Elettronica 85
HTTP 86
Programmazione Web 86
WEB SERVICE 87
SICUREZZA 97
HASH FUNCTION 99
AUTENTICAZIONE 101
IPSEC 105
Security Socket Layer (SSL) / Transport Layer Security (TLS) 107
Secure Shell (SSH) 109
Pretty Good Privacy (PGP) 109
Firewall 111
Architetture di Firewall 112
Metodi di attacco 113

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 5 di 95

Molteplicità (distribuzione)

In genere un impianto informatico possiede dei componenti interni che sono ripetuti; la molteplicità
in un impianto informatico può essere di due tipi:
intrinseca, cioè necessaria al funzionamento dell'impianto (ad esempio risorse che risiedono in
luoghi differenti),
oppure preferita (n è meglio di 1); la molteplicità dei componenti di un impianto fornisce diversi
vantaggi:
– più potenza/prestazione.
– maggiore fault tollerance (affidabilità).
– più specializzazione dei componenti.
– più progressività /scalabilità (cluster).
I principale svantaggi della molteplicità sono il maggiore costo di realizzazione/manutenzione, e
l'aumento della complessità dovuta a:
– sincronizzazione.
– amministrazione.
– configurazione.
– gestione e sfruttamento: è difficile ottenere doppia velocità con un doppio processore o
doppio disco.
– overhead (sovraccarico di comunicazione): per comunicare si utilizza una parte della
potenza di elaborazione (creazione/lettura degli header, cifratura).
– consistenza delle copie.
– interdipendenza: se un componente si guasta, tutti i componenti che richiedono i suoi servizi
durante il loro normale funzionamento potrebbero bloccarsi.
– bottleneck: alcuni componenti possono rallentare il sistema.

Definizione di impianto informatico


Se c'è molteplicità c'è necessità di cooperazione e comunicazione fra i componenti e di condivisione
di risorse e di carico di lavoro, quindi necessità di protocolli e meccanismi per la sincronizzazione;
un impianto informatico ideale condivide fra i componenti il carico di lavoro.
DEF: A collection of processing elements that communicate and cooperate to:
– solve a (large) set of (large) problems fast
– offer a (large) set of services to a (large) set of users fast

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 6 di 95

Architettura di comunicazione Architettura di elaborazione


Utente Utente
Primitive di comunicazione Primitive di elaborazione
Mezzo di comunicazione Hardware

Le primitive di elaborazione sono un insieme di istruzioni invocabili:


invoco l'istruzione aspetto il risultato termino
regole del linguaggio
Primitive di comunicazione:
invio un messaggio aspetto una risposta chiudo la comunicazione
regole del protocollo di comunicazione
Le primitive di elaborazione e comunicazione sono molto simili, posso vedere una primitiva di
elaborazione come un messaggio che il programma manda al processore, cioè una primitiva di
comunicazione (ad esempio le istruzioni load/store possono essere viste come comunicazione fra
CPU e memoria); sotto questo punto di vista i metodi di comunicazione a messaggi o a memoria
condivisa sono la stessa cosa.

Architettura di un impianto informatico


Ciascun elemento elaborativo di un impianto informatico è costituito da due parti: l'Unità
Funzionale (UF) che è il dispositivo che esegue i calcoli veri e propri, di solito è composta da
CPU, memoria e dispositivi di I/O; e il Communication Assist (CA) che è la parte che interfaccia
ciascun elemento col resto dell'impianto, l'interconnessione fra i vari nodi può avvenire tramite bus,
switch o multistage (router).
Di solito il tempo di trasmissione è molto più lungo del tempo che è stato necessario ad elaborare i
dati trasferiti, a causa della lentezza del mezzo trasmissivo e dell'overhead introdotto dal protocollo
di comunicazione; di conseguenza si vede il tempo di elaborazione come tempo utile ed il tempo di
trasmissione come tempo sprecato.

Communication abstraction
La communication abstraction permette la portabilità di una soluzione tra architetture diverse
perché rende uniformi le comunicazioni grazie all'astrazione.
La communication abstraction comprende un insieme di atti comunicativi, cioè primitive di
comunicazione che sottostanno a dei vincoli; ogni atto comunicativo ha una denominazione
(mittente, destinatario, contenuto) e specifica come passare dal nome all'oggetto vero e proprio che
è riferito a quell'atto.
La communication abstraction fornisce anche delle garanzie, come la garanzia di sequenzialità
temporale su atti eseguiti dall'oggetto richiedente o da altri oggetti (ad esempio consegna ordinata
dei pacchetti TCP).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 7 di 95

Terminologia
Latency: Il tempo trascorso fra l'inizio e la fine di una singola operazione, la latenza è dovuta a
fenomeni fisici ed è quindi sempre presente.
Cost: tempo fra l'inizio e la fine di un insieme di operazioni. Cost= # operazioni/ Bandwidth
Bandwidth: Numero di operazioni svolte nell'unità di tempo
1 # s t a g e
B a n d w i d t h il valore minimo si ottiene in caso di istruzioni
Latency Latency
strettamente sequenziali, il valore massimo in caso di operazioni eseguite in parallelo (pipeline).
Costo totale di comunicazione: Numero atti comunicativi * tempo di comunicazione.
Tempo di comunicazione: Si compone di:
– Overhead, che viene generato dal communication assist e non è eliminabile. L'overhead si
divide in Fisso, ad esempio gli header del protocollo di comunicazione), e Variabile cioè che
dipende dal tipo della comunicazione, ad esempio la copia dei dati ricevuti in un buffer.
– Tempo di accesso al mezzo: genera altro overhead che può essere anche qui Fisso, come ad
esempio il tempo di setup della connessione, e Variabile, come ad esempio il ritardo dovuto alla
saturazione del mezzo trasmissivo (Bandwidth) e tempo di attesa dovuto alla contesa del mezzo
trasmissivo causato da traffico elevato (Contention).
– Tempo in rete: In questo caso l'overhead è dovuto al ritardo di comunicazione (Delay) che non
è eliminabile e idealmente è fisso, e alla quantità di dati trasmessi, quindi variabile, secondo la
formula: Overhead variabile= Numero di bit /Capacità di canale .

Stratagemmi per ridurre il tempo di comunicazione


Per ridurre il tempo di comunicazione si può pensare di ridurre la dimensione degli header, tuttavia
le informazioni che questi contengono sono fondamentali per la comunicazione quindi è necessario
aumentare la complessità degli strati software superiori per garantire una corretta trasmissione.
Un altro stratagemma è quello di ridurre o eliminare i buffer; si può applicare solo se la velocità di
trasmissione è esattamente la stessa e non subisce variazioni per entrambi i soggetti della
comunicazione, altrimenti si rischia di perdere dei dati e di dover ricominciare il trasferimento.
Un ulteriore accorgimento è quello di ridurre al massimo l'overhead trasferendo meno pacchetti
possibili, ad esempio creando un unico file che contiene tutti i file da trasferire, cosicché gli header
passino da N ad 1; questo sistema porta degli svantaggi come un elevato ritardo nelle
comunicazioni che penalizza i trasferimenti piccoli.
Overlap: Ottimizzando il protocollo di trasmissione, per trarre maggior vantaggio possibile dalle
comunicazioni parallele, si può generare overlap.
Per overlap si intende del tempo di trasmissione eliminato grazie a delle ottimizzazioni;
un'ottimizzazione possibile è quella di svincolare le Unità Funzionali dai rispettivi Communication
Assist, e quindi rendere possibile all'U.F. di eseguire dell'altro codice mentre sta aspettando la
risposta di una comunicazione; un altro modo per ottimizzare la comunicazione può essere quello di
eliminare le azioni duplicate, come per esempio mantenere una cache che tiene in memoria gli
ultimi trasferimenti e che risponde immediatamente in caso sia richiesta una trasmissione che è già
stata effettuata; chiedere in anticipo rispetto alla reale necessità dei dati in momenti di basso carico
del mezzo trasmissivo (precomunicazione); oppure servire contemporaneamente più azioni

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 8 di 95

comunicative che richiedono la stessa elaborazione (multiprogrammazione).


In caso di comunicazioni con Send bloccante l'overlap è sempre nullo.
Tenendo conto dell'overlap si può riscrivere la formula del costo totale di comunicazione in questo
modo:
Costo totale di comunicazione=Numero atti comunicativi∗tempo di comunicazione−overlap
L'overlap è sempre minore del tempo di comunicazione perché la fase di setup della connessione, in
cui l'UF predispone i dati per la trasmissione, non può essere ridotta o eliminata. Al contrario si può
ottenere overlap dalla fase di attesa dei risultati e delle risposte, grazie alle tecniche di
precomunicazione e multiprogrammazione.

Tipi di atti comunicativi


Esistono due tipi di atti comunicativi:
– Communication: Copio il dato e lo invio, il dato inviato non mantiene legami con l'originale;
c'è indipendenza fra il dato inviato e quello ricevuto.
– Replication: Il dato che viene inviato è una copia di quello iniziale e mantengono dei legami tra
loro: se modifico il dato originale si modificherà anche la copia (sincronizzazione); di solito un
dato viene replicato in più luoghi per aumentare prestazioni e fault tollerance (ad esempio le
cache); è richiesto l'allineamento delle repliche che però non può essere istantaneo, quindi sono
necessari dei meccanismi di controllo.

Artifactual Communication
Sono le comunicazione che si sarebbero potute evitare se si fosse organizzata meglio la
trasmissione; possono essere dovute a:
– Poor allocation of data: ad esempio eseguire un programma in remoto.
– Unnecessary data in a transfer: dati che avrebbero potuto non essere trasferiti.
– Unnecessary data in a transfer due to system granularities: dati che sono stati trasferiti,
anche se non necessari, a causa di come è strutturato il sistema; ad esempio trasferire un byte da
un dispositivo a blocchi non è possibile, è necessario trasferire l'intero blocco che lo contiene.
– False sharing: è causato dai precedenti due casi, quando si verifica i dati sono bloccati a causa
di un trasferimento che però non li interessa, ad esempio per trasferire due byte da disco
appartenenti allo stesso blocco sono necessari due trasferimenti.
– Redundant repeated communication: un dato viene modificato più volte in breve tempo senza
essere mai letto, sarebbe sufficiente modificarlo solo l'ultima volta.
– Finite replication capacity: il fenomeno del thrashing, dovuto anche all'associatività delle
cache.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 9 di 95

Tipi di elaborazioni eseguite dagli impianti informatici


– Supercalcolo: risolvere problemi di enorme complessità, ad esempio il genoma umano.
– Transaction Processing: piccoli problemi in numero elevatissimo:
– Batch: eseguire la stessa elaborazione su numerosi dati, ad esempio compilare le bollette.
– Online interattivi: ad esempio lo sportello online di una banca.

Organizzazione delle architetture parallele


Livelli di parallelismo
– Bit level parallelism: aumentare il numero di bit elaborati dalle CPU, ad esempio il passaggio da
CPU a 32bit verso CPU a 64bit.
– Instruction level parallelism: aumentare il numero di istruzioni eseguite in contemporanea dalla
CPU, ad esempio la pipeline.
– Thread level parallelism: aumentare il numero di thread eseguiti contemporaneamente dalla
CPU, ad esempio le architetture multicore.

Tassonomia di Flynn
Le architetture parallele sono organizzate in base al livello di parallelismo di dati ed istruzioni

– SISD (Single Instruction Single Data): Sono le architetture non parallele, cioè tutte le
architetture che rispecchiano la macchina di Von Neumann.
– SIMD (Single Instruction Multiple data): Sono architetture nelle quali una singola istruzione
è applicata contemporaneamente su più dati. Vengono utilizzate nell'elaborazione vettoriale (es.
GPU) e sono realizzate come CPU che contengono una sola CU e molte ALU, oppure come
normali CPU che contengono registri pensati per l'elaborazione vettoriale.
– MISD (Multiple Instruction Single Data): Questa tipologia non è mai stata realizzata.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 10 di 95

– MIMD (Multiple Instruction Multiple Data): Sono le architetture con il più elevato grado di
parallelismo nelle quali più istruzioni vengono eseguite in contemporanea su più dati, tra queste
ci sono le architetture con Thread Level Parallelism.
Le architetture MIMD si suddividono in due sottocategorie:
– Architetture Multiprocessore: Sono composte da un unico computer che ha diversi
processori ed una memoria condivisa alla quale ogni CPU può accedere.
– Architetture Multicomputer: sono composte da numerosi computer a processore singolo o
multiplo collegati fra loro, ciascuno con la sua memoria.

Architetture Multi-Processore a Memoria Condivisa

UMA (Uniform Memory Access)

Nell'approccio UMA ogni CPU impiega un tempo costante per accedere a ciascuna porzione della
memoria.
Spesso le CPU e la memoria sono collegate fra loro attraverso un bus condiviso che fa da collo di
bottiglia per le prestazioni dell'intero sistema, è quindi necessario implementare un sistema di cache
per garantire che le prestazioni siano costanti; sorge quindi il problema della consistenza delle
cache.
Con l'introduzione delle cache è necessario che i dati contenuti in memoria siano sempre coerenti
con i dati contenuti in tutte le cache.
Nei sistemi non paralleli si sono sviluppati due metodi che permettono la coerenza fra cache e
memoria:
– Write Through: come un dato viene modificato nella cache viene subito scritto in memoria.
– Write Back: Un dato modificato viene copiato in memoria solo quando sta per essere
cancellato dalla cache, questo evita che ci siano trasferimenti inutili e quindi spreco di risorse.
Nelle architetture parallele a memoria condivisa entrambi i metodi non garantiscono la coerenza
delle cache, infatti anche utilizzando il write through se due processori modificano lo stesso dato in
modo diverso contemporaneamente, in memoria finirà uno dei due valori (quello scritto per ultimo),
mentre nelle cache saranno presenti due valori diversi.
Per garantire la coerenza delle cache è necessario utilizzare il metodo Write Through affiancato
con la Snooping Cache.
Una cache che ha la capacità di snoop è in grado di controllare il bus e accorgersi di eventuali
modifiche che vengono compiute da altri processori su dei dati che sono contenuti al suo interno, e
quindi in grado di aggiornarli (se utilizza la tecnica del write update) o renderli invalidi (se utilizza
la tecnica del write invalidate) senza procedere all'aggiornamento immediato.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 11 di 95

Questo meccanismo può essere realizzato da un semplice automa a stati finiti.

Questo automa funziona correttamente anche nel caso due processori tentino di modificare lo stesso
dato contemporaneamente, infatti le modifiche non vengono eseguite contemporaneamente perché i
due processori si contendono il bus di sistema, quindi entrambi sono in grado di accorgersi della
modifica effettuata dall'altro.
Per ottimizzare le risorse, diminuendo i trasferimenti inutili da cache a memoria, si può utilizzare la
tecnica del write back al posto della tecnica di write through; in questo caso però l'automa si
complica e prende il nome di MESI (Modified Exclusive Shared Invalid) dal nome degli stati di
cui è composto.
Per ogni CPU viene implementato il seguente automa, i cui stati hanno il seguente significato:
– Modified: il dato è stato modificato nella cache locale e si trova solo lì, cioè non ci sono delle
copie non aggiornate in cache remote.
– Exclusive: il dato è presente in memoria e solo nella cache locale, non è stato modificato.
– Shared: il dato è in più di una cache ed è valido.
– Invalid: il dato è presente nella cache locale ed è invalido.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 12 di 95

Split-Transaction Bus
In un sistema multiprocessore il bus di comunicazione tra le CPU e la memoria è un collo di
bottiglia e penalizza la velocità dell'intero sistema; per migliorare le performance si è sviluppato lo
Split-Transaction Bus, il cui obiettivo è di ridurre i tempi di inutilizzo del bus e quindi
massimizzarne lo sfruttamento.
In un sistema a bus standard, durante una comunicazione fra una CPU e la memoria, il bus viene
riservato per la comunicazione e le altre periferiche si mettono in attesa che la trasmissione finisca e
che il bus torni libero; questo porta ad un tempo di inutilizzo del bus pari al tempo necessario alla
memoria per identificare la cella di memoria, eseguire l'operazione richiesta e produrre una risposta.
Per eliminare questo spreco di tempo, che rispetto alla velocità delle CPU è significativo, lo Split-
Transaction Bus divide la comunicazione in due parti: l'invio della richiesta e la ricezione della
risposta.
Una volta che il mittente ha finito di inviare la richiesta, il bus viene rilasciato e una nuova
comunicazione può iniziare o terminare; una volta che il destinatario è pronto all'invio della risposta
si mette in attesa che il bus gli sia riassegnato per completare la comunicazione.
Una comunicazione che non è conclusa perché il mittente è in attesa della risposta viene chiamata
Outstanding Request.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 13 di 95

Le scelte progettuali che possono essere effettuate sviluppando uno Split-Transaction Bus sono:
– Numero di stage (parti in cui suddividere la trasmissione) e il loro ordine.
– Algoritmi di arbitraggio.
– Numero massimo di Outstanding Request.
– Numero massimo di Outstanding Request generate da uno stesso processore.
– Come identificare a quale richiesta corrisponde la risposta.
– Ordine di arrivo delle risposte (ordinate o casuali).
– Buffering.
– Ottimizzazione delle Conflicting Requests e gestione (NACK o Retry).

Shared Cache
Alcuni sistemi multiprocessore implementano una cache condivisa, che porta i seguenti vantaggi:
– Nessun problema di coerenza.
– Sinergia ci comunicazione (i thread dello stesso programma comunicano molto velocemente).
– Possibilità di prefetching (se un thread carica un dato, esso diventa disponibile a tutti gli altri).
– Maggiore sfruttamento della cache.
– Dimensione della cache condivisa minore della somma della dimensione delle cache dedicate,
quindi costo minore.
Ci sono però anche degli svantaggi:
– Maggiore larghezza di banda necessaria.
– Cache condivisa più grande e quindi più lenta delle cache dedicate.
– Presenza di false sharing fra gruppi a causa dell'organizzazione della cache (aumento di
dimensioni ed associatività).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 14 di 95

Un esempio di sistema a cache condivisa è la tecnologia Hyper Threading.


Un processore dotato di HT è a tutti gli effetti un singolo processore fisico, nel quale sono duplicati
gli elementi fondamentali della CPU, in modo da rendere possibile vederlo ad alto livello come due
processori logici; tutte le parti condivisibili sono singole e condivise da entrambe le CPU logiche,
cache compresa.
Nei moderni processori, anche in quelli Multi-Core, è spesso presente per ogni CPU una cache
dedicata, affiancata ad una cache più ampia e di livello superiore che è condivisa.

Gestione software dei sistemi multiprocessore


Per utilizzare un sistema multiprocessore è necessario non solo il supporto dell'HW ma anche quello
del SW, ed in particolare del Sistema Operativo.
Il Sistema Operativo può organizzare il lavoro dei processori in modi diversi:
– Master/Slave: una CPU detta master è l'unica in grado di eseguire il Sistema Operativo, e
coordina il lavoro delle altre CPU; poca fault tollerance.
– Separate Executives: Ogni CPU esegue una copia distinta del S.O. ed ha una sua Ready
Queue, si generano problemi nel bilanciamento del carico dei processori.
– SMP: Esiste una sola Ready Queue ed un solo S.O., che può essere eseguito su qualsiasi CPU, i
processori non possono eseguire il S.O. in contemporanea e ci sono problemi nella gestione
degli interrupt.
Esistono due soluzioni per garantire che il S.O. sia eseguito da un solo processore per volta:
Utilizzare un semaforo per il S.O., simile al master/slave ed ottengo basse prestazioni. Oppure una
soluzione più raffinata è quella di utilizzare tanti semafori in modo da poter eseguire vari pezzi del
S.O., che non accedono alle stesse strutture dati, in contemporanea.
Per evitare problemi di gestione degli interrupt nei sistemi multiprocessore è presente un HW
apposito per la gestione degli interrupt: l'APIC (Advanced Programmable Interrupt Controller).
Tutti gli interrupt non arrivano direttamente alle CPU ma passano per l'APIC il quale decide se:
– Redirigere l'interrupt ad un processore prefissato.
– Redirigere l'interrupt ad un processore con priorità di esecuzione minima.
– Mandare l'interrupt in broadcast a tutte le CPU, in questo caso il primo processore che è libero
gestisce l'interrupt e gli altri possono continuare le loro operazioni.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 15 di 95

Sincronizzazione
Quando un processo deve attendere, ad esempio che una risorsa si liberi, utilizza la tecnica del Busy
Waiting / Spinlock. Il busy waiting è meno dannoso che nelle architetture mono-processore, ma
solo se viene effettuato per breve tempo.
Per evitare race condition nel caso due processi tentino di entrare in spinlock simultaneamente si
usano delle istruzioni ad atomicità estesa. Sono una serie di istruzioni che non possono essere
interrotte (atomiche), hanno il difetto di rallentare il sistema perché sorge il problema di garantire la
coerenza delle cache.
– Test & Set con Backoff: dopo aver eseguito un istruzione T&S, se il test fallisce aspetto del
tempo prima di effettuare il prossimo test, per non intasare il bus.
– Test + Test&Set: l'istruzione test è di sola lettura, quindi ammette stato shared e non accede al
bus, in caso il test abbia successo si procede con il T&S.

Scheduling
In un sistema multi-processore lo scheduling è diverso rispetto ad un sistema mono-processore, ad
esempio un loop infinito non rende il sistema inutilizzabile perché blocca un solo processore; le
ottimizzazioni del caso mono-processore sono meno cruciali.
Soluzioni di scheduling
I processi vengono suddivisi fra i processori secondo criteri di:
– Priorità: Un processore è riservato ai processi con priorità maggiore (real time).
– Affinità: Un processo viene assegnato al processore sul quale è stato già eseguito, per
avvantaggiarsi di eventuali dati rimasti in cache dalla precedente esecuzione.
Più thread di uno stesso processo possono venire schedulati assieme, in questo caso si parla di
Gang Scheduling.
Fault Tollerance
Con gli algoritmi di scheduling visti fin'ora la fault tollerance non viene aumentata rispetto ad un
sistema mono-processore, infatti se una CPU si guasta mentre sta eseguendo il S.O. il sistema va in
crash perché vanno persi i dati nella sua cache.
Una possibile soluzione, anche se poco efficiente, e quella di implementare una cache L2 condivisa
fra le CPU e usare una politica di write through fra le cache L1 e la cache L2.
Se un dato critico è nei registri questa soluzione è inutile; per evitare che i dati nei registri vadano
persi si implementa a livello HW un Hard Core, cioè una parte di CPU a bassissima probabilità di
guasto che in caso di fail copia tutti i dati nei registri nella cache L2.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 16 di 95

Multiprogrammazione scalabile (+ di 60 CPU)


Se si vuole progettare un sistema molto scalabile si incontrano diversi problemi:
– Bandwidth fra CPU e memoria: è necessario aumentare il bus in funzione del numero di CPU
per evitare che diventi un collo di bottiglia.
– Latency.
– Costo: il prezzo di una soluzione simile dovrebbe crescere linearmente in funzione del numero
di CPU.
– Fisica: mantenere il consumo di corrente ed il calore generato entro soglie accettabili.
I sistemi a bus non sono sufficientemente scalabili, quindi si passa a sistemi multistage; questi
sistemi però hanno dei difetti:
– Non ci sono collegamenti diretti.
– (quindi) Non ci sono informazioni globali.
– Non c'è serializzazione, cioè non ci si accorge dei conflitti perché l'HW non è su un unico bus.
– È necessario più buffering.
– Serve un algoritmo di routing e non è garantita la consegna ordinata dei pacchetti.
– Servono protocolli con ACK.

Tipologie di messaggio
1. Non blocking send (asincrono): la trasmissione è completa quando il mittente invia al suo
Communication Assist.
2. Blocking Send: la trasmissione è completa quando il mittente invia nel mezzo trasmissivo.
3. Reliable blocking send: la trasmissione è completa quando il messaggio arriva al
Communication Assist del destinatario (serve un meccanismo di ACK).
4. Explicit blocking send (sincrono): la trasmissione è completa quando il messaggio è ricevuto
dall'Unità Funzionale del destinatario.
5. Request/reply (sincrono): il mittente aspetta la risposta del destinatario.

Deadlock
Nei sistemi che comunicano con messaggi il deadlock può presentarsi quando un mittente ed un
destinatario cercano di comunicare fra loro attraverso un canale bufferizzato.
Ipotizziamo per semplicità che sia il buffer del mittente che il buffer del destinatario possano
contenere un solo messaggio; se il mittente invia una richiesta e contemporaneamente il destinatario
invia una risposta si entra in deadlock, perché entrambi aspettano che l'altro buffer si liberi prima di
liberare il proprio. Questa situazione di chiama Fetch Deadlock.
Una soluzione è quella di usare un buffer d'ingresso e uno di uscita, questa soluzione però porta ad
un altro tipo di deadlock: il Buffer Deadlock.
In questo caso può capitare che due nodi A e B debbano inviare ciascuno una risposta all'altro nodo,

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 17 di 95

ma non possono farlo perché i buffer di uscita sono pieni.

Risp per B M(B) M(B) Risp per A

M(A) M(A)

Una soluzione può essere quella di implementare un protocollo Strict Request/Response (è


obbligatorio rispondere ad ogni richiesta) e fornire ciascun nodo di tre buffer: uno d'ingresso e due
di uscita, di cui uno per le risposte ed uno per i messaggi. Questa soluzione è però poco efficiente.

NUMA (Not Uniform Memory Access)


In questa architettura ciascun nodo è composto da una o più CPU con della memoria dedicata, in
pratica ogni nodo può essere visto come un calcolatore a se stante, e ciascun nodo è interconnesso
agli altri tramite delle interfacce di rete.

Con questa soluzione le prestazioni di accesso alla memoria non sono costanti, infatti ciascun
nodo può accedere molto più velocemente alla sua memoria locale rispetto che al resto della
memoria, collocata in nodi diversi e accessibile solo da remoto; inoltre ciascun nodo può avere
caratteristiche e prestazioni diverse dagli altri e quindi tempi di accesso alla memoria locale diversi.
Esistono due tipi di architetture NUMA:
– NC-NUMA (No cache NUMA): In questa tipologia di NUMA ogni CPU può inserire nella sua
cache (sempre presente nonostante il nome faccia pensare il contrario) solo i dati che sono
memorizzati nella sua memoria locale; si ottengono prestazioni molto disuniformi ma il
problema della coerenza è ristretto ad un nodo e alla sua memoria locale. Per aumentare le
prestazioni si cerca di localizzare i dati in memoria in modo che ogni processore abbia i dati che
gli servono nella sua memoria locale (placing dei dati).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 18 di 95

– CC-NUMA (Cache Coherent NUMA): In questo approccio ciascuna CPU ha una directory
che contiene le informazioni che garantiscono la coerenza.

Directory Memory Based


La directory contiene una riga per ogni pezzo (frame) di memoria locale, ciascuna riga è divisa
in “Stato” e “Altri Processori” (che hanno il dato in cache); La voce Altri Processori può essere
organizzata come:
– Bitmap: c'è un bit per ogni processore, è semplice da implementare ma occupa molta memoria.
– Array di indirizzi: N numeri che identificano la CPU; per mantenere bassa l'occupazione di
memoria è necessario che N sia piccolo, ma se N è troppo piccolo può accadere che il dato sia
condiviso da più processori di quanti possono essere scritti nella directory.
Il problema del superamento di capacità nelle directory ad array di indirizzi può essere risolto:
– Invalidando e cancellando una CPU fra quelle scritte ogni volta che una CPU non ha spazio per
essere memorizzata, questa soluzione ha un elevato costo in termini di prestazioni.
– Inviando in broadcast le informazioni riguardanti la coerenza, questa soluzione è inefficiente.
– Estendendo la directory in RAM in modo da rendere N grande a piacere.
– Coarse Vector: interpretando i bit invece che come il numero di CPU, come il numero di un
gruppo di CPU; in questo modo le informazioni di coerenza non vengono inviate ad una singola
CPU ma in broadcast all'intero gruppo.
La Directory Memory Based è sovradimensionata, perché (con l'approccio a bitmap) sarebbe
possibile indicare che tutti i blocchi della memoria sono contenuti contemporaneamente in tutte le
cache; questo è impossibile perché la dimensione totale della memoria è sempre maggiore della
somma delle dimensioni delle cache.
Esempio di directory memory based
Ciascuna riga della directory ha 7 stati, di cui 3 stabili: shared (il dato è condiviso), unowned (un
altro ha il dato e non so se è invalido), exclusive (il dato è invalido per gli altri ma non per se).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 19 di 95

Ci sono poi altri 3 stati transitori (busy) ed uno stato Poison, nel quale si sta fermi aspettando che un
dato sia trasferito da una memoria ad un'altra.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 20 di 95

Directory Cache Based


La directory cache based è divisa in due parti: la prima è in un certo senso una directory memory
based e contiene una riga per ogni blocco di memoria, ciascuna riga contiene informazioni sullo
stato del dato e sul primo processore che ha copiato il dato nella sua cache.
La seconda parte ha una riga per ogni blocco della cache di quel processore e contiene il numero del
prossimo processore che contiene quel blocco nella sua cache.
In questo modo si crea una lista distribuita che identifica tutti i processori, inoltre la directory non
dipende dal numero di CPU ma solo dalla dimensione della cache e della memoria del nodo in cui è
presente; questa soluzione penalizza il sistema relativamente alla velocità, ma non è
sovradimensionata e rende il sistema estremamente scalabile.
Esempio di Directory Cache Based
Lo standard SCI (Scalable Coherent Interface) prevede una lista concatenata doppia in cui il primo
della lista è l'unico che può effettuare modifiche.

È composta da 3 stati parte M: Home, Fresh (che equivale a Shared) e Gone (che equivale ad
Exclusive).
29 stati stabili parte C, questi si dividono in stati di posizione: Only, Head, Mid, Tail,... ; e stato del
dato: Dirty (che equivale a Modified), Clean (cioè modificabile ed Exclusive), Fresh (valido ma non
modificabile senza informare la home), Copy, Invalid,...
Ci sono anche altri stati transitori che non elenchiamo

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 21 di 95

Ibridi
Esistono delle architetture in cui le directory sono organizzate in modo ibrido, ad esempio può
esistere una directory per ogni nodo, formato da n processori con rispettiva memoria

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 22 di 95

COMA (Cache Only Memory Access)


In questa architettura non esiste la memoria principale, ma solamente la memoria cache, questa
scelta serve ad evitare la ridondanza dei dati fra cache e memoria.

Quando un nodo richiede un dato da remoto lo mette in una delle sue cache; quando ha finito di
usarlo lo salva nella sua memoria cache condivisa.
Per colpa di questo meccanismo non si può sapere dove sono memorizzati i dati; per risolvere
questo problema si può aggiungere una memoria che tiene traccia delle posizioni e degli
spostamenti; oppure si può chiedere ad un nodo dopo l'altro se ha il dato richiesto in cache,
seguendo l'ordine indicato in un elenco che contiene la priorità di tutti i nodi.
E inoltre necessario che il sistema tenga conto di quante cache memorizzano ogni dato per evitare
che venga cancellata l'ultima copia del dato rimasta in memoria, prima che sia stata copiata su
disco.
Per questi motivi non esistono esempi concreti di architetture COMA.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 23 di 95

Caratteristiche di Workload
Il maggiore sforzo nello sviluppo di software parallelo si ha nel progettare strumenti di base, come
compilatori e DBMS che traggono vantaggio dalla parallelizzazione; utilizzando questi strumenti
diventa semplice sviluppare software che sfrutta appieno la parallelizzazione.
Tipo Scopo Classi Esempi e
Commenti
Load Balancer, NQS/
Batch Exec, ecc.
Non sono richieste Interattive NCLOGIN, ecc.
Seriale Throughput modifiche nelle Boulder-size
applicazioni granularity: cioè jobs
Multijob parallelo separati in un
uniprocessore
Nessun HW seriale
Grand Challenge potrebbe farlo, quindi
non c'è scelta
Il parallelismo è il
futuro, e gli studenti
Ricerca diplomati sono
economici, intelligenti
e motivati

Il grande sforzo Il costo del SW è


giustificato dall'uso
nella modifica intensivo di una
delle applicazioni singola applicazione o
è giustificato sottosistema
Uso intensivo: importante che
dedicate e/o funziona spesso ed a
ampiamente lungo. Un potenziale e
riutilizzate significante uso
commerciale dei
Turnaround time o cluster.
Parallelo Esempi: seismic
response time
migration e data
mining
Uso automatico del
parallelismo tramite
tecniche SPPS.
Commerciali Sottosistemi
parallelizzati
Poco sforzo nella manualmente: OLTP,
DB(SQL)
modifica delle
applicazioni: Librerie parallelizzate,
framework SPPS
parallelismo speciali (HEP).
mainstream Parallelizzazione
Tecniche automatica; richiede
linguaggio, modifiche
nella programmazione
per uso ottimizzato
del parallelismo

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 24 di 95

Esempio di problema parallelizzabile


Si vuole che ogni valore sia la media dei 4 valori
vicini, ogni valore influenza quelli vicini, quindi
servono molte passate e non è garantita la
terminazione dell'algoritmo.

Due possibili soluzioni:

Soluzione a programma seriale. Soluzione a programma parallelo.


Entrambe le soluzioni però hanno
le stesse performance, a causa
della presenza di un semaforo nel
quale tutti i thread devono
passare in modo sequenziale;
inoltre ogni thread elabora una
singola cella della matrice, e
quindi i calcoli da eseguire sono
troppo ridotti, quindi il tempo di
calcolo risulta trascurabile
rispetto al ritardo di
sincronizzazione e all'overhead.

Utilizzando thread più grossi il tempo di calcolo diventa


rilevante, in questo esempio si riescono a sfruttare quattro
sesti della capacità di calcolo dell'intero sistema.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 25 di 95

In questo esempio ciascun thread calcola


un'intera riga.

Sorge però un problema: siccome più thread


vengono eseguiti in parallelo, il risultato non
è deterministico.
Siccome i calcoli effettuati per ciascuna riga
dipendono dai valori delle righe adiacenti, il
risultato più variare a seconda di come i vari
thread procedono. Per esempio se una volta il
thread Charlie è il più veloce, Baker eseguirà
i calcoli sui valori già modificati da Charlie; la volta successiva invece Charlie rallenta, ad esempio
perché rimane in attesa di poter accedere al bus, e quindi Baker eseguirà gli stessi calcoli di prima,
ma sui valori non ancora modificati da Charlie, portando ad un risultato diverso.
Una soluzione a questo problema può essere quella di
creare due tabelle, una con i valori nuovi, ed una con
i valori vecchi, in modo che ciascun thread utilizzi
solo i valori calcolati alla passata precedente; questo
però porta ad un raddoppio della memoria utilizzata.

Un'altra soluzione è dividere il ciclo in due parti,e far elaborare prima le righe pari e
successivamente quelle dispari, oppure effettuare una divisione a scacchiera; in questo modo
ottengo gli stessi vantaggi di prima senza sprecare memoria.
Questi algoritmi però sono concettualmente diversi dall'algoritmo iniziale, e quindi portano a
risultati diversi perché compiono operazioni diverse.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 26 di 95

L'algoritmo originale elabora per ciascuna cella due valori modificati e due valori non modificati.

Con questa soluzione il principio è lo stesso ma livello di parallelismo è tempovariante; inoltre con
questo algoritmo i dati sono posizionati in modo tale che il principio di località non è rispettato, e
quindi la cache diventa inutile.

Per poter sfruttare la cache posso eseguire l'algoritmo su dei blocchi quadrati della tabella, dentro ai
quali utilizzerò l'algoritmo originale seriale.
I dati sono memorizzati in modo contiguo; quindi per ogni blocco della tabella posso caricare in
cache una sola riga per volta, perché la successiva si troverà in un altro blocco di cache.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 27 di 95

Per sfruttare appieno la


cache posso modificare il
modo in cui i dati sono
salvati in memoria
generando un array
quadridimensionale in
modo che l'ultimo elemento
di una riga di un blocco sia
contiguo al primo elemento
della riga successiva dello
stesso blocco; in questo
modo evito anche il false
sharing.

High Performance I/O Interconnect


Esistono dei parametri in comune fra tutte le tipologie di interconnessione, la cui analisi permette di
dare una valutazione su di esse:
– Numero di link per nodo.
– Diametro: distanza massima fra 2 nodi (la distanza da coprire nel caso peggiore).
– Diametro medio.
– Dimensionality: quanti percorsi alternativi ci sono fra due nodi.
– Bisection Bandwidth: numero di link che collegano due parti simmetriche della tipologia (solo
per tipologie regolari simmetriche).

Tipologie
Lineare bidirezionale
I nodi sono connessi fra di loro in serie.
– Numero di nodi: N
– Diametro: N-1
– Diametro medio: 2/3 N
– Dimensionality: 1
– Bisection Bandwidth: 1*2 (un link bidirezionale)

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 28 di 95

Ring unidirezionale
È come la tipologia lineare, ma il primo e l'ultimo nodo sono collegati fra loro.
– Numero di nodi: N
– Diametro: N-1
– Diametro medio: N/2
– Dimensionality: 1
– Bisection Bandwidth: 1

Ring bidirezionale
– Numero di nodi: N
– Diametro: N/2
– Diametro medio: N/3
– Dimensionality: 2
– Bisection Bandwidth: 2*4

Griglia Toro D-dimensionale con N nodi


È una griglia con lato di N nodi, dove ciascuna riga e colonna è un ring.
– Numero di nodi: N^D
– Diametro: D*(N-1) D=2
– Diametro medio: D* 2/3 N N=4
– Bisection Bandwidth: N^(D-1)

Albero binario
Un albero binario con N nodi (foglie) ha log2N livelli; quindi sono necessari
X
l o gn  N N
con X= ; ∑ 2 switch per far comunicare i nodi fra loro.
l o g2  k =1 2 2
– Diametro: 2 log2N
– Bisection Bandwidth: 1
– Dimensionality: 1

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 29 di 95

Butterfly Network

Butterfly doppia (detta anche Fat Tree)


Richiudo la butterfly su se stessa ottenendo un albero binario, a patto di considerare tanti switch
come uno solo.

Ipercubo
Ogni nodo ha dei vicini che si differenziano da lui solo per
un bit.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 30 di 95

Routing
Esistono due algoritmi di routing che vengono usati per inoltrare dati e messaggi nelle reti di
interconnessione dei multi-computer:
– Virtual Cut-Through Routing: I pacchetti sono inviati in sequenza, e il pacchetto X viene
inoltrato prima che il pacchetto X-1 sia stato ricevuto; questo algoritmo viene spesso utilizzato
perché fornisce ottime prestazioni, in quanto si può utilizzare la velocità di trasferimento
completa. Questo algoritmo è implementabile solo se la velocità di trasferimento del
destinatario è maggiore o uguale a quella del mittente.
– Wormhole Routing: Questo algoritmo divide i pacchetti in pezzi più piccoli, detto flow unit;
quando viene instaurata una comunicazione i router intermedi ricevono la prima flow unit del
pacchetto, esaminano l'indirizzo e la instradano verso il successivo router; ciascuna flow unit
successiva, facente parte dello stesso pacchetto, seguirà la stessa strada della prima.
Tipi di routing
– Aritmetico: É un routing deterministico, il percorso viene calcolato mano a mano che il
pacchetto viene ricevuto dai router intermedi tramite semplici operazioni matematiche; è facile
da implementare e non soffre di deadlock, ma c'è il rischio di intasamento della rete (un esempio
è l'algoritmo usato nelle reti di interconnessione butterfly).
– Table Driven: I percorsi fra un nodo ed un altro vengono cambiati periodicamente e
memorizzati in tabelle, non è deterministico ma utilizza molte risorse e soffre di deadlock.
– Source Based: Il percorso viene stabilito dalla sorgente all'inizio della trasmissione, è non
deterministico ma la sorgente necessita di conoscere la mappa e lo stato di congestione della
rete, inoltre soffre di deadlock.
Per eliminare il deadlock negli ultimi due tipi si “vincolano” gli algoritmi, cioè si vietano alcuni
percorsi che potrebbero portare a deadlock.

Esempi di architetture reali


Ecco un esempio di sistema NC-NUMA, i processori sono interconnessi da una rete toro 3-
dimensionale, ed alcuni processori sono usati esclusivamente per la comunicazione.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 31 di 95

Ecco un esempio di architettura NUMA interconnessa tramite una rete a ipercubo.

Ecco un esempio di architettura NUMA ibrida; internamente è un'architettura NUMA con snooping
cache, esternamente è una CC-NUMA con SCI.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 32 di 95

Ecco un esempio di architettura MPP con interconnessione butterfly.

I/O Ad alte prestazioni


Esistono due situazioni molto diverse di I/O:
La prima viene chiamata I/O Transaction Processing e consiste nel trasferimento di numerosi file
di piccole dimensioni e sparsi su disco, in questa situazione la maggior parte del tempo di
trasferimento viene passata spostando la testina del disco.
La seconda situazione viene chiamata I/O Mass Transfer e consiste nel trasferimento di grosse
quantità di dati consecutivi, in questo caso il tempo maggiore è quello passato a trasferire i dati.
Queste due situazioni sono molto diverse fra loro, quindi se si vuole aumentare le prestazioni
dell'I/O è necessario conoscere che tipo di I/O si compie. Esistono comunque delle ottimizzazioni
software che migliorano generalmente la velocità di I/O, nonostante siano contrarie ai principi di
sicurezza visti fino ad ora:
– I/O non bloccante: Vengono richiesti i dati prima che siano necessari.
– OS Bypass: le applicazioni comunicano direttamente con l'HW per eliminare l'overhead del
S.O.
– Out of Core: Si esegue il bypass della memoria virtuale, cioè i dati sono scritti in memoria
direttamente su pagine fisiche.
– Hints: l'applicazione suggerisce il modo con il quale vuole accedere ai dati, ad esempio aprendo
un file specifica che parte deve leggere oppure in che modo sarà letto (sequenziale, accesso
casuale, ecc.).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 33 di 95

RAID (Redundant Array of Inexpensive Disks)


Questa è una soluzione hardware che permette di combinare più dischi fra loro per ottenere
replicazione e ridondanza e quindi fault tollerance, oppure parallelismo e quindi velocità.
Le due unità di misura del RAID sono:
– Stripe Factor: quanti dischi si usano.
– Stripe Depth: dimensione del blocco.
RAID 0: Striping Stripe factor > 2 Stripe depth = 1 blocco
Con questa configurazione RAID i dischi vengono visti come un unica unità logica, ed i dati
distribuiti su tutti i dischi; si guadagna solo in parallelismo e non in fault tollerance.

RAID 1: Mirroring Stripe factor > 2 Stripe depth = 1 blocco


Con questa configurazione per ogni disco esiste uno o più dischi di backup (mirror) che contengono
esattamente gli stessi dati; si guadagna in fault tollerance e in velocità di lettura, ma si perde la metà
o più dello spazio di memorizzazione.
La scrittura è più lenta rispetto ad un singolo disco, perché ciascun disco deve aspettare che la
testina sia posizionata sul settore giusto prima di scrivere; se si hanno più dischi il tempo
complessivo di scrittura è dato dal disco più lento, quindi in media si hanno prestazioni inferiori
rispetto al caso singolo.
Si può effettuare la Scrittura Stabile, cioè aspettare che il primo disco abbia finito di scrivere
prima di iniziare la scrittura sul secondo, così in caso di guasto o di interruzione di alimentazione
almeno uno dei due dischi conserva un dato corretto.

RAID 2 Stripe factor > 3 Stripe depth = 1 byte


Il RAID 2 opera sul byte invece che sul blocco, e utilizza un codice di Hamming per garantire la
correttezza dei dati; il controllore mantiene le testine di tutti i dischi sincronizzate, quindi viene
annullato l'incremento di prestazioni in lettura.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 34 di 95

RAID 3 Stripe factor > 3 Stripe depth = 1 byte


È simile al RAID 2 ma invece del codice di Hamming utilizza il bit di parità; un intero disco è
dedicato a contenere i la parità degli altri.

RAID 4 Stripe factor > 3 Stripe depth = 1 blocco


Questa versione è sostanzialmente la versione 3 con stripe depth aumentata al blocco; le testine non
sono sincronizzate, quindi ho un aumento di prestazioni in lettura.
Quando viene effettuata una scrittura si deve aggiornare il blocco di parità di ogni blocco trasferito,
i passaggi che il controller deve compiere sono:
– Leggere il blocco vecchio.
– Leggere il blocco di parità vecchio.
– Xor fra il blocco da sostituire ed il blocco di parità vecchio (ottengo la parità degli altri blocchi).
– Xor fra la parità appena ottenuta ad il nuovo blocco (ottengo il nuovo blocco di parità).
– Scrivere il nuovo blocco.
– Scrivere il nuovo blocco di parità.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 35 di 95

RAID 5
Questa versione di RAID è uguale alla versione 4 tranne per il fatto che non c'è più un disco
destinato a contenere i blocchi di parità, ma questi ultimi sono sparsi in tutti i dischi.
Questo accorgimento porta ad eliminare il collo di bottiglia dovuto al disco dedicato alla parità.
Avendo un disco dedicato alla parità si genera un collo di bottiglia perché non è possibile servire
richieste contemporanee, in quanto tutte le operazioni richiedono di accedere al disco di parità.
Sparpagliando fra i dischi i blocchi di parità con buona probabilità si possono effettuare richieste
contemporanee: ad esempio scrivere il blocco A contenuto nel disco 1 che ha parità nel disco 2, ed il
blocco B contenuto nel disco 3 che ha parità nel disco 4.

RAID 1+0 e 0+1


Sono delle configurazione ibride che eseguono rispettivamente uno striping su dischi con mirror, ed
un mirror su dischi in striping.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 36 di 95

Architetture di storage
In un sistema distribuito le unità di
memorizzazione possono essere separate
dall'architettura di elaborazione, e possono
essere accedute in remoto come fossero file
system locali, oppure essere viste come
periferiche remote fornitrici di blocchi.

Esistono tre diverse configurazioni per le


periferiche di memorizzazione remota:
– Direct Attached Storage: L'unità di storage è direttamente collegata all'unità di elaborazione,
ad esempio tramite una connessione ethernet dedicata; questa soluzione rende il server a cui
sono collegate le periferiche un collo di bottiglia ed un Single Point of Failure.
– Network Attached Storage: Le periferiche di memorizzazione sono collegate alla stessa rete
locale a cui sono collegati tutti gli elaboratori, i quali vi accedono tramite un file system remoto;
questa soluzione è economica perché permette di utilizzare una rete locale preesistente, però ha
lo svantaggio che durante i trasferimenti di file la rete locale viene intasata e quindi le
comunicazioni fra gli elaboratori sono rallentate.
– Storage Area Network: Progettate per eliminare gli svantaggi dei NAS, le reti SAN sono reti
dedicate allo storage alle quali sono collegate tutte le periferiche di memorizzazione; queste
reti sono viste come periferiche remote che forniscono blocchi. I principali vantaggi di questa
soluzione sono la possibilità di condividere i dati fra più reti di calcolatori senza la necessità di
sprecare dei server per la gestione dell'I/O, e l'elevata scalabilità in termini di prestazioni e
capacità di memorizzazione.
LVM (Logical Volume Management)
Spesso in combinazione con queste tipologie di storage remoto, si utilizza l'LVM.
Quando si deve decidere il partizionamento da effettuare su un disco è necessaria una pianificazione
accurata delle partizioni, per evitare sprechi di spazio; se si vuole modificare il partizionamento
successivamente sarà necessario spostare una grande quantità di dati, operazione molto onerosa.
L'LVM è un software di gestione dei dischi che permette di astrarre una qualsiasi configurazione di
dischi in una serie di dischi virtuali. L'LVM permette di modificare la tabella delle partizioni in
modo molto semplice grazie all'astrazione, che si compone di quattro livelli:
1. Physical Volume: è il dispositivo fisico che può essere una partizione, un dispositivo RAID
o una SAN, è suddiviso in Physical Extent.
2. Volume Group: è un array virtuale di dischi che permette l'aggiunta e la rimozione
dinamiche di dischi.
3. Logical Volume: è un dispositivo logico che fornisce una sequenza di spazi (logical extent),
è l'equivalente di una partizione ed è contenuto all'interno di un VG.
4. File System: è l'ultimo livello di astrazione, tipicamente si tratta di file system remoti che
vengono creati all'interno di un LV

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 37 di 95

I vantaggi di questa soluzione sono la facilità di configurazione e modifica delle partizioni; ad


esempio abbinando in modo opportuno i logical extended i physical extent posso creare una
configurazione RAID 0 senza supporto HW; oppure posso ingrandire una partizione semplicemente
aggiungendo dei PE inutilizzati ad un LV.
Un altro vantaggio è l'espandibilità, infatti se aumento il numero di PV è sufficiente aggiungerli ad
un VG esistente o crearne uno nuovo.
Gli svantaggi sono prestazioni inferiori dovute all'overhead portato dai livelli di astrazione, e da
una complessa gestione dei dischi che rende difficile effettuare alcune operazioni, come ad esempio
il bootstrap.

Canali di I/O (Peer to Peer)


HIPPI (High Performance Parallel Interface): è stato il primo bus di I/O ad alte prestazioni per
server, ne sono state sviluppate due versioni: lo Hippi standard, che aveva velocità di 100/200
MBps; ed il Super Hippi, che aveva velocità di 800 MBps ed era utilizzabile come fossero 4 canali
Hippi virtuali.
SCSI (Small Computer System Interface): SCSI è un bus di comunicazione al quale possono
essere collegate fino a 16 periferiche (ciascuna con un proprio ID), il bus supporta il buffering e lo
split-transaction.
SCSI è diviso in due livelli: il primo comprende le periferiche e specifica le caratteristiche HW
(istruzioni eseguibili, cablaggio e tipo di interfaccia) che devono avere; il secondo specifica i
comandi SW che una periferica SCSI deve essere in grado di comprendere ed eseguire.
Grazie a questa separazione in livelli è possibile utilizzare periferiche, che non rispettano lo
standard SCSI per quanto riguarda interfacce e cablaggio ma supportano le istruzioni SCSI
standard, come fossero normali periferiche SCSI garantendo un'elevata compatibilità; per questo si
dice che lo SCSI nasconde i dettagli dell'HW.
Per questo motivo si distinguono sistemi SCSI 100%, cioè che hanno HW e SW conforme allo
standard, dai sistemi SCSI non 100%, che utilizzano periferiche non standard ma che supportano i
comandi SCSI.
Nome Data bits Bus MHz MB/sec
SCSI-1 8 5 5
SCSI-2 8 5 5
Fast SCSI-2 8 10 10
Fast & Wide SCSI-2 16 10 20
Ultra SCSI 16 20 40

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 38 di 95

Myrinet:
Questa tecnologia di
interconnessione non ha una
tipologia predefinita, però
supporta il source routing;
Utilizza un crossbar-switch
e l'OS bypass per rendere
più veloce la comunicazione.

FDDI: Rete ottica token ring, velocità di 100Mbps


ESCON (IBM): Velocità massima di 17MBps ma utilizzabile fino a 60Km
INFINIBAND: Rete seriale con velocità di 2,5/10/30 Gbps, se si utilizza il rame come mezzo
trasmissivo la distanza massima di trasmissione è di 17m, se si utilizza la fibra ottica cresce a 10Km
Fibre Channel: Questa architettura esiste sia su fibra che su rame, è composta da 5 livelli: FC-0 e
FC-1 corrispondono al livello fisico del modello ISO/OSI, FC-2 è simile allo strato più basso del
livello di data-link, FC-3 non è un livello ma un insieme di servizi, ed FC-4 ha la funzione di livello
di trasporto, può avere velocità di 100MBps su rame o fibra, oppure 200/400MBps su fibra.
Può assumere varie topologie:
– Punto-Punto:
É la più semplice da implementare, il canale è dedicato
alla comunicazione fra due periferiche
– Arbitrated Loop:
È la topologia più diffusa, anche se complessa da realizzare
perché tutti i dispositivi devono supportare questa modalità di
funzionamento; fino a 127 periferiche possono condividere il
canale
– FABRIC:
Questa è la topologia più costosa perché richiede l'acquisto di
uno switch, fino a 2^24 periferiche possono comunicare fra loro
tramite utilizzando un canale dedicato, grazie ad un crossbar
switch.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 39 di 95

Availability
L'availability indica quanto un sistema è in grado di fornire un servizio; un sistema 100% available
non deve guastarsi mai. Per avere availability sono necessari:
– Ridondanza
– Backup
– Disaster recovery
Classi di availability
Numero Classe % di funzionamento Tempo di fermo tollerato
Classe 1 Fra il 90% ed il 99% Da 1 mese a 4 gg
Classe 2 Fra il 99% ed il 99,9% Da 4 gg a 9 h
Classe 3 Fra il 99,9% ed il 99,99% Da 9 h a 1 h
Classe 4 Fra il 99,99% ed il 99,999% Da 1 h a 5 min
Classe 5 Fra il 99,999% ed il 99,9999% Da 5 min a 3 sec
Cause di fermo macchina (outage)
– Planned: Upgrade, manutenzione, regulations (modifiche dovute alla legge).
– Unplanned: Fisiche (usura, rottura), design (bug del SW), environmental (rottura dell'impianto
elettrico o di condizionamento), operator (errore umano).
– Disaster (danneggia molti componenti): Naturali, umani non voluti, umani voluti.
Backup
Per effettuare un backup efficace bisogna sapere:
– Di quali informazioni fare il backup (dati, applicazioni, configurazione, DB, ecc.).
– Con quale frequenza (giornaliera, settimanale, ecc.).
– Per quanto conservare le copie (effettuare la rotazione dei supporti, dove conservarli, eliminare
quelli la cui vita utile è terminata, ecc.).
– Quando fare il backup (quando il sistema non deve erogare il servizio o il carico di lavoro è
basso, se non è possibile interrompere l'erogazione dei servizi bisogna considerare la possibile
inconsistenza dei dati).
– Se è maggiore il costo di down-time (interruzione) o il costo dovuto alla perdita dei dati.
Tipi di backup
– Full: salva tutti i dati.
– Incrementale: salva tutti i dati variati dall'ultimo backup (backup veloce, ripristino dei dati lento
perché possono essere stati salvati dati inutili).
– Differenziale: salva tutti i dati modificati dall'ultimo backup full.
È conveniente creare più copie di backup che vengono conservate in luoghi diversi, per evitare che
un disaster distrugga sia il sistema che il backup.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 40 di 95

Cluster
Un cluster è un raggruppamento di calcolatori indipendenti ed economici che cooperano per
risolvere un problema; i calcolatori che compongono un cluster sono indipendenti perché se staccati
dagli altri possono continuare a funzionare autonomamente, e sono economici perché sono prodotti
“di serie” e a basso costo.
Gli obiettivi dei cluster sono fornire:
– Fault Tollerance: si usa spesso il termine RAIC (Redundant Array of Inexpensive/Independent
Computer).
– Scalabilità di costo: per aumentare il numero di nodi non è necessario acquistare hardware
dedicato, appositamente progettato, costoso, ma che può portare ad un decadimento di
prestazioni.
– Scalabilità di performance: Aggiungere nodi porta ad un aumento di performance notevole, se
si tralasciano i possibili colli di bottiglia dovuti all'HW non specializzato.
Classificazione: hardware
– Commodity: sono cluster in cui tanti elaboratori standard sono collegati fra loro, senza nessun
hardware appositamente creato, hanno prestazioni scarse ma costo limitato.
– Proprietary: sono cluster che usano componenti specifici (ad esempio una connessione di rete
ad alte performance) per eliminare i colli di bottiglia.
– Constellations: Cluster in cui ogni nodo è un sistema NUMA.
Classificazione: rete
– Exposed: Cluster per i quali un utente che accede tramite la rete dall'esterno riesce a vederne la
struttura.
– Enclosed: Cluster per i quali un utente che accede tramite la rete dall'esterno non riesce a
vederne la struttura; sono più usati perché forniscono maggiore fault tollerance: se un nodo si
guasta un altro nodo può prendere il suo posto in modo invisibile dall'esterno.
Classificazione: distribuzione geografica
– Campus wide: il cluster è formato da PC sparsi all'interno di un intero edificio, un esempio è un
cluster formato dai PC dei dipendenti, che vengono sfruttati per le elaborazioni durante i tempi
morti.
– Rack Mounted (Glass House): Tutti i nodi sono in formato Rack e sono contenuti in appositi
armadi all'interno di un'unica stanza, la maggior parte dei cluster esistenti sono fatti così.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 41 di 95

Metodi di clustering
Metodi di clustering Descrizione Benefici Limitazioni
Passive standby Un server secondario Facile da implementare Alti costi perché il server
interviene nel caso il secondario non è
primario si guasti disponibile per altri usi
Active Secondary Il server secondario viene Costi ridotti perché il Maggiore complessità
usato anche come server secondario viene
elaboratore usato per altri scopi
Server separati I server hanno i loro Alta disponibilità Alto overhead di rete e
dischi. I dati sono del server dovuto alle
costantemente copiati da operazioni di copia
un server all'altro
Server connessi ai Ogni server è collegato ai Ridotto overhead di rete e Di solito richiede il
dischi dischi dell'altro. Se uno del server grazie mirroring o RAID per
cade i suoi dischi sono all'eliminazione delle compensare il rischio di
utilizzati dall'altro operazioni di copia rottura dei dischi
Server condividono i I server condividono Basso overhead di rete e Necessario gestire la
dischi simultaneamente del server. Ridotti rischi concorrenza. Di solito
l'accesso ai dischi di downtime dovuto al viene usato con disk
fail dei dischi mirroring o RAID
Ruolo Connessione Condivisione Accesso Visione Visione Visione
server dischi dati dati admin programmatore esterna
aggiuntivi
Passive Passivo Esterna No Any Separata Tradizionale Single
Standby
Failover Passivo Interna Replicazione Any Separata Tradizionale Single
Separate Attivo Interna Si (basse Read Separata Trad. o message Single o
server prestazioni) Only passing multi
Parallel Attivo Interna No Read Separata Trad. o message Single o
Cluster Only passing multi
Dischi Attivo Esterna No Any Single Trad. o message Single o
esterni passing multi
Shared Attivo Esterna Si RW Single Trad. o message Single o
disks passing multi

Load Balancing
Per evitare sovraccarichi ad un singolo server si utilizza la tecnica del load balancing; questa tecnica
consiste nel suddividere le richieste che pervengono ad un server fra più macchine in modo da
distribuire il lavoro ed evitare rallentamenti e sovraccarichi.
Il load balancing può essere effettuato in vari modi:
– Fatto dagli utenti: all'utente viene proposta una serie di mirror tra qui scegliere, e l'utente
normalmente sceglierà il server meno carico e con la maggiore velocità.
– Rotating DNS: Il server DNS associa più mirror allo stesso nome simbolico e ad ogni richiesta
ritorna l'indirizzo di un server diverso, compiendo una rotazione; oppure controlla quale server è
al momento meno carico e ritorna il suo indirizzo. Per funzionare il cluster deve essere exposed.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 42 di 95

– Load Balancer SW:


Si utilizza una macchina come load balancer, questa macchina ha un IP pubblico e processa
tutte le richieste, dopodiché le smista fra i server che sono isolati dall'esterno tramite NAT;
spesso si utilizzano due Load Balancer per evitare colli di bottiglia e single point of failure.

La soluzione precedente non è efficiente, infatti il load balancer fa due volte da collo di
bottiglia, infatti sia le richieste che le risposte passano attraverso di esso.
Una soluzione più efficiente è effettuare un tunnel IP (che consiste nell'aggiungere un secondo
header IP che ha come mittente l'indirizzo del load balancer e come destinatario l'indirizzo del
server), in questo modo il server conosce l'IP del client che ha effettuato la richiesta e può
rispondere direttamente, sgravando il load balancer dalla gestione delle risposte.
Grazie al tunneling si può effettuare anche il load balancing geografico, cioè smistare fra server
localizzati in posti diversi.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 43 di 95

Il Load balancer conosce gli indirizzi MAC dei server, che sono collegati allo stesso ramo della
rete locale; il load balancer modifica l'indirizzo MAC dei pacchetti in ingresso e li smista ai
server a livello data-link, senza modificare l'header IP, in questo modo i server riconoscono
come proprio l'IP del load balancer e conoscono l'IP del client e quindi possono rispondere
direttamente.

Failover Failback
Il failover è una tecnica per garantire l'operatività di un cluster in caso di guasto di uno o più nodi.
Il failover prende varie forme, in base al tipo di cluster su cui viene applicato.
– Cluster passive standby: sostituzione del nodo guasto con un nodo “di scorta”.
– Cluster active secondary: distribuzione del carico di lavoro del nodo guasto fra quelli attivi.
Esistono vari tipi di failover a vari livelli:
Failover dati: può essere ottenuto introducendo replicazione e ridondanza nei dati (Multi attached
disk), oppure introducendo ridondanza nei collegamenti (rete con percorsi multipli SAN).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 44 di 95

Failover comunicazione: in questo caso il cluster è visto come un'entità che comunica con degli
utenti.
– IP Failover: quando un nodo si guasta, se il cluster è enclosed il Load Balancer elimina dalla
tabella di natting il suo IP; se il cluster è exposed, e se la rete interna è configurata per
supportare gli IP dinamici, allora un nodo si prende carico del lavoro del nodo guasto e
risponde alle richieste che vengono sia dal suo IP che da quello del nodo guasto.
– Session Failover: quando un nodo si guasta si possono perdere i dati delle sessioni che lo
coinvolgono, una prima soluzione è quella di ignorare il guasto (se lo stato non è cruciale). Se
invece lo stato è cruciale non può essere perso; può essere salvato come dato permanente sul
server oppure può essere salvato sul client, con lo svantaggio di doverlo caricare sul server ad
ogni comunicazione.
Failover Applicazioni:
– Processi equivalenti: si generano dei processi uguali ma distinti su nodi diversi, cosicché in
caso di guasto di uno dei nodi il processo continui ad essere eseguito.
– Riavvio: se un nodo si guasta i processi su quel nodo saranno riavviati in un altro, richiede
tempi piuttosto lunghi.
– Process Mirroring: si tiene una copia dell'intero stato del processo in un altro nodo, oneroso
in termini di memoria e trasmissione.
Heartbeat: è un metodo per la rilevazione degli errori, il suo funzionamento consiste nel
controllare periodicamente lo stato dei nodi.
L'heartbeat ha diverse problematiche:
È un processo real-time che deve funzionare su una rete (internet o lan) che per definizione non è
real-time; questo porta a vedere delle “finte morti” in caso di eccessivi ritardi nella rete.
Un'altra problematica è che deve essere implementato su vari livelli con vari campi d'utilizzo; ad
esempio posso implementare l'heartbeat su link punto-punto, sul livello IP utilizzando il ping, a
livello del S.O. o a livello delle applicazioni per controllare il loro corretto funzionamento.
A causa di queste problematiche è necessario aggiungere nuove funzionalità anche a livello di S.O.

Cluster per calcolo scientifico


Non è presente il LB. Forniscono delle primitive di programmazione che permettono di
sincronizzare i vari processi (MPI Message Passing Interface).
Un esempio è Beowulf.
Un'altra libreria è PUM (Parallel Virtual Machine).
Un altro progetto orientato al bilanciamento dei processi è OPENMOSIX. Ho tanti processi
tradizionali che vengono bilanciati su diversi nodi. Si basa sul concetto di “migrazione” dei
processi.
Il S.O. sposta un processo da un nodo all'altro, ma il processo non viene completamente spostato
dato che non possono essere remotizzate alcune system call (ad esempio la lettura dei file).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 45 di 95

Architettura NOW (Net Of Workstation): Organizzazione SW

Paradigma client/server
Nel paradigma client/server vi è una distinzione di ruoli tra client e server.
Il client ha un ruolo attivo: inizia l'attività e manda richieste.
Il server invece ha un ruolo passivo: fornisce servizi, attende richieste e fornisce risposte.
É presente anche una distinzione di specializzazioni: il client è vicino all'utente, solitamente ha
un'interfaccia grafica e poche risorse hardware (potenza elaborativa e spazio di archiviazione); il
server al contrario spesso non ha un'interfaccia grafica ma in compenso ha abbondanti risorse
hardware.
A volte una stessa macchina può essere sia client che server.
Il client può essere di due tipi:
– Thin Client: Il client si occupa solamente di presentare all'utente le informazioni, sono
necessarie risorse hardware modeste.
– Fat Client: Il client si fa carico di una parte dell'elaborazione, è necessario che il client abbia
buone caratteristiche hardware che gli permettono di eseguire le elaborazioni con fluidità.

Stratificazione delle applicazioni client/server


– Berson (3 livelli).
UTENTE
- Presentation
- Business Logic (elaborazione dati)
- Data Management (DBMS)
SISTEMA OPERATIVO

– Gartner Group (4 livelli).


divide in 2 pezzi la Business Logic in una parte che produce risultati per l'utente e una che li
produce per il data manager; in questo modo la suddivisione è più simmetrica e più precisa.
UTENTE
- Presentation
- Presentation Logic
- Data Logic
- Data Management (DBMS)
SISTEMA OPERATIVO

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 46 di 95

Il Gartner Group ha individuato 5 tipi di client/server:


● Distributed Interface: è il tipo legacy per
applicazioni a riga di comando con
interfaccia grafica remota.
● Remote Interface: tutta l'interfaccia utente
sta sul client.
● Distributed Logic: la logica relativa
all'interfaccia grafica sta sul client assieme
a quest'ultima.
● Remote Data Management: il server
gestisce solo i dati.
● Distributed Data Management: si tratta
di un DB distribuito.

– Wiesberg (3 livelli).
Wiesberg ha notato che nel modello Gartner Group i primi due tipi possono essere raggruppati
in uno solo, mentre l'ultimo è indipendente dagli altri.
Remote Presentation: il client si
occupa solo di presentare i risultati (thin
client), può portare ad un sovraccarico
del server.
Distributed Logic: la logica viene
ripartita fra client e server.
Remote Data Access: Il server fa solo
da gestore dei dati (fat client).

Client/Server (tradizionale) vs Web-based


Le applicazioni web-based sono dei casi particolari di applicazioni client/server, la distinzione va
fatta quindi con le applicazioni client/server non basate sul web.
Le applicazioni client/server tradizionale sono del tipo Remote Data Access, mentre le applicazioni
web-based sono del tipo Remote Presentation, perché sul client è installato solamente il browser;
questa considerazione non vale però per le applicazioni web 2.0 che si possono definire
appartenenti al tipo Distributed Logic in quanto il client esegue del codice inviato dal server.
Client/Server vs Peer to Peer
Il paradigma Peer to Peer è un caso particolare di quello client/server, perché i nodi devono riferirsi
ad un server per trovare gli altri pari; e ogni nodo svolge, nei confronti dei pari, funzione sia di
client che di server.
Architetture Multi-Tier
Le architetture multi-tier sono architetture client/server in cui c'è più di una divisione.
Un esempio può essere un sito web il cui database è separato dal web server; in questo caso il
Presentation Manager è sul client, l'Application Logic sul web server ed il Data Manager su un
secondo server che gestisce il database.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 47 di 95

Middleware

In queste architetture spesso capita che i nodi coinvolti utilizzino applicazioni e sistemi operativi
differenti, è quindi utile avere un'Application Logic standard che mascheri le differenze HW e SW
fra i nodi. Questo livello software prende il nome di middleware.

Il concetto di middleware può essere definito in modo vago come la “/” in client/server, cioè quello
che sta in mezzo fra il client e il server.
Il middleware fornisce un'interfaccia per le applicazioni (API) standard e le tramuta in richieste
standard per i server e viceversa.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 48 di 95

Come nel paradigma client/server esistono tre classi di middleware che si differenziano in base al
livello in cui questo si colloca: il middleware può essere a livello di presentazione, di logica
applicativa, o a livello di gestione dei dati.

Il middleware, che si trova al livello applicativo del modello ISO/OSI, si preoccupa di rendere
standard le API verso le applicazioni sia del client che del server, le richieste verso il livello di
trasporto e le richieste tra due middleware distinti (middleware interaction).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 49 di 95

Tipi di middleware
Esistono quattro tipi di middleware:
a) Message-oriented middleware:
fornisce il servizio base di scambio di
messaggi, a sua volta si divide in
– Socket (TCP/UDP): permette la
comunicazione diretta tramite
socket, è un middleware minimale.
– Message Queuing (MQ): permette
una comunicazione indiretta
tramite code asincrone.
b) RPC (Remote Procedure Call): si
basa sull'invocazione di procedure
remote, la comunicazione viene gestita
implicitamente dal linguaggio.
c) ORB (Object Request Brocker):
Simile all'RPC ma vengono invocati
oggetti remoti, viene utilizzato con i
linguaggi di programmazione ad
oggetti.
d) TPM (Transaction Processing
Monitor): Si pone fra il database ed il
software che lo utilizza.

Remote Procedure Call


Quando viene invocata una procedura si crea una struttura dati e si salta all'indirizzo della
procedura, alla fine dell'esecuzione la procedura salva i risultati in questa struttura dati e torna al
chiamante.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 50 di 95

Una chiamata di procedura remota viene effettuata tramite i seguenti passi:


1. Il client chiama lo stub come se si trattasse di una normale procedura.
2. La stub impacchetta il messaggio (marshalling) e invia una trap al kernel.
3. Il kernel invia il messaggio al kernel remoto.
4. Il kernel remoto trasmette il messaggio alla stub del server.
5. La stub del server spacchetta il messaggio (unmarshalling) e chiama il server.
6. Il server svolge il lavoro e comunica i risultati alla stub.
7. La stub del server esegue il marshalling e manda una trap al kernel remoto.
8. Il kernel remoto spedisce il messaggio al kernel del client.
9. Il kernel del client invia il messaggio alla stub del client.
10. La stub spacchetta il messaggio e ritorna i risultati ed il controllo al client.
In questo modo la chiamata remota risulta trasparente all'utente, come se si trattasse di una chiamata
locale.

Parameter marshalling
La stub converte i dati in un formato neutro (XDR, NDR, ...) per evitare problemi con architetture
diverse (ad esempio fra un architettura big endian ed una little endian, fra S.O. che usano set di
caratteri o rappresentazioni numeriche differenti). Una volta effettuato il marshalling si aggiungono
l'IP e la porta di destinazione, più altre informazioni utili nella gestione: il numero (standard) del
servizio RPC, il numero di versione del programma, il numero della procedura invocata dal
programma ed il numero di versione del protocollo RPC (due versioni diverse dello stesso RPC
possono associare numeri diversi alla stessa procedura).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 51 di 95

Copy/Restore
Per passare i puntatori ad un server remoto si invia tramite la rete il valore del puntatore che il
server copierà nella casella della memoria locale corrispondente all'indirizzo puntato, una volta
ricevuta la risposta viene sostituito il valore del puntatore con il valore ritornato. Questa procedura
funziona finché non ci sono due puntatori allo stesso oggetto o strutture dati dinamiche.
Tipi di autenticazione nell'RPC
– None: nessuna, il messaggio è in chiaro e senza informazioni di identificazione.
– System: il messaggio è in chiaro ma contiene dei dati relativi all'identità del mittente o del
destinatario.
– Servizio esterno: L'autenticazione viene compiuta da un servizio esterno all'RPC, ciò permette
di avere sempre un sistema di autenticazione aggiornato senza dover modificare l'RPC.
IDL (Interface Description Language)
Definisce l'interfaccia (nel senso SW della stessa) delle procedure da chiamare. Esistono dei
compilatori per ricavare delle stub dagli IDL, ed esistono anche degli interpreti on-the-fly.
Localizzazione
Esistono due metodi per effettuare la localizzazione dei servizi RPC:
– Tutto statico: il client conosce a priori l'indirizzo del server.
– Registro/Brocker: il client cerca il server in un registro, offre maggiore flessibilità e semplicità
di gestione.
ONC-RPC (RFC 1831)
– Sincrono/asincrono: di solito l'RPC è sincrono cioè gli stub prima di proseguire aspettano la
risposta alla richiesta precedente, possono esistere RPC asincroni nei quali le stub effettuano
chiamate non bloccanti.
– Error handling: ci possono essere errori che in locale non si verificano o che in locale hanno
conseguenze diverse (ad esempio la divisione per zero che in remoto blocca solo il server,
bisogna quindi comunicare al client l'errore).
– Global Variables + Side effects: non si possono avere variabili globali e non si possono
sfruttare i side effects.
– Authorization/authentication: i client devono essere autenticati dal server, che hanno una lista
di client autorizzati a richiedere i loro servizi.
– Performance: le procedure remote sono ovviamente più lente di quelle locali.
– Livello di trasporto utilizzato: si possono utilizzare sia TCP che UDP, ma è consigliato UDP
perché non si preoccupa dell'affidabilità e dell'ordinamento dei pacchetti, quindi offre
handshaking veloce e header leggeri. Siccome le trasmissioni di RPC consistono in una richiesta
ed una risposta non hanno bisogno di ordinamento, l'affidabilità è garantita dalla trasmissione
sincrona e con il TCP avrei overhead maggiore dello stesso messaggio.
– Info nell'header: Identificazione procedura da chiamare (remote procedure number),
identificazione del contenitore di procedure (remote program number), remote program version,
altre informazioni che non riguardano la chiamata (corrispondenza richiesta/risposta sotto forma
di ID pseudocasuale, autenticazione in forma basilare e poco sicura).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 52 di 95

RPC BIND (RFC 1833)


Si ipotizza che l'indirizzo del server sia noto ma non la porta TCP/UDP a cui rivolgersi. Bisogna
quindi fare un'interrogazione di un servizio di porta nota: RPC BIND è indipendente dalla rete e dal
livello di trasporto, oppure Portmap che ipotizza che la rete sia internet quindi usa TCP o UDP.

Object Request Brocker


– DCOM: Microsoft distributed component object model.

– CORBA (Common Object Request Brocker Architecture): è polifunzionale e comprende fin


troppe funzioni; include un protocollo standard (Giop/iiop) per la comunicazione inter-ORB.

– RMI: Remote Method Invocation, specifico ed integrato per Java.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 53 di 95

Problematiche di progetto client/server


1) Numero di tier, punti di divisione, fat o thin client.
2) Statefull vs stateless.
Vantaggi dei server privi di stato Vantaggi dei server con stato
Tolleranza ai guasti Messaggi di richiesta più corti
Non sono necessarie operazioni open/close Migliori performance
Non si spreca spazio del server per le tabelle Possibilità di letture anticipate (read-ahead)
Non ci sono limiti sul numero di file aperti Maggior semplicità dell'idempotenza
Non ci sono problemi se un client cade Possibilità di file locking (blocco dei file)

Questa distinzione viene effettuata a livello applicazione, quindi è indipendente dal livello
di trasporto. Lo stato ha un costo di gestione (memoria occupata) e crea problemi in caso di
guasti (se un nodo cade bisogna modificare lo stato) ma porta informazioni che permettono
protocolli più leggeri e potenti.
3) Infrastruttura d'appoggio: Quali middleware, livello di trasporto e livelli inferiori usare.
4) Garanzie ai vari livelli della pila: ACK, ritrasmissione, timeout, heartbeat.
5) Autenticazione.
6) Molteplicità di client e server: possono verificarsi problemi di standardizzazione e race-
condition.
7) Gestione anomalie:
1. Il client non trova il server: messaggio all'utente, il programma non deve piantarsi.
2. Messaggi di richiesta vanno persi: il client ha un timeout allo scadere del quale
rispedisce.
3. Messaggi di risposta persi: in questo caso il client non sa se si è verificato 2. o 3. , quindi
rimanda la stessa richiesta. Se le istruzioni sono idempotenti la loro riesecuzione non
comporta problemi; se non lo sono invece il server deve ricordarsi delle richieste recenti,
quindi avere uno stato.
4. Cade il server: se lo stato è volatile allora viene perso e non si sa se cade prima della
richiesta o dopo la risposta; se lo stato è permanente non ci sono problemi.
Esistono 3 strategie: insistere fino alla risposta (at least once), è possibile che si attenda
all'infinito; rinunciare subito (at most once); timeout.
5. Cade il client: se il server ha stato rimangono memorizzati residui del client (orfani), si
prevede quindi un meccanismo di sterminio degli orfani. Può anche accadere che il
client si riavvii subito, e ricominci a mandare messaggi le cui risposte si confondono con
gli orfani; allora all'interno del timeout, dopo il quale si inizia lo sterminio, non possono
esserci due id ripetuti.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 54 di 95

Tecniche di base per sistemi distribuiti


Tempo assoluto e NTP
UTC Universal Time Coordinated, calcolato con orologi atomici.
Distribuito con il segnale ora esatta (WWV).
Il servizio orario in rete viene fornito tramite time server strutturati su più livelli; questa è l'idea
dell'NTP (Network Time Protocol) che include algoritmi per aumentare la precisione dell'ora.

L'header ha 4 timestamp che indicano quando la richiesta è stata trasmessa, elaborata, spedita e
ricevuta; e tramite gli algoritmi è possibile stimare l'ora.
Sincronizzazione dei clock logici
In certi casi è sufficiente preservare la relazione “accade prima” tra degli eventi di cui sono sicuro
dell'ordine temporale. Si usa l'Algoritmo di Lamport che quando arriva una trasmissione imposta
l'orologio del destinatario al tempo di invio del messaggio aumentato di 1.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 55 di 95

Mutua esclusione
Per garantire la mutua esclusione nel caso due nodi debbano accedere ad una risorsa condivisa, si
può nominare un coordinatore che gestisce gli accessi a questa risorsa; diventa però un collo di
bottiglia e single point of failure.

Un'alternativa al controllore è implementare un protocollo broadcast: prima di accedere alla


sezione critica si manda in broadcast un messaggio contente un timestamp, se tutti gli altri nodi
confermano di non essere attualmente all'interno della sezione critica allora l'accesso è consentito;
tutti i nodi devono implementare l'algoritmo di Lamport per rimanere sincronizzati. Se un nodo
cade si può entrare in starvation.

Un'altra soluzione è quella di implementare il classico token ring; in questo caso se uno dei nodi
cade l'anello si apre ed il token può andare perso.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 56 di 95

In questa tabella vengono confrontati i tre algoritmi.


Algoritmo Messaggi per una Ritardo prima dell'entrata Problemi
entrata/uscita (in tempi di messaggio)
Centralizzato 3 2 Il coordinatore va fuori
servizio.
Distribuito 2(n-1) 2(n-1) Caduta in un qualunque
processo.
Token ring Da 1 ad infinito Da 0 a n-1 Perdita del token,
caduta di un processo.
Si nota che l'algoritmo migliore è quello centralizzato con il coordinatore.
Algoritmi di elezione
Per aggirare il problema della caduta del coordinatore e permettere al sistema di continuare a
garantire la mutua esclusione esistono due algoritmi si elezione del coordinatore.
– Algoritmo del Bullo.
Il nodo che si accorge della caduta del
coordinatore comunica la scoperta a tutti
i nodi con priorità superiore alla sua e
si candida a nuovo coordinatore. Se non
ottiene risposta, perché non esistono
nodi con priorità maggiore o perché non
sono attivi, diventa il nuovo
coordinatore.
In caso contrario l'algoritmo ripartirà dal
nodo con priorità maggiore che ha
risposto alla richiesta di elezione, fino a
che non sarà proclamato nuovo
coordinatore il nodo con priorità
massima.
– Algoritmo ad anello.
Il nodo che si accorge della caduta del
coordinatore comunica al nodo adiacente
che deve essere indetta una nuova
elezione, quel nodo lo comunica al suo
adiacente e così via finché il messaggio
non torna al primo nodo. Se un nodo è
fuori servizio e quindi non risponde al
messaggio di elezione, viene saltato.
Ad ogni passaggio il nodo che riceve il
messaggio inserisce il suo ID alla lista dei
nodi “vivi”, nella quale, alla fine del giro,
il primo nodo cercherà quello con priorità
massima e lo eleggerà nuovo coordinatore.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 57 di 95

Deadlock distribuiti
Per gestire i deadlock distribuiti si possono prendere quattro strade:
La prima è quella di ignorarli.
La seconda è quella di renderli impossibili logicamente:
– wait and die
I processi sono ordinati in base alla loro età (si usa Lamport per sincronizzare le età dei
processi). Quando un processo A possiede una risorsa ed un altro processo B la richiede possono
capitare due cose: se B è più vecchio di A, si mette in attesa che venga rilasciata e più rimane in
attesa più ringiovanisce; se B è più giovane di A, muore. In questo modo i cicli sono impossibili.

– wond wait
Anche in questo caso possono capitare due cose: se B è più vecchio di A, effettua la prelazione
sulla risorsa; se B è più giovane di A, si mette in attesa e più aspetta più diventa vecchio. I cicli
sono impossibili.

La terza strada è quella di prevenirli durante l'esecuzione, ma non è una strada praticabile.
La quarta è rilevarli:
– Algoritmo con coordinatore
Esiste un coordinatore che gestisce le risorse, è possibile che il coordinatore rilevi falsi stalli: se
il processo C richiede la risorsa S e contemporaneamente A comunica al coordinatore che ha
rilasciato S, se il messaggio di A arriva dopo il messaggio di B il controllore pensa che sia
avvenuto un deadlock distribuito fra la macchina 0 e la macchina 1.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 58 di 95

– Algoritmo di rilevamento di Chandy Mistra Haas


In questo algoritmo non è presente il coordinatore.
Quando un processo è in attesa di una risorsa manda un messaggio al processo che la sta
occupando, a sua volta quel processo inoltra il messaggio agli eventuali processi che occupano
risorse che gli servono, e così via.
Tutti i messaggi contengono il nome del processo iniziale, del processo che genera il messaggio,
e del processo che occupa la prossima risorsa.

Se ad un processo arriva un messaggio con il primo e l'ultimo nome uguali significa che è in
atto un deadlock, anche qui è possibile rilevare falsi deadlock.

Distributed snapshot
Si fa una fotografia dello stato distribuito, in questo modo però si perdono le informazioni sulla
parte dinamica, come i messaggi in viaggio in quel momento; questo può portare ad ignorare i
messaggi in transito, oppure a contarli due volte, se gli orologi non sono sincronizzati.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 59 di 95

Algoritmo di distributed snapshot


Partendo dall'ipotesi che non si perdono messaggi se il trasporto è ordinato, si schematizza il
sistema come insieme di nodi con canali logici punto-punto.
I nodi possono assumere due ruoli:
– Iniziatore: Salva lo stato e manda dei marker nei canali uscenti per indicare agli altri nodi che è
in atto la creazione dello snapshot.
– Ricevente: Se viene ricevuto un marker sul canale p salva lo stato; segna il canale come vuoto,
ed eventuali messaggi che arrivano successivamente non vengono contati; e manda dei marker
sui canali uscenti.
Se successivamente riceve un altro marker sul canale q, significa che deve tenere conto di tutti i
messaggi arrivati su quel canale nell'arco temporale fra il primo marker (quello su p) e quello
appena arrivato; quindi modifica lo stato locale applicandovi gli effetti generati dai messaggi in
quell'arco temporale. L'algoritmo termina quando si sono ricevuti i marker su tutti i canali
d'ingresso.

Messaggi “falsificati” (o dei generali bizantini)


Se un nodo per un malfunzionamento manda dei messaggi validi ma con contenuto fasullo, il
sistema può trovarsi nella situazione di non riuscire a prendere una decisione; bisogna perciò
trovarlo ed isolarlo.

Per permettere il riconoscimento e l'isolamento del nodo traditore il numero dei nodi totale deve
essere maggiore di tre volte il numero dei traditori.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 60 di 95

Replicazione
La replicazione può essere sincrona; oppure asincrona, cioè esiste una finestra temporale in cui le
copie non sono uguali.
La replicazione asincrona si divide in:
– Near Real-Time: esiste una finestra temporale molto piccola.
– Event driven (planned): il momento in cui eseguire le copie è pianificato (ad esempio una
volta al giorno).
– On demand.
La replicazione può essere suddivisa secondo altri criteri:
1. Creazione delle repliche:
- di gruppo: la creazione è sincrona.
- lazy: si crea la prima copia e poi si propaga in modo asincrono.
2. Modifica:
- Read one primary: ogni lettura è sempre fatta sulla copia primaria, le
altre sono di backup.
- Read one: le copie sono tutte uguali e si può leggere da una qualsiasi.
- Read quorum.
- Write one primary: ogni scrittura è sempre fatta sulla copia primaria, poi si propaga alle
altre in modo lazy; la propagazione lazy ha l'inconveniente di non funzionare se la copia
primaria diventa irraggiungibile (guasto).
- Write all: scrivo su tutte le copie, in caso una non sia disponibile devo aspettare (anche
all'infinito) che lo diventi.
- Write all available: come la write-all ma ha un timeout.
- Write quorum.
- Write gossip: consiste in una write one primary in cui la copia primaria è scelta a caso, è
inaffidabile.

Quorum
Esistono due tipi di quorum:
– Nr (quorum di lettura), un dato è valido se ci sono almeno Nr copie uguali.
– Nw (quorum di scrittura), la scrittura termina se sono state scritte Nw copie.
Questi due valori devono rispettare le seguenti condizioni:
– Nr+Nw >Ntot, cioè deve accadere che almeno una lettura avvenga su un dato già scritto, in
modo da rendere impossibile che vengano lette solo copie non ancora modificate dalla scrittura.
– Nw>N/2, cioè devo scrivere almeno la metà più uno.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 61 di 95

Name Service
Il Name Service è un servizio che offre uno spazio dei nomi, dei meccanismi di localizzazione e
traduzione, e un'infrastruttura informativa per immagazzinare i nomi esistenti.

DNS (Domain Name System)


Offre uno spazio dei nomi gerarchico, con un'amministrazione decentralizzata, i nomi di più alto
livello sono stabiliti da un'ente di standardizzazione.
Per ogni zona c'è un server autoritativo primario che contiene i dati necessari a raggiungere i server
di livello inferiore, più alcune repliche tenute per aumentare la fault tollerance.
Le modifiche sono trasferite dal primario alle repliche tramite zone transfer: ogni tanto le repliche
chiedono al server il numero di versione, se è presente una nuova versione effettuano
l'aggiornamento; questo sistema è lento e ammette incongruenze fra il primario e le copie.
Le zone non hanno connotati geografici: un server con dominio .it può essere fuori dal territorio
italiano.

Le tabelle dei DNS sono formate da Resource Record: la prima colonna indica il nome della
risorsa, la seconda la scadenza in secondi dell'informazione, la terza il tipo di rete (l'unica utilizzata
è IN che sta per Internet), la quarta il tipo di record e la quinta il valore del record.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 62 di 95

Sigla Significato Valore del record


SOA Start of authority Contiene i nomi dei Name Server e la versione del file di zona
A Address Contiene l'Indirizzo IP
MX Mail Exchange Quali sono i server di posta ed il loro ordine.
user@domain.com viene tradotto in user@mailserver.domain.com
NS Name Server Il nome del Name Server autoritativo per il dominio
CNAME Canonical Name Un alias per il dominio (di solito traduce www nel nome del web
server), un record Cname non può puntare ad un altro alias.
PTR Pointer Alias per un indirizzo IP, serve per le query inverse
HINFO Host Description Descrizione dell'host in ASCII
TXT Text Testo ASCII
Cache Resolver
Sono dei server DNS che contengono una cache degli ultimi nomi risolti; aumento le performance
perché diminuisce il carico sul server DNS di livello superiore, la saturazione della rete e le latenze
delle richieste.
I record in cache devono avere una scadenza, indicata nel tempo di vita del resource record.
I client possono implementare una loro cache dei nomi ed uno stub resolver, che ad ogni richiesta
controlla nella cache locale; se il record non esiste in locale, lo stub lo chiede al cache resolver (o al
server DNS); se il cache resolver ha il il record in cache lo comunica al client, altrimenti cerca un
nome vicino ad esso (per esempio un nome appartenente allo stesso dominio o sottodominio), nel
peggiore dei casi comunica l'indirizzo del root server.
Il cache resolver può utilizzare due modalità per risolvere un indirizzo:
– Modalità iterativa: Se il cache resolver ha il nome richiesto dal client nella cache glielo
comunica (IP); altrimenti gli comunica il nome di un server che contiene l'informazione
ricercata (referral), a questo punto il client contatterà il referral in una nuova iterazione. Questa
modalità riempie la cache del client.
– Modalità ricorsiva: Se il cache resolver ha il nome in cache lo comunica direttamente al client;
altrimenti invia la richiesta ad un server di più alto livello, il quale può rispondere oppure
chiedere a sua volta al livello superiore. Per il client entrambi i casi sono uguali, in ogni caso
riceverà l'IP richiesto. Questa modalità riempie la cache dei server.
La modalità ricorsiva non viene utilizzata nei più alti livelli della gerarchia per non sovraccaricare i
TLD.
Messaggi DNS
1. Header.
2. Question: Una richiesta.
3. Answer: Una domanda.
4. Authority.
5. Additional: Informazioni aggiuntive, ad esempio nel caso di un campo CNAME, l'IP del
server di cui l'indirizzo richiesto è alias.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 63 di 95

L'header è composto da
ID Campo di 16bit
QR Bit che indica se è una richiesta o una risposta.
AA Bit che indica se la risposta arriva da una cache o da un authority.
RD Recursion desired, indica che è preferibile la modalità ricorsiva.
RA Recursion available, indica che è disponibile la modalità ricorsiva.

NetBios
É nato per condividere file e stampanti nelle reti locali senza bisogno di configurazione, NetBios è
l'interfaccia standardizzata verso le applicazioni (SMB).
Servizi NetBios
– Session Service: simile al TCP, fornisce scambio di messaggi full-duplex ordinato con ack.
– Datagram Service: simile all'UDP, invio di datagrammi inaffidabile, senza connessione, non
ordinato.
– Name Service: Name Space non gerarchico a 16 caratteri; siccome non è gerarchico due client
non possono avere lo stesso nome anche se sono in due workgroup diversi (i workgroup sono
solo uno stratagemma di visualizzazione).
All'inizio le comunicazioni erano effettuate in broadcast, perché questo sistema non richiede
gestione e centralizzazione e funziona anche da metodo di mutua esclusione. Successivamente,
a causa della sua inefficienza, sono stati introdotti i NetBios Name Server (WINS); i WINS non
supportano però un sistema gerarchico dei nomi, quindi i nomi devono rimanere univoci e
l'elenco deve quindi essere replicato in ogni server WINS, con conseguente spreco di risorse;
inoltre per propagare le modifiche si rischia di sovraccaricare la rete. Per questi motivi questo
sistema non è scalabile e non può essere usato efficientemente in reti di grandi dimensioni.

Esecuzione Remota
Con il termine esecuzione remota si intende sia la fornitura di servizi remoti, sia l'esecuzione di
codice remoto.
Remote Service:
Un server fornisce dei servizi remoti che permettono di eseguire sul client dei comandi presenti sul
server; alcuni di questi servizi sono: RPC, RSH, Comandi FTP, Telnet e SSH.
Remote Execution:
Un server permette ai client di eseguire dei programmi che risiedono su di esso. Questo tipo di
esecuzione remota richiede: location indipendance, cioè il codice deve poter essere eseguito
indipendentemente in locale ed in remoto; I/O e comunicazioni devono essere implementate nel
codice in modo funzionare sia se il programma viene eseguito in locale, sia se viene eseguito in
remoto; portabilità del codice, per eseguire il software in remoto quando il client ha un S.O.
diverso dal server.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 64 di 95

Migrazione
Per migrazione si intende lo spostamento di un processo o di una parte di esso da un processore ad
un altro. Quando un processore è sovraccarico alcuni processi migrano dalla sua coda a quella di un
altro processore per bilanciare il carico del sistema, vediamo in dettaglio la migrazione nei più
diffusi tipi di sistemi multiprocessore.
a) Sistema multiprocessore.
b) UMA.
c) Cluster; la migrazione in questo caso
richiede un costo  , bisogna capire se in
questo caso conviene migrare
confrontando il costo e la differenza di
prestazioni.

Come si decide il destinatario di un processo migrante?


Sarebbe utile avere informazioni riguardo l'interdipendenza fra processi, in modo da farli eseguire
dallo stesso processore, non sempre è possibile.
Esistono 3 soluzioni:
– Server Initiated:
La migrazione viene decisa dal processore sovraccarico, il processo viene inviato al processore
con il carico minore. Ci possono essere problemi di thrashing se il processore destinatario si
trova dopo la migrazione ad essere sovraccarico.

– Receiver Initiated:
Quando un processore ha poco lavoro comunica in broadcast la sua disponibilità a ricevere
processi; questa soluzione ha il vantaggio di eliminare il thrashing ma l'invio di molti messaggi
broadcast può intasare la rete.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 65 di 95

Per carichi di lavoro


elevati questa
soluzione ha
prestazioni peggiori di
quella senza
migrazione.

– Coordinatore:
Il coordinatore conosce il carico di ogni processore e gestisce la migrazione; questo è
l'algoritmo migliore ma sorge il problema che il controllore diventa un collo di bottiglia e single
point of failure.

Grid Computing
Grid viene tradotto con “rete elettrica”; l'obiettivo del grid computing è far arrivare tutta la potenza
di calcolo necessaria al sistema in modo trasparente all'utente, come la corrente elettrica arriva alle
apparecchiature.
Il sistema comunica con un middleware che cerca un nodo libero, gli invia i dati e li riporta al client
una volta elaborati.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 66 di 95

File System Remoti


Esistono due categorie di file system remoti:
● NFS (Network File System): Le risorse si dividono in locali e remote.
● DFS (Distributed File System): Le risorse sono di un solo tipo, non esistono né risorse
locali né remote.
Caratteristiche:
– Login transparency: più macchine condividono i file e gli utenti.
– Access Transparency: Non c'è differenza fra l'accesso ai file locali e remoti (ad esempio si può
fare il drag & drop da una cartella remota).
– Location Transparency: I file remoti sono rappresentati come file locali, i due tipi sono
indistinguibili all'utente.
– Location Independence: Le risorse si possono spostare in modo trasparente all'utente.
– Replication Transparency: Il sistema gestisce la replicazione, l'utente non sa quante copie ci
sono di un file.
– Concurrency Transparency: La mutua esclusione è gestita automaticamente.
Modelli di accesso:
– Remote Access: ogni lettura/scrittura passa nella rete ed il server la vede.
– Download/Upload: quando il client ha bisogno di un file lo scarica, ci lavora e poi lo ricarica sul
server; è necessario l'accesso esclusivo ai file, quindi server con stato.
– Cache: Come sopra ma il client ha una cache dei file scaricati.
Semantica degli accessi concorrenti:
– Unix Semantic: ogni scrittura viene immediatamente propagata al server.
– Session Semantic: quando si accede ad un file remoto si apre una sessione, le modifiche
vengono salvate solo quando si chiude la sessione. Di solito quando una sessione viene chiusa
viene creato un nuovo file con le modifiche; in questo modo i file non vengono mai modificati.
– Transaction Semantic: è presente uno strato software aggiuntivo.
– No Semantic: la gestione della concorrenza è affidata all'utente.
Modi di funzionamento read e write:
– SRSW (Single Read Single Write): si possono effettuare letture e scritture remote; oppure
esclusive, cioè chi sta utilizzando il file se ne crea una copia e blocca l'accesso all'originale;
questo metodo fornisce la massima coerenza ed è applicabile ad ogni semantica.
– MRSW (Multiple Read Single Write): Le letture vengono eseguite in cache, le scritture in modo
esclusivo, possono verificarsi problemi di coerenza.
– MRMW (Multiple Read Multiple Write): Sia le letture che le scritture vengono eseguite nella
cache, senza vincoli.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 67 di 95

FTP (File Transfer Protocol)


Il server FTP ed il client comunicano fra
loro attraverso Comandi e Risposte FTP.
Ogni Risposta FTP è composta da un
codice numerico e da un testo.
Il codice serve ad interpretare la risposta: è
composto da tre numeri il primo dei quali
indica la categoria della risposta (ad
esempio se è positiva o negativa), il
secondo l'argomento della risposta (ad
esempio sintassi o autenticazione).

NFS
Il protocollo NFS è basato su RPC, utilizza un formato XDR per i file ed il protocollo UDP per le
comunicazioni.
Di solito una stessa macchina è sia server che client NFS, perché sia condivide file sia vede file
remoti.
Metodi per montare directory remote
Una macchina può montare una directory remota nel proprio albero locale delle cartelle:
– al boot: se la macchina remota è spenta il boot fallisce, viene utilizzato solo per effettuare il
boot del S.O. via rete.
– a mano.
– automount: la cartella viene montata la prima volta che si tenta di accedere.
Cascading mount
La tecnica del mount a cascata consiste nel montare una directory remota all'interno di una directory
remota; si possono avere più livelli di directory remote annidate.
No transitive mount
Il transitive mount si ha quando viene montata una directory remota che a sua volta contiene un
riferimento ad un'altra directory su una terza macchina. Questa possibilità viene vietata per ragioni
di sicurezza: la directory sulla terza macchina, che non è considerata affidabile, non viene montata
nell'albero locale delle directory.
NFS Lookup
Viene effettuato per accertarsi che un file su cui si vuole lavorare esista e per creare un
collegamento ad esso.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 68 di 95

Remote Operations

NFS 2
È stata la prima versione di successo, è definita in una RFC di 28 pagine ed usa server stateless ed
idempotenti, non prevede caching quindi ogni operazione viene eseguita immediatamente.
Include procedure per leggere, scrivere ed ottenere attributi; il lookup restituisce un handle (un
numero identificativo con valenza illimitata che viene utilizzato per identificare la transazione).
L'autenticazione molto debole: il client dichiara un nome utente ed il server verifica in una tabella le
autorizzazioni dell'utente. Si può utilizzare un metodo di autenticazione esterno.
NFS 3
Definito in una RFC di 127 pagine, è una revisione di NFS2.
Vengono aggiunti il concetto di stato “non troppo critico” (anche se rimane stateless) ed il
caching lato server.
In caso il server effettui caching e ritardi le operazioni di modifica si avvisa il possibile pericolo.
NFS4
Definito in una RFC da 213 pagine, le novità introdotte in questa versione sono:
– server statefull.
– operazioni di open e close.
– la concorrenza viene gestita con lock (a livello di range di byte).
– Viene gestito lo stato della cache del client: si usa il meccanismo di delegation e recall, cioè
quando un client prende dei dati dal server effettua una delegation ed il server si ricorda che il
dato è posseduto da esso. Se un altro client effettua modifiche su quel dato il server invia una
recall ai client associati con quel dato per comunicare che il dato nella loro cache non è più
valido.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 69 di 95

SMB Server Message Block (Samba-CIFS)


Operazioni base del protocollo SMB:
– connettersi a, e disconnettersi da file e stampanti condivise.
– aprire e chiudere file.
– aprire e chiudere stampe di file.
– leggere e scrivere file.
– creare ed eliminare file e cartelle.
– cercare cartelle.
– ottenere e settare attributi dei file.
– bloccare e sbloccare range di byte nei file.
La sicurezza è inglobata: può essere di tipo Share Level, cioè la password è associata alla risorsa
(poco sicuro); oppure può essere di tipo User Level, cioè la password è associata all'utente.
Oplocks (Opportunistic locks)
Servono a gestire le cache fra client multipli, possono essere di vari tipi:
– Exclusive: un client chiede un exclusive oplock al server, se gli viene concesso ha diritto di
scrittura sul file e l'accesso esclusivo, quindi può copiare il file nella cache e una volta concluse
le operazioni effettuare il write-back.
– Shared: Un file può essere letto contemporaneamente da tutti i client che richiedono shared
oplock; in caso uno dei client voglia modificare il file deve chiedere al server.
– Batch: Vengono usati quando un file batch effettua numerose operazioni open e close su file, il
server ignora le richieste di open e close e processa solo le richieste di read e write, in questo
modo il client non perde l'accesso al file.
DFS
Si preoccupa della risoluzione dei nomi.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 70 di 95

Protocolli di supporto all'amministrazione

DHCP (Dynamic Host Configration Protocol)


Il protocollo DHCP serve a eliminare la necessità di configurare le reti di calcolatori, un server
DHCP assegna ai client tutte le impostazioni di rete.
Il dhcp prevede tre modi di
funzionamento:
– Automatico: assegnamento di un
IP statico da un pool.
– Manuale: assegnamento statico di
un indirizzo IP impostato
dall'amministratore.
– Dinamico: gli IP sono assegnati
dinamicamente.

Funzionamento dinamico
È necessario che ciascun calcolatore della rete possa comunicare via broadcast con almeno un
server DHCP. Ogni client all'accensione invia una richiesta DHCP in broadcast identificandosi
tramite il proprio indirizzo MAC, il server risponde comunicandogli gli IP disponibili ed i parametri
di configurazione della rete; a questo punto il client sceglie un IP e chiede al server conferma, una
volta che il server ha confermato la transazione termina. Quando il client si disconnette invia un
segnale di release che comunica al server la disconnessione; per evitare il problema degli orfani gli
IP hanno una scadenza entro la quale vanno rinnovati (gli orologi di server e client devono essere
sincronizzati, per evitare problemi il rinnovo viene effettuato un po' prima della scadenza).

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 71 di 95

SNMP (Simple Network Management Protocol)


Questo protocollo serve ad ottenere informazioni, a settare e trasportare variabili possedute da
ciascun nodo (ad esempio il numero di connessioni).
Lo SMI (Structure for Management
Information) è uno standard per la
definizione di variabili secondo il
quale le strutture dati definite in ogni
dispositivo sono contenute nel MIB
(Management Info Base).

Messaggio Descrizione
Get-request Richiede il valore di una o più variabili.
Get-next-request Richiede il valore della variabile successiva.
Get-bulk-request Richiede una tabella grande.
Set-request Aggiorna una o più variabili.
Inform-request Messaggio da gestore a gestore per descrivere il MIB locale.
SnmpV2-trap Segnalazione di trap da agente a gestore.
Questo protocollo si basa su UDP e può utilizzare un qualsiasi metodo di autenticazione. Sono
previsti i Proxy Agent, cioè dei software che convertono SNMP in protocolli proprietari per
comunicare con periferiche che non supportano SNMP.
Oggetti MIB (RFC 1156) Esempi MIB
● Sistema ● System (molto semplice)
● Interfacce ○ sysDescr (descrizione testuale)
● Traduzione degli indirizzi ○ sysObjectID (Codice prodotto)
● IP ○ sysUpTime (tempo da “last reboot”)
● ICMP ● ICMP: 26 dati statistici
● TCP ○ # totale messaggi ICMP
● UDP ○ # di quelli errati
● EGP ○ # per tipo
● e via complicando...

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 72 di 95

Protocolli per la gestione di utenti e informazioni di


amministrazione e configurazione

NIS/YP (Network Information Service/Yellow Pages)


Questo protocollo serve a gestire in modo coordinato e unico delle informazioni. Si basa su RPC e
UDP.
È stato soppiantato da NIS+, la cui principale differenza da NIS è l'utilizzo di un master server per
immagazzinare tutti i dati, evitando così la replicazione delle informazioni.
NIS+ a sua volta è stato sostituito dal Directory Service.
Informazioni gestite da NIS+: Host, parametri di boot, password, credenziali, gruppi, netgroups,
mail, alias, timezone, reti, netmask, ethernet, servizi, protocolli, RPC, auto.home, auto.master.

Directory Service
Un Directory Service permette di gestire delle informazioni su qualsiasi tipo di dati organizzabili ad
albero.
Lo standard X.500 (DAP, Directory Access Protocol) prevede la presenza di DSA (Directory
System Agents), DIT (Directory Information Tree) e “classi” di informazioni associabili a soggetti.
Esistono entries con un tipo ed un nome unico, il tipo identifica la classe di appartenenza, il nome
identifica l'oggetto ed è univoco.
Ogni entry ha un DN (Distinguished Name, cioè il path a partire dalla cartella radice) ed un RDN
(Relative DN, cioè il nome del file senza il path).
Questo standard non è stato usato per il DNS perché è molto pesante.

LDAP (Lightweight Directory Access Protocol)


Riprende il protocollo X.500 ma è più leggero e semplice, serve per implementare un directory
service. Le caratteristiche principali sono:
– le strutture sono gerarchiche.
– Le scritture sono poco frequenti, vengono effettuate per la maggior parte operazioni di lettura.
– Viene effettuato un bind TCP fra client e server.
Funzionamento: I client si autentica sul server ed effettua un bind (connessione) con un directory
object. Viene creata una connessione permanente sulla quale viaggiano le richieste (usa TCP),
quindi sono ammesse “outstanding requests”, di conseguenza le richieste hanno un loro ID.
Sono ammesse richieste di ricerca ricorsiva sull'albero, di ricerca COMPARE (che torna un valore
booleano) e di modifica (add, delete, replace); è possibile rinunciare ad una richiesta (ABANDON).
Esistono un tipo di risposta affermativa e 30 tipi di risposte negative.
Flexible Single Master Operation
Per le informazioni critiche esiste una sola copia master, per evitare che i dati siano modificati in
modo concorrente.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 73 di 95

Posta Elettronica
Client SMTP Server SMPT Server pop3/ Client
posta relay posta imap posta

Il server relay deve essere un server fidato, in caso non si ritenga fidato lo si può escludere inviando
i messaggi direttamente dal client al server di posta.
Protocollo SMTP (Simple Mail Transfer Protocol):
È il protocollo standard per l'invio di e-mail fra i mail server, e viene utilizzato anche per l'invio di
mail da client al mail server. Le comunicazioni SMTP avvengono tramite comandi testuali, ed i
messaggi sono trasmessi in chiaro e con codifica ASCII a 7 bit; non è previsto il controllo delle
credenziali dell'utente.
MIME (Multipourpose Internet Mail Extension):
Questo standard è stato definito per colmare alcuni difetti dell'SMTP, permette infatti di gestire le
lingue esotiche e gestire gli allegati. Ciascun messaggio MIME è composto da varie MIME
Entities, ognuna delle quali e composta da:
– Content: è formato da un tipo e un sottotipo; ad esempio text, image, audio, video; i sottotipi
non standard hanno il nome che inizia per X.
– Encoding: può essere:
– Base, ASCII a 7 bit come nell'SMTP.
– Quoted Printable, ASCII con l'aggiunta di alcuni caratteri non comuni che sono codificati
nella forma ”=C1C2” dove C1 e C2 sono due numeri esadecimali.
– Base64, in questa codifica è stato creato un alfabeto di caratteri a 6 bit; quando si trasmette il
file viene suddiviso in gruppi da 3byte che sono convertiti tramite l'alfabeto a 6bit in 4
caratteri a 6bit; a questo punto vengono aggiunti a ciascun carattere 2 bit non significativi e
viene trasmesso con codifica ASCII, quindi i messaggi trasmessi in Base64 hanno una
dimensione maggiore del 33% rispetto ai normali messaggi ASCII.
– ID, descrizione e contenuto.
POP Vs IMAP
Entrambi sono protocolli per la ricezione di mail. Il protocollo POP è pensato per i fat client, infatti
il client scarica la posta ed esegue tutte le operazioni in locale senza coinvolgere il server, l'IMAP
invece per i thin client perché la posta rimane sul server, il quale si preoccupa anche di eseguire
tutte le operazioni. Entrambi si basano su TCP.
Il funzionamento del protocollo POP si divide in tre fasi:
– autenticazione.
– accesso al maildrop.
– invio di comandi al maildrop (stat, list, retr, dele, rset).
L'IMAP ha un maggior numero di comandi rispetto al POP, ad esempio può organizzare la posta in
cartelle e cercare nella posta.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 74 di 95

HTTP
Versione 1.0: RFC di 60pagine scritte da W3C. Questa versione è stateless e basata su
richiesta/risposta, nonostante ciò si basa su TCP e viene aperta una connessione per ciascuna risorsa
(testo, immagini, ecc...) da trasferire.
Sono previste tre azioni effettuabili dal client:
– Get: prendere una risorsa.
– Head: prendere l'intestazione di una risorsa.
– Post: il client deve inviare informazioni al server.
Ciascuna risposta è formata da una linea di stato, da un header e dal body (usa MIME). Non è
prevista autenticazione, e vengono usati HTML, URI (Uniform Resource Identifier, un modo di
descrivere risorse tramite stringhe) ed URL (Uniform Resource Locator, è un URI particolare che
contiene modalità di accesso).
Versione 1.1: Introduce le Persistent Connections e le Outstanding Requests (pipelining delle
richieste), supporta il caching lato client con scadenza (quindi utilizza il write through), introduce le
azioni put, delete, option e trace.

Programmazione Web
Lato client: Le pagine contengono qualcosa di eseguibile (javascript, applet, flash,...).
Lato server: Le pagine sono generate da un programma prima di essere spedite al client.
– CGI (Common Gateway Interface): standard per l'interfacciamento fra server e programmi
esterni, se un client invoca un programma CGI il server lo esegue e invia al client la pagina
generata dinamicamente dal CGI.
– Linguaggi interpretati (php,asp,...): Le pagine HTML hanno inserti di codice che vengono
interpretati dal server prima di inviare la pagina, funziona bene per problemi di complessità
limitata.
– Architetture complesse (J2EE, .NET,...).
Per il funzionamento di tutte queste applicazione è necessario il concetto di stato, che HTML non
ha, si crea quindi il concetto di “sessione”. Sul server vengono memorizzati la sessione (che
contiene lo stato del client) ed il suo ID, ogni volta il client invia l'ID della sessione in modo che il
server possa conoscerne lo stato.
Il server può ricevere l'ID di sessione tramite:
– Cookie: File di testo contenente l'ID di sessione che il server deposita sul client e che il client
rimanda al server. Esistono quattro tipi di cookie: persistenti, cioè con una scadenza; non
persistenti, cioè che vengono cancellati alla chiusura del browser; locali, cioè provenienti dal
server che si sta visitando; e third party, cioè provenienti da un server diverso da quello che si
sta visitando (vengono utilizzati per monitorare e registrare i siti visitati dagli utenti).
– URL Rewriting: l'ID di sessione viene inserito in tutti i link della pagina, così che per ogni
pagina inviata il server conosce l'ID della sessione relativa al client che l'ha richiesta.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 75 di 95

WEB SERVICE
Definizione di Web Service:
Un Web Service è un software che rende se stesso disponibile su internet e usa un sistema di
messaggi basato sullo standard XML.
Un Web Service può avere un'interfaccia pubblica definita con comune grammatica XML.
L'interfaccia descrive tutti i metodi disponibili al client e specifica la firma di ciascun metodo. La
definizione delle interfacce è specificata tramite il Web Service Description Language WSDL.
Esistono dei semplici meccanismi per pubblicizzare la creazione di un Web Service e per
localizzare il Service e la sua interfaccia pubblica. Essi sono disponibili via UDDI (Universal
Description, Discovery and Integration).
Lo stack protocollare di un Web Service consiste principalmente in quattro aree:
– Service Transport: È responsabile del trasporto di messaggi fra applicazioni in rete ed include
protocolli come HTTP, SMTP, FTP e BEEP (Block Extensible Exchange Protocol).
– XML Messaging: È responsabile di codificare i messaggi in un formato XML comune, così che
possano essere compresi da tutti i dispositivi in rete. Questa area include protocolli come XML-
RPC, SOAP e REST.
– Service Description: È usato per descrivere l'interfaccia pubblica di un Web Service, viene
comunemente usato il protocollo WSDL.
– Service Discovery: Centralizza i servizi in un registro comune, così che il Web Service possa
pubblicare la loro locazione e descrizione, e rende più semplice scoprire quali servizi sono
disponibili in rete. Normalmente l'API UDDI è utilizzata per il service discovery.
Concettualmente è uguale a CORBA, ma è più pesante; si basa su RPC.
La differenza fra RPC e un Web Service è XML, che è parte integrante del Web Service e fornisce
un linguaggio comune per descrivere le chiamate a procedure remote, i servizi e la Web Service
Directory.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 76 di 95

Vantaggi dei Web Service:


– Forniscono interoperabilità tra le varie applicazioni software e le varie piattaforme.
– Usano standard e protocolli aperti, i protocolli e i formati dei dati sono testuali.
– Utilizzando HTTP possono passare attraverso la maggior parte dei firewall.
– Permettono a software e servizi di diverse compagnie di essere combinati.
– Permettono il riuso di servizi e componenti all'interno di un'infrastruttura.
– Facilitano un approccio distribuito all'integrazione delle applicazioni.
Svantaggi dei Web Service:
I principali svantaggi sono la presenza di molto overhead dovuto all'utilizzo di XML e l'immaturità
del sistema se comparato a standard per il distributed computing come CORBA.
J2EE:
È un architettura a 4 tier.

È un insieme di specifiche riguardanti:


– tipi di componenti software: non si possono creare classi come si vuole ma si devono
rispettare delle regole.
– contenitori di componenti: ambiente di esecuzione delle classi, specifica la vita di ogni classe.
– API.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 77 di 95

Flusso delle richieste:

Il client fa una richiesta HTTP che viene trasformata in un oggetto dall'HTTP servlet request.
Questo oggetto viene elaborato e viene prodotta una risposta sotto forma di oggetto (applicando il
Business Tier Database) che viene trasformata a sua volta in una richiesta HTTP e inviata al client.
Lo schema è completamente basato su servlet.
Per lo sviluppatore è più comodo integrare codici nell'HTML (JSP). Le JSP vengono trasformate in
servlet ed eseguite.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 78 di 95

EJB (Enterprise Java Beans):


si dividono in:
– Session Beans: rappresenta un certo client nell'application server; è non condiviso e non
persistente, termina quando termina il client.
I Session Bean si dividono in stateless (non si devono reistanziare se il client chiama dei metodi)
e statefull.
– Entity Bean: sono persistenti e possono essere condivisi, hanno una primary key e possono
essere legati ad un DB.
Ci sono due tipi di persistenza: Bean Managed e Container Managed.
– Message Driven Bean: invece di comunicare tramite un'interfaccia di metodi invocabili
comunicano tramite scambio di messaggi.
Invocazione dei metodi dei bean:
I bean possono essere invocati localmente, cioè nella stessa JVM, in remoto, cioè in un altra JVM
tramite RMI, e tramite web service.
Contenitori di componenti:
I più usati sono Tomcat (web container), Jboss e IBM Websphere.
Deploy:
Per deploy si intende l'organizzare i componenti all'interno dei contenitori; una volta organizzati
vengono gestiti tramite tool (come ANT).
Struttura di un web module:

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 79 di 95

SICUREZZA
Tipi di minacce:

Requisiti:
Per definite una trasmissione sicura, essa deve soddisfare quattro requisiti fondamentali:
– Segretezza o riservatezza dei dati.
– Autenticità.
– Integrità.
– Non disconoscimento, cioè l'autore della trasmissione deve essere identificabile univocamente
in modo che non possa negare di aver inviato il messaggio.
Tecniche di crittografia:

M EK C Dk D
plaintext ciphertext plaintext

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 80 di 95

Gli algoritmi di crittografia si basano su due operazioni:


– Trasposizione: cambiare la posizione dei caratteri (anagrammare).

– Sostituzione.

Per sapere se un algoritmo di cifratura è veramente robusto deve essere reso pubblico; in questo
modo dovrà resistere a degli attacchi da parte di persone che conoscono perfettamente la struttura
interna dell'algoritmo. L'unica cosa che deve rimanere segreta è la chiave.
Tipi di attacco:
Il tipo di attacco possibile varia in base ai pezzi di trasmissione che l'attaccante riesce ad
intercettare:
– Solo ciphertext: l'attaccante conosce l'algoritmo esatto e conosce il contenuto in maniera
approssimativa; per risalire al plaintext può effettuare brute force oppure un analisi statistica.
– Plaintext e ciphertext: l'attaccante cerca di risalire alla chiave.
– Chosen plaintext e ciphertext: approfittando di una connessione cifrata lasciata aperta
l'attaccante invia messaggi predefiniti ed intercetta gli stessi messaggi cifrati.
– Chosen ciphertext e plaintext: l'attaccante modifica un file cifrato e osserva le modifiche che
subisce il file una volta decifrato.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 81 di 95

Tipi di algoritmi:
– A chiave simmetrica (privata): In questi algoritmi la chiave per cifrare e per decifrare è la
stessa, l'autenticità è verificata solo se la chiave è conosciuta solo da mittente e destinatario;
mentre non è verificato il non disconoscimento in quanto la chiave è conosciuta da due soggetti.
Il problema principale è come scambiarsi la chiave in modo sicuro.
– A chiave asimmetrica (pubblica): Il meccanismo dipende da due chiavi tali che un file cifrato
con una possa essere decifrato solo con l'altra, e tali che sia impossibile risalire ad una chiave
conoscendo l'altra.
L'utente genera due chiavi: una privata ed una pubblica; la chiave privata la tiene segreta mentre
la pubblica la rende disponibile a tutti.
Quando vuole mandare un messaggio cifrato ha due possibilità:
1. Cifrare con la sua chiave privata: in questo modo chiunque può decifrare il messaggio grazie
alla sua chiave pubblica che ha reso disponibile; il messaggio non è segreto ma è autentico,
integro e non ripudiabile.
2. Cifrare con la chiave pubblica di un altro: in questo caso l'unico a poterlo decifrare è il
proprietario della chiave pubblica, tramite la sua chiave privata; in questo caso l'unico
requisito soddisfatto è la segretezza.
Combinando questi due metodi (cifrando due volte) si possono verificare tutti e quattro i
requisiti, al prezzo di avere un algoritmo pesante; l'algoritmo a chiave asimmetrica più famoso è
l'RSA.
Spesso vengono utilizzati entrambi gli algoritmi per effettuare una trasmissione cifrata: si generano
delle chiavi simmetriche di sessione, che vengono scambiate con un algoritmo a chiave
asimmetrica; in questo modo la chiave simmetrica viene scambiata in sicurezza, e si può
successivamente usare il più efficiente algoritmo a chiave simmetrica per cifrare la trasmissione.

HASH FUNCTION
Queste funzioni ricevono in ingresso una sequenza di bit arbitraria e producono in uscita una
sequenza di bit di lunghezza fissata.
M, lunghezza arbitraria F(X) Message Digest, lunghezza 128bit
Queste funzioni non sono invertibili e non esistono due ingressi diversi che producono lo stesso
Message Digest.
Gli algoritmi più diffusi sono:
– MD5: digest di 128bit
– SHA-1: digest di 160bit
– RIPEMD-160: digest di 160bit
– HMAC: usa una hash function a scelta più una chiave segreta

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 82 di 95

Firma digitale:
Permette di inviare messaggi autentici, ma non segreti; funziona così:
1. Il mittente genera l'MD del messaggio che vuole firmare.
2. Il mittente cifra il MD con la sua chiave privata.
3. Viene trasmesso il messaggio con allegato il MD cifrato.
4. Il destinatario riceve il messaggio e l'MD cifrato.
5. Il destinatario decripta il MD con la chiave pubblica del mittente.
6. Il destinatario calcola l'hash del messaggio.
7. Il destinatario confronta il MD ottenuto dal messaggio con quello inviato.
Se i due MD coincidono il messaggio non è stato alterato, inoltre l'autenticità è garantita dalla
cifratura asimmetrica.
La firma digitale viene utilizzata per distribuire le chiavi pubbliche.

PKI (Public Key Infrasturucture):


Esistono delle entità di certificazione (certification authority) le cui chiavi pubbliche sono installate
nel software; queste authority stilano un certificato contenente le chiavi pubbliche dei loro iscritti.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 83 di 95

AUTENTICAZIONE
Replay Attack:
Un trasferimento cifrato può essere intercettato, e essere successivamente rimandato più volte,
anche senza essere riusciti a decifrarlo. Questa possibilità deve essere impedita per evitare problemi
(come l'invio di più richieste di trasferimento di fondi), servono dei meccanismi che garantiscano la
“freschezza” dei messaggi.
Meccanismi di freschezza:
– time stamp: la data dell'invio è inserita nel messaggio.
– nonce: un numero random inserito nel messaggio.
Metodi di autenticazione:
R è il nonce, K è la chiave condivisa. Il problema è come condividere la chiave in sicurezza.

Questa è una versione ottimizzata dell'algoritmo precedente in cui è ridotto al minimo il numero di
trasferimenti effettuati.

Esempio di reflection attack. L'attaccante apre due sessioni identificandosi come Alice; nella prima
invia un nonce generato da lui; nella seconda invia il nonce di Bob ricevuto nella prima sessione, ed
in risposta ottiene il nonce di Bob criptato con la chiave condivisa fra Alice e Bob; a questo punto
utilizza questa chiave per chiudere la prima sessione ed autenticarsi come Alice.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 84 di 95

Durante il progetto di un protocollo di autenticazione è bene seguire tre regole:


1. L'iniziatore deve dimostrare chi è prima che l'abbia fatto il risponditore. Se ciò non accade il
risponditore corre il rischio di distribuire informazioni importanti ad uno sconosciuto.
2. L'iniziatore ed il risponditore devono usare chiavi diverse, anche se ciò significa avere due
chiavi condivise KAB e K'AB.
3. L'iniziatore ed il risponditore devono estrarre i loro numeri casuali da set differenti, ad
esempio l'iniziatore deve usare i numeri pari ed il risponditore deve usare i numeri dispari.
In questo caso tutte le tre regole sono state violate, portando a risultati disastrosi. Da notare che il
primo protocollo di autenticazione a cinque messaggi richiede che Alice provi per prima la sua
identità, quindi quel protocollo non è soggetto al reflection attack.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 85 di 95

Esempio di attacco Men In The Middle: Trudy decifra i messaggi in ingresso e cifra quelli in uscita,
in entrambi i sensi; così Alice e Bob hanno l'impressione di parlarsi direttamente.

Key Distribution Center (KDC):


Condividere le chiavi fra coppie di utenti è poco scalabile, si usa il Key Distribution Center (KDC)
che è un servizio di deposito di chiavi private simmetriche, che usa le chiavi depositate per generare
chiavi di sessione.

Alice invia il contenuto del messaggio 2, ottenuto interagendo con il KDC, a Bob come prova di
autenticità; la chiave di sessione Ks viene generata dal KDC.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 86 di 95

Funzionamento del protocollo Kerberos: Kerberos è basato su KDC, per reti di grandi dimensioni
sono previsti due KDC, il primo svolge il ruolo di Authentication Server (AS), il secondo Ticket
Granting Server (TGS).
Alice comunica con il AS che le fornisce la chiave di sessione per parlare con il TGS al quale, dopo
aver comunicato un timestamp K(t) per garantire la freschezza, chiede un'altra chiave di sessione
che userà per comunicare con Bob; il TGS le comunica sia la chiave di sessione KAB che una prova
di autenticità KB(A,KAB).

IPSEC
IPSec è la versione sicura del protocollo IP, può garantire che il messaggio abbia segretezza,
autenticità, oppure entrambe.
Tipi di funzionamento Modo Trasporto Modo Tunnel

Tutti Autentica il payload dell'IP e Autentica l'intero pacchetto IP interno


porzioni dell'header IP ed IPv6. (header interni più il payload IP) più
porzioni degli header IP ed IPv6
esterni.
ESP Cripta il payload ed ogni header Cripta il pacchetto IP interno.
IPv6 che segue l'header ESP. L'header interno, che contiene l'IP del
vero destinatario è cifrato.

ESP con Cripta il payload ed ogni header Cripta e autentica il pacchetto IP


autenticazione IPv6 che segue l'header ESP. interno. L'header interno, che contiene
Autentica il solo il payload IP. l'IP del vero destinatario è cifrato.
Nel modo tunnel cifrato si cifra l'IP originale per evitare attacchi alle macchine più critiche e più
cariche che sono dietro NAT.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 87 di 95

VPN (Virtual Private Network)


Questa tecnica permette di creare una rete locale sicura, grazie al protocollo IPSec utilizzato in
modalità tunnelling, utilizzando Internet come mezzo trasmissivo.
I dati che passano in queste reti sono cifrati, però se un malintenzionato intercetta i pacchetti cifrati
può capire quanto è intenso il traffico tra le macchine collegate alla VPN; con questa informazione
l'attaccante può pianificare un attacco quando la rete è maggiormente utilizzata.
Per non divulgare questa informazione si usa il Traffic Padding, cioè si inviano 24 ore su 24 dei
pacchetti vuoti, in modo che dall'esterno si veda la rete sempre satura.

Security Policy Database (SPD)


In questo database sono contenute le informazioni necessarie a stabilire quali pacchetti vadano
oppure no criptati; i record di questo database contengono i parametri:
– IP del mittente.
– IP del destinatario.
– Protocollo di trasmissione.
– Porta del mittente.
– Porta del destinatario.
Al momento di instaurare una connessione, al flusso del traffico vengono associate delle strutture
dati temporanee chiamate Security Association (SA) che contengono:
– I parametri sopra elencati.
– Un ID (SPI).
– Delle informazioni generiche sul modo di funzionamento di IPSec.
– Delle informazioni specifiche sul dialogo IPSec.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 88 di 95

Anti Replay Mechanism


Il protocollo di trasmissione TCP non garantisce la ricezione ordinata di pacchetti, quindi può
verificarsi il caso in cui il destinatario debba aspettare per un tempo indefinito un pacchetto.
Nelle comunicazioni sicure i ritardi non sono ammessi, perché forniscono ad un malintenzionato
tempo sufficiente per eseguire un attacco.
Per questo motivo si utilizza una Anti Replay Window che stabilisce per quanto si può aspettare un
pacchetto: se il pacchetto con numero di sequenza X ritarda, e la Window ha dimensione W, la
connessione sarà terminata se il pacchetto X non sarà ricevuto prima del pacchetto con numero di
sequenza X+W+1.

Security Socket Layer (SSL) / Transport Layer Security (TLS)


Si inseriscono fra il quarto ed il quinto livello del modello ISO/OSI, e sono protocolli di trasporto
con funzioni di sicurezza.
SSL è formato da quattro diversi protocolli.
1) Handshake Protocol: crea un canale sicuro.
2) Change Cipher Protocol: serve a segnalare agli altri
protocolli un cambio dell'algoritmo ci cifratura, e si
preoccupa anche di rinnovare le chiavi di sessione.
3) Record Protocol: utilizzato durante il funzionamento
normale.
4) Alert Protocol: utilizzato per gestire le anomalie.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 89 di 95

Funzionamento:

Si comprimono i messaggi per togliere la ridondanza e le proprietà statistiche del testo, per rendere
più difficile la decifratura (MAC=MD generato con una chiave particolare).

Initialization Vector: serve a perturbare la sequenza dei blocchi: la cifratura di un blocco dipende
anche dal blocco precedente, quella del il primo blocco dipende dall'inizialization vector.

Sessione SSL: Lo stato di sessione di SSL include i seguenti elementi


– Identificatore di sessione: Una sequenza arbitraria di byte scelta dal server per identificare uno
stato di sessione attivo o in grado di riprendere.
– Peer certificate: può essere nullo.
– Compression method: L'algoritmo usato per comprimere i dati prima della cifratura.
– Specifiche di cifratura: Specifica l'algoritmo per la cifratura dei dati (null, DES, ecc.) e un
algoritmo MAC (MD5 o SHA), definisce anche gli attributi crittografici come hash_size.
– Master secret: una chiave segreta da 48 bit condivisa fra client e server.
– Is resumable: un flag che indica se la sessione può essere usata per iniziare nuove connessioni.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 90 di 95

Secure Shell (SSH)


Versione 1:
Il server ha due chiavi: una stabile di 1024bit detta Host, una transitoria da 768bit rigenerata ogni
ora.
Questa versione prevede che la chiave pubblica sia nota e che la chiave di sessione sia generata dal
client.
L'autenticazione viene effettuata lato server tramite un protocollo challenge-request ed il client può
autenticarsi tramite:
– File di configurazione residente sul server: non è sicuro.
– RSA a livello di host: è necessario conoscere la chiave pubblica del client.
– RSA a livello di utente: è necessario che ogni utente abbia la sua chiave pubblica.
– Password: gli utenti normalmente memorizzano la password per non doverla ridigitare, quindi
diventa insicuro.
Versione 2:
Si ha una sola chiave stabile ed alla generazione della chiave di sessione partecipano sia il server
che il client; viene usata la cifratura con MAC.

Pretty Good Privacy (PGP)


Questo protocollo cifra le email prima che lascino il client, permettendo di comunicare in modo
sicuro.
Sorge il problema di condividere le chiavi pubbliche visto che non esiste alcuna authority; si crea
una rete gerarchica di scambio per le chiavi basata sulle proprie conoscenze e contatti.
Funzionamento:

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 91 di 95

Ricezione di un messaggio PGP:

Formato generale di un messaggio PGP:


Notazione:
EKUb = cifratura con la
chiave privata dell'utente b
EKRa = cifratura con la
chiave pubblica dell'utente a
EKs = cifratura con la chiave
di sessione
ZIP = Funzione di
compressione ZIP
R64 = Funzione di
conversione Radix-64

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 92 di 95

Firewall
Quando si sceglie o progetta un firewall bisogna effettuare delle scelte riguardo a:
– Tipo di firewall (hardware o software).
– Statefull o stateless: un firewall stateless esamina i pacchetti singolarmente, ed in genere è più
performante e robusto, un firewall statefull tiene in memoria le connessioni TCP aperte e può
quindi accorgersi se un pacchetto non è richiesto, è più completo ma meno performante.
– Livello ISO/OSI nel quale opera: Se opera al livello 3 o 4 controlla solo gli header di questi
due livelli. La decisione di far passare o meno un pacchetto viene presa analizzando:
● L'indirizzo IP sorgente: contenuto nell'header IP.
● L'indirizzo IP destinazione: contenuto nell'header IP.
● Il tipo di protocollo: l'header IP specifica se i dati incapsulati nel datagramma appartengono
al protocollo TCP, UDP o ICMP.
● Porta sorgente: contenuta nell'header TCP o UDP.
● Porta destinazione: contenuta nell'header TCP o UDP.
● Bit di ACK: contenuto nell'header TCP, specifica se il pacchetto è l'acknowledgment di un
pacchetto TCP ricevuto.
È facilmente aggirabile cambiando la porta di default del protocollo applicativo (redirigere sulla
porta 80).
Se opera al livello applicazione prende il nome di Proxy e permette di controllare anche gli
header di livello applicativo e può quindi distinguere che tipo di dati vengono trasferiti; la
connessione viene spezzata in due ed il client si collega al proxy il quale si collega al server, il
proxy può anche svolgere le funzioni di NAT, cache, ecc. Il proxy può essere non trasparente, se
il client è configurato per passare dal proxy, oppure trasparente se non è necessaria alcuna
configurazione.

I firewall funzionano in entrambe le direzioni, perché se una macchina è infetta il firewall deve
proteggere il resto della rete da quella macchina.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 93 di 95

Architetture di Firewall
Screening Router: Lavora al livello 3-4 del modello ISO/OSI.
Firewall
Rete Locale Screening Router Internet

Dual-homed Host (Proxy): Lavora a livello applicativo.


Firewall
Rete Locale Dual-homed Host Internet
IP forwarding
turned off

Architetture miste: Esiste un router che effettua l'IP forwarding (client e server comunicano
direttamente) solo su alcune porte; tutte le connessioni che sono bloccate dal router vengono girate
ad un proxy (Screened host) il quale le controlla a livello applicativo e decide se farle passare
oppure bloccarle, il proxy è l'unico abilitato all'IP forwarding per quei tipi di traffico.

Se ci sono dei server che devono offrire dei servizi devono esistere delle regole specifiche che
permettano alle macchine esterne alla rete di comunicare con i server.
Si usano due proxy, uno esterno che fa passare le connessioni verso i server, ed uno interno che le
blocca; in questo modo si crea una rete perimetrale (demilitarized zone DMZ) alla quale si può
accedere dall'esterno, ed una rete protetta che è inaccessibile, i server vengono inseriti della DMZ,
le altre macchine nella rete interna.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 94 di 95

Metodi di attacco
– Scanning o fingerprinting: Sono due metodi per ottenere informazioni sulla rete che si vuole
attaccare; come indirizzi IP, porte aperte, Sistemi Operativi installati nelle macchine della rete,
servizi offerti (server web, mail, ecc.).
Dumb scanning: Si utilizza se si vuole effettuare scanning su un server A senza essere
individuati; per effettuarla si identifica un altro server B, soggetto a poco traffico, e si inviano
una serie di richieste ping. A questo punto si invia una richiesta di connessione (SYN) verso la
porta di A che si vuole controllare, modificata in modo da sembrare inviata da B. Se la porta è
aperta il server A invierà un pacchetto SYN/ACK a B, il quale risponderà a sua volta con un
messaggio SYN/ACK. L'aggressore individua l'avvenuta risposta sotto forma di un incremento
maggiore di 1 nel parametro ID delle risposte ICMP relative alle sue richieste di ping. Se la
porta è chiusa invece A risponderà con un pacchetto RST/ACK, che sarà ignorato da B.

– Sniffing: Consiste nel controllare la rete locale alla quale si ha accesso per ottenere
informazioni, viene spesso utilizzato per ottenere le chiavi di protezione delle reti wireless.
Lo sniffing può essere identificato tramite:
1. Ping con IP vero e MAC falso, quando una scheda di rete effettua sniffing risponde alle
richieste di ping anche se il MAC nella richiesta non corrisponde al proprio.
2. Informazioni ARP broadcast: si inviano in broadcast le informazioni riguardanti un server,
dopodiché si controllano le connessioni effettuate, se un client effettua una connessione
senza fare una richiesta ARP significa che ha ricevuto l'informazione in broadcast e quindi
sta sniffando.
3. Trappola (false coppie utente/password): si finge un collegamento con una password fasulla
in chiaro, se viene effettuata una connessione con quella password è sicuramente stata fatta
da uno sniffer.

Stefano Bennati 23/09/2008


Appunti di Impianti Informatici Pagina 95 di 95

– Spoofing: Farsi passare per qualcun altro.


1. IP Spoofing: l'attaccante utilizza l'IP di una macchina non in funzione per inviare le proprie
richieste. Può essere cieco se l'attaccante non è in grado di vedere le risposte perché il server
risponde all'IP fasullo; oppure non cieco se l'attaccante vede le risposte grazie allo sniffing.
Lo spoofing cieco non permette di continuare una connessione perché per farlo sono
necessari i sequence number contenuti nelle risposte che non vengono ricevute.
2. DNS Spoofing: l'attaccante fornisce una falsa coppia nome/IP, può essere attuato tramite
Cache Poisoning, cioè la modifica della cache di un DNS secondario male amministrato.
3. Web Spoofing: l'attaccante si identifica come un altro sito (phishing); una volta che l'utente
accede al sito fasullo la comunicazione viene fatta passare da un proxy trasparente che la
monitora, poi l'utente viene reindirizzato al sito originale.
– DOS (Denial Of Service) oppure DDOS (Distributed DOS): Consiste nell'impedire il
funzionamento di un servizio tramite una vulnerabilità del sistema (come il Ping of Death) o
tramite sovraccarico del sistema. Il sovraccarico si può ottenere tramite:
1. Half open: instaurare moltissime connessioni semi aperte, ossia senza l'ultimo dei tre
passaggi del 3-way handshaking, così da mettere il sistema in attesa delle risposte e
rallentare il traffico.
2. Forza Bruta: inviare tantissimi ping:
Un modo più efficace è eseguire IP spoofing ed inviare un ping in broadcast con l'IP della
vittima come mittente. Se si riesce ad ottenere il controllo di alcune reti si può effettuare un
attacco Brute Force su più livelli così da non essere rintracciabile (attacco Smurf).

Stefano Bennati 23/09/2008