INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com...

70
Redes de Computadores INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Transcript of INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com...

Page 1: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Redes de Computadores

INF201 - Fundamentos de Sistemas

Operacionais - 2º Período

Page 2: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

PARTE II: PROCESSOS

E THREADS

SUMÁRIO

7. SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS:

7.1 Introdução;

7.2 Aplicações Concorrentes;

7.3 Especificação de Concorrência em Programas;

7.4 Problemas de Compartilhamento de Recursos;

7.5 Exclusão Mútua;

7.6 Sincronização Condicional;

7.7 Semáforos;

7.8 Monitores;

7.9 Troca de Mensagens;

7.10 Deadlock.

Page 3: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.1 Introdução

Com o surgimento dos sistemas multiprogramáveis, passou a ser possível

estruturar aplicações concorrentes, que tem como base a execução

cooperativa de múltiplos processos ou threads.

Em sistemas com múltiplos processadores, a possibilidade do paralelismo na

execução de instruções somente estende as vantagens que a programação

concorrente proporciona.

O compartilhamento de recursos entre os processos pode ocasionar

situações indesejáveis, capazes até de comprometer a execução das

aplicações.

Os processos concorrentes devem ter suas execuções sincronizadas.

Page 4: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.2 Aplicações Concorrentes

É necessário que os processos concorrentes tenham sua execução

sincronizada através de mecanismos do sistema operacional.

Os mecanismos que garantem a comunicação entre processos concorrentes

e o acesso a recursos compartilhados são chamados mecanismos de

sincronização.

No projeto de SOs multiprogramáveis, é fundamental a implementação

desses mecanismos para garantir a integridade e a confiabilidade na

execução de aplicações.

Page 5: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.2 Aplicações Concorrentes

Processogravador

Processoleitor

dado

Sincronização

leitu

ragravação

Buffer

Page 6: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.3 Especificação de Concorrência em Programas

Existem várias notações utilizadas para especificar as partes de um

programa que devem ser executadas concorrentemente.

FORK E JOIN, introduzidos por Conway (1963) e Dennis e Van Horn (1966):

Page 7: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.3 Especificação de Concorrência em Programas

PARBEGIN e PAREND (Dijkstra, 1965), que, posteriormente, foram

chamados de COBEGIN e COEND:

Page 8: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.3 Especificação de Concorrência em Programas

Processoprincipal

Processoprincipal

Processo 1 Processo 2 Processo n

PARBEGIN

Comando_1;

Comando_2;

.

.

Comando_n;

PAREND

Page 9: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.4 Problemas de Compartilhamento de Recursos

Para a compreensão de como a sincronização entre processos concorrentes

é fundamental para a confiabilidade dos sistemas multiprogramáveis, são

apresentados dois exemplos de compartilhamento de recursos:

O primeiro exemplo envolve o compartilhamento de um arquivo em disco;

O segundo apresenta uma variável na memória principal sendo

compartilhada por dois processos.

Em qualquer situação, onde dois ou mais processos acessem um mesmo

recurso, devem existir mecanismos de controle para evitar esses tipos de

problemas, conhecidos como condições de corrida.

Page 10: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.4 Problemas de Compartilhamento de Recursos

1º Exemplo:

Page 11: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.4 Problemas de Compartilhamento de Recursos

1º Exemplo:

Page 12: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.4 Problemas de Compartilhamento de Recursos

2º Exemplo:

Page 13: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5 Exclusão Mútua

Ideia de exclusividade de acesso.

Solução: impedir que dois ou mais processos acessem o mesmo recurso

simultaneamente.

A parte do código do programa onde é feito o acesso ao recurso

compartilhado é denominada região crítica.

Os mecanismos que implementam a exclusão mútua utilizam protocolos de

acesso à região crítica.

Os protocolos de entrada e saída garantem a exclusão mútua da região

crítica de um programa.

Page 14: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5 Exclusão Mútua

Além da garantia da exclusão mútua, duas situações indesejadas também

devem ser evitadas.

