Exercícios de Revisão 1) Sabemos que sistemas distribuídos possui várias vantagens sobre os sistemas centralizados. Indique e explique quais as vantagens. 2) O que é programação concorrente e quais são as principais vantagens? 3) Uma das desvantagens dos sistemas distribuídos é a falta de segurança. Discuta a afirmação acima e dê exemplos. 4) A função fork() quando executada cria um processo, chamado filho, que herda todas as informações do processo que o criou, chamado pai. Portanto, qualquer modificação feita pelo filho nos valores das variáveis é imediatamente conhecida pelo processo pai. A afirmação acima é verdadeira ou falso. Explique e exemplifique. 5) O problema dos filósofos comilões: A vida de um filósofo é pensar, comer, pensar, comer e assim indefinidamente. Considere que N filósofos estão sentados ao redor de uma mesa redonda tendo um prato diante de si. Entre cada dois pratos existe um garfo. Para comer, um filósofo precisa necessariamente de dois garfos. Quando termina de pensar (por ter fome), tenta pegar os garfos vizinhos para poder comer. Ao terminar de comer, devolve os garfos à mesa. Se pelo menos dois filósofos que estão sentados um ao lado outro quiserem comer ao mesmo tempo um deles ficará sem garfo e conseqüentemente não poderá comer. Para resolver o problema foi proposta a seguinte solução: equanto (verdade) begin pensa(); pega_garfo(direita); pega_garfo(esquerda); come(); entrega_garfo(direita); entrega_garfo(esquerda); end Sendo que, se o garfo não está disponível a função pega_garfo deixa o processo dormindo até que o garfo esteja disponível. Critique esta solução. Aponte os prováveis problemas e proponha uma nova solução. 6) Analise o código abaixo: if(fork()==0){ executa (cálculo_primeira_parte); envia_dados_pai(); exit(1); } else{ wait(); executa (cálculo_segunda_parte); recebe_dados_filho(); escreve_resultado (); } Considerando que a primeira e a segunda parte do cálculo são executadas independentes uma da outra, o que poderia ser melhorado na implementação acima? Explique e proponha uma nova solução. 7) Trace um paralelo entre os meios de comunicação entre processos estudados. Indique a vantagem e desvantagem de cada um. 8) Qual a utilidade dos semáforos na programação paralela. Explique seu funcionamento. 9) Problema da padaria. A padaria FIC possui vários pães e tortas que são vendidos por n vendedores. Para organização, cada cliente que entra na padaria recebe um número e espera que seu número seja chamado por um dos vendedores para ser atendido. Sempre que um vendedor fica desocupado, o próximo número é chamado. Escreva um pseudo-código que resolva este problema utilizando semáforos. 10)Imagine que temos três processos executando ao mesmo tempo, A, B e C. Os três processos estão em loop infinito esperando a algum comando do usuário. Este podem ser: 1. Imprimir um documento 2. Resolver um cálculo 3. Acessar o Bando de dados Entretanto, apenas o processo A tem acesso à impressora e somente o C pode fazer consulta no Banco de Dados. Implemente a situação acima. Você pode criar processos filhos ou escreveu um código para cada processo. O meio de comunicação entre eles fica à sua escolha, contudo é necessário explicar o porque da escolha.