Sie sind auf Seite 1von 7

Sistemas Operacionais

Concorrncia

Sumrio
Introduo Aplicaes concorrentes Especificao de concorrncia em programas Problemas de compartilhamento de recursos Excluso mtua Sincronizao condicional Semforos Monitores Troca de mensagens Deadlock
3

Concorrncia (1)
Programa executado por apenas um processo dito ser um programa seqencial
Existe apenas um fluxo de controle

Programa concorrente executado por diversos processos que cooperam entre si para realizao de uma tarefa (aplicao)
Existem vrios fluxos de controle Necessidade de interao para troca de informaes (sincronizao)

Emprego de termos:
Paralelismo real: s ocorre em mquina multiprocessadoras Pseudo Paralelismo ou Paralelismo aparente (concorrncia): mquinas monoprocessadoras Execuo simultnea versus estar em estado de execuo simultaneamente
4

Concorrncia (2)

Programao Concorrente (1)


Composta por um conjunto de processos seqenciais que se executam concorrentemente; Processos disputam recursos comuns:
P.ex. variveis, perifricos, etc.

Concorrncia disputa pelo uso do processador


Paralelismo execuo simultnea em mais de um processador
5

Um processo dito ser cooperante quando capaz de afetar, ou ser afetado, pela execuo do outro; Motivao da programao concorrente:
Aumento de desempenho: Permite a explorao do paralelismo real disponvel em mquinas multiprocessadoras Sobreposio de operaes de E/S com processamento Facilidade de desenvolvimento de aplicaes que possuem um paralelismo intrnsico.
6

Programao Concorrente (2)


Desvantagens da programao concorrente:
Programao complexa; Aos erros comunsse adicionam erros prprios ao modelo Diferenas de velocidade relativas de execuo dos processos Aspecto no-determinstico Difcil depurao.

Programao Concorrente (3)


Aplicaes concorrentes
Sincronizao e comunicao entre processos
Sincronizao

gr

Processo gravador

av a o

i tu le

ra

Processo leitor

dado Buffer

Prob. de Compartilhamento de Recursos (1)


PROGRAM Conta_Corrente; . . READ (Arq_Contas, Reg_Cliente); READLN (Valor_Dep_Ret); Reg_Cliente.Saldo := Reg_Cliente.Saldo + Valor_Dep_Ret; WRITE (Arq_Contas, Reg_Cliente); . . END.

Prob. de Compartilhamento de Recursos (2)


Processo A X := X + 1; Processo A LOAD x,Ra ADD 1,Ra STORE Ra,x Processo B X := X - 1; Processo B LOAD x,Rb SUB 1,Rb STORE Rb,x

10

Conceitos
Condio de corrida (race condition) Situao que ocorre quando vrios processos manipulam o mesmo conjunto de dados concorrentemente e o resultado depende da ordem em que os acessos so feitos Regio ou Seo Crtica Segmento de cdigo que implementa o acesso a um recurso compartilhado, ou seja, parte do cdigo no qual um processo realiza a alterao de um recurso compartilhado Excluso mtua Mecanismo que impede o uso simultneo de um recurso compartilhado
11

Sincronismo e Comunicao de Processos Race Conditions


Race Conditions: processos competem (disputam) pelos mesmos recursos; Ex.: Memria compartilhada, arquivos compartilhados, impressora compartilhada.

12

Sincronismo e Comunicao de Processos Race Conditions


Ex. impresso: quando um processo deseja imprimir um arquivo, ele coloca o arquivo em um local especial chamado spooler (tabela).
Um outro processo, chamado printer spooler verifica se existe algum arquivo a ser impresso. Se existir, esse arquivo impresso e retirado do spooler. Imagine dois processos que desejam ao mesmo tempo imprimir um arquivo...

Sincronismo e Comunicao de Processos - Race Conditions


Spooler fila de impresso (slots) Processo A

. .

next_free_slot = 7 next_free_slot = 7

4 abc 5 prog.c 6 prog.n 7

Prximo arquivo a ser impresso out = 4 in = 7 Prximo slot livre

Processo B

. .

13

