Please enable JavaScript.
Coggle requires JavaScript to display documents.
Coordenação entre tarefas - Coggle Diagram
Coordenação entre tarefas
Problemas
Soluções apresentadas não garante uso em aplicações de usuário em larga escala, por isso são pouca usadas na construção de aplicações
Injustiça:
Sem garantia de ordem no acesso a seção critica, dependendo do quantum e escalonamento, essa tarefa pode entrar e sair da sessão antes de outas tarefas que também tentam acessar
Dependência
: Na solução por alternância tarefas com interesse de usar a seção criticas podem ser impedidas por tarefas que não tem esse interesse naquele determinado momento
Ineficiência:
tarefas que aguardando acesso a zona critica testão o tempo todo uma condição, gastando recursos, o ideia seria suspender essa tarefa até a seção crítica ser liberada.
Sistemas que funcionam com tarefas complexas e interdependentes, cooperando entre si necessitam trocar informações, com isso surgem possíveis erros como diversas tarefas tentando acessar os mesmos recursos
Problemas da concorrência
Problemas gerados por conta de recursos compartilhados:
consistência de dados
e
estado do recurso acessado
condições de disputa
Quando os fluxos de execução de duas tarefas se entrelaçam podem haver possíveis condições de disputas de tarefas, podendo gerar erros graves como 2 tarefas de deposito em uma conta executando entrelaçadas pode acontecer de apenas 1 ser “concluído”, e o saldo ficar errado na conta, dificilmente conseguimos perceber esse problema analisando o código fonte, apenas analisando a execução.
Condições de Bernstein
São condições impostas para que a disputa de tarefas em paralelas acontecem saudavelmente, dado duas tarefas T1 e T2 as condições são:
T1 lendo e T2 escrevendo - T1 não lê as variáveis escritas por T2
T1 escrevendo e T2 escrevendo - T1 e T2 não escrevem nas mesmas variáveis
T1 lendo e T2 escrevendo - T1 não lê as variáveis escritas por T2
Uma aplicação concorrente
Situação: Em um banco duas pessoas querem fazer um deposito para a mesma conta ao mesmo tempo, no caso teríamos uma situação de concorrência pois existirão 2 tarefas acessando dados de forma concorrente
Seções críticas
Partes do código que acessam dados compartilhados, onde nessas seções criticas pode haver condições de disputa, é necessário garantir o entrelaçamento dessas regiões
Exclusão mútua
Um das formas de se implementar é o programador definir o inicio e final da seção critica. Soluções :
Espera Limitada
: aguarda acesso a seção critica em tempo limitado (sem inanição)
Independência de outras tarefas:
A decisão sobre uso de seção critica depende das tarefas que também tem o mesmo objetivo.
Exclusão mútua
: Somente uma tarefa na seção critica
Independência de fatores físicos:
Solução deve ser lógica, sem depender de outros atributos.
Soluções
Alternância de uso :
Cria uma variável turno, que indica de quem ou qual tarefa é a vez de entrar na seção crítica.
O algoritmo de Peterson
: garante de uma forma elegante a exclusão mútua entre duas tarefas e também o critério de espera limitada.
Inibição de interrupções :
Solução simples que impede as trocas de contexto em uma seção critica (tarefas nas seções criticas desabilitam interrupções que causam trocas de contexto), porem essa solução é pouco usado por conta de seus problemas gerados.
Operações atômicas :
Resolve o problema da variável atômica, permissão de teste e atribuição de um valor a uma variável de forma atômica (indivisível, sem trocas de contexto entre duas operações). Esse modelo é usado em SO's para controlar acesso a regiões criticas do núcleo
solução trivial :
Consiste em usar uma variável busy no intuito de indicar se a seção critica está livre ou não, porém essa solução não funciona ( algumas regras podem ser rompidas e algumas tarefas podem estar ao mesmo tempo na zona critica).