Vous êtes sur la page 1sur 7

1 Por que os Algortmos de espera ocupada so, grande parte das vezes, ineficientes?

RESPOSTA: Os algortmos de espera ocupada so ineficientes por que eles tomam a CPU
para fazer verificaes de sua varivel.

2 Os semforos so implementados para garantir quais propriedades necessrias?


RESPOSTA: Os semforos, quando implementados, garantem EXCLUSO MTUA e
SINCRONIZAO CONDICIONAL.

3 Como funciona o semforo e como implementado ?


RESPOSTA: O semforo uma varivel compartilhada por todos os processos, acessvel a
todos eles, composta por duas instrues atmicas P(s) e V(s).
P(s) < await (s > 0) s = s 1; >
V(s) < s = s + 1 >

4 Quais so os tipos de semforo e explique cada um.


RESPOSTA: | 1 Semforo Genrico | 2 Semforo Binrio | Esses so os dois tipos de
semforos, o primeiro contm qualquer varivel NO NULA e o segundo pode conter
apenas Zeros (0) e Uns (1).

5 Implemente EXCLUSO MTUA com locks e com semforos.


RESPOSTA:
COM LOCK
1. bool lock false;
2. process_1 {
3. while(true){
4. <await (!lock) lock = true;>
5. seo crtica;
6. lock = false;
7. }
8. }
9. process_2 {
10. while(true){
11. <await(!lock) lock = true;>
12. seo crtica
13. lock = false;
14. }
15. }
COM SEMFORO
1. sem mutex = 1;
2. process [i=1 to M]{
3. while(true){
4. P(mutex);
5. seo crtica;
6. V(mutex);
7. }
8. }
6 Implemente a sinalizao de eventos com semforos
RESPOSTA:
1. sem arrive_1 = 0, arrive_2 = 0;
2. process worker_1 {
3. while(true){
4. V(arrive_1);
5. P(arrive_2);
6. }
7. }
8. process worker_2 {
9. while (true){
10. V(arrive_2);
11. P(arrive_1);
12. }
13. }

7 Como se d a comunicao no PRODUTOR CONSUMIDOR


RESPOSTA: D-se por DEPOSIT E FETCH sendo obrigatoriamente alternada, pois
mensagens no podem ser sobrescritas ou lidas por mais de uma vez.

8 Implemente, com semforos, o PRODUTOR CONSUMIDOR


RESPOSTA:
1. typeT buf; sem empty = 1, full = 0;
2. process Produtor [i = 0 to M]{
3. while(true){
4. P(empty);
5. buf = data;
6. V(full);
7. }
8. }
9. process Consumidor [i = 0 to N]{
10. while(true){
11. P(full);
12. result = buf;
13. V(empty);
14. }
15. }

9 O que so SEMFOROS BINRIOS DIVIDIDOS?


RESPOSTA: Um semforo binrio dividido so semforos FULL E EMPTY dividos em
dois, porm utilizados como um s e NO MXIMO TEM O VALOR 1 POR VEZ

10 Qual a vantagem, para o PRODUTOR CONSUMIDOR, de se trabalhar com


rajada?
RESPOSTA: Ao trabalhar com Rajada o nosso programa ter a performance aumentada

11 Um Buffer pode ser representado por


RESPOSTA: Um Array ou qualquer estrutura de dados
12 Como funciona o Buffer do DEPOSIT E FETCH
RESPOSTA:
buf[rear] = data; rear = (rear + 1) % n; PRODUTOR(deposit)
result = buf[front]; front = (front + 1) % n; CONSUMIDOR(fetch)

buffer:

rear front

13 Qual a soluo, com semforos, para Buffers limitados?


RESPOSTA:
1. typeT buf[n]
2. sem empty = n, full = 0;
3. int front = 0, rear = 0;
4. process Producer {
5. while(true){
6. P(empty);
7. buf[rear] = data; rear = (rear + 1) % n;
8. V(full);
9. }
10. }
11. process Consumer {
12. while(true){
13. P(full);
14. result = buf[front];
15. front = (front + 1) % n;
16. V(empty);
17. }
18. }

14 Semforos que funcionam como contadores de recursos ( semforos contadores)


so uteis quando ?
RESPOSTA: So teis quando vrios processos competem por mltiplas utilidades de um
nico recurso.
15 Como so implementados os buffers limitados para vrios processos?
RESPOSTA:
1. typeT buf[n]
2. sem empty = n, full = 0;
3. sem mutex_A = 1, mutex_B = 1;
4. int front = 0, rear = 0;
5. process Producer [i=0 to M]{
6. while(true){
7. P(empty);
8. P(mutex_A);
9. buf[rear] = data; rear = (rear + 1) %
n;
10. V(mutex_A);
11. V(full);
12. }
13. }
14. process Consumer [i=0 to N] {
15. while(true){
16. P(full);
17. P(mutex_B);
18. result = buf[front];
19. front = (front + 1) % n;
20. V(mutex_B);
21. V(empty);
22. }
23. }

