Вы находитесь на странице: 1из 5

Sistemas Operacionais Comunicao entre Processos

Mquina de Nveis Processos concorrentes


Hardware e Software Compartilhamento de recursos do sistema
Tipos de Sistemas Operacionais Recursos: arquivos, registros, dispositivos e reas de memria

Sistemas Multiprogramveis O compartilhamento pode gerar situaes indesejveis


Exemplo: dois processos concorrentes trocam informaes atravs de
Estrutura do Sistema Operacional operaes de gravao e leitura em um buffer
Processo Mecanismos de sincronizao
Comunicao entre Processos Comunicao entre processos
Processo
Sincronizao
Processo
Acesso a recursos
Gerncia do Processador compartilhados
gravador leitor

Gerncia de Memria Garantir a integridade e


dados dados

Sistema de Arquivos confiabilidade de sistemas


operacionais multiprogramveis
Gerncia de Dispositivos Buffer

Comunicao entre Processos Comunicao entre Processos


Especificao de Concorrncia em Programas Comandos PARBEGIN e PAREND
Notao para especificar as partes de um programa que Exemplo: Calcular a expresso X = SQRT(1024) + (35.4 * 0.23) (302 / 7)
devem ser executadas concorrentemente PARBEGIN PROGRAM Expresso;
Comando_1; VAR X, Temp1, Temp2, Temp3: REAL;
Comandos FORK e JOIN Comando_2; BEGIN
. PARBEGIN
PROGRAM A; PROGRAM B; . Temp1 := SQRT(1024);
. . Comando_n; Temp2 := 35.4 * 0.23;
. . PAREND. Temp3 := 302 / 7;
Processo

FORK B; . principal PAREND;


. . X := Temp1 + Temp2 - Temp3;
. . Writeln('X = ', X);
JOIN B; END. PAREND.
Processo Processo Processo Processo
. 1 2 3
........ n

.
END.

Processo
principal

Comunicao entre Processos Comunicao entre Processos


Problemas de Compartilhamento de Recursos Problemas de Compartilhamento de Recursos
Arquivo de contas bancrias compartilhado Dois processos executando um comando de atribuio
Programa para atualizar o saldo de um cliente aps um lanamento utilizando uma varivel compartilhada
READ (Arq_Contas, Reg_Cliente); Considere que a varivel X possua o valor 2 inicialmente
READLN (Valor_Dep_Ret);
Reg_Cliente.Saldo := Reg_Cliente.Saldo + Valor_Dep_Ret; Processo A Processo B
WRITE (Arq_Contas, Reg_Cliente); X := X + 1; X := X - 1;

Considere dois caixas diferentes atualizando o saldo de um mesmo


cliente simultaneamente Processo Comando X Ra Rb
A LOAD X, Ra 2 2 *
Caixa Comando Saldo arquivo Valor dep/ret Saldo Memria Processo A Processo B A ADD 1, Ra 2 3 *
1 READ 1.000 * 1.000 LOAD X, Ra LOAD X, Rb B LOAD X, Rb 2 * 2
1 READLN 1.000 -200 1.000 ADD 1, Ra ADD 1, Rb
1 := 1.000 -200 800 B SUB 1, Rb 2 * 1
2 READ 1.000 * 1.000
STORE Ra, X STORE Rb, X A STORE Ra, X 3 3 *
2 READLN 1.000 +300 1.000 B STORE Rb, X 1 * 1
2 := 1.000 +300 1.300
1 WRITE 800 -200 800
2 WRITE 1.300 +300 1.300

1
Comunicao entre Processos Comunicao entre Processos
Soluo para os Problemas de Compartilhamento Soluo para os Problemas de Compartilhamento
Excluso mtua (mutual exclusion) Arquivo de contas bancrias compartilhado
Mecanismo que impede que dois ou mais processos acessem um O protocolo indica se j existe ou no algum processo acessando o
mesmo recurso no mesmo instante registro
Enquanto um processo estiver acessando determinado recurso, todos Caso o processo A esteja em sua regio crtica e o processo B tente
os outros que queiram acessar esse mesmo recurso devero esperar acessar o mesmo registro, o protocolo de entrada faz com que ele
fique aguardando, at que o processo A termine o acesso ao recurso
que o primeiro processo termine o acesso
O protocolo de sada informa aos outros processos que o processo A
Regio crtica terminou o
BEGIN
Parte do cdigo do programa onde feito o acesso ao recurso acesso ao .
compartilhado recurso .
BEGIN
Os mecanismos . Entra_Regiao_Critica; (* Protocolo de Entrada *)
READ (Arq_Contas, Reg_Cliente);
que implementam .
Entra_Regiao_Critica; (* Protocolo de Entrada *) READLN (Valor_Dep_Ret);
a excluso mtua Reg_Cliente.Saldo := Reg_Cliente.Saldo + Valor_Dep_Ret;
Regiao_Critica;
utilizam um protocolo Sai_Regiao_Critica; (* Protocolo de Saida *) WRITE (Arq_Contas, Reg_Cliente);
de acesso regio . Sai_Regiao_Critica; (* Protocolo de Saida *)
.
crtica .
END .
END