Page 15: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5 Exclusão Mútua

1º Situação: Starvation ou Espera Indefinida.

Um processo nunca consegue executar sua região crítica e,

consequentemente, acessar o recurso compartilhado.

O SO possui um critério para selecionar, dentre os processos que aguardam

pelo uso do recurso, qual será o escolhido.

Critérios que podem gerar problemas:

Escolha aleatória (randômica);

Com base em prioridades.

Uma possível solução: utilizar o esquema FIFO (First In First Out).

Page 16: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5 Exclusão Mútua

2º Situação: Um processo fora da sua região crítica impede que outros

processos entrem nas suas próprias regiões críticas.

Diversas soluções foram propostas para garantir a exclusão mútua de

processos concorrentes. A seguir, são apresentadas algumas soluções:

Soluções de Hardware;

Soluções de Software.

Page 17: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.1 Soluções de Hardware

Desabilitação de Interrupções: o processo desabilita todas as interrupções

antes de entrar em sua região crítica, e as reabilita após deixar a região

crítica.

Page 18: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.1 Soluções de Hardware

Essa solução, apesar de simples, apresenta algumas limitações:

A multiprogramação pode ficar comprometida, já que a concorrência entre

processos tem como base o uso de interrupções;

Em sistemas com múltiplos processadores, essa solução torna-se

ineficiente devido ao tempo de propagação quando um processador

sinaliza aos demais que as interrupções devem ser habilitadas ou

desabilitadas;

O mecanismo de clock do sistema é implementado através de

interrupções, devendo essa solução ser utilizada com bastante critério.

Page 19: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.1 Soluções de Hardware

Instrução test-and-set: instrução de máquina especial que permite ler uma

variável, armazenar seu conteúdo em uma outra área e atribuir um novo

valor à mesma variável.

Tem como característica ser executada sem interrupção.

A instrução test-and-set possui o formato a seguir, e quando executada o

valor lógico da variável Y é copiado para X, sendo atribuído à variável Y o

valor lógico verdadeiro.

Page 20: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.1 Soluções de Hardware

Para coordenar o acesso concorrente

a um recurso, a instrução test-and-set

utiliza uma variável lógica global.

No exemplo do programa

Test_and_Set essa variável é

denominada Bloqueio.

Bloqueio = false → acesso liberado.

Bloqueio = true → acesso bloqueado.

void main ()

{

bool Bloqueio = false;

PARBEGIN

Processo_A ();

Processo_B ();

PAREND

}

Page 21: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.1 Soluções de Hardware – test-and-set

void Processo_A ()

{

bool Pode_A = true;

do {

while (Pode_A) {

Test_and_Set (Pode_A, Bloqueio);

}

Regiao_Critica_A;

Bloqueio = false;

} while (true);

}

void Processo_B ()

{

bool Pode_B = true;

do {

while (Pode_B) {

Test_and_Set (Pode_B, Bloqueio);

}

Regiao_Critica_B;

Bloqueio = false;

} while (true);

}

Page 22: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.1 Soluções de Hardware

Page 23: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.1 Soluções de Hardware

O uso de uma instrução especial de máquina oferece algumas vantagens:

Simplicidade de implementação da exclusão mútua em múltiplas regiões

críticas;

Uso da solução de hardware em arquiteturas com múltiplos

processadores.

Desvantagem: possibilidade do starvation ou espera indefinida.

Page 24: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Diversos algoritmos foram propostos na tentativa de implementar a exclusão

mútua através de soluções de software.

As primeiras soluções tratavam apenas da exclusão mútua para dois

processos e, inicialmente, apresentavam alguns problemas.

A seguir apresenta-se de forma evolutiva como foi o desenvolvimento de

uma solução definitiva para a exclusão mútua entre N processos.

Page 25: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Primeiro algoritmo:

void main ()

{

char Vez = ‘A’;

PARBEGIN

Processo_A ();

Processo_B ();

PAREND

} void Processo_A ()