Coloca seu arquivo no slot 7 e next_free_slot = 8

14

Sincronismo e Comunicao de Processos - Race Conditions


Spooler fila de impresso (slots) Processo A

Sincronismo e Comunicao de Processos - Race Conditions


Spooler fila de impresso (slots) Processo A

. .

. .

checa next_free_slot = 7

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

Prximo arquivo a ser impresso out = 4 in = 8 Prximo slot livre

Coloca arquivo a ser impresso no slot 7e next_free_slot = 8 Processo B

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

Prximo arquivo a ser impresso out = 4 in = 8 Prximo slot livre

Processo B

. .

. .

Processo B nunca receber sua impresso!!!!!


15 16

Sincronismo e Comunicao de Processos Regies Crticas


Como solucionar problemas de Race Conditions???
Proibir que mais de um processo leia ou escreva em recursos compartilhados ao mesmo tempo regies crticas; Excluso mtua: garantir que um processo no ter acesso uma regio crtica quando outro processo est utilizando essa regio;

Condies de Corrida
Produtor
int n= N; int buffer[N]; int in= 0, out= 0, counter= 0; void main() { while(TRUE) { while (counter== n); buffer[in]= produce(); in= ++in % n; counter++; } }

Consumidor
extern int n; extern int buffer[]; extern int in, out, counter; void main() { while(TRUE) { while (counter== 0); consume(buffer[out]); out= ++out % n; counter--; } }
18

17

Condies de Corrida
Produtor: counter++
registerA= counter registerA= registerA + 1 counter= registerA

Excluso Mtua
Forma de proibir os processos de ler ou escrever um determinado dado compartilhado, ao mesmo tempo.

Consumidor: counter-registerB= counter registerB= registerB - 1 counter= registerB

registerA= counter registerA= 5 produtor produtor registerA= registerA + 1 registerA= 6 consumidor registerB= counter registerB= 5 consumidor registerB= registerB - 1 registerB= 4 counter= 6 produtor counter= registerA counter= 4 consumidor counter= registerB
19 20

Regies ou Sees Crticas


Sees do cdigo de programas concorrentes onde dados compartilhados so manipulados.

Sincronismo e Comunicao de Processos Excluso Mtua


A entra na regio crtica Processo A B tenta entrar na regio crtica - bloqueado Processo B T1 T2 Tempo T3 T4
22

A sai da regio crtica

A
B entra na B sai da regio crtica regio crtica

21

Excluso mtua
1. Somente um processo por vez pode executar uma regio crtica (RC); 2. Um processo interrompido fora da RC no pode impedir o acesso por outro processo; 3. No pode haver nem deadlock nem starvation; 4. Quando no h processo executando uma RC, qualquer processo que solicitar acesso deve obt-lo imediatamente; 5. Um processo deve permanecer na RC por tempo finito; 6. No podemos fazer previses com base na velocidade relativa dos processos.
23

Condies para Execuo de Sees Crticas


Excluso mtua:
Apenas um processo pode executar uma seo crtica num dado instante

Progresso de execuo:
Um processo que no esteja executando uma seo crtica no pode impedir que outros o faam, ou seja, se nenhum processo est na seo crtica, ento um processo que queira execut-la no pode ser impedido

Espera limitada:
Um processo no pode ser impedido de executar uma seo crtica por tempo indeterminado
24

Espera Ocupada ou Busy Waiting


Teste contnuo de uma varivel at que ocorra uma mudana no seu valor; O busy waiting desperdia ciclos de processador, que outro processo poderia utilizar produtivamente.

Espera ocupada
Alternncia estrita

while (TRUE) { while (vez != 0); /*espera*/ seo_crtica(); vez = 1; seo_no_crtica(); }

while (TRUE) { while (vez != 1); /*espera*/ seo_crtica(); vez = 0; seo_no_crtica(); }

No boa idia quando um processo muito mais lento que o outro!


25 26

Produtor-consumidor (P-C)
Dois processos compartilham um buffer de tamanho fixo: um coloca informao e o outro retira

Problema produtor-consumidor
Relao produtor-consumidor uma situao bastante comum em Sistemas Operacionais; Servidor de impresso:

