A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Linguagens Concorrentes Antonio Francisco do Prado

Apresentações semelhantes


Apresentação em tema: "Linguagens Concorrentes Antonio Francisco do Prado"— Transcrição da apresentação:

1 Linguagens Concorrentes Antonio Francisco do Prado

2 Concorrência Multiprogramação: usada por um sistema "time- sharing". Um processador compartilhado por diversos processos; Multiprocessamento: vários processadores. Possibilita que múltiplos processos sejam executados em processadores distintos. Memória comum compartilhada para comunicação entre os processos. Processamento Distribuído: também requer processadores separados, mas cada um com sua memória. Processadores conectados via linhas de comunicação.

3 A concorrência é naturalmente dividida em nível de: instrução (executando duas ou mais instruções de máquina simultaneamente); comando (executando dois ou mais comandos simultaneamente); e unidade (executando dois ou mais programas simultaneamente). Concorrência Os métodos concorrentes aumentam a flexibilidade de programação e foram criados originalmente para serem usados em problemas particulares dos em sistemas operacionais.

4 Concorrência relaciona-se com fluxo de controle de um programa. Tem-se mais de um fluxo de controle ativo. É diferente da execução seqüencial de programas, onde se tem apenas um fluxo de controle, ou seja, em um determinado momento, existe uma única instrução candidata à execução. Unidades concorrentes podem ser executadas em: Um único processador ; Vários processadores que compartilham uma memória; Vários processadores independentes, sem compartilhamento de memória. Concorrência

5 Reduz o tempo total de processamento através de execução concorrente de diversas unidades; Aumenta a confiabilidade para aplicações críticas, onde não se torna confiável a execução em um único processador; Modela soluções que exploram a capacidade de máquinas com múltiplos processadores; Implementa aplicações distribuídas. Concorrência

6 Seção crítica Quando processos concorrentes interagem com variáveis compartilhadas, a integridade destas variáveis pode ser violada se o acesso não for coordenado. Uma seção crítica é um segmento de código de um processo que acessa um recurso compartilhado. Conceitos básicos Deadlock É uma situação onde um processo ou um conjunto de processos estão bloqueados, a espera de um evento que nunca irá acontecer.

7 Deadlock Um deadlock é caracterizado por uma espera circular Exemplo: o processo P1 está de posse do recurso r1, e precisa do recurso r2; o processo P2 está de posse de r2 e precisa de r1; Nesse caso, nenhum dos processos pode prosseguir, pois ambos dependem de recursos que não serão liberados. Conceitos básicos P1 r1r2 P2

8 Mecanismos de Sincronização Semáforos O conceito de semáforos consiste na colocação de proteções (guardas) no código que controlam o acesso a uma estrutura de dados. Em geral, a estrutura é uma fila, funcionando em regime FiFo(First in First out). A implementação do semáforo deve garantir que, uma vez que um processo inicie uma operação sobre um semáforo, nenhum outro processo terá acesso até que a operação conclua.

9 Conceitos básicos Tarefa Uma tarefa é uma unidade de um programa que pode estar em execução concorrente com outras unidades do mesmo programa. Uma tarefa pode comunicar-se com outras tarefas através variáveis não-locais compartilhadas, mensagens ou de parâmetros. As tarefas disjuntas ocorrem, se uma tarefa não se comunicar ou não afetar a execução de qualquer outra tarefa. Devem de alguma forma se comunicar para que haja sincronização em suas execuções, no compartilhamento de dados.

10 Conceitos básicos Tarefa tarefa1tarefa2Tarefa n Unidade concorrente

11 Sincronização de tarefas Sincronização é um mecanismo que controla a ordem de execução das tarefas. Conceitos básicos Cooperação A cooperação entre processos revela-se quando um processo aguarda que outro processo realize alguma tarefa, para prosseguir sua execução. Assim a cooperação entre as tarefas A e B ocorre, quando B precisa aguardar que A conclua alguma atividade específica antes de prosseguir sua execução.

12 Conceitos básicos Competição Ocorre quando ambas tarefas requerem algum recurso que não pode ser usado simultaneamente. Assim, se a tarefa A precisa acessar um dado compartilhado x que já esta sendo acessado pela tarefa B, a tarefa A precisa aguardar que B conclua seu acesso a x.

13 Conceitos básicos Competição Unidade Concorrente Tarefa T1 Tarefa T2 Enquanto T1 estiver acessando, T2 tem que esperar

14 Conceitos básicos Exclusão mútua Jantar dos filósofos Os filosofos tentam comer e para isso dependem do recurso (palito). Para comer os filósofos precisam de dois palitos. Caso um filosofo não esteja comendo, pode estar pensando ou dormindo. A Exclusão Mútua ou, simplesmente, Mutex, é um caso particular competição por recurso, onde apenas se pode permitir o acesso individual ao recurso(regiões críticas).Os primeiros mecanismos da exclusão mútua faziam com que os processos testassem continuamente o valor de uma variável que guarda o estado do recurso, até sua liberação, podendo causar um Deadlock.