{

do {

while (Vez == ‘B’) { }

Regiao_Critica_A;

Vez = ‘B’;

Processamento_A;

} while (true);

}

void Processo_B ()

{

do {

while (Vez == ‘A’) { }

Regiao_Critica_B;

Vez = ‘A’;

Processamento_B;

} while (true);

}

Page 26: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Primeiro algoritmo:

Page 27: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Esse algoritmo, apesar de implementar a exclusão mútua, apresenta duas

limitações:

O acesso ao recurso compartilhado só pode ser realizado por dois

processos e sempre de maneira alternada;

No caso da ocorrência de algum problema com um dos processos, de

forma que a variável de bloqueio não seja alterada, o outro processo

permanecerá indefinidamente bloqueado.

Page 28: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Segundo algoritmo:

void main ()

{

bool CA=false, CB=false;

PARBEGIN

Processo_A ();

Processo_B ();

PAREND

} void Processo_A ()

{

do { while (CB) { }

CA = true;

Regiao_Critica_A;

CA = false;

Processamento_A;

} while (true);

}

void Processo_B ()

{

do { while (CA) { }

CB = true;

Regiao_Critica_B;

CB = false;

Processamento_B;

} while (true);

}

Page 29: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Segundo algoritmo:

Page 30: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

No segundo algoritmo:

O uso do recurso não é realizado necessariamente alternado;

Caso ocorra algum problema com um dos processos fora da região

crítica, o outro não ficará bloqueado;

Caso um processo tenha um problema dentro da sua região crítica ou

antes de alterar a variável, o outro processo permanecerá indefinidamente

bloqueado;

Na prática, nem sempre a exclusão mútua é garantida.

Page 31: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Terceiro algoritmo:

void main ()

{

bool CA=false, CB=false;

PARBEGIN

Processo_A ();

Processo_B ();

PAREND

} void Processo_A ()

{

do { CA = true;

while (CB) { }

Regiao_Critica_A;

CA = false;

Processamento_A;

} while (true);

}

void Processo_B ()

{

do { CB = true;

while (CA) { }

Regiao_Critica_B;

CB = false;

Processamento_B;

} while (true);

}

Page 32: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

No terceiro algoritmo:

Garantia da exclusão mútua;

Cada processo altera o estado da sua variável indicando que irá entrar na

região crítica sem conhecer o estado do outro processo;

Problema: possibilidade de bloqueio indefinido de ambos os processos.

Page 33: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

void main ()

{

bool CA=false, CB=false;

PARBEGIN

Processo_A ();

Processo_B ();

PAREND

}

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Quarto algoritmo:

void Processo_A ()

{

do { CA = true;

while (CB) {

CA = false;

//pequeno int. de tempo aleatório

CA = true;}

Regiao_Critica_A;

CA = false;

Processamento_A;

} while (true);

}

void Processo_B ()

{

do { CB = true;

while (CA) {

CB = false;

//pequeno int. de tempo aleatório

CB = true;}

Regiao_Critica_B;

CB = false;

Processamento_B;

} while (true);

}

Page 34: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

No quarto algoritmo:

Semelhante ao terceiro algoritmo, porém existe a possibilidade da

alteração do estado da variável ser revertida;

Garante a exclusão mútua;

Não gera o bloqueio simultâneo dos processos;

Problema: quando os tempos aleatórios forem próximos, pode ocorrer

uma situação onde nenhum dos dois processos conseguirá executar sua

região crítica.

Page 35: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Algoritmo de Dekker:

A primeira solução de software que garantiu a exclusão mútua entre dois

processos sem a incorrência de outros problemas foi proposta pelo

matemático holandês T. Dekker, com base no 1º e 4º algoritmos;

Possui uma lógica bastante complexa e pode ser encontrado em Stallings

(1997).

Algoritmo de Peterson:

Proposto por. G. L. Peterson;

Apresenta uma solução simples para o problema da exclusão mútua entre

dois processos.

Page 36: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

void main ()

{

bool CA=false, CB=false;

PARBEGIN

Processo_A ();

Processo_B ();

PAREND

}

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Algoritmo de Peterson:

