cerca
Sistemi Operativi - Strutture dei sistemi distribuiti
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Sistemi Operativi - Strutture dei sistemi distribuiti

Torna alla pagina di Sistemi Operativi


 :: Appunti 2.0 ::

Strutture dei sistemi distribuiti

Concetti di base

Un sistema distribuito è un insieme di sistemi di elaborazione che non condividono memorie o orologi e che sono connessi tra loro mediante una rete di comunicazione. Ognuno dei singoli sistemi può essere chiamato con molti nomi, ad esempio host o macchina, e mentre le sue risorse interne sono definite locali, quelle che può raggiungere attraverso la rete sono dette remote.

Obiettivo dei sistemi distribuiti è fornire un ambiente efficace e conveniente per la condivisione di risorse tra macchine diverse.

Vantaggi dei sistemi distribuiti

I principali motivi per costruire sistemi distribuiti sono:

  • condivisione delle risorse: ogni utente è in grado di usare le risorse (file, periferiche, potenza di calcolo) disponibili su macchine remote
  • velocità di calcolo: può aumentare se l'elaborazione viene suddivisa ed eseguita in modo concorrente su più host. Si può condividere anche il carico di lavoro, distribuendolo su più macchine così da evitare sovraccarichi
  • affidabilità: il guasto di un host generalmente non compromette il funzionamento dell'intero sistema. Certo deve essere progettato con intelligenza, con ridondanze adeguate sia hardware che dei dati
  • comunicazione: molto simile a quella che avviene fra i processi all'interno di un singolo sistema, così che possa essere facilmente estesa all'ambiente distribuito
  • scalabilità: capacità del sistema di adattarsi al variare del carico di servizio

Tutti questi fattori hanno fatto sì che le industrie si orientassero verso i sistemi distribuiti e allo stesso tempo verso un downsizing dei sistemi di calcolo, dal momento che reti di macchine a medio-basse prestazioni hanno nell'insieme ottime funzionalità e costi ridotti.

Tipi di sistemi distribuiti

Esistono due grandi categorie di sistemi orientati alle reti e li vedremo nei prossimi capitoli.

Sistemi operativi di rete

Un sistema operativo di rete fornisce un ambiente in cui gli utenti, che sono consapevoli della molteplicità delle macchine, possono accedere a risorse remote.

Tre importanti funzioni di questo sistema sono:

  • sessioni di lavoro remote, ovvero la possibilità per un utente di collegarsi ad un'altra macchina in remoto (previa login) e interagire con essa come se fosse in locale. E' ciò che fa il programma telnet per Internet
  • trasferimento remoto di file tra host, con una copia esplicita dal file system remoto a quello locale. In internet ciò è reso possibile dal protocollo ftp
  • attivare procedure remote attraverso le Remote Procedure Calls (RPC)

Notare che ogni computer conserva il proprio file system locale e (molto importante) la posizione dei file non è trasparente agli utenti, che devono sapere esattamente dove si trovano. Abbiamo già detto infatti che non avviene una vera condivisione di dati: l'utente può solo copiarli da un host all'altro.

Sistemi operativi distribuiti

In un sistema operativo distribuito gli utenti accedono alle risorse remote nello stesso modo in cui accedono a quelle locali, e la migrazione dei processi e dei dati da un host all'altro avviene sotto il controllo del sistema operativo distribuito.

La migrazione dei dati può avvenire in due modi:

  1. quando un utente richiede un file su una macchina remota, questo viene interamente trasferito così da potervi accedere in locale. A elaborazione compiuta, se è stato modificato, viene interamente ricopiato nella macchina di origine
  2. simile al precedente, ma a differenza dell'intero file vengono trasferite solo le parti effettivamente necessarie al processo in quel preciso momento

In entrambi i metodi il sistema non si limita a trasferire, ma fa anche le traduzioni opportune se le rappresentazioni dei dati (big endian, little endian) non sono compatibili.
Qual è la tecnica migliore? Dipende dalle porzioni di file che vengono mediamente richieste.

In alcuni casi è preferibile trasferire la computazione piuttosto che i dati, scelta particolarmente saggia se il tempo di trasferimento è più lungo del tempo di esecuzione di un comando remoto. Il tutto può essere realizzato con una RPC o con l'attivazione di un processo remoto per mezzo di scambio di messaggi.

Una logica estensione della migrazione della computazione è quella dei processi, dove l'esecuzione di questi ultimi non avviene interamente nell'host in cui sono stati attivati. Ci sono due tecniche per spostarli, una che prevede la migrazione in modo tatalmente trasparente all'utente (più rapida su sistemi omogenei), l'altra che invece permette o richiede le modalità di migrazione (più portabile e configurabile). Alcuni motivi per la migrazione dei processi sono il bilanciamento del carico, una maggiore velocità di calcolo, maggiore compatibilità dell'hardware o del software, accesso ai dati, ecc.

