Você está na página 1de 2

Universidade Federal de Mato Grosso do Sul

Faculdade de Computação
Profª Valéria Quadros dos Reis

Sistemas Operacionais

Aluno: _________________________________________ Nota: ________

1. Explique a diferença entre espera ocupada e bloqueio por semáforo. Descreva uma
desvantagem de cada uma das práticas.

2. Dois processos executam os procedimentos a seguir tentando sincronizar o acesso à variável


compartilhada x. As chamadas sleep() e wakeup() funcionam da seguinte maneira: sleep bloqueia
o processo que a invoca e wakeup desbloqueia um processo em específico caso este esteja, de
fato, bloqueado.

P1 P2
… …
while(1) { while(1) {
sleep(); x = altera(x); // s.c.
x = altera(x); // s.c. wakeup(P1);
wakeup(P2); sleep();
} }
... ...

a) Mostre um cenário de execução em que o código pode falhar.


b) Mostre como solucionar o problema utilizando chamadas down e up de semáforos. Com
que valores os semáforos devem ser iniciados?

3. Mostre que, se as operações de semáforo down() e up() não forem executadas


atomicamente, a exclusão mútua pode ser violada.
4. O que poderia potencialmente acontecer se uma thread chamasse a operação up antes de ter
chamado a operação down de um semáforo binário inicializado com 1?

5. Como a operação signal() associada aos monitores difere da operação correspondente up()
definida para semáforos?

6. O que poderia potencialmente acontecer se threads bloqueadas em um semáforo não saíssem


da fila na ordem FIFO (primeiro a chegar é o primeiro a sair)?

7. Marque Verdadeiro (V) ou Falso (F) na sua folha almaço e justifique sentenças falsas.
Sentenças falsas não justificadas não serão pontuadas.
a. ( ) Quando uma thread incrementa um semáforo, se o resultado for negativo, a thread
se bloqueia e não pode continuar a executar até que outra thread decremente esse mesmo
semáforo.
b. ( ) Além das operações de incremento (up) e decremento (down), também é possível
somente ler o valor de um semáforo.
c. ( ) Um semáforo pode ser inicializado com qualquer valor inteiro. Se esse valor for
positivo, ele representa o número de threads que podem decrementar o semáforo sem que sejam
bloqueadas. Caso esse valor seja negativo, ele representa o número de threads que já foram

Faculdade de Computação - UFMS - Página 1


Universidade Federal de Mato Grosso do Sul
Faculdade de Computação
Prof. Valéria Quadros dos Reis

Sistemas Operacionais

Aluno: _________________________________________ Nota: ________


bloqueadas. Por fim, se esse valor for zero, ele significa que não há threads bloqueadas à espera
do semáforo, mas se uma thread decrementá-lo, ela será bloqueada.
d. () Uma thread pode estar em apenas uma fila de espera de um semáforo por vez.

8. Uma thread que finaliza o método run() transita para qual estado?

9. Uma threa thread que invoca o método yield() transita de qual para qual estado?

10. Em uma aplicação concorrente que controla saldo bancário em contas-correntes, dois
processos compartilham uma região de memória onde estão armazenados os saldos dos clientes
A e B. Os processos executam concorrentemente os seguintes passos:

Processo 1 Processo 2
/* saque em A */ /* saque em A */
1a. x = saldo_do_cliente_A; 2a. y = saldo_do_cliente_A;
1b. x = x - 200; 2b. y = y - 100;
1c. saldo_do_cliente_A = x; 2c. saldo_do_cliente_A = y;

/* depósito em B */ /* depósito em B */
1d. x = saldo_do_cliente_B; 2d. y = saldo_do_cliente_B;
1e. x = x + 100; 2e. y = y + 200;
1f. saldo_do_cliente_B = x; 2f. saldo_do_cliente_B = y;

Supondo que os valores dos saldos de A e B sejam, respectivamente, 500 e 900, antes de os
processos executarem, pede-se:
a) Se somente um processo executa por vez e nunca é preemptado, os valores corretos esperados
para os saldos dos clientes A e B após o término da execução dos processos são 200 e 1200,
respectivamente. Considerando que possa haver preempção, indique uma sequência de execuções
que pode gerar resultados diferentes dos esperados.
b) Utilizando semáforos, proponha uma solução que garanta a integridade dos saldos e permita o
maior compartilhamento possível dos recursos entre os processos, não esquecendo a
especificação da inicialização dos semáforos.

11. Escolha uma linguagem de programação diferente de C e Java. A linguagem escolhida


permite a criação de threads concorrentes (que disputam pela execução e são preemptadas
ocasionalmente) e threads cooperativas (que já são programadas para intercalar a execução em
momentos pré-definidos)?

12. Escolha uma linguagem de programação diferente de C e Java. A linguagem escolhida


oferece quais construtores de sincronização (semáforos, monitores, variáveis de condição)?

Faculdade de Computação - UFMS - Página 2

Você também pode gostar