SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Aula 08 – Threads e Comunica¸c˜ao
Interprocessos
Norton Trevisan Roman
11 de setembro de 2017
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 1 / 45
Threads no Espa¸co do N´ucleo
Suportadas diretamente pelo SO
Cria¸c˜ao, escalonamento e gerenciamento s˜ao feitos
pelo kernel
O n´ucleo possui tabela de threads (com todas as threads do
sistema) e tabela de processos separadas
As tabelas de threads possuem as
mesmas informa¸c˜oes que as tabelas de
threads em modo usu´ario, s´o que agora
est˜ao implementadas no kernel
Os algoritmos mais usados s˜ao Round
Robin e Prioridade
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 2 / 45
Threads no Espa¸co do N´ucleo
Quando uma thread deseja criar ou destruir outra,
faz chamada ao n´ucleo
O n´ucleo atualiza a tabela de threads, dentre outras coisas
Todas as chamadas que podem bloquear a thread
s˜ao implementadas como chamadas ao sistema
Gerenciar threads em modo kernel ´e mais caro devido `as
chamadas de sistema durante a alternˆancia entre modo
usu´ario e modo kernel
Pode-se contudo, melhorar isso, dando preferˆencia a threads
no mesmo processo, caso sejam de igual precedˆencia
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 3 / 45
Threads no Espa¸co do N´ucleo
Seguem o modelo
1 para 1:
Chaveia para cada
thread de usu´ario
uma thread de
kernel
Linux, Fam´ılia
Windows, OS/2,
Solaris 9
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 4 / 45
Threads no Espa¸co do N´ucleo
Reciclagem de threads
Criar e destruir threads tem um custo alto
Solu¸c˜ao: ao ser destru´ıda, marca-se a thread como n˜ao
execut´avel, mantendo suas estruturas no n´ucleo
Ao criar uma nova thread, reativa a antiga, repopulando os
dados, e economizando algum tempo de aloca¸c˜ao
Princ´ıpio tamb´em adotado em outras aplica¸c˜oes,
como servidores web
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 5 / 45
Threads no Espa¸co do N´ucleo
Quando uma thread bloqueia, o kernel pode rodar
outra thread do mesmo processo, ou uma de outro
processo
No modelo de espa¸co do usu´ario, o sistema s´o conseguia
rodar threads do pr´oprio processo
Vantagem:
Processo inteiro n˜ao ´e bloqueado se uma thread realizar uma
chamada bloqueante ao sistema (ex: E/S)
Desvantagem:
Exige chaveamento de contexto – Tarefa cara
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 6 / 45
Threads no Espa¸co do N´ucleo
Escalonamento:
O n´ucleo escolhe a thread
diretamente
A thread ´e quem recebe o
quantum, sendo suspensa se
excedˆe-lo
Permite m´ultiplas threads em
paralelo
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 7 / 45
Threads H´ıbridas
´E poss´ıvel tamb´em fazer implementa¸c˜oes h´ıbridas
O n´ucleo sabe apenas sobre as threads de n´ucleo
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 8 / 45
Threads H´ıbridas
Seguem o modelo N para M:
N threads de usu´ario s˜ao mapeadas em M ≤ N threads de
n´ucleo
Uma biblioteca gerencia um conjunto de threads de usu´ario
(dentro do processo)
Esse processo ´e mapeado para uma ou mais threads do
n´ucleo
No n´ucleo, h´a geralmente uma thread para cada tarefa bloqueada, e
mais uma para cada processador dispon´ıvel
N´umero de threads ajustado dinamicamente, conforme necessidade
da aplica¸c˜ao
Solaris at´e vers˜ao 8, HP-UX, Tru64 Unix, IRIX
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 9 / 45
Threads H´ıbridas
N para M:
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 10 / 45
Multithreading – Compara¸c˜ao de Modelos
1 Note que multithreading leva a 2 n´ıveis de paralelismo: processos e threads
2 KSE – kernel-scheduled entities (conjunto de chamadas ao sistema do FreeBSD para threads
no modo usu´ario)
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 11 / 45
Comunica¸c˜ao Interprocessos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 12 / 45
Comunica¸c˜ao Interprocessos
Frequentemente processos precisam se comunicar
A comunica¸c˜ao entre processos ´e mais eficiente se for
estruturada e n˜ao utilizar interrup¸c˜oes.
Trˆes aspectos importantes:
Como um processo passa informa¸c˜ao para outro processo?
Como garantir que processos n˜ao invadam espa¸co uns dos
outros, nem entrem em conflito?
Qual a sequˆencia adequada quando existe dependˆencia entre
processos?
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 13 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida (Race Condition)
Em alguns Sistemas Operacionais os processos se comunicam
atrav´es de alguma ´area de armazenamento comum.
Esta ´area pode estar na mem´oria principal (ex: vari´aveis em
comum a 2 threads) ou pode ser um arquivo compartilhado.
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 14 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida (Race Condition)
Tamb´em chamada “Condi¸c˜ao de Disputa”
Situa¸c˜ao onde dois ou mais processos acessam recursos
compartilhados concorrentemente
H´a uma corrida pelo recurso
Ex: quando est˜ao lendo ou escrevendo algum dado compartilhado e o
resultado depende de quem processa no momento prop´ıcio
Depurar programas que cont´em condi¸c˜oes de corrida n˜ao ´e
f´acil, pois n˜ao ´e poss´ıvel prever quando o processo ser´a
suspenso.
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 15 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida (Race Condition)
Um exemplo: Print Spooler
Spooling
Originalmente:
System Peripheral Operations Off Line (Batch)
Hoje
Simultaneous Peripheral Operation On Line
Consiste em colocar jobs em uma ´area da mem´oria ou de um disco
onde um dispositivo pode acess´a-los quando estiver preparado.
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 16 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida (Race Condition)
Um exemplo: Print Spooler
Quando um processo deseja imprimir um arquivo, ele coloca
o nome do arquivo em uma lista (diret´orio) de impress˜ao
(spooler directory)
Um processo chamado printer daemon, verifica a lista
periodicamente, para ver se existe algum arquivo para ser
impresso e, se existir, ele os imprime e remove seus nomes
da lista.
Suponha que dois processos, A e B, ir˜ao enviar seus
documentos para impress˜ao
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 17 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida: Exemplo
A vˆe que 7 (em in) ´e a pr´oxima posi¸c˜ao livre,
guardando-o em uma vari´avel interna
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 18 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida: Exemplo
O clock interrompe, e B ´e posto para rodar, que lˆe o
mesmo valor para sua vari´avel interna
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 19 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida: Exemplo
B ent˜ao armazena seu arquivo em 7, atualizando in
(vari´avel compartilhada) com 8
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 20 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida (Race Condition)
A volta a executar, armazenando seu arquivo em 7,
e atualiza in com 8
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 21 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida
Ex: Vaga em avi˜ao
Operador OP1 (no Brasil) lˆe Poltrona1
vaga
Operador OP2 (no Jap˜ao) lˆe Poltrona1
vaga
Operador OP1 compra Poltrona1
Operador OP2 compra Poltrona1
E o cliente?
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 22 / 45
Comunica¸c˜ao Interprocessos
Condi¸c˜ao de Corrida
Ex: Vaga em avi˜ao
Operador OP1 (no Brasil) lˆe Poltrona1
vaga
Operador OP2 (no Jap˜ao) lˆe Poltrona1
vaga
Operador OP1 compra Poltrona1
Operador OP2 compra Poltrona1
E o cliente?
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 22 / 45
Exclus˜ao M´utua e Regi˜ao Cr´ıtica
Uma solu¸c˜ao para as condi¸c˜oes de corrida ´e impedir
que mais de um processo leia e escreva em uma
vari´avel compartilhada ao mesmo tempo
Esta restri¸c˜ao ´e conhecida como exclus˜ao m´utua
Se¸c˜oes do programa onde
s˜ao efetuados acessos a
recursos partilhados por
dois ou mais processos s˜ao
denominados
regi˜oes cr´ıticas (R.C.).
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 23 / 45
Exclus˜ao M´utua e Regi˜ao Cr´ıtica
Regi˜oes Cr´ıticas:
Exclus˜ao m´utua ´e ent˜ao
garantir que um processo
n˜ao ter´a acesso a uma
regi˜ao cr´ıtica quando
outro processo estiver
utilizando essa regi˜ao
Pode gerar uma fila de
clientes nos computadores
→ ineficiˆencia!
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 24 / 45
Exclus˜ao M´utua e Regi˜ao Cr´ıtica
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 25 / 45
Exclus˜ao M´utua e Regi˜ao Cr´ıtica
Assegura-se a exclus˜ao m´utua recorrendo aos
mecanismos de sincroniza¸c˜ao fornecidos pelo SO
Presentes tamb´em na JVM
Estas afirma¸c˜oes s˜ao v´alidas tamb´em para as
threads
Caso que ´e ainda mais cr´ıtico, pois todas as threads dentro
do mesmo processo partilham os mesmos recursos.
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 26 / 45
Exclus˜ao M´utua e Regi˜ao Cr´ıtica
Regras para programa¸c˜ao concorrente (condi¸c˜oes
para uma boa solu¸c˜ao)
1. Dois processos nunca podem estar simultaneamente dentro
de suas regi˜oes cr´ıticas
2. N˜ao se pode fazer suposi¸c˜oes em rela¸c˜ao `a velocidade e ao
n´umero de CPUs
3. Um processo fora da regi˜ao cr´ıtica n˜ao deve causar bloqueio
a outro processo
4. Um processo n˜ao pode esperar eternamente para entrar em
sua regi˜ao cr´ıtica
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 27 / 45
Solu¸c˜oes de Exclus˜ao M´utua
Espera Ocupada (Busy Waiting)
Primitivas Sleep/Wakeup
Sem´aforos
Monitores
Troca de Mensagem
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 28 / 45
Espera Ocupada
Consiste geralmente na constante checagem de uma
vari´avel at´e que algum valor apare¸ca
Gasta tempo de CPU
Algumas solu¸c˜oes para Exclus˜ao M´utua com Espera
Ocupada:
Desabilitar interrup¸c˜oes
Vari´aveis de Travamento (Lock)
Estrita Alternˆancia (Strict Alternation)
Solu¸c˜ao de Peterson
Instru¸c˜ao TSL
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 29 / 45
Espera Ocupada – Desabilitar interrup¸c˜oes
´E a solu¸c˜ao mais simples (com um ´unico
processador)
Cada processo desabilita todas as interrup¸c˜oes
(inclusive a do rel´ogio) ao entrar na regi˜ao cr´ıtica e
as habilita novamente antes de deix´a-la
Com as interrup¸c˜oes desabilitadas, a CPU n˜ao realiza
chaveamento entre os processos
Pois a CPU ´e chaveada somente como resultado da interrup¸c˜ao do
rel´ogio ou de outra interrup¸c˜ao
N˜ao haver´a outro processo rodando na mesma hora
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 30 / 45
Espera Ocupada – Desabilitar interrup¸c˜oes
Em sistemas com v´arias CPUs, desabilitar
interrup¸c˜oes em uma n˜ao evita que as outras
acessem a mem´oria compartilhada
Viola condi¸c˜ao 1 (Dois processos nunca podem estar
simultaneamente dentro da regi˜ao cr´ıtica)
Viola condi¸c˜ao 2 (N˜ao se pode fazer suposi¸c˜oes em rela¸c˜ao `a
CPU – pressup˜oe processador de n´ucleo ´unico)
N˜ao ´e uma solu¸c˜ao segura, pois um processo pode
esquecer de reabilitar suas interrup¸c˜oes e n˜ao ser
finalizado
Viola condi¸c˜ao 4 (Processo n˜ao podem esperar eternamente
para entrar em sua regi˜ao cr´ıtica)
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 31 / 45
Espera Ocupada – Desabilitar interrup¸c˜oes
´E ´util, contudo, que o kernel tenha o poder de
desabilitar interrup¸c˜oes, para sua pr´opria
manuten¸c˜ao:
Como quando atualiza a lista de processos prontos, caso em
que uma interrup¸c˜ao poderia deix´a-la em estado
inconsistente
Ainda assim, com v´arios processadores n˜ao funciona bem
Mas n˜ao ´e prudente que os processos de usu´ario
usem este m´etodo de exclus˜ao m´utua
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 32 / 45
Espera Ocupada – Lock variables
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 33 / 45
Espera Ocupada – Lock variables
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 33 / 45
Espera Ocupada – Lock variables
O processo que deseja utilizar uma regi˜ao cr´ıtica
atribui um valor a uma vari´avel compartilhada –
lock
Se a vari´avel est´a com valor 0 (zero) significa que nenhum
processo est´a na regi˜ao cr´ıtica
Se a vari´avel est´a com valor 1 (um) significa que existe um
processo na regi˜ao cr´ıtica
Para entrar em sua regi˜ao cr´ıtica, o
processo verifica o conte´udo da vari´avel.
Se for 0, muda para 1 e entra. Se for 1,
espera at´e que seja 0.
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 34 / 45
Espera Ocupada – Lock variables
O processo que deseja utilizar uma regi˜ao cr´ıtica
atribui um valor a uma vari´avel compartilhada –
lock
Se a vari´avel est´a com valor 0 (zero) significa que nenhum
processo est´a na regi˜ao cr´ıtica
Se a vari´avel est´a com valor 1 (um) significa que existe um
processo na regi˜ao cr´ıtica
Para entrar em sua regi˜ao cr´ıtica, o
processo verifica o conte´udo da vari´avel.
Se for 0, muda para 1 e entra. Se for 1,
espera at´e que seja 0.
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 34 / 45
Espera Ocupada – Lock variables
Problema:
Suponha que um processo A leia a vari´avel lock com valor 0
Antes que o processo A possa alterar a vari´avel para o valor
1, um processo B ´e escalonado, altera o valor de lock para 1,
e entra na regi˜ao cr´ıtica
Quando o processo A for escalonado novamente, ele altera o
valor de lock para 1, e ambos os processos est˜ao na regi˜ao
cr´ıtica
Viola condi¸c˜ao 1 (Dois processos n˜ao podem estar
simultaneamente na regi˜ao cr´ıtica)
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 35 / 45
Espera Ocupada – Lock variables
Exemplo:
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 36 / 45
Espera Ocupada – Lock variables
Exemplo:
Escalonador interrompe aqui
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 36 / 45
Espera Ocupada – Strict Alternation
Poss´ıvel solu¸c˜ao: Strict Alternation
Fragmentos de programa controlam o acesso `as regi˜oes
cr´ıticas
Vari´avel turn, inicialmente em 0, estabelece qual processo pode
entrar na regi˜ao cr´ıtica
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 37 / 45
Espera Ocupada – Strict Alternation
Ao deixar a regi˜ao cr´ıtica, cada processo muda turn,
para permitir que o outro possa entrar
Problema:
Suponha que B termina seu trabalho nessa regi˜ao
rapidamente → ambos est˜ao em regi˜oes n˜ao cr´ıticas com
turn=0
Agora o processo A entra na regi˜ao cr´ıtica, saindo
rapidamente, e fazendo turn=1 → ambos est˜ao em regi˜oes
n˜ao cr´ıticas com turn=1
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 38 / 45
Espera Ocupada – Strict Alternation
Problema:
A tenta entrar novamente na regi˜ao cr´ıtica → n˜ao consegue,
pois turn=1, e B est´a ocupado em sua regi˜ao n˜ao cr´ıtica
A tem que esperar at´e que turn seja 0 → viola¸c˜ao da
condi¸c˜ao 3 (processos fora da regi˜ao cr´ıtica n˜ao devem
bloquear outro processo)
Moral: turnos n˜ao s˜ao uma boa id´eia quando um
dos processos ´e muito mais lento que o outro
Esta solu¸c˜ao requer que 2 processos alternem sempre na
regi˜ao cr´ıtica
Um mesmo n˜ao pode entrar nela mais de uma vez seguida
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 39 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
(1981) Combina as id´eias das vari´aveis de
travamento com chaveamento obrigat´orio (Strict
Alternation)
Uma vari´avel (ou programa) ´e utilizada para
bloquear a entrada de um processo na regi˜ao cr´ıtica
quando um outro processo est´a na regi˜ao
Essa vari´avel ´e compartilhada pelos processos que concorrem
pelo uso da regi˜ao cr´ıtica
Ambos processos possuem fragmentos de programas que
controlam a entrada e a sa´ıda da regi˜ao cr´ıtica
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 40 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Antes de entrar na
regi˜ao cr´ıtica:
Cada processo chama
entra regi~ao,
demonstrando seu
interesse em entrar na
regi˜ao cr´ıtica
Somente quando
entra regi~ao retorna ´e
que ele pode entrar na
regi˜ao cr´ıtica (espera at´e
que seja seguro entrar na
regi˜ao)
#define FALSE 0
#define TRUE 1
#define N 2 /*N´umero de processos*/
int turn; /* de quem ´e a vez de esperar? */
int interessado[N]; /*inicialmente, FALSE para
todos*/
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 41 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Ap´os terminar na
regi˜ao cr´ıtica
Chama deixa regi~ao,
permitindo que outro
processo entre
entra regi˜ao e
deixa regi~ao s˜ao
partes de uma
biblioteca
turn e interessado s˜ao
compartilhadas
#define FALSE 0
#define TRUE 1
#define N 2 /*N´umero de processos*/
int turn; /* de quem ´e a vez de esperar? */
int interessado[N]; /*inicialmente, FALSE para
todos*/
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 42 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
E se dois processos chamarem entra regi~ao ao
mesmo tempo?
Ambos armazenar˜ao seus ids na vari´avel turn
O ´ultimo a modific´a-la
´e quem a definir´a →
ser´a quem ir´a esperar
Note que eles alteram
regi˜oes diferentes do
vetor de interessados
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 43 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn =
interessado = [0,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn =
interessado = [0,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn =
interessado = [0,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn =
interessado = [1,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 0
interessado = [1,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 0
interessado = [1,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 0
interessado = [1,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 0
interessado = [1,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 0
interessado = [1,0]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 0
interessado = [1,1]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 1
interessado = [1,1]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 1
interessado = [1,1]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 1
interessado = [1,1]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 1
interessado = [1,1]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 1
interessado = [1,1]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Espera Ocupada – Solu¸c˜ao de Peterson
Mesmo que o escalonamento se dˆe no &&, na
pr´oxima itera¸c˜ao do la¸co tudo se destrava
Ex:
Processo 0
Processo 1
turn = 1
interessado = [1,1]
/*processo ´e o n´umero do processo que deseja entrar
na regi~ao: 0 ou 1*/
void entra regi~ao(int processo) {
int outro; /*n´umero do outro processo*/
outro = 1-processo; /*o outro processo*/
interessado[processo] = TRUE;
turn = processo;
while (turn == processo && interessado[outro]);
/*espera*/
}
void deixa regi~ao(int processo) { /*processo:
quem t´a saindo*/
interessado[processo] = FALSE;
}
Bastante complicado quando h´a v´arios processos
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
Referˆencias Adicionais
G. L. Peterson: “Myths About the Mutual Exclusion
Problem”, Information Processing Letters 12(3)
1981, 115–116
Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 45 / 45

Mais conteúdo relacionado

Mais procurados

(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 19
(ACH2044) Sistemas Operacionais - Aula 19(ACH2044) Sistemas Operacionais - Aula 19
(ACH2044) Sistemas Operacionais - Aula 19Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 05
(ACH2044) Sistemas Operacionais - Aula 05(ACH2044) Sistemas Operacionais - Aula 05
(ACH2044) Sistemas Operacionais - Aula 05Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 09
(ACH2044) Sistemas Operacionais - Aula 09(ACH2044) Sistemas Operacionais - Aula 09
(ACH2044) Sistemas Operacionais - Aula 09Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 14
(ACH2044) Sistemas Operacionais - Aula 14(ACH2044) Sistemas Operacionais - Aula 14
(ACH2044) Sistemas Operacionais - Aula 14Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12Norton Trevisan Roman
 
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 CPUAlexandre Duarte
 
3929 linux passo a passo 1
3929 linux passo a passo 1 3929 linux passo a passo 1
3929 linux passo a passo 1 Márcio Roberto
 
(ACH2044) Sistemas Operacionais - Aula 15
(ACH2044) Sistemas Operacionais - Aula 15(ACH2044) Sistemas Operacionais - Aula 15
(ACH2044) Sistemas Operacionais - Aula 15Norton Trevisan Roman
 
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
 
Ligacao Em Rede A Outros Sistemas Operativos
Ligacao Em Rede A Outros Sistemas OperativosLigacao Em Rede A Outros Sistemas Operativos
Ligacao Em Rede A Outros Sistemas Operativosarturramisio
 
Gerência de Processos: Processos
Gerência de Processos: ProcessosGerência de Processos: Processos
Gerência de Processos: ProcessosAlexandre Duarte
 

Mais procurados (20)

(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03
 
(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10(ACH2044) Sistemas Operacionais - Aula 10
(ACH2044) Sistemas Operacionais - Aula 10
 
(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11
 
(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07
 
(ACH2044) Sistemas Operacionais - Aula 19
(ACH2044) Sistemas Operacionais - Aula 19(ACH2044) Sistemas Operacionais - Aula 19
(ACH2044) Sistemas Operacionais - Aula 19
 
(ACH2044) Sistemas Operacionais - Aula 05
(ACH2044) Sistemas Operacionais - Aula 05(ACH2044) Sistemas Operacionais - Aula 05
(ACH2044) Sistemas Operacionais - Aula 05
 
(ACH2044) Sistemas Operacionais - Aula 09
(ACH2044) Sistemas Operacionais - Aula 09(ACH2044) Sistemas Operacionais - Aula 09
(ACH2044) Sistemas Operacionais - Aula 09
 
(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22
 
(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06(ACH2044) Sistemas Operacionais - Aula 06
(ACH2044) Sistemas Operacionais - Aula 06
 
(ACH2044) Sistemas Operacionais - Aula 14
(ACH2044) Sistemas Operacionais - Aula 14(ACH2044) Sistemas Operacionais - Aula 14
(ACH2044) Sistemas Operacionais - Aula 14
 
(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12
 
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
 
3929 linux passo a passo 1
3929 linux passo a passo 1 3929 linux passo a passo 1
3929 linux passo a passo 1
 
(ACH2044) Sistemas Operacionais - Aula 15
(ACH2044) Sistemas Operacionais - Aula 15(ACH2044) Sistemas Operacionais - Aula 15
(ACH2044) Sistemas Operacionais - Aula 15
 
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)
 
Administração de Redes Linux - II
Administração de Redes Linux - IIAdministração de Redes Linux - II
Administração de Redes Linux - II
 
Ligacao Em Rede A Outros Sistemas Operativos
Ligacao Em Rede A Outros Sistemas OperativosLigacao Em Rede A Outros Sistemas Operativos
Ligacao Em Rede A Outros Sistemas Operativos
 
Gerência de Processos: Processos
Gerência de Processos: ProcessosGerência de Processos: Processos
Gerência de Processos: Processos
 
Comandos do linux
Comandos do linuxComandos do linux
Comandos do linux
 
Processos+threads.2pp
Processos+threads.2ppProcessos+threads.2pp
Processos+threads.2pp
 

Semelhante a (ACH2044) Sistemas Operacionais - Aula 08

(ACH2055) Arquitetura de Computadores - Aula 11
(ACH2055) Arquitetura de Computadores - Aula 11(ACH2055) Arquitetura de Computadores - Aula 11
(ACH2055) Arquitetura de Computadores - Aula 11Norton Trevisan Roman
 
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...rafaelov
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Charles Fortes
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...rafaelov
 
Trabalho de sistemas operativos
Trabalho de sistemas operativosTrabalho de sistemas operativos
Trabalho de sistemas operativosFrank macoo
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Leinylson Fontinele
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoFrederico Madeira
 
164519997 curso-de-redes-laercio-vasconcelos-capitulo-01
164519997 curso-de-redes-laercio-vasconcelos-capitulo-01164519997 curso-de-redes-laercio-vasconcelos-capitulo-01
164519997 curso-de-redes-laercio-vasconcelos-capitulo-01Marco Guimarães
 
Apresentação Monografia
Apresentação MonografiaApresentação Monografia
Apresentação MonografiaLeon Homar
 
Lecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptxLecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptxcassamo2
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia J Chaves Silva
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuningDell Technologies
 
Prova Da Dataprev 2006 Jaime Correia Amostra
Prova Da Dataprev 2006   Jaime Correia   AmostraProva Da Dataprev 2006   Jaime Correia   Amostra
Prova Da Dataprev 2006 Jaime Correia AmostraWalter Cunha
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - IntroduçãoFabio Moura Pereira
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaFabio Moura Pereira
 

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

(ACH2055) Arquitetura de Computadores - Aula 11
(ACH2055) Arquitetura de Computadores - Aula 11(ACH2055) Arquitetura de Computadores - Aula 11
(ACH2055) Arquitetura de Computadores - Aula 11
 
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
 
S.o aula 1920
S.o aula 1920S.o aula 1920
S.o aula 1920
 
SlackWare - Leonel
SlackWare - LeonelSlackWare - Leonel
SlackWare - Leonel
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
 
Trabalho de sistemas operativos
Trabalho de sistemas operativosTrabalho de sistemas operativos
Trabalho de sistemas operativos
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de Código
 
164519997 curso-de-redes-laercio-vasconcelos-capitulo-01
164519997 curso-de-redes-laercio-vasconcelos-capitulo-01164519997 curso-de-redes-laercio-vasconcelos-capitulo-01
164519997 curso-de-redes-laercio-vasconcelos-capitulo-01
 
Ntop
NtopNtop
Ntop
 
Apresentação Monografia
Apresentação MonografiaApresentação Monografia
Apresentação Monografia
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
Cygwin
CygwinCygwin
Cygwin
 
Lecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptxLecture 4-Processos e Threads pt mz.pptx
Lecture 4-Processos e Threads pt mz.pptx
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuning
 
Prova Da Dataprev 2006 Jaime Correia Amostra
Prova Da Dataprev 2006   Jaime Correia   AmostraProva Da Dataprev 2006   Jaime Correia   Amostra
Prova Da Dataprev 2006 Jaime Correia Amostra
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton 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: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
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
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfGEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfElianeElika
 
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
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresAnaCarinaKucharski1
 
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.pdfLeloIurk1
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfMárcio Azevedo
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFtimaMoreira35
 
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"Ilda Bicacro
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?AnabelaGuerreiro7
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 

Último (20)

PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
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...
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdfGEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.pdf
GEOGRAFIA - ENSINO FUNDAMENTAL ANOS FINAIS.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...
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
 
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
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdf
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdf
 
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"
 
Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?Urso Castanho, Urso Castanho, o que vês aqui?
Urso Castanho, Urso Castanho, o que vês aqui?
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 

(ACH2044) Sistemas Operacionais - Aula 08

  • 1. Aula 08 – Threads e Comunica¸c˜ao Interprocessos Norton Trevisan Roman 11 de setembro de 2017 Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 1 / 45
  • 2. Threads no Espa¸co do N´ucleo Suportadas diretamente pelo SO Cria¸c˜ao, escalonamento e gerenciamento s˜ao feitos pelo kernel O n´ucleo possui tabela de threads (com todas as threads do sistema) e tabela de processos separadas As tabelas de threads possuem as mesmas informa¸c˜oes que as tabelas de threads em modo usu´ario, s´o que agora est˜ao implementadas no kernel Os algoritmos mais usados s˜ao Round Robin e Prioridade Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 2 / 45
  • 3. Threads no Espa¸co do N´ucleo Quando uma thread deseja criar ou destruir outra, faz chamada ao n´ucleo O n´ucleo atualiza a tabela de threads, dentre outras coisas Todas as chamadas que podem bloquear a thread s˜ao implementadas como chamadas ao sistema Gerenciar threads em modo kernel ´e mais caro devido `as chamadas de sistema durante a alternˆancia entre modo usu´ario e modo kernel Pode-se contudo, melhorar isso, dando preferˆencia a threads no mesmo processo, caso sejam de igual precedˆencia Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 3 / 45
  • 4. Threads no Espa¸co do N´ucleo Seguem o modelo 1 para 1: Chaveia para cada thread de usu´ario uma thread de kernel Linux, Fam´ılia Windows, OS/2, Solaris 9 Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 4 / 45
  • 5. Threads no Espa¸co do N´ucleo Reciclagem de threads Criar e destruir threads tem um custo alto Solu¸c˜ao: ao ser destru´ıda, marca-se a thread como n˜ao execut´avel, mantendo suas estruturas no n´ucleo Ao criar uma nova thread, reativa a antiga, repopulando os dados, e economizando algum tempo de aloca¸c˜ao Princ´ıpio tamb´em adotado em outras aplica¸c˜oes, como servidores web Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 5 / 45
  • 6. Threads no Espa¸co do N´ucleo Quando uma thread bloqueia, o kernel pode rodar outra thread do mesmo processo, ou uma de outro processo No modelo de espa¸co do usu´ario, o sistema s´o conseguia rodar threads do pr´oprio processo Vantagem: Processo inteiro n˜ao ´e bloqueado se uma thread realizar uma chamada bloqueante ao sistema (ex: E/S) Desvantagem: Exige chaveamento de contexto – Tarefa cara Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 6 / 45
  • 7. Threads no Espa¸co do N´ucleo Escalonamento: O n´ucleo escolhe a thread diretamente A thread ´e quem recebe o quantum, sendo suspensa se excedˆe-lo Permite m´ultiplas threads em paralelo Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 7 / 45
  • 8. Threads H´ıbridas ´E poss´ıvel tamb´em fazer implementa¸c˜oes h´ıbridas O n´ucleo sabe apenas sobre as threads de n´ucleo Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 8 / 45
  • 9. Threads H´ıbridas Seguem o modelo N para M: N threads de usu´ario s˜ao mapeadas em M ≤ N threads de n´ucleo Uma biblioteca gerencia um conjunto de threads de usu´ario (dentro do processo) Esse processo ´e mapeado para uma ou mais threads do n´ucleo No n´ucleo, h´a geralmente uma thread para cada tarefa bloqueada, e mais uma para cada processador dispon´ıvel N´umero de threads ajustado dinamicamente, conforme necessidade da aplica¸c˜ao Solaris at´e vers˜ao 8, HP-UX, Tru64 Unix, IRIX Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 9 / 45
  • 10. Threads H´ıbridas N para M: Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 10 / 45
  • 11. Multithreading – Compara¸c˜ao de Modelos 1 Note que multithreading leva a 2 n´ıveis de paralelismo: processos e threads 2 KSE – kernel-scheduled entities (conjunto de chamadas ao sistema do FreeBSD para threads no modo usu´ario) Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 11 / 45
  • 12. Comunica¸c˜ao Interprocessos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 12 / 45
  • 13. Comunica¸c˜ao Interprocessos Frequentemente processos precisam se comunicar A comunica¸c˜ao entre processos ´e mais eficiente se for estruturada e n˜ao utilizar interrup¸c˜oes. Trˆes aspectos importantes: Como um processo passa informa¸c˜ao para outro processo? Como garantir que processos n˜ao invadam espa¸co uns dos outros, nem entrem em conflito? Qual a sequˆencia adequada quando existe dependˆencia entre processos? Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 13 / 45
  • 14. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida (Race Condition) Em alguns Sistemas Operacionais os processos se comunicam atrav´es de alguma ´area de armazenamento comum. Esta ´area pode estar na mem´oria principal (ex: vari´aveis em comum a 2 threads) ou pode ser um arquivo compartilhado. Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 14 / 45
  • 15. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida (Race Condition) Tamb´em chamada “Condi¸c˜ao de Disputa” Situa¸c˜ao onde dois ou mais processos acessam recursos compartilhados concorrentemente H´a uma corrida pelo recurso Ex: quando est˜ao lendo ou escrevendo algum dado compartilhado e o resultado depende de quem processa no momento prop´ıcio Depurar programas que cont´em condi¸c˜oes de corrida n˜ao ´e f´acil, pois n˜ao ´e poss´ıvel prever quando o processo ser´a suspenso. Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 15 / 45
  • 16. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida (Race Condition) Um exemplo: Print Spooler Spooling Originalmente: System Peripheral Operations Off Line (Batch) Hoje Simultaneous Peripheral Operation On Line Consiste em colocar jobs em uma ´area da mem´oria ou de um disco onde um dispositivo pode acess´a-los quando estiver preparado. Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 16 / 45
  • 17. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida (Race Condition) Um exemplo: Print Spooler Quando um processo deseja imprimir um arquivo, ele coloca o nome do arquivo em uma lista (diret´orio) de impress˜ao (spooler directory) Um processo chamado printer daemon, verifica a lista periodicamente, para ver se existe algum arquivo para ser impresso e, se existir, ele os imprime e remove seus nomes da lista. Suponha que dois processos, A e B, ir˜ao enviar seus documentos para impress˜ao Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 17 / 45
  • 18. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida: Exemplo A vˆe que 7 (em in) ´e a pr´oxima posi¸c˜ao livre, guardando-o em uma vari´avel interna Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 18 / 45
  • 19. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida: Exemplo O clock interrompe, e B ´e posto para rodar, que lˆe o mesmo valor para sua vari´avel interna Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 19 / 45
  • 20. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida: Exemplo B ent˜ao armazena seu arquivo em 7, atualizando in (vari´avel compartilhada) com 8 Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 20 / 45
  • 21. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida (Race Condition) A volta a executar, armazenando seu arquivo em 7, e atualiza in com 8 Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 21 / 45
  • 22. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida Ex: Vaga em avi˜ao Operador OP1 (no Brasil) lˆe Poltrona1 vaga Operador OP2 (no Jap˜ao) lˆe Poltrona1 vaga Operador OP1 compra Poltrona1 Operador OP2 compra Poltrona1 E o cliente? Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 22 / 45
  • 23. Comunica¸c˜ao Interprocessos Condi¸c˜ao de Corrida Ex: Vaga em avi˜ao Operador OP1 (no Brasil) lˆe Poltrona1 vaga Operador OP2 (no Jap˜ao) lˆe Poltrona1 vaga Operador OP1 compra Poltrona1 Operador OP2 compra Poltrona1 E o cliente? Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 22 / 45
  • 24. Exclus˜ao M´utua e Regi˜ao Cr´ıtica Uma solu¸c˜ao para as condi¸c˜oes de corrida ´e impedir que mais de um processo leia e escreva em uma vari´avel compartilhada ao mesmo tempo Esta restri¸c˜ao ´e conhecida como exclus˜ao m´utua Se¸c˜oes do programa onde s˜ao efetuados acessos a recursos partilhados por dois ou mais processos s˜ao denominados regi˜oes cr´ıticas (R.C.). Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 23 / 45
  • 25. Exclus˜ao M´utua e Regi˜ao Cr´ıtica Regi˜oes Cr´ıticas: Exclus˜ao m´utua ´e ent˜ao garantir que um processo n˜ao ter´a acesso a uma regi˜ao cr´ıtica quando outro processo estiver utilizando essa regi˜ao Pode gerar uma fila de clientes nos computadores → ineficiˆencia! Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 24 / 45
  • 26. Exclus˜ao M´utua e Regi˜ao Cr´ıtica Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 25 / 45
  • 27. Exclus˜ao M´utua e Regi˜ao Cr´ıtica Assegura-se a exclus˜ao m´utua recorrendo aos mecanismos de sincroniza¸c˜ao fornecidos pelo SO Presentes tamb´em na JVM Estas afirma¸c˜oes s˜ao v´alidas tamb´em para as threads Caso que ´e ainda mais cr´ıtico, pois todas as threads dentro do mesmo processo partilham os mesmos recursos. Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 26 / 45
  • 28. Exclus˜ao M´utua e Regi˜ao Cr´ıtica Regras para programa¸c˜ao concorrente (condi¸c˜oes para uma boa solu¸c˜ao) 1. Dois processos nunca podem estar simultaneamente dentro de suas regi˜oes cr´ıticas 2. N˜ao se pode fazer suposi¸c˜oes em rela¸c˜ao `a velocidade e ao n´umero de CPUs 3. Um processo fora da regi˜ao cr´ıtica n˜ao deve causar bloqueio a outro processo 4. Um processo n˜ao pode esperar eternamente para entrar em sua regi˜ao cr´ıtica Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 27 / 45
  • 29. Solu¸c˜oes de Exclus˜ao M´utua Espera Ocupada (Busy Waiting) Primitivas Sleep/Wakeup Sem´aforos Monitores Troca de Mensagem Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 28 / 45
  • 30. Espera Ocupada Consiste geralmente na constante checagem de uma vari´avel at´e que algum valor apare¸ca Gasta tempo de CPU Algumas solu¸c˜oes para Exclus˜ao M´utua com Espera Ocupada: Desabilitar interrup¸c˜oes Vari´aveis de Travamento (Lock) Estrita Alternˆancia (Strict Alternation) Solu¸c˜ao de Peterson Instru¸c˜ao TSL Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 29 / 45
  • 31. Espera Ocupada – Desabilitar interrup¸c˜oes ´E a solu¸c˜ao mais simples (com um ´unico processador) Cada processo desabilita todas as interrup¸c˜oes (inclusive a do rel´ogio) ao entrar na regi˜ao cr´ıtica e as habilita novamente antes de deix´a-la Com as interrup¸c˜oes desabilitadas, a CPU n˜ao realiza chaveamento entre os processos Pois a CPU ´e chaveada somente como resultado da interrup¸c˜ao do rel´ogio ou de outra interrup¸c˜ao N˜ao haver´a outro processo rodando na mesma hora Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 30 / 45
  • 32. Espera Ocupada – Desabilitar interrup¸c˜oes Em sistemas com v´arias CPUs, desabilitar interrup¸c˜oes em uma n˜ao evita que as outras acessem a mem´oria compartilhada Viola condi¸c˜ao 1 (Dois processos nunca podem estar simultaneamente dentro da regi˜ao cr´ıtica) Viola condi¸c˜ao 2 (N˜ao se pode fazer suposi¸c˜oes em rela¸c˜ao `a CPU – pressup˜oe processador de n´ucleo ´unico) N˜ao ´e uma solu¸c˜ao segura, pois um processo pode esquecer de reabilitar suas interrup¸c˜oes e n˜ao ser finalizado Viola condi¸c˜ao 4 (Processo n˜ao podem esperar eternamente para entrar em sua regi˜ao cr´ıtica) Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 31 / 45
  • 33. Espera Ocupada – Desabilitar interrup¸c˜oes ´E ´util, contudo, que o kernel tenha o poder de desabilitar interrup¸c˜oes, para sua pr´opria manuten¸c˜ao: Como quando atualiza a lista de processos prontos, caso em que uma interrup¸c˜ao poderia deix´a-la em estado inconsistente Ainda assim, com v´arios processadores n˜ao funciona bem Mas n˜ao ´e prudente que os processos de usu´ario usem este m´etodo de exclus˜ao m´utua Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 32 / 45
  • 34. Espera Ocupada – Lock variables Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 33 / 45
  • 35. Espera Ocupada – Lock variables Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 33 / 45
  • 36. Espera Ocupada – Lock variables O processo que deseja utilizar uma regi˜ao cr´ıtica atribui um valor a uma vari´avel compartilhada – lock Se a vari´avel est´a com valor 0 (zero) significa que nenhum processo est´a na regi˜ao cr´ıtica Se a vari´avel est´a com valor 1 (um) significa que existe um processo na regi˜ao cr´ıtica Para entrar em sua regi˜ao cr´ıtica, o processo verifica o conte´udo da vari´avel. Se for 0, muda para 1 e entra. Se for 1, espera at´e que seja 0. Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 34 / 45
  • 37. Espera Ocupada – Lock variables O processo que deseja utilizar uma regi˜ao cr´ıtica atribui um valor a uma vari´avel compartilhada – lock Se a vari´avel est´a com valor 0 (zero) significa que nenhum processo est´a na regi˜ao cr´ıtica Se a vari´avel est´a com valor 1 (um) significa que existe um processo na regi˜ao cr´ıtica Para entrar em sua regi˜ao cr´ıtica, o processo verifica o conte´udo da vari´avel. Se for 0, muda para 1 e entra. Se for 1, espera at´e que seja 0. Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 34 / 45
  • 38. Espera Ocupada – Lock variables Problema: Suponha que um processo A leia a vari´avel lock com valor 0 Antes que o processo A possa alterar a vari´avel para o valor 1, um processo B ´e escalonado, altera o valor de lock para 1, e entra na regi˜ao cr´ıtica Quando o processo A for escalonado novamente, ele altera o valor de lock para 1, e ambos os processos est˜ao na regi˜ao cr´ıtica Viola condi¸c˜ao 1 (Dois processos n˜ao podem estar simultaneamente na regi˜ao cr´ıtica) Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 35 / 45
  • 39. Espera Ocupada – Lock variables Exemplo: Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 36 / 45
  • 40. Espera Ocupada – Lock variables Exemplo: Escalonador interrompe aqui Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 36 / 45
  • 41. Espera Ocupada – Strict Alternation Poss´ıvel solu¸c˜ao: Strict Alternation Fragmentos de programa controlam o acesso `as regi˜oes cr´ıticas Vari´avel turn, inicialmente em 0, estabelece qual processo pode entrar na regi˜ao cr´ıtica Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 37 / 45
  • 42. Espera Ocupada – Strict Alternation Ao deixar a regi˜ao cr´ıtica, cada processo muda turn, para permitir que o outro possa entrar Problema: Suponha que B termina seu trabalho nessa regi˜ao rapidamente → ambos est˜ao em regi˜oes n˜ao cr´ıticas com turn=0 Agora o processo A entra na regi˜ao cr´ıtica, saindo rapidamente, e fazendo turn=1 → ambos est˜ao em regi˜oes n˜ao cr´ıticas com turn=1 Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 38 / 45
  • 43. Espera Ocupada – Strict Alternation Problema: A tenta entrar novamente na regi˜ao cr´ıtica → n˜ao consegue, pois turn=1, e B est´a ocupado em sua regi˜ao n˜ao cr´ıtica A tem que esperar at´e que turn seja 0 → viola¸c˜ao da condi¸c˜ao 3 (processos fora da regi˜ao cr´ıtica n˜ao devem bloquear outro processo) Moral: turnos n˜ao s˜ao uma boa id´eia quando um dos processos ´e muito mais lento que o outro Esta solu¸c˜ao requer que 2 processos alternem sempre na regi˜ao cr´ıtica Um mesmo n˜ao pode entrar nela mais de uma vez seguida Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 39 / 45
  • 44. Espera Ocupada – Solu¸c˜ao de Peterson (1981) Combina as id´eias das vari´aveis de travamento com chaveamento obrigat´orio (Strict Alternation) Uma vari´avel (ou programa) ´e utilizada para bloquear a entrada de um processo na regi˜ao cr´ıtica quando um outro processo est´a na regi˜ao Essa vari´avel ´e compartilhada pelos processos que concorrem pelo uso da regi˜ao cr´ıtica Ambos processos possuem fragmentos de programas que controlam a entrada e a sa´ıda da regi˜ao cr´ıtica Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 40 / 45
  • 45. Espera Ocupada – Solu¸c˜ao de Peterson Antes de entrar na regi˜ao cr´ıtica: Cada processo chama entra regi~ao, demonstrando seu interesse em entrar na regi˜ao cr´ıtica Somente quando entra regi~ao retorna ´e que ele pode entrar na regi˜ao cr´ıtica (espera at´e que seja seguro entrar na regi˜ao) #define FALSE 0 #define TRUE 1 #define N 2 /*N´umero de processos*/ int turn; /* de quem ´e a vez de esperar? */ int interessado[N]; /*inicialmente, FALSE para todos*/ /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 41 / 45
  • 46. Espera Ocupada – Solu¸c˜ao de Peterson Ap´os terminar na regi˜ao cr´ıtica Chama deixa regi~ao, permitindo que outro processo entre entra regi˜ao e deixa regi~ao s˜ao partes de uma biblioteca turn e interessado s˜ao compartilhadas #define FALSE 0 #define TRUE 1 #define N 2 /*N´umero de processos*/ int turn; /* de quem ´e a vez de esperar? */ int interessado[N]; /*inicialmente, FALSE para todos*/ /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 42 / 45
  • 47. Espera Ocupada – Solu¸c˜ao de Peterson E se dois processos chamarem entra regi~ao ao mesmo tempo? Ambos armazenar˜ao seus ids na vari´avel turn O ´ultimo a modific´a-la ´e quem a definir´a → ser´a quem ir´a esperar Note que eles alteram regi˜oes diferentes do vetor de interessados /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 43 / 45
  • 48. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = interessado = [0,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 49. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = interessado = [0,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 50. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = interessado = [0,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 51. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = interessado = [1,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 52. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 0 interessado = [1,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 53. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 0 interessado = [1,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 54. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 0 interessado = [1,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 55. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 0 interessado = [1,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 56. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 0 interessado = [1,0] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 57. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 0 interessado = [1,1] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 58. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 1 interessado = [1,1] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 59. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 1 interessado = [1,1] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 60. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 1 interessado = [1,1] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 61. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 1 interessado = [1,1] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 62. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 1 interessado = [1,1] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 63. Espera Ocupada – Solu¸c˜ao de Peterson Mesmo que o escalonamento se dˆe no &&, na pr´oxima itera¸c˜ao do la¸co tudo se destrava Ex: Processo 0 Processo 1 turn = 1 interessado = [1,1] /*processo ´e o n´umero do processo que deseja entrar na regi~ao: 0 ou 1*/ void entra regi~ao(int processo) { int outro; /*n´umero do outro processo*/ outro = 1-processo; /*o outro processo*/ interessado[processo] = TRUE; turn = processo; while (turn == processo && interessado[outro]); /*espera*/ } void deixa regi~ao(int processo) { /*processo: quem t´a saindo*/ interessado[processo] = FALSE; } Bastante complicado quando h´a v´arios processos Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 44 / 45
  • 64. Referˆencias Adicionais G. L. Peterson: “Myths About the Mutual Exclusion Problem”, Information Processing Letters 12(3) 1981, 115–116 Norton Trevisan Roman Aula 08 – Threads e Comunica¸c˜ao Interprocessos 11 de setembro de 2017 45 / 45