27.11.2012 Views

Respostas dos Exercícios - Sincronização de Processos - CAFW

Respostas dos Exercícios - Sincronização de Processos - CAFW

Respostas dos Exercícios - Sincronização de Processos - CAFW

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

8 – O que é <strong>de</strong>adlock, quais as condições para obtê-lo e quais as soluções possíveis?<br />

Deadlock é a situação em que um processo aguarda por um recurso que nunca estará<br />

disponível ou um evento que não ocorrerá. Para que ocorra a situação <strong>de</strong> <strong>de</strong>adlock, quatro<br />

condições são necessárias simultaneamente:<br />

exclusão mútua: cada recurso só po<strong>de</strong> estar alocado a um único processo em um<br />

<strong>de</strong>terminado instante;<br />

espera por recurso: um processo, além <strong>dos</strong> recursos já aloca<strong>dos</strong>, po<strong>de</strong> estar esperando por<br />

outros recursos;<br />

não-preempção: um recurso não po<strong>de</strong> ser liberado <strong>de</strong> um processo só porque outros<br />

processos <strong>de</strong>sejam o mesmo recurso;<br />

espera circular: um processo po<strong>de</strong> ter <strong>de</strong> esperar por um recurso alocado a outro processo e<br />

vice-versa.<br />

Para prevenir a ocorrência <strong>de</strong> <strong>de</strong>adlocks, é preciso garantir que uma das quatro condições<br />

apresentadas, necessárias para sua existência, nunca se satisfaça. A prevenção <strong>de</strong> <strong>de</strong>adlocks<br />

evitando-se a ocorrência <strong>de</strong> qualquer uma das quatro condições é bastante limitada e, por isso,<br />

na prática não é utilizada. Uma solução conhecida como Algoritmo do Banqueiro<br />

(implementada com a presença das quatro condições) também possui várias limitações. A<br />

maior <strong>de</strong>las é a necessida<strong>de</strong> <strong>de</strong> um número fixo <strong>de</strong> processos ativos e <strong>de</strong> recursos disponíveis<br />

no sistema. Essa limitação impe<strong>de</strong> que a solução seja implementada na prática, pois é muito<br />

difícil prever o número <strong>de</strong> usuários no sistema e o número <strong>de</strong> recursos disponíveis.<br />

9 – Em uma aplicação concorrente que controla saldo bancário em contas-correntes,<br />

dois processos compartilham uma região <strong>de</strong> memória on<strong>de</strong> estão armazena<strong>dos</strong> os<br />

sal<strong>dos</strong> <strong>dos</strong> clientes A e B. Os processos executam concorrentemente os seguintes<br />

passos:<br />

Processo 1 (Cliente A)<br />

Processo 2 (Cliente B)<br />

/* saque em A */ /*saque em A */<br />

1a. x := saldo_do_cliente_A; 2a. y := saldo_do_cliente_A;<br />

1b. x := x - 200; 2b. y := y - 100;<br />

1c. saldo_do_cliente_A := x; 2c. saldo_do_cliente_A := y;<br />

/* <strong>de</strong>posito em B */ /* <strong>de</strong>posito em B */<br />

1d. x := saldo_do_cliente_B; 2d. y := saldo_do_cliente_B;<br />

1e. x := x + 100; 2e. y := y + 200;<br />

1f. saldo_do_cliente_B := x; 2f. saldo_do_cliente_B := y;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!