Você está na página 1de 111

A ARTE DE PASSAR EM

CONCURSOS DE TI

Sistemas Operacionais
Teoria e Questões Comentadas

1ª Edição / 2019 / Versão 1.0

APRESENTAÇÃO
A tarefa de passar em provas e concursos não é trivial. Exige dedicação,
estratégia e muitas horas de estudo. Contudo, não existe um método

1
científico que possa ser usado em todos os casos. Por isso, acreditamos
que passar em concursos se aproxima mais de uma arte do que uma
ciência.
A Arte de Passar em Concursos de TI é uma coleção de livros que
busca reunir diversas questões de provas das mais importantes bancas
examinadoras do país. Além disso, cada livro da série fornece a base
teórica que permitirá ao candidato acertar as questões das mais exigentes
bancas examinadoras.
Nesse volume, exploramos os Sistemas Operacionais. Para construir
esse livro, comentamos diversas questões de provas. Com isso, foi
possível perceber o espectro de cobrança do tema. Em um segundo
momento, construímos a base teórica do livro. Apesar de ser de grande
valia a engenharia reversa das questões, não ficamos satisfeitos com
apenas isso. A teoria foi expandida em torno dos temas cobrados pela
Banca com o cuidado de inserir somente o necessário para sua
aprovação. Adotando essa estratégia acreditamos que esse livro se
transformou em uma poderosa ferramenta para sua aprovação.

2
SOBRE O AUTOR

ALMEIDA JUNIOR
Engenheiro Eletrônico pela Universidade Federal da Bahia (UFBA),
curso que concluiu em apenas 4 anos. Possui Especialização em
Criptografia pela Universidade Federal Fluminense
(UFF), Especialização em Automação industrial pela Universidade do
Estado do Rio de Janeiro (UERJ) e Mestrado em Computação pela
Universidade Salvador (UNIFACS). Possui as certificações ITIL e PMP.
Participou do Curso de Formação de Oficiais da Marinha do
Brasil no Centro de Instrução Almirante Wandenkolk (CIAW) do Curso
de Formação de Engenheiros de Equipamentos da UNIVERSIDADE
PETROBRAS.
Foi funcionário do BANCO DO BRASIL, atuou como Engenheiro de
Automação na AUTOMIND e é oficial da reserva da MARINHA DO
BRASIL (Corpo de Engenheiros Navais). Foi Engenheiro de
Equipamentos na PETROBRAS durante 6 anos. Atualmente
é AUDITOR FEDERAL DE FINANÇAS E CONTROLE.
Possui conhecimentos e experiência nas áreas de elétrica, eletrônica,
instrumentação, visão computacional, algoritmos genéticos, programação
C/C++, MATLAB e JAVA.
Em relação a concursos públicos, foi aprovado nos seguintes certames:
Auditor Federal de Controle Externo do TCU (2015, 39º lugar)
Auditor Federal e Finanças e Controle da CGU (2012, 5º lugar)
Analista de Comércio Exterior do MDIC (2012, 4º lugar), Auditor
Fiscal de Feira de Santana (2012,3º lugar) Marinha do Brasil (Corpo
de Engenheiros/2005, 2º lugar), Infraero (Engenheiro Eletricista/2004,
16º lugar) Embasa (Engenheiro Eletricista/2004) Petrobras
(Engenheiro Eletrônico/2004) Banco do Brasil (Escriturário/2003)

3
CONTATO
Email: professor.almeidajunior@gmail.com

SITES
www.patreon.com/almeidajunior
www.apcti.com.br
www.tiparafiscos.com.br
CANAIS YOUTUBE
youtube.com/apcti
youtube.com/tiparafiscos
http://youtube.com/profalmeidajr

4
Sumário

1. O que é um Sistema Operacional ?


2. O que é um Sistema Operacional faz ?
3. O que compõe um Sistema Operacional ?
4. Como o sistema operacional é inicializado
5. Visão geral do funcionamento de um sistema computacional
6. System Call e Interrupções
7. Cluster Beowulf
8. Modo Núcleo e Modo Usuário
9. Arquiteturas de Núcleo
10. Processos
11. Pipes
12. Multiprogramação e Tempo Compartilhado (multitarefa)
13. O que é um processo?
14. Um processo em detalhes
15. Threads
16. Modelos Multithreads
17. Estados de um Processo
18. Criando e Encerrando Processos
19. Bloco de Controle de Processo (Process Control Block - PCB)
20. Escalonamento de Processos
21. Dispatcher
22. Critérios de Escalonamento
23. Algoritmos de Escalonamento
24. Memória Principal
25. Hardware
26. Vinculação de Endereços (Binding)
27. Endereçamento Lógico e Físico
28. Carga Dinâmica
29. Bibliotecas Compartilhadas
30. Swapping
31. Alocação de Memória Contígua
32. O Problema da Fragmentação
33. Paginação
34. Segmentação

5
35. Memória Virtual
36. Trashing (Atividade improdutiva)
37. Anomalia Belady
38. Sistemas de Arquivos
39. Nomeação de Arquivos
40. Estrutura de Arquivos
41. Tipos de Arquivos
42. Acesso aos arquivos
43. Sistemas de Arquivos Journaling
44. O MBR e o Bloco de Inicialização
45. Alocação dos Arquivos
46. I-nodes
47. Sistema FAT
48. Sistema NTFS
49. Gerenciamento do Espaço Livre
50. Dispositivos de Blocos e Caractere
51. Controladora de Dispositivos
52. Técnicas de I/O
53. Módulos de Entrada e Saída
54. Periféricos
55. Funções de um módulo de E/S
56. Estrutura de um módulo de E/S
57. Comunicação da CPU com o módulo de E/S
58. Entrada e Saída Programada
59. Entrada e Saída Controlada por Interrupção
60. Acesso Direto à memória
61. Interface FireWire e InfiniBand
62. RAID
63. Virtualização - Visão Geral
64. Tipos de Hipervisor
65. Instruções sensíveis e privilegiadas
66. Hipervisor tipo 1 (bare metal)
67. Hipervisor tipo 2 (Hosted)
68. Paravirtualização
69. Virtualização Parcial e Total
70. Proteção das Máquinas Virtuais

6
71. Emulação, Simulação e Virtualização
72. Formas de Virtualização
73. Propriedades da virtualização
74. Questões

1. O que é um Sistema Operacional ?


A primeira vista parece ser simples definir o que é o Sistema Operacional
e que ele faz. Contudo, como veremos, nem sempre é possível delimitar
uma fronteira clara. De qualquer forma, não há dúvida que um Sistema
Operacional é um programa. O diferencial é que ele é um dos programas
mais complexos que rodam na sua máquina. Um sistema operacional é
responsável pelo gerenciamento do hardware do seu computador. É ele
que vai diz, por exemplo, qual processo (programa em execução) poderá
utilizar o processador e por quanto tempo. Também é papel do SO
garantir que um programa não interfira no outro. Ou seja, o SO atua
como um grande gerente de recursos.

7
Podemos ver um sistema operacional com uma camada entre o hardware
e as aplicações de usuário. Dessa forma, o propósito de um sistema
operacional é criar um ambiente que permita a execução de forma
conveniente, ou seja, simples e ao mesmo tempo eficiente.
É importante também notar que existe um vasto espectro sistemas
operacionais. Por exemplos, alguns são responsáveis por gerenciar o
hardware de PC’s, outros de celulares e ainda existem SO’s para
Mainframes.
É importante entender de forma clara o que significa uma execução
conveniente de programas. Note que se o SO não existisse seria papel do
programador lidar diretamente com hardware, além disso, ele deveria
prever a existência e competição com outros programas. Ademais, para
cada novo sistema (hardware) provavelmente seria necessária uma nova
codificação para adaptar o programa ao novo hardware. Dessa forma,
podemos dizer que o sistema operacional cria uma abstração para o
programador.
Segundo Tanenbaum, um SO pode ser visto como uma máquina
estendida ou como um gerenciador de recursos. Como uma máquina
estendida, o usuário não está interessado em saber os detalhes funcionais
dos dispositivos. Vamos tomar como exemplo o acesso aos dados de
disco rígido. Uma abstração típica seria que o disco contenha um
conjunto de nomes de arquivos. Note que no fundo o que existem são 0’s
e 1’s. Um sistema de arquivos é uma abstração criada pelo SO. O usuário
não precisa se preocupar com detalhes com em que posição está o
cabeçote de leitura do HD. Dessa forma, o SO esconde do usuário a
complexidade do hardware e apresenta uma visão fácil e simples
para as operações sobre os dispositivos. Essa visão é equivalente a
uma máquina estendida ou máquina virtual, mais fácil de lidar.
Na outra visão de Tanenbaum, o SO é um gerenciador de recursos.
Lembre-se que o sistema computacional é conjunto de recursos:
processadores, memórias, discos, mouses, teclados, impressoras, etc. É
tarefa do SO gerenciar a alocação desses dispositivos para os diversos
processos, de forma que não aconteçam inconsistências.

2. O que é um Sistema Operacional faz ?


Do ponto de vista do usuário, um PC consiste basicamente de teclado,
monitor, mouse e um sistema operacional. Para o usuário, o sistema
operacional tem o papel de maximizar o desempenho da máquina.

8
Provavelmente, o usuário desejará abrir diversas abas do navegador,
ouvir música, e talvez jogar ao mesmo tempo. Dessa forma, do ponto de
vista do usuário, o sistema operacional tem como função principal
facilitar o uso. Ou seja, abstrair a complexidade do hardware para o
usuário e entregar um ambiente fácil de utilizar e útil. Em muitos
sistemas, mesmo com apenas uma CPU, o sistema operacional é capaz
de criar a ilusão que as diferentes tarefas estão sendo executadas ao
mesmo tempo. Note que quando há apenas uma CPU isso é de fato uma
ilusão, já que somente um processo (programa em execução) poderá
estar de posse da CPU durante um determinado tempo. Essa ilusão é
chamada de multitasking ou multitarefa.
Do ponto de vista do sistema computacional, o SO é grande maestro. Ele
é responsável por alocar os recursos da máquina. Perceba que uma
máquina tem diversos recursos: memória, tempo de CPU, dispositivos de
I/O, etc. É papel do SO dizer qual aplicação vai utilizar qual recursos e
por quanto tempo. Vamos pegar como exemplo a impressora. Note que
se todos os programas pudessem enviar livremente caracteres para
sempre impressos, os textos resultados seriam uma mescla de diferentes
arquivos. Para que isso não acorra, o SO controla o acesso a esse
hardware criando um fila.

01. (2014/VUNESP/Analista de Sistemas) Existe um tipo de sistema


operacional que fornece ao usuário a ilusão de que o número de
processos que são executados simultaneamente no computador é
superior ao número de processadores existentes no computador. Esse
tipo de sistema operacional é conhecido como
a) escalonável.
b) multiexecução.
c) multitarefa.
d) preemptivo.
e) round robin.
Comentários:
Como vimos, essa ilusão criada pelo SO é chamada de multitarefa. Os
demais termos serão explicados em aulas posteriores.

9
3. O que compõe um Sistema Operacional ?
Nem sempre é possível dizer o que compõe um sistema operacional. Não
há dúvida que o Kernel (núcleo do sistema operacional) faz parte do SO.
Contudo, nem sempre é fácil dizer o que faz parte do SO. Por exemplo,
um navegador é parte do SO ou é um aplicativo? Talvez de forma
apressada você pense que é aplicativo e ponto final. Contudo, essa
questão foi até os tribunais nos Estados Unidos. A Microsoft passou a
distribuir o seu navegador de forma gratuita junto com a instalação do
sistema operacional. A Netscape foi a justiça alegando que essa prática
era monopolista e ilegal. Então o que vem “na caixa” quando compro o
Windows, nem tudo é o SO? E os programas de Shell (interpretadores de
comandos) são parte do SO ou apenas um outro programa. Talvez você
já tenha ouvido falar no Chrome OS. Esse sistema operacional da
google, baseado em Linux, usa um navegador web (Google Chrome)
como interface principal com o usuário. E agora, essa “interface
navegador” faz parte do SO? De qualquer forma, não há dúvida que há
um conjunto de atividades que fazem parte do SO, esse conjunto de
atividades é realizada pelo que chamamos núcleo do sistema operacional
ou simplesmente Kernel. O Kernel é um programa que está rodando o
tempo todo no computador. Além do Kernel, temos outros dois tipos de
programas: programas de sistema e programas de aplicação. Programas
de sistema estão ligados ao sistema operacional, tem uma relação muito
próxima, mas não fazem parte necessariamente do Kernel. Um exemplo
clássico de programa de sistema é um compilador. Os programas
aplicativos são os demais programas. Eles têm uma aplicação prática
para o usuário. Por exemplo, o word ou o excel.
02. (2005/ ESAF/ Receita Federal) Em um sistema operacional, o
kernel é
a) um computador central, usando um sistema operacional de rede,
que assume o papel de servidor de acesso para os usuários da rede.
b) a técnica usada para permitir que um usuário dê instruções para
a máquina, usando instruções gráficas.
c) o processo de intervenção do sistema operacional durante a
execução de um programa. Tem como utilidade desviar o fluxo de
execução de um sistema para uma rotina especial de tratamento.
d) o núcleo do sistema, responsável pela administração dos recursos
do computador, dividindo-os entre os vários processos que os

10
requisitam. No caso do Linux, o Kernel é aberto, o que permite sua
alteração por parte dos usuários.
e) um pedido de atenção e de serviço feito à CPU.
Comentários:
a) Esse é um servidor de autenticação
b) GUI
c) Tratamento de interrupções
d) Gabarito
e) Interrupção

4. Como o sistema operacional é inicializado


Já vimos que o principal programa de um sistema operacional é o
Kernel, mas como o kernel é carregado na memória. Ora, lembre-se que
os programas são arquivos que estão armazenados, geralmente, no HD.
Logo, uma questão que deve ser respondida é como o SO é inicializado.
Ou seja, quando você liga o computador, como o HW sabe onde está o
kernel?
Bem, quando ligamos ou resetamos a nossa máquina uma série de
processos é executada antes que ele esteja pronta para rodar o kernel.
Esse processo é chamado de boot. Na verdade, boot é um nome mais
curto para bootstrap.
O processo de boot é guiado por um software gravado em um chip de
memória. Essa memória pode ser uma memória ROM ou EEPROM. Nos
computadores mais modernos esse chip de memória é geralmente flash.
O programa gravado nesse chip é chamado de BIOS (Basic Input-Output
system). Você pode configurar alguns parâmetros entrando na "BIOS".
Para tanto, geralmente, você deve apertar DEL durante o boot (ou outra
tecla pode ser utilizada, por exemplo F1) para ter acesso a tela de
configuração. A essa tela tem a aparência da figura a seguir.

11
O programa gravado nesse chip é responsável, por exemplo, por
identificar quantos HD's sua máquina possui e qual deles será o mestre, o
disco de boot, etc. Para ser mais preciso, essa “parte” do programa de
configuração da BIOS é chamado de SETUP.
Aqui cabe um alerta. Para ser mais didático, podemos até dizer que
existem três programas: BIOS, SETUP e POST. Na verdade, estão todos
gravados na mesma memória flash. Tudo no fundo é o "BIOS" ou o
"bootstrap". Portanto, não seja rigoroso em questões de prova. Tente
saber o que o examinador está querendo como resposta.
Uma vez que o PC é ligado, a primeira etapa do boot é executar o POST
(power on self test). O POST é um programa que faz parte da BIOS (ou
seja é uma etapa do boot/bootstrap) e é responsável por verificar erros e
defeitos no HW. Por exemplo, se houver um conflito na memória ou se
ela estiver mal encaixada ou ainda com defeito, provavelmente você
ouvirá beeps. O padrão de beeps permite você identificar o tipo de
problema que está ocorrendo.
Se não houver nada de errado, tipicamente são mostradas na tela
informações do HW. Por exemplo, quantidade de memória RAM,
fabricante da BIOS, etc. A figura a seguir ilustra essa etapa.

12
Após o POST, acorre o acesso ao primeiro setor do disco (MBR - Master
Boot Sector) que foi definido como boot disk (essa definição pode ser
alterada no SETUP). Neste setor, espera-se encontrar
um bootstrap loader, bootstrap ou ainda boot loader específico para
cada sistema operacional. Por exemplo, no windows 2000, o boot loader
é chamado de NTLDR.
É importante entender que o bootstrap é o programa responsável lançar
o sistema operacional. Depois de carregado na memória, o SO passa a
controlar o hardware do computador. Nos sistemas modernos existem os
chamados boot loader de segundo estágio. Por exemplo, o GRUB. Outro
exemplo no Linux seria o LILO. Esses programas podem ser capazes de
fornecer ao usuário múltiplos boots. Ou seja, o usuário pode carregar
mais de um SO a partir deste ponto (geralmente selecionando a partir de
uma lista). Veja a figura a seguir.

Lembre-se também que o processo de boot é um termo curto para


bootstrap. Assim, não se assuste se um autor associar todo o processo
descrito ao bootstrap (ou ao bootstrap loader). Outro ponto importante

13
para prova é que podemos afirmar que o bootstrap (boot em sentido
amplo) não faz parte do SO.
03. (FCC/2007) NÃO é um componente dos sistemas operacionais:
a) bootstrap.
b) scheduler.
c) kernel.
d) shell.
e) GUI.
Comentários:
a) O bootstrap não faz parte do SO. Ele é reponsável por carregar o SO
na memória, uma vez carregado, o SO passa a controlar o hardware da
máquina. Portanto, é nosso gabarito.
b) O scheduler é parte do SO responsável por agendar os processos. Ou
seja, qual processo (programa em execução) terá posse da CPU e por
quanto tempo.
c) O kernel é a parte que do SO que está em constate execução. Tem o as
principais funções do sistema operacional
d) Shell é um interpretador de comandos. Apensar de não fazer parte do
kernel, o shell está intimamente ligado ao SO.
e) Gui faz referência a interface gráfica fornecida pelo sistema
operacional,
04. (FCC/2010) Algumas Regras Gerais de Uso do Computador
I. Sempre feche todas as aplicações abertas antes de instalar
qualquer software. Para um cuidado extra, faça uma nova
inicialização (boot) e feche todas as aplicações que são inicializadas
automaticamente antes de você instalar algum programa.
Sempre desligue seu computador antes de plugar ou desplugar
qualquer tipo de equipamento.
[....]
No item I, a recomendação para fazer uma nova inicialização (boot),
significa que o computador executará uma série de tarefas,
acionando primeiramente
a) o SO (sistema operacional).
b) a memória RAM.
c) o disco rígido (HD).
d) a BIOS (Sistema Básico de Entrada e Saída).

14
e) o programa SETUP.
Comentários:
O primeiro programa que acesso no seu computador é o bootstrap. Esse
programa está em chip flash. De forma mais abrangente, é o que
chamamos de BIOS. Portanto, gabarito D.
05. (CESPE/2011/PC-ES) O carregamento (boot) do sistema
operacional Linux pode ser gerenciado pelo programa LILO
Comentários:
LILO é um acrónimo para a expressão inglesa LInux LOader que, em
português significa carregador de linux. Ele permite configurar o boot de
múltiplos sistemas operacionais na mesma máquina.

5. Visão geral do funcionamento de um sistema


computacional
Um sistema computacional é tipicamente formado por mais de uma CPU
(ou núcleos), memória principal e vários dispositivos de entrada e saída.
Para cada um desses dispositivos, existe uma controladora. A CPU e as
controladoras podem executar em paralelo. Logo, elas vão competir por
ciclos de memória. Esse fato impõe a necessidade do gerenciamento do
acesso a memória compartilhada. Para controlar os dispositivos de I/O os
fabricantes fornecem código específicos para um determinado sistema
operacional. Esses códigos são chamados de “drivers”. Assim, por

15
exemplo, quando instalamos uma impressora, além da instalação física, é
necessário instalar o respectivo “driver”.
A figura seguir mostra de forma esquematiza um sistema computacional
moderno típico.

06. (2012/VUNESP/TJ-SP/Analista de Sistemas) Analise as


afirmações sobre os componentes de um sistema operacional típico.
I. O núcleo é componente responsável pela gerência dos recursos de
hardware usados pelas aplicações de um computador.
II. Os módulos de código específicos para acessar os dispositivos
físicos de um computador são conhecidos como drivers.
III. Os programas utilitários facilitam o uso do sistema
computacional, fornecendo funcionalidades complementares ao
núcleo, como a formatação de discos.
Sobre as afirmações, está correto o contido em
a) I, apenas.
b) II, apenas.
c) I e II, apenas.
d) I e III, apenas.
e) I, II e III.
e) I, II e III.
Comentários:
I. Correto. O kernel é software que está sempre rodando. Ele é
responsável pelas funções principais do sistema operacional. Dentre elas
ser um grande maestro da utilização dos recursos de hardware.

16
II. Correto. Um driver é um código, geralmente escrito pelo fabricando
do I/O, que permite que o SO possa controlar e gerenciar o I/O.
III. Correto. Além do Kernel, temos outros dois tipos de programas:
programas de sistema e programas de aplicação. Programas de sistema
estão ligados ao sistema operacional, tem uma relação muito próxima,
mas não fazem parte necessariamente do Kernel. Os programas
aplicativos são os demais programas. A rigor um programa que faz
formação de disco deveria ser considera um programa de sistema, mas o
examinador não foi tão criterioso. Chamou simplesmente de programa de
aplicação, os programas que não fazem parte do Kernel. Talvez se
alguém tivesse entrado com recurso o gabarito poderia ter sido alterado.
Gabarito E

6. System Call e Interrupções


Como vimos, o processo de boot é responsável por encontrar o código do
SO (Kernel) no HD e colocar na memória RAM. Uma vez que o SO está
carregado, o controle passa a ser do sistema operacional. O SO é um
programa capaz de fornecer serviços. Parte desses serviços não são
fornecidos diretamente pelos Kernel, mas por programas de sistema. Tais
programas também são chamados de daemons. Os daemons rodam
durante todo o tempo que o kernel está rodando. No UNIX, o primeiro
processo que é iniciado é o “init”. Ele é responsável por inicializar outros
daemons.
Uma vez que o kernel está carrego e também os daemons, o SO está
pronto para “atender” as requisições dos seus usuários. Nesse momento,
o SO aguarda por um evento. Para ter conhecimento do evento é
utilizada uma interrupção. As interrupções podem ser geradas
diretamente pelo hardware ou via software. As interrupções de hardware
são sinais enviados, por meio do barramento, para a CPU. Já as
interrupções de software são geradas por uma “System Call” (chamada
de sistema).
Uma system call (chama de sistema) também é conhecida como
“monitor call”. As chamadas de sistemas (system calls) constituem a
interface entre um programa do usuário e o Sistema Operacional.
Note que uma system call é um meio de comunicação entre um programa
e os serviços oferecidos pelo sistema operacional. Por exemplo, se um
programa deseja escrever um arquivo no disco, ela fará isso por meio de
uma system call. Dito de outro forma, uma chamada de sistema é uma

