Professional Documents
Culture Documents
o
Buffer
Comunicao Comunicao entre entre Processos Processos
Primitivas Primitivas Sleep Sleep//Wakeup Wakeup
# define N 100
int count = 0;
void producer(void)
{
int item;
void consumer(void)
{
int item;
while (TRUE) {
if (count == 0)
29
int item;
while (TRUE) {
item = produce_item();
if (count == N)
sleep();
insert_item(item);
count = count + 1;
if (count == 1)
wakeup(consumer)
}
}
if (count == 0)
sleep();
item = remove_item();
count = count - 1;
if (count == N - 1)
wakeup(producer)
consume_item(item);
}
}
Comunicao Comunicao entre entre Processos Processos
Primitivas Primitivas Sleep Sleep//Wakeup Wakeup
Problemas desta soluo: Acesso varivel count
irrestrita
O buffer est vazio e o consumidor acabou de checar a
varivel count com valor 0;
O escalonador (por meio de uma interrupo) decide que o
30
O escalonador (por meio de uma interrupo) decide que o
processo produtor ser executado; Ento o processo produtor
insere um item no buffer e incrementa a varivel count com
valor 1; Imaginando que o processo consumidor est
dormindo, o processo produtor envia um sinal de wakeup
para o consumidor;
No entanto, o processo consumidor no est dormindo, e no
recebe o sinal de wakeup;
Comunicao Comunicao entre entre Processos Processos
Primitivas Primitivas Sleep Sleep//Wakeup Wakeup
Assim que o processo consumidor executado novamente, a
varivel count j tem o valor zero; Nesse instante, o
consumidor colocado para dormir, pois acha que no
existem informaes a serem lidas no buffer;
Assim que o processo produtor acordar, ele insere outro item
no buffer e volta a dormir. Ambos os processos dormem para
31
no buffer e volta a dormir. Ambos os processos dormem para
sempre...
Soluo: bit de controle recebe um valor true
quando um sinal enviado para um processo que
no est dormindo. No entanto, no caso de vrios
pares de processos, vrios bits devem ser criados
sobrecarregando o sistema!!!!
Comunicao Comunicao entre entre Processos Processos
Semforos Semforos
Idealizados por E. W. Dijkstra (1965);
Varivel inteira que armazena o nmero de sinais
wakeups enviados;
Um semforo pode ter valor 0 quando no h sinal
armazenado ou um valor positivo referente ao
32
armazenado ou um valor positivo referente ao
nmero de sinais armazenados;
Duas primitivas de chamadas de sistema: down
(sleep) e up (wake);
Originalmente P (down) e V (up) em holands;
Comunicao Comunicao entre entre Processos Processos
Semforos Semforos
Down: verifica se o valor do semforo maior do que
0; se for, o semforo decrementado; se o valor for
0, o processo colocado para dormir sem completar
sua operao de down;
Todas essas aes so chamadas de aes
33
Todas essas aes so chamadas de aes
atmicas;
Aes atmicas garantem que quando uma operao no
semforo est sendo executada, nenhum processo pode
acessar o semforo at que a operao seja finalizada ou
bloqueada;
Comunicao Comunicao entre entre Processos Processos
Semforos Semforos
Up: incrementa o valor do semforo, fazendo com
que algum processo que esteja dormindo possa
terminar de executar sua operao down;
Semforo Mutex: garante a excluso mtua, no
permitindo que os processos acessem uma regio
34
permitindo que os processos acessem uma regio
crtica ao mesmo tempo
Tambm chamado de semforo binrio
Comunicao Comunicao entre entre Processos Processos
Semforo Binrio Semforo Binrio
Processo deseja entrar
na regio crtica
D
O
W
0
)
Processo
bloqueado
sem finalizar
Processo executa
Down(s)
Processo
finaliza
35
Fila de espera
de processos
Processo acessa
a regio crtica
O
W
N
(
S
=
0
)
D
O
W
N
(
S
>
0
UP (S) - processo sai
da regio crtica
Libera processo
da fila de espera
sem finalizar
Down(s), pois
s=0;
finaliza
Down(s),
pois s>0;
Comunicao Comunicao entre entre Processos Processos
Semforos Semforos
Problema produtor/consumidor: resolve o problema
de perda de sinais enviados;
Soluo utiliza trs semforos:
Full: conta o nmero de slots no buffer que esto
ocupados; iniciado com 0; resolve sincronizao;
36
ocupados; iniciado com 0; resolve sincronizao;
Empty: conta o nmero de slots no buffer que esto vazios;
iniciado com o nmero total de slots no buffer; resolve
sincronizao;
Mutex: garante que os processos produtor e consumidor no
acessem o buffer ao mesmo tempo; iniciado com 1; tambm
chamado de semforo binrio; Permite a excluso mtua;
Comunicao Comunicao entre entre Processos Processos
Semforos Semforos
# include prototypes.h
# define N 100
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
void consumer (void){
int item;
while (TRUE){
down(&full);
down(&mutex);
37
void producer (void){
int item;
while (TRUE){
produce_item(&item);
down(&empty);
down(&mutex);
enter_item(item);
up(&mutex);
up(&full);
}
}
down(&mutex);
remove_item(item);
up(&mutex);
up(&empty);
consume_item(item);
}
}
Comunicao Comunicao entre entre Processos Processos
Semforos Semforos
Problema: erro de programao pode gerar um
deadlock;
Suponha que o cdigo seja trocado no processo produtor;
.. ..
down(&empty); down(&mutex);
38
Se o buffer estiver cheio, o produtor ser bloqueado com
mutex = 0; Assim, a prxima vez que o consumidor tentar
acessar o buffer, ele tenta executar um down sobre o mutex,
ficando tambm bloqueado.
down(&empty); down(&mutex);
down(&mutex); down(&empty);
.. ..
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
Idealizado por Hoare (1974) e Brinch Hansen (1975)
Monitor: primitiva (unidade bsica de sincronizao)
de alto nvel para sincronizar processos:
Conjunto de procedimentos, variveis e estruturas de dados
39
agrupados em um nico mdulo ou pacote;
Somente um processo pode estar ativo dentro do
monitor em um mesmo instante; outros processos
ficam bloqueados at que possam estar ativos no
monitor;
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
monitor example
int i;
condition c;
procedure A();
.
Dependem da linguagem
de programao o
Compilador que garante
a excluso mtua.
40
.
end;
procedure B();
.
end;
end monitor;
Estrutura bsica de um Monitor
Java possui este recurso
Todos os recursos
compartilhados entre
processos devem estar
implementados dentro
do Monitor;
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
Execuo:
Chamada a uma rotina do monitor;
Instrues iniciais teste para detectar se um
outro processo est ativo dentro do monitor;
41
Se positivo, o processo novo ficar bloqueado at
que o outro processo deixe o monitor;
Caso contrrio, o processo novo executa as rotinas
no monitor;
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
Condition Variables (condition): variveis que
indicam uma condio; e
Operaes Bsicas: WAIT e SIGNAL
wait (condition) bloqueia o processo;
42
wait (condition) bloqueia o processo;
signal (condition) acorda o processo que
executou um wait na varivel condition e foi
bloqueado;
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
Variveis condicionais no so contadores,
portanto, no acumulam sinais;
Se um sinal enviado sem ningum
(processo) estar esperando, o sinal
43
(processo) estar esperando, o sinal
perdido;
Assim, um comando WAIT deve vir antes de
um comando SIGNAL.
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
Como evitar dois processos ativos no monitor ao
mesmo tempo?
(1) Hoare colocar o processo mais recente para
rodar, suspendendo o outro!!! (sinalizar e esperar)
(2) B. Hansen um processo que executa um
44
(2) B. Hansen um processo que executa um
SIGNAL deve deixar o monitor imediatamente;
O comando SIGNAL deve ser o ltimo de um procedimento
do monitor;
A condio (2) mais simples e mais fcil de se
implementar.
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
45
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
A excluso mtua automtica dos
procedimentos do monitor garante que, por
exemplo, se o produtor dentro de um
procedimento do monitor descobrir que o
buffer est cheio, esse produtor ser capaz
46
buffer est cheio, esse produtor ser capaz
de terminar a operao de WAIT sem se
preocupar, pois o consumidor no estar
ativo dentro do monitor at que WAIT tenha
terminado e o produtor tenha sido marcado
como no mais executvel;
Comunicao Comunicao entre entre Processos Processos
Monitores Monitores
Limitaes de semforos e monitores:
Ambos so boas solues somente para CPUs
com memria compartilhada. No so boas
solues para sistema distribudos;
Nenhuma das solues prov troca de
47
Nenhuma das solues prov troca de
informaes entre processo que esto em
diferentes mquinas;
Monitores dependem de uma linguagem de
programao poucas linguagens suportam
Monitores;
Comunicao Comunicao entre entre Processos Processos
Passagem de Mensagem Passagem de Mensagem
Prov troca de mensagens entre processos
rodando em mquinas diferentes;
Utiliza-se de duas primitivas de chamadas de
sistema: send e receive;
48
sistema: send e receive;
Comunicao Comunicao entre entre Processos Processos
Passagem de Mensagem Passagem de Mensagem
Podem ser implementadas como procedimentos:
send (destination,&message);
receive (source,&message);
O procedimento send envia para um determinado
49
destino uma mensagem, enquanto que o
procedimento receive recebe essa mensagem em
uma determinada fonte; Se nenhuma mensagem
est disponvel, o procedimento receive bloqueado
at que uma mensagem chegue.
Comunicao Comunicao entre entre Processos Processos
Passagem de Mensagem Passagem de Mensagem
Problemas desta soluo:
Mensagens so enviadas para/por mquinas
conectadas em rede; assim mensagens podem se
perder ao longo da transmisso;
Mensagem especial chamada acknowledgement
50
Mensagem especial chamada acknowledgement
o procedimento receive envia um
acknowledgement para o procedimento send. Se
esse acknowledgement no chega no
procedimento send, esse procedimento
retransmite a mensagem j enviada;
Comunicao Comunicao entre entre Processos Processos
Passagem de Mensagem Passagem de Mensagem
Problemas:
A mensagem recebida corretamente, mas o
acknowledgement se perde.
Ento o receive deve ter uma maneira de saber se
51
uma mensagem recebida uma retransmisso cada
mensagem enviada pelo send possui uma identificao
sequncia de nmeros; Assim, ao receber uma nova
mensagem, o receive verifica essa identificao, se
ela for semelhante a de alguma mensagem j recebida,
o receive descarta a mensagem!
Comunicao Comunicao entre entre Processos Processos
Passagem de Mensagem Passagem de Mensagem
Problemas:
Desempenho: copiar mensagens de um processo
para o outro mais lento do que operaes com
semforos e monitores;
Autenticao Segurana;
52
Autenticao Segurana;
Comunicao entre Processos Comunicao entre Processos
Passagem de Mensagem Passagem de Mensagem
53
Comunicao Comunicao entre entre Processos Processos
Outros mecanismos Outros mecanismos
RPC Remote Procedure Call
Rotinas que permitem comunicao de processos em
diferentes mquinas;
Chamadas remotas;
MPI Message-passing Interface;
Sistemas paralelos;
54
Sistemas paralelos;
RMI Java Remote Method Invocation
Permite que um objeto ativo em uma mquina virtual Java
possa interagir com objetos de outras mquinas virtuais
Java, independentemente da localizao dessas mquinas
virtuais;
Web Services
Permite que servios sejam compartilhados atravs da Web
Comunicao Comunicao entre entre Processos Processos
Outros mecanismos Outros mecanismos
Pipe:
Permite a criao de filas de processos;
ps -ef | grep produtor_consumidor;
Sada de um processo a entrada de outro;
Existe enquanto o processo existir;
Named pipe:
55
Named pipe:
Extenso de pipe;
Continua existindo mesmo depois que o processo terminar;
Criado com chamadas de sistemas;
Socket:
Par endereo IP e porta utilizado para comunicao entre processos
em mquinas diferentes;
Host X (192.168.1.1:1065) Server Y (192.168.1.2:80);
Problemas clssicos de Problemas clssicos de
comunicao entre processos comunicao entre processos
Problema do Jantar dos
Filsofos
Cinco filsofos desejam comer
espaguete; No entanto, para
poder comer, cada filsofo
precisa utilizar dois garfo e no
56
precisa utilizar dois garfo e no
apenas um. Portanto, os
filsofos precisam compartilhar
o uso do garfo de forma
sincronizada.
Os filsofos comem e pensam;
Problemas clssicos de Problemas clssicos de
comunicao entre processos comunicao entre processos
Problemas que devem
ser evitados:
Deadlock todos os
filsofos pegam um garfo
ao mesmo tempo;
57
ao mesmo tempo;
Starvation os filsofos
fiquem indefinidamente
pegando garfos
simultaneamente;
Soluo 1 para Filsofos (1/2) Soluo 1 para Filsofos (1/2)
58
Soluo 1 para Filsofos (2/2) Soluo 1 para Filsofos (2/2)
Problemas da soluo 1:
Execuo do take_fork(i) Se todos os filsofos
pegarem o garfo da esquerda, nenhum pega o da direita
Deadlock;
Se modificar a soluo (mudana 1):
59
Se modificar a soluo (mudana 1):
Verificar antes se o garfo da direita est disponvel. Se no
est, devolve o da esquerda e comea novamente
Starvation (Inanio);
Tempo fixo ou tempo aleatrio (rede Ethernet);
Serve para sistemas no-crticos;
Soluo 1 para Filsofos (2/2) Soluo 1 para Filsofos (2/2)
Se modificar a soluo (mudana 2):
semaphore mutex = 1;
60
down(&mutex);
up(&mutex);
Somente um filsofo come!
Soluo 2 para Filsofos usando Soluo 2 para Filsofos usando
Semforos (1/3) Semforos (1/3)
No apresenta:
Deadlocks;
Starvation;
Permite o mximo de paralelismo;
61
Permite o mximo de paralelismo;
Soluo 2 para Filsofos usando Soluo 2 para Filsofos usando
Semforos (2/3) Semforos (2/3)
62
Soluo 2 para Filsofos usando Soluo 2 para Filsofos usando
Semforos (3/3) Semforos (3/3)
63
Excluso Mtua Excluso Mtua
Problema dos Leitores / Escritores Problema dos Leitores / Escritores
O problema dos Leitores e Escritores modela o
acesso compartilhado a uma base de dados.
Processos leitores e processos escritores competem
por um acesso a essa base. possvel que vrios
processos leitores acessem a base ao mesmo
64
processos leitores acessem a base ao mesmo
tempo, no entanto, quando um processo escritor est
escrevendo (modificando) a base de dados, nenhum
outro processo pode realizar um acesso, nem
mesmo um processo leitor.
Excluso Mtua Excluso Mtua
Problema dos Problema dos
Leitores Leitores
/ Escritores / Escritores
65
Excluso Mtua Excluso Mtua
Problema do Barbeiro Problema do Barbeiro
Na barbearia h um barbeiro, uma cadeira de barbeiro e
n cadeiras para os clientes esperarem para ser
atendidos. Quando no h clientes, o barbeiro senta-se
na cadeira do barbeiro e dorme. Quando um cliente
chega, ele precisa acordar o barbeiro para ser atendido.
66
chega, ele precisa acordar o barbeiro para ser atendido.
Se outros clientes chegarem enquanto o barbeiro estiver
ocupado cortando o cabelo de algum cliente, eles se
sentam se houver cadeiras disponveis para clientes,
seno eles vo embora se todas as cadeiras para
clientes estiverem ocupadas.
Excluso Mtua Excluso Mtua
Problema do Problema do
Barbeiro Barbeiro
67