102
DESCRIPTION
SOTRANSCRIPT
-
SISTEMAS OPERACIONAIS
Leandro Coelho
Comunicao entre Processos
-
Plano da Aula2
Componentes bsicos
Componentes do Sistema
Gerncia de processos
Conceito escalonamentoConceito escalonamento
Tipos de escalonadores
Critrios de rendimento
Algoritmos de escalonamento
Final multi-nvel
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica
Soluo:
Hardware
Sistemas OperacionaisComunicao entre Processos
3
Hardware
Software
-
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
Sistemas OperacionaisComunicao entre Processos
4
Usado pelo SO para manipular Estrutura de Dadoscompartilhadas
:
Desabilita Interrupes ;
Regio Crtica ;
Habilita Interrupes ;
:
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica
Hardware
Inibir interrupes
Sistemas OperacionaisComunicao entre Processos
5
Inibir interrupes
Soluo mais simples - antes de entrar na regio crtica oprocesso inibe todas as interrupes e desinibe-asimediatamente antes de sair
Soluo indesejvel - o utilizador no deve ter poder para inibiras interrupes;
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica
Hardware
Inibir interrupes
Sistemas OperacionaisComunicao entre Processos
6
Inibir interrupes
Em sistemas multiprocessador no funciona
Tcnica normalmente utilizada apenas pelo sistema operacionalmas no aconselhada como mecanismo de excluso mtua deprocessos utilizador
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica
Hardware
Instruo Test-And-Set (TSL)
Sistemas OperacionaisComunicao entre Processos
7
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
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica
Hardware
Instruo Test-And-Set (TSL)
Sistemas OperacionaisComunicao entre Processos
8
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)
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (TSL)
Sistemas OperacionaisComunicao entre Processos
9
Key = 1AX T1= ?Key = 0AX T1= 1
Thread A
...
TSL AX, Key
CMP AX, 1
JNE RegCrt
...
Regiao_Critica
...
MOV Key, 1
Thread B
...
TSL AX, Key
CMP AX, 1
JNE RegCrt
...
Regiao_Critica
...
MOV Key, 1
Thread A
Thread B
AX T1= ?AX T2= ?
CPU: AX= ?CPU: AX= 1
AX T1= 1
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (TSL)
Sistemas OperacionaisComunicao entre Processos
10
AX T1= 1Key = 0
Thread A
...
TSL AX, Key
CMP AX, 1
JNE RegCrt
...
Regiao_Critica
...
MOV Key, 1
Thread B
...
TSL AX, Key
CMP AX, 1
JNE RegCrt
...
Regiao_Critica
...
MOV Key, 1
Thread A
Thread B
AX T1= 1AX T2= ?
CPU: AX= ?CPU: AX= 0
AX T2= 0
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (TSL)
Sistemas OperacionaisComunicao entre Processos
11
AX T1= 1Key = 0
Thread A
...
TSL AX, Key
CMP AX, 1
JNE RegCrt
...
Regiao_Critica
...
MOV Key, 1
Thread B
...
TSL AX, Key
CMP AX, 1
JNE RegCrt
...
Regiao_Critica
...
MOV Key, 1
Thread A
Thread B
AX T1= 1AX T2= 0
CPU: AX= ?CPU: AX= 1
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica
Instruo Test-And-Set (TSL)
Garante a Excluso Mtua
Sistemas OperacionaisComunicao entre Processos
12
Garante a Excluso Mtua
Problema:
Gera espera ocupada
Desperdcio de CPU
Soluo?
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
Sistemas OperacionaisComunicao entre Processos
13
BloqueioBloqueio
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
Precisamos bloquear a thread quando a RC estiverocupada para evitar a espera ocupada
Sistemas OperacionaisComunicao entre Processos
14
ocupada para evitar a espera ocupada
Colocar a thread para dormir
Quando a RC ficar livre tem-se que acordar a athread que estava dormindo
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
System Calls
Sleep(x) coloca o processo/thread para dormir
Sistemas OperacionaisComunicao entre Processos
15
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.
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
System Calls
Problema
Sistemas OperacionaisComunicao entre Processos
16
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.
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
Sistemas OperacionaisComunicao entre Processos
17
Thread_Produtor() Thread_Consumidor() int max = 3;
max representa o tamanho da filacont representa o nmero de dados na fila.
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);}}
Thread A
Thread B
int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
Sistemas OperacionaisComunicao entre Processos
18
Thread_Produtor() Thread_Consumidor() Bloqueioint max = 3; 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);}}
Thread A
Bloqueio
Thread B
int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
Sistemas OperacionaisComunicao entre Processos
19
Thread_Produtor() Thread_Consumidor() int max = 3; Bloqueioint max = 3; Thread_Consumidor() 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);}}
Thread A
Thread B
int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;
Bloqueioint max = 3;int cont = 1;Sinal posLivre, Sinal posOcupada;
Thread_Consumidor() {while(1) {
if (cont == 0)SLEEP(posOcupada);
Consome_Item();cont --;if (cont == max -1)
WAKEUP(posLivre);}}
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
Sistemas OperacionaisComunicao entre Processos
20
Thread_Produtor() Thread_Consumidor() int max = 3; 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);}}
Thread A
Thread B
int max = 3;int cont = 0;Sinal posLivre, Sinal posOcupada;
-
Estruturas de Comunicao entre Processos
Acesso Regio Crtica (Software)
Consideraes Sleep/Wakeup :
Eliminam a espera ocupada
Sistemas OperacionaisComunicao entre Processos
21
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
-
Estruturas de Comunicao entre Processos
Pratica Produtor-Consumidor
Sistemas OperacionaisComunicao entre Processos
22