17
porta de entrada para acesso ao núcleo do sistema, que contém suas
funções. Sempre que o usuário necessitar de algum serviço, o solicita
através de uma chamada de sistema definida e específica. Cada serviço
disponível por um determinado Sistema Operacional possui uma
chamada de sistema associada e cada SO possui seu próprio conjunto de
chamadas. As chamadas de sistemas, de fato, servem também para
proteger o núcleo do Sistema Operacional, tentando impedir que um
determinado programa realize alguma operação que altere a integridade
do sistema.
Quando uma interrupção é gerada, a CPU passa a executar um código
específico que trata aquela interrupção. Ou seja, o fluxo de execução é
direcionado para um endereço que possui um rotina para tratar a
interrupção. Para saber o local (endereço) onde está o código que trata
cada interrupção é utilizado um conjunto de ponteiros que chamamos de
vetor de interrupções. Ou seja, o vetor de interrupções é uma tabela de
endereços de memória que apontam para as rotinas de tratamento de
interrupções. Geralmente, esse vetor ocupa as posições mais baixas do
espeço de memória (ou seja, encontram-se nos primeiros bytes).
07. (2009/ UFF/ Analista de Tecnologia da Informação) No tocante
aos sistemas operacionais, quando o usuário deseja solicitar algum
serviço do sistema, ele realiza uma chamada a uma de suas rotinas
(ou serviços) por meio de "artifícios" que são a porta de entrada
para o acesso ao núcleo do sistema operacional. Esse artifício ou
acesso é conhecido como:
a) bibliotecas;
b) sub-rotinas;
c) system calls;
d) kernel;
e) buffer.
Comentários:
a) Errado. Bibliotecas é um termo genérico. Aqui o examinador está se
referindo a códigos que pode ser reutilizados por diferentes programas.
b) Errado. De forma geral sub-rotina nada mais é quem uma parte do
código que está encapsulado em um código maior e pode ser chamada. É
uma espécie de micro-programa dentro do programa principal.
c) Correto. As chamadas de sistema são interrupções via software que
permite o acesso aos serviços do sistema operacional. Por exemplo, abrir

18
um arquivo em disco.
d) Errado. Kernel é o núcleo do SO, ou seja, o programa que roda o
tempo todo na memória e provê as principais funcionalidades de um
sistema operacional
e) Errado. Buffer é termo genérico para uma memória temporária.
Geralmente o buffer serve para acumular dados prévios.

08. (2011/VUNESP/ Administrador de Banco de Dados) Na estrutura


organizacional do sistema operacional Linux, a função do System
Call é
a) descobrir as aplicações em execução no sistema.
b) prover a interface entre a aplicação e o Kernel.
c) realizar a chamada de aplicações de rede.
d) realizar a comunicação entre os dispositivos e o Kernel.
e) sincronizar as aplicações multitarefa.
Comentários:
No Linux, ou em qualquer outro sistema operacional, uma chamada de
sistema permite ao programador acessar os serviços do sistema
operacional. Assim, ela é interface entre o programa (aplicação) e o
núcleo do SO que fornece efetivamente o serviço. Portanto, gabarito B.

7. Cluster Beowulf

Um cluster Beowulf é um conjunto de dois ou mais computadores


independentes, interligados via rede, que trabalham em conjunto
trocando informações entre si em torno de uma única tarefa.
Normalmente são utilizando computadores pessoais conectados por meio

19
de uma rede local. Também é comum que o sistema operacional seja o
Linux. Nesse cluster existe um computador principal. Essa máquina é
responsável por controlar todo o cluster e pela distribuição de tarefas.
09. (2004/ESAF/CGU) Computadores de baixo custo podem ser
agrupados em clusters, onde exercem funções que exigem alto
desempenho computacional como se fossem uma única máquina de
grande porte. É correto afirmar que um cluster Beowulf com o
sistema operacional Linux é constituído de vários nós escravos,
a) sendo que cada nó exerce o controle sobre todos os demais nós.
b) sendo que cada nó exerce o controle sobre seu nó vizinho e o
último nó exercerá o controle sobre o primeiro nó.
c) sem a necessidade de controle.
d) sendo que cada nó exerce seu próprio controle.
e) controlados por um computador principal.
Comentários:
Existe um nó na rede que gerencia o cluster. Portanto, gabarito E.

8. Modo Núcleo e Modo Usuário


Já sabemos que o sistema operacional é formado por um conjunto de
rotinas (kernel) que oferece serviços aos usuários e suas aplicações. Por
razões de segurança e estabilidade, os sistemas operacionais restringem
as operações executadas pelas aplicações. Por exemplo, restrições de
acesso a dispositivos de hardware (HD, memória, etc). Para tanto,
existem dois modos de acesso. O modo de acesso é um mecanismo
presente no hardware dos processadores. No modo usuário, uma
aplicação só pode executar instruções não privilegiadas, ou seja,
instruções que não oferecem riscos ao sistema. Já no modo Kernel
(também chamado de modo supervisor), uma aplicação pode executar
também instruções privilegiadas, ou seja, instruções que oferecem risco
ao sistema, tais como instruções que acessam dados no disco. Perceba
que as chamadas de sistemas possuem no seu código instruções
privilegiadas, logo o processador deve estar em modo kernel para
executá-las.

9. Arquiteturas de Núcleo

20
O projeto de um sistema operacional depende muito do hardware a ser
utilizado e do tipo de SO que se deseja construir (tempo compartilhado,
tempo real, etc). A maneira como o código do sistema é organizado e o
inter-relacionamento entre os seus diversos componentes pode variar
conforme a concepção do projeto. As principais arquiteturas dos são:
Arquitetura monolítica
Arquitetura em camadas
Gerência de Máquinas virtuais
Arquitetura microkernel

Na arquitetura monolítica, os vários módulos que são compilados


separadamente e depois linkados formando um único programa
executável. A desvantagem é que a manutenção é bastante difícil. Por
outro lado, o projeto é mais simples e permite um bom desempenho.
Na arquitetura em camadas, o sistema é dividido em níveis sobrepostos,
onde cada camada oferece um conjunto de funções que podem ser
utilizadas apenas pelas camadas superiores. As camadas mais internas
são mais privilegiadas que as externas. Tem como vantagem criar uma
hierarquia de níveis de modos de acesso. Também facilita a depuração e
manutenção. Tem como desvantagem o desempenho.
Na gerência de máquinas virtuais, cria-se um nível intermediário entre o
hardware e o sistema operacional. São criadas máquinas virtuais
independentes, cada uma oferece uma cópia virtual do hardware. Como
cada VM é independente, é possível que cada VM possua seu próprio
sistema operacional e que os usuários executem aplicações como se
estivesse dedicado a cada um deles. A vantagem dessa abordagem é o
isolamento total entre cada VM, oferecendo grande segurança para cada
uma delas. A desvantagem é necessidade de uma gerencia dessas
máquinas virtuais, já que vão compartilhar os mesmos recursos do
hardware reais.
Na arquitetura de microkernel, a ideia é tornar o núcleo do SO o mais
simples possível. Os serviços do sistema são disponibilizados através de
processos, responsáveis por oferecer um conjunto específico de funções
(gerência de arquivos, processos, de memória e escalonamento). Sempre
que uma aplicação deseja algum serviço, deve solicitar ao processo
responsável. A aplicação que solicita serviço é chamada de cliente e o
processo que responde é denominado de servidor. A principal função do
núcleo é realizar a troca de mensagens entre cliente e o servidor. Tem

21
como vantagem a manutenção, escalabilidade, flexibilidade e
portabilidade. A desvantagem é que sua implementação é difícil.
10. (2012/ ESAF/Analista de Sistemas) Na arquitetura Microkernel
a) permite-se isolar as funções do sistema operacional por diversos
processos servidores pequenos e dedicados a serviços específicos.
b) o sistema operacional passa a ser de difícil manutenção.
c) nunca há necessidade de acesso direto ao hardware, como
operações de entrada/saída.
d) permite-se agrupar as funções do sistema operacional por
diversos processos clientes pequenos e dedicados a servidores
espontâneos.
e) confere-se escalabilidade reduzida ao sistema operacional.
Comentários:
a) Correto. No microkernel, utiliza-se o conceitos de processo servidor e
cliente.
b) Errado. A manutenção é facilitada
c) Errado. A arquitetura que blindaria o SO do acesso ao hardware real
seria a de máquinas virtuais.
d) Errado. Quem fornece os serviços (funções) do sistema operacional
são os processos servidores
e) Errado. A arquitetura é escalável.

10. Processos
Um processo é um programa em execução. Ou seja, é um código que
está carregado e memória e está sendo executado pelo processador. Esse
termo é útil para diferenciar do código armazenado no HD. Quando
compilamos um código fonte, um executável é criado. Esse arquivo que
fica no HD chamamos de programa. Note que um mesmo programa pode
ser carregado em diferentes instâncias na memória. Imagine que exista
um programa que é uma calculadora é possível “abrir” dois desses
programas. Note que na memória existiram duas cópias do mesmo
código (programa), essas entidades que existem na memória é que
chamamos de processos. Note que cada processo tem um espaço de
endereçamento na memória, ou seja, ele ocupa determinadas posições na
memória. Um processo pode dar origem (criar) novos processos. O
processo que cria novos processos é chamado de pai e os criados são

22
chamados de filhos. Claro que esse processo pode ser recursivo, ou seja,
os processos filhos também podem criar seus próprios filhos.

11. Pipes
Um pipe é um pseudoarquivo utilizado para conectar dois processos.
Assim, um pipe pode ser utilizado como um meio de comunicação entre
dois processos. Um processo escreve no pipe como se ele fosse um
arquivo de saída. Do mesmo modo, o outro processo envolvido lê os
dados do pipe como se fosse um arquivo de entrada. Note que isso é
extremamente útil, principalmente para quem lida com longos comandos
no shell. Se o pipe não fosse possível, seria necessário gerar
efetivamente um arquivo para que o outro processo pudesse então ler
desse arquivo.
11. (2013/ FCC/ TRT - 5ª Região) É um tipo de pseudoarquivo que
pode ser usado para efetuar comunicação entre dois processos. Se
um processo A pretende enviar dados para o processo B, o processo
A escreve em um lado (do mesmo modo que estivesse escrevendo em
um arquivo) e o processo B poderá ler os dados como se estivesse
lendo de um arquivo de entrada. A este pseudoarquivo dá-se o nome
de
a) channel.
b) pipe.
c) queue.
d) thread.
e) stdout.
Comentários:
Como vimos, um pipe facilita a comunicação entre dois processos. Ele se
comportar com um arquivo que pode ser escrito por um processo e lido
por outro.

23
12. (2009/ UFF/ Analista de Tecnologia da Informação) No Linux, os
processos se comunicam por meio de um mecanismo de troca de
mensagens utilizando canais de comunicação. Esse mecanismo é
conhecido como:
a) shell;
b) pipes;
c) PID;
d) i-node;
e) cluster
Comentários:
Como vimos, uma das formas dos processos se comunicarem é por meio
de pipes. Vamos comentar os demais itens.
a) É o interpretador de comandos
b) Gabarito
c) É um identificador de um processo
d) É um estrutura de dados que descreve um objeto no sistema de
arquivos Unix/Linux
e) Conjunto de computadores fortemente ligados que aparentam ser um
único sistema.

12. Multiprogramação e Tempo Compartilhado


(multitarefa)
Multiprogramção e tempo compartilhado. Esses conceitos estão
intrinsecamente ligados ao conceito de sistemas operacionais modernos,
de tal forma que podem dizer que fazem parte de sua estrutura.
Tipicamente, um programa realiza operações de CPU e I/O. Se um
único programa tomasse posse do sistema até o final da sua execução,
existiria uma grande desperdício de recursos. Por exemplo, quando um
programa (mais precisamente um processo) realiza uma operação de I/O
(ex: aguarda a entrada de um dado), a CPU fica ociosa. Assim, cabe ao
SO executar outro processo na CPU, enquanto o anterior aguarda ser
atendido pelo I/O. Essa estratégia de otimização do uso da CPU é
chamada de multiprogramação.
Em sistemas multiprogramados, vários processos são mantidos na
memória. Aqueles que não podem ser armazenados na memória principal

24
(por limitação de espaço), permanecem em disco (processo de
swap/memória virtual). Assim que for possível, o processo sairá do disco
e será carregado na memória principal.
A diferença entre sistemas multiprogramados e de tempo compartilhado
é sutil, pois os sistemas de multitarefa também são multiprogramados
(mantêm vários programas na memória e otimizam a utilização da CPU)
. Contudo, nos sistemas multitarefa (ou de tempo compartilhado), a CPU
alterna entre os processos com uma frequência tão alta que permite
a interação do usuário com programas enquanto eles são executados.
Ou seja, sistemas de tempo compartilhado permitem a comunicação
constante entre o usuário e o programa. Eles criam um a ilusão que existe
uma máquina está sempre disponível para qualquer processo. Podemos
concluir, que os sistemas de tempo compartilhado nada mais são que
uma extensão lógica da multiprogramação.
13. (ESAF/CVM/2010) São tipos de sistemas operacionais:
a) Sistemas Monousuários/Monopointer, Sistemas
Multiusuários/Multipointer, Sistemas com múltiplas entradas.
b) Sistemas Monoprogramáveis/Monotarefa, Sistemas
Multiprogramáveis/Multitarefa, Sistemas com múltiplos
processadores.
c) Sistemas Monostakeholder/Monoinstrução, Sistemas
Multistakeholder/Multi-instrução, Sistemas com múltiplos
processadores.
d) Sistemas Monocompiláveis/Monomonitoramento, Sistemas
Multicompiláveis/Multimonitoramento, Sistemas com múltiplos
usuários.
e) Sistemas Monoplanejáveis/Monodesign, Sistemas
Multiplanejáveis/Multidesign, Sistemas com processadores de
segmentação.
Comentários
Sistemas monoprogramáveis/monotarefa permitiam que apenas um
programa/processo ocupasse o sistema computacional de cada vez.
Vimos anteriormente o conceito de sistemas
Multiprogramáveis/Multitarefa. Por fim, existem sistemas operacionais
que são desenvolvidos para aproveitar computadores com múltiplos
processadores. Neste caso, diversos programas podem rodar ao mesmo
tempo (um em cada processador) ou partes de um mesmo programa pode
ser executados em diferentes processadores.

25
Gabarito: B

13. O que é um processo?


No jargão de TI e também dos leigos é muito comum falarmos em
programas (softwares) com o mesmo significado de processos. Contudo,
os conceitos são diferentes. Para distinguir e sanar qualquer tipo de
dúvida, vamos conceituar e diferenciar processos e programas.
Um processo pode ser pensado com um programa em execução. Logo,
isso quer dizer um programa e um processo não são a mesma coisa.
Quando usamos o termo programa, estamos falando do arquivo que
contém as instruções do nosso algoritmo. Já quando falamos em
processo, estamos falando da entidade dinâmica. Ou seja, do código
carregado na memória. Um processo é o programa sendo executado.
Note que essa distinção é importante já que eu posso ter, por exemplo,
dois processos diferentes que executam o mesmo código original
(programa). Imagine, por exemplo, abrir no Windows duas cópias de um
programa de edição gráfica. Note que o código é o mesmo, mas cada
instância daquele programa será um processo. Você terá uma “janela”
para cada programa.
Um programa é caracterizado pelo arquivo executável salvo na máquina
(ou código em um arquivo texto, caso o programa seja interpretado).
Quando eu coloco um programa em execução (carrego suas instruções na
memória principal) é que eu tenho verdadeiramente um processo. Logo,
um programa é algo estático (passivo), já um processo é dinâmico
(ativo). Um processo está “vivo”. O processo é uma estrutura que possui
todas as informações necessárias à execução de um programa, como o
conteúdo de registradores e espaço na memória.
Visto de outra forma um processo é uma entidade que necessita de
recursos (tempo de cpu, memória, acesso a disco, etc). Nessa visão, um
processo pode definido como uma unidade de trabalho do sistema
operacional. Ou seja, um sistema operacional consiste em uma coleção
de processo.
Tipicamente um processo executa um única thread de controle, contudo
nos sistemas operacionais modernos dentro de um mesmo processo pode
existir múltiplas threads. A demanda de recursos pelos processos e
threads implica a necessidade de gerenciamento da alocação desses
recursos. Para tanto, os processos devem ter o acesso aos recursos
agendados (scheduling), também deve ser previsto mecanismos de

26
sincronização, comunicação entre processos e manipulação de
deadlocks. Essas atividades fazem parto do sistema operacional e
recebem o nome genérico de gerenciamento de processos.
Note também que a partir de um único programa, podemos ter vários
processos rodando. Por exemplo, você pode abrir duas cópias do seu
editor de texto favorito. Apesar do programa (arquivo) ser um só, você
terá dois processos rodando. Para carregar os programas, tipicamente
digitamos o seu nome em um interpretador de comandos (shell) ou dois
clicks no seu ícone, caso uma interface gráfica (GUI) esteja disponível.
De forma geral, podemos dividir os processos em dois grandes grupos:
processos do sistema operacional e processo dos usuários. Os processos
do sistema operacional realizam tarefas que muitas vezes são
imperceptíveis para usuário. Por exemplo, um processo do sistema
operacional pode ficar verificando se existem novas atualizações
disponíveis na internet. Já processos usuários são códigos que atendem
necessidades dos usuários, por exemplo, uma planilha eletrônica.
01. (ESAF/AFRFB/2002) Um processo pode ser definido como
a) a memória disponível para execução de um programa.
b) a memória utilizada durante a execução de um programa
c) a memória compartilhada entre dois ou mais programas.
d) um programa em execução.
e) as chamadas ao sistema.
Comentários:
Como vimos, um processo é um programa em execução. É uma entidade
dinâmica (“viva”) que representa entidade estática (“programa”) em
atividade. Portanto, gabarito D.
02. (NCE/UFRJ/TI/2007) O conceito de processo é fundamental para
todos os sistemas operacionais. Um processo é basicamente:
a) o conjunto formado pelo hardware e software;
b) um arquivo em disco;
c) um programa em execução;
d) um semáforo;
e) um controlador de dispositivo.
Comentários:
Questão muito parecida, cobrando o conceito clássico de processo.
Como vimos, um processo é um programa em execução. Portanto,

27
gabarito C.
14. Um processo em detalhes
Nos primórdios da computação, apenas um programa era executado por
vez. Uma vez que o programa começa a rodar, ele tinha acesso a todos os
recursos da máquina. Ele não tinha que competir com outros processos.
Nos sistemas operacionais modernos, diversos processos estão rodando
na memória ao mesmo tempo. Tais processo podem executar em uma
única CPU, em várias CPU’s e/ou núcleos. Logo, o sistema operacional
deve ser capaz de alternar a CPU/CPU’s entre os diversos processos que
estiverem ativos na memória. Essa alternância tem como resultado maior
eficiência da máquina. Ou seja, busca-se utilizar o hardware disponível
de forma otimizada.
Inicialmente vale alertar para o jargão utilizado na definição das
atividades de um CPU. É comum quem em sistema de lote (batch
system), essas atividades sejam chamadas de jobs. Logo, em sistema de
lote são executados jobs. Em sistema de tempo compartilhado,
chamamos as atividades da CPU de programas do usuário ou
simplesmente de tarefas (tasks). De forma geral, jobs e tasks são
similares, por isso é comum no jargão de sistemas operacionais
utilizarmos a nomenclatura processo para ambos os casos.
Como já falamos, um processo é um programa em execução. Já o
programa é código propriamente dito. Logo, um processo é um conceito
que abrange o de conceito de programa. A parte no processo que
corresponde ao código (ao programa) é chama de seção de texto (text
section) ou segmento de código. Além do código, um processo armazena
o conteúdo dos registradores do processador e um valor do PC (program
counter). O armazenamento do valor dos registradores é necessário para
que quando o processo assuma novamente a CPU, ele possa continuar a
execução de onde parou. Um processo, tipicamente, também possui uma
pilha (stack). A pilha é utilizada para armazenar dados temporários. Por
exemplo, parâmetro de funções, endereços de retorno, variáveis locais,
etc. Um processo também possui um heap. O heap é uma memória que
pode ser alocada de forma dinâmica. Lembre-se que muitas vezes o
programador faz uso de ponteiros de alocação dinâmica. Um processo
também possui um seação de dados (data section) que armazena as
variáveis estáticas inicializadas (variáveis globais). Além disso, existe o
BSS (Block Started by Symbol) que é uma seção de dados com variáveis
estáticas não inicializadas.

28
Note que dois processos podem ter a mesma seção de texto (segmento de
código), ou seja, corresponde a instância do mesmo programa, mas é
improvável que possuam os mesmos valores de heap, data, etc.
No caso de dois ou mais processos estarem associados a um mesmo
programa é importante entender que cada um deles é uma entidade
totalmente diferente. Provavelmente a sequência de execução de cada um
deles será totalmente diferente. É muito provável que cada processo
receba dados de entradas diferentes. Mesmo que isso não ocorra, no
tempo as suas variáveis provavelmente estarão em estados diferentes.
Em resumo, os processos gerados a partir do mesmo programa terão a
mesma seção de texto, mas os dados, o heap e a pilha irão variar.
De forma, geral podemos dizer que um processo é formado por 3
elementos:
Contexto de hardware;
Contexto de software; e
Espaço de endereçamento.
O contexto de hardware é formado pelo conteúdo de registradores. O
contexto de software refere-se as demais informações utilizadas durante
a execução do programa, são elas: identificação (PID que é a
identificação do processo e UID identificação do usuário que criou o
processo) quotas (limites de cada recurso do sistema que um processo
pode alocar) e privilégios (o processo pode ou não fazer). Por fim, o
espaço de endereçamento é região de memória utilizada pelo processo.
03. (ESAF/ACE/2012) Nos sistemas multiprogramáveis,

29
a) um processo é gerido por rotinas de hardware, contexto de
arquitetura e espaço de endereçamento.
b) um processo é endereçado pelo contexto de memória, pelo
contexto de software e pelo hardware disponível.
c) um processo é programado em hardware, desenvolvido no sistema
operacional e endereçado apenas de forma indexada.
d) um programa é formado por contexto de hardware, entrada de
software e espaço de memória.
e) um processo é formado por contexto de hardware, contexto de
software e espaço de endereçamento.
Comentários:
Um processo é formado por três elementos básicos: contexto de
hardware (contéudo dos registradores), contexto de software
(identificação, quotas e privilégios) e espaço de endereçamento
(memória utilizada durante a execução). Portanto, gabarito E.
15. Threads
Uma thread é unidade básica de utilização da CPU. Um processo comum
possui apenas uma única thread. Aliás, nesse caso, a thread é o próprio
processo. De forma mais geral, um processo pode executar diversas
threads, nesse caso ele é chamado de processo multithread. Muitos
autores definem a thread como um processo “leve” para diferenciar do
processo normal.
Visto de forma simples, threads são como pedaços autônomos de
execução dentro de um processo. A abordagem de threads pode ser
extremamente útil para amentar o desempenho do sistema. Por exemplo,
um processo associado a um navegador web pode ter diversas threads
para tratar uma requisição de página. Por exemplo, uma thread pode ler
os dados do teclado do usuário, enquanto outra recupera uma imagem
solicitada. Também podemos pensar uso de threads no desenvolvimento
de jogos de computadores. Nesse caso, por exemplo, uma thread pode
ser responsável por tocar a música do jogo, outra por atualizar dados na
tela, outra para receber os comandos do controle, etc.
Note que threads de um determinado processo
compartilham: código, dados e arquivos. Contudo, cada thread tem um
seu próprio conjunto de registradores e sua própria pilha.
04. (FCC/TER/2012) Nos conceitos de ciência da computação, um
processo é um módulo executável que pode conter threads. Um

30
conceito importante sobre threads que estão contidas no mesmo
processo é que
a) podem compartilhar a memória do processo.
b) evitam que processos concorrentes acessem recursos do processo
principal.
c) acessam a memória estática ao contrário de processos
convencionais.
d) controlam o acesso da memória dinâmica (heap) dos processos
externos.
e) possuem proteção contra problemas comuns de processos, como
vazamento e acessos inválidos da memória.
Comentários:
Um processo pode ser single-threaded ou multithreaded. No primeiro
caso, existe somente um fluxo de execução. No segundo caso, cada
thread é encarada como um processo leve. As threads (de um processo
multithread) dividem o espaço de endereçamento que foi alocado para o
processo. Nesse espaço de memória, parte dele é comum a todas as
threads (código, os dados e os arquivos) e outra parte é reservada para
cada thread (cada uma tem seu próprio conjunto de registradores e sua
própria pilha). Enfim, as threads compartilham a memória do processo.
Portanto, gabarito A.
05. (FCC/2007/TRE) No modelo de processos dos sistemas
operacionais, o fato de múltiplas execuções poderem ocorrer no
mesmo ambiente com alto grau de independência entre elas, é uma
das características acrescidas a esse modelo
a) pelos threads.
b) pelos registradores.
c) pelas placas controladoras.
d) pelos microprocessadores.
e) pelas máquinas de estado finito.
Comentários:
A questão está se referindo a processo multi-thread. Portanto, gabrito A.
06. (ESAF/ACE/2012) É correto afirmar que no ambiente
a) Taskforce, cada tarefa pode responder a vários processos
concorrentes de threads.
b) Multithread, cada processo pode responder a várias solicitações
concorrentemente ou mesmo simultaneamente, caso haja mais de

