TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Exercícios De Programação Concorrente

Pesquisas Acadêmicas: Exercícios De Programação Concorrente. Pesquise 860.000+ trabalhos acadêmicos

Por:   •  10/4/2014  •  1.713 Palavras (7 Páginas)  •  1.128 Visualizações

Página 1 de 7

Exercícios de programação concorrente

33) Defina o que é uma aplicação concorrente e dê um exemplo de sua utilização. É uma aplicação estruturada de maneira que partes diferentes do código do programa possam executar concorrentemente. Este tipo de aplicação tem como base a execução cooperativa de múltiplos processos ou threads, que trabalham em uma mesma tarefa na busca de um resultado comum. 34) Relacione Região Crítica com Condição de Corrida. As partes do programa, cujo processamento pode levar à ocorrência de condições de corrida, são denominadas regiões críticas. Evitando que dois processos estejam processando suas seções críticas ao mesmo tempo, evitaria a ocorrência de condições de corrida. 35) Considere uma aplicação que utilize uma matriz na memória principal para a comunicação entre vários processos concorrentes. Que tipo de problema pode ocorrer quando dois ou mais processos acessam uma mesma posição da matriz? Caso não haja uma gerência no uso concorrente dos recursos compartilhados, inconsistências nos dados podem ocorrer. 36) O que é exclusão mútua e como é implementada? É impedir que dois ou mais processos acessem um mesmo recurso simultaneamente. Para isso, enquanto um processo estiver acessando determinado recurso, todos os demais processos que queiram acessá-lo deverão esperar pelo término da utilização do recurso. 37) Como seria possível resolver os problemas decorrentes do compartilhamento da matriz, apresentado anteriormente, utilizando o conceito de exclusão mútua? Garantindo na aplicação que somente um único processo pode estar acessando a matriz por vez. 38) O que é starvation e como podemos solucionar esse problema? Starvation é a situação onde um processo nunca consegue executar sua região crítica e, conseqüentemente, acessar o recurso compartilhado. A solução para o problema depende de estabelecimentos de mecanismos de acesso pelo sistema operacional que garantam o acesso ao recurso por todos os processos que solicitarem uso. 39) Qual o problema com a solução que desabilita as interrupções para implementar a exclusão mútua? Essa solução apesar de simples apresenta algumas limitações. Primeiramente, a multiprogramação pode ficar seriamente comprometida, já que a concorrência entre processos tem como base o uso de interrupções. Um caso mais grave poderia ocorrer caso um processo desabilitasse as interrupções e não tornasse a habilitá-las. Nesse caso, o sistema, provavelmente, teria seu funcionamento seriamente comprometido.

40) O que é espera ocupada? Na espera ocupada, toda vez que um processo não consegue entrar em sua região crítica, por já existir outro processo acessando o recurso, o processo permanece em looping, testando uma condição, até que lhe seja permitido o acesso. 41) Quais são os problemas comuns a todas as soluções que se utilizam da espera ocupada para garantir a exclusão mútua de execução? O processo em looping consome tempo do processador desnecessariamente, podendo ocasionar problemas ao desempenho do sistema. 42) Explique o que é sincronização condicional e dê um exemplo de sua utilização. Sincronização condicional é uma situação onde o acesso ao recurso compartilhado exige a sincronização de processos vinculada a uma condição de acesso. Um recurso pode não se encontrar pronto para uso devido a uma condição específica. Nesse caso, o processo que deseja acessá-lo deverá permanecer bloqueado até que o recurso fique disponível. Um exemplo clássico desse tipo de sincronização é a comunicação entre dois processos através de operações de gravação e leitura em um buffer.

43) Explique o que são semáforos e dê dois exemplos de sua utilização: um para a solução da exclusão mútua e outro para sincronização condicional, que só pode ser manipulada por duas instruções: Um semáforo é uma variável inteira, não negativa, que só pode ser manipulada por duas instruções: DOWN e UP. O programa Semaforo_1 apresenta uma solução para o problema da exclusão mútua entre dois processos utilizando semáforos. O semáforo é inicializado com o valor 1, indicando que nenhum processo está executando sua região crítica. PROGRAM Semaforo_1; VAR S : Semaforo := 1; BEGIN PARBEGIN Processo_A; Processo_B; PAREND; END. PROCEDURE Processo_A; BEGIN DOWN (S); Regiao_Critica_A; UP (S); Processamento_A; END; PROCEDURE Processo_B; BEGIN DOWN (S); Regiao_Critica_B; UP (S); Processamento_B; END; O Processo A executa a instrução DOWN, fazendo com que o semáforo seja decrementado de 1 e passe a ter o valor 0. Em seguida, o Processo A ganha o acesso

à sua região crítica. O Processo B também executa a instrução DOWN, mas como seu valor é igual a 0, ficará aguardando até que o Processo A execute a instrução UP, ou seja, volte o valor semáforo para 1. O problema do produtor/consumidor é um exemplo de como a exclusão mútua e a sincronização condicional podem ser implementadas com o uso de semáforos. O programa ProdutorConsumidor2 apresenta uma solução para esse problema, utilizando um buffer de apenas duas posições. O programa utiliza três semáforos, sendo um do tipo binário, utilizado para implementar a exclusão mútua e dois semáforos contadores para a sincronização condicional. O semáforo binário Mutex permite a execução das regiões críticas Grava_Buffer e Le_Buffer de forma mutuamente exclusiva. Os semáforos contadores Vazio e Cheio representam, respectivamente, se há posições livres no buffer para serem gravadas e posições ocupadas a serem lidas. Quando o semáforo Vazio for igual a 0, significa que o buffer está cheio e o processo produtor deverá aguardar até que o consumidor leia algum dado. Da mesma forma, quando o semáforo Cheio for igual a 0, significa que o buffer está vazio e o consumidor deverá aguardar até que o produtor grave algum dado. Em ambas as situações, o semáforo sinaliza a impossibilidade de acesso ao recurso. PROGRAM Produtor_Consumidor_2; CONST TamBuf = 2; VAR Vazio : Semaforo := TamBuf; Cheio : Semaforo := 0; Mutex : Semaforo := 1; BEGIN PARBEGIN Produtor; Consumidor; PAREND; END. PROCEDURE Produtor; BEGIN Produz_Dado; DOWN (Vazio); DOWN (Mutex); Grava_Buffer; ÚP (Mutex); UP (Cheio); END; PROCEDURE Consumidor; BEGIN DOWN (Cheio); DOWN (Mutex); Le_Buffer; ÚP (Mutex); UP (Vazio); Consome_Dado; END; Por exemplo, consideremos que o processo Consumidor é o primeiro a ser executado. Como o buffer está vazio (Cheio = 0), a operação DOWN (Cheio) faz com que o processo

...

Baixar como (para membros premium)  txt (10.8 Kb)  
Continuar por mais 6 páginas »
Disponível apenas no TrabalhosGratuitos.com