SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
Aula 11 – Comunica¸c˜ao Interprocessos e
Problemas Cl´assicos de Comunica¸c˜ao
entre Processos
Norton Trevisan Roman
29 de setembro de 2017
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 1 / 40
Mensagens – Outros Mecanismos
Existem diversos mecanismos de comunica¸c˜ao atuais
baseados na troca de mensagens (al´em do envio
direto ao processo). Os mais representativos s˜ao:
Caixas Postais (Mailboxes)
Portos ou Portas (Ports)
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 2 / 40
Mensagens – Outros Mecanismos
Caixas Postais
Estrutura de dados: S˜ao filas de mensagens n˜ao
associadas, a princ´ıpio, com nenhum processo.
Lugar para se colocar temporariamente um certo
n´umero de mensagens
Mensagens s˜ao enviadas para ou lidas da caixa postal, e n˜ao
diretamente para os/dos processos
Quando um processo tenta enviar para uma caixa cheia, ele
´e suspenso at´e que uma mensagem seja removida
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 3 / 40
Mensagens – Outros Mecanismos
Caixas Postais
Ex: Produtor-consumidor
Tanto o produtor quanto o consumidor criam caixas postais
grandes o suficiente para conter N mensagens
O produtor envia mensagens com dados `a caixa postal do
consumidor
O consumidor envia mensagens vazias `a caixa do produtor
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 4 / 40
Mensagens – Outros Mecanismos
Caixas Postais
Os processos podem enviar e receber mensagens das
caixas postais
Mecanismo adequado para comunicar diversos remetentes a
diversos receptores
Cada processo pode ter uma caixa exclusiva
Restri¸c˜ao
Necessidade de envio de duas mensagens para comunicar o
remetente com o receptor: uma do remetente `a caixa postal,
e outra da caixa postal para o receptor
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 5 / 40
Mensagens – Outros Mecanismos
Caixas Postais
Processo
Emissor 1
Processo
Receptor 1
Caixa
Postal
msg msg
Comunica¸c˜ao um-para-um
Processo
Emissor 1
Processo
Receptor 1
Processo
Receptor n
Caixa
Postal
...msg msg
msg
Comunica¸c˜ao um-para-v´arios
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 6 / 40
Mensagens – Outros Mecanismos
Caixas Postais em Posix:
Implementadas como uma fila de mensagens
msgget() – faz a requisi¸c˜ao (ao kernel) de uma fila de
mensagens usando o nome da caixa de mensagens
passado por parˆametro (ou criando uma, n˜ao existir)
msgsnd() – envia uma mensagem a uma caixa particular
msgrcv() – obt´em uma mensagem de uma determinada
caixa
Em qualquer caso, se n˜ao houver espa¸co (ou
mensagem), o processo ´e bloqueado → ´e adicionado `a
fila de processos em espera associada `a caixa.
´E verificado sempre se o processo pode acessar a fila
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 7 / 40
Mensagens – Outros Mecanismos
Portas
Computadores em geral tem uma ´unica conex˜ao de
rede → Todo dado chega por esta conex˜ao
Como o computador sabe a que aplica¸c˜ao enviar os
dados que chegam?
Usando portas. Os dados transmitidos s˜ao acompanhados
por um endere¸co que identifica o computador (IP) e a porta
de destino
S˜ao elementos de software que permitem a
comunica¸c˜ao entre conjuntos de processos
Ponto de conex˜ao de dados virtual (ou l´ogica), usada para
que programas troquem informa¸c˜ao diretamente
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 8 / 40
Mensagens – Outros Mecanismos
Portas
Ex: TCP – numeradas de 0 a 65.535 (16-bits)
No TCP, a porta 0 ´e reservada e n˜ao pode ser usada, no
UDP, 0 significa nenhuma porta
1 – 1.023 s˜ao restritas: reservadas para servi¸cos conhecidos,
como HTTP e FTP
Aplica¸c˜oes de usu´arios devem usar as demais (embora
possam usar essas)
Cada porta ´e como uma caixa postal, por´em com
um dono, que ser´a o processo que a criar
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 9 / 40
Mensagens – Outros Mecanismos
Portas
Cria porta(S,sa´ıda,msg) Cria porta(E,entrada,msg)
Conecta porta(S,E)
Envia porta(S,msg) recebe porta(E,msg)
Desconecta porta(S,E)
Destr´oi porta(S) Destr´oi porta(E)
Processo 1 Processo 2
Porta S Porta Emsg
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 10 / 40
Mensagens – Outros Mecanismos
Portas: Outras Caracter´ısticas
A cria¸c˜ao e a interliga¸c˜ao de portas e caixas postais
pode ser feita de maneira dinˆamica
A necessidade de enfileiramento das mensagens enviadas
torna necess´ario o uso de buffers, para o armazenamento
intermedi´ario
A comunica¸c˜ao entre processos locais ou remotos,
em um sistema estruturado com portas, ser´a feita
pela execu¸c˜ao de primitivas (s´ıncronas ou
ass´ıncronas) do tipo envia e recebe
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 11 / 40
Mensagens – Outros Mecanismos
Portas: Sockets
Pareamento de um endere¸co IP e porta, como um
ponto de conex˜ao, associada a uma aplica¸c˜ao
Host X (192.168.1.1:1065) Server Y (192.168.1.2:80)
Para que possa ocorrer a troca de mensagens, uma
aplica¸c˜ao no servidor liga um socket a uma porta
espec´ıfica
Registra no SO a aplica¸c˜ao, para que esta receba todo dado
destinado `aquela porta
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 12 / 40
Mensagens – Outros Mecanismos
Portas: Sockets
Em unix, sockets s˜ao um tipo de arquivo que
conecta processos a suas respectivas portas
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 13 / 40
Outros Mecanismos de Comunica¸c˜ao
Alguns outros mecanismos para comunica¸c˜ao
inter-processos s˜ao:
Pipes
Sinais (Signals)
Barreiras
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 14 / 40
Outros Mecanismos de Comunica¸c˜ao
Pipes
Fluxo de bytes de m˜ao ´unica entre processos
Usados no sistema operacional UNIX para permitir a
comunica¸c˜ao entre processos
Uma pipe ´e um modo de conectar a sa´ıda de um processo
com a entrada de outro processo, sem o uso de arquivos
tempor´arios
Ao tentar ler uma entrada da pipe, um processo ´e bloqueado
at´e que o dado esteja dispon´ıvel
Todo dado escrito por um processo na
pipe ´e dirigido, pelo kernel, a outro
processo, que pode ent˜ao lˆe-lo
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 15 / 40
Outros Mecanismos de Comunica¸c˜ao
Pipes
Uma pipeline ´e uma conex˜ao de dois ou mais
programas ou processos atrav´es de pipes
Permite a cria¸c˜ao de filas de processos
Ex: ps -ef | grep alunos | sort
Existe enquanto o processo existir
Exemplos:
Sem uso de pipes (usando arquivos tempor´arios)
$ ls > temp
$ sort < temp
Com uso de pipes
$ ls | sort
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 16 / 40
Outros Mecanismos de Comunica¸c˜ao
Pipes
Podem ser consideradas arquivos abertos sem
imagem correspondente no sistema de arquivos
Funcionamento:
Um processo cria uma nova pipe, via a chamada pipe()
pipe() retorna um par de descritores de arquivo
O processo passa esses descritores a seus filhos (via fork())
Cada filho pode ler da pipe fazendo um read() com o
primeiro descritor, e escrever com um write() no segundo.
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 17 / 40
Outros Mecanismos de Comunica¸c˜ao
Pipes – Exemplo
Usa a chamada ao
sistema dup
#include <unistd.h>
void main(void) {
int aux[2]; /* auxiliar para a cria¸c~ao das pipes */
/* Cria a pipe, recebendo os dois descritores */
if (pipe(aux)==-1) exit(1);
switch (fork()) {
case -1 : /*erro*/
exit(1); /*Falha no fork*/
case 0 : /* processo filho */
/* fecho o stdin do filho */
close(0);
/* abro o descritor 0 (stdin) para a leitura
da pipe */
if (dup(aux[0])!=0) exit(1);
/* fecho a ponta de escrita da pipe */
close(aux[1]);
/* executo o programa no filho */
execlp("./filho","filho",NULL);
}
/* se n~ao for -1 nem 0, ´e o pai */
/* fechando a ponta de leitura da pipe */
close(aux[0]);
/* escrevendo no filho */
write(aux[1], "Oi", 2);
}
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 18 / 40
Outros Mecanismos de Comunica¸c˜ao
Pipes – Exemplo
Usa a chamada ao
sistema dup
int dup(int oldfd);
Cria uma c´opia do
descritor oldfd
Usa o descritor sem uso
de menor n´umero como
novo descritor
#include <unistd.h>
void main(void) {
int aux[2]; /* auxiliar para a cria¸c~ao das pipes */
/* Cria a pipe, recebendo os dois descritores */
if (pipe(aux)==-1) exit(1);
switch (fork()) {
case -1 : /*erro*/
exit(1); /*Falha no fork*/
case 0 : /* processo filho */
/* fecho o stdin do filho */
close(0);
/* abro o descritor 0 (stdin) para a leitura
da pipe */
if (dup(aux[0])!=0) exit(1);
/* fecho a ponta de escrita da pipe */
close(aux[1]);
/* executo o programa no filho */
execlp("./filho","filho",NULL);
}
/* se n~ao for -1 nem 0, ´e o pai */
/* fechando a ponta de leitura da pipe */
close(aux[0]);
/* escrevendo no filho */
write(aux[1], "Oi", 2);
}
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 18 / 40
Outros Mecanismos de Comunica¸c˜ao
Problemas com pipes:
N˜ao h´a como abrir uma pipe j´a existente
Dois processos n˜ao compartilham a mesma pipe, a menos que sejam
irm˜aos, e ela tenha sido criada pelo pai desses processos
Named pipe (ou FIFO)
Extens˜ao de pipe que soluciona esse problema
´E um tipo de arquivo especial em Unix
Pode ser aberto por qualquer processo
Continua existindo mesmo depois que o processo terminar
Criado com chamadas de sistemas
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 19 / 40
Outros Mecanismos de Comunica¸c˜ao
Sinais (Linux e Unix)
S˜ao interrup¸c˜oes de software (traps), usadas para
que um processo possa enviar um sinal a outro
processo
Processos podem enviar sinais apenas a seu grupo
de processos (ancestrais, irm˜aos e descendentes)
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 20 / 40
Outros Mecanismos de Comunica¸c˜ao
Sinais (Linux e Unix)
Pode-se tamb´em dizer ao sistema receptor o que
deve fazer quando um sinal ´e recebido:
Ignor´a-lo
Captur´a-lo
Deve-se definir um procedimento para trat´a-lo
Quando o sinal ´e recebido, o controle passa ao tratador
Quando esse finaliza e retorna, o controle volta para onde estava
(como no tratamento de interrup¸c˜oes)
Deix´a-lo matar o processo
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 21 / 40
Outros Mecanismos de Comunica¸c˜ao
Barreiras
Algumas aplica¸c˜oes podem ser divididas em fases
Nenhum processo pode avan¸car `a pr´oxima fase at´e que
todos os processos possam fazˆe-lo
Introduz-se uma barreira ao final de cada fase
Quando alcan¸ca a barreira, um processo fica bloqueado at´e
que todos os outros alcancem a barreira.
A barreira garante que as opera¸c˜oes colocadas antes dela
s˜ao terminadas antes de come¸car as opera¸c˜oes localizadas
ap´os ela.
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 22 / 40
Outros Mecanismos de Comunica¸c˜ao
Barreiras – funcionamento
Ao chegar ao ponto em que deve haver a barreira, o
processo executa a primitiva barrier() e ´e suspenso
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 23 / 40
Outros Mecanismos de Comunica¸c˜ao
Barreiras – Linux
O processo inicializa uma barreira, chamando
pthread barrier init()
Passando, dentre outros parˆametros, o n´umero de threads
que sincronizar˜ao na barreira
Cada thread, ao chegar na barreira, chama
pthread barrier wait()
Ela bloqueia, at´e que o n´umero de threads especificado
tenha chamado wait() nessa mesma barreira
Quando o n´umero requerido chamou wait(), elas s˜ao
desbloqueadas
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 24 / 40
Referˆencias Adicionais
Bovet, D.P., Cesati, M.: Understanding the Linux Kernel. O’Reilly. 1st
Ed. 2000.
http://macboypro.wordpress.com/2009/05/15/posix-message-passing-in-
linux/
http://www.linux-tutorial.info/modules.php?name=MContent
&pageid=292
http://linux.die.net/man/3/pthread barrier wait
http://linux.die.net/man/3/pthread barrier init
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 25 / 40
Problemas Cl´assicos
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 26 / 40
Produtor – Consumidor
J´a visto
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 27 / 40
Jantar dos Fil´osofos (Dijkstra, 1965)
Cinco fil´osofos est˜ao sentados ao redor de uma
mesa circular para o jantar.
Cada fil´osofo possui um prato para
comer macarr˜ao
Al´em disso, eles disp˜oem de hashis,
em vez de garfos
Cada um precisa de 2 hashis
Entre cada par de pratos existe
apenas um hashi
Hashis precisam ser compartilhados de forma sincronizada
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 28 / 40
Jantar dos Fil´osofos
Os fil´osofos comem e pensam, alternadamente
N˜ao se at´em a apenas uma das tarefas
Al´em disso, quando comem,
pegam apenas um hashi por vez
Quem consegue pegar os dois, come
por alguns instantes e depois larga
os hashis
Como evitar que fiquem
bloqueados?
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 29 / 40
Jantar dos Fil´osofos
Que fazer?
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 30 / 40
Jantar dos Fil´osofos
Pense um pouco Pegue os hashis
Largue os hashis Coma um pouco
Que fazer?
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 30 / 40
Jantar dos Fil´osofos
Pense um pouco Pegue os hashis
Largue os hashis Coma um pouco
Pense um pouco
Trave hashi esq.
Trave hashi dir.
Coma um pouco
Solte hashi esq.
Solte hashi dir.
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 30 / 40
Jantar dos Fil´osofos
#define N 5 /* n´umero de fil´osofos */
void filosofo(int i) { /* i: fil´osofo (0 a 4) */
while (TRUE) {
pensa();
pega hashi(i); /* pega hashi esquerdo */
pega hashi((i+1) % N); /* pega hashi direito */
come();
solta hashi(i); /* devolve hashi esquerdo */
solta hashi((i+1) % N); /* devolve hashi direito */
}
}
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 31 / 40
Jantar dos Fil´osofos
#define N 5 /* n´umero de fil´osofos */
void filosofo(int i) { /* i: fil´osofo (0 a 4) */
while (TRUE) {
pensa();
pega hashi(i); /* pega hashi esquerdo */
pega hashi((i+1) % N); /* pega hashi direito */
come();
solta hashi(i); /* devolve hashi esquerdo */
solta hashi((i+1) % N); /* devolve hashi direito */
}
}
Isso funciona?
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 31 / 40
Jantar dos Fil´osofos
#define N 5 /* n´umero de fil´osofos */
void filosofo(int i) { /* i: fil´osofo (0 a 4) */
while (TRUE) {
pensa();
pega hashi(i); /* pega hashi esquerdo */
pega hashi((i+1) % N); /* pega hashi direito */
come();
solta hashi(i); /* devolve hashi esquerdo */
solta hashi((i+1) % N); /* devolve hashi direito */
}
}
Isso funciona?
Em pega hashi(), se todos os fil´osofos
pegarem o hashi da esquerda, nenhum pegar´a
o da direita – deadlock
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 31 / 40
Jantar dos Fil´osofos
Como solucionar?
Ap´os pegar o hashi da esquerda, o fil´osofo
verifica se o da direita est´a livre.
Se n˜ao estiver, devolve o hashi que pegou,
espera um pouco e tenta novamente
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 32 / 40
Jantar dos Fil´osofos
Isso funciona?
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 33 / 40
Jantar dos Fil´osofos
Isso funciona?
Se todos os fil´osofos pegarem o hashi da
esquerda ao mesmo tempo:
Ver˜ao que o da direita n˜ao est´a livre
Largar˜ao seu hashi e e esperar˜ao
Pegar˜ao novamente o hashi da esquerda
Ver˜ao que o da direita n˜ao est´a livre
. . .
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 33 / 40
Jantar dos Fil´osofos
Isso funciona?
Se todos os fil´osofos pegarem o hashi da
esquerda ao mesmo tempo:
Ver˜ao que o da direita n˜ao est´a livre
Largar˜ao seu hashi e e esperar˜ao
Pegar˜ao novamente o hashi da esquerda
Ver˜ao que o da direita n˜ao est´a livre
. . .
Starvation (inani¸c˜ao)
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 33 / 40
Jantar dos Fil´osofos
E agora?
Poder´ıamos fazer com que eles esperassem um
tempo aleat´orio
Reduz a chance de starvation
Na maioria das aplica¸c˜oes, tentar novamente
mais tarde n˜ao ´e problema
Via ethernet, ´e exatamente isso que ´e feito com
envio de pacotes
Sistemas n˜ao cr´ıticos
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 34 / 40
Jantar dos Fil´osofos
E agora, como evitar as m´ultiplas
tentativas nos hashis?
Pense um pouco
Trave hashi esq.
Trave hashi dir.
Coma um pouco
Solte hashi esq.
Solte hashi dir.
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 35 / 40
Jantar dos Fil´osofos
E agora, como evitar as m´ultiplas
tentativas nos hashis?
Proteger os passos ap´os “pense um
pouco” com um sem´aforo bin´ario – um
mutex
down(mutex) ao entrar na ´area cr´ıtica
up(mutex) ao sair dela
Pense um pouco
Trave hashi esq.
Trave hashi dir.
Coma um pouco
Solte hashi esq.
Solte hashi dir.
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 35 / 40
Jantar dos Fil´osofos
#define N 5 /* n´umero de fil´osofos */
void filosofo(int i) { /* i: fil´osofo (0 a 4) */
while (TRUE) {
pensa();
pega hashi(i); /* pega hashi esquerdo */
pega hashi((i+1) % N); /* pega hashi direito */
come();
solta hashi(i); /* devolve hashi esquerdo */
solta hashi((i+1) % N); /* devolve hashi direito */
}
}
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 36 / 40
Jantar dos Fil´osofos
#define N 5 /* n´umero de fil´osofos */
semaphore mutex=1;
void filosofo(int i) { /* i: fil´osofo (0 a 4) */
while (TRUE) {
pensa();
down(&mutex);
pega hashi(i); /* pega hashi esquerdo */
pega hashi((i+1) % N); /* pega hashi direito */
come();
solta hashi(i); /* devolve hashi esquerdo */
solta hashi((i+1) % N); /* devolve hashi direito */
up(&mutex);
}
}
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 36 / 40
Jantar dos Fil´osofos
#define N 5 /* n´umero de fil´osofos */
semaphore mutex=1;
void filosofo(int i) { /* i: fil´osofo (0 a 4) */
while (TRUE) {
pensa();
down(&mutex);
pega hashi(i); /* pega hashi esquerdo */
pega hashi((i+1) % N); /* pega hashi direito */
come();
solta hashi(i); /* devolve hashi esquerdo */
solta hashi((i+1) % N); /* devolve hashi direito */
up(&mutex);
}
}
Somente um fil´osofo come
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 36 / 40
Jantar dos Fil´osofos
H´a problemas? Pense um pouco
Trave hashi esq.
Trave hashi dir.
Coma um pouco
Solte hashi esq.
Solte hashi dir.
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 37 / 40
Jantar dos Fil´osofos
H´a problemas?
Tecnicamente, resolve o problema
Na pr´atica, contudo, tem um problema
de desempenho:
Somente um fil´osofo pode comer em um
dado momento
Com 5 hashis,
dever´ıamos permitir que
2 fil´osofos comessem ao
mesmo tempo
Pense um pouco
Trave hashi esq.
Trave hashi dir.
Coma um pouco
Solte hashi esq.
Solte hashi dir.
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 37 / 40
Jantar dos Fil´osofos
Como solucionar?
Sem deadlocks ou starvation
Com o m´aximo de paralelismo para um n´umero arbitr´ario de
fil´osofos
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 38 / 40
Jantar dos Fil´osofos
Como solucionar?
Sem deadlocks ou starvation
Com o m´aximo de paralelismo para um n´umero arbitr´ario de
fil´osofos
Usar um arranjo – estado – para identificar se um fil´osofo
est´a comendo, pensando ou faminto (pensando em pegar os
hashis)
Um fil´osofo s´o pode comer (estado) se nenhum dos vizinhos
imediatos estiver comendo
Usar um arranjo de sem´aforos, um para cada fil´osofo
Fil´osofos famintos podem ser bloqueados se os hashis estiverem
ocupados
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 38 / 40
Jantar dos Fil´osofos
#define N 5 /* n´umero de fil´osofos */
#define ESQ (i+N-1)%N /* vizinho `a esquerda de i */
#define DIR (i+1)%N /* vizinho `a direita de i */
#define PEN 0 /* fil´osofo pensando */
#define FAM 1 /* fil´osofo faminto */
#define COM 2 /* fil´osofo comendo */
typedef int semaforo;
int estado[N]; /* estado dos fil´osofos (deve iniciar com PEN) */
semaforo mutex = 1; /* exclus~ao m´utua para estado */
semaforo s[N]; /* para bloqueio dos fil´osofos (iniciados com 0) */
void filosofo(int i) { /* i: n´umero do fil´osofo (0 a N-1) */
while (TRUE) {
pensa(); /* o fil´osofo est´a pensando */
pega_hashi(i); /* pega dois hashis ou bloqueia */
come(); /* manda o rango pr´a dentro */
larga_hashi(i); /* devolve os hashis `a mesa */
}
}
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 39 / 40
Jantar dos Fil´osofos
void pega_hashi(int i) { /* i: n´umero do fil´osofo (0 a N-1) */
down(&mutex); /* entra na regi~ao cr´ıtica */
estado[i] = FAM; /* registra que o fil´osofo est´a faminto */
testa(i); /* tenta pegar 2 hashis */
up(&mutex); /* sai da regi~ao cr´ıtica */
down(&s[i]); /* bloqueia se n~ao pegou os hashis */
}
void larga_hashi(int i) { /* i: n´umero do fil´osofo (0 a N-1) */
down(&mutex); /* entra na regi~ao cr´ıtica */
estado[i] = PEN; /* o fil´osofo acabou de comer */
testa(ESQ); /* v^e se o vizinho da esquerda pode comer agora */
testa(DIR); /* v^e se o vizinho da direita pode comer agora */
up(&mutex); /* sai da regi~ao cr´ıtica */
}
void testa(int i) { /* i: n´umero do fil´osofo (0 a N-1) */
if (estado[i] == FAM && estado[ESQ] != COM && estado[DIR] != COM) {
estado[i] = COM; /* registra que o fil´osofo est´a comendo */
up(&s[i]); /* libera para comer */
}
}
Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 40 / 40