31
um processador.
c) Monothread, o processo é exclusivo da unidade de alocação de
comandos.
d) Threadstore, vários processos respondem a várias solicitações,
apenas uma para cada processo.
e) Monothread, o processo é exclusivamente unidade de
escalonamento.
Comentários:
De fato, no multithread cada processo leve (thread) é executado de forma
concorrente. Caso exista mais de uma CPU é possível atribuir cada
thread a número e termos um verdadeiro processamento paralelo.
Portanto, gabarito B.
07. (CESGRANRIO/2008/PETROBRAS) Alguns sistemas
operacionais permitem que seus processos criem múltiplos threads
de execução. Em operação normal, o que é previsto que os threads
de um mesmo processo do sistema operacional compartilhem?
a) Arquivos abertos
b) Registradores
c) Pilha (stack)
d) Variáveis locais de cada thread
e) Contador de instrução (program counter)
Comentários:
Como vimos, em relação ao processo, as threads compartilham o
código, dados e arquivos. Portanto, gabarito A.
16. Modelos Multithreads
As threads podem ser suportados no nível do usuário (thread de usuário)
ou no nível do kernel (thread de kernel). Apesar de poderem ser
oferecidas no nível usuário, no fundo elas terão uma thread
correspondente em nível kernel. Esse relacionamento de threads de
kernel e threads de usuário geram três modelos:
Muitos para um: As várias threads de usuário estão mapeadas em um
única thread de kernel. Nesse caso, se uma thread usuário fizer uma
chamada de sistema de bloqueio todo o processo para (ou seja, as outras
threads param)
Um para um: Cada thread no nível usuário é trada como um thread em
nível kernel. Nesse caso, se uma thread de nível usuário faz uma

32
chamada de sistema de bloqueio, as outras continuam executando
normalmente. Esse modelo também permite que as threads seja
executadas em processadores diferentes. A grande desvantagem dessa
abordagem é que cada thread usuário necessita de um thread de kernel.
Muitos para Muitos: Muitas threads de usuário estão associadas a uma
quantidade MENOR ou IGUAL de threads kernel. Esse modelo é muito
interessante. É possível criar quantas threads de usuário forem
necessárias. Caso seja necessário rodar em um ambiente
multiprocessado, as threads kernel correspondentes serão criadas. Se um
thread usuário fizer uma chamada bloqueadora, o kernel pode agendar
outra thread kernel para manter as demais funcionando.
08. (ESAF/AFRFB/2002) Muitos sistemas operacionais fornecem
suporte a threads (fluxos de controle) de usuários e de kernel,
resultando em diferentes modelos de multithreading. O modelo
muitos-para-muitos
a) mapeia muitos threads de usuários em um thread de kernel e,
recursivamente, em outro thread de usuário.
b) mapeia um thread de usuário em um thread de kernel e,
recursivamente, em outro thread de usuário.
c) multiplexa muitos threads de usuários em um número menor ou
igual de threads de kernel.
d) multiplexa muitos threads de usuários em um número maior ou
igual de threads de kernel.
e) mapeia muitos threads de usuários em um número sempre maior
de threads de kernel
Comentários:
No modelo muitos para muitos, muitas threads de usuário estão
associadas a uma quantidade MENOR ou IGUAL de threads kernel.
Portanto, gabarito C.

17. Estados de um Processo


Durante sua “vida” (execução), um processo podem se encontrar em
diferentes estados. Os nomes dos estados dos processos variam um
pouco a depender do autor.
Um processo pode se encontrar em dos seguintes estados:
Novo (New): Dizemos que um processo está no estado Novo, quando ele
está sendo criado. Após sua criação, ele será admitido no sistema e

33
passará a residir na memória principal. Uma vez na memória principal,
ele estará no chamado estado pronto.
Pronto (Ready): É quando o processo se encontra carregado na
memória e em uma fila de espera, aguardando sua vez de assumir a CPU.
Um processo no estado de pronto pode ir somente para o estado de
execução. Ou seja, ele está pronto para ser executado.
Em execução: Processo está efetivamente sendo executado. Ou seja,
está utilizando o processador (CPU). Note que se o sistema possui
apenas um processador, somente um processo pode estar de posse do
processador a cada instante de tempo. Ou seja, somente um processo
pode se encontrar no estado em execução. A partir desse Estado, um
processo pode ir para outros três estados: pronto, em espera (bloquedo)
ou encerrado.
Encerrado (Concluído, Terminated): Estado de saída do processo. É
quando o processo termina a sua execução (ele tem origem no estado em
execução).
Em espera (Bloqueado, blocked ou waiting): O processo está
aguardando algum evento de I/O ou sinal. Por exemplo, esperando o
usuário pressionar uma determinada tecla. Atenção alguns autores
chamam este estado de bloqueado (blocked). É preciso levar as duas
nomenclaturas para sua prova.
O Tanenbaum traz um diagrama com apenas três estados: em execução
(running), bloqueado (blocked) e pronto (pronto). Perceba que
fundamentalmente é o mesmo diagrama do Silberschatz com exceção
dos estados (new e terminated). O diagrama a seguir mostra o esquema
de estados na visão do Tanenbaum.

Na transição 1, o SO percebe que o processo não pode seguir executado,


então ele muda o processo para o estado de bloqueado. Veja que item 1

34
do livro do Tanenbaum diz que “o processo é bloqueado aguardando uma
entrada”. O nome entrada não é muito claro, pois não explica bem a
transição. Na verdade, o processo fica bloqueado aguardando um evento
externo (ao invés dizer “entrada” seria mais preciso dizer evento).
Na transição 2, o escalonador verifica que está na hora de outro processo
assumir a CPU, então ele remove o processo que está de posse da CPU e
o coloca no estado de pronto. O item 2 diz “O escalonador seleciona
outro processo”. Note que isso também não explica muito bem o que
aconteceu! Na verdade, o processo é removido da CPU e colocado no
estado que está pronto para voltar pra CPU quando lhe for dado a vez.
Na transição 3, um novo processo é carregado na CPU. O item 3 diz: “o
escalonador seleciona esse processo”. Esse item é mais confuso de todos.
“Esse processo”? Esse quem cara pálida?!? Veja que lendo somente a
legenda, você pode ficar confuso com que realmente acontece nas
transições. O que ocorre no 3 é que um processo que está no estado de
pronto é selecionado entre os demais e assume a CPU.
Por fim, a transição 4 ocorre quando o evento que estava sendo
aguardado pelo processo que estava bloqueado acontece. Uma vez que o
evento ocorreu, o processo vai para o estado de pronto aguardando sua
vez de assumir a CPU. De novo o item 4 da legenda não é muito claro ao
dizer: “A entrada torna-se disponível”.
Em resumo, os textos dos itens não deixam muito claro o que acontece
de fato nas transições. E por que eu estou trazendo eles? Adivinha?
Porque já foi perguntado em prova de concurso exatamente como
aparecem no livro do Tanembaum. Então, além de entender, o que
efetivamente ocorrer você tem que decorar essa figura que eu coloquei
para vocês.

09. (CESPE/STF/2008) Acerca dos sistemas operacionais modernos,


julgue o item.
Os diferentes estados que um processo pode assumir durante a
execução de um programa são: novo (new), esperando (waiting),
executando (running) e finalizado (terminated).
Comentários:
A questão omitiu o estado de pronto (ready). Nesse estado, o processo
encontra-se carregado na memória e em uma fila de espera, aguardando
sua vez de assumir a CPU. Ou seja, ele está pronto para ser executado.
Portanto, gabarito E. Atenção! No livro de Tanenbaum existem apenas

35
três estados: Em execução, Pronto e Bloqueado. Os estados novo e
finalizado podem ser encontrados, por exemplo, no livro do Silberschatz.

10. (ESAF/AFRFB/2002) O estado de um processo é definido, em


parte, pela sua atividade presente. Quando o processo está
esperando para ser atribuído a um processador, ele se encontra em
um estado denominado:
a) de espera.
b) de execução.
c) pronto.
d) novo.
e) encerrado
Comentários:
No estado de pronto, um processo encontra-se carregado na memória e
em uma fila de espera, aguardando sua vez de assumir a CPU
(processador). Ou seja, ele está pronto para ser executado. Portanto,
gabarito C.

11. (ESAF/ACE/2012) Em sistemas multiprogramáveis, são estados


do processo:
a) Execução (executing). Disponível (avaliable). Espera (log).
b) Execução (running). Pronto (ready). Espera (wait).
c) Direção (driving). Ponto (float). Espera (waste).
d) Execução (running). Inserção (insert). Avaliação (controll).
e) Pronta execução (ready running). Compartilhamento (sharing).
Espera (wait).
Comentários:
Como vimos os estados de um processo são: novo, pronto, em execução,
espera (ou bloqueado) e pronto. Portanto, gabarito B
12.(NCE/UFRJ/2005) A diferença entre espera ocupada e bloqueio
de um processo é:
a) nos casos de espera ocupada o recurso requisitado pelo processo é
liberado mais rapidamente do que nos casos de bloqueio;
b) o processo que se encontra em espera ocupada ganha maior
prioridade de execução que o processo que se encontra bloqueado;

36
c) não há diferença funcional entre eles. Espera ocupada e bloqueio
são apenas duas maneiras distintas de implementar exclusão mútua;
d) espera ocupada é um artifício utilizado para evitar condições de
corrida enquanto que bloqueio é utilizado para controlar o número
de processos ativos;
e) na espera ocupada o processo permanece gastando tempo de CPU,
no bloqueio ele é acordado quando a condição de espera é satisfeita.
Comentários:
Na espera ocupada, o processo está de posse da CPU e aguarda um
evento externo. Para isso, o processo entra em loop e aguarda o evento
ocorrer. Essa estratégia é péssima para o desempenho do sistema, pois a
CPU fica ocupada sem fazer nenhum trabalho útil. Por isso, nos sistemas
operacionais modernos, quando um processo precisa aguardar um
evento, ele vai para o estado de espera (também chamado de bloqueado).
Quando o evento ocorre, o processo é acordado e pode tomar posse da
CPU novamente. Portanto, gabarito E.

13. (CESPE/PCF/1997) Um processo é modelado pelo sistema


operacional como uma estrutura que inclui informações de controle,
programa entrada e saída. Acerca da gerencia de processos
implementada pelos sistemas operacionais, julgue o item abaixo.
O estado pronto é definido para os processos que estão parados
temporariamente para dar vez a outro processo.
Comentários:
No estado pronto, um processo está aguardando sua vez para assumir a
CPU. Se ele está na fila de pronto é porque outro processo está utilizado
a CPU. Portanto, afirmação está correta.
14. (NCE/ATIFE/SEFAZ AM/2005) Dado o diagrama de estados
abaixo, que ilustra três estados em que um processo pode estar, o
item que corresponde à associação correta do conjunto dos números
das transições do diagrama é:

37
a) 4 - Processo fica bloqueado esperando entrada;
2 - Scheduler seleciona outro processo para rodar;
3 - Scheduler seleciona este processo para rodar;
1 - Entrada fica disponível;

b) 1 - Processo fica bloqueado esperando entrada;


2 - Scheduler seleciona outro processo para rodar;
4 - Scheduler seleciona este processo para rodar;
3 - Entrada fica disponível;

c) 2 - Processo fica bloqueado esperando entrada;


4 - Scheduler seleciona outro processo para rodar;
1 - Scheduler seleciona este processo para rodar;
3 - Entrada fica disponível;

d) 3 - Processo fica bloqueado esperando entrada;


4 - Scheduler seleciona outro processo para rodar;
1 - Scheduler seleciona este processo para rodar;
2 - Entrada fica disponível;

e) 1- Processo fica bloqueado esperando entrada;


2 - Scheduler seleciona outro processo para rodar;
3 - Scheduler seleciona este processo para rodar;
4 - Entrada fica disponível;
Comentários:
Essa questão foi retirada do livro do Tanenbaum. Quem estudou por
outra bibliografia poderia se complicar na prova. Pois, os itens isolados
não descrevem bem as transições, por exemplo, o texto “Scheduler
seleciona este processo para rodar”. Enfim, gabarito E.

38
18. Criando e Encerrando Processos
Como vimos dois estados possíveis dos processos são: novo e
encerrado. Assim, os sistemas operacionais devem prover meios de
criamos e matarmos (encerramos) processos. A criação e a destruição de
processos são realizadas através de chamadas de sistemas (system calls).
No Unix, um processo é criado pela chamada fork(). No Windows, a
chamada de criação é a função CreateProcess(). Para encerrar um
processo no Unix, a chamada é exit(). Já no Windows, a função é
ExitProcess(). No Windows, também existem outras chamadas capazes
de terminar um processo, como a TerminateProcess().
O processo que cria outros é chamado de processo pai. Já os processos
gerados são chamados de processos filhos. Sendo um processo (como
qualquer outro), um processo filho também pode criar outros processos.
Os seus filhos, por sua vez, podem criar outros processos. Assim, no
sistema é criada uma relação de hierarquia entre processos pais e
processos filhos. Essa relação é estrutura através de uma árvore de
processos.
A peça chave para manter o controle sobre a arvore de processos é
identificar os processos de maneira única. Por isso, os processos são
identificados por um número inteiro chamado PID (identificador do
processo).
Nessa relação de processo pais e filhos, os projetistas de sistemas
operacionais têm duas preocupações:
Como será relação de execução
Como será a relação de espaço de endereço

No primeiro caso, deve ser decidido se o processo pai continua sendo


executando (de maneira concorrente) com os seus filhos ou se espera que
os seus filhos (ou alguns deles) sejam encerrados.
No segundo caso, deve ser decidido se o processo filho é uma copia do
pai (mesmo código e dados) ou se um novo programa será carregado. No
Unix, ao utilizarmos um fork(), o processos filho é uma cópia do espaço
de endereçamento do seu processo pai. Essa estratégia tem a vantagem
de facilitar a comunicação entre os processos. Por outro lado, execução
da cópia do pai pode não ser muito útil. Por isso, nesse tipo de estratégia
os programadores fazem uma chamada a system call exec() dentro do
processo filho. Essa chamada de sistema permite carregar um programa.
Assim, quando o filho for criado será realocado o espaço de memória

39
para o novo programa chamado. No caso do Windows, na chamada
CreateProcess() o processos não herda o endereçamento do seu pai, o
processo é alocado em um espaço de endereçamento próprio.
Durante a criação dos processos também é comum a utilização de uma
chamada que tira o pai da fila de prontos e aguardar seus filhos
terminarem. No Unix, essa chamada de sistema chama-se wait(). No
Windows, a chamada correspondente é WaitForSingleObject().
Por fim, é importante saber que alguns sistemas operacionais não
permitem que os filhos continuem “vivos” se o processo pai foi
encerrado. Assim, ao “matar” o pai todos os filhos devem “morrer”. Esse
trabalho de encerrar os filhos, após a morte do pai, tipicamente é feito
pelo próprio sistema operacional. Esse é o chamado encerramento em
cascata. No Unix, não funciona assim. Se um pai for encerrado, os filhos
receberam um novo pai: o processo init.
15.(NCE/UFRJ/2005) No sistema operacional Linux, o objetivo da
primitiva "Fork " é:
a) delimitar as regiões críticas para sincronização de processos;
b) permitir a comunicação de processos sequenciais através de
mensagens;
c) permitir especificar concorrência de processos;
d) permitir implementar semáforos para resolver o problema da
seção crítica;
e) permitir especificar paralelismo entre processos.
Comentários:
O processo que cria outros é chamado de processo pai. Já os processos
gerados são chamados de processos filhos. Uma decisão de projeto é
definir se o processo pai continua sendo executando (de maneira
concorrente) com os seus filhos ou se espera que os seus filhos (ou
alguns deles) sejam encerrados. No UNIX (e o LINUX é um “Like
Unix”), os dois processo (pai e filho) continuam a execução. Portanto,
gabarito C

40
19. Bloco de Controle de Processo (Process Control
Block - PCB)
O Bloco de Controle de processo (PCB) é uma estrutura de dados que
possui todas as informações necessárias para representar um processo no
sistema operacional. Às vezes, o PCB é chamado de bloco de controle de
tarefa.
Nessa estrutura de dados, podemos encontrar as seguintes informações:
estado do processo, contador do programa (valor do registrador PC),
valor dos registradores da CPU, informações de escalonamento,
informações sobre gerenciamento da memória, informações de
contabilização, informações sobre cada thread e informações de status de
I/O.

20. Escalonamento de Processos


Os sistemas operacionais modernos tentam manter o maior número de
processos na memória. Além disso, eles permitem o compartilhamento
de tempo, ou seja, criam a ilusão quem o sistema está sempre disponível
para interagir com o usuário. Estes objetivos tentem a otimizar a
utilização do processador. Para alcança-los, os sistemas operacionais
lançam mão do escalonamento dos processos. Ou seja, regras para
definir qual processo irá utilizar a CPU e por quanto tempo ele ficará de
posse da CPU.
Quando um processo é carregado na memória pela primeira vez, ele
entra na fila de prontos. Nesse estado o processo está aguardando a sua
vez de executar. Essa fila é tipicamente implementada por uma estrutura
de dados de tipo lista. Cada PCB possui um ponteiro que aponta para o
próximo PCB da fila de prontos.
Além de aguardar a CPU, um processo pode aguardando a liberação de
um dispositivo de I/O. Cada dispositivo tem sua própria fila. Assim,
podem existir diversas filas de dispositivo. O conjunto de todas estas
filas, representado graficamente, é chamado de diagrama de
enfileiramento. Ainda existe um terceiro tipo de fila que é a chamada fila
de jobs. Essa fila contém todos os processos que entram no sistema.
A movimentação dos processos entre as diversas filas é realizado pelos
escalonadores. Estes podem ser de três tipos:

41
Scheduler de longo prazo (ou de Jobs): Seleciona de um buffer em
disco, quais processos serão carregados na memória. Ou seja, esse
escalonador controla o grau de multiprogramação do sistema (quantidade
de processos na memória). Dito de outra forma, ele faz a fila de prontos
crescer. Esse tipo de escalonador é encontrado em sistemas de lote. O
Unix e Windows não tem escalonador de longo prazo, nesses sistemas
operacionais todo processo novo é sempre carregado na memória.
Scheduler de curto prazo (ou da CPU): Seleciona um dos processos
que está na fila de prontos e carrega na CPU.
Scheduler de médio prazo: Tipicamente sistemas de tempo
compartilhado, como Unix e Windows, não possuem o escalonador de
longo prazo. Nesses sistemas é comum existir um escalonador de médio
prazo. Este escalonador remover processos da memória e posteriormente
os insere de volta. Esse esquema de troca é chamado de swapping. Essa
troca pode ser útil para equilibrar os processos CPU bound e I/O bound
ativos ou porque não existe memória principal suficiente para manter
todo o código do processo na memória. Note que o escalonador de médio
prazo também influência no grau de multiprogramação. Para prova,
guardem bem que é ele que é o responsável pelo swapping.
Os nomes curtos e longo prazo tem relação com a frequência com que
estes escalonadores atuam no sistema. Apesar de atuar com baixa
frequência, o escalonador de longo prazo tem um papel importante que é,
durante a seleção dos processos, fazer a mistura adequada entre
processos limitados pelo I/O (I/O bound) e limitado pela CPU (CPU
bound). Processo I/O bound tem mais requisições de I/O que de CPU, já
processo CPU bound tem muitas requisições de CPU. A mistura é
importante para otimizar a utilização do I/O e da CPU.
Como vimos, durante a execução de um programa, o processo pode
mudar de estado. Em alguns momentos, ele estará de posse da CPU, mas
em outros volta a aguardar sua vez. Para que o sistema saiba exatamente
onde o processo parou, antes de ser removido da CPU, as informações
sobre o processo devem ser salvas. Ou seja, deve ser salvo o contexto do
processo em execução. Já vimos também que estas informações são
salvas em uma estrutura de dados chamada PCB (Bloco de Controle de
Processo). Uma vez que o estado do processo está salvo no PCB é
possível fazer a restauração do ponto onde ele foi interrompido. Quando
um processo deixa a CPU e outro processo é carregado temos a chamada
troca de contexto. Note que essa atividade de troca de contexto introduz
overhead (nenhum processamento útil é executado).

42
16.(ESAF/CGU/2008) A decisão de adicionar um novo processo ao
conjunto de processos a serem executados é função do
escalonamento
a) de entrada/saída.
b) a curto prazo.
c) a médio prazo.
d) a longo prazo.
e) de entrada/saída a curto prazo.
Comentários:
O Scheduler de longo prazo (ou de Jobs) é responsável por selecionar
quais processos serão carregados na memória. Estes processos vão para
fila de prontos e irão disputar a utilização da CPU. Portanto, gabarito D
21. Dispatcher
Uma das funções do sistema operacional é alocar um processo que está
na fila de prontos para utilizar a CPU. Para tanto, o processo que está na
CPU deve, por algum motivo, deixar a CPU. O agendamento
(escalonamento) dos processos que vão tomar posse da CPU é realizado
por uma parte específica do sistema operacional.
Também já conversamos sobre threads e processos. Vimos que threads
de usuário de alguma forma estão mapeadas em um ou mais threads de
kernel. De fato, quem são escalonadas pelo sistema operacional são as
threads de kernel.
Pensando um sistema que possui apenas uma CPU, o objetivo do sistema
operacional é otimizar a sua utilização. A primeira coisa é colocar o
máximo de processos aptos a assumir a CPU na memória. Se o processo
é removido da CPU para esperar uma resposta de um I/O, imediatamente
o sistema operacional aloca outro processo na CPU. Desta forma, ele
consegue manter a CPU sempre ocupada. Essa técnica é chamada de
multiprogramação.

O escalonador responsável por remover um processo da fila de prontos e


alocar a CPU para esse processo é chamado de escalonador de curto
prazo. É comum falarmos em “fila de prontos”, mas esse fila não é
necessariamente FIFO (primeiro a entrar, primeiro a sair). A política de
remoção dessa “fila” vai depender do algoritmo de escalonamento.
Para ser mais preciso o escalonador de curto prazo apenas selecionar o
processo, quem passa o controle de CPU para o processo selecionado

43
pelo escalonador é o despachante (Dispatcher). Assim, o despachante é
responsável pela troca de contexto. O tempo gasto com a interrupção de
um processo e inicio do outro gera um overhead, esse tempo é chamado
de latência do despacho.
17. (CESPE/BACEN/2000) Os sistemas operacionais são elementos
fundamentais em uma arquitetura de sistemas de informação, pois
tornam disponíveis de forma conveniente e flexível os recursos dos
sistemas de processamento. A respeito das funções básicas de um
sistema operacional e seus respectivos elementos funcionais, julgue o
item seguinte.

O escalonamento de processos é uma função fundamental de todo


sistema operacional multiprogramado, estando essa função
normalmente relacionada com as funções do kernel (ou microkernel)
nos sistemas operacionais modernos.
Comentários:
Um dos principais objetivos de um sistema operacional é otimizar a
utilização do processador. Para tanto, o sistema operacional lança mão do
escalonamento de processos. O qual gerencia qual e quando e por quanto
tempo um processo ficará executando (de posse) na CPU. Portanto, o
escalonamento é uma das funções primordiais dos sistemas operacionais
e está implementado no kernel do SO. Portanto, item correto.
22. Critérios de Escalonamento
Para comparar o desempenho dos algoritmos de escalamento podemos
utilizar os mais diversos critérios. Os critérios mais adotados são os
seguintes:
Utilização da CPU: Pode variar de 0 a 100%;
Throughput (vazão): Quantidade de processos concluídos por unidade
de tempo;
Tempo de Turnaround ( tempo de permanência ou tempo de
retorno): Tempo desde que o processos é submetido até a sua conclusão;
Tempo de Espera: Dado pela soma dos tempos de espera na fila de
prontos;
Tempo de resposta: Tempo desde que é submetido até a primeira
resposta ser produzida. Atenção! Note que este caso é diferente do
turnaround. Não precisamos que o processo termine. O tempo é contato
até que primeira resposta apareça. Por exemplo, vamos supor um

