Sincronização e comunicação entre processos - GESTÃO · segundo critérios de escalonamento...

22
1 Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Sincronização e comunicação entre processos Em um sistema multiprogramável com único processador, os processos alternam sua execução segundo critérios de escalonamento estabelecidos pelo S.O. Mesmo não havendo neste tipo de sistema um paralelismo na execução de instruções, uma aplicação concorrente pode obter melhoras no seu desempenho. 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. 2

Transcript of Sincronização e comunicação entre processos - GESTÃO · segundo critérios de escalonamento...

1

Sistemas OperacionaisProf. Esp. André Luís BeliniBacharel em Sistemas de InformaçõesMBA em Gestão Estratégica de Negócios

Sincronização e comunicação entre processos

• Em um sistema multiprogramável com únicoprocessador, os processos alternam sua execuçãosegundo critérios de escalonamento estabelecidos peloS.O.

• Mesmo não havendo neste tipo de sistema umparalelismo na execução de instruções, uma aplicaçãoconcorrente pode obter melhoras no seu desempenho.

• Em sistemas com múltiplos processadores, apossibilidade do paralelismo na execução de instruçõessomente estende as vantagens que a programaçãoconcorrente proporciona.

2

2

• É natural que processos de uma aplicação concorrentecompartilhem recursos do sistema, como arquivos,registros, dispositivos de E/S e áreas de memória.

• O compartilhamento de recursos entre processos podeocasionar situações indesejáveis, capazes até decomprometer a execução das aplicações.

• Para evitar esse tipo de problema, os processosconcorrentes devem ter suas execuções sincronizadas,a partir de mecanismos oferecidos pelo S.O., com oobjetivo de garantir o processamento correto dosprogramas.

3

Aplicações concorrentes

• Na maioria das vezes é necessário que processosconcorrentes se comuniquem. Mecanismos queproporcionam essa comunicação são variáveiscompartilhadas em memória principal ou troca demensagens.

• A imagem a seguir apresenta um exemplo onde doisprocessos concorrentes compartilham um buffer paratrocar informações através de operações de gravação eleitura.

• Neste exemplo, um processo só poderá gravar no buffercaso este não esteja cheio.

4

3

Sincronização e comunicação entre processos

5

Processogravador

Processoleitor

dado

Sincronização

leitura

gravação

Buffer

• Os mecanismos que garantem a comunicação entreprocessos concorrentes e o acesso a recursoscompartilhados são chamados mecanismos desincronização.

• No projeto de sistemas operacionais multiprogramáveis,é fundamental a implementação destes mecanismospara garantir a integridade e a confiabilidade naexecução de aplicações concorrentes.

6

4

Especificação de Concorrência em Programas

• A primeira notação para a especificação da concorrênciaem um programa foram os comandos FORK e JOIN.

• A função FORK duplica o processo atual dentro do S.O.O processo que inicialmente chamou a função FORK échamado de processo pai e o processo que foi criado, échamado de processo filho.

• Já a função JOIN permite que os processos sejamsincronizados, de acordo com critérios predefinidos.

7

Problemas no compartilhamento de recursos

• A sincronização entre processos concorrentes éfundamental para a confiabilidade dos sistemasmultiprogramáveis.

• Exclusão mútua: a solução mais simples para evitar osproblemas de compartilhamento é impedir que dois oumais processos acessem um mesmo recursosimultaneamente.

• Enquanto um processo estiver acessando um recursos,todos os demais deverão esperá-lo terminar. Esseprincípio é chamado de exclusão mútua.

8

5

• A exclusão mútua deve afetar apenas os processosconcorrentes somente quando um deles estiver fazendoacesso ao recurso de compartilhamento.

• A parte do código do programa onde é feito o acesso aorecurso compartilhado é denominada região crítica.

• Se for possível evitar que dois processos entrem emsuas regiões críticas ao mesmo tempo, os problemasdecorrentes do compartilhamento serão evitados.

9

• Problemas da exclusão mútua: a primeira situaçãoindesejada é conhecida como starvation ou esperaindefinida.

• Starvation é a situação em que o processo nuncaconsegue executar sua região crítica e,consequentemente, acessar o recurso compartilhado.

• Outra situação indesejada na implementação daexclusão mútua é aquela em que um processo fora dasua região crítica impede que outros processos entremnas suas próprias regiões críticas.

• Algumas soluções adotadas para corrigir essesproblemas envolvem software e hardware.

10

6

Soluções de Hardware

• A exclusão mútua pode ser implementada através demecanismos de hardware.

