Вы находитесь на странице: 1из 21

SISTEMAS

OPERACIONAIS
Sincronizao entre Processos

Andreza Leite
andreza.leite@univasf.edu.br
Sincronizao

 Freqentemente, os processos precisam se comunicar


com outros processos.
 Isto ocorre quando os processos compartilham ou trocam
dados entre si.

 H a necessidade dessa comunicao ocorrer, de


preferncia, de uma forma bem estruturada e sem
interrupes.
 As interrupes limitam o desempenho e aumentam a
complexidade.
Sincronizao

 Trs tpicos sero abordados:

 Como um processo passa informao para um outro


processo.

 Como garantir que dois ou mais processos no invadam


uns aos outros.

 Como garantir uma seqncia adequada quando existe


uma dependncia entre processos.
Sincronizao
 Abordaremos diversos mecanismos para tratar essas
questes:
 Condies de disputa

 Regies crticas

 Excluso mtua

 Dormir e acordar

 Semforos
Sincronizao

 Em alguns SOs, processos podem compartilhar um


armazenamento comum, onde cada um capaz de ler e
escrever.

 Este armazenamento comum pode, por exemplo, estar na


memria principal, em um arquivo compartilhado entre
outros.
Comunicao e Sincronizao

 Exemplo de comunicao interprocessos: spool de


impresso.

 Quando um processo quer imprimir um arquivo, este


processo entra com o nome do arquivo em um diretrio de
spool especial.

 Um outro processo, verifica periodicamente se existe


algum arquivo para ser impresso, se houver, os imprime e
remove seus nomes do diretrio.
Comunicao e Sincronizao

 Suponha que o diretrio de spool tenha um grande


nmero de vagas numeradas 0, 1, 2,...

 Cada vaga capaz de conter um nome de arquivo.

 Suponha tambm que existem duas variveis


compartilhadas.

 Out  aponta para o prximo arquivo a ser impresso.


 In  Aponta para a prxima vaga livre do diretrio.
Sincronizao

 Em um dado instante, as vagas 4 a 6 esto preenchidas


(com os nomes dos arquivos na fila de impresso), e
In = 7.

 Problema  Quase simultaneamente, os processos A e B


decidem colocar um arquivo na fila de impresso.
Condies de Disputa

Dois processos que querem ter acesso simultneo a memria compartilhada.


Condies de Disputa

 Pode ocorrer o seguinte:


 O processo A l In e armazena o valor 7 na sua varivel local
chamada proxima_vaga_livre.
 Logo em seguida, ocorre uma interrupo do relgio e a CPU
decide que o processo A j executou o suficiente e ento
alterna para o processo B.
 O processo B tambm l In e obtm igualmente o valor 7. Da
mesma forma, B armazena o 7 na sua varivel local
prxima_vaga_livre.
 Neste momento, ambos os processos tem a informao de que a
vaga livre a 7.
 B prossegue sua execuo, armazenando o nome do seu
arquivo na vaga 7 e atualiza In para 8.
Condies de Disputa

 Em seguida, o processo A executa novamente de onde parou.


Verifica a varivel local proxima_vaga_livre, que igual a 7, e
ento escreve o nome do seu arquivo na vaga 7, apagando o
nome que B acabou de colocar l. O processo A atualiza o valor
de In para 8.

 Resultado  O processo B nunca ter seu arquivo impresso.

 Situaes como esta so chamadas de condies de disputa.


Regies Crticas

 A parte do programa que gera uma condio de


disputa chamada de regio crtica ou seo
crtica.

 Programas ou partes de programas que no geram


condies de disputa so chamados de cdigos
reentrante ou cdigo pblico.
Condies de Disputa

 Como evitar as condies de disputa?

 Prover algum meio de assegurar que outros processos


sejam impedidos de usar uma varivel ou um arquivo
compartilhado que j estiver em uso por outro processo
 Excluso mtua.
Regies Crticas

 Quatro condies necessrias para garantir a excluso


mtua:
1. Nunca dois processos podem estar simultaneamente em
suas regies crticas.
2. Nada pode ser afirmado sobre a velocidade ou sobre o
nmero de CPUs.
3. Nenhum processo executando fora de sua regio crtica
pode bloquear outros processos.
4. Nenhum processo deve esperar eternamente para entrar
em sua regio crtica.
Regies Crticas
 Comportamento desejado.

Excluso mtua usando regies crticas.


Excluso Mtua

 Alternativas para realizar excluso mtua com espera


ociosa.

 Desabilitar interrupes.
 Variveis de impedimento/trava (lock variables).
 Alternncia obrigatria.
 Soluo/Algoritmo de Peterson.
(Permite a dois ou mais processos ou subprocessos compartilharem
um recurso sem conflitos, utilizando apenas memria compartilhada
para a comunicao)
Dormir e Acordar
 A soluo de Peterson correta mas apresenta o
defeito de precisar da espera ociosa.
 Quando quer entrar na regio crtica um processo
verifica se sua entrada permitida. Se no for, ele
ficar em um lao at que possa entrar.
 Gasta tempo de CPU
 Observemos as primitivas de comunicao entre
processos que bloqueiam em vez de gastar tempo
de CPU quando no podem entrar em sua regio
crtica
 Uma das mais simples o par sleep e wakeup
Dormir e Acordar
 Sleep uma chamada de sistema que faz com que
o processo que a chama durma/ fique suspenso at
que outro processo o desperte.
 A chamada wakeup tem como parmetro o
processo a ser despertado
 Estas chamadas podem ainda podem ter outro
parmetro:
 um endereo de memria para equiparar os wakeups
a seus respectivos sleeps.
Problema do produtor- consumidor
Semforos
 Uma varivel inteira para contar o nmero de sinais de
acordar salvos para uso futuro.
 Este pode conter valor 0 (nenhum sinal de acordar salvo) ou
valor positivo (um ou mais sinais de acordar salvos)
 Duas operaes (generalizaes de sleep e wakeup)
 Down decrementa (gasta um sinal de acordar), se o valor do
semforo maior que 0. Seno ser posto pra dormir.
 Up incrementa o valor do semforo e um processo que esteja
dormindo pode ser escolhido para terminar o seu down.
 As operaes sobre os semforos so atmicas e indivisvel.
Problema do produtor- consumidor