void Processo_A ()

{

do { CA = true;

Vez = ‘B’;

while (CB && Vez == ‘B’) { }

Regiao_Critica_A;

CA = false;

Processamento_A;

} while (true);

}

void Processo_B ()

{

do { CB = true;

Vez = ‘A’;

while (CA && Vez == ‘A’) { }

Regiao_Critica_B;

CB = false;

Processamento_B;

} while (true);

}

Page 37: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Algoritmo para exclusão mútua entre N processos:

O algoritmo de Dekker e a versão inicial do algoritmo de Perterson

garantem a exclusão mútua de dois processos;

Posteriormente, o algoritmo de Peterson foi generalizado para o caso de

N processos;

O algoritmo do padeiro (bakery algorithm), proposto por Lamport (1974), é

uma solução clássica para o problema da exclusão mútua entre N

processos;

Page 38: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.5.2 Soluções de Software

Apesar de todas as soluções apresentadas implementarem a exclusão

mútua, todas possuíam um problema conhecido como espera ocupada

(busy wait);

Na espera ocupada, toda vez que um processo não consegue entrar em

sua região crítica, o processo permanece em looping, testando uma

condição, até que lhe seja permitido o acesso;

Solução: a introdução de mecanismos de sincronização que permitam

que um processo, quando não puder entrar em sua região crítica, seja

colocado no estado de espera.

Page 39: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.6 Sincronização Condicional

É uma situação em que o acesso ao recurso compartilhado exige a

sincronização de processos vinculada a uma condição de acesso.

Um recurso pode não se encontrar pronto para uso devido a uma condição

específica.

Um exemplo clássico desse tipo de sincronização é a comunicação entre

dois processos através de operações de gravação e leitura em um buffer,

onde processos geram informações (processos produtores) utilizadas por

outros processos (processos consumidores).

O programa a seguir exemplifica o problema da sincronização condicional,

também conhecido como problema do produtor/consumidor ou do buffer

limitado.

Page 40: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.6 Sincronização Condicional

struct Tipo_Dado

{ //Tipo qualquer

}

void Produtor ()

{ //Código definido posteriormente

}

void Consumidor ()

{ //Código definido posteriormente

}

void main ()

{

const TamBuf = //Tamanho qualquer

Tipo_Dado[] Buffer = new Tipo_Dado [TamBuf];

Tipo_Dado Dado1, Dado2;

int Cont = 0;

PARBEGIN

Produtor ();

Consumidor ();

PAREND

}

Page 41: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.6 Sincronização Condicional

Não está sendo considerada, neste algoritmo, a implementação da

exclusão mútua na variável compartilhada Cont.

Apesar do algoritmo apresentado resolver a questão da sincronização

condicional, não resolve o problema da espera ocupada.

void Produtor ()

{

do {

Produz_Dado (Dado1);

while (Cont == TamBuf) { }

Grava_Buffer (Dado1, Buffer);

Cont++;

} while (true);

}

void Consumidor ()

{

do {

while (Cont == 0) { }

Le_Buffer (Dado2, Buffer);

Consome_Dado (Dado2);

Cont--;

} while (true);

}

Page 42: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7 Semáforos

O conceito de semáforos foi proposto E. W. Dijkstra em 1965;

Foi apresentado como um mecanismo de sincronização que permitia

implementar, de forma simples, a exclusão mútua e a sincronização

condicional entre dois processos;

Atualmente, a maioria das linguagens de programação disponibiliza

rotinas para o uso de semáforos;

Definição: um semáforo é uma variável inteira, não negativa, que só pode

ser manipulada por duas instruções, DOWN e UP;

As instruções DOWN e UP são indivisíveis;

Page 43: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7 Semáforos

Instrução UP: incrementa uma unidade ao valor do semáforo;

Instrução DOWN: decrementa a variável semáforo;

A instrução DOWN executada em um semáforo com valor 0 faz com que

o processo entre no estado de espera.

