Você está na página 1de 14

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL

INSTITUTO DE INFORMÁTICA
DEPARTAMENTO DE INFORMÁTICA APLICADA

LISTA DE EXERCICIOS 1 - Revisão 2018/01


• Não há gabarito, nem respostas aos exercícios abaixo.
• A maioria dos exercícios é uma coletânea de questões de prova de INF01142 desde 2000/01. Alguns deles são
oriundos dos livros clássicos de sistemas operacionais de A. Tanenbaum e de A. Silberchartz. Há exercícios que
foram adaptados desses livros.
• O principal objetivo desta lista é orientar o estudo para as provas de INF01142. Façam os exercícios em grupo,
troquem idéias e resultados. O professor da disciplina não resolverá os exercícios para vocês, só discutirá
dúvidas pensadas e não aquelas na forma "não sei fazer (...e nem tentei)". Pensem antes de discutir a possível
solução com os professores da disciplina.
• Os livros-texto da disciplina abordam todos os tópicos que são apresentados nos exercícos. Leia-os!!

1. O que é um sistema operacional (definição e objetivo)?


2. Quais são os três principais objetivos de um sistema operacional? Descreva com UMA FRASE o quê cada um
desses objetivos, isoladamente, buscam oferecer?
3. Qual a finalidade de existir chamadas de sistema em um sistema operacional? Elas são implementadas baseadas
em que?
4. Existe diferenças entre chaveamento de modos de execução e chaveamento de contexto ou esses conceitos são
equivalentes? Sim ou Não? Caso exista diferenças, EXPLIQUE quais são e em que situações um ou outro tipo
de chaveamento é empregado.
5. O que a multiprogramação e o time-sharing (tempo compartilhado) tem em comum? Quais são as diferenças
entre esses conceitos? É possível existir multiprogramação sem interrupções? E time-sharing? Que tipo de
interrupções, se for o caso, deve existir para haver suporte a multiprogramação e ao time sharing? EXPLIQUE.
6. Que tipo de características devem ser incluídas no projeto de um processador para dar suporte a sistemas ope-
racionais multitarefa? Forneça pelo menos DUAS características e EXPLIQUE qual o seu emprego (uso) na
concepção de um sistema operacional multitarefa.
7. O sistema operacional MS-DOS é um sistema monotarefa e monousuário, isso é, ele não oferece nenhum
suporte a multiprogramação. Suponha que você quisesse transformá-lo em um sistema multitarefa, mas ainda
monousuário. Liste TRÊS fatores de complexidade adicional que essa transformação provocaria no projeto do
sistema operacional. Escolha, a seu livre critério, UM dos TRES fatores listados para DETALHAR como esse
fator escolhido impactaria no projeto do sistema operacional e a complexidade envolvida.
8. Quais são as diferenças entre uma aplicação de usuário efetuar uma chamada de função de uma biblioteca, uma
chamada a um procedimento do próprio programa (sub-rotina ou função) e uma chamada de sistema?
9. Um sistema operacional hipotético disponibiliza uma chamada de sistema para realizar alocação dinâmica de
memória. Um aluno de INF01142 dá o seguinte conselho a seus colegas: "se o programa realiza muitas requi-
sições diferentes de alocação dinâmica de memória, por questões de desempenho, é melhor que se requisite toda
a memória necessária, de uma única vez, no início do programa. Depois, o programa usa a memória dessa área
pré-alocada de acordo com as suas necessidades." O conselho está correto? JUSTIFIQUE. (Obs.: considere que
há memória RAM suficiente).
10. Qual é a diferença, se existir, entre realizar troca de contexto, entre processos ou threads, e troca de modo de
execução, onde um processo (ou thread) passa a executar código do núcleo?

1
11. O que se entende por "sistemas operacionais de 16, 32 ou 64 bits"? Qual a principal diferença entre eles no que
diz respeito ao conceito de processos?

12. O que são, e para que servem, programas de sistemas? Dê DOIS exemplos, EXPLICITANDO ondes eles se
"encaixam" na estrutura do sistema operacional, isto é, para que servem, qual o objetivo, etc.

13. Um sistema multitarefa implica necessariamente que o sistema seja multiusuário? SIM ou NÃO? JUSTIFIQUE
a sua resposta.

14. O que são chamadas de sistema? Como elas são implementadas em um sistema operacional? O que diferencia
uma chamada de sistema de uma chamada de função de um biblioteca e de uma chamada de sub-rotina (função
ou procedimento) de um programa?

15. Em um projeto de sistema operacional, como se pode atingir a eficiência, a conveniência e a não interferência?
Para cada um desses aspectos, diga o que se entende por ele e como se pode atingir esse objetivo?

16. Um sistema operacional é composto por um núcleo e por programas de sistemas. Qual a funcionalidade provida
por cada um desses componentes?

17. Os sistemas operacionais podem ser classificados de acordo com a quantidade de programas em execução em
sistemas monotarefa e sistemas multitarefa e, de acordo com a quantidade de usuários que eles atendem em
sistemas monousuário e sistemas multiusuário. Explique o que representa cada uma dessas características iso-
ladamente. Ao combinar essas características, se obtém quatro possibilidades? Quais são elas? São todas
válidas? EXPLIQUE sua resposta.

18. O que é um sistema em lote (batch systems)?

19. O que é um processo? Que áreas de memória compõem um processo?

20. O que é multiprogramação?

21. Pode haver multiprogramação em ambientes monousuário? EXPLIQUE.

22. Quais são os estados fundamentais (básicos) que um processo pode assumir? O estado de bloqueado é realmente
necessário? O que acontece se houver apenas os estados apto e executando?

23. Os três principais estados de um processo são: ready, running e blocked. Descreva quais eventos fazem um
processo mudar de estado. Descreva TODAS situações possíveis envolvendo estes três estados.

24. Em relação às interrupções de hardware, interrupções de software (traps) e subrotinas, responda: além do fato
que interrupções de hardware e software ao serem acionadas empilham o registrador de flags e terminam sua
execução por uma instrução IRET, o que as diferenciam de uma chamada de subrotina? (DICA: pense no que
ocorre com o processador.)

25. Como as chamadas de sistema (system calls) são implementadas? Detalhe aspectos como: que tipo de instrução
é utilizada para sua implementação; como é feita a seleção de uma rotina específica entre as várias que o sistema
operacional implementa; como argumentos são passados para a rotina que implementa a chamada de sistema; a
instrução que implementa a chamada de sistema é instrução privilegiada ou não; se for, como é então possível
um usuário executá-la?

26. Porque o acesso a serviços do sistema operacional é feito através de chamadas de sistemas e não por chamadas
a subrotinas? Em outros termos, qual a diferença entre uma chamada de sistema e uma chamada de subrotina
para efeitos de implementação de um sistema operacional?