Mais conteúdo relacionado

Mais procurados

Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1
Cristiano Pires Martins
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
Silvino Neto
 
Sistema Operacional de Tempo Real (vx works)
Sistema Operacional de Tempo Real (vx works)Sistema Operacional de Tempo Real (vx works)
Sistema Operacional de Tempo Real (vx works)
Jose Silva
 

Mais procurados (20)

(ACH2044) Sistemas Operacionais - Aula 09
(ACH2044) Sistemas Operacionais - Aula 09(ACH2044) Sistemas Operacionais - Aula 09
(ACH2044) Sistemas Operacionais - Aula 09
 
(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12
 
(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06
 
(ACH2044) Sistemas Operacionais - Aula 08
(ACH2044) Sistemas Operacionais - Aula 08(ACH2044) Sistemas Operacionais - Aula 08
(ACH2044) Sistemas Operacionais - Aula 08
 
(ACH2044) Sistemas Operacionais - Aula 18
(ACH2044) Sistemas Operacionais - Aula 18(ACH2044) Sistemas Operacionais - Aula 18
(ACH2044) Sistemas Operacionais - Aula 18
 
(ACH2044) Sistemas Operacionais - Aula 20
(ACH2044) Sistemas Operacionais - Aula 20(ACH2044) Sistemas Operacionais - Aula 20
(ACH2044) Sistemas Operacionais - Aula 20
 
(ACH2044) Sistemas Operacionais - Aula 13
(ACH2044) Sistemas Operacionais - Aula 13(ACH2044) Sistemas Operacionais - Aula 13
(ACH2044) Sistemas Operacionais - Aula 13
 
(ACH2044) Sistemas Operacionais - Aula 21
(ACH2044) Sistemas Operacionais - Aula 21(ACH2044) Sistemas Operacionais - Aula 21
(ACH2044) Sistemas Operacionais - Aula 21
 
(ACH2044) Sistemas Operacionais - Aula 17
(ACH2044) Sistemas Operacionais - Aula 17(ACH2044) Sistemas Operacionais - Aula 17
(ACH2044) Sistemas Operacionais - Aula 17
 
(ACH2044) Sistemas Operacionais - Aula 19
(ACH2044) Sistemas Operacionais - Aula 19(ACH2044) Sistemas Operacionais - Aula 19
(ACH2044) Sistemas Operacionais - Aula 19
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPU
 
Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1Aula 02-processos-e-threads-tanenbaum-parte-1
Aula 02-processos-e-threads-tanenbaum-parte-1
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
 
Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e Threads
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: Sincronização
 
Arquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e ThreadsArquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e Threads
 
Gerência de Processos: Processos
Gerência de Processos: ProcessosGerência de Processos: Processos
Gerência de Processos: Processos
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Sistema Operacional de Tempo Real (vx works)
Sistema Operacional de Tempo Real (vx works)Sistema Operacional de Tempo Real (vx works)
Sistema Operacional de Tempo Real (vx works)
 
Visão Geral: Introdução
Visão Geral: IntroduçãoVisão Geral: Introdução
Visão Geral: Introdução
 

Semelhante a (ACH2044) Sistemas Operacionais - Aula 11

51952248 1285455275-seguranca-de-redes
51952248 1285455275-seguranca-de-redes51952248 1285455275-seguranca-de-redes
51952248 1285455275-seguranca-de-redes
Marco Guimarães
 
[Antero Jesus] Principais Protocolos de Rede
[Antero Jesus] Principais Protocolos de Rede[Antero Jesus] Principais Protocolos de Rede
[Antero Jesus] Principais Protocolos de Rede
ajtr98
 
Modelo osi tcp ip e protocolos
Modelo osi tcp ip e protocolosModelo osi tcp ip e protocolos
Modelo osi tcp ip e protocolos
Atanasio Pascoal
 

Semelhante a (ACH2044) Sistemas Operacionais - Aula 11 (20)

51952248 1285455275-seguranca-de-redes
51952248 1285455275-seguranca-de-redes51952248 1285455275-seguranca-de-redes
51952248 1285455275-seguranca-de-redes
 
Redes de Computadores 2 - Conceitos Gerais
Redes de Computadores 2 - Conceitos GeraisRedes de Computadores 2 - Conceitos Gerais
Redes de Computadores 2 - Conceitos Gerais
 
Redes de computadores 2 - Protocolos
Redes de computadores 2 - ProtocolosRedes de computadores 2 - Protocolos
Redes de computadores 2 - Protocolos
 
Definições E Correlações Dhcp dns smtp e ntp
Definições E Correlações Dhcp dns smtp e ntpDefinições E Correlações Dhcp dns smtp e ntp
Definições E Correlações Dhcp dns smtp e ntp
 
Sistemas de Comunicação em Tempo Real
Sistemas de Comunicação em Tempo RealSistemas de Comunicação em Tempo Real
Sistemas de Comunicação em Tempo Real
 
Tcp udp
Tcp udpTcp udp
Tcp udp
 
SD_Aula_03_Introdução ao SD.pdf
SD_Aula_03_Introdução ao SD.pdfSD_Aula_03_Introdução ao SD.pdf
SD_Aula_03_Introdução ao SD.pdf
 
Conceitos básicos de info
Conceitos básicos de infoConceitos básicos de info
Conceitos básicos de info
 
Resumo para concurso: Internet
Resumo para concurso: InternetResumo para concurso: Internet
Resumo para concurso: Internet
 
Aula1 protocolos
Aula1 protocolosAula1 protocolos
Aula1 protocolos
 
Aula1 protocolos
Aula1 protocolosAula1 protocolos
Aula1 protocolos
 
Apostila internet
Apostila internetApostila internet
Apostila internet
 
http https Professor Marlon Sales
http https Professor Marlon Saleshttp https Professor Marlon Sales
http https Professor Marlon Sales
 
[Antero Jesus] Principais Protocolos de Rede
[Antero Jesus] Principais Protocolos de Rede[Antero Jesus] Principais Protocolos de Rede
[Antero Jesus] Principais Protocolos de Rede
 
Principais protocolos de rede
Principais protocolos de redePrincipais protocolos de rede
Principais protocolos de rede
 
redes
redesredes
redes
 
Modelo osi tcp ip e protocolos
Modelo osi tcp ip e protocolosModelo osi tcp ip e protocolos
Modelo osi tcp ip e protocolos
 
Tecnologia web aula 02
Tecnologia web  aula 02Tecnologia web  aula 02
Tecnologia web aula 02
 
Apresentação de sd2
Apresentação de sd2Apresentação de sd2
Apresentação de sd2
 
Protocolos de transporte
Protocolos de transporteProtocolos de transporte
Protocolos de transporte
 

Mais de Norton Trevisan Roman

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
azulassessoria9
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
rosenilrucks
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
azulassessoria9
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
LeloIurk1
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
azulassessoria9
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
LeloIurk1
 

Último (20)

PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 

(ACH2044) Sistemas Operacionais - Aula 11

  • 1. Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Processos Norton Trevisan Roman 29 de setembro de 2017 Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 1 / 40
  • 2. Mensagens – Outros Mecanismos Existem diversos mecanismos de comunica¸c˜ao atuais baseados na troca de mensagens (al´em do envio direto ao processo). Os mais representativos s˜ao: Caixas Postais (Mailboxes) Portos ou Portas (Ports) Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 2 / 40
  • 3. Mensagens – Outros Mecanismos Caixas Postais Estrutura de dados: S˜ao filas de mensagens n˜ao associadas, a princ´ıpio, com nenhum processo. Lugar para se colocar temporariamente um certo n´umero de mensagens Mensagens s˜ao enviadas para ou lidas da caixa postal, e n˜ao diretamente para os/dos processos Quando um processo tenta enviar para uma caixa cheia, ele ´e suspenso at´e que uma mensagem seja removida Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 3 / 40
  • 4. Mensagens – Outros Mecanismos Caixas Postais Ex: Produtor-consumidor Tanto o produtor quanto o consumidor criam caixas postais grandes o suficiente para conter N mensagens O produtor envia mensagens com dados `a caixa postal do consumidor O consumidor envia mensagens vazias `a caixa do produtor Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 4 / 40
  • 5. Mensagens – Outros Mecanismos Caixas Postais Os processos podem enviar e receber mensagens das caixas postais Mecanismo adequado para comunicar diversos remetentes a diversos receptores Cada processo pode ter uma caixa exclusiva Restri¸c˜ao Necessidade de envio de duas mensagens para comunicar o remetente com o receptor: uma do remetente `a caixa postal, e outra da caixa postal para o receptor Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 5 / 40
  • 6. Mensagens – Outros Mecanismos Caixas Postais Processo Emissor 1 Processo Receptor 1 Caixa Postal msg msg Comunica¸c˜ao um-para-um Processo Emissor 1 Processo Receptor 1 Processo Receptor n Caixa Postal ...msg msg msg Comunica¸c˜ao um-para-v´arios Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 6 / 40
  • 7. Mensagens – Outros Mecanismos Caixas Postais em Posix: Implementadas como uma fila de mensagens msgget() – faz a requisi¸c˜ao (ao kernel) de uma fila de mensagens usando o nome da caixa de mensagens passado por parˆametro (ou criando uma, n˜ao existir) msgsnd() – envia uma mensagem a uma caixa particular msgrcv() – obt´em uma mensagem de uma determinada caixa Em qualquer caso, se n˜ao houver espa¸co (ou mensagem), o processo ´e bloqueado → ´e adicionado `a fila de processos em espera associada `a caixa. ´E verificado sempre se o processo pode acessar a fila Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 7 / 40
  • 8. Mensagens – Outros Mecanismos Portas Computadores em geral tem uma ´unica conex˜ao de rede → Todo dado chega por esta conex˜ao Como o computador sabe a que aplica¸c˜ao enviar os dados que chegam? Usando portas. Os dados transmitidos s˜ao acompanhados por um endere¸co que identifica o computador (IP) e a porta de destino S˜ao elementos de software que permitem a comunica¸c˜ao entre conjuntos de processos Ponto de conex˜ao de dados virtual (ou l´ogica), usada para que programas troquem informa¸c˜ao diretamente Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 8 / 40
  • 9. Mensagens – Outros Mecanismos Portas Ex: TCP – numeradas de 0 a 65.535 (16-bits) No TCP, a porta 0 ´e reservada e n˜ao pode ser usada, no UDP, 0 significa nenhuma porta 1 – 1.023 s˜ao restritas: reservadas para servi¸cos conhecidos, como HTTP e FTP Aplica¸c˜oes de usu´arios devem usar as demais (embora possam usar essas) Cada porta ´e como uma caixa postal, por´em com um dono, que ser´a o processo que a criar Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 9 / 40
  • 10. Mensagens – Outros Mecanismos Portas Cria porta(S,sa´ıda,msg) Cria porta(E,entrada,msg) Conecta porta(S,E) Envia porta(S,msg) recebe porta(E,msg) Desconecta porta(S,E) Destr´oi porta(S) Destr´oi porta(E) Processo 1 Processo 2 Porta S Porta Emsg Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 10 / 40
  • 11. Mensagens – Outros Mecanismos Portas: Outras Caracter´ısticas A cria¸c˜ao e a interliga¸c˜ao de portas e caixas postais pode ser feita de maneira dinˆamica A necessidade de enfileiramento das mensagens enviadas torna necess´ario o uso de buffers, para o armazenamento intermedi´ario A comunica¸c˜ao entre processos locais ou remotos, em um sistema estruturado com portas, ser´a feita pela execu¸c˜ao de primitivas (s´ıncronas ou ass´ıncronas) do tipo envia e recebe Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 11 / 40
  • 12. Mensagens – Outros Mecanismos Portas: Sockets Pareamento de um endere¸co IP e porta, como um ponto de conex˜ao, associada a uma aplica¸c˜ao Host X (192.168.1.1:1065) Server Y (192.168.1.2:80) Para que possa ocorrer a troca de mensagens, uma aplica¸c˜ao no servidor liga um socket a uma porta espec´ıfica Registra no SO a aplica¸c˜ao, para que esta receba todo dado destinado `aquela porta Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 12 / 40
  • 13. Mensagens – Outros Mecanismos Portas: Sockets Em unix, sockets s˜ao um tipo de arquivo que conecta processos a suas respectivas portas Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 13 / 40
  • 14. Outros Mecanismos de Comunica¸c˜ao Alguns outros mecanismos para comunica¸c˜ao inter-processos s˜ao: Pipes Sinais (Signals) Barreiras Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 14 / 40
  • 15. Outros Mecanismos de Comunica¸c˜ao Pipes Fluxo de bytes de m˜ao ´unica entre processos Usados no sistema operacional UNIX para permitir a comunica¸c˜ao entre processos Uma pipe ´e um modo de conectar a sa´ıda de um processo com a entrada de outro processo, sem o uso de arquivos tempor´arios Ao tentar ler uma entrada da pipe, um processo ´e bloqueado at´e que o dado esteja dispon´ıvel Todo dado escrito por um processo na pipe ´e dirigido, pelo kernel, a outro processo, que pode ent˜ao lˆe-lo Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 15 / 40
  • 16. Outros Mecanismos de Comunica¸c˜ao Pipes Uma pipeline ´e uma conex˜ao de dois ou mais programas ou processos atrav´es de pipes Permite a cria¸c˜ao de filas de processos Ex: ps -ef | grep alunos | sort Existe enquanto o processo existir Exemplos: Sem uso de pipes (usando arquivos tempor´arios) $ ls > temp $ sort < temp Com uso de pipes $ ls | sort Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 16 / 40
  • 17. Outros Mecanismos de Comunica¸c˜ao Pipes Podem ser consideradas arquivos abertos sem imagem correspondente no sistema de arquivos Funcionamento: Um processo cria uma nova pipe, via a chamada pipe() pipe() retorna um par de descritores de arquivo O processo passa esses descritores a seus filhos (via fork()) Cada filho pode ler da pipe fazendo um read() com o primeiro descritor, e escrever com um write() no segundo. Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 17 / 40
  • 18. Outros Mecanismos de Comunica¸c˜ao Pipes – Exemplo Usa a chamada ao sistema dup #include <unistd.h> void main(void) { int aux[2]; /* auxiliar para a cria¸c~ao das pipes */ /* Cria a pipe, recebendo os dois descritores */ if (pipe(aux)==-1) exit(1); switch (fork()) { case -1 : /*erro*/ exit(1); /*Falha no fork*/ case 0 : /* processo filho */ /* fecho o stdin do filho */ close(0); /* abro o descritor 0 (stdin) para a leitura da pipe */ if (dup(aux[0])!=0) exit(1); /* fecho a ponta de escrita da pipe */ close(aux[1]); /* executo o programa no filho */ execlp("./filho","filho",NULL); } /* se n~ao for -1 nem 0, ´e o pai */ /* fechando a ponta de leitura da pipe */ close(aux[0]); /* escrevendo no filho */ write(aux[1], "Oi", 2); } Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 18 / 40
  • 19. Outros Mecanismos de Comunica¸c˜ao Pipes – Exemplo Usa a chamada ao sistema dup int dup(int oldfd); Cria uma c´opia do descritor oldfd Usa o descritor sem uso de menor n´umero como novo descritor #include <unistd.h> void main(void) { int aux[2]; /* auxiliar para a cria¸c~ao das pipes */ /* Cria a pipe, recebendo os dois descritores */ if (pipe(aux)==-1) exit(1); switch (fork()) { case -1 : /*erro*/ exit(1); /*Falha no fork*/ case 0 : /* processo filho */ /* fecho o stdin do filho */ close(0); /* abro o descritor 0 (stdin) para a leitura da pipe */ if (dup(aux[0])!=0) exit(1); /* fecho a ponta de escrita da pipe */ close(aux[1]); /* executo o programa no filho */ execlp("./filho","filho",NULL); } /* se n~ao for -1 nem 0, ´e o pai */ /* fechando a ponta de leitura da pipe */ close(aux[0]); /* escrevendo no filho */ write(aux[1], "Oi", 2); } Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 18 / 40
  • 20. Outros Mecanismos de Comunica¸c˜ao Problemas com pipes: N˜ao h´a como abrir uma pipe j´a existente Dois processos n˜ao compartilham a mesma pipe, a menos que sejam irm˜aos, e ela tenha sido criada pelo pai desses processos Named pipe (ou FIFO) Extens˜ao de pipe que soluciona esse problema ´E um tipo de arquivo especial em Unix Pode ser aberto por qualquer processo Continua existindo mesmo depois que o processo terminar Criado com chamadas de sistemas Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 19 / 40
  • 21. Outros Mecanismos de Comunica¸c˜ao Sinais (Linux e Unix) S˜ao interrup¸c˜oes de software (traps), usadas para que um processo possa enviar um sinal a outro processo Processos podem enviar sinais apenas a seu grupo de processos (ancestrais, irm˜aos e descendentes) Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 20 / 40
  • 22. Outros Mecanismos de Comunica¸c˜ao Sinais (Linux e Unix) Pode-se tamb´em dizer ao sistema receptor o que deve fazer quando um sinal ´e recebido: Ignor´a-lo Captur´a-lo Deve-se definir um procedimento para trat´a-lo Quando o sinal ´e recebido, o controle passa ao tratador Quando esse finaliza e retorna, o controle volta para onde estava (como no tratamento de interrup¸c˜oes) Deix´a-lo matar o processo Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 21 / 40
  • 23. Outros Mecanismos de Comunica¸c˜ao Barreiras Algumas aplica¸c˜oes podem ser divididas em fases Nenhum processo pode avan¸car `a pr´oxima fase at´e que todos os processos possam fazˆe-lo Introduz-se uma barreira ao final de cada fase Quando alcan¸ca a barreira, um processo fica bloqueado at´e que todos os outros alcancem a barreira. A barreira garante que as opera¸c˜oes colocadas antes dela s˜ao terminadas antes de come¸car as opera¸c˜oes localizadas ap´os ela. Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 22 / 40
  • 24. Outros Mecanismos de Comunica¸c˜ao Barreiras – funcionamento Ao chegar ao ponto em que deve haver a barreira, o processo executa a primitiva barrier() e ´e suspenso Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 23 / 40
  • 25. Outros Mecanismos de Comunica¸c˜ao Barreiras – Linux O processo inicializa uma barreira, chamando pthread barrier init() Passando, dentre outros parˆametros, o n´umero de threads que sincronizar˜ao na barreira Cada thread, ao chegar na barreira, chama pthread barrier wait() Ela bloqueia, at´e que o n´umero de threads especificado tenha chamado wait() nessa mesma barreira Quando o n´umero requerido chamou wait(), elas s˜ao desbloqueadas Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 24 / 40
  • 26. Referˆencias Adicionais Bovet, D.P., Cesati, M.: Understanding the Linux Kernel. O’Reilly. 1st Ed. 2000. http://macboypro.wordpress.com/2009/05/15/posix-message-passing-in- linux/ http://www.linux-tutorial.info/modules.php?name=MContent &pageid=292 http://linux.die.net/man/3/pthread barrier wait http://linux.die.net/man/3/pthread barrier init Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 25 / 40
  • 27. Problemas Cl´assicos Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 26 / 40
  • 28. Produtor – Consumidor J´a visto Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 27 / 40
  • 29. Jantar dos Fil´osofos (Dijkstra, 1965) Cinco fil´osofos est˜ao sentados ao redor de uma mesa circular para o jantar. Cada fil´osofo possui um prato para comer macarr˜ao Al´em disso, eles disp˜oem de hashis, em vez de garfos Cada um precisa de 2 hashis Entre cada par de pratos existe apenas um hashi Hashis precisam ser compartilhados de forma sincronizada Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 28 / 40
  • 30. Jantar dos Fil´osofos Os fil´osofos comem e pensam, alternadamente N˜ao se at´em a apenas uma das tarefas Al´em disso, quando comem, pegam apenas um hashi por vez Quem consegue pegar os dois, come por alguns instantes e depois larga os hashis Como evitar que fiquem bloqueados? Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 29 / 40
  • 31. Jantar dos Fil´osofos Que fazer? Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 30 / 40
  • 32. Jantar dos Fil´osofos Pense um pouco Pegue os hashis Largue os hashis Coma um pouco Que fazer? Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 30 / 40
  • 33. Jantar dos Fil´osofos Pense um pouco Pegue os hashis Largue os hashis Coma um pouco Pense um pouco Trave hashi esq. Trave hashi dir. Coma um pouco Solte hashi esq. Solte hashi dir. Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 30 / 40
  • 34. Jantar dos Fil´osofos #define N 5 /* n´umero de fil´osofos */ void filosofo(int i) { /* i: fil´osofo (0 a 4) */ while (TRUE) { pensa(); pega hashi(i); /* pega hashi esquerdo */ pega hashi((i+1) % N); /* pega hashi direito */ come(); solta hashi(i); /* devolve hashi esquerdo */ solta hashi((i+1) % N); /* devolve hashi direito */ } } Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 31 / 40
  • 35. Jantar dos Fil´osofos #define N 5 /* n´umero de fil´osofos */ void filosofo(int i) { /* i: fil´osofo (0 a 4) */ while (TRUE) { pensa(); pega hashi(i); /* pega hashi esquerdo */ pega hashi((i+1) % N); /* pega hashi direito */ come(); solta hashi(i); /* devolve hashi esquerdo */ solta hashi((i+1) % N); /* devolve hashi direito */ } } Isso funciona? Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 31 / 40
  • 36. Jantar dos Fil´osofos #define N 5 /* n´umero de fil´osofos */ void filosofo(int i) { /* i: fil´osofo (0 a 4) */ while (TRUE) { pensa(); pega hashi(i); /* pega hashi esquerdo */ pega hashi((i+1) % N); /* pega hashi direito */ come(); solta hashi(i); /* devolve hashi esquerdo */ solta hashi((i+1) % N); /* devolve hashi direito */ } } Isso funciona? Em pega hashi(), se todos os fil´osofos pegarem o hashi da esquerda, nenhum pegar´a o da direita – deadlock Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 31 / 40
  • 37. Jantar dos Fil´osofos Como solucionar? Ap´os pegar o hashi da esquerda, o fil´osofo verifica se o da direita est´a livre. Se n˜ao estiver, devolve o hashi que pegou, espera um pouco e tenta novamente Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 32 / 40
  • 38. Jantar dos Fil´osofos Isso funciona? Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 33 / 40
  • 39. Jantar dos Fil´osofos Isso funciona? Se todos os fil´osofos pegarem o hashi da esquerda ao mesmo tempo: Ver˜ao que o da direita n˜ao est´a livre Largar˜ao seu hashi e e esperar˜ao Pegar˜ao novamente o hashi da esquerda Ver˜ao que o da direita n˜ao est´a livre . . . Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 33 / 40
  • 40. Jantar dos Fil´osofos Isso funciona? Se todos os fil´osofos pegarem o hashi da esquerda ao mesmo tempo: Ver˜ao que o da direita n˜ao est´a livre Largar˜ao seu hashi e e esperar˜ao Pegar˜ao novamente o hashi da esquerda Ver˜ao que o da direita n˜ao est´a livre . . . Starvation (inani¸c˜ao) Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 33 / 40
  • 41. Jantar dos Fil´osofos E agora? Poder´ıamos fazer com que eles esperassem um tempo aleat´orio Reduz a chance de starvation Na maioria das aplica¸c˜oes, tentar novamente mais tarde n˜ao ´e problema Via ethernet, ´e exatamente isso que ´e feito com envio de pacotes Sistemas n˜ao cr´ıticos Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 34 / 40
  • 42. Jantar dos Fil´osofos E agora, como evitar as m´ultiplas tentativas nos hashis? Pense um pouco Trave hashi esq. Trave hashi dir. Coma um pouco Solte hashi esq. Solte hashi dir. Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 35 / 40
  • 43. Jantar dos Fil´osofos E agora, como evitar as m´ultiplas tentativas nos hashis? Proteger os passos ap´os “pense um pouco” com um sem´aforo bin´ario – um mutex down(mutex) ao entrar na ´area cr´ıtica up(mutex) ao sair dela Pense um pouco Trave hashi esq. Trave hashi dir. Coma um pouco Solte hashi esq. Solte hashi dir. Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 35 / 40
  • 44. Jantar dos Fil´osofos #define N 5 /* n´umero de fil´osofos */ void filosofo(int i) { /* i: fil´osofo (0 a 4) */ while (TRUE) { pensa(); pega hashi(i); /* pega hashi esquerdo */ pega hashi((i+1) % N); /* pega hashi direito */ come(); solta hashi(i); /* devolve hashi esquerdo */ solta hashi((i+1) % N); /* devolve hashi direito */ } } Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 36 / 40
  • 45. Jantar dos Fil´osofos #define N 5 /* n´umero de fil´osofos */ semaphore mutex=1; void filosofo(int i) { /* i: fil´osofo (0 a 4) */ while (TRUE) { pensa(); down(&mutex); pega hashi(i); /* pega hashi esquerdo */ pega hashi((i+1) % N); /* pega hashi direito */ come(); solta hashi(i); /* devolve hashi esquerdo */ solta hashi((i+1) % N); /* devolve hashi direito */ up(&mutex); } } Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 36 / 40
  • 46. Jantar dos Fil´osofos #define N 5 /* n´umero de fil´osofos */ semaphore mutex=1; void filosofo(int i) { /* i: fil´osofo (0 a 4) */ while (TRUE) { pensa(); down(&mutex); pega hashi(i); /* pega hashi esquerdo */ pega hashi((i+1) % N); /* pega hashi direito */ come(); solta hashi(i); /* devolve hashi esquerdo */ solta hashi((i+1) % N); /* devolve hashi direito */ up(&mutex); } } Somente um fil´osofo come Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 36 / 40
  • 47. Jantar dos Fil´osofos H´a problemas? Pense um pouco Trave hashi esq. Trave hashi dir. Coma um pouco Solte hashi esq. Solte hashi dir. Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 37 / 40
  • 48. Jantar dos Fil´osofos H´a problemas? Tecnicamente, resolve o problema Na pr´atica, contudo, tem um problema de desempenho: Somente um fil´osofo pode comer em um dado momento Com 5 hashis, dever´ıamos permitir que 2 fil´osofos comessem ao mesmo tempo Pense um pouco Trave hashi esq. Trave hashi dir. Coma um pouco Solte hashi esq. Solte hashi dir. Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 37 / 40
  • 49. Jantar dos Fil´osofos Como solucionar? Sem deadlocks ou starvation Com o m´aximo de paralelismo para um n´umero arbitr´ario de fil´osofos Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 38 / 40
  • 50. Jantar dos Fil´osofos Como solucionar? Sem deadlocks ou starvation Com o m´aximo de paralelismo para um n´umero arbitr´ario de fil´osofos Usar um arranjo – estado – para identificar se um fil´osofo est´a comendo, pensando ou faminto (pensando em pegar os hashis) Um fil´osofo s´o pode comer (estado) se nenhum dos vizinhos imediatos estiver comendo Usar um arranjo de sem´aforos, um para cada fil´osofo Fil´osofos famintos podem ser bloqueados se os hashis estiverem ocupados Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 38 / 40
  • 51. Jantar dos Fil´osofos #define N 5 /* n´umero de fil´osofos */ #define ESQ (i+N-1)%N /* vizinho `a esquerda de i */ #define DIR (i+1)%N /* vizinho `a direita de i */ #define PEN 0 /* fil´osofo pensando */ #define FAM 1 /* fil´osofo faminto */ #define COM 2 /* fil´osofo comendo */ typedef int semaforo; int estado[N]; /* estado dos fil´osofos (deve iniciar com PEN) */ semaforo mutex = 1; /* exclus~ao m´utua para estado */ semaforo s[N]; /* para bloqueio dos fil´osofos (iniciados com 0) */ void filosofo(int i) { /* i: n´umero do fil´osofo (0 a N-1) */ while (TRUE) { pensa(); /* o fil´osofo est´a pensando */ pega_hashi(i); /* pega dois hashis ou bloqueia */ come(); /* manda o rango pr´a dentro */ larga_hashi(i); /* devolve os hashis `a mesa */ } } Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 39 / 40
  • 52. Jantar dos Fil´osofos void pega_hashi(int i) { /* i: n´umero do fil´osofo (0 a N-1) */ down(&mutex); /* entra na regi~ao cr´ıtica */ estado[i] = FAM; /* registra que o fil´osofo est´a faminto */ testa(i); /* tenta pegar 2 hashis */ up(&mutex); /* sai da regi~ao cr´ıtica */ down(&s[i]); /* bloqueia se n~ao pegou os hashis */ } void larga_hashi(int i) { /* i: n´umero do fil´osofo (0 a N-1) */ down(&mutex); /* entra na regi~ao cr´ıtica */ estado[i] = PEN; /* o fil´osofo acabou de comer */ testa(ESQ); /* v^e se o vizinho da esquerda pode comer agora */ testa(DIR); /* v^e se o vizinho da direita pode comer agora */ up(&mutex); /* sai da regi~ao cr´ıtica */ } void testa(int i) { /* i: n´umero do fil´osofo (0 a N-1) */ if (estado[i] == FAM && estado[ESQ] != COM && estado[DIR] != COM) { estado[i] = COM; /* registra que o fil´osofo est´a comendo */ up(&s[i]); /* libera para comer */ } } Norton Trevisan Roman Aula 11 – Comunica¸c˜ao Interprocessos e Problemas Cl´assicos de Comunica¸c˜ao entre Proces29 de setembro de 2017 40 / 40