Escolar Documentos
Profissional Documentos
Cultura Documentos
Viso Geral
Um processo um programa em
execuo. Alm do cdigo executvel, ns
temos uma pila de execu!o, um
apontador para esta pila, um contador de
programa, valores dos registradores da
mquina, outras in"orma!#es.
lightweight (threads
espao de endereamento
segmento de dados inic
arquivos abertos
processos filho
sinais
estatsticas de uso
contador de programa (PC)
apontador de pilha (SP)
conjunto de registradores
estado de execuo
AMBIENTE
EXECUO
Modelos de Processo
@ierarquia de 'rocessos
etc#
Escalonador no-preemptivo:Cuando um
processo o%tem o processador# ele roda at$ o fim
ou at$ que ele pea uma operao que ocasione o
seu %loqueio&
,s escalonadores noBpreemptivos so de
proMeto extremamente simples# por$m permitem
que um processo detenha a C'A por um tempo
ar%itr=rio& "este caso# um processo que fa>
somente c=lculo durante 0 hora o%teria o
monopDlio do processador# impedindo os outros
processos de rodarem& 2sso viola v=rios dos
crit$rios de um %om escalonador (Mustia# tempo
m?nimo de resposta# etc&
%l0orit+os de es*alona+ento(
0
8scalonamento 7irstBComeB7irstB3erved (7C73
-lgoritmo Musto
7uncionamento(
processo interativo(
espera comando
executa comando
competio
cooperao
Competio
Cooperao
ConsideraEes(
while (vez != !) ;
re"iao#critica();
vez = $;
re"iao#n%o#critica();
&
while (TRUE)
while (vez != $) ;
re"iao#critica();
vez = !;
re"iao#n%o#critica();
&
'$ '(
Com&nicao entre Processos
T3cnicas de implementao de e1cl&so
m2t&a
O
-lgoritmo de .eFFer( 'rimeiro algoritmo que
permite que dois processos acessem
corretamente uma seo cr?tica sem a alternKncia
estrita& -l$m da vari=vel vez# serveBse de um
vetor que indica a inteno de um processo de
entrar na seo cr?tica&
while (TRUE)
fla")i* = TRUE;
while (fla")+*)
if (vez == +)
fla")i* = ,-./E;
while (vez == +) ;
fla")i* = TRUE;
&
&
secao#critica();
turn = +;
fla")i* = ,-./E;
&
'i S processo
M S 0 B i
Com&nicao entre Processos
T3cnicas de implementao de e1cl&so
m2t&a
O
3oluo de 'eterson( 'eterson# em 0VW0#
propXs uma verso melhorada do algoritmo de
.eFFer&
int vez;
int interessados)(*;
entra0re"i%o(int processo)
int outro;
outro = $ 0 processo;
interessado)processo* = TRUE;
vez = processo;
while (vez==processo 11
interessado)outro* == TRUE) ;
&
sai#re"iao(int processo)
interessado)processo* = ,-./E;
&
Com&nicao entre Processos
T3cnicas de implementao de e1cl&so
m2t&a
O
3oluo de 'eterson (cont( 4odo processo p
que deseMa executar uma seo cr?tica deve
fa>er(
entra#re"iao(p);
23 se4%o cr5tica 32
sai#re"iao(p);
Caracter?sticas do algoritmo(
permite o progressoY
-dvance(ev( incrementa ev de 0#
8xemplo de monitor(
1o&(#or nome
23 declaracao de variaveis 32
)roce,"re p!;
....
e&, )0;
e&, 1o&(#or;
Com&nicao entre Processos
T3cnicas de implementao de e1cl&so
m2t&a 4 Monitores
'ro%lema( 'rodutorBConsumidor
int item;
while (TRUE)
produz#item (1item);
if (cont == ?) sleep(v$);
insere#item(item);
cont==;
if (cont == $) wa@eup(v();
&
&
void consumidor()
int item;
while (TRUE)
if (cont == !) sleep(v();
remove#item(1item);
cont00;
if (cont == ?0$) wa@eup(v$);
consome#item(item);
&
&
Com&nicao entre Processos
5ol&o do Prod&tor;Cons&midor
5em6.oros
semaphore mutex = $;
semaphore vazio = ?; 23 vazias 32
semaphore cheio = !; 23 ocupadas 32
void produtor()
int item;
while (TRUE)
produz#item(1item);
'(1vazio);
'(1mutex);
insere#item(1item);
<(1mutex);
<(1cheio);
&
&
void consumidor()
int item;
while (TRUE)
'(1cheio);
'(1mutex);
remove#item(1item);
<(1mutex);
<(1vazio);
consome#item(item);
&
&
semAforo mutex6 controla a se4%o cr5tica
semAforos cheio e vazio6 semAforos de
sincroniza4%o
Com&nicao entre Processos
5ol&o do Prod&tor;Cons&midor
Monitores
monitor produtor0consumidor
condicao cheio8 vazio;
int cont;
cont = !;
procedure insere
if (cont == ?) wait(cheio);
insere#item();
cont==;
if (cont == $) si"nal(vazio);
&
procedure remove
if (cont == !) wait(vazio);
remove#item();
cont00;
if (cont == ?0$) si"nal(cheio);
&
end monitor;
Com&nicao entre Processos
5ol&o do Prod&tor;Cons&midor
Monitores
produtor()
while(TRUE)
produz#item(1item);
produtor0consumidor.insere();
&
&
consumidor()
while(TRUE)
produtor0consumidor.remove();
consome#item(item);
&
&
Com&nicao entre Processos
Troca de mensa#ens
tipo da comunicao( 0 a 0# n a 0# n a n
Pri+itivas 1loqueadas
Pri+itivas n,o/1loqueadas
8xemplo(
estrutura]y S aloca]caixa]postal(Y
send(estrutra]y# ZmsgY
receive(estrutura]y# ZmsgY
while(TRUE)
produz#item(1item);
send(p(8 1item);
&
&
consumidor()
while(TRUE)
receive(p$8 1item);
consome#item(item);
&
&
Com&nicao entre Processos
Os .ilAso.os #l&t'es
,s filDsofos glutEes
, %ar%eiro dorminhoco
7ormulao(
while ($)
pensa();
pe"a#"arfo(i);
pe"a#"arfo((i=$) D ?);
come();
li:era#"arfo(i);
li:era#"arfo((i=$) D ?); &
&
$
$
(
(
E
E
F
F
C
C
Com&nicao entre Processos
Os .ilAso.os #l&t'es
3egunda soluo
while ($)
pensa();
pe"a#"arfo(i);
if (ocupado#"arfo((i=$)D?);
li:era#"arfo(i);
else
pe"a#"arfo((i=$) D ?);
come();
li:era#"arfo(i);
li:era#"arfo((i=$) D ?); & &
&
Com&nicao entre Processos
Os .ilAso.os #l&t'es
while ($)
'(1mutex);
num#leitores = num#leitores = $;
if (num#leitores == $)
'(1d:);
<(1mutex);
le#dados();
'(1mutex);
num#leitores = num#leitores 0$;
if (num#leitores == !) <(1d:);
<(1mutex);
23 fora da secao critica 32
&
Com&nicao entre Processos
Os leitores;escritores
while ($)
23 secao n%o critica 32
'(1d:);
escreve#dados();
<(1d:);
&
&
Com&nicao entre Processos
O 0ar0eiro dorminBoco
while ($)
'(clientes);
'(mutex);
esperando = esperando 0 $;
<(:ar:eiro);
<(mutex);
23 corta ca:elo 32 &
&
Com&nicao entre Processos
O 0ar0eiro dorminBoco
'(mutex);
if (esperando > 7-IEJR-/)
esperando = esperando =$;
<(clientes);
<(mutex);
'(:ar:eiro);
23tem o ca:elo cortado 32
&
else
<(mutex);