27. Qual a diferença fundamental entre uma interrupção de software (trap) e uma interrupção de hardware?

28. Projetar e implementar um sistema operacional que garanta a não interferência de processos de usuários entre
si e com o próprio sistema operacional requer assistência do hardware do processador. Cite TRES desses
mecanismos de assistência de hardware que são usados para prover a proteção de não interferência. (Apenas
citar, não precisa descrever o que eles fazem, nem como são usados).

29. Quais desafios existem no projeto de um sistema operacional para máquinas SMPs (multiprocessadores simétri-
cos) que não existem em máquinas monoprocessadoras? (Apenas citar, não precisa descrever).

2
30. Em um sistema que possui m processos e n CPUs (ou cores), determine a quantidade MÁXIMA e a quantidade
MINIMA de processos que podem estar nos estados apto, executando e bloqueado. EXPLIQUE as circunstân-
cias em que essas situações ocorrem.

31. Porque o suporte a interrupções de hardware e de software são imprescíndiveis para a implementação de um
sistema multiprogramado? Em que situações essas interrupções são usadas?

32. No diagrama de transição de 3 estados (apto, executando, bloqueado, quais são os eventos que existem em um
escalonador preemptivo que NÃO existem em um escalonador NÃO preemtivo? Esses eventos levam processos
(ou threads) de que estado a que estado?

33. O processador (monocore) de um sistema multiprogramado está executando um programa de alta prioridade
quando acontece uma interrupção de hardware sinalizando a conclusão de uma operação de E/S. Quais as ações
e atividades executadas pelo sistema operacional se: (i) a operação de E/S foi iniciada por um processo de baixa
prioridade; (ii) a operação foi iniciada por um processo de altíssima prioridade (superior a alta prioridade).
JUSTIFIQUE a sua resposta empregando um diagrama temporal com um exemplo que auxilie a entender sua
argumentação. EXPLICITE todas as considerações e suposições feitas.

34. Um processo está no estado bloqueado-suspenso. (i) Qual a sequência de estados que esse processo passou
até chegar nesse estado? (ii) Estando no estado bloqueado-suspenso, qual a sequência de estados que leva esse
processo ao estado apto? Para cada caso, (i) e (ii), responda ainda: existe mais de uma sequência possível
de transições de estado que o levem até o estado final bloqueado-suspenso ou apto? Se, sim, quais são as
sequências alternativas?

35. Em um sistema operacional multiprogramado o processador deve estar no modo privilegiado (protegido ou
núcleo) quando executa o código do núcleo do sistema operacional e em modo não privilegiado (usuário) quando
executa programas e aplicativos de usuários. EXPLIQUE como é feito esse chaveamento de modos durante a
operação normal de um sistema operacional.

36. Supondo que em uma máquina com dois processadores (ou cores), em um determinado instante, existam n
processos sendo gerenciados pelo escalonador de curto prazo, determine, para as várias combinações possíveis,
o número de processos que podem estar nos estados apto, executando ou bloqueado. EXPLIQUE seu raciocínio.

37. Porque a inclusão de mecanismos de interrupção de hardware, de software, e de exceção, se torna imprescindível
no projeto de um processador destinado a suportar sistemas operacionais com multiprogramação?

38. Que tipo de características devem ser incluídas no projeto do um processador para dar suporte a sistemas opera-
cionais multitarefa? Listar no mínimo TRÊS características EXPLICANDO qual o seu emprego (necessidade)
na implementação de um sistema operacional multitarefa?

39. No contexto da implementação de sistemas operacionais, qual é a finalidade das interrupções? Qual a diferença
principal entre um interrupção de software (traps) e uma interrupção de hardware? As interrupções de software
podem ser geradas intencionalmente por um programa de usuário (executando em modo não privilegiado)?
Nesse caso, para que finalidade?

40. Considere um processo Pi que está em execução. Em um instante t, esse processo pode sofrer uma interrupção
em sua execução ou um chaveamento de contexto. EXPLIQUE qual a diferença, se houver, entre ser inter-
rompido e sofrer um chaveamento de contexto. Em cada uma dessas situações, que tipo de informações são
preservadas e quais as estruturas de dados estão envolvidas? EXPLIQUE.

41. Porque é importante um escalonador distinguir programas voltados a E/S (I/O bound) dos programas voltados a
CPU (CPU bound)?

42. A implementação de multiprogramação está baseada em mecanismos e características incluídas no projeto de


hardware de microprocessadores. Cite TRÊS dessas características e EXPLIQUE claramente de que forma elas
são usadas na implementação de um sistema operacional com suporte a multiprogramação.

43. O processador deve estar no modo núcleo (protegido ou privilegiado) enquanto executa código pertencente ao
núcleo e em modo usuário (não protegido ou não privilegiado) enquanto executa código de um programa de
usuário. EXPLIQUE como essa troca de modos é feita durante a execução normal de um sistema operacional,
incluindo a fase de inicialização (boot).

3
44. Qual é a finalidade de haver um sistema de interrupções? Quais as diferenças entre um trap (interrupção de
software) e uma interrupção de hardware? Os traps podem ser gerados intencionalmente por um programa de
usuário? Em caso afirmativo, para qual finalidade?

45. EXPLIQUE onde e porque na implementação de um sistema operacional com suporte a multiprogramação são
usadas interrupções de hardware e de software (trap).

46. A implementação da multiprogramação nos sistemas operacionais modernos é baseada em mecanismos in-
cluídos no projeto de hardware dos processadores, tais como, instruções atômicas; no mínimo dois modos de
operação; interrupções; proteção de memória e de E/S. RESPONDA: porque e como é feito a proteção de E/S?
Como que uma operação de E/S feita em nível de usuário chega ao núcleo (kernel)?

47. EXPLIQUE como o mecanismo de modos de execução de um processador, associado ao mecanismo de inter-
rupção, pode impedir que um processo de usuário possa, por exemplo, acessar diretamente o controlador de
disco, mas, mesmo assim, ainda permitir que um usuário execute operações de E/S.

48. Em um sistema operacional, qual a finalidade das interrupções de hardware? Para que elas são utilizadas?
Quais são as diferenças entre trap (interrupções de software) e uma interrupção de hardware? Os traps podem
ser gerados intencionalmente a partir de um programa de usuário? Nesse caso, para que finalidade?

49. "Um computador ao ser ligado (power on) tem o processador posto por default em modo protegido (também
denominado de kernel mode, ou modo supervisor)". Essa afirmativa está correta? JUSTIFIQUE sua resposta
citando as razões pelas quais o processador é posto, ou não, no modo protegido por default.

50. Qual é a diferença entre o modo núcleo (também chamado supervisor, protegido ou privilegiado) com o modo
usuário? Por que essa diferença é importante para um sistema operacional? Sua resposta muda se o sistema for
monousuário ou multiusuário? JUSTIFIQUE.