Comunicao entre Processos Comunicao entre Processos


PROGRAM Velocidades;
Problemas de Sincronizao Velocidade de Execuo VAR Vez: CHAR;
PROCEDURE Processo_A;

Algumas solues para implementar a excluso mtua dos Processos BEGIN


REPEAT
introduzem novos problemas Pode interferir em WHILE (Vez = 'B') DO (* Nao faz nada *);
Regiao_Critica_A;
Velocidade de execuo dos processos uma boa soluo Vez := 'B';
Processamento_Longo;
Starvation para o problema UNTIL False;
Sincronizao condicional da excluso mtua END;
PROCEDURE Processo_B;
Solues de Hardware Processo_A Processo_B Vez BEGIN
W HILE (Vez = B) W HILE (Vez = A) A REPEAT
Desabilitao de interrupes Regiao_Critica_A W HILE (Vez = A) A WHILE (Vez = 'A') DO (* Nao faz nada *);
Vez := B W HILE (Vez = A) B Regiao_Critica_B;
Instruo test-and-set Processamento_Longo Regiao_Critica_B B Vez := 'A';
Processamento_Longo Vez := A A
Solues de Software Processamento_Longo W HILE (Vez = A) A
UNTIL False;
END;
Semforos BEGIN
Vez := 'A';
Monitores PARBEGIN
Processo_A;
Troca de mensagens Processo_B;
PAREND;
END.

Comunicao entre Processos Comunicao entre Processos


Starvation Sincronizao Condicional
Situao na qual um processo nunca consegue executar Situao na qual um recurso compartilhado no se encontra
sua regio crtica pronto para ser utilizado pelos processos
Ocorre quando dois ou mais processos esperam por um recurso O sistema deve colocar o processo no estado de espera at que o
recurso fique pronto para o processamento
alocado
O sistema deve determinar qual processo ganhar o acesso ao Problema do produtor/consumidor
recurso quando este for liberado PROGRAM Produtor_Consumidor_1; PROCEDURE Consumidor;
CONST TamBuf = (* Tamanho qualquer *) BEGIN
Problema da escolha aleatria TYPE Tipo_Dado = (* Tipo qualquer *) REPEAT
VAR Buffer: ARRAY [1..TamBuf] OF Tipo_Dado; WHILE (Cont = 0) DO (* Nada *);
Existe a possibilidade de um processo nunca ser escolhido e sofrer Dado : Tipo_Dado; Le_Buffer (Dado, Cont);
starvation Cont : 0..TamBuf; Consome_Dado (Dado);
PROCEDURE Produtor; UNTIL False;
Problema da escolha por prioridades BEGIN END;
REPEAT BEGIN
Processos de baixa prioridade podem esperar indefinidamente pelo Produz_Dado (Dado); Cont := 0;
recurso WHILE (Cont = TamBuf) DO (* Nada *); PARBEGIN
Grava_Buffer(Dado, Cont); Produtor;
Soluo: filas UNTIL False;
END;
Consumidor;
PAREND;
END.

2
Comunicao entre Processos Comunicao entre Processos
Solues de Hardware Solues de Hardware
Desabilitao de Interrupes Instruo Test-and-set
As interrupes so desabilitadas pelo processo antes de entrar
em sua regio crtica, e reabilitadas aps deixar a regio crtica Test-and-Set (X,Y);
O acesso garantido porque a mudana de contexto somente
pode ser realizada atravs de interrupes
O valor lgico da varivel Y copiado para X, e o valor lgico
Pode ocorrer problemas se as interrupes
no forem reabilitadas pelo processo verdadeiro atribudo varivel Y
Pode ser til ao sistema Instruo indivisvel
BEGIN
operacional quando este .
necessita manipular .
estruturas de dados Desabilita_Interrupes;
Regiao_Critica;
compartilhadas do Habilita_Interrupes;
sistema .
.
END

Comunicao entre Processos Comunicao entre Processos