• Desabilitando interrupções: É a solução mais simples. Oprocesso desabilita todas as interrupções antes deentrar em sua região crítica e as reabilita após deixar.

• Como a mudança de contexto de processos só pode serrealizada através de interrupções, o processo que asdesabilitou terá acesso exclusivo garantido.

• Problemas dessa solução: compromete amultiprogramação, comprometimento do próprio S.O.Pode comprometer o mecanismo de clock do sistema,que utiliza interrupções

11

Instruções Test-and-set

• Muitos processadores possuem uma instrução demáquina especial que permite ler uma variável,armazenar seu conteúdo em uma outra área e atribuirum novo valor à mesma variável. Essa instrução échamada de test-and-set e tem como característica serexecutada sem interrupção, ou seja, trata-se de umainstrução indivisível.

• Dessa forma, é garantido que dois processos nãomanipulem uma variável compartilhada ao mesmotempo, possibilitando a implementação da exclusãomútua.

12

7

Soluções de Software

• Diversos algoritmos foram propostos na tentativa deimplementar a exclusão mútua através de soluções desoftware.

• As primeiras soluções tratavam apenas da exclusãomútua para dois processos.

13

Primeiro Algoritmo

• Nessa solução, um mecanismo de controle alterna aexecução das regiões críticas.

• Cada processo é representado por um procedimentoque possui um loop infinito (REPEAT/UNTIL), onde éfeito o acesso a um recurso por diversas vezes.

• A sequência de comandos, dentro do loop, é formadapor um protocolo de entrada, uma região crítica e umprotocolo de saída.

• A região crítica é representada por uma rotina, onde oacesso ao recurso realmente acontece.

14

8

Problemas do primeiro algoritmo

• Possui basicamente duas limitações, sendo uma delas,o próprio mecanismo de controle utilizado. O acesso aorecurso compartilhado só pode ser feito por doisprocessos e sempre de maneira alternada. Com isso,um processo que necessite utilizar o recurso mais vezesdo que outro, permanecerá grande parte do tempobloqueado.

• Outro problema é o fato de que se houver algumproblema com algum dos processos, de forma que avariável não seja alterada, o outro processopermanecerá indefinidamente bloqueado.

15

Segundo Algoritmo

16

• O problema principal do primeiro algoritmo é que ambosos processos trabalham com uma mesma variávelglobal, cujo conteúdo indica qual processo tem o direitode entrar na região crítica.

• Para evitar esta situação, o segundo algoritmo introduzuma variável para cada processo (CA e CB) que indicase o processo está ou não em sua região crítica.

• Neste caso, toda vez que um processo desejar entrarem sua região crítica a variável do outro processo étestada para verificar se o recurso está livre para uso.

9

Problemas do segundo algoritmo

• Se ocorrer algum problema fora da região crítica, o outroprocesso não ficará bloqueado.

• Caso um processo tenha um problema dentro da regiãocrítica ou antes de alterar a variável, o outro processopermanecerá indefinidamente bloqueado

• NÃO GARANTE A EXCLUSÃO MÚTUA

17

Terceiro Algoritmo

18

• O terceiro algoritmo tenta solucionar o problema dosegundo algoritmo, colocando a instrução de atribuiçãodas variáveis CA e CB antes do loop de teste

• Essa alteração resulta na garantia da exclusão mútua,porém introduz um novo problema, que é a possibilidadede bloqueio indefinido de ambos os processos. Caso osdois processos alterem as variáveis antes da execuçãoda instrução WHILE, nenhum dos processos poderáentrar em suas regiões críticas, como se o recurso jáestivesse alocado

10

Quarto Algoritmo

• O quarto algoritmo apresenta umaimplantação onde o processo altera o estadoda variável antes de entrar na sua regiãocrítica, porém existe a possibilidade reverteressa alteração.

• Porém, no caso dos tempos aleatórios serempróximos e a concorrência gerar umasituação onde os dois processos alterem asvariáveis para falso antes do término do loop,nenhum dos dois processos conseguiráexecutar sua região crítica.

19

Algoritmo de Dekker

• Foi a primeira solução de software que garantiu aexclusão mútua entre dois processos sem a incorrênciade outros problemas e foi proposta pelo matemáticoholandês T. Dekker, com base no primeiro e no quartoalgoritmo.

• Ponto negativo: alta complexidade para implementar

20

11

Algoritmo de Peterson

• O algoritmo de Peterson apresenta uma solução para oproblema da exclusão mútua entre dois processos quepode ser facilmente generalizada para o caso de Nprocessos.

