Vous êtes sur la page 1sur 22

SISTEMAS OPERACIONAIS

Comunicao entre Processos

Leandro Coelho

Plano da Aula
2

Componentes bsicos
 Componentes

do Sistema
 Gerncia de processos
 Conceito

escalonamento
 Tipos de escalonadores
 Critrios de rendimento
 Algoritmos de escalonamento
 Final multi-nvel

Sistemas Operacionais
Comunicao entre Processos
3




Estruturas de Comunicao entre Processos


Acesso Regio Crtica
 Soluo:
 Hardware
 Software

Sistemas Operacionais
Comunicao entre Processos
4




Estruturas de Comunicao entre Processos


Acesso Regio Crtica
 Hardware
 Impede

mudana de contexto antes de entrar na RC


 Usado pelo SO para manipular Estrutura de Dados
compartilhadas
:
Desabilita Interrupes ;
Regio Crtica ;
Habilita Interrupes ;
:

Sistemas Operacionais
Comunicao entre Processos
5




Estruturas de Comunicao entre Processos


Acesso Regio Crtica
 Hardware
 Inibir


interrupes

Soluo mais simples - antes de entrar na regio crtica o


processo inibe todas as interrupes e desinibe-as
imediatamente antes de sair
Soluo indesejvel - o utilizador no deve ter poder para inibir
as interrupes;

Sistemas Operacionais
Comunicao entre Processos
6




Estruturas de Comunicao entre Processos


Acesso Regio Crtica
 Hardware
 Inibir



interrupes

Em sistemas multiprocessador no funciona


Tcnica normalmente utilizada apenas pelo sistema operacional
mas no aconselhada como mecanismo de excluso mtua de
processos utilizador

Sistemas Operacionais
Comunicao entre Processos
7




Estruturas de Comunicao entre Processos


Acesso Regio Crtica
 Hardware
 Instruo



Test-And-Set (TSL)

Uma das instrues do processador


Em uma nica instruo:
 L varivel
 Armazena valor num registrador
 Atribui novo valor varivel
Execuo atmica
 No pode ser interrompida

Sistemas Operacionais
Comunicao entre Processos
8




Estruturas de Comunicao entre Processos


Acesso Regio Crtica
 Hardware
 Instruo



Test-And-Set (TSL)

Instruo Test-And-Set (TSL)


TSL reg, var
(reg = var & var = 0)
Entra_RC:
TSL AX, chave
CMP AX, 1
(AX = 1?)
JNE Entra_RC (Se AX = 0 v para Entra_RC)

Sistemas Operacionais
Comunicao entre Processos
9




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (TSL)

Key = 01
AX T1= 1
?


AX T2= ?
Thread A
Thread B

CPU: AX= 1?

Thread A
...

Thread B
...

TSL AX, Key

TSL AX, Key

CMP AX, 1

CMP AX, 1

JNE RegCrt

JNE RegCrt

...

...

Regiao_Critica

Regiao_Critica

...

...

MOV Key, 1

MOV Key, 1

Sistemas Operacionais
Comunicao entre Processos
10




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (TSL)

Key = 0
AX T1= 1


?
AX T2= 0
Thread A
Thread B

CPU: AX= 0?

Thread A
...

Thread B
...

TSL AX, Key

TSL AX, Key

CMP AX, 1

CMP AX, 1

JNE RegCrt

JNE RegCrt

...

...

Regiao_Critica

Regiao_Critica

...

...

MOV Key, 1

MOV Key, 1

Sistemas Operacionais
Comunicao entre Processos
11




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (TSL)

Key = 0
AX T1= 1


AX T2= 0
Thread A
Thread B

CPU: AX= 1?

Thread A
...

Thread B
...

TSL AX, Key

TSL AX, Key

CMP AX, 1

CMP AX, 1

JNE RegCrt

JNE RegCrt

...

...

Regiao_Critica

Regiao_Critica

...

...

MOV Key, 1

MOV Key, 1

Sistemas Operacionais
Comunicao entre Processos
12




Estruturas de Comunicao entre Processos


Acesso Regio Crtica
 Instruo

Test-And-Set (TSL)

 Garante

a Excluso Mtua
 Problema:


Gera espera ocupada


 Desperdcio de CPU

 Soluo?