Topologia

I vari host in un sistema distribuito possono essere connessi fisicamente in molti modi diversi, e le configurazioni ottenute si possono valutare in base al costo dell'installazione e della comunicazione (tempo + soldi) e dalla disponibilità, ovvero dall'ampiezza della zona in cui si può accedere ai dati malgrado il guasto di alcuni collegamenti o macchine.

Le reti completamente connesse sono molto performanti e affidabili, ma hanno costi d'installazione spesso insostenibili; gli si preferisce quelle parzialmente connesse, nelle quali vanno però fornite informazioni d'instradamento a quegli host che non sono direttamente collegati.

La scelta della configurazione migliore dipende dal sistema che si vuole ottenere e dalla situazione ambientale, non esiste una topologia migliore in assoluto.

Comunicazione

Attribuzione e risoluzione dei nomi

Per identificare in modo certo i siti di una rete e i loro processi è necessario dare loro un nome univoco. I processi su sistemi remoti vengono usualmente identificati dalla coppia <nome host, identificatore>, dove nome host è unico nella rete e l'identificatore è il comune id del processo.

La risoluzione dei nomi deve tradurre il nome di una macchina in un valore numerico che descriva il sistema di destinazione all'hardware della rete. Ciò avviene o per mezzo di una lista mantenuta in locale da ogni host che riporta tutte le corrispondenze tra nomi e indirizzi (soluzione onerosa), o distribuendo tali informazioni tra i computer della rete ed utilizzando un protocollo per la risoluzione. Questo secondo sistema è quello del server dei nomi del dominio (DNS), reso nel tempo sempre più efficiente e sicuro grazie a numerosi raffinamenti.

Strategie di instradamento

Se in un sistema distribuito esistono più percorsi per collegare due host, allora ci sono diverse opzioni di instradamento. Ogni sito ha una tabella di instradamento mantenuta aggiornata che indica i vari percorsi alternativi per la trasmissione di un messaggio, e che può contenere informazioni aggiuntive come velocità e costi.

Sono tre gli schemi di instradamento più comuni:

  • instradamento fisso: un percorso tra due macchine viene determinato a priori e non cambia a meno di guasti
  • instradamento virtuale: viene definito un percorso tra due host valido per tutta la durata di una sessione
  • instradamento dinamico: il percorso da impiegare per inviare un messaggio viene scelto al momento dell'invio

L'instradamento dinamico è il più complicato da organizzare e gestire, ma è il più efficace in ambienti complessi data l'adattabilità alle variazioni di carico e di gestione dei guasti.

Il gateway è un dispositivo hardware dedicato che collega la rete locale ad altre reti, gestendo l'eventuale cambiamento di protocollo di comunicazione. Gli host si collegano al gateway con instradamento statico, mentre quest'ultimo si collega alla rete con schema dinamico. Un altro dispositivo molto importante in una rete è il router, responsabile dell'instradamento dei messaggi tra due reti.

Strategie di pacchetto

