Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi N - Z > Reti di calcolatori
 
[Es] - Domanda 3
Clicca QUI per vedere il messaggio nel forum
Lunik
Come si fa?

"Un certo servizio che chiameremo DCEP (Delayed Character Echo Protocol) può essere descritto informalmente come segue: un client invia un byte B a un server DCEP mediante un datagram UDP; il server riceve B; il server si mette in pausa per 3 secondi; il server invia B al client mediante un secondo datagram UDP; il client riceve B. Ora, si immagini che il servizio DCEP venga erogato da un server S sequenziale (o iterativo, o monothread in Java, o monoprocesso in C), e che dapprima un client C1, e successivamente un client C2, richiedano a S il servizio DCEP servendosi della porta P (la stessa per entrambi). Supponendo che i tempi di trasmissione e di propagazione dei datagram UDP siano trascurabili, e che le richieste di C1 e C2 siano distanziate tra loro di un secondo (1s), dopo quanti secondi dalla ricezione della richiesta di C1 il server S riuscirà a completare l’erogazione del servizio richiesta da C2? Come cambia (se cambia) la risposta, nel caso in cui C1 e C2 dovessero rivolgere le loro richieste sempre a S, ma questa volta servendosi – rispettivamente – di due diverse porte P1 e P2? Si giustifichino tutte le risposte."

Lunik
duqneu sono in dubbio sul ragionamento da fare:

1)C1 chiede servizio al Srv
Srv riceve il servizio
Srv fornisce il servizio a C1
Srv si mette in pausa x 3 secondi

oppure

2)C1 chiede il servizio al Srv
passa un secondo
C2 chiede servizio al Srv

Srv riceve domanda da C1
srv riceve domanda da C2

si mette in pausa per 3 secondi
Srv risponde a C1

e si mette in pausa x 3 sec
Srv risponde a C2

non è 6?????????????????? (chiede C2 dopo quanto viene servito)

ne\'79
Per me è giusta la risposta 6 secondi.
In quanto il client C2 e' già in coda sulla porta P mentre il server eroga il servizio a C1.

Il problema di questo esercizio è la seconda parte : cosa cambia se si utilizzano 2 porte diverse?
Se il server è iterativo non dovrebbe essere la stessa cosa?

Lunik
uhm se le due domnde dei client arrivano allo stesso tempo su porte diverse... il Server a chi risponde x primo?

Server sequenziale:
"Un server sequenziale elabora una richiesta per volta ed accoda le altre."

Da questo link:
http://lia.deis.unibo.it/Courses/Re...Socket/SO15.htm

quindi prima risponde a C1, poi risponde a C2..

ha ragione Imation... 1+3+3 = 7!

ne\'79
Questo è un caso molto particolare penso che ne scelga una a caso.
Nell'esempio però arriva prima la richiesta del client C1. Sugli appunti ho scritto che un server iterativo esegue un servizio alla volta, però se intendiamo il numero di porta come un servizio allora probabilmente il server eseguirà 2 servizi (che sono in realtà lo stesso!!!). quindi il Client2 riceverà la risposta dopo 4 secondi dalla richiesta di C1.

Sarei proprio curioso di sapere qual è la risposta giusta?
Cosa dici se mandiamo una e-mail al prof ce lo dice?
O Ormai è tardi?

ne\'79
No 7 per me non può proprio essere anche perchè tra C2 è già in coda mentre il Server sta eseguendo il processo quindi la somma e' 3 + 3 = 6 !!!

Lunik
intnedi x la 2a parte del'esercizio o la prima? ho modificato il mio post di prima aggiungendo che Imation aveva detto giusto... (7 secondi)

x la 2a parte: due porte, due servizi. gli arriva prima il servizio chiesto da C1 quindi serve prima C1 (e passano 3 secondi). Poi passa a C2 (son passati 4 secondi... 1+3)... si ferma x 3 sec...quindi mi sa che son sempre 7!

Lunik
si ma tra C1 e C2 passa UN secondo... dove lo metti???????

ne\'79
Non lo metto perchè la domanda chiede dopo quanti secondi dalla richiesta di C1 viene servito C2 di conseguenza mentre il server sta servendo C1 c2 si accoda quel secondo non viene perso !!!

Lunik
x me non è così.... deve esser considerato...
scusa...
C1 chiede
passa un sec
(nel frattempo il server elabora x C1)
C2 chiede
nel frattempo il server si mette in pausa x 3 secondi e risponde a C1
il server si mette in pausa x altri 3 sec e risponde a C2

1+ 3+3 = 7

x me fila il discorso......

boh!

mimasuper
Ma mentre elabora la richiesta di C1 impiegando 3 secondi, riceve la richiesta di C2, quindi il ritardo di un secondo non lo avverte, perchè quando ha finito di erogare il servizio a C1 c'è già in coda la richiesta di C2....Giusto?
Quindi dovrebbe fare 6 secondi!?!?!
SERVER
tempo:1 riceve rich. C1 --> elabora richiesta C1
tempo:2 riceve rich.C2 ma sta elaborando C1
tempo:3 sta elaborando C1
Tempo4:ha finito con C1 e ha già C2 in coda, inizia a elaborare C2
tempo5:elabora C2
tempo 6:finisce C2
Che casino:?

