Para que um
deadlock ocorra é necessário que as quatro condições que caracterizam um
deadlock sejam estabelecidas. Assegurando que pelo menos uma dessas condições
não se estabeleça, podemos nos prevenir contra a ocorrência de deadlocks. A
seguir vamos analisar as quatro condições detalhadamente.
- Exclusão Mútua. Deve estar presente em
recursos não compartilháveis, a exemplo disso uma impressora não pode ser
compartilhada simultaneamente por vários processos. Mas os recursos
compartilhados necessariamente não precisam ser acessados ao mesmo tempo
para ser considerado um recurso compartilhado. Porém a prevenção contra
deadlock não pode ser feita através da negação da exclusão mútua, pois
alguns recursos não podem ser compartilhados.
- Posse e espera. Para que essa condição não
seja satisfeita, devemos garantir que sempre que um processo solicitar um
recurso, ele não esteja em posse de nenhum outro recurso.Um protocolo que
pode ser usado requer que os processos solicitem e recebam todos os seus
recursos antes de começar a ser executado pelo sistema. Outro protocolo
permite que um processo solicite recursos apenas quando ele não tem
qualquer recurso. Um processo pode solicitar alguns recursos e usá-los.
Nessa condição quando ele estiver em posse dos recursos é necessário que
ele libere-os para solicitar os novos. Esses dois recursos apresentam duas
grandes desvantagens, a utilização dos recursos pode ser baixa, já que
podem ficar muito tempo sem serem utilizados e é possível que haja
inanição, já que um processo pode solicitar um recurso que seja muito
popular assim ele sempre estará alocado fazendo com que o processo que o
solicitou fique esperando indefinidamente.
- Inexistência de Preempção. Para garantir que essa
condição não ocorra pode ser usado o protocolo que se um processo estiver
em posse de alguns recursos e solicitar outros recursos que não possam ser
alocados, então os recursos que o processo estiver ocupando devem ser
liberados, ou seja o processo deve sofrer uma preempção. O processo será
reiniciado quando os recursos que ele tinha estiverem liberados e os adicionais
que ele havia solicitado também. Enquanto ele está esperando se algum
outro processo solicitar os recursos que o mesmo está ocupando seus
recursos podem ser interrompidos mas isso ocorre somente se outro processo
solicitar os recursos. Esse protocolo pode ser aplicado facilmente quando
os recursos cujo estado pode ser facilmente salvo e restaurado
posteriormente como os registradores da CPU e espaço de memória.
- Espera Circular. Uma maneira de garantir que
essa condição nunca ocorra é impor uma ordenação absoluta a todos os tipos
de recursos e requer que cada processo solicite recursos em uma ordem de
enumeração crescente. E também se várias instancias do mesmo tipo de
recurso forem necessárias, uma única solicitação deve ser emitida para
todas elas.