Sei sulla pagina 1di 4

RELAZIONE PROGETTO

Esame di

RETI DI CALCOLATORI 2009/2010

Livello: medio-basso Scelte progettuali

Componenti del gruppo: GINO CAPPELLI ANDREA MELIS

Numero di Thread utilizzati: 3 errorsManager (gestione degli errori) transmitter (invio pacchetti) receiver (ricezione pacchetti) Motivazioni: Aumento delle prestazioni (invio e ricezione simultanei) Thread specializzati su un compito pi specifico Migliore leggibilit del codice

transmitter

APP

receiver

errorsManager

Analisi transmitter Per ogni richiesta di invio dati: Suddivide il messaggio in n pacchetti di 512 byte, comprensivi di header e data Invia i pacchetti uno dopo l'altro, in caso di errore lo sottopone

all'errorsManager Terminata con successo una richiesta di invio e soddisfa sequenzialmente tutte le altre richieste rimanenti. Se la trasmissione si interrompe quando mancano t pacchetti alla fine, attende che l'errorsManager la ripristini e continua ad inviare i rimanenti n-t pacchetti (non necessario rinviare tutti i dati in caso di ripristino) Ripristino affidato all'errorsManager (transmitter non contiene codice aggiuntivo inutile per ripristino) Analisi receiver Il receiver: Riceve i pacchetti (indipendentemente delle connessioni) e li smista nei buffer appropriati Se la connessione cade durante la ricezione di un pacchetto, si comunica all'errorsManager di ripristinarla per poi ritentare la ricezione Analisi errorsManager L'errorsManager: Lavora su un insieme di file descriptors: ripristina sequenzialmente un file descriptor alla volta nell'insime. Per ogni connessione ripristinata si comunica al thread appropriato di ripartire e si passa al ripristino del prossimo fd Ripristino affidato sempre all'errorsManager (codice ri ripristino implementato solo una volta per tutti i thread) Implementato il maccanismo degli IDS (Identificatori di Sessione): per ogni ripristino di connessione Server e Client si scambiano un intero prestabilito per capire se si tratta di un tentativo di riconnessione da una richiesta di nuova connessione Informazioni aggiuntive

Write() non bloccante come da consegna: passa i dati al transmitter che li invier all'altro end-system Read() attende che il receiver abbia riempito il buffer di ricezione in modo da poter leggere

Si sono implementate varie utility per semplificare la stesura del codice: Buffer utilities: gestine dei buffer (inserimento, cancellazione etc...) Conditions utilities: gestione concorrenza (initCondition, waintOnCondition, signalOnCondition) Lists utilities: gestione delle liste (remove, insert, get etc...) FIFO utilities: gestione code (initFifo, fifoInqueue, fifoDequeue)

Potrebbero piacerti anche