Você está na página 1de 23

Sistemas Operacionais Capítulo 1

Q1- Quais são as três finalidades principais de um sistema operacional?

Os três propósitos principais são:

• Fornecer um ambiente para um usuário de computador executar programas no hardware do


computador de maneira conveniente e eficiente.
• Alocar os recursos separados do computador conforme necessário para resolver o problema
apresentado. O processo de atribuição deve ser o mais justo e eficiente possível.
• Como programa de controle, ele desempenha duas funções principais: (1) supervisão da
execução de programas de usuário para evitar erros e uso indevido do computador, e (2)
gerenciamento da operação e controle de dispositivos de E/S.

Q2- Enfatizamos a necessidade de o sistema operacional usar eficientemente o hardware do

computador. Quando é apropriado que o sistema operacional ignore esse princípio e

“desperdice” recursos? Por que tal sistema não é, na verdade, perdulário?

Os sistemas de usuário único devem maximizar o uso do sistema para o usuário. Uma GUI pode
“desperdiçar” ciclos de CPU, mas otimiza a interação do usuário com o sistema.

Q3- Qual é a principal dificuldade que um programador deve superar ao escrever um sistema

operacional para um ambiente de tempo real?

A principal dificuldade é manter o sistema operacional dentro das restrições de tempo fixas de um
sistema de tempo real. Se o sistema não concluir uma tarefa em um determinado período de tempo,
poderá causar uma falha em todo o sistema em execução. Portanto, ao escrever um sistema
operacional para um sistema de tempo real, o escritor deve ter certeza de que seus esquemas de
escalonamento não permitem que o tempo de resposta exceda a restrição de tempo.

Q4- Lembrando-se das diversas definições de sistema operacional, considere se o sistema

operacional deve incluir aplicações como navegadores web e programas de e-mail. Argumente

tanto o que ele deve quanto o que ele não deve fazer isso e embase suas respostas.

Um argumento a favor da inclusão de aplicativos populares no sistema operacional é que, se o


aplicativo estiver embutido no sistema operacional, é provável que ele seja mais capaz de aproveitar
os recursos do kernel e, portanto, tenha vantagens de desempenho em relação a um aplicativo
executado fora do núcleo do S.O. No entanto, os argumentos contra a incorporação de aplicativos
no sistema operacional geralmente dominam: (1) os aplicativos são aplicativos - e não fazem parte
de um sistema operacional, (2) quaisquer benefícios de desempenho da execução dentro do kernel
são compensados por vulnerabilidades de segurança, (3) isso leva para um sistema operacional
inchado.

Q5- De que modo a diferença entre modalidade de kernel e modalidade de usuário funciona como
um tipo rudimentar de sistema de proteção (segurança)?

A distinção entre modo kernel e modo usuário fornece uma forma rudimentar de proteção da
seguinte maneira. Certas instruções podem ser executadas somente quando a CPU está no modo
kernel. Da mesma forma, os dispositivos de hardware só podem ser acessados quando o programa
está sendo executado no modo kernel. O controle sobre quando as interrupções podem ser
habilitadas ou desabilitadas também é possível somente quando a CPU está no modo kernel.
Consequentemente, a CPU tem capacidade muito limitada ao executar no modo de usuário,
reforçando assim a proteção de recursos críticos.

Q6- Qual das instruções a seguir deve ser privilegiada?

A. Configurar o valor do timer.


B. Ler o relógio.
C. Limpar a memória.
D. Emitir uma instrução de exceção.
E. Desativar interrupções.
F. Modificar entradas na tabela de status de dispositivos.
G. Passar da modalidade de usuário para a de kernel.
H. Acessar dispositivo de I/O.

Ordem das operações privilegiadas: Definir valor do temporizador, limpar memória, desligar
interrupções, modificar entradas na tabela de status do dispositivo, acessar dispositivo de E/S. O
resto pode ser executado no modo usuário.

Q7- Alguns computadores antigos protegiam o sistema operacional inserindo-o em uma partição
da memória que não podia ser modificada pelo job do usuário ou pelo próprio sistema
operacional. Descreva duas dificuldades que você entende que poderiam surgir com tal esquema.

Os dados exigidos pelo sistema operacional (senhas, controles de acesso, informações contábeis e
assim por diante) teriam que ser armazenados ou passados através de memória desprotegida e,
portanto, acessíveis a usuários não autorizados.

Q8- Algumas CPUs fornecem mais de duas modalidades de operação. Cite dois usos possíveis para

essas modalidades múltiplas.

Embora a maioria dos sistemas distinga apenas entre os modos de usuário e de kernel, algumas
CPUs oferecem suporte a vários modos. Vários modos podem ser usados para fornecer uma política
de segurança mais refinada. Por exemplo, em vez de distinguir apenas entre o modo de usuário e o
modo kernel, você pode distinguir entre diferentes tipos de modo de usuário. Talvez usuários
pertencentes ao mesmo grupo possam executar o código uns dos outros. A máquina entraria em um
modo especificado quando um desses usuários estivesse executando o código. Quando a máquina
estava nesse modo, um membro do grupo poderia executar código pertencente a qualquer outra
pessoa do grupo.

Outra possibilidade seria fornecer diferentes distinções no código do kernel. Por exemplo, um modo
específico pode permitir a execução de drivers de dispositivos USB. Isso significaria que os
dispositivos USB poderiam ser reparados sem ter que mudar para o modo kernel, permitindo
essencialmente que os drivers de dispositivos USB sejam executados em um modo quase
usuário/kernel.

Q9- Os timers podem ser usados para computar a hora corrente. Forneça uma breve descrição de

como isso pode ser feito.

Um programa poderia usar a seguinte abordagem para calcular a hora atual usando interrupções de
temporizador. O programa pode definir um cronômetro para algum momento no futuro e
adormecer. Quando for despertado pela interrupção, ele poderá atualizar seu estado local, que está
usando para controlar o número de interrupções que recebeu até o momento. Ele poderia então
repetir esse processo de definir continuamente as interrupções do temporizador e atualizar seu
estado local quando as interrupções forem realmente acionadas.

Q10- Cite duas razões que tornam os caches úteis. Que problemas eles resolvem? Que problemas
eles causam? Se um cache pode ser aumentado até o tamanho do dispositivo para o qual está

armazenando (por exemplo, um cache tão extenso quanto um disco), por que não lhe dar esse

tamanho e eliminar o dispositivo?

Os caches são úteis quando dois ou mais componentes precisam trocar dados e os componentes
realizam transferências em velocidades diferentes. Os caches resolvem o problema de transferência
fornecendo um buffer de velocidade intermediária entre os componentes. Se o dispositivo rápido
encontrar os dados necessários no cache, não precisará esperar pelo dispositivo mais lento. Os
dados no cache devem ser mantidos consistentes com os dados nos componentes. Se um
componente tiver uma alteração no valor dos dados e o dado também estiver no cache, o cache
também deverá ser atualizado. Isto é especialmente um problema em sistemas multiprocessadores
onde mais de um processo pode acessar um dado. Um componente pode ser eliminado por um
cache de tamanho igual, mas somente se: (a) o cache e o componente tiverem capacidade
equivalente de economia de estado (ou seja, se o componente retém seus dados quando a
eletricidade é removida, o cache deve também reter dados) e (b) o cache é acessível, porque um
armazenamento mais rápido tende a ser mais caro.

Q11- Qual a diferença entre os modelos cliente-servidor e entre pares dos sistemas distribuídos?

O modelo cliente-servidor distingue firmemente as funções do cliente e do servidor. Neste modelo,


o cliente solicita serviços fornecidos pelo servidor. O modelo peer-to-peer não tem funções tão
rígidas. Na verdade, todos os nós do sistema são considerados pares e, portanto, podem atuar como
clientes ou servidores – ou ambos. Um nó pode solicitar um serviço de outro ponto, ou o nó pode de
fato fornecer tal serviço a outros pares no sistema.

Por exemplo, vamos considerar um sistema de nós que compartilham receitas culinárias. No modelo
cliente-servidor, todas as receitas são armazenadas no servidor. Se um cliente desejar acessar uma
receita, ele deverá solicitá-la ao servidor especificado. Usando o modelo peer-to-peer, um nó par
poderia solicitar a outros nós par a receita especificada. O nó (ou talvez nós) com a receita solicitada
poderia fornecê-la ao nó solicitante. Observe como cada par pode atuar tanto como cliente (pode
solicitar receitas) quanto como servidor (pode fornecer receitas).

EXERCÍCIOS

Q12- Em um ambiente de multiprogramação e tempo compartilhado, vários usuários


compartilham o sistema simultaneamente. Essa situação pode resultar em diversos problemas de
segurança.

A. Cite dois desses problemas.

Problema de segurança com um ambiente de multiprogramação e compartilhamento de tempo

Quando vários usuários compartilham um sistema simultaneamente, isso pode resultar em vários
problemas de segurança. Três desses problemas são;
Problema de privacidade: um usuário pode acessar os programas ou dados de outro usuário usando
recursos do sistema (CPU, memória, espaço em disco, periféricos) sem a contabilidade adequada.

Ataque de negação de serviço (DOS): um usuário pode impedir outro usuário parcial ou totalmente
de executar uma operação no sistema.

Integridade das informações: um usuário pode corromper algumas informações privadas de outro
usuário.

B. Podemos assegurar o mesmo nível de segurança em uma máquina de tempo


compartilhado como em uma máquina dedicada? Explique sua resposta.

Grau de segurança em uma máquina de tempo compartilhado:


Para alcançar o mesmo nível de segurança numa máquina de tempo partilhado que temos
numa máquina dedicada, temos primeiro de garantir que o sistema operativo não partilha
quaisquer dados entre utilizadores para quaisquer fins, leitura e escrita.
Embora garantir que não haja compartilhamento de dados entre usuários não nos garanta
que nosso software não tenha bugs, o que também pode levar a vulnerabilidades de
segurança.
Portanto, nunca podemos ter certeza de que impediremos todo o compartilhamento de
dados e ativos de sistema atribuídos igualmente.

Embora não seja possível garantir segurança absoluta em nenhum ambiente de


computação, incluindo máquinas dedicadas, é possível implementar medidas rigorosas de
segurança em uma máquina de tempo compartilhado para minimizar os riscos, com as
medidas de segurança adequadas e boas práticas, é possível mitigar muitos dos riscos
associados ao compartilhamento de recursos em um ambiente compartilhado.
Estratégias para melhorar o nível de segurança em uma máquina de tempo
compartilhado são: Isolamento de recursos, Políticas de segurança rigorosas,
Monitoramento constante, Patches e atualizações: e Auditorias de segurança.
Q13- A questão da utilização de recursos assume formas diferentes em diferentes tipos de
sistemas operacionais. Liste que recursos devem ser gerenciados cuidadosamente nas
configurações a seguir:

A. Sistemas mainframe ou de minicomputador


B. Estações de trabalho conectadas a servidores
C. Computadores móveis

A gestão de recursos varia dependendo do tipo de sistema operacional e do ambiente de


computação. Aqui estão algumas considerações gerais para cada um dos tipos de sistemas que você
mencionou:

**Sistemas Mainframe ou de Minicomputador:**

1. **CPU (Unidade Central de Processamento):** Em sistemas mainframe ou minicomputador, a


CPU é geralmente compartilhada por várias tarefas ou processos simultâneos. Portanto, é
importante gerenciar a alocação de CPU de forma eficiente para garantir que as tarefas críticas
obtenham o tempo de processamento necessário.
2. **Memória:** A alocação e o gerenciamento da memória são críticos em sistemas mainframe e
minicomputador, pois várias aplicações podem estar em execução ao mesmo tempo. Garantir que a
memória seja alocada de forma eficiente e que os vazamentos de memória sejam evitados é
essencial.

3. **Armazenamento em Disco:** Os sistemas mainframe geralmente têm grandes volumes de


armazenamento em disco. Gerenciar o armazenamento em disco envolve alocação de espaço,
controle de acesso e garantia de que o armazenamento seja usado de maneira eficiente.

4. **Rede:** O gerenciamento da rede é importante para garantir o desempenho e a segurança das


comunicações em sistemas mainframe. Isso inclui a gestão de largura de banda, a configuração de
políticas de segurança e a detecção de intrusões.

**Estações de Trabalho Conectadas a Servidores:**

1. **CPU e Memória Local:** Em estações de trabalho conectadas a servidores, é importante


gerenciar a utilização da CPU e da memória local para garantir um desempenho responsivo das
aplicações locais.

2. **Conexões de Rede:** A gestão da conectividade de rede é crucial para garantir que as estações
de trabalho possam se comunicar com os servidores de forma eficiente e segura.

3. **Segurança:** A segurança das estações de trabalho é fundamental, incluindo a aplicação de


patches de segurança, a configuração de firewalls pessoais e a prevenção contra malware.

**Computadores Móveis:**

1. **Bateria:** A gestão da bateria é crítica em dispositivos móveis, pois a vida útil da bateria é
limitada. Isso envolve otimização do consumo de energia e a gestão de aplicativos em segundo plano
que podem drenar a bateria.

2. **Conectividade de Rede:** Em dispositivos móveis, é importante gerenciar a conectividade de


rede para garantir que os dispositivos se conectem à Internet ou à rede local quando necessário,
mas economizem energia quando não estão em uso.

3. **Armazenamento:** Gerenciar o armazenamento em dispositivos móveis envolve o uso


eficiente do espaço disponível e a limpeza de arquivos temporários e desnecessários.

4. **Segurança:** A segurança em dispositivos móveis é crítica devido ao armazenamento de dados


pessoais e sensíveis. Isso inclui a configuração de senhas, o uso de aplicativos de segurança e a
instalação de atualizações de segurança.

Lembre-se de que as especificidades do gerenciamento de recursos podem variar dependendo do


sistema operacional específico (por exemplo, Windows, Linux, macOS, Android, iOS) e das
configurações individuais do sistema. Portanto, as práticas de gerenciamento de recursos podem
variar em diferentes ambientes.

Q14- Em que circunstâncias seria melhor para o usuário usar um sistema de tempo compartilhado
em vez de um PC ou uma estação de trabalho monousuária?

Existem duas situações que vêm à mente:

1. Pode ser mais barato manter um sistema de time-sharing do que um PC ou um estação de


trabalho de usuário único.
2. Os sistemas de compartilhamento de tempo geralmente possuem recursos mais poderosos que os
PCs e estações de trabalho. Isso significa que se quisermos executar alguns recursos intensivos

tarefa, por exemplo, se tivermos que realizar muitos cálculos,pode ser melhor usar um sistema de
compartilhamento de tempo.

pode ser mais barato e pode possuir recursos mais poderosos.

Q15- Descreva as diferenças entre multiprocessamento simétrico e assimétrico. Cite três


vantagens e uma desvantagem dos sistemas multiprocessadores.

Multiprocessamento assimétrico: o sistema de multiprocessamento assimétrico é um


sistema de computador multiprocessador em que nem todas as unidades centrais de
processamento (CPUs) múltiplas interconectadas são tratadas igualmente. No
multiprocessamento assimétrico, apenas um processador mestre executa as tarefas do
sistema operacional. Por exemplo, o AMP pode ser usado para atribuir tarefas específicas à
CPU com base na prioridade e na importância da conclusão da tarefa.

Multiprocessamento simétrico: envolve um hardware de computador multiprocessador


e arquitetura de software onde dois ou mais processadores idênticos são conectados a uma
única memória principal compartilhada, têm acesso total a todos os dispositivos de entrada
e saída. Em outras palavras, o multiprocessamento simétrico é um tipo de
multiprocessamento onde cada processador é autoprogramado.
Por exemplo, o SMP aplica vários processadores a esse problema, conhecido como
programação paralela.
Diferenças:

No multiprocessamento assimétrico:
os processadores não são tratados igualmente.
As tarefas do sistema operacional são feitas pelo processador mestre.
Sistemas assimétricos de multiprocessamento são mais fáceis de projetar e são mais
baratos.

No multiprocessamento simétrico:
todos os processadores são tratados igualmente.
As tarefas do sistema operacional são feitas por processador individual.
Sistemas simétricos de multiprocessamento são complexos de projetar e são mais caros.
Vantagens com multiprocessadores:
Desempenho; o ganho de desempenho com múltiplos processadores pode ser obtido em
dois níveis. No primeiro nivel múltiplos processadores permitem a execução de diversas
tarefas independentes. No segundo, multiplos processadores permitem a execução de uma
mesma tarefa por vários processadores simultaneamente.
Escalabilidade: é a capacidade de adicionar novos processadores ao hardware do sistema.
Em ambientes que permitam apenas um processador, ppara aumentar a capacidade
computacional é necessário substituir a UCP por uma outra com maior poder de
processamento. Com múltiplos processadores, é possível ampliar a capacidade de
computação apenas adicionando-se novos processadores, com um custo inferior à
aquisição de um outro sistema com maior desempenho.
Relação Custo/desempenho: Sistemas com um único processador, por mais poderosos que
sejam, apresentam limitações de desempenho inerentes á sua arquitetura, devido as
limitações existentes na comunicação da UCP com as demais unidades funcionais,
principalmente a memória principal.
Desvantagens:
Com múltiplos processadores, novos problemas de comunicação e sincronização são
introduzidos, pois varios processadores podem estar acessando as mesmas posições de
memória. Além disso, existe o problema de organizar os processadores, memórias e
periféricos de uma forma eficiente, que permita uma relação custo/desempenho aceitável.
Dependendo do tipo de sistema, a tolerância contra falhas é dependente do sistema
operacional e não apenas do hardware, sendo dificil de ser implementada.
Q16- Em que os sistemas agrupados (clusters) diferem dos sistemas multiprocessadores? O que é

necessário para que duas máquinas pertencentes a um cluster cooperem para fornecer um serviço
de alta disponibilidade?

A diferença é que os sistemas clusterizados contêm dois ou mais sistemas independentes (em
sistemas multiprocessadores, os processadores não são tão independentes um do outro).

Para que os sistemas em cluster sejam eficientes, precisamos ter certeza de que o sistema não irá
parar se um ou mais sistemas no cluster falharem. Isso é feito adicionando um nível de redundância
ao sistema. Por exemplo, se algum sistema falhar, outro sistema poderá assumir o controle de seu
armazenamento e executar novamente os aplicativos necessários.

Nível de redundância.

Q17- Considere um cluster de computadores composto por dois nós executando um banco de
dados. Descreva duas maneiras pelas quais o software de cluster pode gerenciar o acesso aos
dados em disco. Discuta as vantagens e desvantagens de cada uma.

Podemos usar dois tipos de cluster:

1. Clustering assimétrico - Aqui um nó fará todo o trabalho, enquanto o outro ficará em espera
e será ativado caso o nó ativo falhe. A vantagem é que o sistema claramente não irá parar se
o sistema ativo falhar. A desvantagem é que não é realmente eficiente; temos dois nós, mas
usamos ativamente apenas um deles.
2. Clustering simétrico - para ser mais preciso, observaremos o chamado clustering paralelo.
Neste caso, vários nós (aqui, 2 deles) podem ler os dados do disco. A vantagem é que um
sistema com clustering paralelo é muito mais eficiente do que um sistema com clustering
assimétrico. A desvantagem é que precisamos de software especial para implementar o
clustering paralelo.

Q18- Em que os computadores em rede são diferentes dos computadores pessoais tradicionais?

Descreva alguns cenários de uso em que é vantajoso usar computadores em rede.


Os computadores pessoais tradicionais são um sistema independente e possuem todos os
recursos necessários locais na máquina. Pode ser usado por um único usuário.
Os computadores da rede estão conectados e contam com um computador centralizado
para todos os seus serviços. Eles têm sistemas operacionais mínimos. Os computadores da
rede podem compartilhar recursos e comunicar-se com outros computadores da rede.
Computadores tradicionais não são bons para acesso remoto. Computadores em rede são
usados para superar esse problema.

Além disso, quando temos que fornecer computadores para muitos usuários em vez de usar
computadores em rede, podemos compartilhar recursos de forma eficiente. Portanto, os
computadores em rede são mais fáceis de manter e econômicos, o que é outra grande
vantagem.
Os computadores em rede têm maior grau de probabilidade e são mais fáceis de manter.
Q19- Qual é o objetivo das interrupções? Em que uma interrupção difere de uma exceção? As
exceções podem ser geradas intencionalmente por um programa de usuário? Caso possam, com
que propósito?

A interrupção é usada para informar o computador sobre como encerrar o processo atual e
iniciar um novo para um circuito. Para esse processo, ele envia um sinal de computador.
Quando comparamos uma interrupção com uma armadilha, podemos ver que uma
interrupção é criada pelo hardware. Mas um toque é criado pelo software. A principal razão
para gerar uma armadilha é permitir que um programa ou tarefa seja executado
continuamente. É por isso que a continuidade do programa nunca será perdida.
Sim, armadilhas também podem ser geradas intencionalmente por um programa de
usuário.

• Porque às vezes ocorrem falhas aritméticas no sistema. Se esses erros não


desaparecerem, a solução desses problemas será mais complicada no futuro. É por
isso que o usuário intervém com armadilhas.
• Além disso, os procedimentos do sistema operacional são chamados pela
armadilha.

Q20- O acesso direto à memória é usado em dispositivos de I/O de alta velocidade para impedir o

aumento da carga de execução da CPU.

A. Como a CPU interage com o dispositivo para coordenar a transferência?

O controlador do dispositivo transfere um bloco inteiro de dados diretamente para ou de


seu próprio armazenamento buffer para a memória, sem intervenção da CPU.
B. Como a CPU sabe quando as operações da memória foram concluídas?

Uma interrupção é gerada por bloco, para informar ao driver do dispositivo que a operação
foi concluída.
C. A CPU pode executar outros programas enquanto o controlador de DMA está transferindo
dados. Esse processo interfere na execução dos programas de usuário? Caso interfira,
descreva que tipos de interferência são gerados.

Sim. Uma vez concluídos os processos DMA, é gerada uma interrupção que adiciona carga
aos processadores principais. Assim, afetando a sequência do processo de enfileiramento.
Q21- Alguns sistemas de computação não fornecem uma modalidade de operação privilegiada de

hardware. É possível construir um sistema operacional seguro para esses sistemas de

computação? Dê argumentos para defender e para refutar essa possibilidade.

Teoricamente, isso pode ser feito executando apenas um processo por vez e monitorando-o
cuidadosamente e inspecionando sua saída. No entanto, isso certamente afeta a eficiência
do sistema (ele funcionará muito mais lentamente), e devemos ter a certeza de conhecer de
alguma forma a prioridade de cada processo.
Q22- Muitos sistemas SMP têm diferentes níveis de caches; um nível é local para cada núcleo de

processamento, e outro nível é compartilhado entre todos os núcleos de processamento. Por que
os sistemas de cache são projetados dessa forma?

Os caches locais são muito mais rápidos que os caches compartilhados. Os dados que se
espera que sejam usados por algum processador são colocados em seu cache local, mas
também são colocados no cache compartilhado. Colocamos os dados no cache
compartilhado para que possam ser rapidamente transferidos para um cache local de outro
processador caso ele inicie algum processo que necessite desses dados.
Q23- Considere um sistema SMP semelhante ao mostrado na Figura 1.6. Ilustre com um exemplo
como os dados que residem na memória poderiam ter um valor diferente em cada um dos caches
locais.

Deixe o processador 1: ler os dados X que possuem valor 3 da memória principal para seu
cache local.

E processador 2: lê os dados X em seu cache local.


Então, o processador 1 atualiza o valor de X para 7.
A atualização ocorre apenas no cache local do processador 1 e não no cache local do
processador 2 porque os dados X residem no cache local do processador 1.
Q24- Discuta, com exemplos, como o problema de manter a coerência dos dados armazenados em
cache se manifesta nos ambientes de processamento a seguir:

A. Sistemas uniprocessadores

Único — Em um sistema de processador único, há apenas um cache e apenas um processo sendo


executado sequencialmente pela CPU. Como não há outros usuários para modificar ou acessar
dados simultaneamente, o cache está atualizado de forma confiável.

B. Sistemas multiprocessadores
Multi — Em um sistema multiprocessador, cada CPU possui seu próprio cache e/ou um cache
compartilhado e a memória principal. Sem coerência de cache, cada CPU pode armazenar uma cópia
local de alguns dados, digamos, um número inteiro I que foi armazenado no cache da memória
principal e muda para I não persistirá entre CPUs. Assim, os dados acessados podem estar
desatualizados ou inconsistentes entre os processadores.

C. Sistemas distribuídos

Distribuído — Em um sistema distribuído, os dados geralmente são compartilhados entre


computadores mantendo cópias separadas de arquivos em cada computador. No entanto,
as alterações em um arquivo não serão visíveis para o resto do sistema, a menos que cada
cópia seja constantemente atualizada.
Q25- Descreva um mecanismo que garanta a proteção da memória impedindo que um programa

modifique a memória associada a outros programas.

Um desses mecanismos é chamado de memória virtual. Todo processo que está sendo
executado no computador vai pensar que tem acesso a toda a RAM e só ele tem acesso à
RAM. Na realidade, ele tem acesso a uma pequena porção e quando aborda algum local na
RAM, o sistema operacional usará uma tabela para calcular um endereço físico na RAM a
partir do endereço solicitado por esse processo.

Outra maneira pode ser a verificação vinculada. Se um processo tentar acessar alguns
endereços na RAM que são necessários para o sistema operacional, a solicitação pode ser
ignorada e a interrupção pode ser gerada.
Algoritmo de paginação e memória virtual.
Q26- Que configuração de rede — LAN ou WAN — atenderia melhor os ambientes a seguir?

A. Um diretório de estudantes de um campus

LAN (rede local) é um grupo de computadores e dispositivos de rede conectados entre si,
geralmente dentro do mesmo edifício.

WAN (wide area network) cobrem áreas maiores e até permitem que computadores em
diferentes nações se conectem. Como resultado, podemos concluir que:

Um grêmio estudantil do campus consiste em computadores conectados entre si que estão


em uma área específica dentro do campus, provavelmente conectando escritórios em vários
prédios. Assim, é uma LAN.

B. Várias regiões do campus de um sistema universitário de abrangência estadual

Vários locais de campus em um sistema universitário estadual fazem parte de uma rede
maior que é distribuída por uma cidade, por isso é uma WAN.
C. Uma vizinhança
Um bairro é composto por várias casas onde cada casa ou edifício ou negócio nele é uma
LAN. Por exemplo, cada família pode ter vários PCs conectados em uma LAN. Como várias
LANs conectadas juntas formam uma WAN, a vizinhança pertence a uma WAN.
Q27- Descreva alguns dos desafios inerentes ao projeto de sistemas operacionais para dispositivos
móveis em comparação com o projeto de sistemas operacionais para PCs tradicionais.

Alguns desafios incluem: limitação de memória, tamanho do dispositivo, incapacidade do


usuário de atualizar hardware ou componentes para acelerar o dispositivo
Q28- Cite vantagens dos sistemas entre pares sobre os sistemas cliente-servidor?

Em um sistema cliente-servidor, a velocidade do servidor é um fator limitante na prestação


de serviços e dados, enquanto em um sistema peer-to-peer, serviços e dados podem ser
fornecidos por vários pares ao mesmo tempo. Os serviços descentralizados são mais baratos
de fornecer, uma vez que o criador do serviço ou dos arquivos não precisa executar um
servidor. Além disso, as redes peer-to-peer podem fornecer anonimato e são mais robustas.
Q29- Descreva algumas aplicações distribuídas que seriam apropriadas para um sistema entre
pares.

Aplicativos distribuídos comuns incluem redes de compartilhamento de arquivos, fluxos


multimídia, como um bate-papo por vídeo, criptomoedas e navegadores da Web anônimos.
Q30- Identifique diversas vantagens e desvantagens dos sistemas operacionais de código-fonte
aberto. Inclua os tipos de pessoas que considerariam cada aspecto uma vantagem ou uma
desvantagem.

Vantagens: O usuário desfruta de software de código aberto gratuitamente, juntamente com uma
comunidade ativa de desenvolvedores voluntários que ajudam a mantê-lo.

O software de código aberto é considerado mais seguro devido à disponibilidade do código-fonte


para qualquer pessoa analisar e depurar.

Ao tornar o seu software open source, as empresas podem beneficiar de uma maior utilização e
feedback, bem como de uma melhor imagem pública.

Desvantagens: As empresas provavelmente perderão dinheiro com a falta de vendas de licenças de


software.

Algumas comunidades de código aberto são mal atendidas, deixando o software dilapidado.

Capítulo 2
Q1- Qual é a finalidade das chamadas de sistema?

As chamadas de sistema permitem que processos em nível de usuário solicitem serviços do sistema
operacional.

Q2- Quais são as cinco principais atividades de um sistema operacional relacionadas com o

gerenciamento de processos?
a. A criação e exclusão de processos de usuário e de sistema

b. A suspensão e retomada de processos

c. O fornecimento de mecanismos para sincronização de processos

d. O fornecimento de mecanismos para comunicação de processos

e. O fornecimento de mecanismos para tratamento de impasses

Q3- Quais são as três principais atividades de um sistema operacional relacionadas com o

gerenciamento de memória?

a. Acompanhe quais partes da memória estão sendo usadas no momento e por quem.

b. Decida quais processos serão carregados na memória quando espaço de memória fica disponível.

c. Aloque e desaloque espaço de memória conforme necessário.

Q4- Quais são as três principais atividades de um sistema operacional relacionadas com o

gerenciamento de memória secundária?

As três principais atividades são:

• Gestão de espaço livre.


• • Alocação de armazenamento.
• • Agendamento de disco

Q5- Quais são as três principais atividades de um sistema operacional relacionadas com o

gerenciamento de memória secundária?

Ele lê comandos do usuário ou de um arquivo de comandos e os executa, geralmente


transformando-os em uma ou mais chamadas de sistema. Geralmente não faz parte do kernel, pois
o interpretador de comandos está sujeito a alterações

Q6- Que chamadas de sistema têm de ser executadas por um interpretador de comandos ou shell
para iniciar um novo processo?

Em sistemas Unix, uma chamada de sistema fork seguida por uma chamada de sistema exec precisa
ser executada para iniciar um novo processo. A chamada fork clona o processo atualmente em
execução, enquanto a chamada exec sobrepõe um novo processo baseado em um executável
diferente do processo de chamada.

Q7- Qual é a finalidade dos programas de sistema?

Os programas de sistema podem ser considerados pacotes de chamadas de sistema úteis

Eles fornecem funcionalidades básicas aos usuários para que eles não precisem escrever seus
próprios programas para resolver problemas comuns.

Q8- Qual é a principal vantagem da abordagem em camadas para o projeto de sistemas? Quais as

desvantagens da abordagem em camadas?


Como em todos os casos de design modular, projetar um sistema operacional de forma modular traz
diversas vantagens. O sistema é mais fácil de depurar e modificar porque as alterações afetam
apenas seções limitadas do sistema, em vez de afetar todas as seções do sistema operacional. As
informações são mantidas apenas onde são necessárias e são acessíveis apenas dentro de uma área
definida e restrita, portanto, quaisquer bugs que afetem esses dados devem ser limitados a um
módulo ou camada específica.

Q9- Liste cinco serviços fornecidos por um sistema operacional e explique como cada um deles é

conveniente para os usuários. Em que casos seria impossível que programas de nível de usuário

fornecessem esses serviços? Explique sua resposta.

Os cinco serviços são:

a. Execução do programa. O sistema operacional carrega o conteúdo (ou seções) de um arquivo na


memória e inicia sua execução. Não era possível confiar em um programa de nível de usuário para
alocar adequadamente o tempo de CPU.

b. Operações de E/S. Discos, fitas, linhas seriais e outros dispositivos devem ser comunicados em um
nível muito baixo. O usuário precisa apenas especificar o dispositivo e a operação a ser executada
nele, enquanto o sistema converte essa solicitação em comandos específicos do dispositivo ou do
controlador. Não se pode confiar que programas de nível de usuário acessem apenas dispositivos
que eles devem ter acesso e acessá-los somente quando não forem utilizados de outra forma.

c. Manipulação do sistema de arquivos. Há muitos detalhes na criação, exclusão, alocação e


nomenclatura de arquivos que os usuários não deveriam ter que executar. Blocos de espaço em
disco são usados por arquivos e devem ser rastreados. devem ter acesso e acessá-los somente
quando não forem utilizados de outra forma. Responder: A exclusão de um arquivo requer a
remoção das informações do nome do arquivo e a liberação dos blocos alocados. As proteções
também devem ser verificadas para garantir o acesso adequado aos arquivos. Os programas dos
usuários não podiam garantir a adesão aos métodos de proteção nem serem confiáveis para alocar
apenas blocos livres e desalocar blocos na exclusão de arquivos.

d. Comunicações. A passagem de mensagens entre sistemas exige que as mensagens sejam


transformadas em pacotes de informações, enviadas ao controlador de rede, transmitidas através
de um meio de comunicação e remontadas pelo sistema de destino. O pedido de pacotes e a
correção de dados devem ocorrer. Novamente, os programas do usuário podem não coordenar o
acesso ao dispositivo de rede ou podem receber pacotes destinados a outros processos.

e. Detecção de erro. A detecção de erros ocorre nos níveis de hardware e software. No nível do
hardware, todas as transferências de dados devem ser inspecionadas para garantir que os dados não
foram corrompidos durante o trânsito. Todos os dados na mídia devem ser verificados para garantir
que não tenham sido alterados desde que foram gravados na mídia. No nível do software, a mídia
deve ser verificada quanto à consistência dos dados; por exemplo, se o número de blocos de
armazenamento alocados e não alocados corresponde ao número total no dispositivo. Lá, os erros
são frequentemente independentes do processo (por exemplo, a corrupção de dados em um disco),
portanto deve haver um programa global (o sistema operacional) que lide com todos os tipos de
erros. Além disso, por terem erros processados pelo sistema operacional, os processos não precisam
conter código para capturar e corrigir todos os erros possíveis em um sistema.
Q10- Por que alguns sistemas armazenam o sistema operacional em firmware, enquanto outros o

armazenam em disco?

Para determinados dispositivos, como PDAs portáteis e telefones celulares, um disco com um
sistema de arquivos pode não estar disponível para o dispositivo. Nesta situação, o sistema
operacional deve ser armazenado no firmware.

Q11- Como um sistema poderia ser projetado para permitir a escolha de sistemas operacionais a
partir dos quais realizar a inicialização? O que o programa bootstrap teria de fazer?

Considere um sistema que gostaria de rodar tanto o Windows XP quanto três distribuições
diferentes de Linux (por exemplo, RedHat, Debian e Mandrake). outros armazenam-no no disco? d.
Comunicações. A passagem de mensagens entre sistemas exige que as mensagens sejam
transformadas em pacotes de informações, enviadas ao controlador de rede, transmitidas através
de um meio de comunicação e remontadas pelo sistema de destino. O pedido de pacotes e a
correção de dados devem ocorrer. Novamente, os programas do usuário podem não coordenar o
acesso ao dispositivo de rede ou podem receber pacotes destinados a outros processos. Cada
sistema operacional será armazenado em disco. Durante a inicialização do sistema, um programa
especial (que chamaremos de gerenciador de inicialização) determinará em qual sistema operacional
inicializar. Isso significa que, em vez de inicializar inicialmente em um sistema operacional, o
gerenciador de inicialização será executado primeiro durante a inicialização do sistema. É esse
gerenciador de inicialização responsável por determinar em qual sistema inicializar. Normalmente,
os gerenciadores de inicialização devem ser armazenados em determinados locais do disco rígido
sejam reconhecidos durante a inicialização do sistema. Os gerenciadores de inicialização geralmente
fornecem ao usuário uma seleção de sistemas para inicializar; os gerenciadores de inicialização
também são normalmente projetados para inicializar em um sistema operacional padrão se
nenhuma opção for selecionada pelo usuário.

EXERCÍCIOS
Q12- Os serviços e funções fornecidos por um sistema operacional podem ser divididos em duas

categorias principais. Descreva resumidamente as duas categorias e discuta em que elas diferem.

Existem diferentes maneiras de definir diferentes categorias de serviços e funções do


sistema operacional. Em geral, um sistema operacional fornece um ambiente para a
execução de programas. No nosso caso a diferença é feita com base na eficiência e utilidade
do sistema operacional. Uma categoria de serviços torna o sistema operacional útil para o
usuário, a outra, útil para o sistema. Então as duas categorias seriam:
1- A primeira categoria de funções torna o sistema operacional útil e útil para o usuário. Os
serviços prestados nesta categoria são:

• Interface de usuário
• Execução do Programa
• Operações de E/S
• Manipulação do sistema de arquivos
• Comunicações
• Detecção de erro
2 - A outra categoria de funções existe para garantir o funcionamento eficiente do próprio
sistema. Graças a essas funções, sistemas com múltiplos usuários podem ganhar eficiência
ao compartilhar os recursos do computador entre seus usuários. As funções que fazem
parte desta categoria são:

• Alocação de recursos
• contabilidade
• proteção e segurança
Q13- Descreva três métodos gerais para passagem de parâmetros ao sistema operacional.

Existem três métodos gerais para passagem de parâmetros ao sistema operacional:


1 Passagem de parâmetros em registradores: o primeiro método é passar os
parâmetros são passados diretamente nos registradores da CPU. Esse método é o
mais simples e rápido é fácil se os parâmetros forem passados em registradores,
pois esta é a maneira mais direta de passar parâmetros, mas pode ser limitado pelo
número de registradores disponíveis.
2 Passagem de parâmetros por meio de uma tabela na memória(Bloco):
Quando pode haver mais parâmetros do que registros, os parâmetros são
armazenados em um bloco ou uma tabela na memória e o endereço do bloco/tabela
é passado como um parâmetro em um registrador para o sistema operacional.
neste caso o parâmetro passado para os registradores serão os endereços do bloco
de parâmetros, esse método é útil quando há muitos parâmetros.

3 Passagem de parâmetros por meio da pilha: Os parâmetros são empilhados


(armazenados) na pilha pelo programa e “desempilhados” da pilha pelo sistema
operacional. Esse método é útil quando o número de parâmetros é variável, uma vez
que este método não limita o número ou comprimento dos parâmetros, é preferido
em alguns sistemas operacionais.

Q14- Descreva como você poderia obter um perfil estatístico do montante de tempo gasto por um

programa executando diferentes seções de seu código. Discuta a importância da obtenção desse
perfil estatístico.

Perfil estatístico é uma forma de análise dinâmica do programa que serve para auxiliar o
programa na otimização. Ele usa uma ampla variedade de técnicas para coletar dados como
tempo, complexidade de um programa ou a frequência e duração das chamadas de função.
Alguns exemplos de métodos que o perfil estatístico usa para coletar essas informações são:

• Interrupções de hardware
• Instrumentação de código
• Contadores de desempenho
• Simulação de conjunto de instruções
Normalmente, atualmente, os computadores pessoais têm um programa System profiller
que pode fornecer informações detalhadas sobre seu software e hardware. A fim de obter
um perfil estatístico da quantidade de tempo gasto por um programa executando diferentes
seções de seu código que usaríamos a partir dos métodos de interrupção do hardware.
Portanto, emitir interrupções periódicas do temporizador e quando as interrupções são
entregues na monitorização e supervisão de quais blocos de código estão sendo executados.
Como resultado, obtém um sistema de criação de perfil que monitoraria o código que está
sendo executado que posteriormente poderia ser usado pelo engenheiro para otimizar o
código de blocos que está consumindo muitos recursos da CPU.
O que devemos fazer para traçar um perfil estatístico da quantidade de tempo gasto por um
programador executando diferentes seções de código é emitir interrupções de temporizador.

Q15- Quais são as cinco atividades principais de um sistema operacional relacionadas com o

gerenciamento de arquivos?

1. A criação e exclusão de arquivos


2. A criação e exclusão de diretórios
3. Mapeando arquivos para armazenamento secundário
4. Suportando primitivas para manipulação de arquivos e diretórios
5. Gerenciando backup em armazenamento não volátil
Q16- Quais são as vantagens e desvantagens do uso da mesma interface de chamadas de sistema
para manipular tanto arquivos quanto dispositivos?

Vantagens

Se usarmos as mesmas chamadas de sistema para manipulação de arquivos e dispositivos, os


dispositivos poderão ser acessados como se fossem um arquivo no sistema de arquivos. Na verdade,
as chamadas de sistema open() e close() são semelhantes às chamadas de sistema request() e
release() usadas para manipulação de arquivos. A semelhança entre dispositivos de E/S e arquivos é
o motivo pelo qual muitos sistemas operacionais, incluindo o UNIX, mesclam os dois em uma
estrutura combinada de arquivo/dispositivo. Na vida real, em sistemas Linux e Unix, arquivos de
dispositivos (ou arquivos especiais) são usados para representar dispositivos físicos reais usados para
operações de entrada/saída (ex.printer). Esses arquivos de dispositivo apareceriam no sistema de
arquivos como qualquer outro arquivo comum. Nesses casos, o kernel lida com dispositivos através
da interface de arquivos, portanto é fácil adicionar um novo driver de dispositivo. Como exemplo, a
chamada do sistema open() assumiria um parâmetro que seria o código específico do hardware para
implementar esta interface de arquivo especial. Assim, o código do programa do usuário pode ser
escrito para acessar dispositivos e arquivos da mesma maneira. Por outro lado, a interface de
chamada do sistema pode ser muito benéfica também para o código do driver porque pode ser
reescrita para suportar APIs (chamadas de biblioteca) bem definidas. É sempre melhor usar APIs em
vez das chamadas principais do sistema pelos seguintes motivos:

• API pode suportar múltiplas versões do sistema operacional.


• As chamadas do sistema diferem de plataforma para plataforma.
• Como as APIs nada mais são do que uma biblioteca de chamadas de sistema, elas são mais
fáceis de implementar do que escrever manualmente várias linhas de código para executar a
mesma função com chamadas de sistema.
• A API geralmente fornece funcionalidades mais úteis do que a chamada direta do sistema.

Desvantagens
Por outro lado, ao usar a mesma interface, pode ser difícil capturar a funcionalidade de
determinados dispositivos. Como estamos usando APIs de acesso a arquivos, o sistema pode não
capturar todas as funcionalidades, o que pode resultar em perda de funcionalidade ou perda de
desempenho. O controle de entrada/saída ioctl é uma chamada de sistema suportada pela maioria
dos sistemas Unix/Linux para operações de entrada/saída específicas de dispositivos e outras
operações que não podem ser expressas por chamadas de sistema regulares. Essa chamada de
sistema pode ajudar a superar a perda de desempenho e funcionalidade até certo ponto. A versão
do Windows desta chamada de sistema no Win32Api é DeviceIoControl

Usar as mesmas chamadas de sistema para manipular arquivos e dispositivos resultaria no acesso
dos dispositivos como um arquivo no sistema de arquivos. As vantagens seriam que o código do
programa do usuário seria o mesmo usado para acessar arquivos e dispositivos, apenas os
parâmetros mudariam. Além disso, o código do driver pode ser reescrito para suportar APIs (que são
bibliotecas de chamadas de sistema). Por outro lado, seria difícil capturar todas as funcionalidades
de alguns dispositivos, o que poderia resultar numa perda de funcionalidade e desempenho.

Q17- Seria possível para o usuário desenvolver um novo interpretador de comandos usando a
interface de chamadas de sistema fornecida pelo sistema operacional?

Sim, qualquer usuário que saiba usar chamadas do sistema deve ser capaz de criar um novo
interpretador de comandos.

O interpretador de linha de comando (às vezes também chamado de shell) é a parte do sistema
operacional que entende e interpreta comandos inseridos por um ser humano ou por um programa
e os executa. Assim, o interpretador de comandos é simplesmente um programa que lê as instruções
dadas pelo usuário, traduza-as para o contexto do sistema operacional e as executa. Por outro lado,
uma chamada de sistema é a forma programática pela qual um programa de computador solicita um
serviço do kernel do sistema operacional no qual é executado. Em geral, as chamadas do sistema são
a forma como os programas interagem com o sistema operacional. Sempre que um programa ou
programador precisar fazer uma solicitação ao kernel, ele executará uma chamada de sistema. Com
base no exposto, podemos concluir que o interpretador de linha de comando é construído em
chamadas de sistema. Como resultado, faz sentido que qualquer usuário capaz de usar chamadas de
sistema possa criar e desenvolver uma nova interface de usuário.

Como o interpretador de comandos (ou shell) permite aos usuários funcionalidades como criar e
gerenciar processos, acessar scripts para desligar o computador ou copiar arquivos, que podem ser
acessados e implementados através de chamadas de sistema por um programa em nível de usuário,
podemos concluir é possível desenvolver um novo interpretador de comandos.

Q18- Quais são os dois modelos de comunicação entre processos? Quais são as fortalezas e
fraquezas das duas abordagens?

Existem dois modelos comuns de comunicação entre processos:

1. O modelo de passagem de mensagens A troca de processos de comunicação mensagens entre si


para transferir informações. Uma conexão deve ser aberta antes que a comunicação possa
acontecer onde um comum caixa de correio permite a troca de mensagens entre os processos que

pode acontecer direta ou indiretamente.

Vantagens
• É útil para trocar pequenas quantidades de dados
• Não há conflitos a evitar
• É mais fácil de implementar

Desvantagens
• Devido à implementação do processo de conexão descrito acima é mais lento que sua
contraparte

2. O modelo de memória compartilhada. A memória compartilhada permite dois ou mais

processos para trocar informações lendo e escrevendo dados em áreas de memória compartilhada.
A memória compartilhada pode ser simultaneamente acessada por vários processos. Exemplos da
vida real seriam os Sistemas POSIX, bem como sistemas operacionais Windows.

Vantagens
• Permite velocidade máxima
• Oferece melhor comodidade de comunicação

Desvantagens
• Tem problemas de segurança
• Os processos que utilizam o modelo de memória compartilhada precisam certificar-se de
que eles não estejam gravando no mesmo local de memória.
• Problemas na área de sincronização

Existem dois modelos comuns de comunicação entre processos: o modelo de passagem de


mensagens e o modelo de memória compartilhada. O modelo de passagem de mensagens é útil
para troca de pequenas quantidades de dados, é mais fácil de implementar e não tem conflitos a
serem evitados. Porém, devido à implementação do processo de conexão, ela é mais lenta que a
memória compartilhada. A memória compartilhada permite que dois ou mais processos troquem
informações lendo e gravando dados em áreas de memória compartilhada. Permite velocidade
máxima e oferece melhor comodidade de comunicação, porém apresenta problemas de segurança e
sincronização assim como os processos que utilizam o modelo de memória compartilhada precisam
ter certeza de que não estão gravando no mesmo local de memória.

Q19- Por que a separação entre mecanismo e política é desejável?

Ao separar os mecanismos e políticas podemos criar um sistema mais flexível onde as


modificações são mais fáceis de implementar. Isto permite que qualquer projetista de
sistemas desenvolva mecanismos que permanecerão inalterados enquanto as políticas
mudam para atender a necessidades específicas.
Nos sistemas operacionais, os mecanismos determinam como fazer algo, enquanto as políticas
determinam o que será feito. Um exemplo para entender a diferença da vida real seria um escritório
onde todos os dias é exigido que seus funcionários se autentiquem. Este seria um mecanismo. Já
uma política seria mostrar a carteira de trabalho ao segurança para deixá-los passar. Separar os
mecanismos da política é um importante princípio de design no sistema operacional, que afirma que
os mecanismos não devem ditar as políticas. Vejamos a construção do temporizador. É um
mecanismo criado para garantir a proteção da CPU, mas decidir por quanto tempo o cronômetro
será definido para um determinado usuário é uma decisão política. No entanto, o temporizador
pode ser definido de forma diferente para diferentes utilizadores com base em alguns critérios. A
separação entre política e mecanismo é importante para a flexibilidade. Geralmente, as políticas têm
maior probabilidade de mudar entre plataformas ou ao longo do tempo. Se deixássemos que os
mecanismos ditassem ou restringissem fortemente as políticas, cada mudança específica que
quiséssemos fazer numa política teria de alterar os mecanismos subjacentes, o que significaria que
seria mais difícil e demoraria mais tempo a implementar. Portanto, o que os programadores e
designers de sistemas procuram desenvolver é um sistema onde o mecanismo não seja tão afetado
pelas mudanças nas políticas. Isso significa que o desenvolvedor não precisaria alterar todos os
mecanismos subjacentes, apenas redefinir ou corrigir determinados parâmetros. Como resultado, ao
separar os mecanismos e políticas, podemos criar um sistema mais flexível onde as modificações são
mais fáceis de implementar. Isto permite que qualquer projetista de sistemas desenvolva
mecanismos que permanecerão inalterados enquanto as políticas mudam para atender a
necessidades específicas. A separação entre mecanismos e políticas é mais comumente discutida no
contexto de problemas de segurança e alocação de recursos. Separar mecanismos de políticas é um
dos fatores que distingue os micronúcleos dos monolíticos.

Q20- Às vezes, é difícil adotar uma abordagem em camadas quando dois componentes do sistema

operacional dependem um do outro. Identifique um cenário em que não seja claro o modo de

dispor em camadas dois componentes do sistema que requeiram acoplamento estreito de suas

Funcionalidades.

A abordagem em camadas divide o sistema operacional em diferentes camadas, o que permite aos
implementadores alterar o funcionamento interno e aumentar a modularidade. Na abordagem em
camadas, a camada inferior é o hardware, enquanto a camada mais alta é a interface do usuário.
Geralmente a abordagem em camadas precisa ter algum tipo de separação entre as estruturas para
poder dividi-las em camadas. Como resultado, a maior dificuldade com a abordagem em camadas
envolve a definição adequada das várias camadas. Vamos considerar a memória virtual e o
armazenamento. A memória virtual foi desenvolvida numa época em que a memória física era cara e
é um recurso de gerenciamento de memória de um sistema operacional que usa hardware e
software para permitir que um computador compense a escassez de memória física. Ao usar
memória virtual, os dados são transferidos temporariamente da RAM para o armazenamento em
disco. Assim, a memória virtual e o sistema de armazenamento estão relacionados entre si. Durante
a execução do programa, talvez seja necessário mapear arquivos na memória do espaço virtual. Por
outro lado, a memória virtual normalmente usa o sistema de armazenamento para fornecer backup
de dados que não residem atualmente na memória. Às vezes, as atualizações do sistema de arquivos
são armazenadas temporariamente na memória física antes de serem enviadas para o disco. Como
resultado, precisamos planejar cuidadosamente a seção de armazenamento, a seção de memória
virtual e o sistema de arquivos também para que possa interagir com eles.

Um exemplo em que diferentes componentes de um sistema operacional estão relacionados entre si


seria a memória virtual e o sistema de armazenamento. Ter fortes dependências entre componentes
dificulta a divisão das camadas.

Q21- Qual é a principal vantagem da abordagem de microkernel para o projeto de sistemas? Como
os programas de usuário e serviços do sistema interagem em uma arquitetura de microkernel?
Quais são as desvantagens do uso da abordagem de microkernel?
A abordagem microkernel modulariza o kernel e estruturou o sistema operacional sistema
removendo todos os componentes não essenciais do kernel e implementando como programas de
sistema e de nível de usuário. O resultado seria um menor núcleo. Geralmente os microkernels
fornecem gerenciamento mínimo de processo e memória além de um recurso de comunicação.
Além disso, esta abordagem usa mensagem passando para permitir a comunicação entre o
programa cliente e os vários serviços que também estão em execução no espaço do usuário.

O microkernel deve fornecer comunicação entre o programa cliente e os diversos serviços que
também estão rodando no espaço do usuário. Neste caso a comunicação é fornecida através da
passagem de mensagens. O programa cliente e o serviço nunca interagem diretamente, apenas
trocando mensagens com o microkernel.

Como resultado as vantagens de usar a abordagem microkernel seriam:

1. A extensão do sistema operacional fica mais fácil.

2. O sistema operacional é mais fácil de ser transferido de um design de hardware para outro.

3. Há menos alterações necessárias ao modificar o kernel.

4. O microkernel oferece mais confiabilidade devido ao kernel mais simples design e funcionalidade.

