Algoritmo do Servidor Central
Em um sistema distríbuido que possui recursos compartilhados é necessário efetuar a distribuição e coordenação de acesso à eles, de forma a evitar inconsistências de dados, erros de processamento e bloqueios de recursos . Os recursos compartilhados também são chamados de seção crítica ou região crítica. Este é o mais simples para se obter exclusão mútua em um sistema distríbuido. Ele utiliza um Servidor Central para gerenciar e coordenar os acessos à seção critica. Todo processo P que quiser acessar a seção crítica deverá solicitar um token ao servidor central. O gerenciamento desse token é feito pelo servidor central através da troca de mensagens com os processos.
A troca de mensagens é centralizada no servidor, ou seja, ele recebe e responde mensagem de todos os processos, enquanto que os processos não se comunicam entre si. A dinâmica das mensagens funciona da seguinte forma:
- Processos enviam mensagens para o e aguardam resposta.
- As mensagens tem em sua composição um identificador de processo (Pi) e o conteúdo da mensagem, que pode ser: solicitação ou liberação da seção crítica.
Todo processo que receber resposta do servidor central recebe o e tem automaticamente liberação para acessar a seção crítica. É necessário uma administração dessas respostas para garantir a exclusão mútua. Para isso, o servidor central tem uma fila para armazenar as requisições dos processos, ela utiliza a lógica do "Primeiro a Entrar - Primeiro a Sair" (FIFO - First in First out).
A estrutura lógica desse modelo é composta pelo servidor central e seus canais de comunicação com cada processo, conforme mostrado abaixo.
Seja P, um conjunto de processos Pi, com 0 ≤ i < n, onde n é o número de processos participantes da computação, cada processo Pi que deseja entrar na seção critica deve obter um token de acesso. Existe somente um token para ser distribuído entre os processos requisitantes e seu gerenciamento pelo servidor central funciona da seguinte forma:
- Se o servidor estiver com o token, ele responde a primeira solicitação que estiver na sua fila de mensagens.
- Se o servidor não estiver com o token ele não responderá e irá enfileirar as solicitações na fila de mensagem.
- O servidor recebe o token de volta quando um processo envia uma mensagem de liberação de acesso.
Este algoritmo satisfaz as propriedades para a exclusão mútua. Porém, o ponto negativo é o atraso na resposta de mensagens, onde cada processo pode ficar indeterminadamente com o token e assim deixar as requisições muito tempo em espera.
Abaixo foi construído um modelo para exemplificar o funcionamento do algoritmo. Na barra horizontal você pode selecionar de 3 a 8 processos para participarem da computação. Para iniciar a simulação aperte PLAY, para avançar iterativamente aperte AVANÇAR e para reiniciar aperte RESET.
Ao clicar em RESET, o algoritmo será reiniciado e será gerado uma nova fila aleatória