I messaggi di per sé non hanno una lunghezza standard, ma per semplificare la progettazione del sistema si preferisce realizzare comunicazioni con messaggi a dimensione fissa chiamati pacchetti (o frame o datagram). La comunicazione implementata a pacchetti può avvenire mediante messaggi senza connessione inaffidabili (senza garanzia di ricezione, esempio l'UDP) o affidabili (esempio TCP).

Strategie di connessione

Una volta che i messaggi sono in grado di arrivare a destinazione i processi possono istituire delle sessioni di comunicazione per scambiarsi le informazioni. Ne vengono comunemente usate di tre tipi:

  • commutazione di circuito, con un collegamento fisico permanente che perdura per tutta la comunicazione e che non può essere usato da altri processi. Richiede alti tempi di attivazione e può sprecare molta larghezza di banda
  • commutazione di messaggi, in cui si stabilisce un collegamento temporaneo tra due processi che termina col completamento del trasferimento. I collegamenti fisici vengono allocati dinamicamente per brevi periodi in base alle necessità
  • commutazione di pacchetto, dove ciascun pacchetto di un messaggio è inviato separatamente su una connessione attivata dinamicamente. E' la tecnica che fa il miglior uso della larghezza di banda e per questo è tra le più utilizzate. Tuttavia ha un alto overhead per ogni messaggio, dato che deve contenere diverse informazioni per essere suddiviso in pacchetti e correttamente riassemblato

Gestione dei conflitti

Le collisioni in un sistema distribuito avvengono quando a un host arrivano contemporaneamente due messaggi, che diventano entrambi indecifrabili. Esistono molte tecniche per evitarlo, tra cui ricordiamo:

  • il rilevamento della portante ad accesso multiplo (CSMA) unito al rilevamento delle collisioni (CD). In breve, prima di trasmettere un messaggio l'host verifica che la linea di comunicazione non sia usata da altri; se si rileva una collisione si interrompe la trasmissione e la si ritenta dopo un intervallo di tempo casuale
  • passaggio di token per imporre la turnazione, adoperato nei sistemi con struttura ad anello. La macchina può inviare un messaggio solo se è in possesso del token, che viene passato tra i vari host a intervalli regolari

Protocolli di comunicazione

Nella progettazione di una rete di comunicazione i fattori critici da tenere in considerazione sono le comunicazioni asincrone, le interazioni tra ambienti non omogenei e la probabilità di avere errori. L'obiettivo che ci si prefigge è dunque creare un ambiente omogeneo di comunicazione che la astragga e virtualizzi così da semplificare la progettazione e avere una gestione efficiente del sistema.
La soluzione è l'adozione di protocolli di comunicazione da applicare a strati distinti del sistema, utilizzati un po' come se fossero i driver della rete. La comunicazione avviene ovviamente solo tra strati equivalenti.

Il modello teorico standard è l'ISO/OSI, che divide il sistema in:

  • strato fisico, responsabile della definizione dei dettagli elettromeccanici della trasmissione fisica. Implementato nell'hardware
  • strato di collegamento dei dati, che gestisce la trasmissione dei pacchetti e rileva e corregge gli errori
  • strato di rete, che si occupa delle connessioni e dell'instradamento dei pacchetti
  • strato di trasporto, che partiziona e mantiene ordinati i pacchetti di un messaggio, ne controlla il flusso e gestisce gli errori
  • strato di sessione, che realizza le sessioni e i protocolli di comunicazione tra processi
  • strato di presentazione, che risolve le differenze di formato tra le varie macchine
  • strato di applicazione, responsabile dell'interazione con gli utenti

Questo è un buon modello, ma storicamente si è preferito adottarne uno più semplice ed efficiente: il TCP/IP, detto anche modello reale. Il protocollo TCP corrisponde allo strato di trasporto, è orientato alle connessioni ed è affidabile (l'opposto dell'UDP). Il protocollo IP è invece responsabile dell'instradamento dei pacchetti attraverso Internet.

Robustezza

In un sistema distribuito sono molti i tipi di guasti in cui si può incorrere, ma per garantire la robustezza bisogna comunque individuarli, rinconfigurare il sistema per poter continuare la computazione e infine recuperare la configurazione iniziale a guasto riparato.

Individuazione dei guasti

In un ambiente senza memoria condivisa è di solito impossibile distinguere le tipologie di guasto, se hardware o software ad esempio, ma ci si deve accontentare di rilevarli (che è già tanto). Tra le tecniche di rilevamento le più utilizzate sono il monitoraggio periodico con handshaking, l'impostazione di un time-out (superato il quale viene sollevato un errore) e la computazione duplicata con confronto dei risultati (che oltre a rilevare il guasto offre una controprova della correttezza dei risultati).

Riconfigurazione del sistema

Una volta rilevato che un certo host è guasto, bisogna anzitutto aggiornare tutte le tabelle di instradamento della rete affinché la comunicazione non passi da lì. Bisogna poi fare in modo che siano tutti informati del fatto che i servizi erogati da quella macchina non sono temporaneamente disponibili, e anzi bisogna cercare di far migrare tali servizi su altri siti.

Recupero di un guasto

A guasto riparato la macchina deve essere reintegrata nel sistema in modo che gli altri host possano essere informati (tramite handshaking) del suo ripristino. Le tabelle interne della macchina verranno quindi ripristinate e aggiornate, e gli verranno recapitati i messaggi pendenti.

Problemi progettuali

L'obiettivo principale di un progettista di sistemi distribuiti è renderli del tutto trasparenti agli utenti, dando l'illusione che stiano operando su un sistema centralizzato convenzionale.

Altri aspetti che vanno tenuti in considerazione sono:

  • la mobilità dell'utente, che non deve essere obbligato a collegarsi a un unico host specifico
  • la tolleranza ai guasti, ovvero il sistema dovrebbe continuare a funzionare anche in caso di guasto - anche se con funzionalità in meno - fino alla riparazione
  • la scalabilità, ovvero la capacità del sistema di adattarsi all'aumento del carico di servizio

Torna alla pagina di Sistemi Operativi