Solues de Hardware Solues de Software
A varivel lgica global Bloqueio utilizada para coordenar o Problema: compartilhamento de recursos
acesso concorrente a um recurso Soluo: excluso mtua
PROGRAM Programa_Test_and_Set; PROCEDURE Processo_B; Problema de velocidade de execuo de processos
VAR Bloqueio: Boolean; VAR Pode_B: BOOLEAN; Problema de starvation
PROCEDURE Processo_A; BEGIN
VAR Pode_A: BOOLEAN; REPEAT Problema de sincronizao condicional
BEGIN Pode_B := True;
REPEAT WHILE (Pode_B) DO Fatores fundamentais para a soluo dos problemas de
Pode_A := True;
WHILE (Pode_A) DO
Test_and_Set (Pode_B, Bloqueio);
Regiao_Critica_B; sincronizao
Test_and_Set (Pode_A, Bloqueio); Bloqueio := False; O nmero de processos e o tempo de execuo dos processos
Regiao_Critica_A; UNTIL True;
Bloqueio := False; END; concorrentes devem ser irrelevantes
UNTIL True; BEGIN Um processo, fora de sua regio crtica, no pode impedir que outros
END; Bloqueio := False;
PARBEGIN processos entrem em suas prprias regies crticas
Processo_A; Um processo no pode permanecer indefinidamente esperando para
Processo_B;
PAREND; entrar em sua regio crtica
END.

Comunicao entre Processos Comunicao entre Processos


Solues de Software Semforos
Histrico Conceito de semforo proposto por Dijkstra
Soluo para o problema da excluso mtua entre dois processos Um semforo uma varivel inteira, no negativa, que somente pode
ser manipulada por duas instrues: DOWN e UP (P e V)
Dekker, Peterson
DOWN: protocolo de entrada; UP: protocolo de sada
Soluo para o problema da excluso mtua entre n processos O semforo indica quando o recurso associado a ele est sendo
Dijkstra, Peterson utilizado por um dos processos concorrentes
Problema de starvation S > 0: nenhum processo est utilizando o recurso
Problema de espera ocupada (busy wait) S = 0: pocesso impedido de utilizar o recurso
Looping de espera consome tempo do processador desnecessariamente Instruo DOWN
Soluo para o problema de espera ocupada Se S > 0 S S 1 e processo pode executar regio crtica
Comando para colocar um processo no estado de espera at ser liberado Se S = 0 processo passa para o estado de espera (fila de espera)
por outro processo Instruo UP
Problema de aplicao das solues em problemas mais complexos Se no existir processos na fila de espera S S + 1
Se existir um ou mais processos na fila de espera o sistema escolhe
Fatores: legibilidade, simplicidade e correo dos um processo e muda seu estado para pronto
programas concorrentes

3
Comunicao entre Processos Comunicao entre Processos
Semforos Semforos
Fila de
Instrues DOWN e UP so indivisveis
espera de
processos System calls
TYPE Semaforo = RECORD
Valor: INTEGER;
Libera processo da Fila_Espera: (* Lista de processos pendentes *);
DOWN (S=0)
fila de espera End;

Processo Processo PROCEDURE DOWN (VAR S: Semaforo);


deseja entrar sai da
na regio regio BEGIN
crtica crtica IF (S = 0) THEN
Coloca_Processo_na_Fila_de_Espera
DOWN (S>0) UP ELSE
S := S - 1;
END;
Processo
acessa a PROCEDURE UP (VAR S: Semaforo);
regio
crtica BEGIN
IF (Tem_Processo_Esperando) THEN
Tira_da_Fila_de_Espera
ELSE
S := S + 1;
END;

Comunicao entre Processos Comunicao entre Processos


Monitores Monitores PROGRAM Exemplo;

O monitor um conjunto de procedimentos, variveis e MONITOR Regiao_Critica;


estrutura de dados definido dentro de um mdulo MONITOR Exclusao_Mutua;
VAR X: INTEGER;
PROCEDURE Soma;
Implementao automtica (* Declaracao das variaveis do monitor *) BEGIN
da excluso mtua entre PROCEDURE Regiao_Critica_1;
X := X + 1;
END;
Variveis globais
seus procedimentos Fila de espera
BEGIN PROCEDURE Diminui;
.
Somente um processo pode .
BEGIN
X := X + 1;
estar executando um dos END; END;
procedimentos do monitor PROCEDURE Regiao_Critica_2;
BEGIN
X := 0;
em um determinado instante BEGIN END;
.
Monitores: compilador
. BEGIN
Semforos: programador Procedimentos END; PARBEGIN
Regiao_Critica.Soma;
Cdigo de inicializao BEGIN Regiao_Critica.Diminui;
(* Bloco de comandos do monitor *) PAREND;
END; END.