Os semáforos podem ser classificados como:

Binários: só podem assumir os valores 0 e 1;

Contadores: podem assumir qualquer valor inteiro positivo, além do 0.

Page 44: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.1 Exclusão Mútua Utilizando Semáforos

Pode ser implementada através de um semáforo binário associado ao

recurso compartilhado;

Vantagem: não ocorrência da espera ocupada;

As instruções DOWN e UP funcionam respectivamente como protocolos

de entrada e saída;

O semáforo fica associado a um recurso compartilhado, indicando quando

o recurso está sendo acessado por um dos processos concorrentes;

Semáforo = 1 → recurso livre e semáforo = 0 → recurso em uso.

Page 45: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.1 Exclusão Mútua Utilizando Semáforos

Fila de esperade processos

Processo acessaa região crítica

Processo deseja entrarna região crítica

DO

WN

(S=0)

DO

WN

(S>0)

UP (S) - processo saida região crítica

Libera processoda fila de espera

Page 46: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.1 Exclusão Mútua Utilizando Semáforos

void main ()

{

Semaforo S = 1;

PARBEGIN

Processo_A ();

Processo_B ();

PAREND

} void Processo_A ()

{

do {

DOWN (S);

Regiao_Critica_A;

UP (S);

} while (true);

}

void Processo_B ()

{

do {

DOWN (S);

Regiao_Critica_B;

UP (S);

} while (true);

}

Page 47: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.1 Exclusão Mútua Utilizando Semáforos

Processo Instrução S Espera

A do 1 *

B do 1 *

A DOWN (S) 0 *

B do 0 *

A Regiao_Critica_A 0 *

B DOWN (S) 0 Processo_B

A UP (S) 1 Processo_B

B DOWN (S) 0 Processo_B

A do 0 Processo_B

B Regiao_Critica_B 0 *

Page 48: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.2 Sincronização Condicional Utilizando Semáforos

Os semáforos podem ser utilizados nos casos onde a sincronização

condicional é exigida.

Um exemplo desse tipo de sincronização ocorre quando um processo solicita

uma operação de E/S.

O problema do produtor/consumidor já apresentado é um outro exemplo de

como a exclusão mútua e a sincronização condicional podem ser

implementadas com o uso de semáforos.

Vejamos os exemplos a seguir:

Page 49: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.2 Sincronização Condicional Utilizando Semáforos

struct Tipo_Dado

{ //Tipo qualquer

}

void main ()

{

const TamBuf = 2;

Tipo_Dado[] Buffer = new Tipo_Dado [TamBuf];

Tipo_Dado Dado1, Dado2;

Semaforo Vazio = TamBuf;

Semaforo Cheio = 0;

Semaforo Mutex = 1

PARBEGIN

Produtor ();

Consumidor ();

PAREND

}

Page 50: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.2 Sincronização Condicional Utilizando Semáforos

void Produtor ()

{

do {

Produz_Dado (Dado1);

DOWN (Vazio);

DOWN (Mutex);

Grava_Buffer (Dado1, Buffer);

UP (Mutex);

UP (Cheio);

} while (true);

}

void Consumidor ()

{

do {

DOWN (Cheio);

DOWN (Mutex);

Le_Buffer (Dado2, Buffer);

UP (Mutex);

UP (Vazio);

Consome_Dado (Dado2);

} while (true);

}

Page 51: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.2 Sincronização Condicional Utilizando Semáforos

Processo Instrução Vazio Cheio Mutex Espera

Produtor Produz_Dado 2 0 1 *

Consumidor Down (Cheio) 2 0 1 Consumidor

Produtor Down (Vazio) 1 0 1 Consumidor

Produtor Down (Mutex) 1 0 0 Consumidor

Produtor Grava_Buffer (...) 1 0 0 Consumidor

Produtor Up (Mutex) 1 0 1 Consumidor

Produtor Up (Cheio) 1 1 1 Consumidor

Consumidor Down (Cheio) 1 0 1 *

Produtor Produz_Dado 1 0 1 Produtor