51. Quais são as diferentes maneiras de se criar um processo?

52. Quais as são as diferentes formas de terminar um processo? Quando um processo termina, quem retoma o
controle e passa a executar no processador?

53. O que é um processo zombie? Para que serve? Na hierarquia de processos, um processo zombie é um processo
pai ou um processo filho?

54. O que são processos em background e em foreground?

55. Em relação aos componentes de um espaço de endereçamento (código, dados globais, monte e pilha), qual a
diferença entre se criar dez processos e se criar dez threads dentro de um processo? O modelo de threads (N:1,
1:1 e M:N) tem impacto na sua resposta? Se SIM, EXPLIQUE como.

56. Um programador resolveu implementar usando threads uma nova versão de um servidor web. Em seu projeto,
o servidor é um processo daemon que possui uma thread bloqueada em uma primitiva de receive() a espera
de requisições http que cheguem via rede. Ao receber uma requisição, essa thread se desbloqueia; cria uma
nova thread para atender a requisição que chegou e volta a se bloquear para esperar uma nova requisição.
RESPONDA: (i) Qual o modelo de threads deve ser empregado: modelo N:1 ou modelo 1:1? Ou o modelo é
indiferente? (ii) Essa solução baseada em threads, funciona tanto para máquinas monoprocessadas como para
máquinas multiprocessadas? JUSTIFIQUE todas as respostas.

57. Um processo, em sua execução, cria quatro threads. RESPONDA: (i) No TOTAL, quantas pilhas são criadas
no espaço de endereçamento do processo? (ii) Sua resposta depende do modelo de threads empregado (N:1 ou
1:1)? EXPLIQUE.
58. Considere o fragmento de código abaixo executado, inicialmente, por um processo:

n=3;
while (n > 0) {
fork();
n = n - 1;
}

Quantos processos filhos são criados ao total? JUSTIFIQUE sua resposta.

4
59. Considere as seguintes situações: (i) Um processo executa uma primitiva para criar outro processo como, por e-
xemplo, fork(); (ii) Um processo executa uma primitiva para criar uma thread como, por exemplo, pthread_create().
Para cada dessas situações, quais dos seguintes componentes são compartilhados pelos novos fluxos de execução
criados (processo ou thread): área de pilha, área de dados globais; área de código e área de heap (monte).

60. Compare o conceito de processo com o conceito de thread. Aborde (obrigatoriamente) os seguintes tópicos:
procedimento de criação, custo de criação e de gerência, espaço de endereçamento e escalonamento

61. Uma aplicação concorrente possui N tarefas que cooperam entre si para obterem o resultado final. Qual é a
diferença existente entre criar N processos e criar UM processo com N threads para executar essa aplicação?
Quais as vantagens e desvantagens de uma e de outra forma de se programar essa aplicação?

62. Considere a seguinte afirmativa : "Em um sistema que oferece suporte a threads, independente do modelo ser
N :1 ou 1 :1, existe uma pilha para o processo e uma pilha para cada thread criada, mas há apenas uma área de
código, uma área de dados globais e uma área de monte (heap)." Ela está correta ? JUSTIFIQUE sua resposta.

63. Um programa possui um laço que executa 6 vezes e o programa termina. O laço realiza cálculos que consomem
a CPU por 50 ms e são seguidos por uma operação de E/S que leva 200 ms. Esse programa é executado
em uma máquina com um sistema operacional multiprogramado, em um único processador (monocore) e a
política de escalonamento é preemptiva por prioridade. Desconsiderando qualquer sobrecusto (overhead) do
próprio sistema operacional, determine o tempo total de execução do processo Pa que executa esse programa
nos seguintes cenários: (i) o processo Pa possui a mais alta prioridade no sistema; (ii) o processo Pa possui a
menor prioridade e há TRES outros processos de maior prioridade que executam esse mesmo programa.

64. Considere um sistema operacional que implementa threads em nível de sistema (modelo 1:1). Qual é a diferença
fundamental entre um processo criar um processo filho e criar uma thread filha para a execução de tarefas
concorrentes?

65. Considere o espaço de endereçamento de um processo e que múltiplas threads são criadas nesse processo. Quais
componentes do espaço de endereçamento do processo são compartilhados pelas threads? Sua resposta depende
do modelo de threads implantado no sistema operacional (N:1, 1:1 ou M:N)? Se houver diferenças, EXPLIQUE
quais as diferenças entre um modelo e outro em relação as áreas compartilhadas do espaço de endereçamento.
Se não houver diferenças, JUSTIFIQUE.

66. Considerando os modelos de implementação de threads, EXPLIQUE: Quando são usadas threads em nível de
usuário (modelo N:1), há uma pilha por thread ou uma pilha por processo? E se fosse empregado threads em
nível de núcleo (modelo 1:1)?

67. Considerando os modelos de implementação de threads, responda: O problema de inversão de prioridades pode
acontecer com threads implementadas em nível de usuário? Sim ou não? Porquê?

68. Considere a seguinte afirmativa: "Em um sistema que oferece suporte a threads, independente do modelo ser
N:1 ou 1:1, normalmente há uma pilha para o processo e uma pilha para cada thread." Ela está correta? Se for
verdadeira, JUSTIFIQUE o por quê dessa opção de projeto. Se for falsa, JUSTIFIQUE porque esse excesso de
pilhas é desnecessário.

69. Considere um sistema que tem dois processadores (CPU) dual-core. Suponha que três processos P0 , P1 e P2
sejam iniciados com tempos de execução de 5 ms, 10 ms e 20 ms, respectivamente. Presuma que todos os três
processos utilizam exclusivamente a CPU, que não bloqueiam durante a execução e que, uma vez escalonados,
não mudem de CPUs (e de cores). RESPONDA: (i) Em quanto tempo será concluída a execução de todos esses
processos? (ii) Sua resposta é afetada no caso dos processadores ao invés de serem dual-core tiverem apenas
suporte a hyperthreading? EXPLIQUE.

70. Medidas realizadas em um determinado sistema mostraram que um processo típico executa por um tempo T
antes de se bloquear em E/S. Um chaveamento de processo exige um tempo S, que é efetivamente desperdiçado
(sobrecarga). Para um escalonamento circular (Round-Robin) com quantum Q, forneça a eficiência da CPU
para cada uma das seguintes situações: (i) Q = ∞;(ii) Q > T; (iii) S < Q < T; (iv) S = Q < T; e (v) Q tendendo a
zero. EXPLIQUE seu raciocínio

71. Considere o seguinte conjunto de 5 processos onde chegada é o instante de tempo que o processo se tornou apto
pela primeira vez, t é o tempo necessário a execução do processo (tempo total de CPU) e p a sua prioridade.