Comunicao entre Processos Comunicao entre Processos


Monitores Monitores
Implementao da sincronizao condicional Problema do produtor
Fila (varivel de condio) e instrues WAIT e SIGNAL e consumidor MONITOR Condicional;
VAR Cheio, Vazio: Fila; (* Variavel de condicao *)
Fila de espera associada a Cheio
MONITOR Condicional; PROCEDURE Produz;
VAR Cheio: Fila; (* Variavel de condicao *) BEGIN
Fila de espera
PROCEDURE Produz; IF (Cont = TamBuf) THEN WAIT(Cheio);
BEGIN .
IF (Cont = TamBuf) THEN WAIT(Cheio); .
Wait
. IF (Cont = 1) THEN SIGNAL(Vazio);
Produtor
. END;
END; PROCEDURE Consome;
PROCEDURE Consome; BEGIN
BEGIN IF (Cont = 0) THEN WAIT(Vazio);
Signal .
.
Consumidor .
.
IF (Cont = TamBuf - 1) THEN SIGNAL(Cheio); IF (Cont = TamBuf - 1) THEN SIGNAL(Cheio);
END; END;
BEGIN BEGIN
Cont := 0 Cont := 0;
Cont := 0;
END; END;

4
Comunicao entre Processos Comunicao entre Processos
Troca de Mensagens Troca de Mensagens PROGRAM Produtor_Consumidor_4;
PROCEDURE Produtor;
Mecanismo de comunicao e sincronizao entre processos Comunicao VAR Msg: Tipo_Msg;
BEGIN
Duas rotinas do sistema: SEND e RECEIVE Sncrona REPEAT
Produz_Mensagem(Msg);
Endereamento Assncrona SEND(Msg);
UNTIL False;
Direto END;
Indireto (mailbox) Processo
transmissor
Processo
receptor
PROCEDURE Consumidor
VAR Msg: Tipo_Msg;
BEGIN
SEND RECEIVE REPEAT
Processo Processo
A B
RECEIVE(Msg);
Consome_Mensagem(Msg);
UNTIL False;
SEND (Receptor, Mensagem); END;
Processo Processo
BEGIN
A B RECEIVE (Transmissor, Mensagem); PARBEGIN
Produtor;
Consumidor;
PAREND;
Mailbox
END.

Comunicao entre Processos Comunicao entre Processos


Deadlock Deadlock
Um processo est em situao de deadlock quando est Condies para ocorrncia de situao de deadlock
esperando por um evento que nunca ocorrer 1. Cada recurso s pode estar alocado a um nico processo em um
determinado instante (excluso mtua)
2. Um processo, alm dos recursos j alocados, pode estar esperando
Processo A por outros recursos
Processo A Recurso 1
solicita o
Recurso 2
alocado ao
Processo A
3. Um recurso no pode ser liberado de um processo s porque outros
processos desejam o mesmo recurso (no-preempo)
4. Um processo pode ter de esperar por um recurso alocado a outro
Recurso 2 Recurso 1 processo e vice-versa (espera circular)
O problema de deadlock existe em qualquer sistema
Recurso 2 Processo B
multiprogramvel
alocado ao solicita o
Processo B Recurso 1
Processo B

Comunicao entre Processos Comunicao entre Processos


Preveno de Deadlock Deteco de Deadlock
Garantir que uma das quatro condies necessrias para sua Mecanismo que determina a existncia de um deadlock,
ocorrncia nunca se satisfaa permitindo identificar os recursos e processos envolvidos
1. Ausncia de excluso mtua no problema
2. Evitar que os processos que j possuam recursos garantidos Estrutura de dados e algoritmo para verificar a existncia
requisitem novos recursos de espera circular
Um processo deve requisitar os recursos necessrios antes de comear
sua execuo Correo de Deadlock
3. Permitir que um recursos seja retirado de um processo, no caso de Eliminar um ou mais processos envolvidos no deadlock e
outro processo necessitar do mesmo recurso
desalocar os recursos j garantidos pelos processos
4. Excluir a possibilidade da espera circular
A eliminao dos processos envolvidos no deadlock e a liberao
Um processo somente pode ter um recurso de cada vez (se necessitar de
de seus recursos podem no ser simples, dependendo do tipo do
outro recurso, deve liberar o primeiro)
recurso envolvido
Algoritmo do Banqueiro (Dijkstra)