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