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