Sistemas de ArquivosTopComunicação entre ProcessosSincronização em Multiprocessadores

Sincronização em Multiprocessadores

Sincronização em Multiprocessadores

Multiprocessadores oferecem várias vantagens:

Paralelização de Unix exige muitas alterações:

Unix Tradicional

Reentrante e Nonpreemtive:

Recursos Partilhados

Recursos partilhados são controlados por flags locked e wanted:

Sleep Queue

Recursos são mapeados numa sleep queue:

Soluções: fila por recurso e turnstiles

Suporte a Multiprocessamento

A baixo nível

Kernels para Multiprocessadores

Três variantes:

Problemas com Sincronização em MPs

Mecanismo de Unix não funciona:

Semáforos

Usados nas primeiras implementações de Unix SMP (IBM/370 e AT&T 3B20A):

Aplicações de semáforos

Problemas com Semáforos

Comboios em Semáforos

Comboios: problema típico de semáforos.

Spin-Locks

Mutexes com busy-wait. Para operações rápidas:

void spin_lock(spinlock_t *s) {
  while (test_and_set(s) != 0) ;
}

Evitar tráfego desnecessário (máquinas antigas):

void spin_lock(spinlock_t *s) {
  while (test_and_set(s) != 0)
    while (*s != 0) ;
}

Variáveis de Condição

Associadas a um predicado baseado em dados partilhados.

Variáveis de Condição

Locks de Leitura Escrita

Usar rwlocks:

Locks de Leitura Escrita: Exclusivo

RWLocks: Comentários

Considerações

Outras Implementações


vitor@cos.ufrj.br

Sistemas de ArquivosTopComunicação entre ProcessosSincronização em Multiprocessadores