44
programa que deve fazer diversos cálculos e ir exibindo na tela. O tempo
de reposta é o tempo desde a seu carregamento até ele exibir a primeira
reposta na tela.
18.(ESAF/SUSEP/2010) São critérios de escalonamento de
processos em sistemas operacionais:
a) througset, custo de recicling, tempo de turnover.
b) throughput, tempo de espera, tempo de turnaround.
c) throughput, tempo de controle, tempo de stayaround.
d) output, paralelismo de controle, tempo de movearound.
e) threadout, velocidade de espera, memória de turnaround.
Comentários:
Como vimos, diversos são os critérios utilizados nas comparação dos
algoritmos de escalonamento. Os 5 mais utilizados são: utilização da
CPU, througthput (vazão), tempo de espera, tempo de turnaround e
tempo de resposta. Portanto, gabarito B. Os demais nomes surgiram da
criatividade do examinador. A ESAF tem essa mania de a partir da
resposta correta criar as erradas fazendo algumas trocas
23. Algoritmos de Escalonamento
Os principais algoritmos de escalonamento são os seguintes:
Primeiro a entra, primeiro a ser atendido (FCFS, first-
come, first served)
Menor Job Primeiro (SJF - shorteste-job-first)
Escalonamento por prioridades
Round-Robin

Vamos analisar cada um deles. Antes disso, é preciso entender que um


processo pode ser modelado por um conjunto de surtos (bursts ou picos)
de CPU e surtos (burst ou picos) de I/O. Um surto de CPU é o tempo que
processo precisa para executar alguma atividade que depende da CPU.
Se um processo só utiliza a CPU e não faz I/O ele terá apenas um surto
de CPU. Caso ele utilize algum I/O, ele terá um surto de I/O. Surtos de
CPU podem vir seguidos de surtos de I/O e vice-versa.
FCFS
No FCFS, o atendimento segue a ordem de solicitação. Ou seja, o
processo que solicitar primeiro a CPU será atendido primeiro. A
implementação do FCFS é feita através de uma fila FIFO (First in, First
out – Primeiro a entrar, Primeiro a sair). Portanto, esse algoritmo é de

45
fácil implementação. Contudo, tem com desvantagem um tempo médio
de espera longo.
O FCFS é um algoritmo que não usa preempção. Ou seja, quando o
processo toma posse da CPU, ele somente libera após o seu
encerramento ou caso ocorra uma solicitação de I/O.
SJF (Menor Job primeiro)
A política desse algoritmo define que o processo com surto de CPU mais
curto (duração da execução até próximo pedido de I/O) é que deve ser
alocado ao processador. Se dois processos tiverem os próximos surtos de
CPU com tamanhos iguais, será utilizada a política FCFS para resolver o
impasse. Esse algoritmo fornece o menor tempo médio de espera, ou
seja, ele é um algoritmo ótimo (otimizado para o tempo de espera).
Contudo, ele é de difícil implementação, pois é necessário saber quanto
irá durar a próximo solicitação de CPU de cada processo.
Prioridades
No algoritmo de prioridades são definidas prioridades para os processos.
Estas prioridades são definidas através de um intervalo de números fixos.
Alguns sistemas operacionais utilizam os números baixos indicando
prioridade mais alta. Nesse caso, por exemplo, um processo com
prioridade 0, é o de prioridade mais alta. Outros sistemas operacionais
fazem justamente o contrário, ou seja, números baixos representam baixa
prioridade.
O algoritmo de prioridades pode possuir ou não preempção. Caso, tenha
preempção, o sistema operacional pode remover um processo da CPU,
antes que ele tenha terminado o seu surto de CPU. Note que o SJF é um
caso especial de algoritmo de prioridades, onde a prioridade é definida
como o inverso do próximo surto de CPU.
Os algoritmos de prioridade sofrem do problema de inanição, também
chamado de bloqueio indefinido. Este problema ocorre, pois o algoritmo
pode deixar que processos de baixa prioridade nunca assumam a CPU.
Imagine o caso, que sempre chega um processo de alta prioridade antes
que os de baixa prioridade possam assumir. Desta forma, processos de
baixa prioridade nunca assumiriam a CPU. Uma solução para esse
problema é o envelhecimento.
O envelhecimento consiste em aumentar a prioridade dos processos a
medida que ele estão mais tempo no sistema. Assim, a medida que o
processo vai ficando “mais velho”, sua prioridade vai aumentando, até

46
no limite torna-se o processo com maior prioridade no sistema e assim
inevitavelmente será executado.
Round-Robin
O algoritmo Round-Robin (RR) é parecido com FCFS, contudo possui
preempção. Ou seja, o processo pode ser removido da CPU, antes que
seu pico de execução tenha sido concluído. O que esse algoritmo faz é
dar uma quantidade de tempo (Fatia de tempo) para que o processo rode.
Estourada essa fatia, o processo deve ser trocado pelo próximo da fila.
Essa fatia de tempo é chamada de quantum de tempo.
Note que se o quantum for muito longo, o surto de CPU sempre caberá
dentro do quantum, assim ele tenderá a se comportar como o FCFS. Já se
quantum for muito curto, ele produzirá um efeito de compartilhamento
do processador, como se cada processo tivesse um processador dedicado
operando a 1/n da velocidade do processador físico (onde n é a
quantidade de processos).
Um ponto importante é que RR provoca troca de contextos que variam a
frequência a depender do tamanho do quantum. A troca provoca um
overhead. Assim, o desejável é que o tempo gasto com a troca de
contexto seja um pequena parcela do tamanho do quantum adotado (por
exemplo, 10%).
Algoritmo com várias Filas
É possível combinar os algoritmos anteriores através de um algoritmo de
escalonamento de fila em vários níveis. Quando os processos entram no
sistema são colocados em diferentes filas a depender de suas
características. Por exemplo, os processos em primeiro plano
(foreground ou interativos) iriam para um fila de maior prioridade que os
processos de background (em segundo plano ou batch). Além disso,
nesse esquema, cada fila tem seu próprio algoritmo de escalonamento.
Por exemplo, para os algoritmos de foreground, o algoritmo seria o RR.
Já para os de segundo plano seriam o FCFS.
Uma variante desse esquema é algoritmo de escalonamento de filas com
reatroalimentação em vários níveis. Em regra, no primeiro algoritmo que
vimos, quando o processo entra no sistema, ele vai para um fila e
permanecesse sempre nessa fila. Nessa abordagem é possível que
processo mude de fila ao longo do processamento.
19. (CESPE/STF/2008) Acerca dos sistemas operacionais modernos,
julgue o item. O algoritmo de escalonamento Round-Robin é um
exemplo de escalonador não-preemptivo.

47
Comentários:
O RR é um algoritmo de escalonamento que fornece uma fatia de tempo
para o processo ficar de posse do processador. Vencido esse tempo,
ocorre a preempção, ou seja, o processo deixa a CPU e ele é liberar para
alocação de outro processo na fila de prontos. Portanto, item errado.
20. (CESGRANRIO/BNDES/2011) A gerência do processador é uma
das atividades mais importantes em um sistema multiprogramável.
Uma política de escalonamento deve ser estabelecida para
determinar qual processo será escolhido para fazer uso do
processador.
Com relação a essa política, considere as afirmações abaixo.
I - O escalonamento preemptivo é caracterizado pela possibilidade
de o sistema operacional interromper um processo em execução e
passá-lo para o estado de espera, com o objetivo de colocar outro
processo em execução.
II - Com o uso da preempção, é possível ao sistema priorizar a
execução de processos, como no caso de aplicações de tempo real
onde o fator tempo é crítico.
III - No escalonamento não preemptivo, quando um processo está em
execução nenhum evento externo pode ocasionar a perda do uso do
processador.
IV - O escalonamento FIFO (First-In First-Out) é um exemplo de
escalonamento não preemptivo no qual o processo que chega
primeiro ao estado de pronto é colocado em execução e só perde o
uso do processador quando termina seu processamento ou quando
executa instruções do próprio código que ocasionam uma mudança
para o estado de pronto.
É correto APENAS o que se afirma em
a) I e II
b) II e III
c) III e IV
d) I, II, III
e) II, III e IV
Comentários:
I. Quando a política de escalonamento permite a preempção, o sistema
operacional pode interromper a execução de um processo, passando-o
para o estado de pronto, com o objetivo de colocar outro processo em

48
execução. Note que quando o processo é removido ele vai para fila de
prontos. A questão falou em estado de espera. Portanto, item incorreto.
II. No kernel com preempção, as coisas podem tornam-se complicadas,
pois mais de processo por vez pode ficar ativo no kernel. Se estes
processos compartilham dados, deve-se ter extremo cuidado para que
não sejam geradas condições de corrida. A princípio, a melhor estratégia
seria adotar o kernel sem preempção, contudo existem sistemas onde a
preempção é vital. Por exemplo, em sistemas operacionais de tempo real
é preciso que quando um processo de maior prioridade chegue ele seja
executado em detrimento dos demais, assim intrinsicamente a preempção
faz-se necessária. Portanto, item correto.
III. No escalonamento sem preempção, quando um processo está em
execução nenhum evento externo pode ocasionar a perda do uso do
processador. Ou seja, uma vez que a CPU é alocada para o processo, ele
somente liberará o processador quando terminar a execução ou se fizer
uma solicitação I/O. Portanto, item correto.
IV. O escalonamento FIFO é não preemptivo. Ou seja, e só perde o uso
do processador quando termina seu processamento ou quando executa
instruções do próprio código (solicitação de I/O) que ocasionam uma
mudança para o estado de ESPERA/BLOQUEIO. Note que questão
falou em estado pronto. Portanto, item errado. Está correta afirmação que
o processo que chega primeiro ao estado de pronto é colocado primeiro
em execução.
Note bem:
Com preempção => Escalonador pode remover e o processo vai para o
estado de PRONTO.
Sem preempção => Escalonador não pode remover. Ou o processo
termina e vai para o estado TERMINADO, ou emite uma solicitação de
I/O e vai para o estado de ESPERA.
Cuidado com essas pegadinhas na hora da prova!
Pelo apresentado, gabarito B.
21. (ESAF/SEFAZ/2007) Em relação a escalonamento de processos é
incorreto afirmar que
a) os critérios utilizados para efetuar o escalonamento de processos
compreendem: a utilização da CPU (Central Processing Unit), vazão
(throughput), tempo de retorno (turnaround), tempo de espera e
tempo de resposta da CPU.

49
b) o algoritmo de escalonamento menor tarefa primeiro (SJF -
Shortest Job First) associa a cada processo, o tamanho do próximo
surto (burst) de CPU. Quando disponível, a CPU é alocada ao
processo que possuir o menor próximo surto de CPU. Em caso de
empate, o FCFS (First Come, First Serve) é aplicado.
c) no escalonamento preemptivo, quando a CPU é alocada a um
processo, o processo não a libera até o término da sua execução, ou
no caso de mudança de estado para pronto.
d) no escalonamento por prioridade é associada uma prioridade a
cada processo, sendo alocada CPU ao processo com maior
prioridade. No caso de empate, o algoritmo FCFS (First Come, First
Serve) é aplicado.
e) em sistemas operacionais com suporte a threads, são as threads no
nível do kernel e não os processos que estão sendo escalonados pelo
sistema operacional. As threads no nível do usuário precisam assim,
ser mapeadas a uma thread no nível do kernel, pois são gerenciadas
por uma biblioteca de threads, independente do kernel.
Comentários:
a) Como vimos, diversos são os critérios utilizados na comparação dos
algoritmos de escalonamento. Os 5 mais utilizados são: utilização da
CPU, througthput (vazão), tempo de espera, tempo de turnaround (ou
tempo de retorno) e tempo de resposta. Portanto, item correto.
b) Como vimos, a política SJF desse algoritmo define que o processo
com surto de CPU mais curto é que deve ser alocado ao processador. Se
dois processos tiverem os próximos surtos de CPU com tamanhos iguais,
será utilizada a política FCFS para resolver o impasse. Esse algoritmo
fornece o menor tempo médio de espera, ou seja, ele é um algoritmo
ótimo (otimizado para o tempo de espera). Contudo, ele é de difícil
implementação, pois é necessário saber quanto irá durar a próximo
solicitação de CPU de cada processo. Por tudo isso, item correto.
c) Quando a política de escalonamento permite a preempção, o sistema
operacional pode interromper a execução de um processo, passando-o
para o estado de pronto, com o objetivo de colocar outro processo em
execução. Portanto, item incorreto. Esse é nosso gabarito.
d) No escalonamento por prioridade é associada uma prioridade (número
inteiro) a cada processo, sendo alocada CPU ao processo com maior
prioridade. Até aqui ok! Depois o tem continua com “No caso de empate,
o algoritmo FCFS (First Come, First Serve) é aplicado”. Nem o

50
Tanenbaum, nem Silberschatz falam desse caso de desempate. Contudo,
ambos autores comenta sobre agrupamento em filas de prioridades. A
partir disso, podemos deduzir que de fato em caso de mesma prioridade
os processo são agrupados em uma fila que segue a política FCFS.
Portanto, item correto.
e) Como vimos, as threads no nível do usuário precisam são mapeadas
em uma ou mais threads no nível do kernel. Quem são verdadeiramente
escalonadas são as threads de nível kernel. Também é verdade que as
threads de usuário são podem ser manipuladas no nível do usuário, para
tanto são disponibilizadas bibliotecas específicas. Na verdade, a
biblioteca de threads pode ser implementada de duas formas. Na
primeira a biblioteca é implementada inteiramente no espeço usuário.
Nesse caso, uma chamada da biblioteca não invoca uma chamada de
sistema. Na segunda forma, a biblioteca é implementada no nível do
Kernel. Assim, chamadas da biblioteca podem ser traduzidas em
chamadas de sistema. Assim, a questão não perfeita, mas foi considerada
correta.
Aí vai uma dica! Numa prova de concurso de múltipla escolha temos
que procurar a “mais correta”. Pois nosso recurso pode fracassar. Veja
que letra C está evidentemente errada.

22. (CESPE/ANATEL/2006) A respeito de sistemas operacionais,


julgue o seguinte item.
Um algoritmo de escalonamento do processador define qual processo
pronto será colocado em execução. Um sistema operacional pode
manter várias filas de processos prontos; nesse caso, o algoritmo de
escalonamento dos processos tem de ser o mesmo em todas as filas.
Comentários:
Vamos por partes!
“Um algoritmo de escalonamento do processador define qual processo
pronto será colocado em execução”.
OK! Essa é função do escalonador de curto prazo.

51
“Um sistema operacional pode manter várias filas de processos prontos”
OK! É caso do algoritmo com várias filas.
“nesse caso, o algoritmo de escalonamento dos processos tem de ser o
mesmo em todas as filas.”
Errado! Como vimos, cada fila pode ter seu algoritmo de escalonamento.
Portanto, item incorreto!
23.(ESAF/PADT/2002) O objetivo da multiprogramação é ter
sempre algum processo em execução para maximizar a utilização da
CPU. Para um sistema uniprocessador, nunca haverá mais de um
processo em execução. Se houver mais processos, o restante terá que
esperar até que a CPU esteja livre e possa ser reescalonada.
Com relação à multiprogramação e ao escalonamento de CPU é
correto afirmar que:
a) uma decisão de escalonamento de CPU nunca poderá ocorrer
quando um processo termina.
b) no escalonamento não-preemptivo, depois que a CPU é alocada a
um processo, ele mantém a CPU até liberá-la devido ao seu término
ou ao passar para o estado de espera.
c) o escalonamento first-come, first-served (FCFS) é o algoritmo de
escalonamento preemptivo que tem uma característica especial:
antes de atender ao primeiro processo da fila ele atende ao menor
processo na fila.
d) o algoritmo de escalonamento não-preemptivo Round-Robin (RR)
consiste em colocar os processos em uma lista circular ordenados por
tamanho e, em seguida, executá-los do menor para o maior.
e) no algoritmo de escalonamento não-preemptivo Round-Robin
(RR) é definida uma unidade de tempo igual a um ciclo de máquina
denominada quantum de tempo, onde cada processo deverá ocupar
a CPU no mínimo por um quantum e no máximo por 1000 quantuns.
Processos com duração menor que um quantum são considerados
prontos ou em estado de espera.
Comentários:
a) Revisão! Ora, quando um processo termina, ele tem que deixar a CPU.
Nesse momento ele deixar a CPU e controle é passado para o
escalonador que seleciona um processo da fila de prontos. Esse processo
é entregue ao despachante que responsável por fazer da troca de
contexto. Nesse caso, carregar o contexto do novo processo, mudar para

52
o modo kernel e fazer com o processo continue de onde parou. Portanto,
item incorreto.
b) No escalonamento sem preempção, quando um processo está em
execução nenhum evento externo pode ocasionar a perda do uso do
processador. Uma vez que a CPU é alocada para o processo, ele somente
liberará o processador quando terminar a execução ou se fizer uma
solicitação I/O. Assim, ou ele vai para o estado terminado ou para o
estado de espera (caso solicite I/O). Portanto, item correto. É o nosso
gabarito.
c) O correto seria dizer: “o escalonamento first-come, first-served
(FCFS) é o algoritmo de escalonamento não preemptivo que tem uma
característica especial: de atender o primeiro processo que entrou na
fila”. Ou seja, o FCFS é implementado através de estrutura de dados
FIFO.
d) Errado. Como vimos, no RR é dado um quantum de tempo para o
processo executar. Caso o quantum acabe o processos é removido. Ou
seja, o RR é preemptivo.
e) Errado. Primeiro porque o RR é preemptivo. Além disso, o tamanho
do quantum é uma decisão de projeto e pode varia com cada sistema
operacional. Vale lembrar que se o quantum for muito longo, o surto de
CPU sempre caberá dentro do quantum , assim ele tenderá a se
comportar como o FCFS.
24. (FCC/BACEN/2006) Dadas as definições sobre sistemas
operacionais:
I. Um algoritmo de escalonamento ...... escolhe um processo e o deixa
em execução até que seja bloqueado.
II. Um algoritmo de escalonamento ...... escolhe um processo e o
deixa em execução por um tempo máximo fixado.
III. Um recurso ...... pode ser retirado do atual processo proprietário
sem nenhum prejuízo.
IV. Um recurso ...... não pode ser retirado do atual processo
proprietário sem que apresente falha.
As lacunas, se preenchidas com Preemptível ou com Não-
Preemptível, qualificam, respectivamente, as definições
a) I-II e III-IV.
b) I-III e II-IV.
c) II-III e I-IV.

53
d) II-IV e I-III.
e) III-IV e I-II.
Comentários:
A ordem que preenche de forma adequada as lacunas é não-preemptível
(I), preemptivel (II), preemptível (III) e não-preemptível (IV). Portanto,
gabarito C.
Como vimos, processos cooperativos são aqueles que podem afetar de
alguma forma outros processos. O acesso aos dados compartilhados por
estes processos pode trazer um problema para manutenção da
consistência destes dados. Por isso, é necessário utilizar mecanismos de
sincronização.
24. Memória Principal
Quando um programa entra em execução, o código do programa é
carregado na memória principal. A memória é, portanto, um recurso a ser
compartilhado por diferentes processos.
Durante a execução de um programa, as instruções são obtidas da
memória RAM. É no registrador PC (program counter) que encontramos
o endereço da próxima instrução. Essa instrução pode implicar em novos
acessos a RAM. Por exemplo, uma instrução de soma, precisará buscar
os operandos na memória. Do ponto de vista lógico, a memória RAM é
um vetor de endereços.
01. (2012/Quadrix/CFQ) Qual destas memórias também é chamada
de Memória Principal?
a) Flash.
b) ROM.
c) RAM.
d) Cache.
e) Virtual.
Comentários:
No contexto de sistemas operacionais, a memória principal é sinônimo
para RAM. Portanto, gabarito C. Flash é uma memória programável. Ela
é utilizada, por exemplo, nos pen-drives e também nas BIOS atuais.
ROM é um tipo de memória somente para leitura. Ela era utilizada para
grama as BIOS mais antigas. Cache é uma memória intermediária entre a
memória RAM e os registradores. Antes de um dado ser buscado na
RAM, o processador consulta a Cache. A cache foi criado para tentar

54
resolver um gargalo de comunicação. A memória RAM é muito mais
lenta que os registradores. Contudo, os registradores possuem um
armazenamento muito pequeno. Todo processo tem que ser carregado na
RAM para depois ser enviado para o processador. A diferença de
velocidades criava um gargalo.

25. Hardware
É importante perceber que os dados em última instância devem ir para os
registadores para que a CPU possa trabalhar sobre eles. Antes de chegar
aos registradores, os dados podem estar na RAM. E antes disso os dados
podem estar em uma memória secundária como, por exemplo, um HD.
Note que não é possível que os dados sejam carregados diretamente do
HD para os registradores. Eles devem ir primeiro para a RAM.
A busca de dados na RAM é um gargalo. Para tentar resolver esse
problema, a estratégia comumente utilizada é a utilização de uma
memória cache. A cache é uma memória intermediária entre a RAM e os
registradores da CPU.
Como vimos, na memória principal temos diferente processos rodando.
Cada processo ocupa um determinado espaço na RAM. Esse espaço
compreende uma faixa de endereços. Essa faixa de endereços é conjunto
de endereços que cada processo pode acessar. Controlando esse acesso o
SO impede que um processo ou vírus invada o espeço destinado a outro
processo. Nos sistemas operacionais mais antigos não havia essa
proteção. Uma vez que um determinado processo tomava posse da CPU,
ele podia varrer toda a memória.
Para controlar o acesso a região de memória de um terminado processo,
são utilizados dois registradores. Um registrador de base e um de limite.
O registrador de base armazena o valor mais baixo de endereço de
memória que pode ser acessado pelo processo. O outro extremo é
controlado pelo registrado de limite, o qual tem o tamanho da faixa de
memória. Ou seja, tem a diferença entre a posição mais alta de memória
que pode ser acessada e o registador de base. A figura a seguir ilustra
esse conceito.

55
Na figura, a parte mais baixa da memória é ocupada pelo código do
sistema operacional. Além disso, existem 3 processos carregados uma
região livre de memória. Note um dos processos ocupa a faixa de
memória que vai do endereço 30040 até 420940. A registrador base
armazena o valor 30040, já o registrador limite armazena a diferença
420940-30040=12900. Os registradores base de limite só podem ser
carregados pelo sistema operacional (no modo kernel). O SO usa os
valores desses registradores para verificar se o pedido de acesso feito por
um código é legítimo. No exemplo anterior, se o processo pede acesso a
um dado que está fora da faixa permitida (30040 até 420940), um erro de
endereçamento deve ser gerado (uma trap para o sistema operacional).
02. (2016/IF-PA) Na busca pela solução do problema do gargalo de
congestionamento na comunicação entre o processador e a memória
principal, criou-se o mecanismo chamado de:
a) memória rom.
b) memória ram.
c) memória virtual.
d) memória cache.
e) memória flash.
Comentários:
A memória intermediária entre a RAM (principal) e os registradores é a
cache. Já falamos sobre rom e flash. A memória virtual criar a ilusão de
um RAM maior do que a que existe efetivamente no computador. Para
isso, o sistema operacional utiliza o disco. Os processos que não podem
ficar na RAM são transferidos para o disco e carregados quando
necessários.

56
26. Vinculação de Endereços (Binding)
Como já sabemos um programa fica armazenado no HD e deve ser
carregado na memória RAM. Os endereços no código são simbólicos,
por exemplo, 20 bytes a partir de uma determinada posição do código.
Quando o código vai para a memória é preciso dizer exatamente onde o
código estará. Ou seja, os endereços deixam de ser relativos para serem
absolutos. Esse processo é chamado de binding. Essa vinculação
(binding) pode ser feita de 3 formas:
a) Em tempo de compilação: Um código absoluto é gerado. O processo
sempre vai ser alocado na mesma região. Se for necessário mudar o
processo para outra região, isso só será possível por meio de uma nova
compilação.
b) Em tempo de carregamento: Um código realocável é gerado. Você
não sabe de antemão onde o processo será colocado. Possivelmente, na
região livre de memória em determinado momento. Logo, o SO precisa
de forma dinâmica alocar o código da RAM. Para que isso seja possível,
é necessário que o código gerado pelo compilador seja realocável e
durante o carregamento do programa, o SO decide onde colocar.
c) Em tempo de execução: Nesse caso, o processo pode ser movido
durante a sua execução de um determinado local para outro da memória.
Dessa forma, a vinculação ocorre durante a execução do programa. A
maioria dos sistemas operacionais utiliza esse método.

27. Endereçamento Lógico e Físico


Quando a CPU gera um endereço, ele é chamado de lógico, pois este
endereço não é ainda o endereço reconhecido pela unidade de memória.
Este último endereço é chamado de endereço físico. O endereço físico é
carregado no registrador de endereço de memória. Como vimos, existem
três formas de vinculação de endereços: tempo de compilação, tempo de
carga e tempo de execução. Em tempo de compilação e tempo de carga é
possível movimentar o código ao longo da memória. Eles ficam sempre
na mesma posição. Logo, nessas duas vinculações, o endereço lógico é
igual ao endereço físico.
Na vinculação em tempo de execução, o endereço lógico não é igual ao
físico. O processo pode ocupar diferentes partes da memória. Nesse
contexto, é comum alguns autores chamarem endereços lógicos também
de endereços virtuais. Ou seja, endereço virtual é sinônimo para

57
endereço lógico. Sendo os endereços lógicos (também chamados de
virtuais) e físicos diferentes é preciso fazer um mapeamento entre estes
endereços. Para tanto, é utilizado um hardware especial chamado MMU
(Memory-Managment Unit): Unidade de Gerenciamento de
Memória. É a MMU responsável pelo mapeamento de endereços
lógicos (virtuais) em endereços físicos.
Nesse contexto, é importante notar que um programa não lida os
endereços físicos. Ele apenas enxerga e manipula endereços lógicos.
Dentro do código, o programador lida com um determinado espaço de
endereçamento, mas ele não é o endereçamento real (físico). Por
exemplo, um programado pode criar um ponteiro para uma determina
região de memória, somar valores a esse ponteiro, mas os endereços de
tais ponteiros só fazem sentido dentro da lógica do programa. Quando o
programa é carregado na memória, a MMU faz a conversão desses
endereços para os endereços físicos onde estão efetivamente
armazenados os dados. Dentro da lógica do programa eu posso ter dois
endereços lógicos consecutivos, por exemplo, 110 e 111. Na lógica do
programa, poderia ser usado um ponteiro para varrer uma região
contínua de memória, passando pelo endereço 110 e depois pelo 111.
Contudo, na memória RAM esses endereços podem ser mapeados em
regiões de memória não contínuas. Por exemplo, o endereço 110 poderia
ser mapeado no endereço 220 e o 111 no 340.

03. (2011/FCC/TRT - 14ª Região) A Memory Management


Unit (MMU) tem como função
a) mapear páginas virtuais em molduras de página.
b) mapear os endereços virtuais para endereços físicos de memória.
c) dividir a memória em partições de tamanhos variados.
d) pesquisar e selecionar o job que melhor se ajuste ao tamanho da
partição.
e) gerenciar os registradores de base e registradores de limite.
Comentários:
A MMU faz a conversão dos endereços lógicos (virtuais) em endereços
físicos (reais). As demais alternativas tratam de funções geridas pelo
sistema operacional.

58
04. (2008/CESPE/TJ-DFT) Nos sistemas de memória virtual, cabe à
unidade de gerenciamento de memória (memory management unit)
mapear endereços virtuais em endereços físicos.
Comentários:
Como vimos a conversão de endereços lógicos/virtuais é da MMU.
Portanto, gabarito Certo.
28. Carga Dinâmica
Na carga dinâmica, um código só é carregado na RAM, quando
necessário. Essa estratégia permite economia de memória. Somente um
código inicial do programa é carregado (o código principal). À medida
que o código vai chamando rotinas, essas vão sendo carregados. Por sua
vez, essas rotinas podem chamar outras. Note que se determina rotina
nunca for necessária durante um determina execução do programa, ele
jamais terá ocupada memória em vão.
Normalmente a carga dinâmica fica por conta do programador, não
sendo um papel do SO. O que pode existir é um API para auxiliar na
implementação da carga dinâmica.

29. Bibliotecas Compartilhadas


Vimos que na carga dinâmica, um código, que faz parte de um
determinado programa, só é carregado na RAM quando necessário.
Semelhante a essa ideia, podemos ter código que são compartilhados por
diferentes programas. Essas rotinas compartilhadas forma uma
biblioteca. As bibliotecas possuem módulos objeto que são unidas ao
código do programa por meio do carregador. Esse é a chamada
vinculação estática. Note que essa vinculação ocorre em tempo de carga.
Já a chamada vinculação dinâmica, os códigos da biblioteca são
vinculados em tempo de execução. Geralmente os SOs dão suporte
apenas a vinculação estática.
Essa estratégia permite economia de memória e do próprio disco, já que
diferentes programas podem compartilhas rotinas de uma mesma
biblioteca. Além disso, a biblioteca pode ser atualizada
independentemente do código dos programas.
Ao contrário da carga dinâmica, a vinculação dinâmica geralmente usa o
sistema operacional. Note que somente o SO pode dar acesso ao espaço
de memória de processo ou permitir que diferentes processos acessem o

59
mesmo espaço de memória (ou seja, onde estão carregados os códigos da
biblioteca compartilhada)
30. Swapping
No mundo ideal, todos os processos deveriam estar na RAM. Contudo, o
normal é que os processos consumam mais memória que a existente.
Uma forma de driblar esse problema e colocar o processo no disco e
quando necessário enviá-lo de volta para a RAM. Nesse contexto, o
disco é chamado de memória de retaguarda.
Esse processo de troca é chamado de swapping. No escalonamento
round-robin, quando um processo gasta seu tempo de CPU (quantum),
ele é enviado para a memória de retaguarda e um processo que estava no
disco é carregado na RAM.
Em um escalonamento baseado em prioridades, o swapping é chamado
de roll out (expulsão) e recondução (roll in). Nesse caso, quando um
processo de prioridade mais alta quer executar e de prioridade mais
baixo é expluso (roll out), quando o de priopridade mais altar termina de
prioridade mais baixa é reconduzido (roll in).
05. (2011/CESPE/FUB) Swaping é a troca de processos entre a
memória e o disco, quando a memória principal não é suficiente
para conter todos os processos.
Comentários:
Nem sempre é possível ter RAM suficiente para carregar todo o processo
ou mais de processo. Para solucionar esse problema, os sistemas
operacionais deixar parte do código (que não está sendo executado) no
disco. Quando necessário esse código é carregado. A troca é chamada de
swapping. Portanto, correto.
06. (2018/CS-UFG/UFG) Muitas vezes, os processos em execução em
um computador não podem ser mantidos na memória principal por
falta de espaço. Uma solução largamente empregada é utilizar uma
área da memória secundária para manter os processos que estejam
bloqueados. Qual é o nome dessa solução?
Parte superior do formulário
a) Segmentação.
b) Paginação.
c) Multithread.
d) Swapping.

60
Comentários:
Um processo bloqueado está aguardando um evento externo. Ao invés de
ficar ocupada a RAM, ele pode ser enviado para o disco. Essa
movimentação é chamada de swapping. Portanto, gabarito D. No
decorrer desta aula falaremos sobre paginação e segmentação.
Multihread refere-se a capacidade de um sistema rodas múltiplas threads.
07. (2012/EXATUS/DETRAN-RJ) O processo de transferência de
dados entre memória virtual e memória RAM, conforme
necessidade de uso, é conhecido por:
a) Cache.
b) Swapping.
c) FIFO.
d) Pipeline.
Comentários:
A transferência de um processo a RAM para o disco é chamada de
swapping. A memória no disco que expande a memória RAM é chamada
de memória virtual. Portanto, gabarito D. Cache é uma memória
intermediária entre a RAM e a CPU, onde a CPU tenta buscar dados
antes de chegar a RAM. FIFO é uma política onde o primeiro e entre é o
primeiro a sair. É utilizada em diferentes contextos da ciência da
computação. Por exemplo, em sistemas operacionais pode ser uma
política de agendamento de processo para tomar posse da CPU. Pipeline
refere-se arquitetura de computadores, quando dividimos as atividades
do processador em um pipeline com unidades especializadas. Por
exempli, uma unidade que trata somente de operações de soma.
08. (2012/CESGRANRIO/Petrobras) Quando os programas esperam
por memória livre para serem executados devido à insuficiência de
memória principal, o sistema operacional pode solucionar esse
problema com a aplicação da técnica de
a) falha de página
b) segmentação
c) swapping
d) trashing
e) partição
Comentários:

61
Quando não há RAM suficiente os programas são enviados para o disco.
Essa técnica é chamada de swapping. Portanto, gabarito C. Falha de
página é quando uma página não é encontrada na alocação por
paginação. Segmentação é tipo de alocação que veremos posteriormente.
Trashing ocorre quando o SO perde tempo efetuando a troca de páginas
entre memória física e memória lógica. Partição é uma divisão lógica do
disco rígido.

31. Alocação de Memória Contígua


O SO é um programa como outro qualquer. Logo seu código também
está carregado na RAM. Geralmente o SO fica na memória baixa. E o
restante da RAM é utilizada para os processos. Nesse contexto, surge a
questão: como dividir a RAM entre os vários processos?
Na alocação de memória contíguam cada processo fica em um espaço
contínuo de endereços. Uma solução trivial é dividir a memória em
várias partições de tamanho fixo. Nesse esquema pode ocorrer
desperdício de espaço na RAM, quando o código de um processo não
ocupa toda a partição. Uma outra estratégia é utilizar uma partição
variável. A RAM encontra-se livre. A memória vai sendo alocado até que
nenhum bloco de memória (ou intervalo de blocos) esteja livre para
atender um determinado processo. Nesse segundo caso temos um
problema de alocação dinâmica. Ou seja, como atender uma solicitação
de espaço a partir de uma lista com os intervalos de RAM livres.
Para resolver o problema anterior são utilizadas as seguintes estratégias:
Primeiro-apto (first-fit): Aloca o primeiro intervalo que seja
suficientemente grande.
Mais apto (best-fit): Aloca o menor intervalo que seja suficientemente
grande.
Menos apto (worst-fit): Aloca o maior intervalo que seja
suficientemente grande.
Atenção: Em simulações, as abordagens fist-fit e best-fit são melhores
que a worst-fit
09. (2008/CESPE/TJ-DFT) No algoritmo first fit (o primeiro que
couber), o gerenciador de memória procura ao longo da lista
encadeada de segmentos de memória livres um segmento
suficientemente grande para compactar o máximo de processos.

62
Comentários:
De fato, o first-fit procura o primeiro local onde caiba o processo. O erro
está na segunda parte, ao dizer que o espaço é para “compactar o
máximo de processos”. Gabarito, errado.
10. (2016/Professor - Ciências da Computação) Leia as afirmativas a
seguir sobre estratégias de alocação de partição;
I. Best-fit – escolhe a partição em que o programa deixa o menor
espaço sem utilização.
II. Worst-fit – escolhe a partição em que o programa deixa o maior
espaço sem utilização.
III. First-fit – escolhe a primeira partição disponível com tamanho
suficiente para carregar o programa.
Assinale a alternativa que indica a(s) afirmativa(s) verdadeira(s).
a) Todas as afirmativas.
b) Apenas a afirmativa II.
c) Apenas a afirmativa III.
d) Apenas as afirmativas II e III.
Comentários:
O mais apto (best-fit) aloca o menor intervalo que seja suficientemente
grande, visto de outra forma o algoritmo procura deixar o menor espaço
sem utilização. O menos apto (worst-fit) faz justamente o contrário, ele
o maior intervalo que seja suficientemente grande, dessa forma deixa
sobrando o maior espaço sem utilização dentre as partições disponíveis.
Por fim, o primeiro-apto (first-fit) aloca o primeiro intervalo que seja
suficientemente grande. Portanto, gabarito A.
32. O Problema da Fragmentação
As estratégias do primeiro apto e do mais apto provocam uma
fragmentação externa. Note que à medida que os processos são
carregados e removidos na memória, o espaço livre deixa de ser contínuo
ela fica dividida em pequenos pedaços. A fragmentação externa ocorre
quando existe espaço total de memória suficiente para atender uma
solicitação, mas os espaços disponíveis não são contíguos.
Para não deixar que pequenos blocos se formem, uma estratégia é dividir
a memória em tamanho de blocos fixos e permitir a alocação do múltiplo
desses blocos. Essa abordagem provoca fragmentação interna, pois a
memória alocada é maior que a necessária. O termo interna aqui faz

63
referência a parte da partição da memória que foi alocada, mas não está
sendo utilizada. A solução para a fragmentação externa é compactação.
É importante perceber que essa compactação só possível se estivermos
usando uma realocação dinâmica (onde os endereços utilizados pelos
processos podem ser alterados). O uso da compactação pode ser
dispendioso.
11. (2008/CESPE/TJ-DFT) A técnica de compactação de memória é
usada com freqüência na gestão de memória por ter um pequeno
tempo de processamento.
Comentários:
O algoritmo mais simples de compactação de memória move todos os
processos para das extremidades da memória. Dessa forma, os intervalos
livres são movidos para a outra extremidade formando um afaixa
contígua. Esse esquema pode requerer muito tempo de processamento.
Portanto, gabarito E.
33. Paginação
A paginação permite escapa do problema de um espaço contíguo de
memória. A paginação resolve o problema de fragmentação externa,
mas não resolver o problema da fragmentação interna. A maioria dos
sistemas operacionais utiliza paginação.
Na paginação a memória física é dividida em blocos chamados quadros e
a memória lógica em blocos chamados páginas. O tamanho da página (e
por lógica do quadro) é definido pelo hardware, ou seja, depende da
arquitetura do computador. Note bem, os quadros e as páginas tem o
mesmo tamanho.
Um processo pode ter suas páginas carregadas em quaisquer um dos
quadros. Cada endereço gerado pela CPU (endereço virtual) é divido em
duas partes: um número de páginas (p) e um deslocamento (d). O
número de páginas funciona um índice em uma tabela de páginas. A
tabela, por sua vez, possui o endereço base, o qual é combinado com o
deslocamento para chegar ao endereço físico.
No esquema de paginação, qualquer quadro livre pode ser alocado a um
processo que precise dele, dessa forma não há fragmentação externa.
Contudo, ainda pode continuar existindo a fragmentação interna.
Na implementação da paginação uma opção seria carregar o programa
inteiro na memória física. Uma outra alternativa é carregar as páginas
somente quando forem necessárias. Essa técnica é chamada de paginação

64
por demanda. Para definir quais páginas serão carregadas ou enviada
permanecerão no disco, usamos um algoritmo de substituição de páginas:
a) FIFO – first-in first-out: a página mais antiga (primeira a entrar) é
removida (primeira a sair). Pode ser implementado através de uma lista
de todas as páginas correntemente na memória, sendo que a página mais
antiga ocupa o início dessa lista e a mais recente ocupa o fim; quando
falta uma página, a mais antiga é retirada e a nova é colocada no fim da
lista. O algoritmo não impede que uma página bastante utilizada seja
removida.
b) Algoritmo de substituição de página ótimo (OPT ou MIN): deve
ser retirada a página que só será referenciada o mais tarde possível.
Apesar de, teoricamente, ser um algoritmo interessante, é extremamente
difícil prever quando uma página será referenciada;
c) Algoritmo de substituição de página não recentemente utilizada
(NRU): SO e o hardware mantêm uma coleção de estatísticas sobre as
páginas referenciadas e/ou modificadas (através dos bits de referência e
modificação das entradas da tabela de páginas) e dão preferência para a
troca de páginas não referenciadas e/ou não modificadas;
d) Algoritmo da segunda chance (SC): Segue o algoritmo FIFO, mas
busca não substituir uma página antiga bastante utilizada. A solução é
inspecionar o bit R (referenciada) da página. Se o bit for 1 (foi
referenciada) o bit será limpo (vai para zero) e a pesquisa continua. A
página será substituída se tiver o valor de R igual 0.
e) Algoritmo de substituição de página menos recentemente utilizada
(LRU – least recently used): a idéia é que as páginas que foram
intensamente utilizadas nas últimas instruções provavelmente serão
utilizadas de forma intensa no futuro próximo. Desta forma, deve ser
removida a página que não foi utilizada por mais tempo.
f) Algoritmo de substituição de páginas menos frequentemente
utilizadas (LFU – least frequently used): requer que a página com
menor contagem (do número de referências) seja substituída.
g) Algoritmo de substituição de páginas mais frequentemente
utilizadas (MFU – most frequently used): baseado no argumento de
que página com menor contagem provavelmente acabou de ser
conduzida à memória e ainda será utilizada
h) Algoritmo do Relógio: Um maneira de implementar o algoritmo da
segunda chance é como uma fila circular. Um ponteiro (isto é, um
ponteiro do relógio) indica qual a próxima página a ser substituída.

65
Quando um quadro é necessário, o ponteiro avança até encontrar uma
página com bit de referência 0. Enquanto avança, ele vai zerando os bits
de referência.

12. (2014/FUNDEP/COPASA) A ________ é a técnica de gerência de


memória que divide os espaços de endereçamentos real e virtual em
blocos de mesmo tamanho.
Assinale a alternativa que completa CORRETAMENTE a lacuna.
a) memória virtual por paginação
b) memória virtual por divisão em blocos
c) memória virtual uniforme
d) memória virtual por segmentação
Comentários:
Como vimos, na paginação, a memória física é dividida em blocos
chamados quadros e a memória lógica em blocos chamados páginas. O
tamanho da página e do quadro é o mesmo. Portanto, gabarito A.
13. (2018/FUNDATEC/AL-RS) Para a gerência de memória de um
sistema operacional, existem algoritmos de substituição de página.
Um deles, de baixa sobrecarga, possui o seguinte modo de operação:
(1) a primeira página a entrar é a primeira a sair; (2) pode ser
implementado através de uma lista de todas as páginas
correntemente na memória, sendo que a página mais antiga ocupa o
início dessa lista e a mais recente ocupa o fim; e (3) quando falta
uma página, a mais antiga é retirada e a nova é colocada no fim da
lista. Trata-se do algoritmo:
a) FIFO (First In, First Out).
b) LRU (Least Recently Used).
c) NRU (Not Recently Used).
d) Ótimo.
e) Segunda chance.
Comentários:
Como vimos, a questão descreve o algoritmo FIFO. Portanto, gabarito A.

66
14. (2014/FUNCAB/MDA) Na memória virtual por paginação, são
algoritmos de substituição de página, EXCETO:
a) FIFO.
b) LFU.
c) LRU.
d) NRU.
e) MMU.
Comentários:
A MMU faz a conversão entre endereços lógicos e endereços físicos. Os
demais itens são algoritmos de substituição de páginas. Portanto,
gabarito E.
15. (2014/FUNCAB/PRODAM-AM) Um sistema operacional, em
uma máquina qualquer, faz sua gerência de memória baseada em
uma política de substituição de páginas, na qual é selecionada para
se carregar na memória a página menos referenciada, como quadro
menos usado.
a) FIFO
b) LFU
c) LRU
d) NRU
e) OPT
Comentários:
Carregar a página menos referenciada é a LFU: least frequently used.
Gabarito B.
34. Segmentação
A segmentação permite a visão do usuário sobre a memória. Os
endereços lógicos são chamados de segmentos. Cada segmento tem um
nome (número) e um tamanho. Para acessar uma certa posição de
memória, o programador deve informar o segmento e o deslocamento
dentro desse segmento.
Para implementar a segmentação, é preciso um mapeamento entre os
endereços bidimensionais dos segmentos (número (s), deslocamento (d))
para os endereços físicos que são unidimensionais (um endereço de
memória). Para fazer esse mapeamento é usada uma tabela. Essa tabela é
chamada de tabela de segmentos. O número do segmento (s) é usando

67
como índice tabela. A entrada de uma tabela tem a base do segmento e o
seu limite. A base é endereço físico inicial e o limite é tamanho do
segmento. O deslocamento d é um valor entre 0 e o limite do segmento.
16. (2013/FUNCAB/IPEM-RO) São conceitos relacionados à
memória virtual, EXCETO:
a) paginação.
b) segmentação.
c) swapping.
d) pipelining.
e) mapeamento.
Comentários:
Paginação e segmentação referem-se a formas de alocação da memória.
O swapping é movimento de dados dentre a RAM e o disco, por
exemplo, processos bloqueados são enviados para o disco enquanto
aguardar o evento externo, quando voltam para o estado de pronto são
reenviados para a RAM. Os endereços gerados na paginação e na
segmentação são lógicos/virtuais e devem ser mapeados nos endereços
físicos/reais. Assim, o gabarito é D. Pipeline tem relação com a
arquitetura de computadores.
17. (2015/CESPE/MEC/Administrador de redes) Julgue o item
subsequente, a respeito dos conceitos de sistema operacional.
A grande vantagem dos sistemas de memória virtual segmentada
consiste na impossibilidade de incorrerem em fragmentação.
Comentários:
Diferente das páginas os segmentos não têm tamanho fixo. Imagine que
um segmento seja removido da memória deixa um determina espaço
livre. Se agora um segmento menor for alocado uma pequena região
ficará livre. Pode ser que esse espaço não possa ser usado para acomodar
um novo segmento. Com passar do tempo, podem surgir mais e mais
espaços desse tipo. Assim, a segmentação sofre do problema de
fragmentação externa (checkerboarding)

35. Memória Virtual


Já falamos que nem sempre temos RAM suficiente. Ou seja, os
programas rodando na máquina são maiores que a memória RAM, qual,
nesse contexto vamos chamar de memória física. Para resolver esse

68
problema surge a chamada memória virtual, qual geralmente é feita pelo
HD.
A memória virtual permite a execução de processos que não estão
completamente carregados na memória. Os sistemas operacionais fazem
um grande favor aos programadores, pois eles não têm que se preocupar
com limitações de armazenamento na RAM. A memória virtual envolve
uma separação entre memória lógica, percebida pelos usuários, com a
física. Nesse contexto, temos um espaço de endereçamento virtual que é
visão lógica (virtual) de como um processo está armazenado. É função
da unidade de gerenciamento de memória (MMU) mapear páginas
lógicas em quadros de páginas físicas.
A memória virtual também permite que arquivos e memória sejam
compartilhados por processos diferentes, por meio do compartilhamento
de páginas. Por exemplo, a memória virtual pode permitir que páginas
sejam compartilhadas durante a criação de processo (com uma chamada
fork()). Uma vez que as páginas estão compartilhadas, o novo processo é
criado de forma mais rápida. As páginas compartilhadas podem possuir
bibliotecas compartilhadas por diversos processos.

36. Trashing (Atividade improdutiva)


Se um processo não tiver o número de quadros que precisa irá gerar um
erro de página. Nesse ponto, uma página deverá ser substituída. Contudo,
se todas as páginas estivem em uso ativo, em seguida ele precisará fazer
uma nova troca. Isso faz com que acorra uma alta atividade de
paginação. Dizemos que um processo está em trashing (atividade
improdutiva) quando gasta mais tempo paginando do que executando.
37. Anomalia Belady
Nem todas páginas virtuais terão um quadro com o conteúdo
referenciado alocado na memória RAM. Caso seja solicitado o acesso a
uma página sem quando referenciado, ocorrerá uma falta de página. Esse

69
erro gera uma interrupção que deverá ser tratada pelo SO. O que SO faz
é escolher um quadro que está na RAM, colocar esse quadro no disco. O
segundo passo é carregar para a RAM o frame necessário.
O natural seria que quanto mais frames estivessem na RAM maior a
probabilidade da página solicitada ter o frame correspondente já alocado
na RAM. Dito de outra forma, a consequência é que o número de falta de
páginas tende a cair com o número de frames alocados. A figura a seguir
ilustra esse pensamento.

Esse seria o comportamento teórico esperado e a regra geral. Contudo,


na prática utilizando-se o algoritmo FIFO para substituição de páginas, a
depender da sequência de solicitações de página, a curva pode se
comportar do seguinte modo:

Pelo gráfico, note que com 4 frames tivemos mais faltas de página (10
faltas) do que com 3 frames (9 faltas). Esse comportamento é inesperado
e é conhecido como anomalia de Belady.

70
18. (CESGRANRIO/2008) No âmbito de sistemas operacionais, a
Anomalia de Belady é um conceito relacionado à gerência de
a) threads.
b) deadlocks.
c) memória.
d) processos.
e) coordenação distribuída.
Comentários:
É um conceito relacionado a gerência de memória. Portanto, gabarito C.

38. Sistemas de Arquivos


O armazenamento de informações por longo prazo exige três requisitos:
deve ser possível armazenar uma quantidade muito grande de
informação; a informação deve sobreviver ao término do processo que
usa; múltiplos processos têm que ser capazes de acessar a informação
concorrentemente. É possível solucionar esse problema com uma
abstração: a de arquivo.
Um arquivo é composto de unidades lógicas de informação criada por
processos. A parte do sistema operacional que trata dos arquivos é
chamada de sistema de arquivos. O Windows 95 e 98 usam o sistema de
arquivos do MS-DOS, o qual é chamado de FAT-16. O Windows 98
introduziu algumas extensões à FAT-16 criando a FAT-32. Nas versões
NT, 2000, XP, Vista, 10 o sistema de arquivos nativo é o NTFS.
39. Nomeação de Arquivos
Os sistemas operacionais permitem os arquivos recebem um nome. Em
alguns deles, como no Windows, o nome é separado por duas partes. A
separação é feita por um ponto. A parte que fica após o ponto é chamada
de extensão do arquivo. Regra geral, a extensão do arquivo indica algo
sobre o arquivo. No Windows, as extensões estão relacionadas com o
programa que pode abrir o arquivo. Ou seja, um determinado programa

71
“possui” aquela extensão. Por exemplo, arquivos “.doc” são arquivos do
word. Arquivo “.xls” são arquivos do excel.
Em outros sistemas operacionais, por exemplo – no linux, as extensões
são apenas convenções criadas pelo usuário. Elas não são impostas pelo
sistema operacional. O tamanho da extensão, se existir, fica a critério do
usuário. Um arquivo pode ter inclusive mais de uma extensão. Por
exemplo, homepage.html.zip, poderia indicar uma página html que foi
compactada.
Alguns sistemas operacionais possuem sistema de arquivos “case
sensitive”, outros não. Ou seja, o sistema de arquivos pode fazer
distinção entre letras maiúsculas e minúsculas.

40. Estrutura de Arquivos


Os arquivos podem ser estruturados de diferentes maneiras. Contudo, o
mais comum é não ter estrutura nenhuma. Ou seja, um arquivo ser, do
ponto de vista do sistema operacional, uma sequência desestrutura de
bytes. A responsabilidade de dar significado aos bytes é do programador.
O sistema operacional não sabe o que o arquivo contém. Essa estratégia
é adotada pelo Unix e pelo Windows.
Uma alternativa a desestruturação é considerar os arquivos com um
conjunto de registros de tamanho fixo. Um registro é uma estrutura de
dados formada por diferentes campos. Uma terceira alterativa é criar
uma árvore de registros, não necessariamente do mesmo tamanho, cada
um contendo um campo-chave em uma posição fixa do registro. A árvore
é ordenada pelo campo-chave, o que facilita a busca.
41. Tipos de Arquivos
Os sistemas operacionais podem dar suporte a diferentes tipos de
arquivos: regulares, diretórios, especiais de caracteres e especiais de
blocos.
Arquivos regulares são aqueles que contém informação do usuário. Eles
são arquivos ASCII ou binários. Já os diretórios são arquivos do sistema
que mantêm a estrutura do sistema de arquivos. Arquivos especiais de
caracteres estão relacionados com entrada/saída e são usados para

72
modelar dispositivos de I/O, como, por exemplo, impressoras. Os
arquivos especiais de bloco são usados para modelar discos.

42. Acesso aos arquivos


Os primeiros sistemas operacionais davam suporte apenas ao acesso
sequencial aos arquivos. Dessa forma, um processo podia ler todos os
dados de um arquivo sempre do início do arquivo. No acesso sequencial,
não é possível saltar para uma determinada posição e ler os dados em
uma ordem qualquer. Esse tipo de acesso era conveniente quando o meio
de acesso era a fita magnética ao invés do disco rígido. Com uso de
discos, foi possível ler os registros de um arquivo de forma aleatória
(fora de ordem). Arquivos que permitem esse tipo de acesso são
chamados de arquivos de acesso aleatório.
43. Sistemas de Arquivos Journaling
A prem.issa básica é manter um registro sobre o que o sistema de
arquivos irá fazer antes que ele efetivamente o faça, de modo que, caso o
sistema falhe, será possível recorrer ao log para descobrir o que estava
acontecendo no momento da parada e retomar o trabalho. Esse tipo de
sistema de arquivo é chamado de sistema de arquivos journaling e está
presente no NTFS, ext3, ext4 e ReiserFS.

19. (CESPE/MEC/Administrador de redes) A respeito dos


fundamentos do Unix e do Windows Server, julgue o item a seguir.
O sistema de arquivos ext2 funciona em ambiente Unix e possui o
recurso de journaling nativo.
Comentários:
O journaling está presente a partir do ext3. Portanto, gabarito errado.

73
44. O MBR e o Bloco de Inicialização
No setor 0 de um disco encontramos o chamado MBR (máster boot
record – registro mestre de inicialização). O MBR é usado para
inicializar o computador. Um disco é dividido em uma ou mais partições.
No fim do MBR encontramos uma tabela de partição, a qual indica os
endereços inicias e finais de cada partição. Uma das partições na tabela é
marcada como ativa. Quando o computador é ligado, a BIOS lê e executa
o MBR. A primeira coisa que acorre é localização da partição ativa e
então o primeiro bloco dessa partição é lido. Esse bloco é chamado de
bloco de inicialização. O programa no bloco de inicialização é
responsável por carregar o sistema operacional contido naquela partição.
MBR trabalha somente com discos até 2TB e suporta até 4 partições
primárias. Se for necessário mais que isso, você deve fazer um das
partições primárias uma partição extendida e criar volumes lógicos
dentro dela.
19. (2011/IF-SP/IF-SP) Quantas partições primárias podem ser
criadas em uma HD usando-se MBR?

a) 1
b) 4
c) 16
d) 32
e) 256
Comentários:
O MBR suporta até 4 partições primárias. Portanto, gabarito B.

45. Alocação dos Arquivos


A forma mais simples de alocação é a contígua. Ou seja, um arquivo é
armazenado em um conjunto de blocos contíguos no disco. Se, por
exemplo, um disco é formado por blocos de 1KB e o arquivo possui
50KB, nesse caso, o arquivo seria armazenado como um conjunto de 50
blocos consecutivos. Como os blocos tem tamanho fixo, pode ocorrer um
desperdício do último bloco. Se nosso exemplo, o arquivo tivesse o
tamanho 49.3 KB, ele também ocuparia 50 blocos, sento que o último só
teria 30% de ocupação. A alocação contígua é amplamente usada em

74
CD-ROMs. Isso se deve ao fato ds tamanho de arquivos serem
conhecidos com antecedência e não se alterarem durante o uso.
Uma outra forma de armazenar os arquivos é utilizando uma lista
encadeada de blocos. A primeira palavra de cada bloco é usada como
ponteiro para um próximo, e o restante do bloco é utilizado para dados. É
importante notar, que nesse caso parte do bloco não é usando para
armazenar os dados em si. Ele é usado para o ponteiro. Uma forma de
eliminar esse problema é colocar os ponteiros em uma tabela na memória
principal. Essa tabela na memória RAM é chamada de FAT (File
Allocation Table) ou tabela de alocação de arquivos. A desvantagem da
FAT é que para funcionar, toda a tabela deve estar na memória o tempo
todo.
46. I-nodes
Uma outra forma de alocação de arquivos é o i-node (index node ou nó-
índice). Para controlar os blocos que pertencem a um determinado
arquivo é utilizado uma estrutura de dados chamada i-node. Dado o i-
node é possível encontrar encontrar todos os blocos de um arquivo. A
grande vantagem do uso do i-node em relação a lista encadeada com
tabela FAT é que o i-node só precisa ir para memória quando o arquivo
correspondente estiver aberto.
47. Sistema FAT
O sistema FAT é caracterizado por tabela de alocação de arquivo. A FAT
é uma tabela que fica gravada na parte "superior" do volume. Duas
cópias da FAT são mantidas no disco. Casa uma cópia seja danificada, o
sistema continuará funcionando.
O nome de um arquivo ou diretório pode ter até oito caracteres. O nome
não pode conter espaço e é seguido de um ponto (.), após este uma
extensão de três caracteres. Todos os caracteres serão convertidos em
maiúsculas. Alguns nomes não podem ser utilizados. Eles são
reservados. São eles: CON, AUX, COM1, COM2, COM3, COM4,
LPT1, LPT2, LPT3, PRN, NUL. O nome tem de começar com uma letra
ou número e pode conter quaisquer caracteres, exceto o seguintes: . " / \ [
]:;|=,
O sistema FAT trabalha com grupos de setores, chamado cluster (ou
unidade de alocação). Devemos lembrar que um HD é dividido em
trilhas. Estas, por sua vez, são dividias em setores. Geralmente cada setor
tem 512 bytes. Perceba que no sistema FAT a unidade de alocação não é

75
um setor, mas um múltiplo deste, o qual chamamos de cluster. No caso
do FAT16, cada cluster pode ter os seguintes tamanhos: 2 KB, 4 KB, 8
KB, 16 KB e 32 KB. O tamanho do cluster não pode variar dentro da
partição, ele é definido durante a formação. Uma vez definido o
tamanho, todo cluster terá o mesmo tamanho. Note que um cluster pode
não ser totalmente ocupado. Se, por exemplo, o tamanho do cluster for
2KB e nosso arquivo tiver 51KB. Serão necessários 26 clusteres. Sendo
que um terá somente 50% de ocupação. Quando maior o tamanho do
cluster, maiores as chances de desperdício do último cluster alocado.
O FAT16 (ou simplesmente FAT) é assim chamado, pois utiliza 16 bits
para endereçamento. Ou seja, ele suportar até 65536 clusters. Lembrando
que o maior cluster é de 32KB, o sistema FAT suporta discos/partições
de até 2GB = 65536 x 32 = 2.097.152 KB
Para aumentar a capacidade do sistema fata, foi criado o FAT32, o qual
utiliza 32 bits para endereçamento. Na verdade, 28 bits são efetivamente
utilizados para o endereçamento e 4 foram reservados para uso futuro.
Com mais bits é possível usar clusters menores e ainda suportar discos
maiores que o FAT16. Teoricamente usando os 28bits, o máximo
suportado pelo FAT32 seria 8TB. Contudo, a microsoft limitou esse valor
a 2 TB.
Na sua prova pode aparecer alguma questão sobre o VFAT (Virtual File
Allocation Table). O VFAT não é um novo sistema de arquivos. Na
verdade, o VFAT é uma extensão para FAT16 ser capaz de suportar
arquivos com mais de 11 caracteres no nome. O FAT32 trabalha com
VFAT por padrão.
48. Sistema NTFS
O NTFS (New Technology File System) surgiu com Windows NT e
passou a ser o padrão para as demais versões do Windows. O NFTS é um
sistema superior ao FAT em diversos aspectos. Por exemplo, o NTFS é
um sistema de arquivos journaling, ou seja, é capaz de reverter os dados
à condição anterior caso um acidente ocorra. Isso é possível, pois o SO
consulta um arquivo de log que possui as operações efetuadas no sistema
de arquivos. Além de poder recuperar-se, o NTFS suporta redundância
de dados.
O NTFS também introduzia a família Windows, um esquema de
permissão de acesso aos arquivos. Agora é possível dizer qual/quais
usuários vão ter acesso a quais arquivos e diretórios, além de quais

76
direitos (ler, escrever, apagar, etc). Também permite a proteção dos
dados por meio de criptografia.
Já vimos que FAT16 trabalha com discos/partições até 2 GB. E o FAT32
até 2 TB (terabytes). O NTFS 64 bits para endereços de dados. Com
clusters de 64 KB, o NTFS pode suportar até 256 TB.
Ao invés da File Allocation Table, o NTFS usa a Master File
Table (MFT). A MFT é uma tabela possui os atributos de cada arquivo
armazenado, dentre eles a localização na unidade de armazenamento.
20. (2016/CESPE/POLÍCIA CIENTÍFICA – PE)Acerca dos sistemas
de arquivos para Windows, assinale a opção correta.
a) No NTFS podem ser utilizadas permissões e criptografia para se
restringir o acesso a determinados arquivos e a usuários autorizados.
b) Os sistemas de arquivos FAT e FAT32 têm a capacidade de
recuperar erros de disco automaticamente.
c) Os sistemas de arquivos disponíveis para Windows são FAT, NTFS
e EXT2.
d) No NTFS, o acesso tanto de leitura quanto de gravação é mais
rápido que no FAT32.
e) Utilizando-se o FAT32, é possível criar uma partição em disco com
suporte de até 4 GB.
Comentários:
a) Correto. O NTFS possui esquema de permissões e criptografia.
b) Errado. Eles não tem journaling
c) Errado.Ext2, ext3, ext4 são para Linux
d) Caberia recurso. O NTFS é em média melhor. Só era pior nos
primórdios para discos pequenos. Em questão de concurso você tem que
marcar a melhor resposta, marcando a letra A.
e) Errado. O limite é 2TB

21. (2015/CESPE/FUB) Acerca de memórias e dispositivos utilizados


em computadores, julgue o item a seguir.
O sistema de arquivos NTFS (new technology file system) possui
tolerância a falhas por verificar um arquivo de log e executar ações
não finalizadas pelo sistema operacional após a ocorrência da falha.
Comentários:

77
Correto. O NTFS possui journaling

49. Gerenciamento do Espaço Livre


Para gerenciar o espaço livro em disco, o sistema mantém uma lista de
espaço livres. Alista registra os blocos de disco livres. A lista de espaços
livres, apesar do nome, não precisa ser implementada como uma lista.
Formas de implementação:
a) Vetor de bits: a lista de espaço livres é um mapa de bits (vetor de bits).
Cada bloco é representado por um bit. O valor 1 se o bloco estiver livre e
0 se estiver ocupado.
b) Lista encadeada: é crida de fato uma lista. Um ponteiro para o
primeiro bloco livre. Este por sua vez possui um ponteiro para o próximo
bloco livre e assim sucessivamente.
c) Contagem: Blocos contíguos são liberados e alocado simultaneamente
22. (2018/CESPE/EBSERH) Julgue o próximo item, a respeito da
aritmética computacional, da gerência de memória e dos sistemas de
arquivos.
Uma das técnicas mais complexas para o gerenciamento do uso de
memória é o mapa de bites, que consiste em manter uma lista
encadeada de segmentos de memória alocados e disponíveis.
Comentários:
O mapa de bits não é lista encadeada. Na verdade, é um vetor onde cada
elemento indica um bloco que pode estar livre (1) ou não (0). Portanto,
gabarito Errado

50. Dispositivos de Blocos e Caractere


É papel do sistema operacional controlar os dispositivos de E/S
(entrada/saída) por meio de comandos, interceptação de interrupções e
tratamento de erros. Os dispositivos de E/S podem ser classificados em
dois grupos:
a) dispositivos de blocos: armazena a informação em blocos de tamanho
fixo. Cada bloco pode ser lido ou escrito independentemente de todos os

78
outros. Cada bloco tem seu próprio endereço. São dispositivos dos de
blocos: HD’s, CD-ROMs e pen drivres.
b) dispositivos de caractere: envia ou recebe um fluxo de caracteres.
Não há nenhuma estrutura de blocos. Não é endereçável. Exemplos:
Impressoras, interfaces de rede e mouses
Nem todos os dispositivos se encaixam muito bem nessa classificação.
Por exemplo, relógios não são endereçáveis e nem recebem ou enviam
um fluxo de caracteres.
Os dispositivos de I/O podem ter uma grande variação de taxa de dados.
Por exemplo, um teclado pode transferir 10 bytes/s, já um barramento
PCI 528 MB/s. Além dessa variação, a taxa pode ser muito diferente com
a qual a memória e o processador operam. Por isso, é utilizado um
módulo de E/S para gerenciar os dispositivos periféricos.
51. Controladora de Dispositivos
Para controlar o dispositivo físico existe um hardware especial. Esse
hardware é o controlador de dispositivo ou adaptador. Tipicamente é uma
placa que é inserida na placa-mãe ou já vem “on-board”. Na placa
encontramos um conector ao qual o dispositivo pode se ligar por meio de
cabo. Essa conexão é feita por uma interface (USB, SATA, SCSI, etc).
As interfaces enviam um fluxo e bits serial. O trabalho do controlador é
converter esse fluxo de em blocos de bytes.
52. Técnicas de I/O
Para comunicar-se com o mundo exterior, um computador utiliza o seu
subsistema de E/S (Entrada/Saída, em inglês, Input/Ouput – I/O).
Existem três técnicas de E/S:
a) Programada: A entrada e saída ocorre sob controle direto e contínuo
do programa. É responsabilidade do programador, por isso seu nome E/S
programada.
b) Controlada por Interrupção: Um programa emite um comando de
I/O e continua executando até que ocorra uma interrupção de hardware, a
qual sinaliza o fim da operação de I/O
c) Acesso Direto à Memória (DMA): Existe um processador de I/O
especializado, o qual assume o controle da operação de I/O para mover
um grande bloco de dados.
01. (2010/CESPE/ TRT - 21ª Região (RN)) Em um computador, as
operações de entrada e saída podem ser de três tipos: entrada e saída

79
programadas, entrada e saída dirigidas por interrupção e acesso
direto à memória (DMA).
Comentários:
As três técnicas de E/S são: programa, controlada (ou orientada) por
interrupção e DMA. Item correto.

53. Módulos de Entrada e Saída


Existem os mais diversos dispositivos de E/S. E cada dia surgem mais,
por isso é inviável que lógica de controle de cada um destes dispositivos
esteja no processador. Além disso, normalmente, a velocidade dos
dispositivos de I/O é muito menor que a do processador e memória. Por
isso, seria um grande gargalo conectar diretamente os dispositivos de I/O
mesmo barramento da memória e do processador. Essas dificuldades,
implicam na utilização de módulos de E/S.
Os módulos de E/S ficam ligados ao barramento e controlam um ou mais
dispositivos de I/O. Eles possuem a lógica necessária responsável pela
comunicação entre o dispositivo de I/O e o barramento.
54. Periféricos
Um dispositivo que se liga ao computador por meio de um módulo de
I/O é chamado de dispositivo periférico ou, simplesmente, periférico.
Um dispositivo periférico pode ser:
a) Legíveis ao ser humano: adequados a comunicação com os usuários.
Ex: monitores e impressoras.
b) Legívies à máquina: adequados a comunicação com equipamentos.
Ex: HD’s e Fita
c) Comunicação: adequaods para a comunicação com dispositivos
remotos. Ex: Placa de Rede.
Um periférico comunica-se com três tipos de sinais:
a) Sinais de Controle: Determinam o que o dispositivo deve fazer. Por
exemplo, uma impressora deve puxar o papel.
b) Sinais de Dados: Bits enviados ou recebidos do módulo de E/S.
Contém informação necessária ao periférico. Por exemplo, caracteres
que devem ser impressos pela impressora.
c) Sinais de estado: Indicam o estado do dispositivo. Por exemplo,
impressora sem tinta.

80
Um periférico também é caracterizado por uma lógica de controle e um
transdutor. A lógica de controle controla a operação do dispositivo em
resposta aos sinais enviado pelo módulo de E/S. Por sua vez, o transdutor
converte dados elétricos para outras formas de energia e vice-versa. Por
exemplo, um mouse óptico precisa de transdutor de luz para sinais
elétricos. Também é comum que o periférico tenha um buffer. O buffer
mantém de forma temporária os dados transferidos entre o módulo de
I/O e o ambiente externo.
O teclado é normalmente o periférico utilizado para interação entre o
homem e o computador. O sinal enviado por cada tecla corresponde a um
caractere. Cada caratere enviado geralmente ocupa 7 ou 8 bits. O código
mais utilizado é o IRA (International Reference Alphabet). Nesse código,
cada caractere é representado por 7 bits. Nem todos os caracteres são
imprimíveis. Alguns são utilizados para controle. Por exemplo, o
carriage return (retorno de carro) indica um fim de uma linha. Esse
retorno de carro faz alusão as máquinas de de escrever.
02. (2018/CESPE/IFF) A respeito dos dispositivos de entrada e saída
(E/S) utilizados em um computador, julgue o item que segue.
I Manter uma interface com o processador e a memória por meio do
barramento do sistema é uma das funções de um módulo de E/S.
II Os monitores de vídeo e impressoras são considerados dispositivos
externos, os quais são adequados para a comunicação com usuários
de computador.
III Os discos e fitas magnéticas são exemplos de dispositivos de E/S.
Assinale a opção correta.
Parte superior do formulário
a) Apenas o item I está certo.
b) Apenas o item II está certo.
c) Apenas o item III está certo.
d) Apenas os itens I e II estão certos.
e) Todos os itens estão certos.
Comentários:
I. Os dispositivos de saída, normalmente, têm velocidades menores que a
memória e o processador. Algumas vezes, alguns dispositivos podem ser
mais rápidos. Seja como for, conectar diretamente todos os dispositivos
de E/S ao barramento da memória e do processador poderia levar a
problemas de execução devido a diferença de velocidades. Os

81
dispositivos de E/S iriam se tornar um grande gargalo. Por isso, são
utilizados módulos de E/S. Uma das funções desses módulos é servir de
interface entre o periférico e o barramento de sistema. Portanto, item
correto.
II. Tanto o monitor como as impressoras são dispositivos de saída. Além
disso, um periférico pode ser adequado a comunicação com o usuário
(com o homem), com outra máquina/dispositivos ou com outra
máquina/dispositivo remoto. Os monitores e impressoras são periféricos
amigáveis ao ser humana. Item correto.

III. Discos e fitas são dispositivos de I/O. Portanto, item correto.


Ademais, acrescentamos que esses dispositivos são legíveis a outra
máquina/dispositivos.
Gabarito E
03. (2016/CESPE/TCE-PA/AUDITOR) Julgue o item a seguir,
relativo a organização e arquitetura de computadores.
Um subsistema de entrada e saída deve converter as informações de
entrada em uma forma inteligível para a máquina.
Comentários:
Uma máquina compreende apenas sinais elétricos. É papel do subsistema
de I/O converter os diversos sinais do mundo externo em sinais elétricos.
Isso é feito utilizando transdutores. Portanto, item correto.
55. Funções de um módulo de E/S
As principais funções de um módulo de entrada e saída são:
a) Controle e Temporização: O processador precisa comunicar-se com
um ou mais dispositivos externos em padrões imprevisíveis, dependendo
da necessidade de E/S do programa. Além disso, os recursos internos,
como a memória principal e o barramento do sistema, precisam ser
compartilhados com uma série de atividades, incluindo E/S e dados. Para
controlar o fluxo entre os recursos internos e dos dispositivos externo o
módulo E/S implementa a função de controle e temporização.
b) Comunicação com o processador: Para o controle de temporização,
o processador terá que se comunicar com o dispositivo externo. Isso é
feito por meio do módulo de E/S. A comunicação é composta por:
Decodificação de comando: O módulo de E/S deve entender
os comandos enviados pelo processador para atuar sobre o

82
dispositivo de I/O. Por exempli, um comando de escrita em
um setor do disco rígido.
Dados: são trocas entre o processador e o módulo E/S (via
barramentos de dados)
Informação de Estado: informa o estado do I/O. Por
exemplo, ele pode estar ocupado ainda atendendo a última
requisição.
Reconhecimento de Endereço: Cada I/O tem um endereço
que o identifica.

c) Comunicação com o dispositivo: O módulo de I/O é interface entre o


mundo interno e o mundo externo (o periférico). O módulo de I/O deve
ser capaz de conversar com seu periférico (enviar comandos, dados e
recuperar informações de estado)

d) Armazenamento temporário de dados (buffering): Se a taxa


transferência interna for maior que a externa, os dados são enviados para
o buffer e depois entregues aos dispositivos de I/O. O contrário também
pode acontecer, os dados do mundo externo são primeiramente
armazenados em buffer para depois serem enviados à memória.

e) Detecção de Erros: O módulo deve detectar erros relacionados ao I/O


e informar ao processador.
04. (2011/CESPE/EBC/Analista) As funções mais importantes de um
módulo de E/S podem ser divididas nas seguintes categorias:
controle e temporização, comunicação com o processador,
comunicação com dispositivos, área de armazenamento temporário
de dados e detecção de erros.
Comentários:
Como vimos, o item está correto. São funções do módulo de E/S servidor
de interface entre o I/O e o processador. Logo deve ser capaz de
comunicar-se com a CPU e com o I/O.
Além disso, deve fazer buffering para compatibilizar as diferenças de
velocidade entre processador/memória e o dispositivo periférico. Por
fim, orquestrar esse fluxo de dados exige a função de controle e
temporização.
05. (2015/CETAP/MPCM) No que se refere ao gerenciamento de
E/S, o buffer é utilizado para:

83
a) Diferenciar entre dispositivos de entrada e saida.
b) Permitir o uso de um dispositivo de forma simultanea.
c) Armazenamento temporario dos dados de um dispositivo de
entrada ou de saida.
d) Bloquear o acesso a dispositivos de entrada.
e) Bloquear o acesso a dispositivos de saida.
Comentários:
Uma das funções do módulo de E/S é realizar buffering, ou seja,
armazenamento temporário de dados. Esse armazenamento é
necessário devido a diferença de taxa de transferência dos periféricos e
do barramento de dados. Gabarito C.
06. (2012/CESGRANRIO/Petrobras) Qual função dos módulos de
E/S está relacionada ao compartilhamento de recursos, tais como o
barramento e a memória principal, pelas várias atividades que são
realizadas por um sistema?
a) Armazenamento temporário dos dados
b) Comunicação com dispositivos
c) Comunicação com o processador
d) Detecção de erros
e) Temporização
Comentários:
Os recursos internos, como a memória principal e o barramento do
sistema, precisam ser compartilhados com uma série de atividades,
incluindo E/S e dados. Para controlar o fluxo entre os recursos internos e
dos dispositivos externo o módulo E/S implementa a função de controle
e temporização. Gabarito E.
56. Estrutura de um módulo de E/S
O módulo de E/S possui uma lógica de controle que sua sobre o
periférico. Para o processador utilizar o periférico, por meio da lógica de
controle do módulo de E/S, ele utiliza alguns sinais (linhas). Esses sinais
podem ser: linhas de dados, linhas de endereço e linhas de controle.
Conectada as linhas de dados podem existir dois grupos de registradores
no módulo de E/S: registradores de dados e registradores de
estado/controle. Escrevendo nesses registradores a CPU pode comunicar-
se com o módulo de E/S.

84
O módulo precisa ser capaz de reconhecer e gerar endereços associados
aos dispositivos que ele controla. Para cada dispositivo que ele controla,
deve existir um endereço. O módulo deve criar uma abstração para o
processador. Deve ocultar detalhes de temporização, formatos e
eletromecânica do dispositivo externo. Por exemplo, o processador não
deve se preocupar em posicionar um cabeça de leitura de um HD em
determinada posição. Ele simplesmente enviar um sinal para o módulo
de E/S do tipo READ_SECTOR. Dessa forma, um módulo de E/S
assume a maior parte do processamento, apresentando uma interface de
alto nível ao processador, a qual é chamada de canal de E/S ou
processador de E/S. Um módulo de E/S que é muito primitivo e requer
controle normalmente é conhecido como controlador de E/S ou
controlador de dispositivo. Canais de E/S são usados em mainframes e
controladores E/S são encontrados tipicamente em microcomputadores.
07. (2014/CESPE/TJ-SE/Analista Judiciário) Na organização de um
sistema computacional em que se utilizam dispositivos de entrada e
saída, uma das funções da interface controladora é a de seletor e
decodificador de endereços.
Comentários:
São funções do módulo de E/S: controle e temporização; comunicação
com o processador; comunicação com o periférico; buffering de dados e
detecção de erros. Na comunicação com o periférico, o módulo de E/S
deve ser capaz de reconhecer e gerar endereços associados aos
dispositivos que controla. Para cada dispositivo que ele controla, deve
existir um endereço único. Para enviar sinal a um determinado
dispositivo, o processador emite um endereço. O módulo deve ser capa
de saber a qual dispositivo este endereço pertence. Dessa forma, o
processador deve ser capaz de associar a cada dispositivo um endereço.
Portanto, item correto.
57. Comunicação da CPU com o módulo de E/S
Para comunicar-se com o módulo de E/S, o processador utiliza
registradores que existe no módulo de E/S. Isso é feito de duas formas. A
primeira é associar a cada registrador um número de porta de E/S, que é
um inteiro de 8 ou 16 bits. O conjunto de todas as portas foram o espaço
de portas de E/S e somente o sistema operacional tem acesso. Note que
nesse primeiro caso, o espaço de endereçamento da memória é diferente
do espaço de endereçamento de E/S. Para ler ou escrever nos
registradores é necessário utilizar instruções em assembly (IN/OUT).

85
A segunda forma, consiste em mapear todos os registradores de controle
no espaço de endereçamento da memória. Cada registrador de controle
está associado a um endereço na memória. Esse método é chamado de
E/S mapeada na memória. Nesse caso, os registradores são apenas
varáveis na memória e podem ser endereçadas em uma linguagem de
alto nível da mesma forma que qualquer outra variável.
58. Entrada e Saída Programada
Na entrada e saída programada, os dados são trocados entre o
processador e o módulo de E/S. O processador tem controle direto da
operação de E/S. Ele tem acesso ao estado do dispositivo, ao envio de
comandos de leitura e escrita e a transferência de dados. Quando o
processador envia um comando ao módulo de E/S, ele precisa
esperar até que operação de I/O termine. Se o processador for mais
rápido que o módulo de E/S, ele ficará parado, aguardando o I/O. Isso
fará com que os ciclos da CPU sejam desperdiçados. O módulo de I/O
não avisa quando termina a operação solicitada. É reponsabilidade do
processador verificar de forma periódica o estado do módulo de E/S para
saber se a operação de I/O terminou. A E/S programada transfere um
byte de cada vez.
Existem quatro tipos de comandos de I/O que um módulo de E/S pode
receber do processador:
a) Controle: Ativa um periférico e diz o que ele tem que fazer
b) Teste: Testas as condições de estado do periférico
c) Leitura: Faz com o módulo de E/S recupere dados do periférico
d) Escrita: Faz com o módulo de E/S recupere um dado do barramento
de dados envie ao periférico
08. (2011/CESPE/EBC/Analista) As principais técnicas de
entrada/saída (E/S) utilizadas em computadores são: E/S
programada, E/S dirigida por interrupção e acesso direto à
memória. A última é efetuada sob controle direto e contínuo do
programa que requisitou a operação de E/S.
Comentários:
Na entrada e saída programada, os dados são trocados entre o
processador e o módulo de E/S. O processador deve controlar a operação
de E/S. O módulo de E/S não avisa de o I/O terminou de
transferir/receber os dados. O processor fica encarregado essa função. O

86
item está incorreto, por deveria ser referir a primeira das técnicas (E/S
programada).

59. Entrada e Saída Controlada por Interrupção


No método de E/S programada, o processador deve ficar consultado de
forma periódica o módulo de E/S, além disso não fica liberado para
executar outras ações até que o pedido de E/S seja atendido. Esse
método desperdiça muito tempo de CPU. Uma alterativa é a E/S
controlada por interrupção.
Na E/S controlada por interrupção, o processador emite um comando
para o módulo de E/S e pode continuar executando. Quando tiver
terminado de executar o comando solicitado, o módulo de E/S avisa a
CPU interrompendo-o. Feito isso, o processador executa transferência de
dado. Por exemplo, imagine que o processador envia um comando
READ para módulo de E/S ler um dado no disco. Após enviar esse
comando, o processador pode continuar executado as demais instruções.
O módulo de E/S controla o disco, recupera os dados e coloca no buffer.
Feito isso, o módulo avisa a CPU, gerando uma interrupção. O módulo
coloca os dados no barramento de dado, e a CPU então lê os dados
solicitados. A E/S orientada a interrupção pode tratar um byte de cada
vez ou pequenos blocos, dependendo do tipo de periférico.
O sinal de interrupção faz com que a CPU para o que está fazendo e
inicie outra atividade. O número nas linhas de endereço é usado como
índice para uma tabela chamada vetor de interrupções para busca novo
contador de programa. Esse contador de programa aponta para o início
da rotina de tratamento da interrupção correspondente.
09. (2012/CESPE/MPE-PI) O pedido de uma interrupção
de hardware acontece assincronamente em relação à execução do
programa que estiver sendo executado pelo processador do
computador.
Comentários:
Na E/S controlada por interrupção, o processador emite um comando
para o módulo de E/S e pode continuar executando. Quando tiver
terminado de executar o comando solicitado, o módulo de E/S avisa a
CPU interrompendo-o. A interrupção pode acontecer em qualquer tempo,
ou seja, de forma assíncrona. Item, correto.

87
60. Acesso Direto à memória
A E/S controlada por interrupção é uma melhoria da E/S programada,
contudo o processador ainda participa ativamente do processo, pois
precisa transferir os dados entre a memória e o módulo de E/S. Dessa
forma, qualquer que seja a transferência de dados, ele terá que passar
pelo processador.
Tanto a E/S controlada por interrupção quando e E/S programada tem as
seguintes desvantagens:
Taxa de transferência E/S é limitada pela velocidade com que
o processador pode testar e atender um dispositivo
O processador fica ocupado no gerenciamento de uma
transferência de E/S;
Diversos instruções precisam ser executadas para cada
transferência de E/S

Para solucionar essas dificuldades, principalmente quando há um grande


volume de dado a ser transferido, foi criada a técnica de Acesso Direto à
Memória (DMA).
Na técnica de DMA, existe um módulo adicional no barramento do
sistema (módulo DMA). Esse módulo imita o processador. Ele assume o
controle e transfere os dados de/para a memória usado o barramento de
dados. O módulo DMA utiliza o barramento apenas quando o
processador não precisa dele, ou, caso necessário, suspende o
processamento temporariamente do processador. Neste último caso,
temos o chamado roubo de ciclo (cycle stealing), pois o módulo DMA
efetivamente rouba um ciclo do barramento.
No uso do DMA, uma vez que o processador enviou o comando para o
módulo DMA, ele não se preocupa mais com a transferência dos dados.
Isso será feito pelo próprio módulo. A CPU continua executando as
demais instruções. Métodos DMA são orientados a blocos, a CPU só é
avisada após a transferência de um bloco de dados.
10. (2013/Quadrix/Analista de Sistemas) Na arquitetura de
computadores, uma ação de roubar um ciclo do barramento para
transferir dados de ou para a memória é executado por:
a) Controlador de Interrupção.
b) Canais de E/S.
c) Acesso direto à memória (DMA).

88
d) Camada de Enlace.
e) Comutador InfiniBand.
Comentários:
O roubo de ciclo (cycle stealing) é feito pelo módulo de DMA quando
precisa parar temporariamente o processador para transferir dados pelo
barramento de dados. Gabarito C.
11. (2018/CESPE/ABIN) Acerca de dispositivos de memória e de
entrada e saída (E/S), julgue o próximo item.
Certos dispositivos de hardware acessam os dados contidos na RAM
do computador por meio de funções específicas do processador,
utilizando a tecnologia DMA (data management access).
Comentários:
No DMA, existe um módulo que faz o papel do processador. O
processador não está envolvido na transferência de dados de/para
memória e o módulo de E/S. Portanto, item errado.

12. (2017/CS-UFG/UFG/Analista de Tecnologia da Informação) A


adoção de um mecanismo de E/S orientada à interrupção tem como
desvantagem a ocorrência de uma interrupção para cada caractere,
o que desperdiça uma certa quantidade de tempo de CPU. Uma
solução, em geral, mais eficiente para realizar E/S é usar
a) o sistema de spooling.
b) a E/S programada.
c) o acesso direto à memória.
d) a técnica de polling
Comentários:
As três técnicas de E/S são: programada, controlada por interrupção e
DMA. Na DMA um módulo fica responsável por envidar e receber dados
da memória, sem participação da CPU. Todos os dados são enviados de
uma só vez pelo barramento de dados. Gabarito C.
13. (2017/Quadrix/SEDF) A entrada/saída orientada à interrupção
trata um byte de dado de cada vez, mas também pode tratar

89
os bytes em pequenos blocos, de acordo com os dispositivos
envolvidos.
Comentários:
O método DMA trabalha com a transferência de bloco de dados. Já E/S
controlado por interrupção pode enviar uma interrupção para cada byte
ou para um pequeno conjunto de bytes (bloco). Dispositivos mais lentos,
como teclados, geram mais interrupções por bytes transferidos que
discos ou impressoras. Item, correto.

61. Interface FireWire e InfiniBand

As interfaces pode ser dividias em dois grandes grupos: paralela e serial.


Uma interface paralela possui múltiplas linhas conectando o módulo de
E/S e o periférico. Vários bits são transmitidos ao mesmo tempo
(paralelamente) pelo barramento de dados. Em uma interface serial, há
apenas uma linha e os bits são transferidos um após o outro (de forma
serial). No passado as interfaces paralelas eram utilizadas para
periféricos de alta velocidade e as seriais para periféricos mais lentos.
Atualmente as interfaces seriais tem atingido altas velocidades, o que
provocou a diminuição do uso de interfaces paralelas.
O IEEE 1394 é um padrão de barramento serial de alto desempenho
chamado também de FireWire. Em relação as interfaces E/S antigas, a
FireWire é mais rápida, mais fácil de implementar e possui um custo
menor. Como a FireWire é serial, ele utiliza apenas um 1 fio, logo exige
menos pinos e cabos que as interfaces paralelas. O FireWire permite a
conexão de até 63 dispositivos em uma única porta.
A InfiniBand é uma especificação para servidores. Ela permite que
servidores, armazenamento remoto e outros dispositivos de rede sejam
conectados a um comutador (switche) e enlaces (links) podendo
contentar até 64.000 servidores. Diferentemente do PCI, que mede
distâncias da placa mãe em centímetros, o InfiniBand permite que os

90
dispositivos sejam colocados até 17 metros do servidor usando cobre e
até 300 metros usando um fibra multimodo e até 10Km usando um fibra
monomodo. Pode alcançar taxas de até 30Gbps.

14. (2015/IDECAN/INMETRO) A arquitetura de E/S (entrada/saída)


do sistema de computação é a sua interface com o mundo exterior.
Oferece um meio sistemático para controlar a interação com o
mundo externo, fornecendo ao sistema operacional todas as
informações necessárias ao gerenciamento da atividade de E/S de
maneira eficaz. Existem três técnicas principais de E/S. Assinale‐as.
Parte superior do formulário
a) Programada / InfiniBand / FireWire.
b) FireWire / Independente / InfiniBand.
c) Controlada por interrupção / Independente / FireWire.
d) Acesso direto à memória / Mapeada na memória / InfiniBand.
e) Programada / Controlada por interrupção / Acesso direto à
memória.
Comentários:
As três técnicas de E/S são: programada, controlada por interrupção e
DMA. Portanto, gabarito E. InfiniBand e FireWire são tipos de
interfaces.
15. (2011/IF-PB/Assistente de Tecnologia da Informação)
Computadores modernos possuem portas de comunicação de
tamanhos e formas diversos. Neste sentido,qual o nome da porta de
comunicação de dados de alta taxa de transferência, também
conhecida como interface IEEE/1394?
Parte superior do formulário
a) USB
b) PS/2
c) Paralela

91
d) Serial
e) Firewire
Comentários:
A interface IEEE/1394 é um padrão de barramento serial de alto
desempenho chamado também de FireWire. Gabarito E.

16. (2016/CESPE/FUB) Com relação a sistemas de arquivos,


memória virtual e sistemas de entrada e saída (E/S), julgue o
seguinte item.
Embora um sistema de entrada e saída que use DMA reduza o
número de interrupções e use hardware dedicado, em alguns casos
pode ser mais vantajoso um sistema de E/S orientado a interrupção.
Comentários:
O uso de DMA apresenta alguns custos associados. Por exemplo, uma
fonte adicional de potência. Além disso, com DMA os dados são
enviados de uma só vez. O primeiro caractere não é processado até o
buffer estar cheio (até o último caractere ter sido transmitido). Isso pode
gerar um atraso. Esse atraso pode não ser tolerado por algumas
aplicações. Com o uso de interrupções pode-se enviar caractere por
caractere.
62. RAID
A velocidade dos discos não tem acompanhado o aumento da velocidade
da CPU. Isso provoca um gap entre a velocidade do disco e do
processador. Para aumentar a velocidade do disco, uma solução é o
paralelismo usando RAID (RAID é o acrônimo de Redundant Array
of Independent Disks, ou seja, conjunto redundante de discos
independentes)
a) RAID 0 – Os dados são distribuídos ao longo dos discos em faixas de
setores. Essa distribuição é chamada de striping. As faixas são gravadas
utilizando round-robin (alternância circular). Não há redundância, a
perda de um disco implica na perda dos dados. Não exige discos
adicionais, apenas os discos de dados. Por questões de lógica, exige no
mínimo 2 discos.

92
b) RAID 1 – Os discos são duplicados. O disco duplicada serve como
backup. Por isso, durante a escrita uma faixa é gravada duas vezes.
Durante a leitura, qualquer uma das cópias pode ser usada. Se um disco
falha, não há problema, o disco cópia é utilizado no lugar. Também é
chamado de modo espelhado. Exige o dobro de discos de dados. Por
questões de lógica, exige no mínimo 2 discos.

c) RAID 2 – Ao invés de setores, trabalha com palavras (ou bytes) e


implementar o algoritmo de Hamming para correção de erros. Uma
palavra é distribuída ao longo de todos os discos. Para fazer a
leitura/escrita de uma palavra todos os discos são utilizados de forma
síncrona.

d) RAID 3 – É uma versão simplificada do RAID 2 que utiliza bit de


paridade ao invés do Hamming.

e) RAID 4 –Trabalha com faixas. Sendo que um dos discos guarda as


faixas de paridade. Exige um disco a mais para colocar a paridade. Por

93
questões de lógica, exige no mínimo 3 discos (não faz sentido usar
apenas 2, paridade é calculada detectar o erro em pelo menos outros 2)

f) RAID 5 – Trabalha com faixas. Sendo que as faixas de paridade ficam


distribuídas ao longo dos discos. Existe um disco a mais que quantidade
de discos para os dados. Por questões de lógica, exige no mínimo 3
discos (paridade é calculada detectar o erro em pelo menos outros 2)

17. (2018/CESPE/STJ) Em RAID 5, a paridade dos dados é


distribuída por todos os discos, enquanto, em RAID 4, é gravada em
um disco dedicado.
Comentários:
Tanto o RAID 4 quanto o RAID 5 trabalham com faixas. No 4 existe um
disco para as faixas de paridade e no 5 estas faixas são distribuídas ao
longo dos discos. Item correto.
18. (2018/CESPE/ABIN) Em uma configuração do tipo RAID 5, as
informações de paridade são distribuídas em todos os discos do
arranjo, diferentemente do que ocorre no RAID 4, caso em que as
informações de paridade ficam residentes em um único disco.
Comentários:
Questão praticamente idêntica a anterior. Item correto.

19. (2016/CESPE/FUNPRESP-EXE) Considerando os possíveis


níveis de configuração de RAID em um storage de dados, julgue o
item a seguir.
O nível de RAID 1 permite que os dados sejam espelhados e requer o
mínimo de três discos para ser implementado e funcionar

94
corretamente.
Comentários:
No RAID 1 os discos são duplicados, logo existem em número par. O
RAID 1 exige no mínimo dois discos. Item incorreto.
20. (2016/CESPE/FUNPRESP-EXE)Considerando os possíveis níveis
de configuração de RAID em um storage de dados, julgue o item a
seguir.
O nível de RAID 5 provê redundância de dados e requer um mínimo
de três discos para seu correto funcionamento.
Comentários:
Note que a paridade é utilizada para detectar o erro em um dos discos. Só
faz sentido se tivermos pelo menos 2 discos de dados. Somando ao disco
de paridade temos pelo menos 3 discos. Essa lógica vale para o RAD 4 e
5. A diferença é no RAID 5 a paridade está distribuída ao longo dos
discos.
63. Virtualização - Visão Geral
Antes da virtualização, o comum era que os servidores de aplicação
ficassem em servidores físicos diferente. O motivo dessa separação,
geralmente, não era por causa da demanda dos serviços (carga). Na
verdade, era um problema de confiabilidade. Se sistema operacional
falhasse, todos os serviços deixavam de funcionar. Contudo, ter
máquinas separadas e sem uso total de processamento corresponde a
desperdício de recursos. Além disso, quanto mais máquinas físicas, mais
complexo é o gerenciamento. Para resolver esse problema, surgiu como
solução a virtualização.
A virtualização permite que usando uma mesma máquina física, seja
possível hospedar diferentes máquinas virtuais. Dessa forma, os serviços
podem rodar de forma isolada em sua própria máquina virtual. Essa
solução otimiza os recursos, mantém a confiabilidade (já que se uma
máquina virtual falhar, ela não afetará as demais) e facilita o
gerenciamento.
E se o servidor que as máquinas virtuais estão falhar? Nesse caso, seria
um desastre total. E você poderia argumentar que é então melhor manter
em uma máquina física separada. Contudo, a experiência mostra que as
paradas dos sistemas ocorrem mais por defeitos no software (inclusive
do SO) do que por motivos de hardware. Para evitar isso, na

95
virtualização, somente um código pequeno tem acesso direto ao
Hardware. Esse código é o hipervisor.
Outo problema que a virtualização resolver é a configuração de
diferentes ambientes por sistema. É comum que um sistema depende de
biblioteca e versões específicas e muitas vezes não são as mesmas de
outros sistemas. Por exemplo, um determinado sistema pode rodar
apenas em uma certa versão do Java, já outro necessita de uma versão
mais atual. As especificidades de cada sistema dificultam a convivência
de diferentes sistemas numa mesma máquina e também a migração. Com
as máquinas virtuais, a migração torna-se mais simples, pois cada
aplicação pode ter e levar para outro ambiente físico seu próprio
ambiente de software.
Os sistemas de máquinas virtuais tipicamente também permitem salvar
os estados das máquinas. Ou seja, uma cópia da máquina virtual em
determinado instante do tempo (snapshots). Esses snapshots servem
como pontos de salvaguarda (check points).
Outra função comum dos sistemas modernos é fazer o balanceamento de
carga. Um tipo comum de servidor empresarial é ser formado por
lâminas. São chamados de servidores blades. Cada servidor físico é uma
lâmina (uma blade). Se uma lâmina está sobre carregada, as máquinas
virtuais podem ser migradas para outra lâmina. Essa movimentação pode
ser feita inclusive “a quente”. Ou seja, com as máquinas virtuais
ligadas.
O uso de virtualização também facilita a manutenção de software e
hardware legado. Aplicações muito antigas podem necessitar de versões
antigas de sistema operacional, o qual só funciona em um hardware mais
antigo.
Por fim, as máquinas virtuais são de grande utilidade no
desenvolvimento de aplicações e testes. Antes de ir para o ambiente de
produção, o software pode ser testado em um ambiente de homologação.
Caso algo dê errado, não afetará o ambiente de produção. Um
programador também pode teste se sua aplicação funciona corretamente
em diferentes sistemas operacionais. Claro que ele poderia criar uma
máquina com mais de um SO. Contudo, computadores geralmente
suportam até 4 partições. Além disso, é necessário dar boot para realizar
a troca de SO.
64. Tipos de Hipervisor
A virtualização pode ser de dois tipos:

96
a) Hipervisor tipo 1 (monitor de máquina virtual): Esse Hipervisor é
o sistema operacional, pois é único que tem acesso em modo núcleo. Ele
fornece várias cópias do hardware real para as máquinas virtuais. As
máquinas virtuais são como processo do ponto de vista do Hypervidor
tipo 1.
b) Hipervisor tipo 2: É um programa que roda acima do SO. Funciona
como um “interpretador” do conjunto de instruções das máquinas
virtuais. Na prática, ele não é exatamente um “interpretador”, porque o
código pode ficar em cache e ser executado diretamente.
Seja no tipo 1 ou 2, o sistema operacional sobre o hipervisor é chamado
de hóspede. No tipo 2, o SO que fica sob o hardware é chamada de
hospedeiro.

65. Instruções sensíveis e privilegiadas


A existência de dois tipos de hipervisor vem da arquitetura 386. As
instruções que só podem ser executadas no modo núcleo são chamadas
de sensíveis. Além dessas, existem as instruções privilegiadas. Instruções
privilegiadas são capturadas por uma trap (armadilha) se forem
executadas no modo usuário. Uma máquina só pode ser virtualizada se as
instruções sensíveis forem um subconjunto das privilegiadas. Ou seja, se
uma instrução tenta fazer algo que não deve no modo usuário, deve ser
capturada. O problema é que 386 não atendia esse requisito. As
instruções sensíveis não caíam em trap quando executada em modo
usuário. Isso fazia com o 386 e seus sucessores não suportassem
hipervisor tipo 1.
Para resolver o problema anterior Intel e AMD criaram a VT
(Virtualization Technology – tecnologia de virtualização). A ideia foi
criar um contêiner onde as máquinas virtuais pudessem rodar. O SO
hóspede (guest) roda em um contêiner e ao gerar uma exceção ela é
capturada pelo hypervisor. As operações que são capturadas pela

97
armadilha são controladas em um mapa de bits. As máquinas virtuais
criadas dessa forma seguem a abordagem chamada trap-and-emulate
(captura e emulação). Ou seja, quando o SO hóspede (guest) executa
uma instrução privilegiada, o hardwar gera um trap e o hipervisor tipo 1
emula o efeito das instruções e devolver o resultado para o SO hóspede
(guest).

66. Hipervisor tipo 1 (bare metal)


No hipervisor tipo 1, a máquina virtual funciona como um processo de
usuário no modo usuário. Lembre-se que nesse caso, o hipervisor faz o
papel do sistema operacional. Sendo um processo como outro, uma
máquina virtual não pode executar instruções privilegiadas. O SO
hóspede apenas acha que está executando as instruções privilegiadas. Ele
acha que está em modo núcleo. Para diferenciar o modo núcleo “real”
(do hipervisor), o modo núcleo visto pelo SO é chamado de modo núcleo
virtual. Quando a máquina virtual executa um processo usuário, este
processo está no modo usuário da máquina e também (claro) no modo
usuário do hipervisor. Se SO tenta executar uma instrução sensível e não
existe VT, ocorre um erro e o sistema operacional para. Quando há VT, o
problema é contornado. Ocorre um trap e o hipervisor analisa a
instrução. A ação do hipervisor depende de quem solicita a instrução. Se
o pedido veio do SO hóspede, a instrução será executada. Se quem
solicitou a instrução privilegiada foi um processo rodando no SO
hóspede, o hipervisor faz uma emulação do hardware e apresenta o
resultado caso a instrução sensível fosse executada em modo usuário.
67. Hipervisor tipo 2 (Hosted)
No hipervisor tipo 2, surgiu como solução de contorno antes da criação
da VT. Um dos primeiros hipervisor tipo 2 foi da VMware. Ele
funcionava como um programa usuário em um sistema hospedeiro
(host), como o Windows ou Linux. Se um bloco de código possui uma
instrução sensível, ele é substituído por uma rotina do VMware que
emula essa instrução. Um bloco que não possua instruções sensíveis é
executado pelo hardware. Essa técnica de substituir e emular as
instruções sensíveis é chamada de tradução binária.
Obs: CPUs com VT (e hipevisors tipo 1) não necessariamente superam a
tradução binária, pois a abordagem trap-and-emulate tem um custo
elevado para o hardware.

98
68. Paravirtualização
Uma abordagem alternativa aos hipervisor tipo 1 e 2, é a chamada
paravirtualização. No caso dos hipervisors tipo 1 e 2, os sistemas
operacionais hóspedes (guests), não são alterados. Na paravirtualização,
o código fonte do sistema hospede é alterado. Esse SO alterado tenta
executar chamadas sensíveis diretamente, ele chama o hipervisor para
isso. As chamadas de hipervidor são análogas as chamadas de sistema. O
SO hóspede (convidado, guest) atua como um programa usuário e faz
chamadas de sistemas ao hipervisor que atua como sistema operacional
da máquina. Para que o SO seja capaz de fazer as chamadas de
hipervisor, o hipervisor deve fornecer uma API para que o SO hóspede
possa fazer as chamadas. Assim, em resumo, um SO hóspede no qual
foram removidas todas (ou algumas) instruções sensíveis para serem
chamadas pelo hipervisor é chamado de paravirtualizado.
69. Virtualização Parcial e Total
Na virtualização parcial ocorre a virtualização por espaços de
endereçamento em que a máquina virtual simula várias instâncias de um
grande ambiente de hardware subjacente. Normalmente, isto significa
que os sistemas operacionais não podem ser executados inteiramente na
máquina virtual (que seria o sinal de virtualização completa), mas sim
apenas uma quantidade considerável de aplicativos pode ser executada.
A principal forma de virtualização parcial é a virtualização do espaço de
endereço, em que cada máquina virtual consiste de um estado
independente. Como determinados recursos de hardware não são
simulados, qualquer software usado nesses recursos poderá falhar.
Na virtualização completa, é provida uma máquina virtual do ambiente
com simulação completa do hardware subjacente. Esta virtualização
requer que cada característica do hardware seja devidamente refletida na
máquina virtual, incluindo todo o conjunto de instruções de entrada e
saída de operações, interrupções, acesso à memória e todos os demais
elementos utilizados por um software que fosse executado em uma
máquina real.

99
70. Proteção das Máquinas Virtuais
A proteção de máquinas física é feita usando ferramentas de antivírus (e
antimalware). Para máquinas virtuais, surge a questão se essas máquinas
devem ser protegidas ou não. E ainda como seria essa proteção. A
questão chave é que os antivírus consomem recursos das máquinas e
podem fazer o desempenho das máquinas virtuais caírem muito.
As seguintes alternativas podem ser usadas:
a) Agent-Based: Quando uma cópia do antivírus é instalada em cada
VM, temos uma solução chamada antivírus agent-based (ou seja,
baseado em agente). Existem as chamadas “tempestades” que são
gargalos causados por atualizações simultâneas de bancos de dados e
antivírus ou verificação de malware em várias máquinas.
b) Agentless: É uma solução dada pela VMware. Nessa abordagem, há
uma máquina virtual dedicada (SVA – Security Virtual Appliance)
com o antivírus instalado. Essa máquina faz a varredura de malware em
todas as máquinas do ambiente virtual, conectando-se ao restante das
máquinas virtuais usando a tecnologia nativa do VMware vShield. O
vShield também interage com o gerenciamento do sistema do antivírus
para que ele conheça as configurações e políticas aplicadas, quando
ativar e desativar a proteção, como otimizar e assim por diante. O
vShield é limitado, permite apenas a verificação básica de arquivos.
Tecnologias mais avançadas (como uso de heurísticas) não podem ser
usadas, assim não há uma proteção completa.
c) Light Agent: Nessa abordagem, um agente leve (leve quer dizer leve
em recursos, pequeno) é instalado em todas as máquinas virtuais
protegidas. Este agente substitui o vShield e conecta a máquina virtual
ao mecanismo antivírus que reside no Security Virtual Appliance. Sem o
vShield, as limitações acabam. E todas as tecnologias defensivas podem
ser utilizadas. Essa abordagem, consegue manter as vantagens do
agenteless: apetite moderado por recursos, capacidade de gerenciamento
e estabilidade contra "tempestades". Contudo, comparado a solução
agentless ela ainda é uma solução mais “pesada”.

71. Emulação, Simulação e Virtualização


Uma forma de se obter um ambiente com comportamento semelhante ao
de uma determinada máquina física e com controle sobre os recursos por

100
ela utilizados é através de emulação. Na emulação, o sistema hospedeiro
tem uma arquitetura e o sistema convidado foi compilado em uma
arquitetura diferente. Em geral, usa-se a emulação para dar suporte a
uma arquitetura legada por meio da tradução de cada instrução da
máquina legada para a máquina em uso. Por exemplo, você pode ter um
emulador que roda em processador ARM e emula uma arquitetura x86.
Um exemplo comum é um emulador de videogame. Note que a
arquitetura do vídeo game emulado pode ser totalmente diferente do PC.
Simulação está ligada apenas a apresentar comportamento similar ao de
um determinado ambiente, em relação a entradas e saídas, que pode ser
útil para design, prototipação e testes.
Silberschatz tem outra definição para esses termos. Para o autor, a
virtualização que vimos anteriormente é um dos tipos de emulação.
Outra metodologia é seria a simulação, definida com definimos a
emulação, ou seja, quando o sistema hospedeiro tem uma arquitetura e o
sistema convidado foi compilado em uma arquitetura diferente
É importante notar que na virtualização, o hypervisor está ligado a um
hardware real e, geralmente, entrega máquinas virtuais com mesma
arquitetura da máquina real.
72. Formas de Virtualização
a) Virtualização assistida por hardware: É auxiliada pelo hardware, ou
seja, o hardware possui tecnologia que permite a virtualização (VT). É o
caso dos hipervisor tipo 1.
b) Virtualização de aplicativos: É feito em nível da aplicação. É o caso
da JVM (Java Virtual Machine) que cria uma máquina virtual java, onde
as aplicações java podem rodar.
c) Virtualização de Storage: Apresentação lógica dos recursos físicos
(reais) de um storage. Pode ser feita em nível de bloco ou de arquivo.
d) Virtualização de Redes: Virtualiza os componentes de uma rede
física por meio de software.
d) Virtualização de Desktop: Virtualiza o desktop do usuário (Virtual
desktop infrastructure- VDI)
e) Virtualização do sistema operacional: permite que diversos
sistemas operacionais rodem sobre um mesmo hardware isolada e
simultaneamente. Pode se provida por hypervisors do tipo I ou tipo 2.
73. Propriedades da virtualização

101
De forma geral, existem 3 propriedades na virtualização:

a) Isolamento: Os softwares rodando em cada uma 0máquinas


virtuais estão isolados entre si. Ou seja, um processo rodando em
uma VM não pode interferir em outra VM e nem no hipervisor.
Esse isolamento envolve o isolamento de falhas e desempenho. Se
uma VM falha isso não deve afetar as demais. O desempenho das
VMs também não pode afetar o das demais.
b) Encapsulamento: O estado de uma VM pode ser representado um
simples arquivo. As operações na VM são similares ao de arquivos
(mover, copiar, renomear, etc).
c) Interposição: Todas as ações do SO convidado passam pelo
hipervisor que pode inspecionar, modificar e bloquear as
operações.
Outras propriedades/características:
Compatibilidade do software: a máquina virtual fornece uma abstração
compatível com os softwares que rodam na mesma plataforma física. Ou
seja, um programa que roda em máquina real, deverá rodas na máquina
virtual correspondente.
Eficiência: todas instruções de máquina que não comprometem o
funcionamento do sistema devem ser executadas diretamente no
hardware sem intervenção da máquina virtual.
Inspeção: O monitor tem acesso e controle sobre todas as informações
do estado da máquina virtual, como estado da CPU, conteúdo de
memória, eventos, etc.
Portabilidade: Não ser dependente do hardware, permitindo a migração
“live” das VMs
Controle de recursos: uma máquina virtual deve ter controle completo
sobre os recursos virtualizados sendo estritamente proibido que um
programa executando sobre a máquina virtual os acesse diretamente.
Equivalência: um programa executando sobre uma máquina virtual deve
exibir um comportamento idêntico aquele apresentado caso a máquina
virtual não existisse e o programa acessasse diretamente uma máquina
física equivalente.
Gerenciabilidade: Cada máquina virtual é uma entidade independente das demais,
a administração das diversas instâncias é simplificada e centralizada

74. Questões

102
01. (2018/CESPE/EBSERH) Recursos como CPU e memória, e
dispositivos de entradas de dados, como teclados virtuais, podem ser
virtualizados por um hypervisor e compartilhado para os sistemas
convidados.
Comentários:
O hypervisor fica acima do hardware real (hypervisor tipo 1) ou acima
de um sistema operacional hóspede. O que ele faz é criar a ilusão que os
sistemas operacionais estão lidando com máquinas reais. Assim, em
regra, um hypervisor entrega um hardware virtual igual ao que um SO
estaria acostumado ver caso ele fosse real. Dispositivos de E/S e saída
tipicamente não fazem parte deste hardware. Eles são externos. Em
relação a CPU e memória a questão está correta, mas essa ao falar em
dispositivos de E/S. Além disso, teclados virtuais são criados no SO, não
é um hardware real. Item incorreto.

02. (2018/CESPE/EBSERH) A arquitetura de virtualização completa


requer a modificação do sistema operacional convidado.
Comentários:
Quando o SO convidado (hóspede) é modificado tem a paravirtualização.
Item errado.
03. (2018/CESPE/STJ) A virtualização de servidores exige a
compatibilidade entre o sistema operacional da máquina virtual e o
sistema hospedeiro.
Comentários:

103
Uma máquina virtual é funciona como uma máquina real. Assim,
qualquer sistema operacional, desde que compatível com a máquina
virtual, pode ser instalado. Não guardando relação com sistema
operacional hospedeiro. Item errado.
04. (2018/CESPE/ABIN) Na virtualização, a migração é um processo
que move as máquinas virtuais de um hipervisor para outro sem
ocorrer desligamento dessas máquinas. A migração é usada para
garantir continuidade de negócios em caso de falha no hipervisor ou
manutenção programada
Comentários:
Uma das vantagens dos sistemas virtualizados é permitir o
balanceamento de carga. Um tipo comum de servidor empresarial é ser
formado por lâminas. São chamados de servidores blades. Cada servidor
físico é uma lâmina (uma blade). Se uma lâmina está sobre carregada, as
máquinas virtuais podem ser migradas para outra lâmina. Essa
movimentação pode ser feita inclusive “a quente”. Ou seja, com as
máquinas virtuais ligadas. Item correto.
05. (2018/CESPE/ABIN) Hipervisor tipo 1, ou monitor de máquina
virtual, é o sistema operacional, pois ele é o único programa que
funciona no modo núcleo.
Comentários:
No tipo 1, o hipervisor fica logo acima do hardware. Ele também é
chamado de MMV (monitor de máquina virtual). O hipervisor é SO
“real”. Ele que tem verdadeiramente acesso ao hardware e só ele roda em
modo núcleo (ou seja, executa instruções privilegiadas). Item correto.

06. (2018/CESPE/ABIN) Diferentes proteções de segurança podem


ser aplicadas para proteger os sistemas operacionais e as
informações hospedadas em máquinas virtuais; no caso específico da
proteção contra códigos maliciosos, uma opção simples, mas que se
opõe à ideia de obter a maior eficiência de recursos de hardware, é a
solução conhecida como agentless (sem agentes).
Comentários:
O agentless diferente do agente-based não instala uma cópia do antivírus
em cada máquina virtual. Ao invés disso, existe uma máquina virtual
separada onde o sistema antivírus é instalado e partir dessa todo o
ambiente virtual é varrido. Essa abordagem é mais em eficiente em

104
relação ao uso de recursos quando comparada a agent-based. Item
incorreto.
07. (2018/CESPE/ABIN) Em replicação de estado, o becape
embasado em imagem ocorre no nível do hardware por meio da
criação de um snapshot da máquina virtual.
Comentários:
Becape e snapshots não se confudem. Snapshots não são backups. Um
snapshot é um “instantâneo” da VM, ela salva o estado de dados de uma
VM e com isso é possível reverter para esse ponto no tempo. Um
snapshot é útil para testar atualizações de software ou alguma operação
insegura. Caso algo dê errado, é possível voltar ao estado inicial antes
das alterações. Cuidado! Snapshots não são cópias completas do disco
base. Se a VM falhar, eles não são suficientes para restaurar a VM
devido a falhas no armazenamento. Note que o snapshot depende da
VM.
Um backup é uma cópia consistente da VM que oferece a possibilidade
de restaurá-lo caso os arquivos originais sejam comprometidos por um
desastre ou erro humano. Ao contrário dos snapshots, os backups são
independentes da VM e podem ser facilmente exportados e reinstalados
em outras instalações.
O backup baseado em imagem (também chamado de bare metal
backup) é o backup é feito no nível do volume dos discos. Uma cópia
inteira das partições é feita (bloco a bloco), o backup é salvo como um
único arquivo chamado de imagem. No backup baseado em arquivo o
corre uma cópia no nível dos arquivos. Há também um backup
completo da máquina virtual, nesse caso, é feito um backup de todos
os arquivos que compõem a máquina virtual. Somente nesse último tipo
de backup poderíamos dizer que ele é “feito no nível do hardware”, no
sentido que o hardware da VM também é copiado. Item incorreto.
08. (2017/CESPE/TRT - 7ª Região) Virtualização é a técnica que
permite particionar um único sistema computacional em vários
outros denominados máquinas virtuais. Acerca desse assunto,
assinale a opção correta.
a) O hypervisor fornece uma completa camada de abstração entre o
sistema guest e o computador host, o que permite o controle
individual da máquina virtual.
b) A virtualização total exige que o sistema convidado, que será
virtualizado, sofra modificações para ser executado de forma mais

105
eficiente.
c) Uma das vantagens da virtualização de servidores é o consumo
reduzido da RAM do computador hospedeiro, tendo em vista que
essa memória é compartilhada entre as máquinas virtuais em
execução.
d) Entre as formas de virtualização há a virtualização assistida
por hardware, a de aplicativos, a de storage e a do sistema
operacional.
Comentários:
a) Depende. O hipervisor seja tipo 1 fica entre o hardware e o SO guest.
Se for entendido computadores host como o hardware real, estaria
correto. Agora no caso de um hipervisor tipo 2, ele fica o SO host e o
sistema guest. Aí estaria errado No lugar de “computador host” deveria
estar SO host. Esse item é confuso. Foi considerado errado.

b)Errado. Quando temos modificação do sistema convidado, temos a


chamada paravirtualização.
c)Errado. A virtualização não garante a redução do uso de RAM. Aliás,
overload devido a existência do hipervisor faz com que mais RAM seja
consumida.

d) Correto.
09. (2017/CESPE/TRT- 7) Assinale a opção correta a respeito de
virtualização de máquinas.
a) A virtualização de hardware implementa uma camada física
virtual, emulando as características dos componentes de um
computador.

106
b) A paravirtualização aumenta a complexidade da implementação
de máquinas virtuais, pois a máquina hospedeira tem que gerenciar
a memória real para a máquina virtual.
c) Uma das funcionalidades do hypervisor é a interposição, por meio
da qual o monitor acessa e controla todas as informações da
máquina virtual.
d) O monitor de máquinas virtuais é implementado em dois
processos: um executado no sistema convidado e outro executado no
sistema hospedeiro.
Comentários:
a) Certo. Contudo, se fosse dado como errado também passaria. A
redação é confusa. A virtualização é criada por meio de software. Por
isso, o que se espera é falar em “camada lógica” e não física. O que
examinador quis dizer é que o hardware é emulado e ele chamou esse
hardware emulado de camada física virtual. É tipo de questão que joga
no mesmo vale o aluno que estudo e o que não sabe nada.
b) Errado. Paravirtualização está ligado a modificação do código do SO
convidado (hóspede)
c) Errado. Interposição significa que o hipervisor pode inspecionar e
alterar as operações das das máquinas virtuais. A inspeção é que tem
relação com o acesso as informações de estado da máquina virtual.
d) Errado. O tipo I roda em cima do hardware. O tipo II roda em cima de
SO host (hospedeiro)

107
Índice
1.O que é um Sistema Operacional ? 7
2.O que é um Sistema Operacional faz ? 8
3.O que compõe um Sistema Operacional ? 10
4.Como o sistema operacional é inicializado 11
5.Visão geral do funcionamento de um sistema
15
computacional
6.System Call e Interrupções 17
7.Cluster Beowulf 19
8.Modo Núcleo e Modo Usuário 20
9.Arquiteturas de Núcleo 20
10.Processos 22
11.Pipes 23
12.Multiprogramação e Tempo Compartilhado
24
(multitarefa)
13.O que é um processo? 26
14.Um processo em detalhes 28
15.Threads 30
16.Modelos Multithreads 32
17.Estados de um Processo 33
18.Criando e Encerrando Processos 39
19.Bloco de Controle de Processo (Process Control
41
Block - PCB)
20.Escalonamento de Processos 41
21.Dispatcher 43
22.Critérios de Escalonamento 44
23.Algoritmos de Escalonamento 45
24.Memória Principal 54

108
25.Hardware 55
26.Vinculação de Endereços (Binding) 57
27.Endereçamento Lógico e Físico 57
28.Carga Dinâmica 59
29.Bibliotecas Compartilhadas 59
30.Swapping 60
31.Alocação de Memória Contígua 62
32.O Problema da Fragmentação 63
33.Paginação 64
34.Segmentação 67
35.Memória Virtual 68
36.Trashing (Atividade improdutiva) 69
37.Anomalia Belady 69
38.Sistemas de Arquivos 71
39.Nomeação de Arquivos 71
40.Estrutura de Arquivos 72
41.Tipos de Arquivos 72
42.Acesso aos arquivos 73
43.Sistemas de Arquivos Journaling 73
44.O MBR e o Bloco de Inicialização 74
45.Alocação dos Arquivos 74
46.I-nodes 75
47.Sistema FAT 75
48.Sistema NTFS 76
49.Gerenciamento do Espaço Livre 78
50.Dispositivos de Blocos e Caractere 78
51.Controladora de Dispositivos 79
52.Técnicas de I/O 79
53.Módulos de Entrada e Saída 80
54.Periféricos 80

109
55.Funções de um módulo de E/S 82
56.Estrutura de um módulo de E/S 84
57.Comunicação da CPU com o módulo de E/S 85
58.Entrada e Saída Programada 86
59.Entrada e Saída Controlada por Interrupção 87
60.Acesso Direto à memória 88
61.Interface FireWire e InfiniBand 90
62.RAID 92
63.Virtualização - Visão Geral 95
64.Tipos de Hipervisor 96
65.Instruções sensíveis e privilegiadas 97
66.Hipervisor tipo 1 (bare metal) 98
67.Hipervisor tipo 2 (Hosted) 98
68.Paravirtualização 99
69.Virtualização Parcial e Total 99
70.Proteção das Máquinas Virtuais 100
71.Emulação, Simulação e Virtualização 100
72.Formas de Virtualização 101
73.Propriedades da virtualização 101
74.Questões 102

110

Você também pode gostar