(1)

Processos usurios produzem impresses; Impresses so organizadas em uma fila a partir da qual um processo (consumidor) os l e envia para a impressora.

P1

produtor

buffer [N]

consumidor
P2 Pn Pc

assincronismo
27 28

Problema produtor-consumidor
Suposies:
Fila de impresso um buffer circular; Existncia de um ponteiro (in) que aponta uma posio onde a impresso deve ser inserida para aguardar o momento de ser efetivamente impressa; Existncia de um ponteiro (out) que aponta para a impresso que est sendo realizada. P1

(2)

Problema produtor-consumidor
Seqncia de operaes:

(3)

P1 vai imprimir; l o valor de in (5); perde processador; P2 ganha processador; l o valor de in (5); insere arquivo; atualiza in (6); P1 ganha processador; insere arquivo (5); atualiza in (7);

Estado incorreto:
Impresso de P1 perdida; Na posio 6 no h uma solicitao vlida de impresso. P1 P2

5 4
P2 in

2 1
out

Pc

7
in
29

4 3 2 1
out

Pc

30

Semforos
Mecanismo proposto por Dijkstra (1965); Semforo um tipo abstrato de dados: Um valor inteiro no negativo; Uma fila FIFO de processos; H apenas duas operaes atmicas:
P(Proberem, Down, Testar) V(Verhogen, Up, Incrementar)

Semforos
Ferramenta de sincronizao criada por Dijkstra (1965); So definidas duas operaes atmicas sobre uma varivel inteira do tipo semforo:
signal(S): S++; wait(S): while (S<= 0); S--;

Os semforos cuja utilizao pode acarretar busy waiting so conhecidos com spinlocks.
31 32

Semforos - Conceitos
Soluo proposta por Dijkstra em 1965 Principio bsico: um processo suspenso enquanto no obtm permisso para executar uma RC, e acordado atravs de um sinal Para enviar um sinal via semforo s o processo executa uma primitiva signal(s) e para receber um sinal via semforo s o processo executa um primitiva wait(s)
33

Semforos - Primitivas
O semforo deve ser inicializado com um valor no negativo; A operao wait decrementa o semforo; se o valor ficar negativo o processo bloqueado; A operao signal incrementa o semforo; se o valor no ficar positivo o processo bloqueado pela operacao wait desbloqueado.
34

Semforos
Utilizao de semforos
int sem; void main() { while(TRUE) { wait(sem);
seo crtica

signal(sem);
seo no crtica

} }

Operaes P (proberen) wait sleep lock test up

V (verhogen) signal wakeup unlock increment down

35

36

Semforos Implementao de semforos


struct sem { int value; processList list; } void wait(sem *s) { if (--s->value < 0) { enqueue(s->list); sleep(); } }

Semforos Binrios
Um semforo binrio um semforo com um valor inteiro que pode variar entre 0 e 1; Dependendo do hardware, um semforo binrio pode ser mais simples de implementar que um counting semaphore;

void signal(sem *s) { process *p; if(++s->value <= 0) { p= dequeue(s>list); wakeup(p); } }


37

Um counting semaphore pode ser implementado utilizando-se semforos binrios.

38

Produtor /Consumidor
Produtores gerando dados para um buffer; Consumidores retirando dados de um buffer; Somente um processo pode ter acesso ao buffer; 2 semforos: acesso ao buffer e sincronizao;

Produtor /Consumidor
Caso 1: Buffer infinito Produtor (i) { while (T) { produz_item() wait(s) adiciona_item() signal(s) signal(n) } } Consumidor(i) { while (T) { wait(n) wait(s) remove_item() signal(s) consome_item() } }
40

Qual o valor inicial de cada semforo?


39

Produtor /Consumidor
Caso 1: Buffer finito Produtor (i) { while (T) { produz_item() wait(v) wait(s) adiciona_item() signal(s) signal(n) } } }
41 42

Consumidor(i) { while (T) { wait(n) wait(s) remove_item() signal(s) signal(v) consome_item() }

FIM

Das könnte Ihnen auch gefallen