Conceitos de Programação Paralela - 2

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais
Advertisements

Sistemas Distribuídos
Conceitos de Programação Paralela
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
Coerência de Cache – Parte 2
Sistemas Operacionais Sincronismo e Comunicação entre processos
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
CONTROLE DE CONCORRÊNCIA
Threads (Linha de execução )
Sincronismo e Comunicação entre Processos
Sincronismo e Comunicação entre Processos
Arquitetura de Sistemas Operacionais
OpenMP MO801/MC972. Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige.
PThreads MO801/MC972.
Problemas com Threads MO801/MC972. Muitas threads Se algumas threads ajudam o programa, muitas threads devem ajudar mais –Certo? O overhead de escalonamento.
Chapter 4: Threads.
Capítulo 7: Deadlocks.
Sistemas Operacionais II
Controle de Concorrência em Sistemas Distribuídos
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC SISTEMAS OPERACIONAIS I Aula.
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC SISTEMAS OPERACIONAIS I Turmas.
Walfredo Cirne Threads Walfredo Cirne
Sistemas Distribuídos
A Distributed Object-Oriented Framework for Dependable Multiparty Interactions A.F.Zorzo, R.J.Stroud Leonardo Viccari.
Programação Concorrente
Sincronização de Processos (3)
Sincronização e Comunicação entre Processos
Claudio de Oliveira – Thread 09/03/10 20:13 Claudio de Oliveira –
Threads.
Sistemas Operacionais
Exclusão Mútua A solução mais simples para evitar os problemas de compartilhamento é impedir que dois ou mais processos estiver acessando determinado recurso,
Threads sem Sincronização
Sistemas Operacionais I
Prof. André Leon S. Gradvohl, Dr.
Concorrência em Java Threads em Java.
Monitores.
Locks.
Unidade 3 Controle de Concorrência
Conteúdo 1. Introdução Threads 2. Ambiente Monothread 3. Ambiente Multithread 4. Arquitetura e Implementação 5. Modelos de Programação.
Concorrência STRD.
Controle de concorrência
Processos.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Semáforos J2SE 5.0 Estudo da API e comparação com definição clássica Gustavo Frainer Rômulo Rosinha
Transações Concorrentes
SISTEMAS OPERACIONAIS I
Conceitos de thread Faculdade PITÁGORAS – Outubro de 2012
Sistemas Operacionais
Protocolo de Bloqueios
Sistemas Distribuídos Aula 05 – Programação Multithread/Paralela
Controle de Concorrência
Video Capítulo 7: Sincronização de Processos. Silberschatz, Galvin and Gagne  Video Operating System Concepts Assuntos n Cenário n O problema.
1 Design Pattern Double Checked Locking. 2 Design Pattern Apresenta soluções para problemas que ocorrem repetidamente em nosso ambiente computacional.
Métodos e Classes para Sincronização no JDK 5.0 Vitor Hugo Becker
©André Santos, Concorrência: Sincronização de fina granularidade André Santos CIn-UFPE.
Bruno Affonso Diego Chiquito Ruan Berté.   O código de Escalonamento no Windows é implementado no Kernel.  A rotina que desempenha as tarefas do Escalonador.
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
Capítulo 8 Threads.
Sistemas Operacionais Distribuídos
Deadlocks.
Programação Concorrente
Administração de Sistemas Operacionais 1 -Windows
Sistemas Operacionais
Faculdade Pernambucana - FAPE Sistemas Operacionais Prof. Flávio Gonçalves da Rocha.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais IESP - FATEC-PB Professor: Gustavo Wagner.
ProgramaçãoConcorrente Glêdson Elias
SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS PROF. HORACIO RIBEIRO Sistemas operacionais.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
Recursividade, Entrada pelo teclado e Funções com retorno Dilvan Moreira.
Transcrição da apresentação:

Conceitos de Programação Paralela - 2 MO801/MC972

Visão Geral Existem várias bibliotecas disponíveis para programação Mesmos conceitos básicos Implementações diferentes Exemplo: Windows Threads POSIX Threads (pthread))

Sincronização É um mecanismo para impor restrições na ordem de execução das threads Evita que um comportamento não desejado aconteça Pouco usada diretamente pelos programadores Entrada Shared data or critical section Saída

Região Crítica É uma região do código onde existem variáveis das quais dependem múltiplas threads Somente uma thread pode estar numa região crítica por vez Pode ocasionar contenção se for uma grande região de código com grande concorrência

Dois casos comuns Mutual exclusion Condition synchronization Uma thread bloqueia uma região e todas as outras ficam aguardando sua vez de entrar na região Condition synchronization A thread é bloqueada aguardando por uma determinada condição

Exemplo Genérico <Entrada na região crítica, faz com que outras threads fiquem aguardando> … Região crítica <Saída da região crítica, permite que outras threads entrem>