Consumidor Down (Mutex) 1 0 0 Produtor

Consumidor Le_Buffer (...) 1 0 0 Produtor

Consumidor Up (Mutex) 1 0 1 Produtor

Consumidor Up (Vazio) 2 0 1 Produtor

Page 52: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.2 Sincronização Condicional Utilizando Semáforos

Semáforos contadores são bastante úteis quando aplicados em problemas

de sincronização condicional onde existem processos concorrentes alocando

recursos do mesmo tipo.

O semáforo é inicializado com o número total de recursos de um

determinado tipo, e, sempre que um processo deseja:

Alocar um recurso, executa um DOWN;

Liberar um recurso, executa um UP.

Se o semáforo contador ficar com valor igual a 0, significa que não existem

mais recursos a serem utilizados.

Page 53: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.3 Problema dos Filósofos

Page 54: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.3 Problema dos Filósofos

O algoritmo Filosofo_1 apresenta uma solução que não resolve o problema

totalmente, pois se todos os filósofos estiverem segurando apenas um palito

cada um, nenhum filósofo conseguirá comer (deadlock).

Existem várias soluções para resolver o problema dos filósofos sem a

ocorrência do deadlock:

Permitir que apenas 4 filósofos sentem a mesa simultaneamente;

Permitir que um filósofo pegue um palito apenas se o outro estiver

disponível;

Permitir que um filósofo ímpar pegue primeiro o seu palito da esquerda e

depois o da direita, enquanto um filósofo par pegue o palito da direita e,

em seguida, o da esquerda.

Page 55: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.3 Problema dos Filósofos – Versão 1

void main ()

{

Semaforo[] Palito = {1, 1, 1, 1, 1};

int I;

PARBEGIN

for (I=0; I<5; I++)

Filosofo (I);

PAREND

}

void Filosofo (int I)

{

do {

Pensando;

DOWN (Palito[I]);

DOWN (Palito[(I+1) % 5]);

Comendo;

UP (Palito[I]);

UP (Palito[(I+1) % 5]);

} while (true);

}

Page 56: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.7.3 Problema dos Filósofos – versão 2

void main ()

{

Semaforo[] Palito = {1, 1, 1, 1, 1};

Semaforo Lugares = 4;

int I;

PARBEGIN

for (I=0; I<5; I++)

Filosofo (I);

PAREND

}

void Filosofo (int I)

{

do {

Pensando;

DOWN (Lugares);

DOWN (Palito[I]);

DOWN (Palito[(I+1) % 5]);

Comendo;

UP (Palito[I]);

UP (Palito[(I+1) % 5]);

UP (Lugares);

} while (true);

}

Page 57: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.9 Troca de Mensagens

É um mecanismo de comunicação e sincronização entre processos.

Os processos cooperativos podem fazer uso de um buffer para trocar

mensagens através de duas rotinas:

SEND: permite o envio de uma mensagem para um processo receptor;

RECEIVE: possibilita o recebimento de uma mensagem enviada por um

processo transmissor.

O mecanismo de troca de mensagens exige que os processos envolvidos na

comunicação tenham suas execuções sincronizadas.

Page 58: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.9 Troca de Mensagens

Processotransmissor

Processoreceptor

SEND RECEIVE

Canal de comunicação

Page 59: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.9 Troca de Mensagens

A troca de mensagens entre processos pode ser implementada de duas

maneiras:

Comunicação direta: exige que, ao enviar ou receber uma mensagem, o

processo enderece explicitamente o nome do processo receptor ou

transmissor;

Comunicação indireta: utiliza uma área compartilhada, onde as

mensagens podem ser colocadas pelo processo transmissor e retiradas

pelo receptor.

Essa área é conhecida como mailbox ou port, e suas características, são

definidas no momento de sua criação.

Page 60: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.9 Troca de Mensagens

Comunicação direta:

Processo A Processo B

Page 61: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.9 Troca de Mensagens

Comunicação indireta:

Processo A Processo B

Mailboxou Port