Lunik
si ma dopo quanto riceve C2???? dopo un secondo anche se lui elabora C1...

caxxarola che macello!!!

x la 2a parte? Avete idee???????????

imation
Originally posted by Lunik
si ma dopo quanto riceve C2???? dopo un secondo anche se lui elabora C1...

caxxarola che macello!!!

x la 2a parte? Avete idee???????????


esatto ;)

anche perchè la domanda richiede : "dopo quanti secondi dalla ricezione di C1 ... "

bisogna considerare evidentemente anche quel secondo di ritardo

Lunik
:lode:

e x la 2a parte? Usano porte diverse... hai idee???

ne\'79
Imation allora secondo te e' 6 o 7?

imation
secondo me è 7 secondi ... xò faccio solo un ragionamento logico, non saprei come dargli conferma.

per la seconda parte allo stesso modo a mio parere non cambia nulla, anche se le porte sono diverse il server che eroga il servizio è sempre uno solo ed è monothread...

...quindi elabora sempre il primo si mette 3 secondi in pausa e poi passa il secondo (tenendo sempre conto che il secondo client invia un secondo dopo)

7 secondi anche qui

xò così sembrerebbe troppo comodo :-D ... boh?!:?

Lunik
beh xò il prof ha specificato "Come cambia (se cambia)"

quindi è possibile che rimanga 7 (o 6 se sbagliamo noi due)

ne\'79
Beh per eliminare tutti i dubbi non si potrebbe chieder al prof di darci le risposte?

Lunik
mandagli tu la mail... io mi son rotta di rompergli le balle... povero uomo!! :asd:

Gigi
Secondo me sono 6 sec raga ...

in pratica DCEP riceve la richiesta di C1 a tempo zero, si ferma per 3 sec e intanto a tempo 1 sec arriva la richiesta di C2 e si ferma per altri tre secondi. Ecco siccome quel secondo è minore del tempo di pausa del DCEP (3 sec) comunque non influerà sulla durata dell'elaborazione. Quando arriva C2 cmq deve attendere che la pausa per C1 termini affinche possa iniziare quella per C2.

Non cambia nulla nel caso si abbiano 2 porte perchè cmq un server iterativo è in grado di elaborare una richiesta per volta e accoda le altre ...

fantasim75
mmm... io sono ancora indeciso se sono 6 o 7... tutto a sta a capire quel secondo li... se è da considerare...

Lunik
uhmmmmm forse ho capito Gigi...ora ho capito il xè l'1 non viene considerato...

uhmmmmm.... chissà... :roll:

ne\'79
Una cosa che non mi è ancora chiara è:
Siamo sicuri che se richiedono il servizio su 2 porte diverse non cambi nulla? (seconda parte della domanda)

teo
secondo me per la seconda parte della domanda...la risposta è 4 secondi perche sul server ci sono 2 servizi distinti(in realtà identici) e quindi 2 socket diverse... dopo che riceve la rischiesta di C1 passa un secondo , la seconda porta riceve C2 e risponde dopo altri 3 secondi..totale 4 secondi...

NON sono sicuro sia cosi, ma questo è il ragionamento cheho fatto...

Gigi
Da programmazione.it:

Un server iterativo risponde alla richiesta inviando i dati e resta occupato (non rispondendo ad ulteriori richieste) fintanto che non ha concluso la richiesta. Una volta completata la richiesta il server diventa di nuovo disponibile.

Un server concorrente al momento di trattare la richiesta crea un processo figlio incaricato di fornire i servizi richiesti, per poi porsi in attesa di ulteriori richieste. In questo modo più richieste possono essere soddisfatte contemporaneamente; una volta che il processo figlio ha concluso il suo lavoro viene terminato, mentre il server originale resta sempre attivo.

Quindi protremmo dedurre che anche se C2 arriva subito in fase di esecuzione (mediante porta P2) cmq non potrà essere eseguito perchè il server iterativo è "scemo" ...

Lunik
quindi?
non ci capisco più una bega!!!

imation
avevo scritto una c*****a:D

Lunik
cioè? nn è 7?

imation
sì sempre 7...

sul caso delle 2 porte penso che abbia ragione gigi ;)

daddy80
sono d'accordo.

Lunik
Ricapitolando:
Non siamo certi che nella prima parte sia 7 o 6.
Nella 2a parte concordiamo che non cambia nulla rispetto a prima.

Giusto???

fantasim75
Io credo che non cambi nulla nella seconda parte

JaM
per me e fabpicca i secondi sono 4 (anche per il secondo caso), perche' il server e' multithread e non tiene la porta occupata....

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate