Buscar

Exercícios de revisão - Módulo 0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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.

Continue navegando