5
Processo/Pid Chegada Tempo de CPU (t) Prioridade (p)
P0 0 60 0
P1 15 25 1
P2 20 15 0
P3 65 15 1
P4 70 10 2

Assumindo que a execução inicie no tempo zero, desenhe o diagrama de execução desses 5 processos, isto é,
quem está ocupando a CPU em cada instante de tempo, considerando um escalonamento em múltiplas filas com
as seguintes políticas de escalonamento em cada fila: (i) FIFO não preemptivo; (ii) SJF não preemptivo; (iii)
Round Robin (quantum=10, não preemptivo por prioridade; e (iv) FIFO preemptivo por prioridade.
Supor que processos com prioridades de valores numéricos menores são os mais prioritários. Em caso de
empates, considerar como critério de desempate o pid do processo (o processo de menor pid ganha a disputa).
72. Qual, ou quais, entre os algoritmos básicos de escalonamento listados a seguir, podem resultar em inanição
(starvation)? (i) First Come, First Served (FCFS); (ii) Shortest Job First (SJF); (iii) Round Robin; e (iv) Por
prioridade. Para cada algoritmo que POSSA gerar inanição, EXPLIQUE como, SE possível, essa situação pode
ser evitada.
73. Considere um algoritmo de escalonamento por prioridade baseado em troca dinâmica de prioridades. Valor
numericamente MAIOR implica em MAIOR prioridade. Quando um processo está esperando pela CPU (estado
apto), sua prioridade é modificada a uma taxa α, quando está no estado executando, a prioridade varia a uma
taxa β. Sempre que um processador entrar no estado apto, sua prioridade é posta em zero. Dependendo dos
valores de α e β se obtém diferentes algoritmos de escalonamento (inclusive alguns diferentes dos algoritmos
básicos vistos em aula). RESPONDA, explicando seu raciocínio: (i) qual algoritmo resulta quando β > α > 0?
(ii) qual algoritmo resulta quando α < β < 0? (iii) qual algoritmo resulta quando α > β > 0?
74. Cinco processos, identificados de A até E, chegam no estado apto no mesmo instante de tempo. Esses processos
tem tempo de execução estimados em 10, 6, 2, 4 e 8 minutos. Suas prioridades (estaticamente definidas) são 3,
5, 2, 1 e 4, respectivamente, sendo 5 a prioridade mais alta. Ignore a sobrecarga de chaveamento de processos.
Determine o tempo médio de retorno dos processos para cada um dos seguintes algoritmos de escalonamento:
(i) Round-Robin; (ii) FIFO (siga a ordem 10, 6, 2, 4 e 8); (iii) Tarefa mais curta primeiro (SJF); (iv) múltiplas
filas.
Importante: para o caso (i), presuma que cada tarefa receba um quantum de 1 minuto. A prioridade só deve ser
considerada para o caso (iv). Suponha, ainda, que todas as tarefas são limitadas por CPU (não fazem E/S).
75. Em escalonamento, em sistemas não interativos, vazão (througphut) é definida como a média de processos,
ou jobs, completados pelo sistema em uma unidade de tempo. Com base nessa definição avalie a afirmação:
"para atingir uma maior vazão, um sistema multiprogramado deve atribuir prioridades mais elevadas para pro-
cessos CPU-bound". Essa afirmação está CERTA ou ERRADA? JUSTIFIQUE a sua resposta empregando um
diagrama temporal com um exemplo que auxilie a entender sua argumentação.
76. Para os processos listados na tabela abaixo:

Processo Chegada Tempo de CPU Prioridade


PA 0.0000 4 3
PB 1.0001 3 4
PC 2.0001 3 6
PD 3.0001 5 5

O tempo de chegada corresponde ao momento em que o processo entrou pela primeira vez no estado de apto.
Suponha que o tempo de execução do escalonador e do despachante seja zero. Ainda, considere que um valor
numericamente superior, representa uma prioridade maior.
Nessas condições, DESENHE o diagrama temporal (Gantt) de execução desses processos SE: (i) o algoritmo de
escalonamento for baseado em prioridade, mas não preemptivo; (ii) o algoritmo de escalonamento for preemp-
tivo baseado em prioridade. Para cada caso, forneça o turnaround (tempo decorrido entre a criação e o término)
de cada processo e o throughput (vazão) do sistema.

6
77. Um tipo de escalonador empregado em sistemas operacionais é o de múltiplas filas com realimentação (filas
multinível). Um critério que pode ser usado para classificar, e reclassificar (realimentação), os processos nas
diferentes filas de prioridade é de acordo com suas diferentes necessidades de CPU e de E/S. Assim, se um
processo utilizar muito tempo de CPU ele será transferido de uma fila de mais alta prioridade para uma fila de
mais baixa prioridade e, se usar pouco tempo de CPU, ele será transferido para uma fila de mais alta prioridade.
RESPONDA:
(a) Esse esquema privilegia os processos I/O bound? Em caso afirmativo, qual a argumentação (justificativa)
para este tipo de privilégio?
(b) Nesse esquema existe a probabilidade de um processo CPU bound sofra starvation (postergação infinita)?
Caso esta possibilidade seja real como pode ser resolvido este problema?
(c) Como o sistema operacional pode determinar se um processo é CPU bound ou I/O bound, movendo-o de
uma fila para outra, se esta característica só pode ser conhecida em tempo de execução?
78. Em uma política de escalonamento denominada de econômica, os processos ao serem criados recebem um
crédito inicial igual Xj créditos. Cada vez que a CPU se torna disponível (livre), os processos realizam ofertas
de Xi créditos para ganhar o direito de executar (i <= j). É o leilão da CPU. O escalonador escolhe o processo
que ofereceu mais créditos e desconta de seu saldo de créditos o valor ofertado (Xi ). Se houver empate na
oferta, o processo com o pid de menor valor numérico será considerado o vencedor dessa rodada de "leilão da
CPU". Os processos não selecionados têm seus créditos acrescentados de um valor percentual (rendimento). Os
processos que zerarem seus créditos antes de terminarem sua execução receberão novamente Xj créditos quando
não houver mais nenhum processo apto a executar. Um processo permance no estado executando (running) até:
(i) liberar voluntariamente a CPU, (ii) realizar uma operação de sincronização ou de E/S que provoque seu
bloqueio, ou; (ii) terminar.RESPONDA:

(a) A política econômica favorece algum tipo de processo (I/O bound ou CPU bound)? JUSTIFIQUE.
(b) Um escalonador que implementa a política econômica é preemptivo ou não-preemptivo? JUSTIFIQUE
sua resposta.
(c) Há riscos de postergação indefinida? JUSTIFIQUE sua resposta argumentado quais as condições necessárias
para ocorrer ou não essa postergação.
(d) Que influência o valor do rendimento exerce nessa política?

79. Quais são os principais objetivos dos escalonadores de longo termo, médio termo e curto termo? A que tipo de
gerência, mecanismo ou conceitos de sistemas operacionais cada um deles está associado?
80. No projeto de um sistema operacional para um monoprocessador a equipe de desenvolvimento utilizou um
escalonador não preemptivo e a técnica de espera ativa (busy waiting) na implementação de suas primitivas de
exclusão mútua (lock/unlock). Pergunta-se: a decisão do tipo de escalonador e da técnica de busy waiting foi
correta? Em que aspectos sua resposta seria modificada se esse sistema executasse em máquinas multiproces-
sadoras? JUSTIFIQUE SUA RESPOSTA.
81. Para os processos listados na tabela abaixo:

Processo Chegada Tempo de CPU Prioridade


PA 0.0 4 3
PB 1.0 3 4
PC 2.0 3 6
PD 3.0 5 5

Responda:

• Desenhe um diagrama ilustrando a execução desses processos considerando um algoritmo NÃO PREEMP-
TIVO baseado em prioridades onde valor numericamente superior, representa maior prioridade.
• Desenhe um diagrama ilustrando a execução desses processos considerando um algoritmo PREEMPTIVO
baseado em prioridades onde valor numericamente superior, representa maior prioridade.
• Em que, nessa situação, isso é, sistema baseado em prioridades, o uso de uma politica FIFO ou Round
Robin (quantum = 1) implicaria na análise dos itens anteriores?

7
82. Considerando o escalonamento que ocorre em sistemas operacionais interativos, EXPLIQUE o porquê da difi-
culdade de atender simultaneamente os objetivos de eficiência e conveniência. Ilustre sua resposta com exemplos
que demonstrem o atendimento a um ou outro desses objetivos.
83. Considere o seguinte conjunto de 5 processos onde tempo de chegada é o instante de tempo que o processo
tornou-se apto pela primeira vez, t é o tempo necessário a execução do processo (tempo total de CPU) e p a
sua prioridade.

Processo Pid Tempo de Chegada Tempo total de CPU (t) Prioridade (p)
P0 1000 0 60 9
P1 1100 15 25 10
P2 1200 15 15 9
P3 1300 65 15 10
P4 1400 70 10 11

Assumindo que a execução inicie no tempo ZERO e que as prioridades são sempre consideradas, desenhe o
diagrama de Gantt da execução desses 5 processos, usando as seguintes políticas de escalonamento: (i) SJF não
preemptivo por prioridade; (ii) Round Robin (quantum=10, não preemptivo por prioridade), e; (iii) Múltiplas
filas, preemptivo por prioridades, com política FIFO em cada fila de prioridade.
Suponha que valores numéricos MENORES impliquem em MAIOR prioridade. Em caso de empates, considere
como critério de desempate o pid do processo: o processo de menor pid ganha a disputa. Por simplicidade,
suponha que os processos sob análise não realizam operações de E/S.
84. Um tipo de escalonador empregado em sistemas operacionais é o de múltiplas filas com realimentação (filas
multinível). A idéia nesse caso é classificar os processos de acordo com suas diferentes necessidades de CPU e
de I/O (CPU bound e I/O bound) criando diversas filas com prioridades diferentes. Se um processo utiliza muito
tempo de CPU ele é transferido de uma fila de mais alta prioridade para uma fila de mais baixa prioridade.
Responda :

(a) Esse esquema privilegia os processos I/O bound? Em caso afirmativo, qual a argumentação (justificativa)
para este tipo de privilégio?
(b) Nesse esquema existe a probabilidade de um processo CPU bound sofrer starvation (postergação infinita)?
Caso essa possibilidade seja real como esse problema pode ser resolvido?
(c) Como o sistema operacional pode determinar se um processo é CPU bound ou I/O bound, movendo-o de
uma fila para outra, se essa característica só pode ser conhecida em tempo de execução?

85. Um escalonador não preemptivo emprega uma política baseada em prioridade. Em que situações pode haver
trocas de contexto?
86. Considerando a afirmação : "um escalonador que apresenta prioridades necessariamente é preemptivo.". Res-
ponda : A afirmação é correta? Justifique a sua resposta.
87. Um tipo de escalonador empregado em sistemas operacionais é o de múltiplas filas com realimentação (filas
multinível). A idéia neste caso é classificar os processos de acordo com suas diferentes necessidades de CPU e
de I/O (CPU bound e I/O bound) criando diversas filas com prioridades diferentes. Se um processo utiliza muito
tempo de CPU ele é transferido de uma fila de mais alta prioridade para uma fila de mais baixa prioridade.
Responda :

(A) Este esquema privilegia os processos I/O bound? Em caso afirmativo, qual a argumentação (justificativa)
para este tipo de privilégio?
(B) Neste esquema existe a probabilidade de um processo CPU bound sofra «starvation» (postergação in-
finita)? Caso esta possibilidade seja real como pode ser resolvido este problema?
(C) Qual critério é empregado para classificar um processo nas diversas filas quando ele é criado?
(D) Como o sistema operacional pode determinar se um processo é CPU bound ou I/O bound, movendo-o de
uma fila para outra, se esta característica só pode ser conhecida em tempo de execução?

88. Considerando que um escalonador do tipo Round-Robin é implementado através de uma lista encadeada onde
cada elemento da lista ready é um ponteiro para um descritor de processos. Responda:

8
(A) Qual o efeito de se colocar dois elementos na lista ready com ponteiros para um mesmo descritor processo?
(B) Quais poderiam ser as vantagens e desvantagens deste esquema?
(C) Como você modificaria o comportamento «normal» do algorítmo Round Robin para obter o mesmo efeito
sem duplicar os ponteiros na lista de ready?
89. Descreva o que acontece com processos I/O bound com relação aos processos CPU-bound, em cada uma das
seguintes políticas de escalonamento: FCFS, Round Robin, múltiplas filas com prioridades (multinível). Des-
creva como os processos (I/O bound e CPU bound) são escalonados uns em relação aos outros. Classifique
esses algoritmos em ordem de favorecimento, ou seja, determine quais desses algoritmos favorecem mais, e
quais favorecem menos, os processos I/O bound.
90. Considerando a afirmação : “A técnica de busy waiting (spin lock) não deve ser empregada para sincroniza-
ção em máquinas monoprocessadores, seu uso é indicado apenas em sistemas que executam sobre máquinas
multiprocessadoras” Responda : Essa afirmação está correta? Justifique a sua resposta (APENAS sobre essa
argumentação é que sua resposta será avaliada).
91. Descreva os passos necessários, sob o ponto de vista do núcleo do sistema operacional (kernel), envolvidos no
escalonamento e troca de contexto entre duas threads pertencentes a um mesmo processo. Considere as
seguintes opções:

(A) Modelo N:1 para a implementação de threads


(B) Modelo 1:1 para a implementação de threads

92. Explique como cada um dos algoritmos de escalonamento FCFS, RR, e Múltiplas filas tratam os processos I/O
bound em relação aos CPU-bound. Abordar tópicos como quem é favorecido, como ocorre esse favorecimento,
prioridades, justiça no tempo de uso do processador.Qual dos escalonadores acima oferece o melhor resultado
para processos I/O bound? JUSTIFIQUE sua resposta.
93. No projeto de um sistema operacional para um monoprocessador a equipe de desenvolvimento utilizou um
escalonador não preemptivo e a técnica de espera ativa (busy waiting) na implementação de suas primitivas de
exclusão mútua (lock/unlock).
Pergunta-se: a decisão do tipo de escalonador e da técnica de busy waiting foi correta? Em que aspectos sua
resposta seria modificada se esse sistema executasse em máquinas multiprocessadoras? JUSTIFIQUE SUA
RESPOSTA.
94. Uma política de escalonamento do tipo SJF é uma forma de escalonamento por prioridades? JUSTIFIQUE sua
resposta.
95. Para cada uma das transições de estados de um processo listadas abaixo, indique se ela é possível ou não.
JUSTIFIQUE suas respostas e para os casos em que a transição for possível, dê UM exemplo de situação que a
provoque.

(A) Apto → executando


(B) Bloqueado suspenso → bloqueado
(C) Executando → Apto
(D) Bloqueado → executando
(E) Bloqueado suspenso → apto
(F) Apto → Término
(G) Apto → Bloqueado
Obs: Todos ítens tem igual peso.

96. O que diferencia um escalonador com preempção por prioridade de um escalonador com prioridades sem pre-
empção? O que acontece em um e noutro caso? EXPLIQUE sua resposta com base em um exemplo. Sobre
esse aspecto, prioridade com e sem preempção, há diferenças entre o escalonador ser FIFO, Round-Robin ou
SJF (JUSTIFIQUE)?
97. Um escalonador hipotético de curto prazo favorece os processos que tenham usado o menor tempo de proces-
sador em uma janela de tempo δt em um passado recente. Explique por quê esse algoritmo favorece os processos
do tipo I/O bound sem causar postergação indefinida de processos CPU bound.

9
98. Considere um sistema monoprocessado com dois processos, H, de mais alta prioridade e L, de mais baixa
prioridade, os quais compartilham uma região crítica. As regras de escalonamento fazem com que o processo H
passe a executar sempre que ele estiver no estado apto. Em um momento, L está na região crítica e o processo H
se torna apto a executar (por exemplo, uma requisição sua de E/S acabou de ser completada). O processo H inicia
sua execução e tenta ingressar na região crítica e fica realizando uma espera ativa (busy waiting) indefinidamente.
O processo L nunca é escalonado enquanto H está executando. Com base nessa situação, responda:

(A) A situação descrita no enunciado tem um nome bem específico. Como ela se chama? Sugira técnicas que
poderiam ser empregadas para resolver esse problema.
(B) Como se denomina o algoritmo de escalonamento que esse sistema está executando? JUSTIFIQUE sua
resposta.
(C) Se o algoritmo de escalonamento usado fosse round-robin, o problema descrito deixaria ou não de ocorrer?
JUSTIFIQUE sua resposta.
(D) Suponha agora que esse sistema tenha dois processadores. Para os itens A, B e C, diga no que essa
suposição influenciaria em suas respostas?

99. O processador (monocore) de um sistema multiprogramado está executando um programa de alta prioridade
quando acontece uma interrupção de hardware sinalizando a conclusão de uma operação de E/S. Quais as ações
e atividades executadas pelo sistema operacional se: (i) a operação de E/S foi iniciada por um processo de baixa
prioridade; (ii) a operação foi iniciada por um processo de altíssima prioridade (superior a alta prioridade).
JUSTIFIQUE a sua resposta empregando um diagrama temporal com um exemplo que auxilie a entender sua
argumentação. EXPLICITE todas as considerações e suposições feitas.
100. Considere um sistema operacional onde o conceito de semáforos é implementado no núcleo e as primitivas para
seu uso são oferecidas aos usuários através de chamadas de sistema. RESPONDA: É possível que duas threads,
implementadas em nível do núcleo (modelo 1:1), de um mesmo processo, usem uma variável do tipo semáforo
para controlar acesso de forma exclusiva a uma seção crítica? E se as threads fossem implementadas em espaço
de usuário (modelo N:1)? EXPLIQUE.
101. O projeto de um sistema operacional feito por um aluno de INF01142 implementa primitivas de semáforos
protegendo a seção crítica usando a técnica de desabilitar e habilitar interrupções. Essas primitivas são disponi-
bilizadas aos programas de usuários através das chamadas de sistema P() e V(). Considerando que o processador
tem todo suporte de hardware necessário à multiprogramação, RESPONDA: essa solução funciona tanto para
sistemas monoprocessadores como para sistemas multiprocessadores e, se não funciona, como a implementação
dessas primitivas deveria ser feita?
102. O jogo Sudoku usa uma grade de nove linhas e nove colunas (9x9), divididos ainda em nove subgrades de três
linhas e três colunas (3x3). Cada elemento de uma linha, de uma coluna e de uma subgrade deve conter os
digitos de 1 a 9 sem repetição. Assim, um aluno de INF01142 resolve desenvolver uma aplicação multithreaded
para verificar se a solução de um determinado Sudoku está correta. Existem várias formas de se programar, mas
a implementação desse aluno usa onze threads: uma para verificar se as colunas, uma a uma, não tem dígitos
repetidos; outra para verificar se as linhas, uma a uma, não tem dígitos repetidos e, por fim, uma thread para cada
uma das nove subgrades 3x3 para verificar se elas contém apenas os dígitos de 1 a 9, sem repetição. Considere
que o processador usado nessa execução é dual core. RESPONDA:
(A) Existem seções críticas nessa solução? Se SIM, como evitá-las? JUSTIFIQUE sua resposta.
(B) Supondo que é gasto 1 unidade de tempo para verificar cada linha, 1 unidade de tempo para verificar
cada coluna e também 1 unidade de tempo para verificar cada subgrade, que essas verificações usam
apenas o processador, e que não há outra aplicação executando no sistema, RESPONDA: o modelo de
implementação das threads, N:1, 1:1 ou M:N, influencia no tempo de execução desse programa? Se SIM,
qual?
(C) Se esse programa for executado em um sistema que tem apenas uma CPU monocore, modificaria sua
resposta do item (A)? Como?
(D) Se esse programa for executado em um sistema que tem apenas uma CPU monocore, modificaria sua
resposta do item (B)? Como?
103. No trabalho da disciplina, biblioteca cthreads deve ser implementado suporte a semáforos.São previstas duas
primitivas, cwait() e csignal(), e uma variável especial do tipo semáforo (csem_t) que é composta por um con-
tador e uma fila. Sempre que uma thread executar uma primitiva cwait, a variavél contador é decrementada de

10
uma unidade. Se houver recurso disponível, o mesmo é alocado a thread que segue no estado executando. Caso
contrário, a thread é bloqueada a espera da liberação do recurso. A primitiva csignal serve para a thread liberar
o recurso. Isso é feito incrementando a variável contador e, em havendo uma thread a espera desse recurso o
mesmo passa do estado bloqueado para o estado apto. Observe que várias threads podem disputar um mesmo
recurso. As primitivas cwait(s) e csignal(s), executadas por uma thread T, possuem o pseudo-código abaixo:

Semaforo {
int count; //valor atual do contador do semáforo
PFILA2 fila; //fila das threads que esperam pelo semáforo S
} s;

cwait(s): s.count = s.count - 1;


SE s.count < 0 {
Insere thread T na fila do semáforo S (s.fila);
Bloqueia thread T;
}

csignal(s): s.count = s.count + 1;


SE s.count <= 0 {
Retira uma thread T’ da fila do semáforo S (s.fila);
Desbloqueia thread T’;
}

Considerando que o escalonador de cthreads é não preemptivo, que o modelo de threads é N:1 (threads em nível
usuário), e que, quando um semáforo é criado o campo s.count é inicializado em 1, RESPONDA: o desenvolve-
dor de cthreads deve se preocupar com condições de corrida? Sim ou Não?; (ii) Se houver seções críticas que
podem levar a condições de corrida, INDIQUE onde elas estão no pseudo-código acima e o que deve ser feito
pelo desenvolvedor de chtreads para evitar essa situação. Se não houver seções críticas, EXPLIQUE o porquê
de não existir. EXPLICITE as suposições feitas na sua resposta.

104. Considere um programa que realiza a multiplicação de duas matrizes, A e B, N x N , resultando em uma matriz
C, usando o algoritmo clássico, implementado em uma função, e representado pelo fragmento de código abaixo:

void mulmat() {
int i, j, v;

...
for (i = 0; i < N ; i = i +1)
for (j = 0; j < N; j = j + 1)
for (v = 0; v < n; v = v + 1)
c[i,j] = c[i,j] + a[i,v]*b[v,i]
...
return;
}

Esse programa, quando executado em processador hipotético XIS, isso é, como um processo sequencial, leva
x u.t. (unidade de tempo) para concluir. Considere que o processador XIS é dual core. Considere, agora,
que foi feita uma NOVA versão multithreaded desse programa onde são criadas N 2 threads para multiplicar os
elementos da linha i com os elementos de uma coluna j, gerando o elemento C(i, j). Cada thread é responsável
por uma linha e uma coluna. Por exemplo, para uma matriz 4x4 são criadas 16 threads, a primeira delas
multiplica a linha 1 com a coluna 1, a segunda, a linha 1 com a coluna 2, e assim sucessivamente. RESPONDA:

(A) Teoricamente, em quanto tempo, aproximadamente, a versão multithreaded teria sua execução concluída
se fosse(m) criada(s) (i) uma única thread, (ii) duas threads e; (iii) quatro threads?
(B) Se o processador XIS possuísse suporte a hyperthreading, e o mesmo estivesse habilitado, em quanto
tempo essas mesmas threads executariam? JUSTIFIQUE.
(C) Há regiões críticas na implementação concorrente da multiplicação de matrizes? Se SIM, identifique a
região crítica e diga como evitar condições de corrida. Se NÃO, EXPLIQUE o porquê da inexistência de
uma região crítica.

11
(D) O modelo de implementação de threads (N:1 ou 1:1) tem influência nas respostas anteriores? SIM ou
NÃO. JUSTIFIQUE.

105. Um semáforo é uma primitiva para controle de recursos e sincronização disponibilizado em vários sistemas
operacionais. Sua implementação considera um tipo especial de variável, a variável semáforo (s, por exemplo) e
duas operações básicas P (s) e V (s). A variável semáforo s possui um contador (counter) e uma fila (queue)dos
processos bloqueados a espera do recurso ou de sincronização e é compartilhada por todos os processos que
disputam por um mesmo recurso. As implementações de P (s) e de V (s) são fornecidas abaixo em pseudo-
código:

P(s): s.counter = s.counter -1; V(s): s.counter = s.counter +1;


se s.valor < 0 então se s.valor <= 0 então
Insere processo Pc em s.queue; Retira processo Pn de s.queue;
Passa processo Pc para BLOQUEADO; Passa processo Pn para APTO;
retorna; retorna;

onde Pc é o processo chamador da operação P e o processo Pn é o processo desbloqueado pela chamada de V


executada por um outro processo. Considerando que essas primitivas podem ser chamadas de forma concorrente
por vários processos ou threads responda: (i) há seções críticas na implementação das operações P e V ? Em
caso afirmativo, onde e porquê? Em caso negativo, diga o porquê da não existência; (ii) como - se for o caso -
essa, ou essas operações, devem ser corrigidas?

106. O cálculo do fractal de Mandelbrot efetua um critério de convergência para um ponto de coordenada (x’,y’) em
um plano de dimensão (X,Y). O cálculo efetuado sobre um ponto independe dos pontos vizinhos.
Um aluno de INF01142 resolveu fazer uma versão multithreaded do programa que gera o fractal de Mandebrot.
Para isso, ele define uma pilha de tarefas onde cada elemento da pilha é uma linha da imagem do fractal a ser
calculado. Dessa forma, por exemplo, para uma imagem de 512 x 512 pontos, existem 512 tarefas a serem
realizadas. Na função main é criado um conjunto de n threads de cálculo.
Cada thread recupera uma tarefa da pilha (uma linha) e calcula a convergência dos pontos dessa linha. O resul-
tado é armazenado em um área de memória. Ao terminar uma tarefa, a thread verifica se ainda há tarefas na pilha
(linhas) esperando para serem avaliadas. Em havendo, recupera uma nova tarefa, calcula, e esse procedimento
é repetido até que não haja mais tarefas na pilha. A medida que as threads vão encontrando a pilha vazia, elas
terminam sua execução. A main espera a conclusão (término) das n threads de cálculo e, na sequência, a partir
dos dados armazenados em memória, gera um arquivo jpeg com a imagem do fractal.
O processador da máquina onde o programa é executado possui dois cores físicos (dual core sem hyperthread-
ing).

(A) Considerando que quando é executado com apenas uma thread (n = 1) o programa leva x u.t. (unidades de
tempo) até a sua conclusão, teoricamente, em quanto tempo, aproximadamente, a versão multithreaded
seria executada com: (i) duas threads de cálculo (n = 2); (ii) quatro threads de cálculo (n = 4) e; (iii) oito
threads de cálculo (n = 8)?
(B) Há diferenças em sua resposta do item (A) caso o processador empregado fosse um processador dual core
com suporte a hyperthreading? SIM ou NÃO? Se houver, quais são essas diferenças? JUSTIFIQUE.
(C) Há regiões críticas na implementação de Mandelbrot descrita acima (versão multithread)? Se sim, identi-
fique a região crítica e diga como evitar condições de corrida. Se não houver, EXPLIQUE o porquê.
(D) O modelo de implementação de threads (N:1 ou 1:1) tem influência nas respostas anteriores? JUSTI-
FIQUE.

107. Considere a existência de um quadrado com coordenadas (0;0), (0;1), (1;0) e (1;1) com um círculo de raio 0.5
em seu interior, centrado na coordenada (0,5; 0,5). É possível estimar o valor de π/4 gerando randomicamente
coordenadas (x,y) no intervalo [0,1] e verificando se cada uma delas pertence ou não ao interior do círculo dentro
do quadrado. Deve-se contabilizar a quantidade total de coordenadas geradas (n) e a quantidade que estão dentro
do círculo (m). A razão entre o número total de coordenadas geradas (n) e a quantidade de coordenadas dentro
do círculo (m), fornece uma aproximação de π/4.
Um aluno de INF01142 resolveu fazer uma versão multithread do algoritmo descrito acima para melhorar o de-
sempenho em relação a uma implementação puramente sequencial. Nesse caso, a área delimitada pelo quadrado

12
foi "fatiada" - sem sobreposição - entre t threads. Cada thread recebe uma "fatia" e executa o procedimento
acima, ou seja, gera randomicamente coordenadas dentro da sua "fatia" e verifica se elas pertencem ou não ao
interior do círculo. No final, todas as threads se sincronizam com a thread main e informam a quantidade total
de coordenadas que randomizaram e quantas estavam dentro da parcela do círculo pertencente a sua "fatia".
Com base nisso, RESPONDA:

(A) Supondo que a versão sequencial desse programa leva δ u.t. (unidades de tempo), teoricamente, em quanto
tempo, aproximadamente, ele seria executado se fosse implementado com (i) uma única thread, (ii) duas
threads e; (iii) com quatro threads, em um processador dual core?
(B) Há diferenças em sua resposta do item (A) se fosse empregdo um processador dual core com suporte a
hyperthreading habilitado? Sim ou Não? Quais, se houver. JUSTIFIQUE.
(C) Há regiões críticas na implementação concorrente do estimador de π/4? Se sim, identifique a região crítica
e diga como evitar condições de corrida. Se não, EXPLIQUE o porquê.
(D) O modelo de implementação de threads (N:1 ou 1:1) tem influência nas respostas anteriores? JUSTI-
FIQUE.

108. Um analista de sistemas foi encarregado de desenvolver um sistema de reserva de passagens aéreas. Os voos e
a ocupação dos lugares estão em um banco de dados que é acessado de forma concorrente por processos através
de duas primitivas básicas:

int GetPlaceFree(int FlightNumberCode, struct DayMonthYear);


void Reservation(int Place, int FlightNumberCode, struct DayMonthYear);

A função GetP laceF ree retorna um código de poltrona livre em um determinado voo e a função Reservation
torna indisponível (ocupada) a poltrona identificada por P lace. Esse analista deve se preocupar com problemas
de exclusão mútua? EXPLIQUE. Se for o caso, diga como esse problema pode ser resolvido apresentando e
explicando sua solução com um pseudo-código.
109. Em relação a conceitos de programação concorrente. Compare o mecanismo de mutex com o de semáforos?
Aborde os aspectos de primitivas empregadas e finalidade de cada um desses mecanismos. Diga ainda se eles
podem ser usados tanto por threads como por processos.
110. Considere a instrução de máquina SWAP, que troca de forma atômica (indivisível) o conteúdo de uma posição
de memória (M) com o conteúdo de um registrador (R). A instrução SWAP pode ser definida da seguinte forma:

SWAP(R,M){temp=R; R=M; M=temp;}

Implemente em pseudo-código as operações P (s) e V (s) para semáforos binários usando SWAP. (Dica: M é
uma posição de memória compartilhada e cada processo possui uma cópia privativa do registrador R)
Considerar que zero indica semáforo ocupado e um valor diferente de zero indica semáforo livre.
111. Qual a diferença conceitual entre mutexes e semáforos? (Em outros termos, qual o objetivo de um e de outro?
O que diferencia o funcionamento de um e de outro? Como suas primitivas básicas são empregadas pelos
processos)
112. Considerando a afirmativa: "Para implementar semáforos é imprescindível a existência do mecanismo de mu-
tex". Essa afirmativa está correta? JUSTIFIQUE SUA RESPOSTA.
113. Em que circunstâncias é interessante utilizar um mecanismo do tipo spin-lock?
114. A exclusão mútua deve obedecer quatro propriedades. Quais são essas propriedades? Exemplifique, com base
nos mecanismos estudados em aula, quais condições esses mecanismos não satisfazem. Mecanismos estudados:
desabilitação de interrupções, variáveis especiais do tipo lock (sem o emprego de instruções especializadas do
tipo compare and store ou test and set).
115. Considerando a instrução de máquina TSB, hipotética, que realiza de forma atômica a seguinte operação:

TSB(X,L): {if X==0 goto L else X=0}

13
que testa o conteúdo de uma variável X e dependendo desse teste executa um desvio para a posição de memória
L (label) ou atribui o valor zero para X e continua a execução na instrução seguinte a TSB. Implemente, em
pseudo-código, as primitivas P e V para semáforos binários usando a instrução TSB como base.

116. Responda: O que é seção crítica? Em que situações elas aparecem? Porque é importante que um processo
(thread) execute uma seção crítica o mais rapidamente possível? Que mecanismo(s) pode(m) ser usado(s) para
proteger uma seção crítica?
117. Responda O que acontece quando um processo executa uma operação V sobre um semáforo S sem ter previa-
mente executado uma operação P sobre esse semáforo?
118. Em aula foi analisado que um acesso concorrente a um comando do tipo counter=counter+1 por duas ou mais
threads leva a uma condição de corrida. Suponha que o compilador traduza esse comando para:

MOV R, counter ;Registrador R recebe conteúdo da posição de memória counter


INC R ;incrementa R
MOV counter,R ;Posição de memória counter recebe conteúdo do registrador R

Responda: (i) Como o problema da condição de corrida pode ser resolvido? (ii) O tipo de escalonador, preemp-
tivo ou não preemptivo, aliado ao tipo do processador físico, se multicore ou monocore, influência na existência
ou não desta condição de corrida? JUSTIFIQUE sua resposta. (IMPORTANTE: Lembre que há quatro combi-
nações possíveis.)

14

Você também pode gostar