Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Comunicação entre Processos, Notas de estudo de Eletrônica

Processos em um SO

Tipologia: Notas de estudo

2013

Compartilhado em 19/05/2013

synty-x-12
synty-x-12 🇧🇷

5

(4)

47 documentos

1 / 20

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Sistemas Operacionais I
Autor: Eduardo Henrique
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14

Pré-visualização parcial do texto

Baixe Comunicação entre Processos e outras Notas de estudo em PDF para Eletrônica, somente na Docsity!

Sistemas Operacionais I

Autor: Eduardo Henrique

 Processos paralelos podem ser:  Independentes:  Atividade de um não depende/interfere na do outro  Implementação simples  Concorrentes ou Cooperantes:  Atividade de um depende/interfere na atividade do outro  É necessário algum mecanismo de comunicação, que em geral envolve acesso a variáveis compartilhadas  O acesso simultâneo a uma mesma variável pode conduzir a resultados imprevisíveis (condição de corrida)  Solução: Exclusão mútua a regiões crítica

Comunicação entre processos

 Um processo pode ter uma ou mais regiões críticas e uma RC pode ter uma ou mais variáveis compartilhadas  Exclusão mútua a RC é um problema difícil!!!

Comunicação entre processos

 Condições para uma boa solução do problema de exclusão mútua:  Dois processos não podem estar simultaneamente na sua região crítica  Nenhuma suposição pode ser feita a respeito da velocidade relativa de processamento ou do número de CPUs  Nenhum processo parado fora da região crítica pode bloquear outros processos  Nenhum processo deve esperar indefinidamente para entrar em sua região crítica.

Comunicação entre processos

 Variáveis de Travamento

 Variável compartilhada que indica se a região está liberada ou não;  Valor é inicialmente 0;  Antes de entrar o processo verifica o valor;  Se for 0 ele seta para 1 e entra;  Se for 1, o processo espera;  Existe algum problema nesta solução?

 Estrita Alternância

 Variável indica de quem é a vez de entrar na RC;  Uso da espera ocupada, que deve ser evitada, em razão de consumir tempo de processador;  O que acontece se um dos processos for muito mais rápido do que outro?  Entrada estritamente alternada dos processos em suas regiões críticas.

 Soluções têm o inconveniente de usar a Espera

Ocupada nas suas implementações;

 As soluções apresentadas colocam o processo

em um loop até que seja permitido acessar a RC;

 Além de gastar processador pode levar a alguns

problemas:

 Problema da Prioridade Invertida;

 Busca por primitivas que bloqueiem a

continuação da execução do processo ao invés

de gastar processador;

 Primitivas SLEEP e WAKEUP:

 bloqueiam e acordam o processo respectivamente.

 Primitivas SLEEP e WAKEUP:

 O Problema do Produtor-Consumidor:

 Dois processos compartilham um buffer de tamanho fixo;  O produtor coloca informações no buffer e o consumidor, retira;  Caso o buffer esteja cheio, o produtor deve ser colocado para dormir;  Se o buffer estiver vazio, o consumidor deve dormir, sendo acordado quando o produtor colocar algo no buffer;  Pode levar a condições de corrida;  Variável (count) usada para controlar número de itens no buffer;  Número máximo de itens no buffer = N;

 O Problema do Produtor-Consumidor:

 Condições de corrida podem ocorrer por

causa do acesso irrestrito a Count;

 O que acontecerá se o Consumidor

interrompido logo após ter lido Count = 0?

 O produtor começa a rodar logo depois disso

colocando um item no buffer;

 Como Count era igual a 0 ele tenta acordar o

Consumidor que não está dormindo e sim

interrompido;

 Quando o Consumidor voltar a rodar aí sim

será bloqueado.

 O produtor vai produzir até encher o buffer e

também será bloqueado...

 Semáforos:

 Solução proposta por Dijkstra;

 Novo tipo de variável;

 Operações DOWN e UP atômicas;

 DOWN(s)

 Se s > 0, faz s = s – 1 e quem chamou DOWN(s) entra na RC  Se s = 0, RC está ocupada e quem chamou DOWN(s) é bloqueado, ficando numa fila associada ao semáforo ‘s’

 UP(s):

 faz s = s + 1; se houver processos bloqueados na fila associada a ‘s’, um deles é escolhido de forma justa e colocado no estado “pronto para rodar” para tentar DOWN(s) novamente.

Produtor

while true do Produz_item; down(empty); down(mutex); Coloca_mensagem; up(mutex); up(full); end;

Consumidor

while true do down(full); down(mutex); Remove_item; up(mutex); up(empty); Consome_item; end;

 O Problema do Produtor-Consumidor:

 Monitores (Hoare/1974, Hansen/1975)

 Coleção de procedimentos que operam sobre

variáveis compartilhadas por vários processos,

onde cada procedimento corresponde a uma

RC.

 Processos não podem ter acesso direto às estruturas de dados internas ao monitor.  É uma construção de linguagem de programação e não uma chamada ao sistema.

 Garantia de exclusão mútua: apenas um

processo pode estar ativo dentro do monitor a

cada instante.

 Um processo executa sua RC através de uma chamada a um procedimento do monitor.

/* RC do Produtor */

procedure produz (mensagem); if Count = n then WAIT(full); enter_item; count = count + 1; if count ==1 then SIGNAL(empty); end; /* produz */

/*RC do Consumidor */

procedure consome (mensagem); if count = 0 then WAIT(empty); remove_item; count = count - 1; if count = N-1 then SIGNAL(full); end; */ consome */

 Monitor ProdutorConsumidor

procedure produtor; while true do Produz mensagem; ProdutorConsumidor.produz (mensagem); end; end; /* produtor */

procedure consumidor; while true do ProdutorConsumidor.consome (mensagem); Consome mensagem; end; end; /* consumidor */

end; /* ProdutorConsumidor */