Sistemas Operacionais
Comunicao entre Processos
13




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)
Bloqueio

Sistemas Operacionais
Comunicao entre Processos
14




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)
 Precisamos

bloquear a thread quando a RC estiver


ocupada para evitar a espera ocupada
 Colocar

 Quando

a thread para dormir

a RC ficar livre tem-se que acordar a a


thread que estava dormindo

Sistemas Operacionais
Comunicao entre Processos
15




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)
 System

Calls

 Sleep(x)

coloca o processo/thread para dormir


(bloqueado) aguardando na fila do sinal x.
 Wakeup(x) acorda um processo/thread que esteja
aguardando pelo sinal x.


Se a fila de s estiver vazia, o sinal se perde.

 Atmicas.

Sistemas Operacionais
Comunicao entre Processos
16




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)
 System

Calls

 Problema



Suponha uma Fila de objetos e duas threads concorrendo a ela.


O que ocorre se a thread que insere encontrar a fila cheia?
 Vai dormir at que o primeiro objeto seja retirado da fila
cheia.
O que ocorre se a thread que remove encontrar a fila vazia?
 Vai dormir at que o primeiro objeto seja inserido na fila
vazia.

Sistemas Operacionais
Comunicao entre Processos
17




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)

max representa o tamanho da fila


cont representa o nmero de dados na fila.
int max = 3;
int cont = 0;
Sinal posLivre,
Sinal posOcupada;

Thread A
Thread B

Thread_Produtor()
{
while (1) {
if (cont == max)
SLEEP(posLivre);
Produz_Item();
cont ++;
if (cont == 1)
WAKEUP(posOcupada);
}
}

Thread_Consumidor()
{
while(1) {
if (cont == 0)
SLEEP(posOcupada);
Consome_Item();
cont --;
if (cont == max -1)
WAKEUP(posLivre);
}
}

Sistemas Operacionais
Comunicao entre Processos
18




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)

int max = 3;
int cont = 0;
Sinal posLivre,
Sinal posOcupada;

Thread A
Thread B

Thread_Produtor()
{
while (1) {
if (cont == max)
SLEEP(posLivre);
Produz_Item();
cont ++;
if (cont == 1)
WAKEUP(posOcupada);
}
}

Bloqueio
Thread_Consumidor()
{
while(1) {
if (cont == 0)
SLEEP(posOcupada);
Consome_Item();
cont --;
if (cont == max -1)
WAKEUP(posLivre);
}
}

Sistemas Operacionais
Comunicao entre Processos
19




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)

int max = 3;
int cont = 1;
0;
Sinal posLivre,
Sinal posOcupada;

Thread A
Thread B

Thread_Produtor()
{
while (1) {
if (cont == max)
SLEEP(posLivre);
Produz_Item();
cont ++;
if (cont == 1)
WAKEUP(posOcupada);
}
}

Bloqueio
Thread_Consumidor()
{
while(1) {
if (cont == 0)
SLEEP(posOcupada);
Consome_Item();
cont --;
if (cont == max -1)
WAKEUP(posLivre);
}
}

Sistemas Operacionais
Comunicao entre Processos
20




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)

int max = 3;
int cont = 0;
Sinal posLivre,
Sinal posOcupada;

Thread A
Thread B

Thread_Produtor()
{
while (1) {
if (cont == max)
SLEEP(posLivre);
Produz_Item();
cont ++;
if (cont == 1)
WAKEUP(posOcupada);
}
}

Thread_Consumidor()
{
while(1) {
if (cont == 0)
SLEEP(posOcupada);
Consome_Item();
cont --;
if (cont == max -1)
WAKEUP(posLivre);
}
}

Sistemas Operacionais
Comunicao entre Processos
21




Estruturas de Comunicao entre Processos


Acesso Regio Crtica (Software)
 Consideraes

Sleep/Wakeup :

 Eliminam

a espera ocupada
 No garantem Excluso Mtua
 Entre testar uma condio e tomar uma deciso (Sleep ou
Wakeup) pode haver preempo


Bloqueio de processos/threads

Sistemas Operacionais
Comunicao entre Processos
22

Estruturas de Comunicao entre Processos


 Pratica

Produtor-Consumidor

Vous aimerez peut-être aussi