Escolar Documentos
Profissional Documentos
Cultura Documentos
Processos
Comunicação e Sincronização entre Processos
Sistemas Operacionais 3
Processos
Funcionamento das Sub-rotinas comuns
Programa P Sub-Rotina A Sub-Rotina B
... ... ...
... ... ...
Call A Call B ...
... ... ...
... ... ...
End Return Return
Programa P2
Processo Pai
FORK P2
End
JOIN P2
End
Sistemas Operacionais 7
Processos
❚ Declarações COBEGIN/COEND
❙ Constituem uma forma estruturada de especificar execução
concorrente ou paralela de um conjunto de declarações
agrupadas da seguinte maneira:
COBEGIN
S1//S2//...//Sn
COEND
Onde:
❙ A execução deste trecho de programa provoca a
execução concorrente das declarações S1, S2, ..., Sn.
❙ Declarações Si podem ser qualquer declaração,
incluindo o para COBEGIN/COEND, ou um bloco de
declarações locais.
❙ Esta execução só termina, quando todas as
declarações Si terminarem.
Sistemas Operacionais 8
Processos
Declarações COBEGIN/COEND
Programa Principal Program Paralelo;
/* declaração de var.e const. globais */
Trecho sequencial Begin
/* trecho sequencial */
...
COBEGIN COBEGIN /* trechos paralelos */
Begin /* S1 */
...
End;
Trechos ...
S1 S2 ... Sn paralelos Begin /* Sn */
...
End;
COEND COEND
/* trecho sequencial */
...
Trecho sequencial End.
Sistemas Operacionais 9
Processos
❚ Declarações de Processos Concorrentes
❙ Geralmente, programas de grande porte são estruturados
como conjunto de trechos sequenciais de programa, que são
executados concorrentemente.
Sistemas Operacionais 11
Processos
Mecanismos Simples de Comunicação e
Sincronização entre Processos
Sistemas Operacionais 12
Processos
❚ Condições de Corrida
❙Em alguns Sistemas Operacionais: os processos se
comunicam através de alguma área de armazenamento
comum. Esta área pode estar na memória principal ou
pode ser um arquivo compartilhado.
Área
Comum na
Memória
Processo Principal Processo
Escreve Lê
Origem Destino
Área comum
no disco
Sistemas Operacionais 13
Processos
Condições de Corrida
❙ Definição de condições de corrida: situações onde dois
os mais processos estão lendo ou escrevendo algum
dado compartilhado e o resultado depende de quem
processa no momento propício.
Sistemas Operacionais 14
Processos
Condições de Corrida
❙ Um exemplo: Print Spooler
Sistemas Operacionais 15
Processos
Condições de Corrida Spooler Directory
Processo A 0
...
1 ...
get_prox_slot(slot); Spooler
set_nomearq(slot,nomearq); 2 Abc.txt OUT
Daemon
slot++; 3 arq2.pas
set_prox_slot(slot);
4 arq2.c
...
IN 5
Processo B Impressora
...
IN OUT
get_prox_slot(sl);
set_nomearq(sl,nomearq); 5 2
slot++;
set_prox_slot(slot);
... Sistemas Operacionais 16
Processos
❚ Regiões Críticas
❙ Uma solução para as condições de corrida é proibir que
mais de um processo leia ou escreva em uma variável
compartilhada ao mesmo tempo.
Sistemas Operacionais 17
Processos
Regiões Críticas
Sistemas Operacionais 18
Processos
Regiões Críticas
Processo A
... Região Crítica
(trecho de código
que manipula um
get_prox_slot(slot);
recurso
set_nomearq(slot,nomearq);
compartilhado)
slot++;
set_prox_slot(slot);
...
Sistemas Operacionais 19
Processos
Exclusão Mútua
❙ Condições para uma boa solução de exclusão mútua:
❙ dois processos não podem estar simultaneamente
dentro de suas R.C.s.
❙ nenhuma suposição é feita quanto à velocidade
relativa dos processos ou o número de UCPs.
❙ nenhum processo parado fora de sua R.C. pode
bloquear outros processos de entrarem na R.C.
❙ nenhum processo deve esperar um tempo
arbitrariamente longo em sua região crítica (R.C. longa
afeta o desempenho do sistema).
Sistemas Operacionais 20
Processos
❚ Exclusão Mútua com Espera Ocupada
❙ Desabilitando as Interrupções
❙ DESVANTAGENS:
• Processo pode esquecer de reabilitar as interrupções;
•Em sistemas com várias UCPs, desabilitar interrupções em uma UCP
não evita que as outras acessem a memória compartilhada.
Sistemas Operacionais 23
Processos
❚ Exclusão Mútua com Espera Ocupada
❙ Instrução TSL (Test and Set Lock) - Exemplo
ENTRA_RC:
TSL reg, flag ; copia flag para reg
; e coloca 1 em flag
CMP reg,0 ; flag era zero? PROCESSO
JNZ ENTRA_RC ; se a trava não ...
; estava ligada, CALL ENTRA_RC
; volta ao laço ...
RET R.C.
...
SAI_RC: CALL SAI_RC
MOV flag,0 ; desliga flag ...
RET
Sistemas Operacionais 24
Processos
❚ Exclusão Mútua com Espera Ocupada
Considerações Finais
❙ Desvantagens:
❙ desperdiça tempo de UCP;
❙ pode provocar “bloqueio perpétuo” (deadlock) em sistemas com
prioridades.
Sistemas Operacionais 25
Processos
❚ O Problema do Produtor/Consumidor atuando
sobre um Buffer Circular
Produtor
Ciclo
produz(mensagem); Buffer
deposita(mensagem); circular
... P com
Fim-ciclo N elementos
Consumidor
Ciclo
retira(mensagem);
consome(mensagem); C
...
Fim-ciclo Sistemas Operacionais 26
Processos
❚ O Problema do Produtor/Consumidor atuando
sobre um Buffer Circular
Restrições do Problema:
Sistemas Operacionais 27
Processos
❚ Exemplo do Problema do Produtor/Consumidor
usando Sleep e Wakeup
Sistemas Operacionais 28
Processos
❚ Exemplo do Problema do Produtor/Consumidor
usando Sleep e Wakeup
#define N 100 interrupção
int contador = 0;
produtor() consumidor()
{ {
while(TRUE) while(TRUE)
{ {
produz_item(); if (contador==0) Sleep();
if (contador==N) Sleep(); retira_item();
deposita_item(); contador - = 1;
contador + = 1; if (contador==N-1)
if (contador==1) Wakeup(produtor);
Wakeup(consumidor); consome_item();
} }
} }
Sistemas Operacionais 29
Processos
❚ Exemplo do Problema do Produtor/Consumidor
usando Sleep e Wakeup
Sistemas Operacionais 30