Escolar Documentos
Profissional Documentos
Cultura Documentos
SISTEMAS OPERACIONAIS
Aulas 6
Regiane Kawasaki
kawasaki@ufpa.br
Slides adaptados da Profa. Sarita Mazzini Bruschi (ICMC-USP) baseados no livro Sistemas Operacionais Modernos de A. Tanenbaum
Roteiro
Condio de Disputa
Regio Crtica Formas de Excluso Mtua
Problemas Clssicos
Comunicao de Processos
Processos precisam se comunicar. Processos competem por recursos. Trs aspectos importantes:
Como um processo passa informao para outro processo; Como garantir que processos no invadam espaos uns dos outros; Dependncia entre processos: sequncia adequada.
Recursos: memria, arquivos, impressoras, discos, variveis. Impresso: quando um processo deseja imprimir um arquivo, ele coloca o arquivo em um local especial chamado diretrio de spool (spooler). Um outro processo, chamado deamon de impresso, checa se existe algum arquivo a ser impresso. Se existe, esse arquivo impresso e retirado do spooler. Imagine dois processos que desejam imprimir um arquivo ao mesmo tempo...
4
Exemplo:
prxima_vaga_livre = 7 prxima_vaga_livre = 7
out = 4 in = 7
Processo B
. .
Checa Prxima_vaga_livre = 7
6 prog.n 7 progB.c
out = 4 in = 8
Processo B
. .
out = 4 in = 8
Processo B
. .
Proibir que mais de um processo leia ou escreva em recursos compartilhados concorrentemente (ao mesmo tempo)
Excluso mtua: modo de garantir que outros processos sejam impedidos de usar uma varivel ou um arquivo compartilhado que j esteja em uso por um processo.
8
Dois
processos
no
podem
estar
CPU;
3.
Processo B T1 T2 Tempo T3 T4
10
Solues
Excluso Mtua:
11
Enquanto um processo estiver ocupado atualizando a memria compartilhada em sua regio crtica, nenhum outro processo cause problemas invadindo-a.
Desabilitar interrupes; Variveis de Impedimento (Lock Variables); Estrita Alternncia (Strict Alternation); Soluo de Peterson e Instruo TSL.
12
Desabilitar interrupes:
Processo desabilita todas as suas interrupes ao entrar na regio crtica e habilita essas interrupes ao sair da regio crtica. Com as interrupes desabilitadas, a CPU no realiza chaveamento entre os processos.
Viola condio 2 (Nenhuma restrio deve ser feita com relao CPU).
No uma soluo segura, pois um processo pode no habilitar novamente suas interrupes e no ser finalizado.
Viola condio 4 (Processos no podem esperar para sempre para acessarem regies crticas).
13
Variveis de Impedimento:
(lock),
Para entrar em sua regio crtica, um processo testa se h impedimento, verificando o valor da varivel lock; Se a varivel est com valor 0 (zero) significa que nenhum processo est na regio crtica; Se a varivel est com valor 1 (um) significa que existe um processo na regio crtica; Apresenta o mesmo problema do diretrio de spool. 14
Suponha que um processo A leia a varivel lock com valor 0; Antes que o processo A posso alterar a varivel para o valor 1, um processo B escalonado e altera o valor de lock para 1; Quando o processo A for escalonado novamente, ele altera o valor de lock para 1, e ambos os processos esto na regio crtica;
Variveis Lock:
lock==0;
Processo A
Processo B
16
Estrita Alternncia:
Fragmentos de programa controlam o acesso s regies crticas; Varivel turn, inicialmente em 0, estabelece qual processo pode entrar na regio crtica.
while (TRUE){ while (turn!=1); //loop critical_region(); turn = 0; noncritical region();}
(Processo A) turn 0
(Processo B) turn 1
17
Suponha que o Processo B mais rpido e sai da regio crtica; Ambos os processos esto fora da regio crtica e turn com valor 0; O processo A termina antes de executar sua regio no crtica e retorna ao incio do loop; Como o turn est com valor zero, o processo A entra novamente na regio crtica, enquanto o processo B ainda est na regio no crtica;
2.
3.
4.
Ao sair da regio crtica, o processo A atribui o valor 1 varivel turn e entra na sua regio no 18 crtica.
Novamente ambos os processos esto na regio no crtica e a varivel turn est com valor 1; Quando o processo A tenta novamente entrar na regio crtica, no consegue, pois turn ainda est com valor 1;
6.
7.
Assim, o processo A fica bloqueado pelo processo B que NO est na sua regio crtica, violando a condio 3.
19
Soluo de Peterson:
Ao sair de sua regio crtica, o processo chama leave_region; Problema: Caso ambos os processos chamem quase que simultaneamente, o processo que armazenou por ltimo o que conta, o primeiro sobreposto e perdido.
20
Soluo de Peterson
void enter_region(int process) { int other; other = 1 - process; interested[process] = TRUE; turn = process; while (turn == process) && interested[other] == TRUE) ;
} void leave_region(int process) { interested[process] = FALSE; }
21
Set
Lock):
Utiliza
TSL RX, LOCK; (l o contedo de lock em RX, e armazena um valor diferente de zero (0) em lock operao indivisvel); Lock compartilhada
Se lock==0, ento regio crtica liberada. Se lock<>0, ento regio crtica ocupada.
| Copia lock para reg. e lock=1 | lock valia zero? | Se sim, entra na regio crtica, | Se no, continua no lao | Retorna para o processo chamador
RET
leave_region MOVE LOCK, #0 RET
Solues
Excluso Mtua:
23
Todas as solues apresentadas utilizam espera ocupada processos ficam em estado de espera (looping) at que possam utilizar a regio crtica:
Tempo
de processamento da CPU;
inesperadas.
Situaes
24
Para solucionar esse problema de espera, um par de primitivas Sleep e Wakeup utilizado. A primitiva Sleep uma chamada de sistema que bloqueia o processo que a chamou, ou seja, suspende a execuo de tal processo at que outro processo o acorde. A primitiva Wakeup uma chamada de sistema que acorda um determinado processo. Ambas as primitivas possuem dois parmetros: o processo sendo manipulado e um endereo de memria.
25
Problema do Produtor/Consumidor: dois processos compartilham um buffer de tamanho fixo. O processo produtor coloca dados no buffer e o processo consumidor retira dados do buffer. Problemas:
Produtor deseja colocar dados quando o buffer ainda est cheio; Consumidor deseja retirar dados quando o buffer est vazio; Soluo: colocar os processos para dormir, at que eles possam ser executados.
26
Produtor: Antes de colocar dados no buffer, o processo produtor checa o valor dessa varivel. Se a varivel est com valor mximo, o processo produtor colocado para dormir. Caso contrrio, o produtor coloca dados no buffer e o incrementa.
27
28
gr
Processo gravador
av a o
r u t i le
Processo leitor
dado Buffer
29
30
Acesso
varivel
O buffer est vazio e o consumidor acabou de checar a varivel count com valor 0; O escalonador decide que o processo produtor ser executado; Ento o processo produtor insere um item no buffer e incrementa a varivel count com valor 1; Imaginando que o processo consumidor est dormindo, o processo produtor envia um sinal de wakeup para o consumidor; No entanto, o processo consumidor no dormindo, e no recebe o sinal de wakeup. est
31
Assim que o processo consumidor executado novamente, a varivel count j tem o valor zero; Nesse instante, o consumidor colocado para dormir, pois acha que no existem informaes a serem lidas no buffer; Assim que o processo produtor acordar, ele insere outro item no buffer e volta a dormir. Ambos os processos dormem para sempre...
Soluo: bit de controle recebe um valor true quando um sinal enviado para um processo que no est dormindo. No entanto, no caso de vrios pares de processos, vrios bits devem ser criados sobrecarregando o sistema!!!!
32
Prxima Aula...
Semforos
Monitores Passagem de Mensagem
Problemas clssicos
33