Parte1c

876 palavras 4 páginas
Programação concorrente
(processos e threads)

Programação concorrente
Por que precisamos dela?
Para utilizar o processador completamente
● Paralelismo entre CPU e dispositivos de I/O
● Para modelar o paralelismo do mundo real
● Para que mais de um computador/processador possa ser utilizado para resolver o problema
● Considere como exemplo encontrar o caminho através de um labirinto


Busca Sequencial no Labirinto

Busca Concorrente no Labirinto

Concorrência na linguagem ou no SO?
Há um longo debate sobre se a concorrência deve ser definida na linguagem de programação ou deixada para o sistema operacional
Ada, Java e C# fornecem concorrência
● C e C++ não


Implementação de tarefas concorrentes
Formas de implementar uma coleção de tarefas executando concorrentemente






Multiprogramação as tarefas multiplexam suas execuções num único processador (pseudo-paralelismo)
Multiprocessamento
as tarefas multiplexam suas execuções num sistema multiprocessador onde há acesso a uma memória compartilhada (acoplamento forte. e.g.: multicore)
Processamento distribuído as tarefas multiplexam suas execuções em vários processadores que não compartilham memória (acoplamento fraco. e.g. LAN´s, WAN,s)

Conceito de processo
Inclui: contador de programa (PC), pilha, dados

Estados de um processo (tarefa)

Process Control Block (PCB)

Chaveamento de contexto

Árvore de Processos

IPC (comunicação entre processos)

Memória compatilhada
● Troca de mensagens
● Pipes
● Semáforos
● Monitores
● Sockets
● RMI (remote method invotation)
● RPC (remote procedure calls)


Problemas de concorrência
Condições de disputa: o resultado depende da ordem de execução (imprevisível)
● Regiões críticas: partes do código onde ocorrem as condições de disputa. Solução: exclusão mútua e.g. Memória compartilhada: x=x+1; carrega o valor de x num registrador, incrementa, armazena o valor do registrador em x.


Princípios para boa solução de exclusão mútua
1) Nunca dois processos

Relacionados