Beruflich Dokumente
Kultur Dokumente
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)
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
gr
Processo gravador
av a o
i tu le
ra
Processo leitor
dado Buffer
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
12
. .
next_free_slot = 7 next_free_slot = 7
Processo B
. .
13
14
. .
. .
checa next_free_slot = 7
Processo B
. .
. .
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.
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
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
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
Alternncia estrita
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
} }
35
36
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;
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
Produtor /Consumidor
Caso 1: Buffer finito Produtor (i) { while (T) { produz_item() wait(v) wait(s) adiciona_item() signal(s) signal(n) } } }
41 42
FIM