15 Conceitos básicos Para que a competição por um recurso decorra sem qualquer problema são, normalmente, usados semáforos que permitem, ou não, o acesso de um ou mais processos à região crítica. Outros mecanismo de sincronização : Monitores; e Passagem de mensagem(rendezvous). Comportamento da comunicação entre tarefas: Síncrono Assíncrono

16 Monitores Os monitores podem ser utilizados como uma solução em ambiente concorrente transformando as estruturas de dados compartilhados em Tipos Abstratos de Dados, que agrupam as estruturas de dados com suas operações, e ocultam suas representações. Os monitores implementam a exclusão mútua, onde somente um processo pode estar ativo dentro do monitor em um instante de tempo. Mecanismos de Sincronização

17 Monitores (continuação) Quando um processo chama um método de um monitor, as primeiras instruções do método verificam se algum outro processo está ativo dentro dele. Se isto for verdade, o processo que chamou o método do monitor será suspenso até que o outro processo deixe o monitor. Se não houver nenhum processo ativo dentro do monitor, o processo poderá entrar e executar o método chamado. Mecanismos de Sincronização

18 Mecanismos Monitores Processos aguardando entrada

19 Passagem de mensagem A construção de monitores não moldam a sincronização em sistemas distribuídos, onde seria necessário a sincronização de unidades, na qual cada processador teria sua própria memória, em vez de uma única memória compartilhada. Para sincronizar os processos independentes é comum a utilização de monitores. Contudo, ao utilizarmos sistemas sem memória comum e com mais de um processador, a implementação dos monitores se torna inviável, porque não existe nenhum meio físico central. Surge assim uma técnica de encontros para tratar estes casos, que se faz através de mensagens. Mecanismos de Sincronização

20 rendezvous Uma tarefa pode ser projetada de modo a poder suspender sua execução em certo ponto, porque está ociosa ou porque precisa de informações de outra unidade antes que possa prosseguir. Se uma tarefa A quer enviar uma mensagem para a tarefa B, e se esta estiver disposta a receber, a mensagem poderá ser transmitida. Essa transmissão é chamada rendezvous. Mecanismos de Sincronização

21 Passagem de mensagem (Rendezvous) Mecanismos de Sincronização Processo Contínuo Processo Contínuo Processo Bloqueado

22 Linguagens Concorrentes Java (Multilinhas)

23 Multitarefas x Multilinhas Multitarefas - estão em espaço de endereçamento distinto e devem ser vistos como programas diferentes no mesmo sistema. Multilinhas - compartilham o mesmo espaço de endereçamento e dividem cooperativamente o mesmo processo. O modelo de Linhas de Execução de Java Java usa multilinhas de execução para permitir que todo o ambiente Java seja assíncrono. Não há um laço principal em um programa Java. Cada linha tem sua execução independente. Uma linha bloqueada não impede a execução das demais linhas. Sincronização A sincronização de recursos requeridos pelas linhas, executadas de forma assíncrona, é obtida pelo mecanismo Monitor. Em Java, não há uma classe monitor. Cada objeto tem seu próprio monitor, com seus métodos sincronizados. Quando uma linha está executando um método sincronizado, nenhuma outra linha pode executar este método. Multilinhas e Sincronização

24 Para criar programas concorrentes em Java reutiliza-se a classe Thread. A classe Thread encapsula todos os controles das linhas de execução. Um objeto Thread é o procurador de uma linha em execução. Quando um programa Java é iniciado já existe uma linha sendo executada. O programa principal de java é uma linha em execução. Thread class ThreadCorrente { public static void main(String args[ ]){ Thread t = Thread.currentThread( ); t.setName("Minha Linha"); System.out.println("Linha corrente: " + t); try{ for (int n = 5; n > 0; n --) { System.out.println ( " " + n); Thread.sleep(1000); } } catch (InterruptedException e) { System.out.println("interrompida"); } } //fim do main } Linha corrente: Thread [ Minha Linha,5,main ] Resultado da execução

25 Java – Concorrência Classe Thread criado pronto executando esperando adormecido morto bloqueado start yield run wait sleep Completo (destroy) suspend resume notify notifyAll Acorda

26 sleep: passa como parâmetro um número inteiro de milissegundos que a thread deve permanecer interrompida; suspend: interrompe temporariamente a thread, que pode ser reiniciada posteriormente; resume: reinicia a thread; yield: passa o controle para outra thread; syncronized: faz com que um recurso seja acessado atomicamente; notify: libera um recurso sincronizado para a próxima thread; notifyAll: libera um recurso sincronizado para todas as threads; e wait: aguarda pela liberação de um recurso sincronizado. Threads Java Principais métodos

27 A sincronização de competição em Java é obtida especificando-se os métodos sincronizados que acessam dados compartilhados. A execução destes métodos deve ser concluída para que outra thread execute-os novamente. Cada método sincronizado coloca um bloqueio no objeto, que impede que outros métodos sejam executados sobre este objeto. Usa o modificador synchronized na definição do método. Java – Concorrência A entrada em um monitor de objetos, é feita pela chamada de um método marcado com synchronized. synchronized void metodo() {

28 Sincronização Autogenerated HTML roda.html