Você está na página 1de 3

Sistemas Operacionais 2017.

2: Lista de exercícios - Unidade 1

Capítulo 1 - Introdução a Sistemas Operacionais

1. Quais são as três finalidades principais de um sistema operacional?

2. De que modo a diferença entre modalidade de kernel e modalidade de usuário funciona


como um tipo rudimentar de sistema de proteção (segurança)?

3. Quais das instruções a seguir devem ser privilegiadas?


a. Configurar o valor do temporizador (​timer​).
b. Ler o relógio.
c. Limpar a memória.
d. Emitir uma instrução de exceção.
e. Desativar interrupções.
f. Modificar entradas na tabela de ​status​ de dispositivos.
g. Passar da modalidade de usuário para a de kernel.
h. Acessar dispositivo de I/O.

4. Cite duas razões que tornam os ​caches​ úteis. Que problemas eles resolvem? Que
problemas eles causam? Se um ​cache​ pode ser aumentado até o tamanho do
dispositivo para o qual está armazenando (por exemplo, um cache tão extenso quanto
um disco), por que não lhe dar esse tamanho e eliminar o dispositivo?

5. Em um ambiente de multiprogramação e tempo compartilhado, vários usuários


compartilham o sistema simultaneamente. Essa situação pode resultar em diversos
problemas de segurança.
a. Cite dois desses problemas.
b. Podemos assegurar o mesmo nível de segurança em uma máquina de tempo
compartilhado como em uma máquina dedicada? Explique sua resposta.

6. Qual é o objetivo das interrupções? Em que uma interrupção difere de uma exceção?
As exceções podem ser geradas intencionalmente por um programa de usuário? Caso
possam, com que propósito?

Capítulo 2 - Estruturas do Sistema Operacional

7. Qual é a finalidade das chamadas de sistema?


8. Qual é a finalidade do interpretador de comandos? Por que ele é, usualmente, separado
do kernel?

9. Qual é a finalidade dos programas de sistema?

10. Qual é a principal vantagem da abordagem em camadas para o projeto de sistemas?


Quais as desvantagens da abordagem em camadas?

11. Liste cinco serviços fornecidos por um sistema operacional e explique como cada um
deles é conveniente para os usuários. Em que casos seria impossível que programas
de nível de usuário fornecessem esses serviços? Explique sua resposta.

12. Como um sistema poderia ser projetado para permitir a escolha de sistemas
operacionais a partir dos quais realizar a inicialização? O que o programa ​bootstrap
teria de fazer?

13. Os serviços e funções fornecidos por um sistema operacional podem ser divididos em
duas categorias principais. Descreva resumidamente as duas categorias e discuta em
que elas diferem.

14. Quais são os dois modelos de comunicação entre processos? Quais são os pontos forte
e fracos das duas abordagens?

15. Qual é a principal vantagem da abordagem de ​microkernel​ para o projeto de sistemas?


Como os programas de usuário e serviços do sistema interagem em uma arquitetura de
microkernel​? Quais são as desvantagens do uso da abordagem de ​microkernel​?

16. Quais são as vantagens do uso de módulos de ​kernel​ carregáveis?

Capítulo 3 - Processos

17. Quais são os possíveis estados de um processo? Explique cada um.

18. Descreva as diferenças entre o scheduling de curto prazo, de médio prazo e de longo
prazo.

19. Descreva as ações executadas por um kernel para a mudança de contexto entre
processos.

20. Incluindo o processo-pai inicial, quantos processos são criados pelo programa mostrado
no código abaixo?

#include <stdio.h>
#include <unistd.h>
int main()
{
int i;
for (i = 0; i < 4; i++)
fork();
return 0;
}

Prática​: Construa uma árvore de processos no seu sistema operacional. Para obter
informações sobre processos do sistema UNIX ou Linux, use o comando ps —ael. Use o
comando man ps para obter mais informações sobre o comando ps. O gerenciador de
tarefas, nos sistemas Windows, não fornece a ID do processo-pai, mas a ferramenta
monitor de processos​, disponível em technet.microsoft.com, fornece uma ferramenta de
árvore de processos.

Capítulo 4 - Threads

21. Forneça dois exemplos de programação em que a criação de múltiplas threads


proporciona melhor desempenho do que uma solução com uma única thread.

22. Forneça dois exemplos de programação em que a criação de múltiplas threads ​não
proporciona melhor desempenho do que uma solução com uma única thread.

23. Cite duas diferenças entre threads de nível de usuário e threads de nível de kernel. Sob
que circunstâncias um tipo é melhor do que o outro?

24. Que recursos são usados quando um thread é criada? Em que eles diferem daqueles
usados quando um processo é criado?

25. Considere um sistema ​multicore​ e um programa com múltiplos ​threads​ escrito com o
uso do modelo muitos-para-muitos de criação de threads. Faça o número de ​threads​ de
nível de usuário no programa ser maior do que o número de núcleos de processamento
no sistema. Discuta as implicações de desempenho dos cenários a seguir.
a. O número de threads do kernel alocados ao programa é menor do que o número de
núcleos de processamento.
b. O número de threads do kernel alocados ao programa é igual ao número de núcleos de
processamento.
c. O número de threads do kernel alocados ao programa é maior do que o número de
núcleos de processamento, porém menor do que o número de threads de nível de
usuário.