Introduzir o problema da seção críticas, cujas soluções podem ser utilizadas para garantir consistência no acesso a dados compartilhados
Apresentar soluções em software e hardware para o problema da seção crítica
Introduzir o conceito de transação atômica e descrever os mecanismos utilizados para garantir atomicidade
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Gerências de Processos: Sincronização
1. Sistemas Operacionais I
Gerências de Processos: Sincronização
Prof. Alexandre Duarte : http://alexandrend.com
Centro de Informática | Universidade Federal da Paraíba
Estes slides são baseados no material que acompanha o livro Operating
Systems Concepts de Silberschatz, Galvin and Gagne
2. Objetivos
Introduzir o problema da seç ão críticas, cujas
soluç ões podem ser utilizadas para garantir
consistência no acesso a dados compartilhados
Apresentar soluç ões em software e hardware para
o problema da seç ão crítica
Introduzir o conceito de transaç ão atô mica e
descrever os mecanismos utilizados para garantir
atomicidade
3. Antecendentes
Acesso concorrente a dados compartilhados
pode resultar em inconsistência nos dados
Para manter a consistência dos dados
precisamos de mecanismos para garantir
ordem na execuç ão de processos
cooperativos
4. Revisitando o problema do Produtor/
Consumidor
Suponha que desejamos alterar a soluç ão apresentada
anteriormente para o problema do Produtor/Consumidor
que preencha todas as posiç ões do buffer
Uma ideia seria utilizar uma variável inteira count para
contar o número de posiç ões ocupadas no buffer.
Inicialmente count recebe 0 e é incrementado sempre
que o produtor inserir algo no buffer e decrementado
sempre que o consumidor remover algo do buffer.
9. O problema da seção crítica
Considere um sistema composto por n processo [P0, P1, ... ,
Pn]
Cada um desses processos tem um segmento de código
denominado seção crítica em que o processo pode alterar
variáveis compartilhadas
Para evitar inconsistências nos dados compartilhados é
preciso garantir que dois desses processos jamais
executarão ao mesmo tempo código de suas seções
críticas
O problema da seção crítica consiste em elaborar um
protocolo que possibilite a cooperação entre os processos
e que garanta a consistência dos dados compartilhados
11. Requisitos de uma solução para o
problema da seção crítica
Exclusão mútua: se o processo Pi estáexecutando có digo de sua
seç ão crítica então nenhum outro processo pode estar executando
có digo de suas seç ões críticas
Progresso: Se nenhum processo estiver executando sua seç ão
crítica e alguns processos quiserem entrar em suas seç ões críticas,
só os processos que não estiverem executando suas seç ões
remanescentes poderão participar da decisão sobre qual processo
seráo pró ximo a entrar em sua seç ão crítica e essa seleç ão não
poderáser adiada indefinidamente
Espera limitada: Háum limite para o número de vezes que outros
processos podem entrar em suas seç ões críticas apó s um
processo ter feito uma solicitaç ão para entrar na sua seç ão crítica e
ter essa solicitaç ão atendida
Pode-se presumir que cada processo execute em uma velocidade
diferente de zero mas não se pode fazer qualquer suposiç ão sobre as
velocidades relativas dos n processos
12. Solução de Peterson
Utilizada apenas para pares de processos
Assume que as instruções LOAD e STORE são atô micas.
Os processos compartilham duas variáveis:
int turn;
boolean flag[2]
A variável turn indica de quem é a vez de entrar na seção
crítica.
O array flag é utilizado para indicar se um processo está
pronto ou não para entrar em sua seção crítica
flag[i] = true implica que o processo Pi estápronto!
14. Hardware de sincronização
Muitos sistemas oferecerem suporte em hardware para
controle de acesso a seções críticas
Processador único: poderia desabilitar interrupções
O có digo atualmente em execuç ão não seria interrompido
Geralmente essa abordagem é muito ineficiente em sistemas
com múltiplos núcleos/processadores
Um sistema operacional que funciona dessa forma não é escalável
Máquinas modernas oferecem instruções especiais de
hardware com execução atô mica
Atô mica = não interrompível
Testar e modificar o conteúdo de uma palavra de memó ria
Trocar os conteúdos de duas palavras de memó ria
15. Solução para o problema da seção crítica
utilizando locks
21. Semáforos
Ferramenta de sincronizaç ão baseada em duas
operaç ões simples
Semaphore S – variável inteira
Duas operaç ões para modificar o semáforo S: wait() e signal()
Originalmente P() e V()
Só podem ser acessados através de duas operaç ões
indivisíveis (atô micas)
22. Semáforos como uma ferramenta geral de
sincronização
Semáforo de contagem: um valor inteiro que pode variar em um domínio irrestrito
Semáforo binário: valor inteiro que só pode variar entre 0 e 1
Também conhecido como bloqueio mutex
Garante exclusão mútua
23. Implementação de Semáforos
É preciso garantir que dois processos não possam
executar wait () e signal () em um mesmo semáforo ao
mesmo tempo
Portanto, o có digo das operações wait e signal se torna
parte da seção crítica
Poderíamos então ter agora espera ocupada na
implementaç ão da seç ão crítica
Note que algumas aplicaç ões podem gastar bastante
tempo em suas seç ões críticas portanto estánão é
uma boa soluç ão
24. Implementação de Semáforos sem espera
ocupada
Associar uma fila de espera a cada semáforo
Cada entrada na fila tem dois itens:
valor (inteiro)
ponteiro para o pró ximo registro na fila
Duas operaç ões:
block: coloca o processo invocando a operaç ão na
fila de espera apropriada.
wakeup: remove um dos processos da fila de espera
e o coloca na fila de prontos
26. Deadlock e Starvation
Deadlock: dois ou mais processo esperam indefinidamente
por um evento que só pode ser causado por um dos
processos em espera
Sejam S e Q dois semáforos inicializados com 1
Starvation: bloqueio indefinido – um processo pode nunca ser
removido da fila de espera de um semáforo na qual ele está
bloqueado
Inversão de prioridade: Problema de escalonamento que
ocorre quando um processo de baixa prioridade bloqueia um
processo de prioridade mais alta
27. Problemas clássicos de sincronização
Problema do Buffer Limitado
Problema dos Leitores e Escritos
Problema do Jantar dos Filó sofos
28. Problema do buffer limitado
N buffers, cada um pode armazenar um item
Semáforo mutex inicializado com 1
Semáforo full inicializado com 0
Semáforo empty inicializado com N
31. Problema dos leitores e escritores
Um conjunto de dados é compartilhado entre um número de
processos concorrentes
Leitores – apenas leem os dados, não fazem qualquer atualizaç ão
Escritores – podem tanto ler quanto atualizar os dados
Problema
Permitir que múltiplos leitores possam acessar os dados ao mesmo
tempo.
Permitir que apenas um escrito tenha acesso aos dados compartilhados
em um determinado momento
Dados compartilhados
Conjunto de dados
Semáforo mutex inicializado com 1
Semáforo wrt inicializado com 1
Contador inteiro readcount inicializado com 0
36. Problemas com semáforos
Uso correto das operaç ões com semáforos
signal (mutex) …. wait (mutex)
wait (mutex) … wait (mutex)
Esquecer um wait (mutex) ou um signal (mutex)
(ou ambos)
37. Monitores
Uma abstraç ão de alto
nível que fornece um
mecanismo mais
conveniente para
sincronizaç ão de
processos
Apenas um processo
pode estar ativo em um
monitor a cada momento
39. Variáveis condicionais
condition x, y;
Duas operaç ões em uma variável condicional
x.wait () – um processo que invoca a operaç ão é
suspenso.
x.signal () – reinicia um processo que tenha
invocado um x.wait ()