Você está na página 1de 9

28/07/2010

Programação Concorrente

Aula 1

Definição
• Computação concorrente implica:
– Processos (ou threads) sendo executados ao
mesmo tempo
– 1 processador (pseudo-paralelismo)
– Mais de 1 processador (paralelismo real)
– Comunicação e sincronização entre os processos

1
28/07/2010

• Pseudo-paralelismo: processos executam em


apenas um processador
– Ex: Computador pessoal executando Windows ou
Linux

processos
eventos
e3 e3

e2 e2

e1 e1

t
t1
tempo

• Paralelismo real: processos executam em


diversos processadores ao mesmo tempo
– Ex: Computadores paralelos, clusters ou grades
computacionais (grids)

processos

e3

e2

e1

t
t1
tempo

2
28/07/2010

Objetivos

• Melhor utilização do sistema computacional


• Algumas aplicações são inerentemente
concorrentes (exemplo: cliente/servidor)
• Executar aplicações mais rapidamente
(programação paralela)

Estilos de Programação
• Sequencial

• Concorrente
– Concorrente (Pseudo-paralelismo)

– Paralela (Paralelismo real)

3
28/07/2010

Exemplo - Almoço
• Sequencial
– preparar salada (10 min.)
– preparar carne (20 min.)
– preparar sobremesa(10 min)

• Tempo Total: 40 min.

Exemplo - Almoço
• Concorrente
– Temperar a carne e pôr no forno (5 min.)
– Preparar a salada (10 min.)
– retirar a carne do forno (5 min.)
– preparar a sobremesa (10 min.)

• Tempo total: 30 min.

4
28/07/2010

Exemplo - Almoço
• Paralela

Pessoa 1 Pessoa 2
Preparar a carne (20 min.) preparar a salada (10 min.)
preparar a sobremesa (10 min.)

• Tempo total: 20 min.

Definição
• Computação concorrente implica:
– Processos (ou threads) sendo executados ao
mesmo tempo
– 1 processador (pseudo-paralelismo)
– Mais de 1 processador (paralelismo real)
– Comunicação e sincronização entre os processos

5
28/07/2010

Comunicação e Sincronismo
• Os processos concorrentes/paralelos muitas
vezes necessitam interagir
• Comunicação: processos trocam dados entre
si
– Exemplo: Um processo servidor recebe dados de
processos clientes
– Servidor de impressão

Comunicação e Sincronismo
• Sincronismo: processos devem executar suas
ações em uma determinada ordem
– O processo servidor deve esperar o processo
cliente gerar uma requisição

• Comunicação e sincronismo podem ser feitas:


– Memória compartilhada
– Memória distribuída (troca de mensagens)

6
28/07/2010

Organização da Disciplina
• Programação concorrente em 1 processador
• Computação paralela (vários processadores)
• Organização de hardware paralelo
– Computadores paralelos, grades e clusters
• Organização de programas paralelos
• Programação paralela
– Memória distribuída e compartilhada

Processos/Threads
• Um processo pode ter inúmeras threads

• Threads compartilham:
– Variáveis globais
– Espaço de endereçamento

7
28/07/2010

Iniciando novos processos


• Comando fork()
– Inicia uma cópia do processo pai
– Cópia do espaço de endereçamento do processo

• Comando exec() e variações


– Inicia um processo diferente

Fork()
#include <unistd.h>
pid_t pid;

pid = fork();

• Retorna negativo, em caso de erro;


• Retorna 0, se for o filho;
• Retorna o process id do filho, se for o pai

8
28/07/2010

Exec() e variantes
#include <unistd.h>
char *pathname;
char *argumentos;
execl(pathname,argumentos,NULL);

Ex: execl(“/bin/more” , ”more” , NULL);


execl(“/bin/ps” , ”ps” , ”-aux” , NULL);