Baixe o app para aproveitar ainda mais
Prévia do material em texto
* * SISTEMAS OPERACIONAIS SIMONE MARKENSON Rio de Janeiro, maio de 2011 CONTEÚDO DA AULA * CONCEITOS FUNDAMENTAIS Condição de corrida Eventos que geram resultados não determinísticos Região crítica Parte do código que utiliza recursos compartilhados Exclusão Mútua Mecanismo de proteção a uma região crítica ENTRAR_RC() Código da região crítica SAIR_RC() * ENFIM... SOLUÇÕES! Soluções algorítmicas Soluções baseadas em hardware Soluções baseadas no Sistema Operacional * Soluções algorítmicas Processo 0 Processo 1 while vez = 1 { } while vez = 0 { } <RC> <RC> vez= 1 vez= 0 Espera ocupada Tempo de execução ditado pelo mais lento Viola regras de exclusão mútua * Soluções baseadas em hardware Inibir interrupções Problemas de programação Não funciona em sistemas multiprocessados Instruções TSL Espera ocupada Possibilidade de Starvation * Soluções baseadas no Sistema Operacional Monitores Depende da linguagem de programação Troca de Mensagens Utilizado em sistemas distribuídos Semáforos Bloqueia os processos que estão aguardando * SEMÁFOROS Primitivas do Sistema Operacional: wait (s) decrementa o semáforo s; se o valor ficar negativo o processo é bloqueado signal(s) incrementa o semáforo s; se o valor não ficar positivo o primeiro processo é desbloqueado. Implementação Região Crítica: wait(s) região crítica signal(s) * SIMULAÇÃO wait(s) região crítica signal(s) Valor inicial: s = 1 wait(s) decrementa o semáforo s; se o valor ficar negativo o processo é bloqueado. P0 P1 P2 Executa wait(s) s=0 Região Crítica Executa wait(s) s=-1 Executa wait(s) s=-2 BLOQUEIO BLOQUEIO * SIMULAÇÃO P0 P1 P2 Executa wait(s) s=0 Região Crítica Executa wait(s)s=-1 Executa wait(s) s=-2 BLOQUEIO BLOQUEIO Executa signal(s)s=-1 Desbloqueia P1 Região Crítica Executa signal(s)s=0 Desbloqueia P2 Região Crítica Executa signal(s) s=1 wait(s) região crítica signal(s) Valor inicial: s = 1 signal(s) incrementa o semáforo s; se o valor não ficar positivo o primeiro processo é desbloqueado. * Sincronização: produtor/consumidor BUFFER INFINITO Produtor (i) { while (T) { produz_item() wait(s) adiciona_item() signal(s) signal(n) } } Consumidor(i) { while (T) { wait(n) wait(s) remove_item() signal(s) consome_item() } } Valor inicial: s = _____ n = ______ * SIMULAÇÃO * Sincronização: produtor/consumidor BUFFER FINITO Produtor (i) { while (T) { produz_item() wait(v) wait(s) adiciona_item() signal(s) signal(n) } } Consumidor(i) { while (T) { wait(n) wait(s) remove_item() signal(s) consome_item() signal(v) } } Valor inicial: s = _____ n = ______ v= ______ *
Compartilhar