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