Upload
dinhdiep
View
214
Download
0
Embed Size (px)
Citation preview
25/05/2011
1
Programação
Concorrente
Programação Concorrente[ O que é ]
• “Um programa concorrente é um conjunto de
programas seqüenciais comuns que são
executados em um paralelismo abstrato”
(M.Bem-Ari)
25/05/2011
2
Programação Concorrente[ O que é ]
• “Um programa concorrente especifica 2 ou mais
processos que cooperam para realizar uma
tarefa. Processos cooperam através de
comunicação; utilizam variáveis compartilhadas
ou troca de mensagens“(G. R. Andrews)
Programação concorrente:
introdução
• O mundo real funciona concorrentemente: várias atividades podem
ser executadas em paralelo. Exemplo: uma pessoa pode estar– respirando, e,– falando, e– escrevendo, e– lendo, etc.
• Computadores também operam concorrentemente. Exemplo: um
computador pode estar– compilando um programa, e– recebendo uma mensagem, e,– imprimindo um arquivo, e,– tocando música, etc.
25/05/2011
3
Programação Concorrente[ Motivação ]
• Aproveitar hardware com múltiplos
processadores
• Atender a vários usuários simultaneamente
• Melhorar o desempenho das aplicações
• Aumentar a disponibilidade para o usuário
• Objetos ativos e controle de atividades
• Programas paralelos
Programação Concorrente[ Processos ]
• Um processo é um programa que está em algum estado de
execução
• Tem espaço de endereçamento próprio, que é mapeado
pelo S.O. para memória física
• Possui um fluxo de controle ou thread único
• Mantém um contador de programa (PC) que indica o
endereço da próxima instrução
• A MMU (Memory Management Unit) traduz os endereços
lógicos em endereços físicos, que normalmente não são
contíguos (Memória Virtual)
25/05/2011
4
Programação Concorrente[ Processos ]
• Espaço de Endereçamento Lógico
Instruções
Dados Globais
Espaço de Endereçamento
Lógico de um Processo
Pilha
Heap
Programação Concorrente[ Processos ]
• Estados de um processo
– Executando (Running): Utilizando a CPU
– Executável ou Pronto (Runnable ou Ready):
Esperando para ser escalonado para usar a CPU
– Suspenso (Suspended): Recebeu um sinal para ser
suspenso
– Bloqueado (Blocked): Esperando pela conclusão de
algum serviço solicitado ao S.O.
25/05/2011
5
Programação Concorrente[ Processos ]
Executando
Suspenso
Executável
Bloqueado
Encerrado
Iniciado
Ativo
Programação Concorrente[ Threads ]
• O que é uma thread e como funciona?
25/05/2011
6
Programação Concorrente[ Threads ]
• Como funciona o Kernel-Level Thread (KLT)?
Programação Concorrente[ Threads ]
• Como funciona o User-Level Thread (ULT)?
25/05/2011
7
Programação Concorrente[ Threads ]
Espaço de Endereçamento de um Processo
Instruções
Variáveis Globais
Pilha
Heap
Pilha
Contador
de Programa
Thread 1
Pilha
Contador
de Programa
Thread 2
Pilha
Contador
de Programa
Thread n
Threads[ Ciclo de Vida ]
Criada
Pronta Executando
Esperando
Dormindo
Encerrada
Bloqueada
Operaçãode E/Siniciada
Término
sleep
waitnotifynotityAll
Operaçãode E/Sconcluída
start
Intervalo de tempo expirou
escalonada
interrompida
25/05/2011
8
Programação Concorrente[ Threads ]
• Vantagens sobre o uso de Threads:
– São muito mais leves de serem criadas
– A troca de contexto é mais suave pois compartilha
instruções, heap e variáveis globais
– Facilitam o compartilhamento de memória