Please enable JavaScript.
Coggle requires JavaScript to display documents.
Coordenação entre tarefas, Vitor Neis da Silva - Coggle Diagram
Coordenação entre tarefas
O problema da concorrência
Quando duas ou mais tarefas acessam simultaneamente um recurso compartilhado, podem ocorrer problemas de consistência dos dados ou do estado do recurso acessado.
Condições de disputa
Caso o depósito da tarefa t1 execute integralmente antes ou depois do depósito efetuado por t2, teremos os diagramas de tempo da Figura
Condições de Bernstein
As condições de Bernstein não permitem que a memória seja compartilhada por diferentes processos. Para isso, é necessária alguma forma de assegurar a ordem de acesso ao recurso, como semáforos, barreiras ou alguma outra forma de sincronização
Uma aplicação concorrente
Consideremos que a função depositar faz parte de um sistema mais amplo de gestão de contas em um banco, que pode ser acessado simultaneamente por centenas ou milhares de usuários em agências e terminais distintos. Caso dois clientes em terminais diferentes tentem depositar valores na mesma conta ao mesmo tempo, existirão duas tarefas t1 e t2 acessando os dados da conta de forma concorrente
Seções críticas
De modo geral, seções críticas são todos os trechos de código que manipulam dados compartilhados onde podem ocorrer condições de disputa. Um programa pode ter várias seções críticas, relacionadas entre si ou não (caso manipulem dados compartilhados distintos).
Exclusão mútua
Diversos mecanismos podem ser definidos para garantir a exclusão mútua, impedindo o entrelaçamento de seções críticas. Todos eles exigem que o programador defina os limites (início e o final) de cada seção crítica.
Independência de outras tarefas
a decisão sobre o uso de uma seção crítica deve depender somente das tarefas que estão tentando entrar na mesma.
Independência de fatores físicos
a solução deve ser puramente lógica e não depender da velocidade de execução das tarefas, de temporizações, do número de processadores no sistema ou de outros fatores físicos.
Espera limitada
uma tarefa que aguarda acesso a uma seção crítica deve ter esse acesso garantido em um tempo finito, ou seja, não pode haver inanição.
Exclusão mútua
somente uma tarefa pode estar dentro da seção crítica em cada instante.
Uma solução simples para a implementação da exclusão mútua consiste em impedir as trocas de contexto dentro da seção crítica. Ao entrar em uma seção crítica, a tarefa desativa as interrupções que possam provocar trocas de contexto, e as reativa ao sair da seção crítica.
Uma solução trivial para o problema da seção crítica consiste em usar uma variável busy para indicar se a seção crítica está livre ou ocupada
Outra solução simples para a implementação da exclusão mútua consiste em definir uma variável turno, que indica de quem é a vez de entrar na seção crítica.
Os algoritmos de Dekker e de Peterson foram desenvolvidos para garantir a exclusão mútua entre duas tarefas, garantindo também o critério de espera limitada
O uso de uma variável busy para controlar a entrada em uma seção crítica é uma ideia interessante, que infelizmente não funciona porque o teste da variável busy e sua atribuição são feitos em momentos distintos do código, permitindo condições de disputa.
Problemas
O acesso concorrente de diversas tarefas aos mesmos recursos pode provocar problemas de consistência, as chamadas condições de disputa. Uma forma de eliminar esses problemas é forçar o acesso a esses recursos em exclusão mútua, ou seja, uma tarefa por vez.
Injustiça
a não ser na solução de alternância, não há garantia de ordem no acesso à seção crítica; dependendo da duração de quantum e da política de escalonamento, uma tarefa pode entrar e sair da seção crítica várias vezes, antes que outras tarefas consigam acessá-la.
Dependência
na solução por alternância, tarefas desejando acessar a seção crítica podem ser impedidas de fazê-lo por tarefas que não têm interessa na seção crítica naquele momento.
Ineficiência
as tarefas que aguardam o acesso a uma seção crítica ficam testando continuamente uma condição, consumindo tempo de processador sem necessidade. O procedimento adequado seria suspender essas tarefas até que a seção crítica solicitada seja liberada.
Vitor Neis da Silva