Exclusão Mútua Distribuída
Pretende-se implementar um algoritmo de exclusão mútua distribuído, ou seja sem nenhum controlador centralizado. O mesmo será baseado no conceito token ring. As diversas unidades funcionais estão ligadas através de um anel de comunicação onde circula uma marca. Sempre que uma unidade pretende entrar na zona crítica deverá retirar esta marca do anel, devendo a mesma ser propagada para a unidade seguinte quando não for necessária. A seguinte imagem apresenta um esquema da rede de Petri que modela este problema, para o caso em que temos três unidades funcionais, estando uma delas detalhada.
Cada unidade é constituída por dois módulos. O primeiro, cuja rede se encontra detalhada, representa o componente que pretende usar o recurso crítico. Tem três estados possíveis: Idle, quando está a realizar tarefas que não envolvem o recurso crítico; Waiting, quando está à espera de usar o recurso crítico; e Critical, quando está na zona de exclusão mútua. O segundo é o controlador que irá implementar o protocolo, e cuja especificação é o objectivo deste projecto.
A comunicação entre os dois componentes é feita assincronamente usando os lugares Req (request), Prm (permission), e Rdy (ready). O primeiro é usado para sinalizar a vontade de usar o recurso crítico. O segundo é usado pelo controlador para dar autorização ao outro componente para entrar na zona crítica, e o último serve para este indicar que já terminou a utilização do recurso crítico. O controlador também tem acesso ao anel onde circula a marca. Sempre que deseje, pode retirar a mesma da sua porta de entrada (Tok) ou transferi-la para a unidade funcional que lhe sucede no anel.
Algumas das propriedades que a solução deve verificar são:
- Não existem duas unidades simultaneamente na zona crítica.
- Não existem deadlocks.
- Não existe mais do que uma marca a circular no anel.
- Qualquer unidade que pretenda utilizar o recurso crítico poderá eventualmente fazê-lo.
- Uma unidade não poderá utilizar o recurso crítico duas vezes seguidas se outra unidade também o pretender utilizar.
- A marca não deve circular desnecessariamente pelo anel. Só o deverá fazer se alguma unidade requisitar o acesso à zona crítica.
Para poder satisfazer esta última propriedade poderá ser necessário adicionar um segundo anel de comunicação (com sentido inverso) onde circulam pedidos para libertar a marca.