Deadlock Ocorre sempre que uma thread está esperando um lock de outra thread que nunca ficará disponível Pode ser de 3 tipos diferentes Self-deadlock Recursive deadlock Lock-ordering deadlock

Self deadlock A própria thread possui um lock que ela deseja, mas executa uma operação de bloqueio aguardando o lock Não deveria ocasionar problema O programador pode testar se já possui o lock antes O sistema operacional pode saber se a thread já possui o lock

Recursive deadlock A thread i possui um lock e, antes de liberá-lo, precisa de algo da thread j, que por sua vez tenta obter o mesmo lock Esse problema pode escalar para dentro de bibliotecas

Lock-ordering deadlock Ocorre quando, por exemplo, a thread A possui o lock i e quer o lock j e a thread B possui o lock j e quer o lock i É o tipo mais comum de deadlock Pode ser corrigido sempre solicitando os locks na mesma ordem

Primitivas de sincronização São implementadas sobre operações atômicas fornecidas pelo sistema de memória (memory fence, ou memory barrier) Test and set Read and increment Compare and swap Três tipos de primitivas Semaphores Locks Condition variables

Semaphores Permite o acesso a uma ou mais threads numa região de código Utiliza duas operações: P(s) e V(s) O valor armazenado indica Quantas threads ainda podem entrar na região, se positivo Quantas threads estão aguardando para entrar na região, se negativo

Pseudo-código P(s) { atomic { sem=sem-1; temp=sem } if (temp < 0) { Thread bloqueada } } V(s) { atomic { sem=sem+1; temp=sem } if (temp <= 0) { Libera uma thread bloqueada }

Tipos de semáforos Do ponto de vista da usabilidade, existem dois tipos de semáforos Forte (strong) A ordem de solicitação é garantida como ordem de obtenção Fraco (weak) A ordem de solicitação não é garantida como ordem de obtenção

Exemplo semaphore s s.sem = 1 begin T: <região não crítica> P(s) <região crítica> V(s) Goto T end

Locks Similares aos semáforos, só que com apenas uma thread na região crítica Duas operações aquire() Aguarda atomicamente pela disponibilidade de lock e ativa o lock release() Atomicamente desativa o lock A granularidade influencia fortemente no nível de contenção do sistema

Exemplo {define all necessary locks} <Start multithreading blocks> … <critical sectionn start> <aquire lock L> … operate on shared memory protected by lock L … <release lock L> <critical section end> <End multithreading blocks>

Tipos de locks Vários tipos de locks podem estar disponíveis nas APIs de programação Evite utilizar mais de um tipo de lock no mesmo programa Muito cuidado com bibliotecas Mutexes, Recursive Locks, Read-Write Locks, Spin Locks

Mutexes É o lock mais simples Uma chamada a aquire ativa e uma chamada a release desativa o lock Algumas implementações podem utilizar timers para liberar o lock Utilize try-finally para evitar deadlock

Recursive locks Podem ser obtidos várias vezes pela mesma thread e precisam ser liberados o mesmo número de vezes Nenhuma outra thread pode obter o lock simultaneamente Muito utilizado em código recursivo Locks recursivos são mais lentos de implementar que os não recursivos em geral

Read-Write locks Também chamados de shared-exclusive ou multiple-read/single-write locks Permitem que vários locks de leitura sejam obtidos mas limitam o acesso à escrita a apenas uma thread (sozinha) Útil quando muitas threads tentam acessar os mesmos dados mas existem poucas escritas

Spin locks Não bloqueiam a thread, que deve ficar tentando o lock sucessivamente Permite evitar a troca de contexto quando ela é mais cara que a tarefa da região crítica Cuidado com starvation

Condition variables Similares aos semáforos, mas sem uma variável armazenada Três operações básicas wait Atomicamente libera o lock e aguarda, retorna quando o lock tiver sido obtido novamente signal Permite que uma das threads em wait executem, ao retornar, o lock estará ativo novamente broadcast Permite que todas as threads aguardando pelo lock executem, ao retornar, o lock estará ativo novamente

Troca de mensagens É um método especial de comunicação que faz transferência de informação ou sinal de um domínio para outro Fortemente dependente do domínio Três M Multi-granularity Multithreading Multitasking

Em geral, associadas a processos ao invés de threads Intra-process Entre duas threads do mesmo processo Inter-process Entre threads de processos diferentes Process-Process Entre dois processos diferentes

Mecanismos de controle de fluxo São utilizados como sincronização em sistemas multiprocessados Fence Geralmente associado à memória Todas as operações de memória anteriores são completadas e as posteriores aguardam que a operação atual termine Barrier Associado a threads colaborativas Um ponto do código é definido como uma barreira quando todas as threads do grupo só passam desse ponto juntas

Questões dependentes de implementação Bibliotecas de threads implementam APIs em cima dos recursos fornecidos pelo sistema operacional Algumas funcionalidades podem variar Podem existir chamadas aparentemente idênticas que devem ser executadas em situações diferentes