qual é a diferença entre bloqueios de rotação e semáforos?

14

Quais são as diferenças básicas entre bloqueios de rotação e semáforos em ação?

    
por Renjith G 29.12.2010 / 07:42

3 respostas

13

Ambos gerenciam um recurso limitado. Vou primeiro descrever a diferença entre o semáforo binário (mutex) e o spin lock.

Os bloqueios de giro realizam uma espera ocupada - ou seja, ele continua executando o loop:

while (try_acquire_resource ());
...
release();

Ele executa bloqueio / desbloqueio muito leve, mas se o encadeamento de travamento for prejudicado por outro que tentará acessar o mesmo recurso, o segundo tentará simplesmente absolver o recurso até que ele fique sem CPU quanta.

Por outro lado, mutex se comporta mais como:

if (!try_lock()) {
    add_to_waiting_queue ();
    wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();   

Por isso, se o tópico tentar adquirir um recurso bloqueado, ele será suspenso até que ele seja disponibilizado. Bloquear / desbloquear é muito mais pesado, mas a espera é "livre" e "justa".

Semáforo é um bloqueio que pode ser usado várias vezes (conhecido da inicialização) - Por exemplo, três segmentos podem ocupar o recurso, mas não mais. É usado, por exemplo, no problema do produtor / consumidor ou, em geral, nas filas:

P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)
    
por 29.12.2010 / 17:20
2

Spinlocks são usados em um contexto de interrupção, em que dormir não é permitido. Eles pesquisam em um loop fechado, sem fazer mais nada até que o recurso seja adquirido. Usado principalmente em ISRs e mais seguro e eficiente.

Semáforos podem ser usados em um contexto de processo, onde dormir é ok.

    
por 29.05.2012 / 08:42
1

Aqui está o meu tiro rápido em uma resposta: um bloqueio de rotação e um semáforo binário (que gerencia um recurso que só pode ser usado por uma coisa) são quase idênticos. Sua distinção é que os bloqueios de giro gerenciam o código a ser executado enquanto os semáforos binários gerenciam algum tipo de recurso singular (por exemplo, tempo de cpu, saída de exibição)

Um semáforo comum, no entanto, é capaz de gerenciar vários segmentos acessando um recurso que pode ser dividido entre vários, mas é limitado (por exemplo, memória, largura de banda de rede)

Em resumo, é provável que um spin-lock continue perguntando a um semáforo se ele pode usar um recurso. (Imagine uma criança ter que usar o banheiro e esperar que outra pessoa termine.)

Fontes: Introdução à Programação de Sistemas, Sistemas Operacionais e Wikipédia

    
por 29.12.2010 / 10:02