Buscar

SO Unidade 01 Gerenciamento de Processos Concorrência

Prévia do material em texto

Comunicação entre 
Processos
Sistemas Operacionais
Slides do Prof. Otacílio José Pereira / Marcelo Fontes Santana
Unidade 1 – Gerenciamento de Processos
Sincronismo e Comunicação 
entre processos
• Até então, vimos as os conceitos de unidades de 
execução 
– Processos e 
– Threads
• Concorrência
– Se existem mais de um processo ou de uma thread executando 
em uma máquina, temos Threads Concorrentes
Exemplo 1
• Imagine o spool de impressão de uma máquina
– Existe o processo do sistema operacional que 
executa verificando se há algo na fila para imprimir
– Existem os processos, editores de texto ou planilhas, 
que por vezes submetem os trabalhos para a 
impressão
– Desta forma
• Existem processos independentes (gerenciador do spoll e o 
editor de texto)
• Que executam independentes
• E precisam de trocar informações entre si
Sincronismo e Comunicação 
entre processos
• O exemplo a seguir explica de maneira genérica 
o cenário do spool de impressão 
Produtor e Consumidor
• Uma das formas de compreender a troca de 
informações entre processos é entender o 
cenário de Produto e Consumidor
• Produtor
– Parte da aplicação ou processo que gera os dados 
em uma área compartilhada
• Consumidor 
– Parta da aplicação ou processo que utiliza os dados 
armazenados na área compartilhada
Produtor e Consumidor
• Pontos de Atenção
– Algumas situações devem ser evitadas diante de um cenário 
Produtor e Consumidor
– O produtor ao gerar os dados não pode sobrescrever algum 
dado que ainda não foi processado pelo consumidor
– O consumidor não pode processar um dado que está sendo 
gerado pelo processo produtor
– Em geral, os processo devem sincronizar suas ações para 
evitar este problema
• O consumidor quando lê o dado, pode notificar o produtor para 
gerar o novo dado
• O produtor quando terminar a geração dos dados sinaliza que o 
dado já pode ser lido
Outros cenários de concorrência
• Vamos agora explorar os conceitos de 
– Exclusão Mútua 
– Seção Crítica
• Para isso, vale antes observarmos dois 
exemplos
– Processador de email
– Transação de saque em caixa eletrônico
Problema no Acesso Concorrente
• Problema
– Problema clássico do saque em conta 
bancária
– Imagine que um saque deve ser processado
– O código do saque é
• Leia Saldo Conta
• Diminua o Valor do Saque
• Salve Novo Saldo Conta
Problema no Acesso Concorrente
• Problema 2
– Imagine duas threads cada uma executando um saque
• A conta está com saldo de 500
• Cada thread deve sacar 500
– A primeira executa primeira linha
• Lê o saldo de 500
• Após isso ela deve parar pois chegou a vez de outro processo
– A segunda realiza por completo
• Lê também um saldo de 500
• Realiza o saque
– A primeira retoma 
• Com o saldo lido de 500
• Também realiza o saque
– Conclusão
• Com 500 em saldo
• Foi permitido sacar 1000
Exclusão Mútua
• O problema é que as threads estão acessando 
livremente dados que são compartilhados
• A forma de resolver o problema é
– Enquanto uma thread estiver processando um valor 
compartilhado
– Outras threads não podem realizar uma tarefa sobre estes 
valores
• No exemplo anterior, 
– Enquanto um saque estiver ocorrendo
– O outro saque fica esperando a finalização do primeiro saque
– Com o primeiro saque realizado, o valor do saldo estará 
consistente
Exclusão Mútua
• No exemplo que demos, a solução é que cada 
thread tenha um acesso exclusivo ao dado a 
processar
• Exclusão mútua
– Mecanismo garante um acesso exclusivo de uma 
thread a uma informação 
– E portanto impede que outras thread utilizem esta 
informação sendo processada
Seção crítica
• A parte do código, ou o conjunto de instruções 
que manipula a informação compartilhada entre 
os processos é denominada de Seção Crítica
• O que a exclusão mútua tem que garantir é que 
dois processos não podem estar executando 
sobre uma mesma seção crítica
Primitivas de Exclusão Mútua
• Para implementar a exclusão mútua dentro das seções 
críticas, é necessário empregarmos instruções 
especiais
• Primitivas de exclusão mútua
– São estas instruções especiais que “fecham” ou “abrem” o 
acesso a determinada informação
– Essas instruções devem encapsular as regiões críticas para 
que haja a exclusão mútua
– Em pseudocódigo, são basicamente duas operações:
• entradaExclusãoMutua()
• saidaExclusaoMutua()
• desabilitarInterrupções()
Primitivas de Exclusão Mútua
• Exemplo no código 1
• EntradaExclusaoMutua()
• LOAD mailCount
• ADD 1
• STORE mailCount
• SaidaExclusaoMutua()
• Neste caso a variável mailacount não pode ser acessada por outras 
threads
• Exemplo no código 2
• EntradaExclusaoMutua()
• Leia Saldo Conta
• Diminua o Valor do Saque
• Salve Novo Saldo Conta
• SaidaExclusaoMutua()
• Neste caso o saldo não pode ser acessado por outras threads
Implementação por Semáforos
• Uma das formas de se implementar a exclusão 
mútua é o mecanismo de semáforo
• Um semáforo é
– Uma variável protegida
– Só pode ser acessada por duas operações básicas
• Esperar : Para entrar na seção crítica
• Sinalizar : Para sair da seção crítica
– Estas operações são indivisíveis
Implementação por Semáforos
• A variável é inicializada com 1
– S = 1 , isto é o Semáforo está aberto
• A operação Esperar(S) executa o seguinte
– Se S > 0 
• S = S -1
– Senão
• A thread fica numa fila de espera
• Perceba que esta operação “Fecha o Semáforo”
– S = 0
Implementação por Semáforos
• Um código típico para o uso de semáforos é
– SaldoOcupado = Semaforo
– Esperar (SaldoOcupado) 
– Leia Saldo Conta
– Diminua o Valor do Saque
– Salve Novo Saldo Conta
– Sinalizar (SaldoOcupado)
• Quando mais de um processo tentar realizar 
saque, eles vão esperar no semáforo
Problemas da Exclusão Mútua
• Adiamento Indefinido
– Uma thread sempre é adiada em detrimento de outra
– Solução
• Organizar a estratégia da fila
• Deadlock
– Um processo tenta acessar a seção crítica de outro 
processo e este tenta acessar a seção crítica do 
primeiro
– Solução
• Escolher um processo para finalizar
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18

Continue navegando