Exercícios Práticos Resolvidos - 2
2.1. Qual é o propósito das chamadas do sistema?
Resposta: As chamadas do sistema (system calls) são interfaces que permitem que programas de usuário solicitem serviços ao sistema operacional. Elas atuam como uma ponte entre o software de aplicação e o hardware, permitindo que os programas realizem operações como leitura/escrita de arquivos, criação de processos, comunicação entre processos e acesso a dispositivos de hardware.
Explicação: Imagine que você está escrevendo um programa e precisa ler um arquivo do disco. Em vez de acessar o disco diretamente (o que seria complexo e inseguro), você usa uma chamada de sistema como
read()
. O sistema operacional cuida de todos os detalhes de baixo nível, como acessar o hardware e garantir que o arquivo seja lido corretamente.
2.2. Quais são as cinco principais atividades de um sistema operacional em relação ao gerenciamento de processos?
Resposta:
Criação e término de processos: Criar novos processos (ex.: ao abrir um programa) e encerrá-los quando não são mais necessários.
Escalonamento de processos: Decidir qual processo deve ser executado pela CPU em um determinado momento.
Sincronização de processos: Garantir que processos que compartilham recursos não interfiram uns com os outros.
Comunicação entre processos: Permitir que processos troquem informações (ex.: mensagens ou memória compartilhada).
Gerenciamento de deadlocks: Evitar ou resolver situações em que processos ficam bloqueados esperando por recursos que nunca serão liberados.
Explicação: O sistema operacional age como um "gerente" dos processos, garantindo que todos tenham acesso justo aos recursos e que o sistema funcione de forma eficiente e segura.
2.3. Quais são as três principais atividades de um sistema operacional em relação ao gerenciamento de memória?
Resposta:
Alocação de memória: Distribuir a memória disponível para os processos que precisam dela.
Proteção de memória: Garantir que um processo não acesse a memória de outro processo sem permissão.
Gerenciamento de memória virtual: Usar técnicas como paginação e segmentação para expandir a memória disponível e otimizar o uso da memória física.
Explicação: O sistema operacional gerencia a memória para evitar conflitos e garantir que cada processo tenha o espaço necessário para executar suas tarefas.
ww
2.4. Quais são as três principais atividades de um sistema operacional em relação ao gerenciamento de armazenamento secundário?
Resposta:
Gerenciamento de espaço livre: Controlar quais áreas do disco estão disponíveis para armazenar novos dados.
Alocação de espaço: Atribuir espaço no disco para arquivos e diretórios.
Gerenciamento de disco: Otimizar o acesso aos dados no disco (ex.: agendamento de operações de leitura/escrita).
Explicação: O sistema operacional organiza o armazenamento secundário (como discos rígidos ou SSDs) para garantir que os dados sejam armazenados e recuperados de forma eficiente.
2.5. Qual é a finalidade do interpretador de comandos? Por que, normalmente, ele é separado do kernel?
Resposta: O interpretador de comandos (ou shell) é um programa que permite aos usuários interagir com o sistema operacional, executando comandos e scripts. Ele é separado do kernel para:
Flexibilidade: Diferentes interpretadores de comandos (ex.: Bash, PowerShell) podem ser usados sem modificar o kernel.
Segurança: Se o interpretador de comandos falhar, o kernel não é afetado.
Facilidade de desenvolvimento: Novos interpretadores podem ser criados sem alterar o núcleo do sistema.
Explicação: Imagine o shell como um "tradutor" entre o usuário e o sistema operacional. Ele recebe comandos do usuário, traduz para chamadas de sistema e envia ao kernel para execução.
2.6. Quais chamadas do sistema precisam ser executadas por um interpretador de comandos ou shell a fim de iniciar um novo processo?
Resposta:
fork(): Cria uma cópia do processo atual (o processo filho).
exec(): Substitui o código do processo filho pelo código de um novo programa.
wait(): Espera que o processo filho termine (opcional).
Explicação: Quando você digita um comando no shell, ele usa
fork()
para criar um novo processo eexec()
para carregar o programa que você quer executar. Owait()
é usado se o shell precisar esperar o término do processo.
2.7. Qual é a finalidade dos programas do sistema?
Resposta: Os programas do sistema (ou utilitários) fornecem ferramentas para gerenciar e interagir com o sistema operacional. Eles incluem editores de texto, compiladores, gerenciadores de arquivos e ferramentas de rede.
Explicação: Esses programas facilitam tarefas como editar arquivos, compilar código, gerenciar arquivos e configurar redes, sem que o usuário precise escrever código complexo.
2.8. Qual é a principal vantagem da técnica de camadas para o projeto do sistema? Quais são as desvantagens do uso da técnica de camadas?
Resposta:
Vantagem: Facilita a depuração e manutenção, pois cada camada pode ser testada e modificada independentemente.
Desvantagens:
Overhead: A comunicação entre camadas pode adicionar custos de desempenho.
Complexidade: Definir as camadas de forma adequada pode ser difícil.
Explicação: Imagine o sistema operacional como um prédio com vários andares (camadas). Cada andar tem uma função específica, mas subir e descer entre eles pode ser lento.
2.9. Relacione cinco serviços fornecidos por um sistema operacional e explique como cada um cria conveniência para os usuários. Em que casos seria impossível que os programas no nível do usuário provessem esses serviços?
Resposta:
Gerenciamento de arquivos: Permite criar, ler e organizar arquivos. Programas de usuário não poderiam acessar o disco diretamente sem o sistema operacional.
Gerenciamento de memória: Aloca memória para programas. Sem o sistema operacional, os programas poderiam colidir e corromper a memória.
Escalonamento de processos: Decide qual programa roda na CPU. Programas de usuário não têm visão global do sistema para tomar essa decisão.
Proteção e segurança: Impede que programas maliciosos acessem recursos indevidos. Programas de usuário não têm controle sobre o hardware.
Comunicação entre processos: Permite que programas troquem dados. Programas de usuário não poderiam coordenar isso sem o sistema operacional.
Explicação: O sistema operacional age como um "guardião" que gerencia recursos e garante que tudo funcione de forma segura e eficiente.
2.10. Por que alguns sistemas armazenam o sistema operacional no firmware, enquanto outros o armazenam no disco?
Resposta:
Firmware: Usado em dispositivos embarcados (ex.: smartphones, IoT) para simplicidade e operação reforçada. O sistema operacional é carregado diretamente da memória não volátil.
Disco: Usado em PCs e servidores para flexibilidade e facilidade de atualização. O sistema operacional é carregado do armazenamento secundário (SSD/HDD).
Explicação: Dispositivos pequenos e especializados usam firmware para economizar espaço e garantir operação confiável, enquanto sistemas maiores usam disco para permitir atualizações e personalização.
2.11. Como um sistema poderia ser projetado para permitir uma escolha de sistemas operacionais para o boot do sistema? O que o programa de boot precisaria fazer?
Resposta:
Dual Boot/Multi Boot: O programa de boot (ex.: GRUB) permite escolher entre vários sistemas operacionais instalados no disco.
Funcionamento:
O programa de boot carrega uma lista de sistemas operacionais disponíveis.
O usuário seleciona o sistema desejado.
O programa de boot carrega o kernel do sistema operacional escolhido na memória.
Explicação: Imagine o programa de boot como um "menu" que permite escolher entre Windows, Linux ou outro sistema operacional instalado no computador.