Os algoritmos de
prevenção de deadlock previnem a ocorrência de deadlocks restringindo
como as solicitações são feitas. Essas restrições garantem que pelos
menos uma das condições necessárias para se estabelecer o deadlock não se
cumpra. Os possíveis efeitos colaterais podem ser a baixa utilização de
dispositivos e uma reduzida taxa de transferência no sistema.
Outro método para
evitar deadlocks é demandar mais informações sobre os recursos que serão
solicitados. Com esse conhecimento da sequência completa de solicitações pode
se tomar a decisão se o processo deve ou não esperar. Para que o sistema faça
isso ele precisa de um mapeamento completo para saber quais recursos estão
sendo ocupados, se estiverem ocupados informar qual processo os ocupa e também
quais recursos estão livres.
Existem vários
algoritmos que tratam esse método, o modelo mais simples e útil requer que cada
processo declare a quantidade máxima de recursos que ele pode ocupar de cada
tipo. Com essa informação já é possível que através de um algoritmo possa se
garantir que a condição de espera circular não se estabeleça impedindo assim
que se estabeleça um deadlock. O estado da alocação de recursos é definido
através da quantidade de recursos disponíveis e alocados pelas demandas máximas
dos processos.
Estado de
Segurança
Um estado é seguro
quando o sistema pode alocar recursos, em alguma ordem e evitar deadlock. O
sistema se encontra em segurança somente se existir uma sequência de segurança.
Um estado inseguro é um estado de deadlock, mas nem todos os estados inseguros
são deadlocks. Enquanto o estado for seguro o sistema pode evitar estados
inseguros. Através do comportamento dos processos é controlado os estados
inseguros. Um sistema pode passar de um estado seguro para um estado inseguro.
Através de
algoritmos de impedimento de deadlocks é necessário garantir que o sistema
sempre esteja em estado seguro. Sempre que um recurso for solicitado o sistema
deve analisar e verificar se o processo deve esperar ou ocupar o recurso. A
solicitação do processo só é atendida se a alocação deixa o sistema em estado
seguro.Mas dessa forma a utilização de recursos pode ser baixa por causa das
restrições, um processo pode ficar esperando muito tempo para receber um
determinado recurso, isso não ocorreria em uma situação oposta.
Algoritmo do Grafo
de Alocação de Recursos
O sistema deve ter
alocação de recursos com apenas uma instância de cada tipo de recurso, através
do mesmo todos os recursos devem ser solicitados a priori do sistema. Uma
aresta de requisição indica que o processo Pi pode solicitar o recurso Rj em
algum momento no futuro, quando o processo solicita o recurso essa aresta de
requisição é convertida em uma aresta de solicitação. Antes de atender qualquer
requisição verifica-se se ao inverter a aresta cria-se um ciclo, esse ciclo é
considerado um estado inseguro assim o processo é interrompido temporariamente.
Se não existir ciclo o estado é seguro então a solicitação pode ser
atendida.
Algoritmo do
Banqueiro
Esse nome foi
escolhido pois poderia ser usado em um sistema bancário para garantir que o
banco nunca alocasse seu dinheiro disponível de tal modo que não pudesse mais
satisfazer as necessidades de todos os seu clientes.
Quando um novo
processo entra no sistema ele deve declarar a quantidade máxima de instâncias
de cada tipo de recurso de que ele pode precisar. Essa quantidade não pode
exceder a capacidade máxima do sistema. Quando um processo solicitar
recursos o sistema fará a análise se ele estiver em estado seguro ele aloca os recursos
para determinado processo caso contrário o processo deve esperar.
Várias estruturas
de dados devem ser mantidas para implementar o algoritmo do banqueiro, um vetor
de um determinado tamanho indica a quantidade de recursos disponíveis de cada
tipo, uma matriz define a demanda máxima de cada processo, a alocação de cada
tipo correntemente alocada a cada processo, e também a necessidade de recursos
remanescentes a cada processo.
Nenhum comentário:
Postar um comentário