16 Como se d a Soluo para o JANTAR DOS FILSOFOS


RESPOSTA:
1. sem fork[5] = {1,1,1,1,1}
2. process Philosopher [i=0 to 3] {
3. while(true){
4. P(fork[i]); P(fork[i+1]);
5. eat;
6. V(fork[i]); V(fork[i+1]);
7. think;
8. }
9. }
10. process Philosopher [4] {
11. while(true){
12. P(fork[0]); P(fork[4]);
13. eat;
14. V(fork[0]); V(fork[4]);
15. think
16. }
17. }

17 Quais so as duas abordagens para o problema dos Leitores e Escritores?


RESPOSTA: Pode ser usada uma abordagem que trabalha com EXCLUSO MTUA
como tambm pode ser usada a abordagem de SINCRONIZAO CONDICIONAL atravs
do uso da tecnica de PASSAGEM DE BASTO.
18 Como resolver o problema dos Leitores e Escritores com uso de EXCLUSO
MTUA, e quais so os PROS e CONTRAS?
RESPOSTA:
1. var = 0;
2. sem mutex_A = 1;
3. sem rw = 1;
4. process Reader [i = 0 to M]{
5. while(true){
6. P(mutex_A);
7. var = var + 1;
8. if(var == 1) P(rw);
9. V(mutex_A);
10. Escreve na Base de Dados;
11. P(mutex_A);
12. var = var -1;
13. if (var == 0) V(rw);
14. V(mutex_A);
15. }
16. }
17. process Writer [i = 0 to N]{
18. while(true){
19. P(rw);
20. L da Base de Dados;
21. V(rw);
22. }
23. }

- Essa soluo d prioridade aos leitores em detrimento aos escritores.


- Um fluxo contnuo de leitores pode levar a impossibilidade de um escritor acessar a base
de dados
- A soluo NO JUSTA

19 Qual vantagem temos ao usar a soluo por SINCRONIZAO


CONDICIONAL
RESPOSTA: Podemos, com a soluo por sincronizao condicional garantir que os
processos escritores NO entrem em estado de STARVATION utilizando registradores
atravs de contadores, esses registram a quantidade de leitores e escritores acessando a base
de dados

20 A tecnica da passagem de basto parte essencial na SINCRONIZAO


CONDICIONAL, portanto, qual a justificativa para usa-lo?
RESPOSTA: A tcnica da Passagem de Basto surge para podermos implementar comandos
<await> atravs de semforos, pois a implementao por semforos diretamente
IMPOSSIVEL.
21 Descreva o algortmo da passagem de Basto
RESPOSTA:
1 PASSO: Substitua o < por P(e); que agora controlar o acesso nos protocolos de
entrada
2 PASSO: Verifica as condies para um processo dormir atravs do uso de ifs e
implementando os passos para chegar a tal finalidade
3 PASSO: Implementamos os incrementos para os processos que no satisfazem as
condies para dormir
4 PASSO: Liberar um dos processos vinculados a um dos semforos utilizados (PASSAR
O BASTO)

22 Implemente o algortmo da passagem de Basto


RESPOSTA:
1. int nr = 0, nw = 0; // RW: (nr == 0 ou nw == 0)
2. // e nw <= 1
3. sem e = 1, r = 0, w = 0;
4. int dr = 0, dw = 0; // Numero de escritores
5. //atrasados (dw) e leitores atrasados (dr)
6. process Leitor [i = 0 to M] {
7. while(true) {
8. // <await (nw == 0) nr = nr + 1; >
9. P(e);
10. if ( nw > 0)
11. {dr = dr + 1; V(e); P(r); }
12. nr = nr + 1;
13. // SIGNAL;
14. if (dr > 0) { dr = dr 1/ V(r);}
15. else V(e);
16. read the database; //SC
17. // < nr = nr 1; >
18. P(e);
19. nr = nr 1;
20. // SIGNAL;
21. if (nr = = 0 and dw > 0)
22. { dw = dw 1; V(w); }
23. else V(e);
24. }
25. }
26. process Escritor [i = 0 to N] {
27. while(true){
28. // < await (nr == 0 and nw == 0)
29. // nw = nw + 1;
30. P(e);
31. if ( nr > 0 e nw > 0)
32. { dw = dw +1; V(e); P(w); }
33. nw = nw + 1
34. // SIGNAL;
35. V(e);
36. write the database; //SC
37. //SIGNAL;
38. P(e);
39. nw = nw +1;
40. if (dr > 0) { dr = dr 1; v(r);}
41. else if ( dw > 0)
42. {dw = dw 1; V(w); }
43. else V(e);
44. } }
23 Implemente o SIGNAL
RESPOSTA:
1. if (nw == 0 e dr > 0 ) {
2. // ACORDA LEITOR
3. } else if (nr == 0 and nw == 0 and dw > 0 ) {
4. // ACORDA ESCRITOR
5. dw = dw 1; V(w);
6. } else {
7. // LIBERA LOCK DE ENTRADA
8. V(e);
9. }

Vous aimerez peut-être aussi