Académique Documents
Professionnel Documents
Culture Documents
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
Sistemas Operacionais
Comunicao entre Processos
4
Sistemas Operacionais
Comunicao entre Processos
5
interrupes
Sistemas Operacionais
Comunicao entre Processos
6
interrupes
Sistemas Operacionais
Comunicao entre Processos
7
Test-And-Set (TSL)
Sistemas Operacionais
Comunicao entre Processos
8
Test-And-Set (TSL)
Sistemas Operacionais
Comunicao entre Processos
9
Key = 01
AX T1= 1
?
AX T2= ?
Thread A
Thread B
CPU: AX= 1?
Thread A
...
Thread B
...
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
Key = 0
AX T1= 1
?
AX T2= 0
Thread A
Thread B
CPU: AX= 0?
Thread A
...
Thread B
...
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
Key = 0
AX T1= 1
AX T2= 0
Thread A
Thread B
CPU: AX= 1?
Thread A
...
Thread B
...
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
Test-And-Set (TSL)
Garante
a Excluso Mtua
Problema:
Soluo?
Sistemas Operacionais
Comunicao entre Processos
13
Sistemas Operacionais
Comunicao entre Processos
14
Quando
Sistemas Operacionais
Comunicao entre Processos
15
Calls
Sleep(x)
Atmicas.
Sistemas Operacionais
Comunicao entre Processos
16
Calls
Problema
Sistemas Operacionais
Comunicao entre Processos
17
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
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
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
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
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
Produtor-Consumidor