domingo, 29 de novembro de 2009

TCP, UDP e RMI descrição do exercício

Essa é a descrição de trabalho de sistemas distribuídos que deveria ser implementado utilizando TPC, UDP e RCP, podia ser implementado em C ou em Java, eu escolhi java é claro, só que no lugar de RCP no java utilizei RMI.

Vou disponibilizar no próximo post os fontes do projeto, fiz na IDE netbeans, mas pode fazer como preferir, a mão, no eclipse como bem quiser. OK?!

Também vou colocar as instruções para poder executar o RMI, e algumas observações que fiz sobre a implementação.


Descriçã do exercício

1. Objetivo:

Implementar os dois problemas especificados abaixo utilizando, em ambos, sockets (TCP e UDP) e RPC e analisar as facilidades de implementação e uso de cada método, bem como o desempenho de cada um.


2. Características básicas:

  • Desenvolver as aplicações em C, tomando como base os exemplos disponibilizados.


3. Problemas:


Problema 1: implementar um programa servidor que calcula a multiplicação de dois números enviados pelo cliente. O cliente envia esses números e imprime o resultado da multiplicação retornado pelo servidor. Cada versão do programa deverá ser executada um número de vezes estatisticamente válido e, ao final, deverá ser fornecido o tempo médio de execução de cada uma delas.


Problema 2: implementar um ping-pong, conforme modelo abaixo. A execução deverá ser feita para diferentes tamanhos de mensagens, desde zero bytes até 64Kbytes, com incrementos de 1024 bytes. Para cada um dos casos (para cada tamanho de mensagem) deverá ser calculada a banda passante da rede, que pode ser obtida dividindo-se a quantidade de informação transferida pelo tempo que levou para ser transferida.


PING (cliente):


//cria buffer para alocar mensagem

Buffer = malloc();


ti = GetTime();


//envia e recebe a mensagem n vezes para melhorar a precisão da tomada de tempo

for(i = 0; i <>

{

Send(Buffer);

Recv(Buffer);

}


tf = GetTime();


t = (tf – ti)/n;






PONG (servidor):


//cria buffer para alocar mensagem

Buffer = malloc();


ti = GetTime();


//envia e recebe a mensagem n vezes para melhorar a precisão da tomada de tempo

for(i = 0; i <>

{

Recv(Buffer);

Send(Buffer);

}


tf = GetTime();


t = (tf – ti)/n;


4. Relatório:

Além dos códigos-fonte dos programas, deverá ser entregue um relatório com os seguintes dados:

  • Descrição do ambiente de teste (sistema operacional, versão do sistema operacional, ...);

  • Instruções para compilação e execução dos programas;

  • Descrição de como os testes foram conduzidos, número de vezes que foram executados;

  • Tabela comparativa do tempo médio obtido pelas diferentes versões do servidor de multiplicação, com a resposta da seguinte questão: que conclusão se pode tirar desses testes?

  • Um gráfico comparando a banda passante da rede para cada caso de execução do ping-pong. Procure interpretar o comportamento do gráfico, tirando suas conclusões a respeito do que for observado;

  • Descrição/análise das facilidades de implementação e uso dos diferentes métodos de comunicação;

  • Descrição de características julgadas importantes em cada método de comunicação (lembre-se que, além das medições solicitadas, outras poderão ser efetuadas e apresentadas no relatório).

Nenhum comentário: