Baixe o app para aproveitar ainda mais
Prévia do material em texto
Baseado nos vídeos das Aulas 22-25/02/2021 Para resolver as questões e o laboratório proposto, leia os livros de Sistemas Operacionais – Cap. 2 e 3 - Conceitos e Mecanismos – Prof. Mazieiro e as páginas 35 à 56 SO Modernos 4° Edição -Andrew S. Tanenbaum Herbert Bos. 1.O que diferencia o núcleo do restante do sistema operacional? Núcleo é o coração do sistema operacional, responsável pela gerência dos recursos do hardware usados pelas aplicações. Ele também implementa as principais abstrações utilizadas pelos aplicativos e programas utilitários 2. Seria possível construir um sistema operacional seguro usando um processador que não tenha níveis de privilégio? Por quê? Não porque uma aplicação com acesso pleno ao hardware seriam um risco à segurança, pois poderia contornar facilmente os mecanismos de controle de acesso aos recursos (tais como arquivos e áreas de memória). Sem os privilégios uma aplicação por exemplo pode acessar a placa de rede para enviar ou receber dados. 3. Os processadores da família x86 possuem dois bits para definir o nível de privilégio, resultando em 4 níveis distintos. A maioria dos sistemas operacionais para esses processadores usam somente os níveis extremos (0 e 3). Haveria alguma utilidade para os níveis intermediários? A maioria dos SO's utilizam apenas 2 níveis para diferenciar os privilégios, então depende do sistema. Ou seja se o sistema operacional fizesse uso dos níveis intermediários. 4. Quais as diferenças entre interrupções, exceções e traps? Interrupções: são gerados por eventos externos ao processador, ocorridos nos dispositivos periféricos e reportados por seus controladores. Disciplina: Sistemas Operacionais Prof. Agnaldo, da Costa Ementa: Classificação dos Sistemas Operacionais, Estruturas de Sistemas Operacionais, Elementos de Hardware, Chamadas de Sistemas. Exceções: são gerados por procedimentos internos do processador. Traps: são interrupções acionadas intencionalmente no código, afim de alterar o nível de privilégio do processador para executar certo procedimento. 5. O comando em linguagem C fopen é uma chamada de sistema ou uma função de biblioteca? Por quê? O comando em linguagem C 'fopen' é uma função da biblioteca 'STDIO.H', possuindo parâmetros para a chamada da função. Dentro da função existe a chamada de sistema para utilização dos recursos necessários à execução plena da função. 6. A operação em modo usuário permite ao processador executar somente parte das instruções disponíveis em seu conjunto de instruções. Quais das seguintes operações não deveriam ser permitidas em nível usuário? Por quê? (a) Ler uma porta de entrada/saída (b) Efetuar uma divisão inteira (c) Escrever um valor em uma posição de memória (d) Ajustar o valor do relógio do hardware (e) Ler o valor dos registradores do processador (f) Mascarar uma ou mais interrupções Letra C e F. Por que aplicativos e utilitários devem ter acesso mais restrito ao hardware, para não interferir nas configurações e na gerência, o que poderia desestabilizar o sistema inteiro. Além disso, aplicações com acesso pleno ao hardware seriam um risco à segurança, pois poderiam contornar facilmente os mecanismos de controle de acesso aos recursos (tais como arquivos e áreas de memória). 7. Considerando um processo em um sistema operacional com proteção de memória entre o núcleo e as aplicações, indique quais das seguintes ações do processo teriam de ser realizadas através de chamadas de sistema, justificando suas respostas: (a) Ler o relógio de tempo real do hardware. (b) Enviar um pacote através da rede. (c) Calcular uma exponenciação. (d) Preencher uma área de memória do processo com zeros. (e) Remover um arquivo do disco. O confinamento de cada aplicação em sua área de memória, imposto pela MMU aos acessos em memória em nível usuário, provê robustez e confiabilidade ao sistema, pois garante que uma aplicação não poderá interferir nas áreas de memória de outras aplicações ou do núcleo. Então teria que ser realizada uma chamada de sistema, pois somente o núcleo teria acesso direto à memória. A ativação de uma rotina do núcleo usando esse mecanismo é denominada chamada de sistema. 8. Coloque na ordem correta as ações abaixo, que ocorrem durante a execução da função printf("Hello world") por um processo (observe que nem todas as ações indicadas fazem parte da sequência). () A rotina de tratamento da interrupção de software é ativada dentro do núcleo. (5) A função printf finaliza sua execução e devolve o controle ao código do processo. (2) A função de biblioteca printf recebe e processa os parâmetros de entrada (a string “Hello world”). (3) A função de biblioteca printf prepara os registradores para solicitar a chamada de sistema write() () O disco rígido gera uma interrupção indicando a conclusão da operação. () O escalonador escolhe o processo mais prioritário para execução. () Uma interrupção de software é acionada. (1) O processo chama a função printf da biblioteca C. (4) A operação de escrita no terminal é efetuada ou agendada pela rotina de tratamento da interrupção. () O controle volta para a função printf em modo usuário. 9. Monte uma tabela com os benefícios e deficiências mais relevantes das principais arquiteturas de sistemas operacionais. Arquitetura Benefícios Deficiências Arquitetura monolítica Desempenho Robustez do sistema, Manutenção e evolução do núcleo mais complexas, ou seja uma maior dificuldade de desenvolvimento. Arquitetura micronúcleo Maior modularidade (cada serviço pode ser desenvolvido de forma independente dos demais); mais flexibilidade, pois os serviços podem ser carregados e desativados conforme a necessidade; e mais robustez, pois caso um serviço falhe, somente ele será afetado, devido ao confinamento de memória entre os serviços. Perda de desempenho devido a troca de mensagens entre dispositivos. Arquitetura em camadas Robustez e organização Desempenho menor devido ao empilhamento das camadas, nem sempre a divisão de funcionalidades do sistema em camadas é óbvia Arquitetura Máquinas Virtuais Portabilidade das aplicações a vários tipos de hardware Custo adicional de execução na máquina virtual 10. Qual é a diferença entre sistemas de compartilhamento de tempo e de multiprogramação? A diferença entre o sistema de compartilhamento de tempo e de multiprogramação está no funcionamento de cada um. Os sistemas de compartilhamento de tempo, também chamados de time-sharing, possibilitam que vários programas sejam executados através de uma divisão de tempo do processador em intervalos curtos. Nessa solução, para cada atividade que recebe o processador é definido um prazo de processamento, denominado fatia de tempo. Esgotado seu tempo, a tarefa em execução perde o processador e volta para uma fila de tarefas “prontas”, que estão na memória aguardando sua oportunidade de executar, e outra tarefa é ativada. Os sistemas de multiprogramação ou multitarefa são uma evolução dos programas de monoprogramação. Eles possibilitam, por exemplo, que enquanto um programa esteja em operação de leitura outros possam ser executados. 11. Explique como a separação da política e mecanismo ajuda na construção de sistemas operacionais baseados em micronúcleos. Como política consideram-se os aspectos de decisão mais abstratos, que podem ser resolvidos por algoritmos de nível mais alto, como por exemplo decidir a quantidade de memória que cada aplicação ativa deve receber, ou qual o próximo pacote de rede a enviar para satisfazer determinadas especificações de qualidade de serviço. Por outro lado, como mecanismo consideram-se os procedimentos de baixo nível usados para implementar aspolíticas, ou seja, para atribuir ou retirar memória de uma aplicação, enviar ou receber um pacote de rede, etc. Essa separação entre os conceitos de política e mecanismo traz uma grande flexibilidade aos sistemas operacionais, permitindo alterar sua personalidade (sistemas mais interativos ou mais eficientes) sem ter de alterar o código que interage diretamente com o hardware. A separação da política e mecanismo ajuda na construção de sistemas operacionais baseados em micronúcleos pois um sistema micronúcleo consiste em retirar do núcleo todo o código de alto nível, normalmente associado às abstrações de recursos (que seriam as políticas), deixando no núcleo somente o código de baixo nível necessário para interagir com o hardware e criar algumas abstrações básicas (que seriam os mecanismos). Ou seja a separação da política e mecanismo facilita construção de sistemas baseados em micronúcleo pois permite alterar a personalidade do sistema sem alterar o código que interage diretamente com o hardware que fica no micronúcleo. 12. Para um programador, uma chamada de sistema parece com qualquer outra chamada para uma rotina de biblioteca. É importante que um programador saiba quais rotinas de biblioteca resultam em chamadas de sistema? Em quais circunstâncias e por quê? Geralmente as chamadas de sistema são oferecidas para as aplicações em modo usuário através de uma biblioteca do sistema (system library), que prepara os parâmetros, invoca a chamada e, no retorno desta, devolve à aplicação os resultados obtidos. É muito importante sobre a questão do desempenho. Chamadas ao sistema requerem desvio de fluxo e tratamento das chamadas que trazem consigo armazenamento e resgate de contexto, coisas que tomam tempo. 13. Quais das instruções a seguir devem ser deixadas somente em modo núcleo? (a) Desabilitar todas as interrupções. (b) Ler o relógio da hora do dia. (c) Configurar o relógio da hora do dia. (d) Mudar o mapa de memória. A, C, D pois atuam diretamente sobre o hardware. Laboratório: Para executar os comandos abaixo o sistema operacional Linux Ubuntu deve estar instalado: 1. O utilitário strace do UNIX permite observar a sequência de chamadas de sistema efetuadas por uma aplicação. Em um terminal, execute strace date para descobrir quais os arquivos abertos pela execução do utilitário date (que indica a data e hora correntes). Por que o utilitário date precisa fazer chamadas de sistema? As chamadas são efetuadas para que a memória seja mapeada e as bibliotecas necessárias sejam carregadas, de modo que as informações sobre a data possam ser carregadas. 2. O utilitário ltrace do UNIX permite observar a sequência de chamadas de biblioteca efetuadas por uma aplicação. Em um terminal, execute ltrace date para descobrir as funções de biblioteca chamadas pela execução do utilitário date (que indica a data e hora correntes). Pode ser observada alguma relação entre as chamadas de biblioteca e as chamadas de sistema observadas no item anterior? Sim, uma vez que o utilitário date implementa uma biblioteca com finalidade de se comunicar com o núcleo, esta é responsável por toda a manipulação dos detalhes de baixo nível - linguagem de máquina - relacionados com a troca de informação entre núcleo e rotina privilegiada, criando-se então o que conhecemos por conversão de convenções de chamadas. Tais, são oferecidas em aplicação no modo usuário através da System Library que é responsável por preparar os parâmetros, instanciar a interrupção de software, retornando à aplicação os resultados ganho. 3. O sistema operacional Ubuntu pode ser obtido gratuitamente no site https://ubuntu.com/download/server. Instale-o em uma máquina virtual e explore seus processos, usando os comandos top e ps. Identifique os principais processos em execução, usando a documentação do site. 4. Implemente os comandos abaixo no Linux e descreve a função cada um realiza: a) Kill Mata um processo por ID b) killall e pkill killall - mata um processo pelo nome. pkill - mata um processo, pode levar o nome parcial ou completo. c) renice O comando renice modifica a prioridade dos processos em execução. É semelhante ao comando nice, mas é usado para processos que já estão em execução. Um valor mais alto de prioridade, na verdade, torna o processo com menor prioridade; isso significa que o processo exigirá menos recursos do sistema (e, portanto, é um processo “mais agradável”). Um valor de prioridade mais baixo significa que o processo exigirá mais recursos, possivelmente negando esses recursos a processos “mais agradáveis”. O valor da prioridade de qualquer processo pode variar de -20 (prioridade mais alta, menos “agradável”) a 20 (prioridade mais baixa, “mais legal”). A prioridade padrão de novos processos, por padrão, é 0. 5. No Power Shell do Windows digite o comando “get-process”, o que será mostrado? Para eliminar um processo o que devo fazer? São exibidos todos os processos em execução no Windows. Obtém os processos em execução no computador local. Para eliminar um processo: Pelo id do processo: stop-process 2576<enter>, onde o número 2576 é o Id do processo referente a este processo. Pelo nome do processo: stop-process –name “nomedopreocesso”. Exemplo: stop-process –name explorer<enter>. Outro comando para parar um serviço em execução e que é muito utilizado no linux é o comando kill podendo ser pela Id (kill 2576) ou pelo nome do processo (“kill - name explorer). 6. Abra o Notepad do Windows, supondo que necessitamos parar o processo em execução desse editor, então digitaremos o comando “stop-process (PID), compare esse comando com o Kill do Linux. Ambos fazem a mesma coisa (encerram o processo).
Compartilhar