quarta-feira, 2 de abril de 2014

Prevenção Contra Bloqueio

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 10
Objetivo: Entender os métodos utilizados para prevenir que aconteça algum tipo de bloqueio entre os processos durante o compartilhamento de recursos.

1. Introdução

Um bloqueio entre processos acontece quando dois ou mais processos estão esperando a liberação de um recurso que está alocado para outro processo, que por sua vez está esperando a liberação do recurso que está travado para o primeiro processo. Nessa situação, se não houver a intervenção do sistema operacional, a liberação dos recursos não acontecerá.

Para que a situação de bloqueio seja caracterizada, as seguintes condições devem ser encontradas:

Um recurso está sendo utilizado por um processo;
Um processo que já possui um recurso, solicita outro recurso;
Apenas o processo que usa o recurso pode liberá-lo;
Uma seqüência circular de solicitação de um novo recurso e travamento do recurso em uso por uma série de processos.

2. Prevenção

A prevenção contra bloqueio deve ser feita de maneira a permitir que um processo aguarde a liberação de um recurso, contanto que essa espera não acarrete em uma dependência circular.

Uma maneira de evitar a dependência circular entre eles é utilizar uma ordenação por precedência dos recursos do computador. Um determinado recurso terá índice de ordem N, e se um processo está utilizando o recurso de ordem N, esse processo não poderá solicitar um outro recurso de ordem M, pois o novo recurso deveria ter sido solicitado anteriormente. Isto faz com que a utilização dos recursos seja feita obrigatoriamente de maneira linear e não circular.

Para evitar que aconteçam bloqueios na utilização dos recursos do computador, algumas estratégias devem ser adotadas:

Nenhum processo terá acesso exclusivo aos recursos;
A alocação de recursos computacionais por um processo só será permitida em modo seqüencial;
Pré-alocação de recursos no início da execução do processo. Assim, antes mesmo de precisar, o recurso já estará reservado para o processo;
A alocação de um recurso será por tempo determinado, assim, a probabilidade de o recurso estar livre é maior no sistema.

3. Tratamento de bloqueio

Quando não for possível evitar o surgimento de um bloqueio no computador, outras medidas devem ser tomadas para o tratamento do bloqueio:

Caso haja um bloqueio, os processos serão terminados, mas antes de serem finalizados, os dados serão salvos, os recursos reservados para cada processo serão liberados, e então os processos são finalizados. Após a finalização deles, são reiniciados, sendo que a inicialização dos processos será feita de forma seqüencial, evitando assim que dois processos repitam o bloqueio de recursos.

Detectar uma situação de bloqueio antes que ela aconteça é uma tarefa muito complexa, podendo até mesmo gerar “falsos avisos” de bloqueio. Na maioria dos casos não é possível fazer a diferenciação entre um processo que está aguardando a liberação de um recurso, e um outro processo que está bloqueando a liberação de um recurso.

4. Bloqueio Aberto

Existe um caso particular de bloqueio que não é causado pela espera de um recurso. Uma estratégia pouco utilizada para evitar uma situação de bloqueio é a seguinte: verificar se um recurso está sendo solicitado por mais de um processo. Nesse caso, se um processo solicitar um recurso, também irá verificar se outro processo já solicitou o mesmo recurso, caso haja um outro processo solicitando-o, o primeiro cederá o recurso e irá esperar a liberação do mesmo pelo outro processo.

Aqui o bloqueio pode acontecer e o recurso não estar sendo utilizado. Imagine dois processos X e Y, que fazem uma solicitação ao recurso R. Se a solicitação for feita simultaneamente (o que pode ocorrer em um sistema com vários processadores ou um processador com vários núcleos), os dois processos não irão utilizar o recurso R e ceder a utilização um ao outro. O recurso está liberado, podendo ser utilizado, mas os processos não conseguem acesso ao recurso.

Nenhum comentário:

Postar um comentário