quarta-feira, 2 de abril de 2014

Sincronização dos Recursos

RICARDO DE MAGALHÃES SIMÕES - Sobre o Autor
Doutorando em Engenharia Elétrica, Mestre em Informática (2006) e Bacharel em Ciência da Computação (2003), todos pela Universidade Federal do Espírito Santo. Atualmente, Professor Substituto de Informática no CEFET-ES, Professor de Programação I no Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas à Distância no CEFET- ES, professor de Sistemas Operacionais pela ESAB. Tem experiência na área de Ciência da Computação, com ênfase em Desenvolvimento de Algorítmos, Educação de Informática para estudantes do Ensino Médio, atuando principalmente nos seguintes temas: Informática Básica, Programação nas linguagem C/C++/C#, Java, Pascal.
Página pessoal:
Curriculo Lattes::

UNIDADE 9
Objetivo: Conhecer o funcionamento do mecanismo de sincronização entre os processos na utilização dos recursos do computador.


1. Introdução

A sincronização dos recursos do computador é uma tarefa muito importante, realizada pelos
sistemas operacionais multitarefas e é feita em duas áreas distintas:

Sincronização dos Dados: nesse caso o objetivo é manter os dados do computador em perfeita integridade;

Sincronização dos Processos: refere-se à sincronização da execução dos processos, com o objetivo de se evitar o conflito na utilização dos recursos do computador;

A sincronização dos processos só faz sentido em sistemas multitarefa, em que a cada instante, vários processos poderão estar em execução. O trabalho do sistema operacional será garantir que cada processo seja concluído corretamente. Aqui, o conceito de processo será aplicado tanto ao processo em si quanto à thread, ou seja, a sincronização de processos e sincronização de threads serão tratados de maneiras unificadas, como Sincronização de Processos.

Para realizar a sincronização algumas medidas podem ser tomadas: a utilização de Barreiras, Travas, Semáforos, Comunicação e várias outras. Algumas dessas medidas são implementadas no código dos programas, como as Barreiras, e outras medidas são realizadas no sistema operacional, as Travas.

2. Controle da Sincronização
Como foi mencionado, para realizar a sincronização pode-se utilizar Barreiras, Travas e Semáforos, entre outras medidas.

As Barreiras são criadas e gerenciadas pelos desenvolvedores de programas aplicativos. Dentro das instruções desses programas, deve-se incluir uma instrução de criação de Barreira. Quando um processo executa tal instrução, entra em estado de Espera (ou Bloqueio), e permanece assim até que todos os processos pertencentes ao mesmo programa também executem a instrução de Barreira. Com isso consegue-se colocar todos os processos no mesmo ponto de execução do programa.

Semáforos podem ser utilizados tanto pelos programas quanto pelo sistema operacional. São variáveis de controle, que indicam se um determinado recurso pode ser utilizado ou não. O modo mais frequente de controle é a utilização de um contador no semáforo. O contador indica a quantidade de processos que podem compartilhar o recurso, quando o limite é alcançado, nenhum processo a mais pode utilizar o mesmo recurso.

Barreiras e Semáforos geralmente são utilizados para lidar com situações em que vários processos podem (ou devem) compartilhar um mesmo recurso. Nos casos, nos quais um recurso deve ser utilizado exclusivamente por apenas um processo é utilizada a Trava. Alguns sistemas implementam Travas Simples, que impedem a utilização do recurso por outro processo, e outros sistemas implementam Travas Especiais, que emitem um sinal (aviso de erro) quando um processo tenta acessar um recurso já em uso. Existe também a possibilidade de se ter uma Trava Compartilhada por vários processos, mas nesse caso, o acesso ao recurso fica limitado apenas à leitura dos dados contidos nele.

Para o correto funcionamento dos métodos de sincronização, o processador deve estar preparado para permitir que os processos consigam compartilhar um recurso até o limite estabelecido, sem que haja conflito no controle de sincronia. Por exemplo, em um sistema de Trava, se ela estiver aberta significa que um processo poderá acessar o recurso. Se em um mesmo instante dois processos tentarem utilizar o recurso, os dois conseguirão acesso ao recurso e com certeza isso resultará em má utilização dele (imagine uma impressora imprimindo simultaneamente dois documentos diferentes).

Para evitar essa falha, os processadores devem possuir mecanismos de verificação e ativação da sincronia quase instantâneos, ou no mínimo, não conflitante. Esses mecanismos no processador são instruções que realizarão a sincronização de maneira correta, as instruções serão do tipo “verificar e travar recurso”, uma mesma instrução faz a verificação e, se possível, o travamento do recurso. Esse mecanismo só é válido em computadores com um processador (podendo o processador ter vários núcleos). Em computadores com vários processadores, o controle da sincronização é mais complexo, havendo um maior número de considerações a serem feitas.

A etapa de efetivação do sincronismo é muito importante, o tempo que ela demora não deve em hipótese alguma ser demorado. A efetivação da sincronização deve acontecer obrigatoriamente antes de o processador executar mais uma instrução de outro processo (ou do mesmo processo). A etapa de liberação de uma sincronização também deve ser tratado de maneira adequada, pois em um ambiente de execução de múltiplos processos, para haver a real otimização da utilização dos recursos, os processos devem ter acesso aos mesmos assim que eles não estiverem em uso.

3. Granularidade da Sincronização

A granularidade de uma sincronização é a medida da quantidade de dados que estão sendo utilizados pelos processos envolvidos no sincronismo. O tamanho da granularidade irá influenciar diretamente no desempenho do sistema, pois realizar o compartilhamento de uma grande área de dados por vários processos exigirá um maior controle no processo de alteração desses dados. Por outro lado, realizar vários compartilhamentos em pequenas áreas de dados pode gerar uma situação de Bloqueio de Processo (DeadLock), em que um processo A está com uma área X travada e esperando o acesso a área Y, e um processo B está com a área Y travada esperando o acesso a área X.

Para evitar essas situações, o compartilhamento de informação e sincronização dos processos deve ser feito de maneira planejada e para casos estritamente necessários.

Nenhum comentário:

Postar um comentário