Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMÁTICA E ESTATÍSTICA DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS (MATA58 E MAT566) / PROFESSOR: DR. ALIRIO SÁ LISTA DE EXERCÍCIOS 02 Questões traduzidas / adaptadas de: • Tanenbaum, A. S. "Modern Operating Systems" (Chapter 2), 3rd ed, Pearson Hall, 2008. • Mazeiro, C. A. “Sistemas Operacionais: Conceitos e Mecanismos”, DINF – UFPR, 2019. Página 1/2 1. Relacione as afirmações abaixo aos respectivos estados no ciclo de vida das tarefas (N: Nova, P: Pronta, E: Executando, S: Suspensa, T: Terminada): a. [ ] O código da tarefa está sendo carregado. b. [ ] A tarefas são ordenadas por prioridades. c. [ ] A tarefa sai deste estado ao solicitar uma operação de entrada/saída. d. [ ] Os recursos usados pela tarefa são devolvidos ao sistema. e. [ ] A tarefa vai a este estado ao terminar seu quantum. f. [ ] A tarefa só precisa do processador para poder executar. g. [ ] O acesso a um semáforo em uso pode levar a tarefa a este estado. h. [ ] A tarefa pode criar novas tarefas. i. [ ] Há uma tarefa neste estado para cada processador do sistema. j. [ ] A tarefa aguarda a ocorrência de um evento externo. 2. Na Figura abaixo, três estados de processo são apresentados. Na teoria, com três estados, poderiam existir seis possíveis transições de estado, dois para cada estado. Entretanto, apenas quatro transições são mostradas. Existe alguma circunstância na qual alguma ou ambas das transições que faltam possam ocorrer? Figura 1 - Diagrama de Estados de um Processo (Fonte: Tanenbaum, 2008. Modern Operating Systems, 3rd ed.) 3. Explique o que é, para que serve e o que contém um TCB ( Task Control Block). 4. O que são threads e para que servem? 5. Quais as principais vantagens e desvantagens de threads em relação a processos? 6. Qual a principal vantagem de implementar threads no espaço de usuário? E qual a maior desvantagem? 7. Forneça dois exemplos de problemas cuja implementação multi-thread não tem desempenho melhor que a respectiva implementação sequencial. 8. Em todos os computadores modernos, pelo menos parte dos manipuladores de interrupção são escritos em linguagem de montagem. Por quê? 9. Na Figura abaixo, o conjunto de registradores é listado por thread ao invés de por processo. Por quê? Afinal, todas máquinas possuem apenas um conjunto de registradores. Figura 2 - Coluna 1, itens compartilhados por todos os threads de um processo. Coluna 2, itens privativos de cada thread (Fonte: Tanenbaum, 2008. Modern Operating Systems, 3rd ed.) 10. Quando uma interrupção ocorre ou quando uma chamada de sistema transfere o controle para o SO, uma área da pilha do kernel separada da pilha do processo interrompido é geralmente usada. Por quê? 11. Se um processo multithread realiza um fork, um problema pode ocorrer se os processos filhos obtêm uma cópia de cada um dos threads do processo pai. Por exemplo, suponha que um dos threads do processo original estava esperando por uma entrada pelo teclado. Agora, após o fork, duas threads estão aguardando por uma entrada pelo teclado, uma em cada processo. Este problema acontecer em processos de thread única (i.e. single-thread)? 12. Desenhe o diagrama de tempo da execução do código a seguir, informe qual a saída do programa na tela (com os valores de x) e calcule a duração aproximada de sua execução. Dica: Para uma breve descrição sobre como construir de um diagrama de tempo, acesse: http://wiki.inf.ufpr.br/maziero/doku.php?id=so:diagrama_de_tempo. Figura 3 - (Fonte: Mazeiro, 2019 - Sistemas Operacionais: Conceitos e Mecanismos) 13. Indique quantas letras “X” serão impressas na tela pelo programa abaixo quando for executado com a seguinte linha de comando: a.out 4 3 2 1 O comando a.out resulta da compilação do programa a seguir: Figura 4 - (Fonte: Mazeiro, 2019 - Sistemas Operacionais: Conceitos e Mecanismos) http://wiki.inf.ufpr.br/maziero/doku.php?id=so:diagrama_de_tempo UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMÁTICA E ESTATÍSTICA DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS (MATA58 E MAT566) / PROFESSOR: DR. ALIRIO SÁ LISTA DE EXERCÍCIOS 02 Questões traduzidas / adaptadas de: • Tanenbaum, A. S. "Modern Operating Systems" (Chapter 2), 3rd ed, Pearson Hall, 2008. • Mazeiro, C. A. “Sistemas Operacionais: Conceitos e Mecanismos”, DINF – UFPR, 2019. Página 2/2 14. Associe as afirmações a seguir aos seguintes modelos de threads: a) muitos-para-um (N:1); b) um-para-um (1:1); c) muitos-para-muitos (N:M): a. Tem a implementação mais simples, leve e eficiente. b. Multiplexa os threads de usuário em um pool de threads de núcleo. c. Pode impor uma carga muito pesada ao núcleo. d. Não permite explorar a presença de várias CPUs pelo mesmo processo. e. Permite uma maior concorrência sem impor muita carga ao núcleo. f. Geralmente implementado por bibliotecas. g. É o modelo implementado no Windows NT e seus sucessores. h. Se um thread bloquear, todos os demais têm de esperar por ele. i. Cada thread no nível do usuário tem sua correspondente dentro do núcleo. j. É o modelo com implementação mais complexa. 15. O modelo da Figura abaixo é adequado para implementar um servidor de arquivos com cache em memória? Por quê? Seria possível que cada processo tivesse sua cache? Figura 5 - Três processos, cada um com seu próprio thread (Fonte: Tanenbaum, 2008. Modern Operating Systems, 3rd ed.) 16. A Figura abaixo apresenta um Servidor Web multithread. Se a única forma de leitura de um arquivo web for a partir de um procedimento read implementado como uma chamada de sistema bloqueante, então a implementação do servidor web seria mais adequada usando threads no nível do usuário ou no nível do kernel? Por quê? Figura 6 - Servidor Web Multithread (Fonte: Tanenbaum, 2008. Modern Operating Systems, 3rd ed.) 17. Considerando as implementações de threads N:1 e 1:1 para o trecho de código a seguir: a. Desenhe os diagramas de execução; b. Informe as durações aproximadas de execução; c. Indique a saída do programa na tela. Considere a operação sleep() como uma chamada de sistema (syscall). A chamada thread_create cria um thread, thread_exit encerra o thread corrente e thread_join espera o encerramento do thread informado como parâmetro. Figura 7 - (Fonte: Maziero, C. A. Sistemas Operacionais: Conceitos e Mecanismos, 2019)
Compartilhar