Prévia do material em texto
Programação Concorrente e Distribuída 1 Programação Concorrente e Distribuída Aluno: Filipe Cavalcante dos santos Disciplina: Paradigmas da programação Professor: Roberto Fontes Faça uma pesquisa e disserte sobre: 1. Programação Concorrente. Programação concorrente é um paradigma de programação que é usado para construir programas que executam várias tarefas simultaneamente. podendo ser implementados como programas separados ou em conjunto, utilizando threads. 2. Programação Distribuída. A programação distribuída ocorre quando executamos um programa ou sistema em vários outros dispositivos interligados via rede. 3. Chamadas Fork. Uma chamada fork é a chamada de uma função que faz uso de uma chamada de sistema, ou seja, o programa invoca o SO para realizar alguma tarefa que não pode ser feita pelo usuário. Normalmente é utilizado para criar novos processos de sistemas Unix. 4. Modos de se criar threads em Java (ex: herdando da classe thread, ou implementando a interface Runnable). Programação Concorrente e Distribuída 2 A runnable é uma interface que possui apenas um método run. Nesse método é possível definir o que podemos executar em uma Thread. Para isso, na classe que se deseja executar em paralelo, basta implementar a interface e depois sobrescrever o método run da interface. 5. Métodos sincronizados da linguagem Java. Métodos sincronizados permitem uma estratégia simples para evitar a interferência de threads em erros de consistência de memória. Se um objeto for visível para mais de um thread, todas as leituras ou gravações nas variáveis desse objeto são feitas por meio de métodos sincronizados. Pesquise e responda: 1. Se a programação concorrente traz dificuldades para a programação, quais vantagens se têm com a sua utilização? Vantagens do paradigma incluem o aumento de desempenho, pois aumenta-se a quantidade de tarefas sendo executadas em determinado período de tempo, e a possibilidade de uma melhor modelagem de programas, pois determinados problemas computacionais são simultâneos por natureza. 2. O que são threads? Quais as suas características? Cada programa, ou processo, possui normalmente um fluxo de controle. Assim o programa é executado sequencialmente passo a passo com seu único fluxo de controle. É nesse ponto que entram as threads, com threads podemos ter mais de um único fluxo de controle em nosso aplicativo. Assim o nosso aplicativo agirá como se tivessem vários aplicativos com partes de seu código atuando em paralelo no sistema. Threads são, portanto, entidades escalonadas para executarem na CPU, por isso a noção de paralelismo, pois as threads concorrerão pelo processador juntamente com mais threads que tiverem no programa, ou concorrerá apenas com o fluxo do programa. Threads permitem que múltiplas execuções ocorram no mesmo ambiente do aplicativo com um grande grau de independência uma da outra, portanto, se temos Programação Concorrente e Distribuída 3 muitas threads executando em paralelo no sistema é análogo a múltiplos aplicativos executando em paralelo em um computador. 3. Quais são as principais diferenças entre threads e processos? Cite as respectivas vantagens e desvantagens de sua utilização. Cada processo fornece os recursos necessários para executar um programa. Um processo tem um espaço de endereço virtual, código executável, alças abertas para objetos do sistema, um contexto de segurança, um identificador de processo exclusivo, variáveis de ambiente, uma classe de prioridade, tamanhos mínimos e máximos do conjunto de trabalho e pelo menos um thread de execução. Cada processo é iniciado com um único thread, geralmente chamado de thread primário, mas pode criar threads adicionais de qualquer um de seus threads. Um thread é a entidade dentro de um processo que pode ser agendado para execução. Todos os threads de um processo compartilham seu espaço de endereço virtual e recursos do sistema. 4. Quais são as principais diferenças entre memória compartilhada e de troca de mensagens? Cite vantagens e desvantagens. A memória compartilha é uma região da memória do computador que é compartilhada entre os processos em execução, cada processador tem acesso total à memória compartilhada; comunicação entre processos se dá através da memória (acesso concorrente necessita sincronização explícita). A troca de mensagem é a comunicação entre processadores feita de forma explícita através de comandos send e receive. 5. Quais são as principais características das linguagens C, JAVA e ADA relacionadas à programação concorrente? 6. Quais as diferenças entre execução paralela e concorrente? Concorrência é quando um servidor atende a vários clientes escalando um determinado tempo para atender cada um, já o Paralelismo é quando vários Programação Concorrente e Distribuída 4 servidores atendem vários clientes ao mesmo tempo, reduzindo o tempo de resposta para os clientes. 7. O que é escalonamento de processos? O escalonamento de processos ou agendador de tarefas é uma atividade organizacional feita pelo escalonador da CPU ou de um sistema distribuído, possibilitando executar os processos mais viáveis e concorrentes, priorizando determinados tipos de processos, como os de I/O Bound e os CPU Bound. 8. O que é Sockets? Os sockets foram a forma de permitir que dois processos se comuniquem (Inter- process communication). Esses processos podem ou não estar na mesma máquina. 9. Cite três linguagens de programação de implementam Programação Concorrente e Distribuída. Caracterizando cada uma. Java, C# e Erlang 10. O produtor-consumidor é um problema clássico de programação concorrente. Explique quais problemas que podem acontecer. O problema do produtor e consumidor, também referido como Bounded Buffer Problem (BBP), consiste em um desafio de sincronização de duas ou mais threads (tarefas) concorrentes que têm acesso a um mesmo recurso do programa que está sendo executado. O fato de o recurso estar sendo compartilhado, implica na possibilidade de conflitos entre as threads que disputam pelo controle da CPU para acessar esse mesmo recurso. No caso do BBP, o recurso disputado é um buffer de memória (um vetor), de tamanho limitado/fixo, daí o motivo do nome. O produtor é o responsável por enfileirar novos jobs ou dados nesse buffer, e o consumidor assume a responsabilidade de extrair esses dados do buffer. https://fontes.pro.br/moodle20/mod/page/view.php?id=210 Programação Concorrente e Distribuída 5 Porém o seguinte problema poderá emergir: E se o produtor produzir muito rápido, e o consumidor não for capaz de acompanhá-lo? Se isso acontecer, o produtor irá descartar todos os novos itens produzidos, até que haja espaço novamente no buffer, ou seja, dados serão perdidos. Sobre Protocolo 1. O que é protocolo? Na ciência da computação, um protocolo é uma convenção que controla e possibilita uma conexão, comunicação, transferência de dados entre dois sistemas computacionais. De maneira simples, um protocolo pode ser definido como "as regras que governam" a sintaxe, semântica e sincronização da comunicação. 2. O que é RFC? Request for Comments são documentos técnicos criados por indivíduos e organizações que lidam com tecnologia, com destaque para a Internet Engineering Task Force. 3. O que é o protocolo TELNET? Telnet é um protocolo de rede na Internet ou redes locais para proporcionar uma facilidade de comunicação baseada em texto interativo bidirecional usando uma conexão de terminal virtual. 4. Como usar o protocolo TELNET? No windows No menu do Windows, digite Painel de controle. Procure a opção Programas. Você verá a opção “Desativar ou Ativar recursos do Windows”, selecione esta opção. Programação Concorrente e Distribuída 6 Abrirá uma janela, nela você verá a opção Cliente Telnet, selecione ela e clique em OK. Para executar o comando, basta abrir o prompt de comando. Para isso, vá ao menu do Windows e digite Prompt, com ele aberto, digite Telnet.No linux Abra o terminal do Linux. Escreva o comando: telnet chkconfig on Depois o comando restart /etc /init.d /xinetd Para testar, digite o comando: telnet 192.168.1.10 5. Como funciona o terminal virtual? Um terminal virtual é uma segunda seção de trabalho completamente independente de outras, que pode ser acessada no computador local ou remotamente via telnet, rsh, rlogin, etc. 6. Qual é o princípio das opções negociadas? As opções negociadas permitem que alguns terminais proponham serviços adicionais que não são definidos nas especificações básicas. Esses serviços adicionais permitem a utilização de funções avançadas em forma de opções, fazendo iniciar os pedidos para solicitar a autorização ao sistema distante a ativação desse serviço ou não. Qualquer um dos lados da rede pode emitir o sinal e logo em seguida a outra deve responder se aceita ou não a liberação da opção Programação Concorrente e Distribuída 7 requerida. Caso o pedido seja para desativar a opção, quem recebe a mensagem não deve recusar a mensagem, para ser compatível com o modelo NVT. 7. Quais são as regras de negociação? As regras de negociação de opções podem evitar um caso de bloqueio do pedido, pois os pedidos só devem ser emitidos quando acontece a mudança de um modo. Caso exista um envio para mudança esse deve ser inserido no fluxo de dados apenas no lugar onde tem efeito, o receptor da mensagem só deve adotá-lo quando não se encontrar no mesmo modo pedido.