• Similar ao terceiro algoritmo, além das variáveis CA eCB, introduz a variável Vez para resolver os conflitosgerados pela concorrência.

21

Sincronização Condicional

• Sincronização condicional é uma situação em que o acesso aorecurso compartilhado exige a sincronização de processosvinculada a uma condição de acesso.

• Um recurso pode não se encontrar pronto para uso devido auma condição específica.

• Então, o processo que deseja acessá-lo deverá permanecerbloqueado até que o recurso fique disponível

• Exemplo de sincronização condicional: comunicação entre doisprocessos através de operadores de gravação e leitura em um buffer.

• Nessa comunicação, enquanto um processo grava dados em um buffer, o outro lê os dados, concorrentemente. Os processosenvolvidos devem estar sincronizados a uma variável de condição, de forma que um processo não tente gravar dados em um buffer cheio ou realizar uma leitura num buffer vazio.

22

12

Semáforos

• O conceito de semáforos foi proposto por E.W. Dijkstra, em1965.

• Atualmente, a maioria das linguagens de programaçãodisponibiliza rotinas para uso de semáforos.

• Um semáforo é uma variável inteira, não negativa, que só podeser manipulada por duas instruções: DOWN e UP.

• As instruções DOWN e UP são indivisíveis, ou seja, não sofreminterrupções.

• A instrução UP incrementa uma unidade ao valor do semáforo,enquanto DOWN decrementa a variável.

• Como os valores negativos não podem ser atribuídos, ainstrução DOWN executada em um semáforo com valor 0 fazcom que o processo entre no estado de espera.

• Em geral, são implantadas no processador, que deve garantiressas condições.

23

Exclusão Mútua Utilizando Semáforos

• A exclusão mútua pode ser implementada através deum semáforo binário associado ao recursocompartilhado. A principal vantagem desta solução emrelação aos algoritmos anteriormente apresentados é anão-ocorrência da espera ocupada

• As instruções DOWN e UP funcionam como protocolosde entrada e saída.

• O semáforo fica associado a um recurso compartilhado,indicando quando o recurso está sendo acessado porum dos processos concorrentes. O valor do semáforoigual a 1 indica que nehum processo está utilizando orecurso, equanto o valor 0 indica que o recurso está emuso.

24

13

Utilização de Semáforo para exclusão mútua

25

Fila de esperade processos

Processo acessaa região crítica

Processo deseja entrarna região crítica

DOW

N (S=

0)DO

WN

(S>0)

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

Libera processoda fila de espera

Sincronização Condicional com Semáforos

• Um exemplo desse tipo de sincronização ocorre quandoum processo solicita uma operação de E/S.

• O pedido faz com que o processo execute umainstrução DOWN no semáforo associado ao evento efique em estado de espera, até que a operação sejacompletada.

• Quando a operação termina, a rotina de tratamento dainterrupção executa um UP, liberando o processo doestado de espera

26

14

Problema dos Filósofos

• O problema do filósofo é um exemplo de sincronizaçãode processos proposto por Dijkstra. Nesse problema, háuma mesa com cinco pratos e cinco garfos onde osfilósofos podem sentar, comer e pensar. Toda vez queum filósofo para de pensar e deseja comer é necessárioque ele utilize dois garfos, posicionados à sua direita e àsua esquerda.

• Se todos os filósofos estiverem segurando apenas umgarfo cada um, nenhum conseguirá comer. Essasituação é conhecida como deadlock

27

Problema do Barbeiro

• Nesse problema o barbeiro recebe clientes para cortarcabelo. Na barbearia há uma cadeira de barbeiro eapenas cinco cadeiras para clientes esperarem. Quandoum cliente chega, caso o barbeiro esteja trabalhando elese senta, se houver cadeira vazia, ou vai embora, setodas as cadeiras estiverem ocupadas. No caso de nãohaver nenhum cliente para atender, ele senta na cadeirae dorme até que um novo cliente apareça.

28

15

Monitores

• Monitores são mecanismos de sincronização de altonível que tornam mais simples o desenvolvimento deaplicações concorrentes.

• Monitores são considerados mecanismos de alto nível eestruturados em função de serem implementados pelocompilador.

• O monitor é formado por procedimentos e variáveisencapsulados dentro de um módulo. Sua característicamais importante é a implementação automática daexclusão mútua entre os procedimentos declarados

29

Estrutura do Monitor

30

Declaração devariáveis globais

Procedimentos

Fila de entrada

Inicializaçãode variáveis

Proc. 1

Proc. 2

Proc. n

Monito

r

16

Exclusão mútua utilizando monitores

