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).