Page 62: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.9 Troca de Mensagens

Existem três diferentes esquemas para implementar a sincronização entre

processos que trocam mensagens:

Garantir que um processo, ao enviar uma mensagem, permaneça

esperando até que o processo receptor a leia (rendezvous). Na mesma

condição, um processo deve aguardar o envio da mensagem pelo

transmissor;

Permitir que o processo transmissor não permaneça bloqueado

aguardando a leitura da mensagem pelo processo receptor;

O terceiro esquema implementa uma forma assíncrona de comunicação,

onde receptor e transmissor não permanecem aguardando o envio e o

recebimento de mensagens.

Page 63: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Deadlock

Page 64: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Deadlock

Deadlock é a situação em que um processo aguarda por um recurso que

nunca estará disponível ou um evento que não ocorrerá.

Essa situação é consequência, na maioria das vezes, do compartilhamento

de recursos, como dispositivos, arquivos e registros, entre processos

concorrentes em que a exclusão mútua é exigida.

O problema do deadlock existe em qualquer sistema multiprogramável; no

entanto as soluções implementadas devem considerar o tipo do sistema e o

impacto em seu desempenho.

Page 65: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Deadlock

Espera circular:

Recurso 2 Recurso 1

Processo A

Processo B

Processo Asolicita oRecurso 2

Recurso 1alocado aoProcesso A

Recurso 2alocado aoProcesso B

Processo Bsolicita oRecurso 1

Page 66: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Deadlock

Para que ocorra a situação de deadlock, quatro condições são necessárias

simultaneamente:

1. Exclusão mútua;

2. Espera por recurso;

3. Não-preempção;

4. Espera circular.

Page 67: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Prevenção de Deadlock

Para prevenir a ocorrência de deadlocks, é preciso garantir que uma das

quatro condições apresentadas, necessárias para sua existência, nunca se

satisfaça.

A ausência da primeira condição: nenhum processo terá que esperar para

ter acesso a um recurso, mesmo que já esteja sendo utilizado por outro

processo;

Para evitar a segunda condição, processos que já possuam recursos

garantidos não devem requisitar novos recursos;

Page 68: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Prevenção de Deadlock

A terceira condição pode ser evitada quando é permitido que um recurso

seja retirado de um processo no caso de outro processo necessitar do

mesmo recurso;

A última maneira de evitar um deadlock é excluir a possibilidade da quarta

condição (espera circular).

A prevenção de deadlocks evitando-se a ocorrência de qualquer uma das

quatro condições é bastante limitada.

É possível evitar o deadlock mesmo se todas as condições necessárias à

sua ocorrência estejam presentes.

Solução: algoritmo do banqueiro, proposto por Dijkstra (1965).

Page 69: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Detecção do Deadlock

É um mecanismo que determina, realmente, a existência da situação de

deadlock, permitindo identificar os recursos e processos envolvidos no

problema.

Para detectar deadlocks, os sistemas operacionais devem manter estruturas

de dados capazes de identificar cada recurso do sistema, o processo que o

está alocando e os processos que estão à espera da liberação do recurso.

Dependendo do tipo de sistema, o ciclo de busca por um deadlock pode

variar.

Page 70: INF201 - Fundamentos de Sistemas Operacionais - 2º Período · 2015. 10. 20. · Em sistemas com múltiplos processadores, a possibilidade do paralelismo na execução de instruções

Capítulo 7 - Sincronização e

Comunicação entre Processos

7.10 Correção do Deadlock

Após a detecção do deadlock, o sistema operacional deverá de alguma

forma corrigir o problema.

Uma possível solução: eliminar um ou mais processos envolvidos no

deadlock e desalocar os recursos já garantidos por eles, quebrando, assim, a

espera circular.

Os processos eliminados não tem como ser recuperados, porém outros

processos, que antes estavam em deadlock, poderão prosseguir a execução.

Uma solução menos drástica envolve a liberação de apenas alguns recursos

alocados aos processos para outros processos, até que o ciclo de espera

termine.