Vous êtes sur la page 1sur 3

Universidade da Beira Interior

Sistemas Paralelos e Distribudos Licenciatura em Matemtica / Informtica Sistemas Distribudos Licenciaturas em Ensino da Informtica e Engenharia Informtica Frequncia 2008/04/18 Durao: 90 minutos (7 valores) I 1 Defina sistema distribudo, indique dois exemplos de sistemas que conhea e para cada um deles descreva sua arquitectura. 2 Descreva o modelo de comunicao da linguagem Linda. 3 Diga o que um sistema distribudo sncrono. Que vantagens e desvantagens possuem em relao aos sistemas assncronos? 4 No contexto da linguagem Java: i) Explique a diferena entre um lock de classe e um lock de objecto. ii) Explique como funciona a instruo synchronize. 5 Explique o que uma thread daemom? II 1 Considere a classe abaixo que representa uma conta bancria onde podero ser feitos depsitos e levantamentos. public class ContaCorrente { public int saldo; public ContaCorrente ( int valor) { saldo = valor; } public void deposito (int v){ saldo = saldo + v; } public void levanta (int v) { saldo = saldo v; } - Pretende-se simular a utilizao partilhada de um objecto do tipo ContaCorrente por dois tipos de Threads em simultneo. Algumas Threads, devem ser objectos do tipo Gastador, que num ciclo infinito iro gerar um valor aleatrio e fazer o levantamento
1

desse valor desde que exista saldo disponvel. Caso no exista saldo suficiente a Thread dever auto suspender-se. Outras Threads sero do tipo Poupado e num ciclo infinito iro gerar um valor aleatrio e fazer o depsito desse valor a) Reescreva a classe ContaCorrente, definindo uma classe ContaCorrente2 com as alteraes que achar necessrias. b) Construa as classes Gastador e Poupado. c) Construa uma classe de teste, onde dever criar um objecto do tipo ContaCorrente2, dois objectos do tipo Poupado e dois objectos do tipo Gastador que partilhem a mesma conta corrente.
Nota: Pode utilizar o gerador de nmeros pseudo-aleatrios da classe Math: Math.random(). Este mtodo devolve um nmero double pertencente ao intervalo [0, 1[.

2 Suponha agora que queremos implementar o problema anterior usando uma aplicao cliente / servidor. O processo servidor ir conter um objecto do tipo ContaCorrente e poder aceitar ligaes de dois tipos de clientes. Clientes do tipo ClienteGastador ou do tipo ClientePoupado. Cada um destes clientes ir receber do utilizador, pelo teclado, o valor a levantar ou a depositar respectivamente. Para cada operao de levantamento ou depsito ser feita uma ligao ao servidor. Aps a operao de depsito ou de levantamento o servidor dever enviar ao cliente respectivo o valor do saldo que restou na conta. Operaes de levantamento para as quais no exista saldo suficiente devero ter como resposta um valor do saldo igual a 1, significando que o levantamento no foi efectuado. O servidor aps servir o pedido de um dos clientes dever ficar apto a receber a ligao do cliente seguinte seja este do tipo gastador ou do tipo poupado. Nota: Pode supor a existncia de uma classe ler que possua mtodos estticos para ler do teclado os vrios tipos primitivos de dados, umInt(), umDouble, etc ... a) Faa as alteraes que considerar necessrias classe que ir representar a conta corrente a instanciar no servidor. b) Construa a classe Servidor. c) Construa a classe ClienteGastador
Cotao: I 2,5 valores II 4,5 valores

Notas:
//Criao de um objecto do tipo Socket: import java.net.*; import java.io.*; Socket s1 = null; try { s1 = new Socket (host, portNumber); } catch (IOException e){ System.out.println( e.getMessage()); } //Criao de objecto do tipo ServerSocket : ServerSocket ss = null; try { ss = new ServerSocket (portNumber); } catch (IOException e){ System.out.println( e.getMessage());} //Utilizao do mtodo accept da classe ServerSocket: Socket s2= null try { s2 = ss.accept();* } catch (IOException e){ System.out.println( e.getMessage()); Exemplos de utilizao de Data Streams: DataInputStream dis = new DataInputStream(s1.getInputStream()); int i = dis.readInt(); char c = dis.readChar(); ... DataOutputStream dos =new DataOutputStream(s1.getOutputStream()); dos.writeChar(c); dos.writeInt(i); ...

Vous aimerez peut-être aussi