• A implementação da exclusão mútua utilizandomonitores não é realizada diretamente peloprogramador.

• As regiões críticas devem ser definidas comoprocedimentos no monitor e o compilador seencarregará de garantir a exclusão mútua entre essesprocedimentos.

31

Sincronização Condicional Utilizando Monitores

• Através de variáveis especiais de condição é possível associar aexecução de um procedimento que faz parte do monitor a umadeterminada condição, garantindo a sincronização condicional.

• As variáveis especiais de condição são manipuladas porintermédio de duas instruções, conhecidas como WAIT eSIGNAL.

• A instrução WAIT faz com que o processo seja colocado emestado de espera, até que outro processo sinalize com ainstrução SIGNAL.

• É possível que vários processos estejam com suas execuçõessuspensas, aguardando a sinalização de diversas condições.

• O monitor organiza os processos em espera utilizando filasassociadas às condições de sincronização.

• A execução da instrução SIGNAL libera apenas um únicoprocesso da fila de espera.

32

17

Estrutura do monitor com variáveis de condição

33

Declaração devariáveis globais

Procedimentos

Fila de entrada

Inicializaçãode variáveis

Proc. 1

Proc. 2

Proc. n

Mo

nit

or

Filas de espera

Condição C1

Condição C2

Condição Cn

Troca de Mensagens

• Troca de mensagens é um mecanismo de comunicação esincronização entre processos.

• O S.O. possui um subsistema de mensagem que suportaesse mecanismo sem que haja necessidade do uso devariáveis compartilhadas.

• Para que haja a comunicação entre os processos deve existirum canal de comunicação, podendo ser um buffer ou um linkde uma rede de computadores.

• A troca de mensagens entre processos pode serimplementada de duas maneiras distintas, comunicaçãodireta e comunicação indireta.

• A comunicação direta entre dois processos exige que, aoenviar ou receber uma mensagem, o processo endereceexplicitamente o nome do processo receptor ou transmissor.

34

18

Transmissão de mensagem

35

Processotransmissor

Processoreceptor

SEND RECEIVE

Canal de comunicação

• A comunicação indireta entre processos utiliza uma áreacompartilhada, onde as mensagens podem sercolocadas pelo processo transmissor e retiradas peloreceptor.

• Esse tipo de buffer é conhecido como mailbox ou port, esuas características, como identificação e capacidadede armazenamento de mensagens, são definidas nomomento da criação.

36

19

Comunicação direta e indireta

37

Processo A Processo B

Processo A Processo B

Mailboxou Port

Deadlock

• Deadlock é a situação em que um processo aguarda porum processo que nunca estará disponível ou um eventoque não ocorrerá.

• Na maioria das vezes, é consequência docompartilhamento de recursos, com dispositivos,arquivos e registros, entre processos concorrentes emque a exclusão mútua é exigida.

38

20

Espera Circular - Deadlock

39

Recurso 2 Recurso 1

Processo A

Processo B

Processo Asolicita oRecurso 2

Recurso 1alocado aoProcesso A

Recurso 2alocado aoProcesso B

Processo Bsolicita oRecurso 1

Prevenção Deadlock

• A ausência da primeira condição (exclusão mútua)certamente acaba com o problema do deadlock.

• Para evitar a segunda condição (espera por recurso),processos que já possuam recursos garantidos nãodevem requisitar novos recursos.

• A terceira condição (não-preempção) pode ser evitadaquando é permitido que um recurso seja retirado de umprocesso no caso de outro processo necessitar domesmo recurso.

• Quarta condição (espera circular): uma forma é forçar oprocesso a ter apenas um recurso por vez. Caso oprocesso necessite de outro recurso, o recurso jáalocado deve ser liberado.

40

21

Detecção de Deadlock

• A detecção de deadlock é o mecanismo que determina,realmente, a existência da situação de deadlock,permitindo identificar os recursos e processosenvolvidos no problema.

• Para detectar deadlocks, os sistemas operacionaisdevem manter estruturas de dados capazes deidentificar cada recurso do sistema, o processo que oestá alocando e os processos que estão à espera daliberação do recurso.

41

Correção de Deadlock

• Após a detecção do deadlock, o sistema operacionaldeverá de alguma forma corrigir o problema.

• Uma solução bastante utilizada pela maioria dossistemas é, simplesmente, eliminar um ou maisprocessos envolvidos no deadlock e desalocar osrecursos já garantidos por eles, quebrando, assim, aespera circular.

42

22

Prof. André Luís Belini E-mail: [email protected]

Blog: http://profandreluisbelini.wordpress.com/