Você está na página 1de 33

Universidade Federal do Par Instituto de Cincias Exatas e Naturais Faculdade de Computao

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

Comunicao entre Processos

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.

Comunicao de Processos Condies de Disputa (Race Conditions)

Condies de Disputa (Race Conditions): processos acessam recursos compartilhados concorrentemente.

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:

Comunicao de Processos Condies de Disputa (Race Conditions)


Spooler Diretrio de spool . Processo A

. 4 5 6 7 abc prog.c prog.n

prxima_vaga_livre = 7 prxima_vaga_livre = 7

Prximo arquivo a ser impresso

out = 4 in = 7

Processo B

. .

Prxima vaga livre

Coloca seu arquivo na vaga 7 e prxima_vaga_livre = 8

Comunicao de Processos Condies de Disputa (Race Conditions)


Processo A Spooler Diretrio de spool . . 4 5 abc prog.c

Checa Prxima_vaga_livre = 7

Prximo arquivo a ser impresso

6 prog.n 7 progB.c

out = 4 in = 8

Processo B

. .

Prxima vaga livre

Comunicao de Processos Condies de Disputa (Race Conditions)


Processo A Spooler Diretrio de spool . . 4 5 abc prog.c

Prximo arquivo a ser impresso

Coloca arquivo a ser prog.n Impresso na vaga 7 e faz 6 7 progA.c prxima_vaga_livre = 8

out = 4 in = 8

Processo B

. .

Prximo slot livre

Arquivo (progB.c) do Processo B nunca ser impresso!!!!!

Comunicao de Processos Regies Crticas

Como solucionar problemas de Condies de Disputa???

Proibir que mais de um processo leia ou escreva em recursos compartilhados concorrentemente (ao mesmo tempo)

Recursos compartilhados Regies Crticas.

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

Comunicao de Processos Excluso Mtua

Quatro condies para uma boa soluo:


1.

Dois

processos

no

podem

estar

simultaneamente em suas regies crticas;


2.

Nenhuma restrio deve ser feita com relao

CPU;
3.

Processos que no esto em regies crticas no

podem bloquear outros processos que desejam


utilizar regies crticas;
4.

Processos no podem esperar para sempre para


acessarem suas regies crticas.
9

Comunicao de Processos Excluso Mtua


A entra na regio crtica Processo A A sai da regio crtica

B tenta entrar na regio crtica - bloqueado

B entra na regio crtica

B sai da regio crtica

Processo B T1 T2 Tempo T3 T4
10

Solues

Excluso Mtua:

Espera Ocupada; Primitivas Sleep/Wakeup; Semforos; Monitores; Passagem de Mensagem.

11

Comunicao de Processos Excluso Mtua

Espera Ocupada (Busy Waiting):

Enquanto um processo estiver ocupado atualizando a memria compartilhada em sua regio crtica, nenhum outro processo cause problemas invadindo-a.

Algumas solues para Excluso Mtua com Espera Ocupada:

Desabilitar interrupes; Variveis de Impedimento (Lock Variables); Estrita Alternncia (Strict Alternation); Soluo de Peterson e Instruo TSL.

12

Comunicao de Processos Excluso Mtua

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

Comunicao de Processos Excluso Mtua

Variveis de Impedimento:

H uma nica varivel compartilhada inicialmente contendo o valor 0;

(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

Comunicao de Processos Excluso Mtua

Variveis de Impedimento - Problema:


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;

Viola condio 1 (Dois processos no podem estar simultaneamente em regies crticas).


15

Comunicao de Processos Excluso Mtua

Variveis Lock:

lock==0;

while(true){ while(lock!=0); //loop lock=1; critical_region(); lock=0; non-critical_region(); }

while(true){ while(lock!=0); //loop lock=1; critical_region(); lock=0; non-critical_region(); }

Processo A

Processo B
16

Comunicao de Processos Excluso Mtua

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();}

while (TRUE) { while (turn!=0); //loop critical_region(); turn = 1; noncritical region();}

(Processo A) turn 0

(Processo B) turn 1

17

Comunicao de Processos Excluso Mtua

Problema da Estrita Alternncia:


1.

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.

Comunicao de Processos Excluso Mtua

Problema da Estrita Alternncia:


5.

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

Comunicao de Processos Excluso Mtua

Soluo de Peterson:

Consiste em dois procedimentos escritos em ANSI C;

Antes de entrar em sua regio crtica, cada processo


chama enter_region com seu prprio nmero de

processo, 0 ou 1, como parmetro;

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

Comunicao de Processos Excluso Mtua

Soluo de Peterson

#define FALSE 0 #define TRUE 1 #define N 2 int turn; int interested[N];

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

Comunicao de Processos Excluso Mtua

Instruo TSL (Test and registradores do hardware;

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

enter_region: TSL REGISTER, LOCK CMP REGISTER, #0 JNE enter_region

RET
leave_region MOVE LOCK, #0 RET

| lock=0 22 | Retorna para o processo chamador

Solues

Excluso Mtua:

Espera Ocupada; Primitivas Sleep/Wakeup; Semforos; Monitores; Passagem de Mensagem.

23

Comunicao de Processos Primitivas Sleep/Wakeup

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

Comunicao de Processos Primitivas Sleep/Wakeup

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

Comunicao de Processos Primitivas Sleep/Wakeup

Problemas que podem ser solucionados com o uso dessas primitivas:

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

Comunicao de Processos Primitivas Sleep/Wakeup

Buffer: uma varivel count controla a quantidade de dados presente no buffer.

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

Comunicao de Processos Primitivas Sleep/Wakeup

Consumidor: Antes de retirar dados no buffer, o processo consumidor checa o

valor da varivel count para saber se ela


est com 0 (zero). Se est, o processo vai dormir, seno ele retira os dados do buffer e decrementa a varivel.

28

Comunicao de Processos Sincronizao Produtor-Consumidor


Sincronizao

gr

Processo gravador

av a o

r u t i le

Processo leitor

dado Buffer
29

Comunicao de Processos Primitivas Sleep/Wakeup


# define N 100 int count = 0; void consumer(void) { int item; while (TRUE) { if (count == 0) sleep(); item = remove_item(); count = count - 1; if (count == N - 1) wakeup(producer) consume_item(item); }

void producer(void) { int item;


while (TRUE) { item = produce_item(); if (count == N) sleep(); insert_item(item); count = count + 1; if (count == 1) wakeup(consumer) } }

30

Comunicao de Processos Primitivas Sleep/Wakeup

Problemas desta soluo: count irrestrita:

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

Comunicao de Processos Primitivas Sleep/Wakeup

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