Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA DE TELEINFORMÁTICA CURSO DE ENGENHARIA DE COMPUTAÇÃO EXERCÍCIOS DE REVISÃO - MÓDULO 0 LAIS BRANDÃO GADELHA - 378606 Fortaleza/CE 2020 1. Quais são as duas principais funções de um sistema operacional? Fornecer a programadores de aplicativos (e programas aplicativos, claro) um conjunto de recursos abstratos limpo em vez de recursos confusos de hardware, e gerenciar esses recursos de hardware. 9. Há várias metas de projeto na construção de um sistema operacional, por exemplo, utilização de recursos, oportunidade, robustez e assim por diante. Dê um exemplo de duas metas de projeto que podem contradizer uma à outra. O escalonamento do sistema e a confiabilidade. O escalonamento possibilita executar os processos mais viáveis e concorrentes, priorizando determinados tipos de processos, mas se trata de uma atividade complicada já que nenhum algoritmo é totalmente eficiente e a prova de falhas. O que torna o sistema menos confiável. 10. Qual é a diferença entre modo núcleo e modo usuário? Explique como ter dois modos distintos ajuda no projeto de um sistema operacional. No modo núcleo a CPU pode executar qualquer instrução de sua arquitetura, já no modo usuário somente um subconjunto das instruções é permitido. Desta forma, programas criados pelos usuários rodam no modo usuário e não terão acesso a recursos críticos do sistema diretamente. 14. Um computador tem um pipeline com quatro estágios. Cada estágio leva um tempo para fazer seu trabalho, a saber, 1 ns. Quantas instruções por segundo essa máquina consegue executar? 3 ns para a primeira instrução descer o pipeline. 10^9 ns (1 segundo * 10^9). 10^9 - 3 = 999999997 instruções. 25. Qual é a diferença essencial entre um arquivo especial de bloco e um arquivo especial de caractere? Arquivos especiais de bloco são usados para modelar dispositivos que consistem em uma coleção de blocos aleatoriamente endereçáveis, como discos. Já, arquivos especiais de caracteres são usados para modelar impressoras, modems e outros dispositivos que aceitam ou enviam um fluxo de caracteres. 29. A Figura 1.23 mostra que uma série de chamadas de sistema UNIX não possuem equivalentes na API Win32. Para cada uma das chamadas listadas como não tendo um equivalente Win32, quais são as consequências para um programador de converter um programa UNIX para ser executado sob o Windows? Ele deve procurar procedimentos com funcionalidades similares aos do Unix, ou com mesmo efeito para o usuário final. Utilizar chamadas API Win32 que correspondem mais ou menos à funcionalidade das chamadas UNIX. 31. Explique como a separação da política e mecanismo ajuda na construção de sistemas operacionais baseados em micronúcleos. Considere o escalonamento de processos. Um algoritmo de escalonamento relativamente simples é designar uma prioridade numérica para todo processo e então fazer que o núcleo execute o processo mais prioritário e que seja executável. O mecanismo — no núcleo — é procurar pelo processo mais prioritário e executá-lo. A política — designar prioridades para processos — pode ser implementada por processos de modo usuário. Dessa maneira, política e mecanismo podem ser desacoplados e o núcleo tornado menor. https://pt.wikipedia.org/wiki/Processo_(inform%C3%A1tica) 34. Escreva um shell que seja similar à Figura 1.19, mas contenha código suficiente para que ela realmente funcione, de maneira que você possa testá-lo. Talvez você queira acrescentar alguns aspectos como o redirecionamento de entrada e saída, pipes e tarefas de segundo plano. #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(){ pid_t filho; int i, status; filho = fork(); if(filho == 0){ printf("Filho \n"); for (i=0; i<4; i++){ printf("%d\n",i); sleep(1); } _exit(0); } else{ wait(filho, &status, 0); printf("Pai \n"); } return 0; } 35. Se você tem um sistema tipo UNIX (Linux, MINIX 3, FreeBSD etc.) disponível que possa seguramente derrubar e reinicializar, escreva um script de shell que tente criar um número ilimitado de processos filhos e observe o que acontece. Antes de realizar o experimento, digite sync para o shell para limpar os buffers de sistema de arquivos para disco para evitar arruinar o sistema de arquivos. Você também pode fazer o experimento seguramente em uma máquina virtual. Nota: não tente fazer isso em um sistema compartilhado sem antes conseguir a permissão do administrador do sistema. As consequências serão de imediato óbvias, então é provável que você seja pego e sofra sanções. Para realizar essa atividade utilizaremos um método chamado “fork bomb”,que se trata de um código que tenha a função e a capacidade de se replicar indefinidamente. #include <stdio.h> #include <sys/type.h> int main(){ while(1) fork(); return 0; } 36. Examine e tente interpretar os conteúdos de um diretório tipo UNIX ou Windows com uma ferramenta como o programa UNIX od. (Dica: como você vai fazer isso depende do que o sistema operacional permitir. Um truque que pode funcionar é criar um diretório em um pen drive com um sistema operacional e então ler os dados brutos do dispositivo usando um sistema operacional diferente que permita esse acesso.) O comando od basicamente, é ler os bytes de um arquivo de entrada e imprimi-los em uma série de formatos, como octal, hexadecimal e decimal. A primeira coluna da saída representa o offset do primeiro byte da coluna da frente. Por padrão, esse offset vem na base octal. As demais colunas representam os dados do arquivo.
Compartilhar