5. Uma vez que utiliza o compartilhamento de mensagens para se comunicar e a maioria dos
serviços são executado como usuário em vez de processos de kernel, ele também oferece maior
segurança.

Os microkernels apresentam diversas vantagens, como facilitar a extensão do sistema operacional,


facilitar a portabilidade de um design de hardware para outro, necessitar de menos alterações na
modificação do kernel, ser mais confiável e seguro. Suas desvantagens estão relacionadas aos custos
indiretos do sistema de comunicação e ao uso frequente de mensagens.

Uma das desvantagens de usar a abordagem de microkernel são as sobrecargas de funções do


sistema que afetam o desempenho dos microkernels. Conforme descrito acima, os micronúcleos
usam a passagem de mensagens como forma de comunicação e troca de informações entre o
processo do usuário e os serviços do sistema. Infelizmente, essa comunicação entre processos
acarreta sobrecargas devido ao uso frequente das funções de mensagens do sistema operacional.

Q22- Quais são as vantagens do uso de módulos de kernel carregáveis?

Com módulos de kernel carregáveis, não precisamos implementar todas as funcionalidades do


sistema central. Os serviços adicionais são implementados somente quando são necessários durante
a inicialização ou quando o sistema operacional está em execução.

Com módulos de kernel carregáveis, a ideia do design é que o kernel forneça serviços essenciais
enquanto outros serviços são implementados dinamicamente enquanto o kernel está em execução.
Aqui o kernel possui um conjunto de componentes principais e o restante dos serviços adicionais são
vinculados por meio de módulos. Como exemplo, poderíamos construir um algoritmo de
escalonamento diretamente no kernel e então adicionar suporte para diferentes sistemas de
arquivos através de módulos carregáveis. Como resultado, podemos adicionar ou remover
funcionalidades do kernel enquanto ele está em execução. Com módulos de kernel carregáveis, não
precisamos implementar todas as funcionalidades do sistema central. Os serviços adicionais são
implementados somente quando são necessários durante a inicialização ou quando o sistema
operacional está em execução. Não há necessidade de recompilar ou reinicializar o kernel quando
essas novas funcionalidades são adicionadas.

Q23- Em que o iOS e o Android são semelhantes? Em que são diferentes?

iOS é um sistema operacional móvel desenvolvido pela Apple para rodar seu smartphone
e seu tablet. iOS está estruturado no sistema operacional Mac OS X sistema com funcionalidade
adicional pertinente a dispositivos móveis. Seu design tem uma abordagem em camadas com quatro
pilhas básicas de software em camadas:

1. Núcleo do SO: Esta camada contém o núcleo do SO implementado com base em

o Mac OS X OS.

2. Serviços principais: Esta camada contém suporte para computação em nuvem e

bancos de dados.

3. Serviços de mídia: Esta camada contém suporte para mídia e gráficos.

4. Cocoa Touch: Esta camada fornece suporte para recursos de hardware.

Android
O sistema operacional Android foi projetado e desenvolvido para smartphones e tablets Android. O
Android é executado em uma variedade de plataformas móveis, enquanto seu código é de código
aberto e programado usando a linguagem de programação Java. A construção do Android é uma
pilha de software em camadas que fornece um rico conjunto de estruturas para o desenvolvimento
de aplicativos móveis, enquanto na parte inferior do software está o kernel do Linux.

A partir das informações acima sobre ambos os sistemas, podemos fazer essas comparações

entre os dois sistemas.

Semelhanças
1. Ambos são baseados em kernels existentes. O núcleo do sistema operacional Android é baseado
no Kernel Linux e iOs no Mac OS X;

2. Ambos possuem arquitetura que utiliza pilhas de software;

3. Ambos fornecem estruturas para desenvolvedores. No iOS podemos notar que a implementação
do Cocoa Touch que é uma API para Objective-C que fornece diversas estruturas para o
desenvolvimento de aplicativos. No Android podemos notar a presença de frameworks para
desenvolvimento de navegadores web (webkit), suporte a banco de dados (SQLite) e multimídia;

4. Ambos foram projetados para rodar em smartphones e tablets.

Diferenças
1. Os aplicativos iOS são desenvolvidos em Objective-C enquanto o Android é codificado

em Java. No entanto, em vez de usar a API Java padrão, o Google projetou uma API Android
separada para desenvolvimento Java;
2. O código do iOS é de código fechado, enquanto o Android é de código aberto, o que

afetou positivamente sua popularidade;

3. Como o Android é programado em Java, ele usa uma máquina virtual (máquina virtual Darkvil)
enquanto o iOS executa código nativamente.

As semelhanças entre iOS e Android são que ambos são construídos em kernels existentes,
fornecem estruturas para desenvolvedores e possuem arquitetura que usa pilhas de software. No
entanto, o código do iOS é de código aberto, é codificado em Objective-C e é codificado
nativamente. O Android, por outro lado, é codificado em Java, é de código aberto e usa uma
máquina virtual.

Q24- Explique por que programas Java sendo executados em sistemas Android não usam a API
Java padrão e a máquina virtual.

Os designers de software para dispositivos Android desenvolvem aplicativos na linguagem Java,


porém não usam a API Java padrão. Em vez disso, o Google projetou uma API Android separada para
desenvolvimento Java. Os arquivos de classe Java são primeiro compilados em bytecode Java e
depois traduzidos em um arquivo executável que é executado em uma máquina virtual específica
criada para esta API Android. Isso é feito porque a API normal e a máquina virtual são criadas para
serem compatíveis com os sistemas de desktop e servidor. No entanto, no caso do Android,
precisamos de uma nova API e de uma máquina virtual que seja compatível com dispositivos com
memória e capacidade de processamento de CPU limitadas. Portanto, tanto a API Android para
desenvolvimento Java quanto a máquina virtual são otimizadas para funcionar com smartphones e
sistemas de tablets.

Precisamos de uma nova API e de uma máquina virtual que seja compatível com dispositivos com
memória e capacidade de processamento de CPU limitadas. Portanto, tanto a API Android para
desenvolvimento Java quanto a máquina virtual são otimizadas para funcionar com smartphones e
sistemas de tablets

Q25- O sistema operacional experimental Synthesis tem um montador incorporado ao kernel. Para
otimizar o desempenho das chamadas de sistema, o kernel monta rotinas dentro do espaço do
kernel para minimizar o caminho que a chamada de sistema deve percorrer dentro do kernel. Essa
abordagem é a antítese da abordagem em camadas em que o caminho percorrido no kernel é
estendido para tornar a construção do sistema operacional mais fácil. Discuta as vantagens e
desvantagens da abordagem do Synthesis para o projeto do kernel e a otimização do desempenho
do sistema.

O sistema operacional experimental Synthesis possui um montador incorporado no kernel. Para


otimizar o desempenho da chamada do sistema, o kernel monta rotinas dentro do espaço do kernel
para minimizar o caminho que a chamada do sistema deve seguir através do kernel, que é a antítese
da abordagem em camadas.

Vantagens
O sistema operacional experimental Synthesis consegue compilação on-the-fly graças ao
assembler incorporado no kernel e otimiza o desempenho das chamadas do sistema.

Desvantagens
• Depurar dentro do kernel é difícil
• Esta solução é muito específica do sistema, o que pode causar problemas com
atualizações, portabilidade e flexibilidade
• Além disso, por ser muito específico, um novo compilador deve ser escrito para cada
arquitetura

A vantagem do Synthesis OS é a otimização do desempenho das chamadas do sistema graças ao


assembler incorporado no kernel. As desvantagens são dificuldades de depuração e problemas de
portabilidade e flexibilidade.

Você também pode gostar