Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Este livro é destinado a uma melhor compreensão 
do papel e das atividades desempenhadas pelo 
sistema operacional. Para isso, começa com uma 
apresentação histórica dos sistemas operacionais, 
seus possíveis ambientes, seus componentes e sua 
arquitetura. Em seguida, explica a forma com que 
o sistema operacional interage com o hardware 
e com o software; a execução de tarefas pelos 
sistemas operacionais; a conversão de processos 
em threads; o armazenamento em memória real e 
em memória virtual do computador; e, finalmen-
te, trata da segurança em sistemas operacionais, 
as possíveis formas de ataque e defesa dos siste-
mas e apresenta técnicas de proteção dos dados 
trocados pelos computadores. 
 
Em suma, esta obra traz as informações básicas 
para a compreensão do papel dos sistemas opera-
cionais e destina-se aos estudantes que desejam 
aprofundar seus conhecimentos sobre esse co-
adjuvante que merece todos os créditos por um 
trabalho bem realizado nos nossos computadores.
S
IS
T
E
M
A
S
 O
P
E
R
A
C
IO
N
A
IS
A
N
D
E
R
S
O
N
 D
U
T
R
A
 M
O
U
R
A
Código Logístico
59313
Fundação Biblioteca Nacional
ISBN 978-85-387-6615-5
9 7 8 8 5 3 8 7 6 6 1 5 5
Sistemas Operacionais 
Anderson Dutra Moura
IESDE BRASIL
2020
Todos os direitos reservados.
IESDE BRASIL S/A. 
Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200 
Batel – Curitiba – PR 
0800 708 88 88 – www.iesde.com.br
© 2020 – IESDE BRASIL S/A. 
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do 
detentor dos direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: spainter_vfx/ whiteMocca/Shutterstock
CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO 
SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
M884s
Moura, Anderson Dutra
Sistemas operacionais / Anderson Dutra Moura. - 1. ed. - Curitiba 
[PR] : IESDE, 2020. 
164 p. : il.
Inclui bibliografia
ISBN 978-85-387-6615-5
1. Sistemas operacionais (Computadores). I. Título.
20-64981 CDD: 005.43
CDU: 004.451
Anderson Dutra 
Moura
Mestre em Tecnologia da Saúde pela Pontifícia 
Universidade Católica do Paraná (PUCPR). MBA em 
Sistemas de Informação pela mesma instituição. 
Bacharel em Ciência da Computação pela Universidade 
Federal do Paraná (UFPR). Professor universitário há 
mais de 15 anos em diversas instituições de ensino 
superior e empresário da área de tecnologia da 
informação (TI), com mais de 25 anos de experiência.
Agora é possível acessar os vídeos do livro por 
meio de QR codes (códigos de barras) presentes 
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando 
a câmera fotográ�ca de seu smartphone ou tablet 
para o QR code.
Em alguns dispositivos é necessário ter instalado 
um leitor de QR code, que pode ser adquirido 
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
SUMÁRIO
1 Introdução aos sistemas operacionais 9
1.1 Evolução dos sistemas operacionais 9
1.2 Ambientes de sistemas operacionais 21
1.3 Componentes e objetivos dos sistemas operacionais 25
1.4 Arquitetura de sistemas operacionais 38
2 Interação do sistema operacional com hardware e software 45
2.1 Arquivos e diretórios 46
2.2 Interpretadores e compiladores 52
2.3 Firmware e middleware 54
2.4 Processadores 57
2.5 Memória 66
2.6 Discos e fitas 70
2.7 Dispositivos de E/S e barramentos 71
3 Processos e threads 76
3.1 Processos 76
3.2 Threads 88
3.3 Execução assíncrona concorrente 95
3.4 Programação concorrente 98
3.5 Deadlock e adiamento indefinido 100
3.6 Escalonamento de processador 103
4 Memória real e virtual 108
4.1 Memória real 108
4.2 Memória virtual 117
4.3 Questões de projeto e implementação 127
5 Segurança em sistemas operacionais 133
5.1 Criptografia 133
5.2 Autenticação 138
5.3 Controle de acesso 142
5.4 Ataques à segurança 146
5.5 Prevenção de ataques e soluções de segurança 148
5.6 Comunicação e protocolos de segurança 154
 Gabarito 1611
Desde sua criação, na década de 1950, a computação evoluiu e passou a 
ocupar um lugar importante no cotidiano das pessoas, seja em casa, seja no 
trabalho, de um modo nunca antes visto. Na forma dos grandes computadores, 
utilizados pelos centros de pesquisa e grandes corporações, computadores 
pessoais, notebooks, tablets e até mesmo celulares, os dispositivos estão 
presentes em nossas vidas, realizando uma quantidade de tarefas além do que 
foi imaginado quando os primeiros aparelhos foram concebidos. Conectados 
a redes com ou sem fio, os computadores permitiram a comunicação entre 
usuários e outras máquinas separadas por longas distâncias.
Desempenhando um papel coadjuvante nessa evolução, surgiu o sistema 
operacional, responsável por atender às solicitações feitas pelos usuários, 
controlar e se comunicar com a infinidade de dispositivos e acessórios, 
que podem ser conectados aos computadores e dispositivos; garantir a 
comunicação e a segurança na troca de informações com os computadores 
em rede ou que acessam a Web, entre outras tarefas.
Este livro é destinado a uma melhor compreensão do papel e das atividades 
desempenhadas pelo sistema operacional. Para isso, começaremos com uma 
apresentação histórica dos sistemas operacionais, seus possíveis ambientes, 
seus componentes e sua arquitetura. Em seguida, apresentaremos a 
forma com que o sistema operacional interage com o hardware e com o 
software; a execução de tarefas pelos sistemas operacionais; a conversão de 
processos em threads; o armazenamento em memória real e em memória 
virtual do computador; e, finalmente, trataremos da segurança em sistemas 
operacionais, as possíveis formas de ataque e defesa dos sistemas e algumas 
técnicas de proteção dos dados trocados pelos computadores.
Em suma, esta obra traz as informações básicas para a compreensão do 
papel dos sistemas operacionais e destina-se aos estudantes que desejam 
aprofundar seus conhecimentos sobre esse coadjuvante que merece todos 
os créditos por um trabalho bem realizado nos nossos computadores.
Bons estudos!
APRESENTAÇÃO
Introdução aos sistemas operacionais 9
1
Introdução aos sistemas 
operacionais
Se formos tomar como base o conceito de sistema operacio-
nal da época em que ele foi criado, veríamos a definição de um 
software que controla um hardware. Para aquele tempo, esse con-
ceito era válido. Porém, se examinarmos o hardware que temos 
hoje, podemos observar que ele está interagindo com um número 
cada vez maior de softwares, simultaneamente. Essa mudança na 
utilização e forma de interação com o software levou à necessi-
dade da redefinição desse conceito; o novo papel desempenhado 
pelo sistema operacional é o de realizar a separação entre as apli-
cações (software e hardware), criando um controle de acesso e um 
conjunto de serviços e permitindo a comunicação entre eles.
Neste capítulo, abordaremos a evolução dos sistemas opera-
cionais, que acompanha a evolução dos computadores e suas di-
versas finalidades, tamanhos e componentes, motivando a criação 
e evolução dos sistemas operacionais. Além disso, observaremos 
os diferentes ambientes e tipos de sistemas nos quais os siste-
mas operacionais estão inseridos, os principais componentes dos 
sistemas operacionais e as características consideradas essenciais 
em um sistema operacional. Por último, analisaremos a arquitetura 
dos sistemas operacionais. 
1.1 Evolução dos sistemas operacionais 
Vídeo Segundo Deitel, Deitel e Choffnes (2005), um sistema operacio-
nal é um software que habilita as aplicações para interagirem com 
o hardware de um computador. Com a evolução dos hardwares, 
suas diferentes aplicações e múltiplas possibilidades de utilização de 
softwares, podemos encontrar os sistemas operacionais não somente 
10 Sistemas Operacionais
em computadores de pequeno ou grande porte, mas também em nos-
sos celulares, geladeiras, automóveis, televisões, videogames etc.
Na maioria dos casos, a interaçãoentre o usuário e o sistema operacio-
nal se resume à execução de uma tarefa, como executar um aplicativo ou 
copiar um arquivo. Ao receber esse comando, o sistema operacional faz 
a interação entre o hardware e o software, necessária para que a tarefa 
solicitada seja cumprida. Isso faz com que, para o usuário, o sistema ope-
racional seja um mero coadjuvante na execução das suas tarefas; porém, 
ele desempenha um papel primordial nessa relação, com o hardware ge-
renciando os recursos disponíveis e o software gerenciando as aplicações 
em seus diferentes formatos e distribuições.
A evolução dos sistemas operacionais está intimamente ligada à 
dos computadores. À medida que os computadores foram se moder-
nizando, por meio de novos dispositivos de hardware e novas formas 
de programação, fez-se necessária a criação e adaptação dos sistemas 
operacionais para realizar a comunicação entre as aplicações (software 
e hardware), bem como para atender à crescente expectativa por parte 
dos usuários.
A primeira fase de computadores, criados entre 1945 e 1955, se 
caracterizava pelo uso de milhares de válvulas, que ocupavam enormes 
áreas e ainda não faziam uso de sistemas operacionais. A interação dos 
programadores com essas máquinas era feita com chaves mecânicas, nas 
quais se introduziam os comandos bit-a-bit 1 , para que estes fossem con-
vertidos em uma linguagem que a máquina pudesse compreender.
Esse cenário somente foi melhorado com a criação dos cartões per-
furados, nos quais os comandos bit-a-bit foram transformados em se-
quências no papel, acelerando o processo de programação por meio 
de linguagens, como assembly, que convertiam os sinais recebidos no 
cartão e permitiam a realização de operações básicas pelo computador.
Para que um programador pudesse executar um job, isto é, um pro-
grama ou conjunto de programas, ele deveria escrevê-lo em uma fo-
lha de papel, fazendo uso da linguagem de programação chamada de 
Fortran ou em linguagem de montagem (assembly). Após essa etapa, 
ele iria transferir o programa para um cartão perfurado (Figura 1). Nes-
se momento, ele poderia utilizar um ou mais cartões para representar 
o seu programa. Depois disso, os cartões seriam entregues para serem 
processados aos operadores do computador.
Para ter uma noção do 
esforço realizado pelos 
pioneiros da computação, 
assista ao filme O jogo 
da imitação. Baseado no 
livro de Alan Turing, The 
Enigma, o longa-metra-
gem retrata a busca de 
Turing para desenvolver 
um computador capaz de 
decodificar as mensagens 
nazistas, geradas pela 
máquina Enigma.
Direção: Morten Tyldum. São Paulo: 
Paris Filmes, 2016.
Filme
A expressão bit (dígito binário - 
BInary digiT) é a menor unidade 
de medida de transmissão de 
dados utilizada pelos computa-
dores. Um bit possui valor único, 
podendo ser definido como zero 
ou um, verdadeiro ou falso.
1
Para ter uma noção 
da primeira e segunda 
fase dos computadores, 
assista ao filme Estrelas 
além do tempo, que 
conta a história de três 
matemáticas da Nasa (Ka-
therine Johnson, Dorothy 
Vaughn e Mary Jackson), 
as quais se mostram 
parte fundamental da 
evolução tecnológica 
durante a Guerra Fria.
Direção: Theodore Melfi. São Paulo: 
WB Filmes, 2017.
Filme
https://pt.wikipedia.org/wiki/NASA
https://pt.wikipedia.org/wiki/Katherine_Johnson
https://pt.wikipedia.org/wiki/Katherine_Johnson
https://pt.wikipedia.org/wiki/Dorothy_Vaughan
https://pt.wikipedia.org/wiki/Dorothy_Vaughan
https://pt.wikipedia.org/wiki/Mary_Jackson
Introdução aos sistemas operacionais 11
Figura 1
Cartão perfurado
Ar
no
ld
Re
in
ho
ld
/W
ik
im
ed
ia
 C
om
m
on
s
O primeiro sistema operacional surgiu no início da década de 1950, 
desenvolvido pelos Laboratórios de Pesquisa da General Motors, e foi 
chamado de GM-NAA I/O, para ser executado nos computadores IBM 
701 (Figura 2), e comercializado a partir de 1953.
O desenvolvimento do transistor e das 
memórias magnéticas marcou o começo da 
segunda fase de computadores, aqueles 
que foram construídos entre 1955 e 1965. 
A substituição das válvulas da primeira fase 
pelo transistor trouxe velocidade e confia-
bilidade ao processamento. Já a criação das 
memórias magnéticas garantiu que os da-
dos fossem acessados mais rapidamente, 
aumentou a capacidade de armazenamento 
e permitiu que o tamanho dos computado-
res fosse reduzido. Com essa evolução, os 
computadores tornaram-se mais confiáveis 
e passaram a ser comercializados, porém 
com uso restrito para a realização de cálculos 
científicos e de engenharia.
A segunda fase marcou a distinção dos 
profissionais que participavam do projeto, da 
construção, da operação, da programação e 
da manutenção dos computadores, os quais 
passaram a ser instalados em salas exclusi-
Figura 2
Computador IBM 701
Da
n/
W
ik
im
ed
ia
 C
om
m
on
s
12 Sistemas Operacionais
vas para eles, que eram acessadas somente pelo pessoal autorizado e 
especializado. Em virtude do alto custo para aquisição, instalação e ma-
nutenção desses computadores, eles eram utilizados exclusivamente 
por grandes empresas, órgãos governamentais ou universidades.
Nessa fase, quando um programa (job) encerrava o seu processa-
mento, um dos operadores da máquina retirava o relatório de saída, 
que havia sido impresso pelo programa, deixando-o na expedição. Esse 
relatório seria retirado, posteriormente, pelo programador do job. Ten-
do feito isso, o operador selecionava um novo grupo de cartões, que 
haviam sido deixados pelos programadores na recepção, avaliando e 
providenciando os recursos necessários para a execução desse novo 
programa – por exemplo, a utilização do compilador Fortran, fazendo 
com que o operador realizasse a leitura do grupo de cartões correspon-
dente ao compilador. Boa parte das atividades realizadas nessa fase es-
tavam concentradas no trabalho dos operadores, que circulavam pela 
sala e providenciavam os recursos necessários para a execução dos 
jobs que estavam sob sua responsabilidade.
Além do alto custo dos computadores, a forma como os programas 
eram executados não era muito eficiente, pois dependia da inserção 
manual por parte dos operadores e, enquanto não eram alimenta-
dos por novas massas de cartões, os processadores ficavam ociosos. 
Buscando reduzir o desperdício do tempo de utilização da máqui-
na, sua alimentação passou a seguir um novo modelo, chamado de 
sistema batch (lote).
A ociosidade dos processadores era decorrente da utilização das lei-
toras de cartão, como periférico de entrada, e das impressoras, como 
periférico de saída. Os processadores eram lentos, quando compara-
dos ao processador que ficava aguardando a entrada dos dados, via 
cartão, ou o final da impressão do relatório, que marcava o término de 
execução do programa.
Em 1957, a utilização da fita magnética surgiu como uma opção 
para resolver esse problema. Os dados dos cartões magnéticos eram 
transferidos para uma fita, que posteriormente era lida pelo computa-
dor; o mesmo ocorria com os resultados que deveriam ser impressos, 
sendo copiados para uma outra fita. Assim, criando uma separação en-
tre sistemas, o sistema auxiliar carregava os dados na fita magnética e 
Introdução aos sistemas operacionais 13
realizava a impressão, deixando o sistema principal responsável pelo 
processamento.
A utilização da fita magnética para armazenamento dos dados de 
entrada e dos resultados de saída foi chamada de rolamento (spooling). 
Essa técnica permitia que a massa de cartões fosse gravada em uma 
fita, enquanto o sistema principal executava outro programa e gravava 
seus resultados em outra fita, que seria lida pelo sistema secundário, 
responsável por imprimir esses dados. Com sua utilização, as tarefas 
de entrada e saída foram agrupadas, maximizando o número de tare-
fas processadas por unidade de tempo (throughtput) no sistema prin-
cipal. Porém, a circulação das fitas pela sala ainda consumia tempo e, 
caso um programa muito longo fosse executado, ocasionava um atraso 
na execuçãodos demais programas, em virtude da natureza sequen-
cial do processo.
Os programadores deixaram de se preocupar em desenvolver ro-
tinas de leitura/gravação específicas, para cada dispositivo periférico, 
quando os sistemas operacionais incorporaram um conjunto de roti-
nas para operação de entrada/saída (Input/Output Control System – 
IOCS). Com isso, possibilitava-se a interdependência de dispositivos, o 
que trouxe avanços, como o conceito de canal, que permitia a transfe-
rência de dados entre dispositivos de E/S e a memória principal, sem a 
participação da CPU (UCP – Unidade Central de Processamento).
A segmentação no uso dos computadores – divididos em computa-
dores científicos de larga escala, usados em processamento científico 
e em computadores comerciais e utilizados por bancos, companhias 
de seguro e departamento de recursos humanos, que realizavam ope-
rações de pesquisa de arquivos em fita magnética e a impressão de 
relatórios – marcou o surgimento da terceira fase de computadores, 
abrangendo aqueles criados entre 1965 e 1980.
Entretanto, o desenvolvimento e o suporte de duas linhas de pro-
dutos diferentes, uma para uso científico e outra para uso comercial, 
representavam um grande desafio para os fabricantes na época, pois 
os clientes, inicialmente, necessitavam de máquinas mais simples e, 
gradualmente, foram exigindo mais agilidade no processamento e au-
mento na capacidade de armazenamento. Mesmo com a atualização 
de seu equipamento, o usuário poderia encontrar dificuldade em exe-
14 Sistemas Operacionais
cutar mais rápido um programa que foi desenvolvido na sua máquina 
inicial, mais simples que a atual.
Buscando solucionar o problema de performance e de armazena-
mento, a International Business Machine (IBM) lançou a série 360, com-
posta de máquinas compatíveis entre si. A série começava com o 1401, 
um computador menos potente, chegando até o IBM 7094, o computa-
dor mais potente da série. A diferença entre os computadores estava no 
preço e na performance, em virtude da quantidade de memória, da velo-
cidade do processador, do número de dispositivos de E/S etc. A compa-
tibilidade dos programas a serem executados nos computadores dessa 
série era garantida por uma arquitetura comum entre eles e um mesmo 
conjunto de instruções básicas. Com a série 360, a IBM conseguia unir, 
em um mesmo conjunto de computadores, a utilização tanto para uso 
científico como para uso comercial.
Uma outra inovação trazida pela IBM, na série 360, foi a utilização dos 
Circuitos Integrados (CI) ou Small Scale Integration (SSI) na sua fabrica-
ção, o que trouxe um resultado de preço e performance muito superior 
quando comparado com os computadores da fase anterior, construídos 
com transistores individuais. O sucesso da série 360, que trouxe o con-
ceito de uma família de computadores compatíveis, fez com que os ou-
tros fabricantes adotassem, rapidamente, essa ideia.
Realmente, a ideia da IBM era muito boa: a criação de uma família 
de computadores que atendessem ao processamento comercial e ao 
científico, de modo eficiente, e que permitissem qualquer programa. 
Entre esses programas, estava o sistema operacional OS/360, nativo 
tanto nas máquinas pequenas, que desenvolviam atividades mais sim-
ples e gerenciavam poucos periféricos, como nas máquinas maiores, 
que realizavam cálculos matemáticos mais complexos e possuíam uma 
variedade muito grande de dispositivos de E/S.
Na prática, a ideia de compatibilidade da série 360 acabou se revelan-
do um grande problema, pois o OS/360, sistema operacional da série, era 
muito complexo, sendo três vezes maior do que os sistemas operacionais 
utilizados em computadores mais antigos. O OS/360 possuía muitos códi-
gos escritos em linguagem de máquina, apresentando um número grande 
de erros, que, à medida que eram resolvidos, revelavam novos erros.
Mesmo diante da complexidade, tamanho e erros de execução, o sis-
tema operacional OS/360 e os sistemas operacionais de outros fabrican-
Introdução aos sistemas operacionais 15
tes, que seguiram o seu modelo, foram bem recebidos pelos usuários, 
pois introduziam novas técnicas até então não disponíveis nos sistemas 
operacionais, como a multiprogramação, que permitia a execução si-
multânea de vários programas por meio do compartilhamento de acesso 
à memória principal, ocupando em cada um deles um espaço reservado.
A evolução trazida pelo OS/360 e os sistemas de outros fabricantes 
não mudou o fato de que o processamento ainda era realizado em lote, 
ou seja, eles ainda eram sistemas batch. Além disso, em virtude da auto-
matização de muitas tarefas, os programadores começaram a sentir fal-
ta do tempo em que tinham acesso ao computador por horas seguidas 
e podiam consertar, com mais agilidade, os seus jobs. O grande desafio 
era que os programadores daquela época não estavam presentes quan-
do seus programas eram executados – eles os deixavam em cartões 
perfurados ou fitas de computador, aos cuidados do operador de sis-
tema responsável por carregá-los no computador para execução. Caso 
ocorresse um erro durante a execução, o job era paralisado e somente 
poderia ser executado novamente depois de ser corrigido, o que o fazia 
entrar, mais uma vez, na fila de espera por carregamento e execução.
Com a padronização obtida pelos computadores da série 360, ao uti-
lizar seu modelo mais potente, o IBM 7094, evidenciou-se que, nas apli-
cações científicas, as operações de E/S não eram usadas com frequência; 
o contrário acontecia nas aplicações comercias, que utilizavam muito os 
dispositivos de E/S, acarretando uma ociosidade por parte do processa-
dor que, ao finalizar o job atual, ficava esperando o encerramento das 
operação de E/S. Isso não era perceptível para as aplicações científicas, 
mas para as comerciais representava uma perda de 80 a 90% de tem-
po. A observação dessa diferença de comportamento e do desperdício 
no uso do processador trouxe à tona um problema que precisava ser 
solucionado.
O conceito de compartilhamento de tempo (time sharing), uma va-
riante da multiprogramação, surgiu em resposta à necessidade de se 
conseguir melhores tempos de resposta no processamento. Com a im-
plantação do compartilhamento de tempo, cada usuário passou a aces-
sar um terminal que não possuía capacidade de processamento e que 
era on-line, isto é, ligado diretamente ao computador por uma conexão 
ativa. Por meio desse terminal, os programadores poderiam se comuni-
car com seus programas em tempo de execução. Porém, para que essa 
técnica pudesse ser disseminada, eram necessárias ações de proteção 
16 Sistemas Operacionais
do hardware do computador, que passou a ser acessado pelos 
programadores.
Entre os sistemas operacionais, que faziam uso de time 
sharing na terceira fase dos computadores, podemos citar:
Vyacheslavikus/Shutterstock
O sistema Multiplexed 
Information and 
Computing Service 
(Multics) – desenvolvido 
pelo MIT, General 
Electric (GE) e Bell 
Laboratories para 
substituir o CTTS. Seus 
desenvolvedores foram 
os primeiros a utilizar 
o termo processo para 
descrever um programa 
em execução no sistema 
operacional. Também 
foi o primeiro sistema 
operacional escrito com 
uma linguagem de alto 
nível (EPL) e não uma 
linguagem de montagem 
(assembly).
Control Program/
Conversational Monitor 
System (CP/CMS) 
– programa de controle/
sistema monitor 
conversacional –, 
que eventualmente 
evoluiu para o sistema 
operacional Virtual 
Machine (VM) – máquina 
virtual –, desenvolvido 
pelo Cambridge Scientific 
Center da IBM.
Compatible Time- 
-Sharing System 
(CTTS), traduzido 
como sistema 
compatível de tempo 
compartilhado, 
desenvolvido pelo 
Massachusetts 
Institute of 
Technology (MIT).
Time sharing 
system (sistema 
de tempo 
compartilhado), 
desenvolvido 
pela IBM.
Uma das conquistas dessa fase foi a diminuição do tempo de 
retorno, isto é, o tempo entre a submissão de um job e o retorno de 
seus resultados foi reduzido para minutosou até segundos. Assim, 
o programador não precisava esperar muito tempo para corrigir os 
erros mais simples; ele dava entrada no programa e realizava a com-
pilação, na qual recebia uma lista dos erros de sintaxe. Isso permitia 
a execução, depuração, correção e conclusão do programa com eco-
nomia de tempo.
Os sistemas operacionais TSS, Multics e CP/CMS incorporavam 
o conceito de memória virtual, em que os programas conseguiam 
endereçar mais localizações de memória do que as providas pela 
memória principal, também chamada de memória real ou física. 
Isso permitia que os programadores se preocupassem com o desen-
volvimento das aplicações e não precisassem mais atuar no geren-
ciamento de memória.
Introdução aos sistemas operacionais 17
Tendo sido concebido e implementado, em 1969, na AT&T Bell 
Laboratories, por Ken Thompson, Dennis Ritchie, Douglas McIlroy e 
Joe Ossanna, o sistema operacional Unix foi lançado em 1971, todo 
escrito em linguagem assembly. Sua versão original foi substituída, 
em 1973, por uma nova versão, reescrita por Dennis Ritchie, com a lin-
guagem de programação C – uma linguagem de alto nível, que garan-
tiu a portabilidade do Unix para outras plataformas de computador.
Assim, o Unix cresceu rapidamente e se disseminou por institui-
ções acadêmicas e empresas, pois, em virtude de uma lei antitrus-
te, que proibia a AT&T de entrar no ramo de computadores, o seu 
código-fonte precisou ser licenciado.
Os computadores na década de 1970 foram marcados por algu-
mas evoluções, como:
a. o aumento na comunicação entre sistemas de computadores 
nos EUA, graças ao uso dos padrões Transmission Control 
Protocol/Internet Protocol (TCP/IP), criados pelo departamento 
de defesa americano, que passaram a ser utilizados em larga 
escala, especialmente no meio militar e acadêmico;
b. o padrão Ethernet, desenvolvido pelo Palo Alto Research 
Center (PARC) da Xerox, que popularizou a comunicação em 
redes locais (Local Area Network – LAN);
c. o microprocessador comercial criado pela Intel, tendo como 
destaque o modelo 8080, que serviu de base para os primeiros 
microcomputadores pessoais, e fazendo uso do sistema operacional 
Control Program Monitor (CP/M), também criado pela Intel.
Em virtude dessas evoluções e com o aumento da transferência de 
dados em ambientes vulneráveis, a segurança se tornou um proble-
ma. Isso aumentou a responsabilidade dos sistemas operacionais, que 
passaram a atender as novas demandas, como as funcionalidades de 
redes e de segurança, além da melhoria no desempenho, por causa 
das demandas comerciais.
O desenvolvimento da integração de circuitos em grande esca-
la (LSI – Large-scale Integration) marcou o início da quarta fase de 
computadores, produzidos a partir de 1981, época em que surgi-
ram os chips, nos quais milhares de transistores estavam encapsu-
lados em 1 cm² de silício. Esse fato permitiu o desenvolvimento do 
conceito de computador pessoal.
18 Sistemas Operacionais
O surgimento de softwares, como planilhas de cálculo, editores de 
texto, bancos de dados e pacotes gráficos, ajudou a dar impulso à revo-
lução da computação pessoal, criando uma demanda entre as empresas, 
as quais podiam usar esses aplicativos para aumentar sua produtividade.
Nessa fase, a aquisição de computadores por empresas ou univer-
sidades foi facilitada pelo surgimento de oferta dos minicomputado-
res – como os da classe PDP-11, desenvolvidos pela Digital Equipment 
Corporation (DEC) –, que não eram muito diferentes em termos de ar-
quitetura dos computadores pessoais.
Também, nessa fase, surgiu o conceito de rede, que permitia a troca 
de informações entre os computadores pessoais ligados a ela. A evolu-
ção desse conceito é a internet, com a qual a maioria dos computado-
res pessoais estão conectados atualmente. Os computadores pessoais 
mais poderosos passaram a ser chamados de workstations (estações de 
trabalho) e eram usados nas mais diferentes atividades.
Com o desenvolvimento e a disseminação dos computadores, os 
softwares também precisaram passar por uma evolução, para que se 
tornassem o mais amigável possível para o usuário, ocultando toda a ló-
gica envolvida no funcionamento do computador. Assim, foram criadas 
as Graphicals User Interfaces (GUI) – interfaces gráficas com o usuário 
–, pelo PARC da Xerox, que também desenvolveu o mouse. A aplicação 
dessas interfaces se deu de maneira intensa na criação dos sistemas 
operacionais. No Apple Macintosh (Figura 3), lançado em 1984, a GUI 
estava embutida no sistema operacional, padronizando o aspecto de 
todas as aplicações.
Nessa fase, podemos destacar sistemas operacionais, 
como: o MS-DOS, lançado em 1981, pela Microsoft, para ser 
utilizado no Personal Computer (PC) da IBM; o System OS, cria-
do pela Apple; e o Windows, também criado pela Microsoft, 
com base em um ambiente gráfico, sobreposto ao MS-DOS. 
No segmento de mini e superminicomputadores, destacaram-
-se os sistemas multiusuários, compatíveis com Unix e o VMS 
da DEC.
O ano de 1983 marcou o início de uma revolução no desen-
volvimento de software. Nesse ano, Richard Stallman, um ex-
-funcionário da IBM, ex-aluno de Harvard e desenvolvedor do 
MIT, fundou o movimento de software livre, que buscava obter e 
Figura 3
Apple Macintosh
Kevin chen2003/Wikimedia Commons
Introdução aos sistemas operacionais 19
garantir certas liberdades para os usuários, como o direito de executar, 
estudar e modificar o software, além de a liberdade de distribuir cópias 
desse software, com ou sem alterações. O lançamento do Projeto GNU, 
também criado por Stallman, representou o marco de início do mo-
vimento de software livre. O objetivo do projeto era criar um sistema 
operacional, chamado GNU, com base em software livre. Esse projeto é 
mantido, atualmente, pela Free Software Foundation (FSF) – Fundação 
para o Software Livre – fundada por Stallman, em 1985.
O núcleo (core) do sistema operacional Linux começou com um 
projeto particular de Linus Torvalds, inspirado no Minix, um pequeno 
sistema operacional baseado no Unix, que foi criado por Andrew S. 
Tanenbaum para fins acadêmicos.
Na década de 1980, foram desenvolvidos os sistemas operacionais 
distribuídos, que trabalham com vários processadores. Esse conceito 
foi popularizado pelo modelo cliente/servidor (client/server), em que 
os clientes são os computadores de usuários que requisitam vários 
serviços, e os servidores são computadores que executam os serviços 
requisitados. Muitas vezes, os servidores eram dedicados a um tipo es-
pecífico de tarefa, como: renderização de gráficos, gerenciamento de 
banco de dados ou hospedagem de páginas web.
A utilização de vários processadores, por parte dos sistemas distribuí-
dos, levou à necessidade de se melhorar os algoritmos de escalonamen-
to de processador, a fim de aprimorar o grau de paralelismo do sistema.
Os softwares de redes e as redes de computadores passaram a 
ocupar um lugar de destaque nos sistemas operacionais, permitindo o 
acesso a outros sistemas computacionais, independentemente do fa-
bricante, estado ou, até mesmo, país.
O multiprocessamento, isto é, a adição de mais processadores 
ao computador, marcou o final dos anos 1980. Esse avanço veio para 
atender à exigência das aplicações na realização de volumes de cálcu-
los gigantescos. Diante disso, os sistemas operacionais precisaram se 
atualizar com novos mecanismos de controle e sincronismo, garantin-
do a execução simultânea de mais de um programa ou, ainda, a execu-
ção de um mesmo programa em processadores diferentes.
Entre as novas tecnologias que foram introduzidas, com a utilização 
do multiprocessamento, garantindo o aumento de performance dos 
computadores, podemos destacar:
https://pt.wikipedia.org/wiki/Sistema_operacional
https://pt.wikipedia.org/wiki/Sistema_operacional
https://pt.wikipedia.org/wiki/GNU
https://pt.wikipedia.org/wiki/Software_livre
20 Sistemas Operacionais
O uso dos processadores vetoriais ou processadores de matriz, 
queimplementavam um conjunto de instruções no formato de matrizes 
unidimensionais de dados, chamadas vetores. Diferentemente dos 
processadores escalares, cujas instruções operavam em itens de dados 
individualmente, essa abordagem garantia um melhor desempenho 
em simulações numéricas. Tendo surgido no início da década de 1970 
e dominado os projetos de supercomputadores até os anos 1990, o 
surgimento dos microprocessadores, com uma melhor relação entre 
preço e desempenho, pôs fim à sua utilização.
O uso das técnicas de paralelismo, que permitem a execução 
simultânea das tarefas.
Os sistemas operacionais desenvolvidos na década de 1990 foram 
marcados por uma interface mais amigável com o usuário; as capa-
cidades de GUI, incluídas pela Apple no seu sistema operacional, e o 
System OS, nos anos 1980, foram ampliados e melhorados. A possibili-
dade de o usuário adicionar e remover componentes de hardware (plu-
g-and-play – ligar e usar) sem ter de reconfigurar o sistema operacional 
tornaram-se reais. Os usuários passaram a autenticar seu acesso ao 
sistema operacional, mantendo o seu perfil e permitindo a personaliza-
ção da interface, diferenciando-a dos demais usuários.
O núcleo do Linux, versão 0.02, foi lançado por Linus Torvalds em 
1991. No ano seguinte, ele mudou a licença do núcleo do Linux para a 
licença GPL (General Public License), criada pelo Projeto GNU, que foi, 
inicialmente, utilizado por programadores, que interagiam por linhas de 
comando. Atualmente, esse projeto é usado por grupos de desenvolve-
dores que criam interfaces gráficas para diferentes distribuições GNU/Li-
nux, tornando-o um sistema operacional mais acessível. O projeto reúne 
muitos programadores, de diversas partes do mundo, que contribuem 
com o desenvolvimento do Linux, tornando o projeto um exemplo de 
sucesso colaborativo no desenvolvimento de um sistema operacional.
O Linux é disponibilizado aos usuários por meio de várias distri-
buições, como: Arch Linux, CentOS, Debian, Fedora Linux, Linux Mint, 
openSUSE, Ubuntu etc. Os usuários corporativos fazem uso de distri-
buições focadas nesse público, como Red Hat Enterprise Linux ou SUSE 
Linux Enterprise Server. Uma distribuição Linux inclui: o núcleo Linux, 
bibliotecas e utilitários, além de aplicações, como a suíte de escritório 
denominada LibreOffice.
Introdução aos sistemas operacionais 21
Nos anos 2000, um número cada vez maior de computadores 
passou a conseguir realizar paralelismo maciço, pois possuíam uma 
grande quantidade de processadores, permitindo que partes indepen-
dentes das operações pudessem ser executadas em paralelo. Esse é 
um conceito drasticamente diferente da computação sequencial das 
fases iniciais das máquinas.
A computação em dispositivos móveis, como celulares e tablets, tor-
nou-se cada vez mais comum à medida que os processadores ficavam 
menores e mais poderosos. O que era utilizado, inicialmente, para opera-
ções como e-mail, navegação web e fotos, hoje é utilizado por aplicações 
intensivas em recursos, como videoconferências. Apesar de limitados pelo 
tamanho, os dispositivos móveis dependem da computação distribuída 
para atender à sua demanda crescente de dados e processamento.
1.2 Ambientes de sistemas operacionais 
Vídeo Atualmente, os computadores são utilizados por usuários no seu 
dia a dia, em computadores pessoais (desktops), notebooks, estações 
de trabalho (workstations) ou dispositivos móveis (celulares e tablets); 
ou corporativamente, por meio de servidores web, servidores de ban-
cos de dados, entre outros. Isso fez com que os sistemas operacionais 
tivessem de se relacionar com um crescente número de recursos de 
hardware, como: memória principal, discos de alta capacidade, dis-
positivos periféricos etc. Somado a isso, do outro lado, há o sistema 
operacional que se responsabiliza pela execução de uma infinidade de 
aplicações (software) com diferentes finalidades (Figura 8). 
Aplicação Espaço do usuário 
Espaço do núcleo
Componentes do SO 
Aplicação
Interface de chamada ao sistema
Aplicação
Figura 4
Interação entre as aplicações e o sistema operacional
Fonte: Deitel; Deitel; Choffnes, 2005.
22 Sistemas Operacionais
Diante dessa diversidade de hardware e software, os sistemas ope-
racionais precisaram se adaptar a diferentes tipos de ambientes.
1.2.1 Sistemas embarcados
Segundo Stallings (2017), bilhões de sistemas operacionais são pro-
duzidos anualmente. Os sistemas embarcados são computadores de-
dicados ou embutidos, presentes em equipamentos que estão a nossa 
volta, sendo chamados de computadores pervasivos ou ubíquos. Segun-
do Li (2003), os usuários muitas vezes não percebem sua existência, 
mas podemos encontrá-los nos eletroeletrônicos, hardwares de rede, 
equipamentos hospitalares, automóveis etc.
Ao desenvolver sistemas operacionais para sistemas embarcados, 
a grande preocupação está em gerenciar, de maneira eficiente, os re-
cursos disponíveis. Como estamos falando de dispositivos de pequeno 
porte, a capacidade de armazenamento é limitada, levando à necessida-
de da construção de sistemas operacionais que atendam aos serviços 
necessários, com uma pequena quantidade de código. Outros pontos a 
serem observados nesse tipo de sistema são: gerenciamento de energia 
(bateria) e a necessidade de interfaces amigáveis para os usuários.
1.2.2 Sistemas de tempo real
Com a disseminação do uso de sistemas computacionais, as aplica-
ções com requisitos de tempo real tornaram-se cada vez mais comuns, 
variando em relação à complexidade e às necessidades de garantia no 
atendimento das restrições temporais. Assim, elas abrangem desde os 
sistemas mais simples, como os controladores inteligentes embarca-
dos em utilidades domésticas (por exemplo, as lavadoras de roupa e 
os DVD players), até os sistemas mais complexos, como os sistemas 
militares de defesa e os de controle de tráfego aéreo. Mesmo sendo 
caracterizadas como aplicações de tempo real, algumas delas apresen-
tam restrições de tempo mais rigorosas do que outras; entre elas, po-
demos destacar os sistemas responsáveis pela respiração artificial de 
pacientes, que estão internados em Unidades de Terapia Intensiva (UTI) 
de hospitais, e os sistemas embarcados em robôs e veículos (automó-
veis, aviões e sondas espaciais). Para exemplificar, o piloto automático 
de uma aeronave deve ajustar, constantemente, a velocidade, altitude 
e direção. Há, porém, aplicações que não apresentam restrições tão crí-
Introdução aos sistemas operacionais 23
ticas, como: os consoles de games, as teleconferências e as aplicações 
de multimídia. Todas essas aplicações, que apresentam a característica 
adicional de estarem sujeitas a restrições temporais, são agrupadas no 
que é usualmente identificado como sistemas de tempo real.
Ao desenvolver sistemas operacionais para sistemas de tempo real, é 
necessário assegurar que os processos respondam imediatamente aos 
eventos críticos. Os sistemas de tempo real não críticos devem garan-
tir a execução das tarefas de tempo real com alta prioridade, mas sem 
a garantia de que elas sejam concluídas a tempo ou que, até mesmo, 
sejam concluídas. Já os sistemas de tempo real críticos garantem que 
todas as tarefas serão concluídas a tempo. Muitas vezes, os sistemas de 
tempo real são usados em sistemas de missão crítica, um sistema es-
sencial para a sobrevivência de uma empresa ou organização – ou seja, 
quando esse tipo de sistema falha, as operações param e o negócio, por 
sua vez, é afetado.
1.2.3 Sistemas críticos em negócios
Um sistema é considerado um sistema crítico em negócios quan-
do falha e pode resultar em perdas econômicas significativas para a 
empresa que o utiliza. Podemos citar como exemplos os servidores 
web e os servidores de bancos de dados.
Os sistemas operacionais garantem aos sites de comércio eletrôni-
co (e-commerce) um tempo de resposta rápido ao usuários que estão 
comprando produtos pela internet; no uso corporativo, eles permitem 
o compartilhamento de informaçõesentre funcionários.
1.2.4 Máquinas virtuais
O conceito de máquina virtual (virtual machine – VM) permite a um 
programa agir como um computador completo, com um sistema opera-
cional funcional. Assim, temos um computador sendo executado dentro 
de outro computador. Para que isso aconteça, um programa cliente é uti-
lizado como uma camada de virtualização entre o sistema operacional do 
computador hospedeiro e o sistema operacional do computador virtual.
A virtualização não é semelhante à emulação, em que os recursos 
de um programa ou sistema são copiados e executados com o compu-
tador hospedeiro. Na virtualização, a VM consegue operar de maneira 
independente e isolada, conseguindo executar o sistema operacional, 
24 Sistemas Operacionais
mesmo que esse seja incompatível com a arquitetura utilizada no com-
putador hospedeiro.
Chamamos esse recurso de portabilidade – a capacidade de o 
software ser executado em várias plataformas. Os recursos da máqui-
na virtual são gerenciados pelo sistema operacional dela. Uma das faci-
lidades oferecidas pela virtualização é permitir que várias instâncias de 
sistemas operacionais diferentes possam ser executadas, simultanea-
mente, em um computador hospedeiro. Dessa forma, podemos ter um 
computador hospedeiro fazendo uso do sistema operacional Windows, 
que executa VMs com diferentes versões de Linux.
As VMs fazem interface, via sistema operacional, com o hardware 
do computador em que estão instaladas. Uma VM é capaz de criar 
componentes de software que representam dispositivos físicos – 
como processadores, memória, canais de comunicação, discos etc. 
–, o que permite o compartilhamento de hardware entre vários 
usuários (Figura 5).
A Java Virtual Machine (JVM) – máquina virtual java – é umas das VMs 
mais utilizadas, servindo como fundamentação da plataforma Java. Ela 
permite que as aplicações Java sejam executadas na versão correta de 
JVM, independentemente da plataforma em que esteja instalada.
Empresas como a VMWare Software e Oracle fornecem máquinas vir-
tuais, baseadas na arquitetura Intel, permitindo a execução de sistemas 
operacionais Linux e Windows, simultaneamente, em um só computador.
Aplicações
Aplicações
Aplicações
Máquina Virtual
Aplicações
Aplicações
Linux
Sistema operacional
Windows Unix Camada de 
hardware 
virtual
Camada de 
hardware 
físico
Software
Processador Memória Disco
Fonte: Deitel; Deitel; Choffnes, 2005.
Leia o livro Sistemas 
operacionais de tempo 
real e sua aplicação em 
sistemas embarcados 
para encontrar uma 
introdução teórica sobre 
sistemas de tempo real, 
além de exemplos de sua 
aplicação.
DENARDIN, G. W.; BARRIQUELLO, C. 
H. 1. ed. São Paulo: Blucher, 2019.
Livro
Figura 5
Diagrama de 
uma máquina 
virtual
Introdução aos sistemas operacionais 25
As VMs tendem a ser menos eficientes do que os computado-
res reais, pois não acessam o hardware diretamente ou simulam 
o hardware que não está conectado no computador hospedeiro, o 
que aumenta o número de instruções de software requeridas para 
cada ação de hardware.
1.3 Componentes e objetivos dos 
sistemas operacionais Vídeo
Nesta seção, apresentaremos os principais componentes de um 
sistema operacional, assim como os principais objetivos a serem al-
cançados por um sistema operacional, isto é, suas características con-
sideradas essenciais.
1.3.1 Componentes centrais do sistema operacional
A interação do usuário com o sistema operacional é feita pelas 
aplicações ativadas por ele ou por meio de uma aplicação especial 
chamada shell, que atua como um interpretador de comandos. A im-
plementação dos interpretadores de comandos é feita pelas interfaces 
de texto, que recebem os comandos dos usuários via teclado ou pela 
interface gráfica (GUI), em que o usuário interage com o mouse, requi-
sitando a execução de serviços para o sistema operacional, como abrir 
um aplicativo. Os sistemas operacionais modernos, que fazem uso de 
GUI, possuem alternativas nas quais o usuário pode abrir um terminal 
e digitar os seus comandos via teclado.
Segundo Deitel, Deitel e Choffnes (2005), o software que contém os 
componentes centrais do sistema operacional chama-se núcleo (kernel). 
Entre os componentes centrais do sistema operacional, estão:
Escalonador de processos
Sendo responsável pela decisão sobre o momento em que um pro-
cesso acessará a CPU, o escalonador de processos é um subsistema, 
do sistema operacional, que faz uso de algoritmos de escalonamento 
para estabelecer a lógica de sua execução. Ele pode variar de acordo 
com o tipo de utilização do sistema operacional.
É necessário que exista atenção, por parte do sistema operacional, 
para os processos que precisam de mais processamento, isto é, mais 
26 Sistemas Operacionais
atividade da CPU, ocupando-a por mais tempo e possuindo pouca, ou 
nenhuma, interação por parte do usuário. Como exemplo, temos a exe-
cução de um programa de cálculo científico, no qual os parâmetros são 
inseridos pelo usuário, o qual inicia a execução do programa, que de-
morará um certo tempo para exibir o resultado, período em que fará 
uso da CPU. O programa faz uso dos dispositivos de E/S somente na 
fase inicial, quando o usuário inseriu os dados, e no momento final, 
quando o sistema exibe o resultado do cálculo. Esse comportamento 
de processo é chamado de processo orientado à CPU (CPU bound).
Pode parecer simples, mas o ato de teclar e, depois disso, o que foi 
digitado aparecer na tela exige do sistema operacional um processo de 
entrada/saída pela CPU, várias vezes, dentro de um pequeno intervalo 
de tempo. Esse comportamento de processo é denominado processo 
orientado à E/S (In/Out bound).
Os casos representados na figura a seguir mostram os diferentes 
comportamentos de tais processos.
Surto longo de uso de CPU
Surto longo de uso de CPU
Espera pela E/S
Tempo
(a) Processo CPU-bound ou orientado a CPU
(b) Processo I/O-bound ou orientado a E/S
Figura 6
Comportamento de processos
Fonte: Novato, 2014.
Gerenciador de memória
Em sua grande maioria, os computadores fazem uso do conceito 
de hierarquia de memória. No topo dessa hierarquia, encontram-se os 
registradores, isto é, a memória que está dentro da CPU; eles são mais 
rápidos e mais caros, o que ocasiona a sua pequena quantidade. São 
seguidos, em uma quantidade maior, pela memória cache, que é mui-
to rápida, porém inferior à dos registradores. Depois dela, encontramos 
Introdução aos sistemas operacionais 27
a memória principal (Random Access Memory), também conhecida 
como memória RAM, em maior quantidade que a sua sucessora, porém 
mais lenta. Por último, temos a memória de armazenamento em dis-
co (Hard Disk – HD), em uma quantidade muito maior que as anterio-
res, mas considerada lenta quando comparada às demais.
Ao analisarmos o armazenamento de dados, em um sistema com-
putacional, podemos observar que ele ocorre em diversos níveis, ou 
seja, em diferentes tipos de dispositivos, sempre levando em conta os 
seguintes fatores:
a. o tempo de acesso ao dispositivo;
b. a velocidade com que a operação deverá ser realizada;
c. o custo da unidade de armazenamento;
d. a capacidade de armazenamento do dispositivo.
Tomando essa afirmação como base, ao realizar um projeto de siste-
ma operacional, devemos definir a quantidade de cada tipo de memó-
ria que será necessária utilizarmos para garantir que o futuro sistema 
seja, simultaneamente, eficiente e viável do ponto de vista financeiro. 
Isso porque a velocidade, o preço e a capacidade de armazenamento 
“andam de mãos dadas” quando falamos em memória. Quanto mais 
rápida ela for, mais cara será, e menor será a sua capacidade de arma-
zenamento. A figura a seguir apresenta uma representação da hierar-
quia de memória.
Velocidade: Altíssima
Custo: Altíssimo
Capacidade: Pouquíssimo
Tamanho: Muito pequeno
Energizado: Sim
Velocidade: Altíssima
Custo: Altíssimo
Capacidade: Muito pouco
Tamanho: Muito pequeno
Energizado: Sim
Velocidade: Alta
Custo: MédioCapacidade: Alta
Tamanho: Razoável
Energizado: Sim
Velocidade: Baixa
Custo: Baixíssimo
Capacidade: Muito alta
Tamanho: Grande
Energizado: Não
Registradores
CPU cache
Dispositivos de 
armazenamento 
em massa
RAM
Fonte: Pendrive..., 2015.
Figura 7
Hierarquia de 
organização da 
memória
28 Sistemas Operacionais
Cabe ao gerenciador de memória comandar a hierarquia da me-
mória, isto é, controlar as partes da memória que estão em uso e as 
que não estão, de modo a:
alocar a 
memória aos 
processos, 
quando for 
necessário;
liberar a 
memória, 
quando um 
processo 
terminar;
tratar do 
problema de 
swapping, isto 
é, quando a 
memória é 
insuficiente.
Vyacheslavik
us
/S
hu
tte
rs
to
ck
Desse modo, existem dois tipos de memória principal. Quando um 
programa precisa alocar espaço em memória, ele faz uso da memó-
ria lógica, que é a memória visível e manipulada pelos programas. 
Essa memória, acessada pelos programas, existe na memória física, 
implementada por Circuitos Integrados (CI). Isso ocorre graças à ação 
de uma unidade de gerência de memória, que realiza a tradução dos 
endereços lógicos em endereços físicos, permitindo que um programa 
alocado na memória lógica possua um endereço de memória física cor-
respondente. Em geral, a memória lógica tem tamanho igual ou maior 
que a memória física.
1.3.1.1 Gerenciador de E/S
O sistema operacional encontra no Gerenciador de E/S um par-
ceiro para realizar uma das principais e mais complexas atividades 
no computador. Para isso, o gerenciamento de dispositivos de E/S é 
estruturado em camadas, nas quais os níveis mais baixos ocultam as 
caraterísticas de cada um dos dispositivos físicos das camadas superio-
res, permitindo que as aplicações executadas pelo usuário atuem sem 
conhecer a arquitetura do hardware utilizado pelas operações de E/S.
A existência de diferentes modelos de dispositivos de E/S, com ca-
racterísticas diferentes entre si, levou os projetistas de sistemas opera-
cionais a desenvolverem uma camada chamada de subsistema de E/S, 
que permite o isolamento desses dispositivos e sua ampla gama de 
variações. Com isso, o sistema operacional ganha flexibilidade, conse-
guindo realizar a comunicação entre as aplicações e qualquer tipo de 
dispositivo de E/S.
Introdução aos sistemas operacionais 29
A comunicação do dispositivo de E/S com a camada do subsistema 
de E/S é feita pela camada conhecida como device driver, que se respon-
sabiliza pelos aspectos técnicos dessa comunicação, como a velocidade 
da operação, a unidade de transferência, a representação dos dados e 
os tipos de operações a serem realizados.
Essas camadas são divididas em dois grupos: o primeiro grupo 
é responsável por permitir a visualização de todos os dispositivos 
de modo único, sem distinção; já o segundo grupo atua de manei-
ra específica para cada um dos dispositivos. Em sua maioria, as 
camadas atuam de modo independente dos dispositivos de E/S 
(Figura 8).
Figura 8
Camadas da gerência de dispositivos
Representação das camadas que realizam o gerenciamento dos dispositivos de E/S.
Processo
Independente 
do dispositivo 
(a)
Dependente 
do dispositivo 
(b) 
M
od
o 
ke
rn
el
M
od
o 
us
uá
rio
So
ftw
ar
e
H
ar
dw
ar
e
Operações de E/S
Subsistema de E/S
Device drivers
Controladores
Dispositivo de E/S
Sistema de 
arquivos
Fonte: Machado; Maia, 2013.
30 Sistemas Operacionais
O subsistema de E/S (system calls) desempenha 
um papel muito importante, pois busca simplificar 
a interação entre o usuário e as aplicações, isolan-
do a complexidade dos dispositivos de E/S de suas 
operações, que são diferentes entre cada um dos 
dispositivos, e sua relação com as demais camadas 
– por exemplo, sistemas de arquivos, banco de da-
dos e aplicações (Figura 9).
As rotinas de E/S são um conjunto de rotinas espe-
ciais que cuidam dos detalhes das operações de leitura 
e escrita a serem realizadas pelo sistema operacional, 
como o passo a passo que deve ser feito na gravação 
de um arquivo. Isso acontece sem que o usuário e a 
aplicação se preocupem com essa tarefa, que passa a 
ser de responsabilidade do subsistema de E/S.
A comunicação do subsistema de E/S com os dis-
positivos é feita por meio dos controladores de E/S, o 
device driver (ou somente driver). Cabe ao subsiste-
ma de E/S gerenciar as funcionalidades de todos os 
dispositivos de E/S ligados ao computador, enquan-
to o driver se responsabiliza pelas particularidades 
de cada um dos dispositivos (Figura 9).
Os dispositivos de E/S enviam comandos gerais 
de leitura e escrita para os seus device drivers, os 
quais traduzem esses comandos para comandos es-
pecíficos de leitura e escrita, que poderão ser execu-
tados pelo controlador de E/S do dispositivo.
Os controladores de E/S são os dispositivos de 
hardware responsáveis por interagir com os disposi-
tivos de E/S. Existe um controlador de E/S para cada 
tipo de dispositivo de E/S, por exemplo, disco rígido, 
impressora, webcam etc. A comunicação entre os 
dois é possibilitada pelo device driver, que faz a tra-
dução das instruções recebidas dos dispositivos e as 
converte para um padrão compreensível pelo con-
trolador. Os controladores podem estar acoplados à 
CPU por meio de uma placa ou implementados na 
própria placa do processador.
Figura 9
Subsistema (system calls) de E/S 
Comandos 
de E/S
Bibliotecas
Rotinas de E/S
Device drivers
Dispositivos de E/S
Aplicação
System calls de E/S
Fonte: Machado; Maia, 2013.
Driver de 
impressora
Controlador 
de impressora
Driver de 
disco
Controlador 
de disco
Driver de 
fita
Controlador 
de fita
Figura 10
Device driver
Subsistema de E/S
Processo
Fonte: Machado; Maia, 2013.
Introdução aos sistemas operacionais 31
No sistema operacional Windows, da Microsoft, os device drivers 
são desenvolvidos com base em um padrão chamado Windows Driver 
Model (WDM), responsável por definir um conjunto de características e 
funções a serem oferecidas por um driver. Esse padrão é homologado 
pela Microsoft, permitindo que o sistema operacional possa efetuar ta-
refas, como: suporte ao plug-and-play (ligar e usar), acesso a múltiplos 
processadores, gerência de energia dos dispositivos e interação com os 
objetos do sistema operacional (Figura 11).
Figura 11
Janela do Device Manager (gerenciador de dispositivos) do Windows
No sistema operacional Unix, o gerenciador de E/S foi desenvolvi-
do de modo integrado ao sistema de arquivos, permitindo acesso aos 
dispositivos de E/S por meio de arquivos especiais, que podem ser 
acessados como qualquer outro arquivo pelas system calls de leitura 
e gravação, enviando o mesmo dado para diferentes tipos de saída e 
garantindo às system calls de E/S a uniformidade na manipulação de 
32 Sistemas Operacionais
qualquer tipo de dispositivo de E/S. Esses arquivos especiais são arma-
zenados no diretório do sistema operacional Unix.
Em suas versões mais recentes, os sistemas operacionais Unix/
Linux passaram a permitir que os drivers dos dispositivos de E/S 
pudessem ser acoplados ao núcleo com o sistema operacional em fun-
cionamento, sem a necessidade de se compilar e gerar um novo kernel 
ou mesmo efetuar o reboot (reinicialização) do sistema operacional 
para reconhecê-lo.
A transferência dos dados, recebidos pelos dispositivos de E/S, para 
o sistema operacional é feita pelos controladores de E/S por meio de 
blocos de informação. Os dispositivos de E/S são responsáveis pela 
comunicação do computador com o mundo externo, sendo classifica-
dos como dispositivos de entrada de dados, saída de dados ou ambos 
(entrada e saída).
1.3.1.2 Gerenciador de comunicação interprocessos (IPC)
Para garantir a interdependência dos processos, os sistemas opera-
cionais implementaram alguns mecanismos, com os quais os processos 
são executados em cápsulas autônomas, de modo que sua execução 
não afete a dos demais. O hardware também faz sua parte, oferecendo 
proteção à memória e garantindo que um processo não ocupe o mes-
moespaço endereçado ao outro.
Os processos, entretanto, interagem e cooperam na execução de 
tarefas. Em muitos casos, os processos precisam trocar informação de 
maneira controlada para:
a. dividir tarefas e aumentar a velocidade de processamento;
b. aumentar a capacidade de transferência de dados (rede);
c. atender a requisições simultâneas.
Para atender a essa demanda, o sistema operacional fornece me-
canismos que permitem aos processos se comunicarem uns com os 
outros por meio do IPC (Inter-Process Communication), um conjunto 
de mecanismos de troca de informação entre múltiplas threads de um 
ou mais processos. Os mecanismos de IPC permitem ao sistema ope-
racional implementar canais de comunicação (implícitos ou explícitos) 
entre os processos.
Introdução aos sistemas operacionais 33
Para realizar sua tarefa com eficiência, o IPC precisa se preocupar 
com a coordenação da comunicação, realizando a sincronização do 
processo, na qual o processo emissor precisa informar que um dado 
foi transmitido e o processo receptor precisa saber que o dado en-
viado está disponível, informando aos dois quando podem realizar 
uma nova comunicação.
Os processos podem se comunicar das seguintes formas: inter-
namente, quando dois módulos de um mesmo processo se comuni-
cam; entre dois processos diferentes, em um mesmo computador; 
ou externamente, quando dois processos em computadores dife-
rentes se comunicam.
Para realizar sua tarefa, o IPC pode fazer uso dos seguintes mo-
delos de comunicação.
a. Difusão (broadcast): quando o receptor envia a mesma 
mensagem para um grupo de receptores, sem saber quem são 
eles.
b. Produtor-consumidor: quando existe somente um emissor e 
um receptor, com a comunicação unidirecional entre eles.
c. Cliente-servidor: quando o cliente, que pode ser um 
computador, programa ou processo, solicita uma requisição 
para um servidor, que também pode ser um computador, 
programa ou processo.
d. Peer-to-Peer (P2P): quando cada um dos nós (computadores, 
programas ou processos) que participam da comunicação 
atuam como servidores ou clientes.
e. Caixa de correio (mailbox): quando a comunicação entre 
o emissor e o receptor funciona como uma caixa de correio, 
na qual o receptor não escolhe o emissor que lhe escreveu 
a mensagem. Pode ser classificada em dois tipos: a escrita 
não bloqueante, quando a capacidade de armazenamento da 
caixa de correio é ilimitada; ou de leitura bloqueante, quando 
a caixa de correio está vazia.
f. Diálogo: quando há servidores exclusivos para cada cliente, 
unidos por um canal de comunicação dedicado somente a eles, 
que será desligado quando a comunicação entre eles acabar.
34 Sistemas Operacionais
1.3.1.3 Gerenciador de sistemas de arquivos
O gerenciador de sistemas de arquivos é responsável pelo geren-
ciamento dos arquivos e das operações que esses realizam, bem como 
pela segurança no seu acesso, garantindo que um usuário não consiga 
acessar um arquivo que pertence a outro usuário sem ter autorização 
para fazê-lo. Ele também é responsável por compartilhar arquivos en-
tre os processos e usuários.
O gerenciador de sistemas de arquivos acaba desempenhando o 
papel mais visível para o usuário do sistema operacional, pois está 
sempre manipulando os arquivos, criando ou editando os seus docu-
mentos ou executando os aplicativos, que, para o computador, tam-
bém são arquivos.
Podemos definir um arquivo como sendo um conjunto de infor-
mações, dados ou instruções relacionados logicamente. As visões são 
distintas, o usuário enxerga diferentes tipos de arquivos; mas, para o 
sistema operacional, um arquivo é um conjunto de registros definido 
pelo sistema de arquivos.
O conteúdo desse arquivo vai influenciar a forma como ele será pro-
cessado, por exemplo:
a. um arquivo executável é composto de instruções em linguagem 
de máquina, que faz com que ele seja executado pelo sistema 
operacional;
b. um arquivo de dados é constituído por dados estruturados ou 
não, que são lidos pelo sistema operacional;
c. um arquivo de multimídia pode possuir imagem, áudio, som, 
vídeo etc., que será disponibilizado pelo sistema operacional para 
o usuário.
O sistema operacional pode armazenar os arquivos em diferentes 
dispositivos físicos, como: fitas magnéticas, discos magnéticos, discos 
ópticos, entre outros. Para que isso aconteça, o sistema operacional 
dever criar um isolamento do tipo de dispositivo físico utilizado, per-
mitindo que o sistema operacional consiga realizar a manipulação dos 
arquivos em diferentes dispositivos de armazenamento.
Para que possa ser identificado pelo sistema operacional, um ar-
quivo precisa de nome. Para isso, o sistema operacional possui algu-
Introdução aos sistemas operacionais 35
mas regras particulares a serem seguidas na definição do nome do 
arquivo, por exemplo: o tamanho do nome, os caracteres a serem usa-
dos, a distinção ou não de caracteres maiúsculos ou minúsculos, entre 
outras. A extensão é utilizada por alguns sistemas operacionais com 
parte do nome do arquivo; seu papel é identificar o tipo de conteúdo 
do arquivo. Para exemplificar, se pensarmos no sistema operacional 
Windows, quando visualizamos um arquivo com extensão .docx, sabe-
mos que ele pertence ao Word. Por outro lado, se vemos um arquivo 
com extensão .xlsx, sabemos que ele pertence ao Excel.
Os diretórios surgem como uma forma de organizar os arquivos 
(Figura 12), e são criados pelo gerenciador de sistemas de arquivo. 
Eles são uma estrutura de dados, no formato de árvore, que conterão 
elementos associados aos arquivos. Esses elementos vão possuir infor-
mações, como a localização física do arquivo, seus nomes, a forma de 
organização do diretório etc. Uma regra é válida para todos os sistemas 
operacionais: você não pode armazenar dois arquivos com o mesmo 
nome em um mesmo diretório.
Figura 12
Representação visual de um sistema de arquivos, com diretórios e arquivos
Quando o usuário abre um arquivo no seu computador, o ge-
renciador de sistemas de arquivo busca os seus dados na estrutu-
ra de diretórios e efetua o armazenamento da sua localização e do 
seu nome em uma tabela da memória principal do computador, a 
qual mantém uma listagem de todos os arquivos abertos, trazendo 
performance à operação de acesso a esses arquivos. Esses registros 
permanecerão lá, enquanto os arquivos estiverem sendo utilizados 
36 Sistemas Operacionais
e não tiverem sido fechados; quando isso ocorre, os seus registros 
na tabela também são liberados.
A forma mais simples de se implementar uma estrutura de dire-
tórios é conhecida como nível único, em que não existem subdiretó-
rios, apenas o diretório raiz, contendo todos os arquivos. Apesar de 
simples, esse modelo é muito limitado e não é recomendado quan-
do precisamos implementar segurança no acesso aos arquivos.
Para controlar a criação de arquivos, o sistema operacional preci-
sa realizar o gerenciamento do espaço livre, isto é, identificar quais 
são os blocos e setores em disco que estão disponíveis para a cria-
ção dos arquivos. O sistema consegue essa informação fazendo uma 
consulta à estrutura de dados em memória – uma tabela em que o 
sistema operacional consegue identificar os blocos livres que pode-
rão ser alocados pelo novo arquivo. Ao fazer isso, esse espaço é re-
movido da tabela para evitar que seja alocado por um outro arquivo. 
De maneira análoga, quando o usuário apaga um arquivo, os blocos 
em que ele estava armazenado são liberados e incluídos novamente 
na tabela de blocos livres.
Outra preocupação do gerenciador de sistemas de arquivos é o 
gerenciamento do espaço alocado por esses arquivos, pois, com o 
decorrer do tempo, os arquivos mudam e a necessidade de espaço 
de armazenamento também. A importância dessa atividade se dá 
por estarmos falando de uma operação que pode sofrer influência 
direta da ação dos usuários, em um recurso com limitação de tama-
nho, como ocorre, por exemplo, com o disco rígido.
Além disso, faz parte das atividades do gerenciadorde siste-
mas de arquivos permitir o compartilhamento desses arquivos 
entre usuários e processos, garantindo que somente usuários e 
processos devidamente autorizados tenham acesso aos arquivos 
compartilhados.
O sistema operacional implementa a proteção de acesso fazendo 
uso do controle de concessão de operações, isto é, leitura, gravação, 
execução e, em alguns momentos, exclusão. Os sistemas operacio-
nais Unix/Linux permitem a ampliação das concessões de direitos 
aos usuários que participam do mesmo grupo daquele que está con-
cedendo o direito ou, até mesmo, a outros usuários que não fazem 
parte do grupo do dono do arquivo.
Introdução aos sistemas operacionais 37
1.3.2 Objetivos do sistema operacional
De acordo com a evolução dos sistemas operacionais, os usuários 
passaram a considerar certas características como essenciais. Segundo 
Deitel, Deitel e Choffnes (2005), os objetivos a serem alcançados pelos 
sistemas operacionais são:
a. Eficiência: característica que mede a capacidade de um sistema 
operacional em oferecer o máximo de serviços a diferentes 
aplicações, no menor espaço de tempo.
b. Robustez: característica que permite ao sistema operacional ser 
tolerante a falhas e confiável; caso ocorra um erro de aplicação 
(de software ou hardware), o sistema operacional buscará 
minimizar a perda do trabalho realizado, tentando evitar danos 
ao hardware do computador.
c. Escalabilidade: característica que permite ao sistema operacional 
fazer uso de recursos à medida que eles vão sendo acrescentados 
ao computador, sendo muito útil quando falamos de sistemas 
multiprocessados.
d. Extensibilidade: essa característica garante que o sistema 
operacional se adapte bem ao uso de novas tecnologias, bem 
como que execute tarefas diferentes daquelas para as quais 
foi projetado. Dessa forma, a extensibilidade proporciona o 
aumento da flexibilidade do sistema operacional. Ao possibilitar 
que os usuários adaptem ou evitem o sistema operacional, os 
sistemas operacionais extensíveis possibilitam, em particular, 
que os usuários ajustem o comportamento do sistema para 
obterem um maior desempenho em casos específicos.
e. Portabilidade: a portabilidade garante que o sistema operacional 
opere em muitas configurações de hardware. A portabilidade de 
aplicações também é importante, pois o desenvolvimento das 
aplicações (software) custa caro; portanto, a mesma aplicação 
deve ser executada em uma variedade de configurações de 
hardware, reduzindo os custos de desenvolvimento.
f. Segurança: a segurança em um sistema operacional impede que 
os usuários e/ou softwares acessem os serviços ou recursos sem a 
devida autorização. Os mecanismos que implementam as políticas 
de segurança do sistema operacional são chamados de proteção.
38 Sistemas Operacionais
g. Interatividade: a interatividade permite que as aplicações 
(software) respondam, rapidamente, às solicitações dos usuários 
ou aos eventos do sistema operacional.
h. Usabilidade: a usabilidade concede ao sistema operacional o 
potencial de atender a uma base significativa de usuários. Esses 
sistemas operacionais, geralmente, apresentam uma interface 
gráfica (GUI) amigável, fácil de se utilizar. Sistemas operacionais, 
como Linux, Windows e MacOS, são caraterizados como 
utilizáveis, pois suportam muitas aplicações e fornecem uma 
interface-padrão para o usuário; isso não ocorre com sistemas 
operacionais acadêmicos ou experimentais, portanto, eles não 
são considerados utilizáveis.
1.4 Arquitetura de sistemas operacionais 
Vídeo As diferentes arquiteturas dos sistemas operacionais são resulta-
do da necessidade de os computadores atenderem a diversos serviços 
e interagirem com os mais variados recursos de hardware e software 
para a execução das suas atividades.
1.4.1 Arquitetura monolítica
Os primeiros sistemas operacionais, como OS/360, CP/M, MS-DOS 
e as versões inicias do Linux, faziam parte da arquitetura monolítica 
(Figura 13) – em que os componentes eram compilados em módulos 
separados e depois eram unidos (linkados) em um único programa 
executável, denominado núcleo (core) –, sendo, também, chamada de 
arquitetura de sistema operacional de núcleo monolítico. Os módulos do 
sistema operacional, os quais fazem uso desse tipo de arquitetura, eram 
carregados em memória e interagiam entre si por meio de funções.
Figura 13
 Arquitetura de 
sistema opera-
cional de núcleo 
monolítico
Aplicações
GM
E/S
EP
GR
CEP SA
Interface de chamada ao sistema
GM – EP – CEP – SA – E/S – GR - ...
GM= Gerenciador de memória
EP = Escalonador de processador
CEP = Comunicação entre processos
SA = Sistema de arquivos
E/S= Gerenciador de Entrada/Saída
GR = Gerenciador de rede
Espaço do usuário
Núcleo
...
Espaço do núcleo
Fonte: Deitel; Deitel; Choffnes, 2005, p. 20.
Introdução aos sistemas operacionais 39
A manutenção e a compreensão do código-fonte desse tipo de sis-
tema são complicadas, pois é difícil isolar a fonte de problemas e de 
outros erros. Além disso, como todo o código é executado com acesso 
irrestrito ao sistema, os sistemas de núcleo monolítico são particular-
mente suscetíveis a danos provocados por códigos sujeitos a erros ou 
mal-intencionados.
1.4.2 Arquitetura em camadas
Buscando atender à evolução e complexidade das atividades rea-
lizadas pelos sistemas operacionais, surgiu a arquitetura em cama-
das (Figura 14), na qual o sistema operacional é composto de níveis ou 
camadas que se comunicam entre si. As camadas inferiores prestam 
serviço às camadas de nível superior, fazendo uso de uma interface, o 
que oculta para a camada de cima a sua implementação.
O isolamento entre as camadas representa uma vantagem no uso 
desse tipo de arquitetura, garantindo segurança e proteção às camadas 
mais internas, onde está localizado o núcleo do sistema operacional. 
Porém, o desempenho do sistema é afetado negativamente pela troca 
de modo de acesso. Quando um serviço é solicitado para a camada do 
kernel, o sistema operacional precisará passar por várias camadas até 
chegar ao seu destino, realizando diversas trocas do modo de acesso du-
rante o trajeto, o que constitui uma desvantagem para essa arquitetura.
Aplicações do usuário
H
ardw
are
Gerenciamento de E/S
Interpretador de mensagem
Gerenciamento de memória
Alocação de processador e escalonamento de 
processo hardware
Camada 4 
Usuário
Espaço do usuário
Espaço do núcleo
Camada 3 
Camada 2 
Camada 1 
Camada 0 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 20.
Figura 14
Camadas do sistema 
operacional
40 Sistemas Operacionais
1.4.3 Arquitetura de micronúcleo (MicroKernel)
A arquitetura de micronúcleo (MicroKernel) busca tornar o núcleo 
do sistema operacional o menor e mais simples possível (Figura 15). 
Nessa arquitetura, os componentes do sistema operacional são dispo-
nibilizados como serviços. Cada serviço oferece um conjunto de fun-
ções, como: gerência de arquivos, gerência de processos, gerência de 
memória etc.
Quando uma aplicação do usuário solicita um serviço, realiza-se 
uma requisição ao processo responsável pelo serviço. A aplicação que 
solicita o serviço é chamada de cliente, e o processo que responde à 
solicitação é denominado servidor. O núcleo do sistema se limita a exe-
cutar a comunicação entre cliente e servidor. Portanto, temos um nú-
cleo muito mais simples.
Figura 15
Arquitetura de sistema operacional de micronúcleo
Espaço do usuário
Espaço do núcleo
Núcleo
...
Aplicações
Interface de chamada ao sistema
Gerenciamento de memória Sincronização
Sistema de arquivos Escalonador de processos Gerenciador de dispositivos
CEP
Fonte: Deitel; Deitel; Choffnes, 2005.
A arquitetura de micronúcleo exibe um alto grau de modulari-
dade, o que a torna extensível, portável e escalável. Com micronú-
cleos, os processos executam suas funções em modo usuário, ou 
seja, não têm acesso a instruções privilegiadas e não têm acesso 
aos componentes do sistema. Apenas o núcleo executa em modo 
kernel. Isso garante que, casoocorra algum erro em um processo, 
o sistema não ficará completamente comprometido, aumentando 
a sua disponibilidade.
Introdução aos sistemas operacionais 41
São exemplos de sistemas operacionais, que fazem uso desse tipo 
de arquitetura: o GNU Hurd, desenvolvido pelo Projeto GNU, Minix e 
QNX e utilizado em sistemas embarcados; e o L4, desenvolvido por Jo-
chen Liedtke, cientista alemão da computação, que atuou na pesquisa 
de microkernels.
1.4.4 Sistema Operacional de Redes (SOR)
Para complementar as funções básicas de um sistema operacional, 
permitindo que elas possam ser utilizadas em recursos compartilhados 
em rede, o sistema operacional faz uso do Sistema Operacional de 
Redes (SOR) (Figura 16). Isso ocorre por meio da interação do Sistema 
Operacional Local (SOL) com o SOR, que permite a utilização de recur-
sos do computador local e os recursos da rede. De maneira simples, o 
SOL faz uma requisição para a rede, e essa requisição é recebida pelo 
SOR, o qual a encaminha para um programa de comunicação, que vai 
buscar na rede quem poderá atendê-la.
O modelo utilizado pelo SOR é o cliente/servidor, em que o compu-
tador local atua como cliente, solicitando um serviço para a rede, na 
qual um outro computador ou dispositivo atuará como servidor, aten-
dendo à demanda solicitada.
Figura 16
Modelo de sistema operacional de rede cliente/servidor
Disco
Processador
Servidor Servidor
Cliente
Cliente Cliente
Cliente
Cliente
Servidor
Hub
Fonte: Deitel; Deitel; Choffnes, 2005.
42 Sistemas Operacionais
Entre os tipos de arquitetura SOR, podemos destacar: Peer-to-Peer 
(P2P), na qual as máquinas interligadas atuam como clientes e servido-
ras; cliente/servidor com servidor dedicado, em que há uma máquina 
que atua como servidora, mas executa atividades locais; e cliente/ser-
vidor com servidor não dedicado, na qual a máquina servidora atende 
às requisições dos clientes.
Os servidores podem ter diferentes atuações, como: servidores de 
arquivos, nos quais são armazenados arquivos de dados ou programas 
a serem compartilhados entre os usuários de uma rede; servidores de 
bancos de dados, em que são armazenados dados que serão cadas-
trados ou consultados pelos usuários da rede, fazendo uso de uma in-
terface ou via web; servidores de impressão, utilizados para gerenciar 
as impressoras conectadas na rede, facilitando o roteamento dos docu-
mentos a serem impressos ou controlando as cotas de impressão por 
usuário em um período de tempo; servidores de comunicação, res-
ponsáveis pela distribuição da informação na rede, como correio eletrô-
nico (e-mail), web, FTP (File Transfer Protocol) etc., podendo, também, 
ser utilizados para gerenciar o acesso remoto dos usuários da rede; 
ou servidores de gerenciamento, que atuam no controle de acesso 
dos usuários, no controle de tráfego da rede e, em alguns casos, atuam 
como firewall, isto é, um dispositivo de hardware ou software que aplica 
políticas de segurança a um determinado ponto da rede.
1.4.5 Sistema operacional distribuído
Ampliando o conceito de sistema operacional de rede, surge-se o 
conceito de sistemas distribuídos, em que encontramos um conjunto de 
computadores ligados a uma rede e independentes entre si, os quais 
atuam de modo que dão ao usuário a impressão de que são um siste-
ma único e integrado.
As tarefas nos sistemas distribuídos são divididas entre os compu-
tadores que os compõem, sem a interferência do usuário; tudo ocor-
re de maneira transparente. Isso os diferencia do sistema operacional 
de rede, em que as decisões de processamento e armazenamento são 
realizadas pelo usuário.
São consideradas características do sistema distribuído: a capaci-
dade de realizar tarefas simultaneamente (concorrência); a capacidade 
Introdução aos sistemas operacionais 43
de adicionar novos computadores, aumentando o processamento ou 
armazenamento (escalabilidade); o uso de mensagens para trocar in-
formações entre os programas e as estações de trabalho; e, por fim, 
caso uma estação de trabalho pare de funcionar, não haverá compro-
metimento do serviço, pois outra estação irá assumir as funções de-
sempenhadas pela máquina que parou de funcionar.
Com base nessas características, podemos concluir que os objetivos 
finais da utilização de um sistema operacional distribuído são o acesso 
aos recursos, a transparência, a abertura e a escalabilidade.
CONSIDERAÇÕES FINAIS
Iniciamos este capítulo mostrando que a criação e o desenvolvimen-
to dos sistemas operacionais estão intimamente ligados à evolução do 
computador, do desenvolvimento de software e da crescente demanda 
de performance e segurança. Os diferentes tipos de aplicações fizeram 
com que os sistemas operacionais tivessem de se adaptar a diferentes 
ambientes, atendendo a requisições específicas de hardware e software.
Vimos, também, que o núcleo (kernel) do sistema operacional faz uso 
de componentes (subsistemas) para realizar as tarefas mais importantes; 
tarefas essas que cumprem as características necessárias de um sistema 
operacional. Por fim, encerramos o capítulo apresentando as possíveis 
arquiteturas que um sistema operacional pode usar, bem como os exem-
plos de sistemas operacionais que as utilizam.
ATIVIDADES
1. Por que os computadores da primeira fase não usavam sistemas 
operacionais?
2. Quais tecnologias foram responsáveis pela segunda fase de computadores? 
Quais foram os ganhos obtidos com elas?
3. Quais são os diferenciais da série 360 da IBM?
4. Qual conceito foi incorporado aos sistemas operacionais TSS, Multics e 
CP/CMS? Qual foi o benefício que esse conceito trouxe?
5. O que é um sistema crítico em negócios?
computadores de primeira geração (1945-1959) usavam válvulas eletrônicas, quilômetros de fios, eram lentos, enormes e esquentavam muito.Logo, eles utilizavam linguag3m de máquina para executar os programas.
Tecnologias foram o uso de transistor e fita magnética na segunda geração. A substituição das válvulas da primeira fase pelo transistor trouxe velocidade e confiabilidade ao processamento. Já a criação das memórias magnéticas garantiu que os dados fossem acessados mais rapidamente, aumentou a capacidade de armazenamento e permitiu que o tamanho dos computadores fosse reduzido.
Buscando solucionar o problema de performance e de armazenamento, a International Business Machine (IBM) lançou a série 360, composta de máquinas compatíveis entre si. A série começava com o 1401, um computador menos potente, chegando até o IBM 7094, o computador mais potente da série. diferença entre os computadores estava no preço e na performance, em virtude da quantidade de memória, da velocidade do processador, do número de dispositivos de E/S etc. A compatibilidade dos programas a serem executados nos computadores dessa série era garantida por uma arquitetura comum entre eles e um mesmo conjunto de instruções básicas. Com a série 360, a IBM conseguia unir, em um mesmo conjunto de computadores, a utilização tanto para uso científico como para uso comercial.
Os sistemas operacionais TSS, Multics e CP/CMS incorporavam o conceito de memória virtual, em que os programas conseguiam endereçar mais localizações de memória do que as providas pela memória principal, também chamada de memória real ou física.
Um sistema é considerado um sistema crítico em negócios quando falha e pode resultar em perdas econômicas significativas para a empresa que o utiliza
44 Sistemas Operacionais
REFERÊNCIAS
DEITEL, H. M.; DEITEL, P.; CHOFFNES, D. Sistemas operacionais. 3. ed. Trad. de Arlete Simille 
Marques. São Paulo: Pearson, 2005.
LI, Q. Real-time Concepts for Embedded Systems. 1. ed. Routledge, 2003.
MACHADO, F. B.; MAIA, L. P. Arquitetura de Sistemas Operacionais. 5. ed. São Paulo: LTC, 
2013.
NOVATO, D. Sistemas Operacionais - O que é escalonamento de processos? Oficina da 
net, 22 maio 2014. Disponível em: https://www.oficinadanet.com.br/post/12781-sistemas-
operacionais-o-que-e-escalonamento-de-processos. Acesso em: 26 maio 2020.PENDRIVE x HD x Nuvem: Como usar a hierarquia de memória para gerenciar seus 
arquivos. Por que não um “blog”, 2015. Disponível em: http://stonesjunior.blogspot.
com/2015/12/hierarquia-de-memoria-e-suas-aplicacoes.html. Acesso em: 26 maio 2020.
STALLINGS, W. Arquitetura e organização de computadores. 10. ed. São Paulo: Pearson 
Prentice-Hall, 2017.
Interação do sistema operacional com hardware e software 45
2
Interação do sistema 
operacional com 
hardware e software
Além de cumprir suas tarefas, o sistema operacional precisa 
se relacionar com várias outras partes. Ele atende às solicita-
ções do usuário recebendo e devolvendo dados. Ele converte 
tais solicitações em tarefas, que serão executadas pelo compu-
tador, respeitando os mais diferentes projetos de arquitetura. 
Ademais, o sistema operacional precisa estender esse relacio-
namento a uma infinidade de dispositivos e de diversos propósi-
tos, os quais são acoplados ao computador e auxiliam o usuário 
na realização das suas operações.
Neste capítulo, abordaremos a relação dos sistemas opera-
cionais com os arquivos e diretórios, que são as estruturas mais 
utilizadas pelos usuários no manuseio do computador; a evolu-
ção da programação, a qual passou de linguagem de máquina 
para as linguagens de alto nível e começou a fazer uso de com-
piladores e interpretadores para aumentar a produtividade dos 
desenvolvedores; o uso de firmwares e middlewares, facilitando 
a comunicação dos dispositivos e programas com o sistema ope-
racional e o computador. Estudaremos, também, os hardwares, 
as suas diferentes arquiteturas e como eles interagem entre si 
e com o sistema operacional; o processador, o seu projeto, o 
desempenho e o uso de multiprocessadores; a memória, a sua 
hierarquia e as diferenças de custo e desempenho; o uso de 
discos e fitas, como forma de armazenamento de baixo custo; 
os barramentos, responsáveis pela comunicação entre os com-
ponentes do computador; e, finalmente, os dispositivos de E/S, 
que são acoplados ao computador, fazendo com que o sistema 
operacional os reconheça e se comunique com eles.
46 Sistemas Operacionais
2.1 Arquivos e diretórios 
Vídeo Segundo Tanenbaum (2015), arquivo é um mecanismo de abstração 
que oferece meios de armazenar informações no disco e de lê-las de-
pois. Essa abstração permite ao sistema operacional ocultar do usuário 
onde realmente essa informação está armazenada, bem como a forma 
com que esse processo ocorre.
Analisando os diferentes sistemas operacionais, as características 
mais comuns, quanto à nomeação dos arquivos, são:
O tamanho 
do nome
O uso de 
caracteres 
especiais
A distinção de 
caracteres em 
letra maiúscula
O uso de 
extensão
O valor da 
extensão
Alguns sistemas operacionais aceitam arquivos com nomes de até 
8 caracteres e outros suportam até 255 caracteres.
Alguns sistemas operacionais suportam o uso de caracteres 
especiais, outros não.
Alguns sistemas operacionais, como o UNIX, suportam a distinção 
em letras maiúsculas, outros não, como o MS-DOS.
Para muitos sistemas operacionais o uso de extensão é opcional; o 
MS-DOS permitia arquivos com nomes de um a oito caracteres e a 
extensão com um a três caracteres; no UNIX, a extensão é opcional, 
seu tamanho é definido pelo usuário e um arquivo pode ter mais de 
uma extensão, como o arquivo arquivohtml.tar.gz, o qual passou por 
compactação dupla, a primeira pelo compactador TAR e a segunda pelo 
compactador GZIP.
Para alguns sistemas operacionais, a extensão do arquivo possui valor, por 
exemplo, um arquivo.txt, para o Windows, será reconhecido como um arquivo 
de texto e será aberto por um aplicativo vinculado a essa extensão; para o 
UNIX, como a extensão pode ser atribuída livremente pelo usuário, não existe 
essa relação de extensão com o conteúdo do arquivo nem com aplicativo 
responsável por executá-lo ou abri-lo.
Sistemas 
operacionaisPu
re
 Im
ag
in
at
io
n/
Sh
ut
te
rs
to
ck
Interação do sistema operacional com hardware e software 47
A maneira mais simples de se armazenar um arquivo em um sis-
tema operacional é considerá-lo uma sequência de bytes, na qual 
o sistema operacional não se preocupa com o conteúdo do arquivo, 
deixando a responsabilidade da sua identificação com o usuário. Essa 
estratégia é utilizada por sistemas operacionais como UNIX e Windows. 
Uma outra abordagem é transformar o arquivo em uma sequência de 
registros de tamanho fixo, assim, quando uma alteração ocorre, o 
sistema operacional identifica qual registro foi alterado e o reescreve. 
Essa forma de armazenamento era utilizada por sistemas operacionais 
no tempo das leitoras de cartão perfurado. Por fim, um arquivo pode 
ser armazenado no formato de uma árvore de registros, que é or-
denada por campos-chave, contidos dentro de cada registro. Essa for-
ma de armazenamento é utilizada em computadores de grande porte, 
para processamento de dados comerciais. Os três modos de armaze-
namento mencionados são apresentados na Figura 1.
Figura 1
Três tipos de arquivos: sequência de bytes (a), sequência de registros (b), árvore (c)
Galinha OvelhaÍbis
Gato Vaca Cabra Leão Coruja Pônei Rato MinhocaCachorro
Formiga Raposa Porco
1 Byte
(a) (b) (c)
1 Registro
Fonte: Tanenbaum, 2015, p. 160.
Os sistemas operacionais UNIX e Windows suportam o arma-
zenamento de arquivos regulares, os quais contêm informações 
do usuário, e de diretórios, arquivos que mantém a estrutura do 
sistema de arquivos. O UNIX também suporta arquivos especiais 
de caracteres, utilizados para se comunicar com dispositivos de 
E/S; e os arquivos especiais de blocos, utilizados para se comuni-
car com os discos. De acordo com Tanenbaum (2015), cabe a todo 
sistema operacional reconhecer pelo menos um tipo de arquivo, os 
seus próprios arquivos executáveis.
48 Sistemas Operacionais
Quando analisamos as diferentes possibilidades de acesso aos 
arquivos, percebemos que os sistemas operacionais começaram fa-
zendo uso do acesso sequencial, no qual se efetuava a leitura dos 
bytes ou registros, do início ao fim, sem realizar saltos durante a 
leitura. Esse tipo de leitura fica clara quando fazemos uso da fita 
magnética como dispositivo de E/S. Com o surgimento do armaze-
namento em disco, os sistemas operacionais começaram a fazer 
acesso aleatório aos arquivos, assim, não havia mais a necessidade 
de se realizar o acesso sequencial à informação. Isso trouxe ganhos 
muito grandes para as aplicações, por exemplo, ao procurar dados 
de um funcionário de uma empresa, não havia mais a necessidade 
de percorrer todos os registros até encontrá-lo.
Para ter um melhor controle, os sistemas de arquivos fazem 
uso, em geral, de diretórios ou pastas, que em muitos sistemas 
também são arquivos (TANENBAUM, 2015).
A forma mais simples de utilização de diretório é quando o sis-
tema operacional faz uso de somente um para armazenar todos 
os seus arquivos, sendo este chamado de diretório-raiz, conforme 
demostrado na Figura 2. Isso era possível, pois os computadores 
pessoais antigos não eram multiusuários, sendo que a utilização 
do diretório-raiz (isto é, diretório único), armazenando todos os ar-
quivos de vários usuários, resultaria em um grande esforço para 
controle de acesso dos arquivos e aplicação de regras de seguran-
ça. Mesmo diante dessa limitação, não se impediu que os computa-
dores multiusuário – como o CDC 6600, primeiro supercomputador 
do mundo, desenvolvido pela Control Data Corporation, em 1965 
– fizessem uso dessa abordagem (Figura 3). Essa técnica ainda é 
utilizada em sistemas embarcados mais simples, como em: telefo-
nes, câmeras digitais, MP3 players etc.
Figura 2
Esquema de representação de diretório-raiz, contendo cinco arquivos
A B C D E
Diretório-raiz
Fonte: Elaborada pelo autor.
Byte (binary term): uma 
unidade computacional que é 
constituída por oito bits.
Glossário
Interação do sistema operacional com hardware e software 49
Figura 3
CDC 6600
Ji
tz
e 
Co
up
er
us
/W
ik
im
ed
ia
 C
omm
on
s
Primeiro supercomputador do mundo, que fazia uso de diretório-raiz.
Com a evolução do conceito multiusuário, somado ao volume cres-
cente de arquivos gerados por cada usuário, o modelo de diretório-raiz 
não atendia às demandas necessárias. Para solucionar esse problema, 
foi criado o modelo de árvore de diretórios (Figura 4), em que os usuá-
rios têm a liberdade de criarem tantos diretórios quanto necessário, 
para organizarem os seus arquivos.
Figura 4
Sistema hierárquico de diretórios
A B
B
C
CCC C
Diretório-raiz
Subdiretórios de usuário
Arquivo
de
usuário
A B
B B
C
C
C C
Diretório 
de 
usuário
Fonte: Tanenbaum, 2015, p. 167.
50 Sistemas Operacionais
O sistema operacional armazena o sistema de arquivos no disco rí-
gido, que pode ter uma ou mais partições, isto é, divisões no espaço 
do disco. Cada uma das partições de um disco rígido possui o seu pró-
prio sistema de arquivos. Quando o computador é inicializado, ele lê o 
setor 0 do disco rígido, chamado Master Boot Record (MBR, traduzido 
como Registro Mestre de Inicialização), o qual é responsável por ar-
mazenar a tabela de partição, uma tabela que contém os endereços 
iniciais e finais das partições do disco rígido.
Na sua inicialização, o computador faz uso da BIOS (Basic Input/Output 
System – Sistema Integrado de Entrada e Saída), que lê e executa o MBR. 
Ao ser executado, o MBR procura ler o primeiro bloco da partição ativa, 
chamado de bloco de inicialização, em que está armazenado o sistema 
operacional. Ao encontrá-lo, o MBR o executa. Além do bloco de iniciali-
zação, o sistema de arquivos possui alguns outros componentes, como 
o superbloco, que armazena os principais parâmetros do sistema de 
arquivos e é lido pela memória, quando o computador é inicializado. 
O sistema operacional pode fazer uso de diferentes estratégias para 
armazenar os arquivos em disco, entre elas, podemos citar:
a. Alocação contígua: o sistema operacional armazena os 
arquivos um ao lado do outro. Como vantagens desse método 
de alocação, temos a simplicidade de implementação – pois 
apenas duas informações precisam ser armazenadas pelo 
sistema operacional (o endereço do primeiro bloco do arquivo 
e o número total de blocos que ele possui) – e a velocidade de 
leitura do arquivo, que pode ser feita em apenas uma operação. 
Já entre as desvantagens temos a fragmentação – isto é, o espaço 
em disco deixado quando os arquivos começam a ser apagados – 
e a dificuldade em se aumentar o tamanho de um arquivo.
b. Alocação por lista encadeada: o sistema operacional armazena 
os arquivos em uma lista encadeada de blocos de disco, em que 
a primeira palavra serve de ponteiro para o próximo bloco e as 
demais são utilizadas para armazenar os dados. Essa estratégia 
não sofre efeito da fragmentação, porém a sua leitura é muito 
lenta, pois todos os blocos precisam ser lidos para acessar 
todos os dados de um arquivo. Podemos citar como exemplo de 
sistema operacional que fez uso dessa estratégia o Pick System, 
desenvolvido pela MicroData Corporation.
Interação do sistema operacional com hardware e software 51
c. Alocação por lista encadeada usando uma tabela na memória: 
uma inovação da alocação por lista encadeada, em que os 
ponteiros dos blocos são substituídos por uma tabela na memória 
principal, conhecida como File Allocation Table (FAT), traduzida 
como Tabela de Alocação de Arquivos. Como vantagens desse 
método, o bloco fica livre para armazenar os dados, pois não 
precisa mais alocar os ponteiros, e o acesso randômico aos dados 
fica facilitado pelo uso da memória. A grande desvantagem é a 
necessidade dessa informação estar permanentemente fazendo 
uso da memória principal, a qual é considerada uma forma de 
armazenamento cara para o sistema operacional.
d. I-nodes (Index-node – nó-índice): o sistema operacional vincula 
cada um dos arquivos a uma estrutura de dados chamada 
I-nodes, a qual armazena os atributos do arquivo, bem como 
os endereços dos seus blocos no disco rígido. Essa estratégia 
possui como desvantagem a dificuldade em se definir qual é o 
tamanho ideal do índice a ser utilizado, já que, se utilizarmos um 
valor pequeno, arquivos grandes não poderão ser armazenados, 
e se utilizarmos um valor muito grande, podemos nunca 
alcançar esse valor, isto é, não ter arquivos tão grandes quanto o 
máximo previsto. Essa dificuldade se baseia no fato de o sistema 
operacional não conseguir prever o tamanho de um arquivo a ser 
gerado/utilizado por um usuário. Essa estratégia é utilizada pelo 
sistema operacional UNIX.
Em 1977, a Microsoft criou a sua primeira versão de FAT no sis-
tema operacional MS-DOS, e permaneceu nessa versão até o lan-
çamento do Windows 95. As evoluções vieram com a FAT12, a qual 
não foi utilizada comercialmente, seguida pela FAT16, que utilizava 
16 bits para o endereçamento de dados, podendo trabalhar com até 
65.536 clusters 1 (216), suportando discos ou partições com até 2GB. 
Em 1996, a Microsoft lançou a FAT32, que utilizava 32 bits para o 
endereçamento de dados, suportando discos ou partições com até 
2TB, sendo utilizada no sistema de arquivos do Windows 95 OSR2 e 
do Windows 98. A Microsoft também lançou uma família de sistemas 
operacionais para servidores corporativos, chamada Windows NT. Em 
1993, o Windows NT 3.1 apresentou um novo sistema de arquivos, 
chamado NT File System (NTFS), o qual acabou se tornando o padrão 
de todos os sistemas operacionais desenvolvidos pela Microsoft, a 
Um cluster é uma unidade de 
alocação de espaço em disco uti-
lizada por arquivos e diretórios.
1
52 Sistemas Operacionais
partir do Windows 2000. O NTFS apresentou várias melhorias ao ser 
comparado com a FAT, entre elas: o aumento para o volume total 
suportado por discos e partições para 256TB; a utilização de clusters 
de 512 bytes; um melhor desempenho; a possibilidade de aplicar po-
líticas de segurança; e a recuperação de falhas por meio do journal, 
isto é, um arquivo de log, que grava os eventos em uma área especí-
fica do disco rígido, para depois fazer a gravação efetiva.
A maioria das distribuições Linux faz uso do sistema de arquivos 
Fourth Extended Filesystem (ext4) – traduzido como Quarto Sistema 
de Arquivos Estendido –, suportando discos e partições com até 1 
exabyte (EB) – que equivale a 1.000.000.000.000.000.000 bytes – e 
arquivos com tamanho de até 16TB.
A implementação em diretórios segue a estratégia utilizada para 
armazenar os arquivos, pois antes de abrir e executar um arquivo, o 
sistema operacional precisa localizar qual caminho ele utiliza.
2.2 Interpretadores e compiladores 
Vídeo Cada computador possui a sua própria linguagem, chamada lin-
guagem de máquina, que é composta de sequências de zero e um. 
Essa linguagem permite ao computador a realização de suas tare-
fas, sendo definida pelo seu projeto de arquitetura. Utilizada pelos 
programadores nos primeiros computadores, essa abordagem se 
revelou lenta e passível de erros de acordo com a utilização dos com-
putadores. Como alternativa, os programadores começaram a fazer 
uso de abreviaturas da língua inglesa (load, add, store etc.) para re-
presentar as operações básicas do computador. Isso originou as lin-
guagens de montagem, que faziam usos de programas montadores 
(assemblers) para converter o código-fonte escrito em linguagem de 
montagem para a linguagem de máquina, a qual seria reconhecida 
pelo computador. Embora seja muito mais simples de se compreen-
der e rápida para se programar do que a linguagem de máquina, a 
linguagem de montagem fazia uso de muitas instruções para a rea-
lização de uma única tarefa. Em virtude dessa deficiência, foram de-
senvolvidas as linguagens de alto nível, que executam tarefas com 
menos instruções. Elas fazem uso de programas, chamados compi-
ladores, para converter o código-fonte para linguagem de máquina. 
Como exemplos de linguagens de alto nível, podemos citar:
Para compreender um 
pouco mais sobre o 
motivo da existência dos 
arquivose dos diretórios 
e como o sistema ope-
racional interage com 
eles, leia o livro Sistemas 
operacionais: projeto e 
implementação.
TANENBAUM, A. S.; WOODHULL, A. S. 
3. ed. São Paulo: Bookman, 2008.
Livro
Interação do sistema operacional com hardware e software 53
a. FORTRAN – desenvolvida pela IBM na década de 1950 (Figura 5), 
com propósito científico e de engenharia, é considerada a primeira 
linguagem de programação multiplataforma, isto é, utilizada em 
diferentes arquiteturas. Sendo ainda utilizada em mainframes 2 
na atualidade.
Figura 5
Código FORTRAN em um cartão perfurado
Ar
no
ld
 R
ei
nh
ol
d/
W
ik
im
ed
ia
 C
om
m
on
s
b. Common Business Oriented Language (COBOL) – traduzida como 
Linguagem Comum Orientada para Negócios, foi desenvolvida 
pelo Conference on Data Systems Languages (CODASYL), em 
1959, com propósito comercial, e ainda é a mais utilizada em 
mainframes na atualidade.
c. C – desenvolvida por Dennis Ritchie, pesquisador da Bell 
Laboratories, no início da década de 1970. A linguagem C ganhou 
destaque ao ser utilizada no desenvolvimento do sistema 
operacional UNIX.
d. C++ – desenvolvida por Bjarne Stroustrup, também pesquisador 
da Bell Laboratories, no início da década de 1980. A linguagem 
C++ é uma extensão da linguagem C voltada para a Programação 
Orientada a Objeto (POO). Segundo Deitel, Deitel e Choffnes 
(2005), objetos são componentes de software reutilizáveis que 
modelam itens do mundo real.
e. Java – desenvolvida por James Gosling, pesquisador da Sun 
MicroSystems, em 1995, com propósito de ser utilizada em 
aplicações baixadas pela web e/ou executadas nos navegadores 
(browsers). Java é uma linguagem orientada a objeto. O sistema 
operacional Android, desenvolvido pela Google, utilizou a 
linguagem Java no seu desenvolvimento.
Mainframes são computadores 
usados principalmente por 
grandes organizações para apli-
cações críticas e processamento 
de dados massivos, como: 
estatísticas da indústria e do 
consumidor, planejamento de 
recursos empresariais e proces-
samento de transações. Eles são 
maiores e têm mais poder de 
processamento do que algumas 
outras classes de computadores, 
como: minicomputadores, 
servidores, estações de trabalho 
e computadores pessoais.
2
54 Sistemas Operacionais
f. C# – desenvolvida pela Microsoft, em 2000, com o propósito de 
ser a linguagem principal da plataforma de desenvolvimento, 
chamada .NET. A C# é uma linguagem orientada a objeto, que 
une conceitos de outras linguagens, como: C, C++ e Java.
Enquanto os compiladores convertem código-fonte escrito em 
uma linguagem de alto nível para a linguagem de máquina, os in-
terpretadores executam o código-fonte, ou uma versão converti-
da para a linguagem de baixo nível, isto é, para a linguagem mais 
próxima da linguagem de máquina. Cabe ao interpretador conver-
ter as solicitações recebidas para linguagem de máquina. Apesar 
dessa vantagem, a necessidade de leitura, interpretação e execu-
ção por parte dos interpretadores torna a sua execução mais lenta 
do que a dos programas compilados, que já estão em linguagem 
de máquina.
2.3 Firmware e middleware 
Vídeo Segundo Deitel, Deitel e Choffnes (2005), firmwares são instruções 
executáveis armazenadas em memória não volátil (que não se perde 
quando o computador é desligado), voltadas, em grande parte, para 
operações de leitura. O firmware é desenvolvido por meio de micro-
programação, ou seja, uma camada desenvolvida em microcódigo, que 
inclui instruções em linguagem de máquina, as quais são utilizadas 
pelo hardware. Atualmente, o microcódigo é escrito na linguagem C e 
compilado em linguagem de máquina, para ser reconhecido pelo chip 
que vai armazená-lo.
A utilização do firmware permite que os fabricantes de disposi-
tivos utilizem chips programáveis, de uso geral, em vez de utilizarem 
hardware de uso personalizado. Isso resulta em economia de custos, 
além da facilidade de inovação e implantação, pois se torna mais fácil 
adicionar uma funcionalidade por meio de uma alteração do firmware, 
do que com a substituição do chip.
O conceito de microprogramação foi criado em 1951, por Maurice 
Wilkes, professor emérito da Universidade de Cambridge, que partici-
pou da construção do computador Electronic Delay Storage Automatic 
Calculator (EDSAC) – traduzido como Calculadora Automática de Arma-
zenamento de Atraso Eletrônico (Figura 6).
https://en.wikipedia.org/wiki/Electronic_delay_storage_automatic_calculator
https://en.wikipedia.org/wiki/Electronic_delay_storage_automatic_calculator
Interação do sistema operacional com hardware e software 55
Figura 6
Computador EDSAC em junho de 1948
Th
or
pe
/W
ik
im
ed
ia
 C
om
m
on
s
Porém, somente em 1964, com o lançamento do System/360, 
utilizado pela IBM nos computadores da série 360, é que a micro-
programação passou a ser utilizada amplamente, atingido o seu 
ápice no sistema operacional VAX, desenvolvido pela Digital Equip-
ment Corporation (DEC), na metade dos anos 1970. Atualmente, a 
microprogramação é utilizada em vários aparelhos, como: controle 
remoto da TV, discos rígidos, players de blu-ray, câmeras digitais, 
teclados, webcams, fornos micro-ondas etc.
Segundo Deitel, Deitel e Choffnes (2005), o middleware permite 
que uma aplicação seja executada em um computador e se comuni-
que com uma outra, executada em um outro computador, quando 
ambos fazem parte de um sistema distribuído. Isso é importante, 
pois os sistemas distribuídos, geralmente, são compostos de com-
putadores que fazem uso de sistemas operacionais, hardware, ar-
quitetura e protocolos de rede diferentes. O middleware também 
permite a execução de aplicações em ambientes de computação 
heterogêneos, desde que estes façam uso de um middleware co-
mum entre eles.
O middleware vem retirar um peso dos ombros dos desenvol-
vedores, pois não seria mais necessário que eles adicionassem 
https://en.wikipedia.org/wiki/Digital_Equipment_Corporation
https://en.wikipedia.org/wiki/Digital_Equipment_Corporation
56 Sistemas Operacionais
protocolos de comunicação aos seus aplicativos, ficando essa 
responsabilidade por conta do middleware. Isso se dá porque o 
middleware faz uso de uma Application Programming Interface (API) 
– Interface de Programação de Aplicações –, isto é, um conjunto 
de rotinas e padrões definidos por um software, o qual permite 
que um aplicativo utilize os seus serviços sem a necessidade de 
se aprofundar na forma com que ele foi desenvolvido (Figura 7). 
Podemos citar como exemplos de APIs: Portable Operating System 
Interface (POSIX), utilizada nos sistemas baseados no UNIX; e a API 
do Windows, utilizada como padrão para o desenvolvimento de 
aplicações que serão executadas no sistema operacional Windows, 
da Microsoft.
Figura 7
Interface de Programação da Aplicação (API)
Espaço do usuário
Espaço do núcleo
Memória Disco Rede
API
Aplicação
 Interface de chamada ao sistema
Fonte: DeiteL; Deitel; Choffnes, 2005, p. 51.
Podemos citar como exemplos de middleware: a Open Database 
Connectivity (ODBC) – Conectividade Aberta para Bancos de Dados 
–, desenvolvida pela Microsoft e Simba Technologies, a qual é uma 
API que permite às aplicações acessar o conteúdo dos bancos de 
dados; a Common Object Request Broker Architecture (CORBA) – Arqui-
tetura de Broker de Solicitação do Objeto Comum –, um middleware 
desenvolvido pelo Object Management Group (OMG), que consiste 
em um conjunto de protocolos e implementações que possibilitam 
e simplificam a troca de informações entre os sistemas distribuí-
dos heterogêneos; e a Open Graphics Library (OpenGL) – Bibliote-
ca de Gráficos Aberta –, um middleware desenvolvido pela Silicon 
Graphics, Inc. (SGI) para a renderização de vetores gráficos 2D e 
https://pt.wikipedia.org/wiki/Object_Management_Group
Interação do sistema operacional com hardware e software 57
3D. Sua API é utilizada na interação com a Graphics Proces-
sing Unit (GPU) – Unidade Gráfica de Processamento – para 
obter umarenderização acelerada por meio do hardware.
Os sistemas operacionais e o middleware têm muito em 
comum: são softwares utilizados para oferecer suporte a 
outros softwares, como os aplicativos, que o usuário execu-
ta; além disso, fornecem um leque semelhante de serviços, 
centrado na interação controlada. Como um sistema opera-
cional, o middleware pode impor algumas regras, projeta-
das para impedir que as suas operações interfiram entre si 
(Figura 8).
O middleware fornece os serviços por meio de sua API, fa-
zendo uso dos recursos suportados pelo sistema operacional 
que o hospeda. Por exemplo, o usuário solicita ao middleware 
a atualização de tabelas de um banco de dados, para execu-
tar essa tarefa, o middleware faz uso da capacidade do sistema 
operacional de ler e gravar os arquivos desse banco de dados.
Aplicação
Middleware
Sistema Operacional
Figura 8
Posição do middleware em 
relação às aplicações e ao 
sistema operacional
Fonte: Elaborada pelo autor.
2.4 Processadores 
Vídeo Por processador compreendemos um componente de hardware 
que executa linguagem de máquina (assembly) e que pode ser encon-
trado em vários formatos dentro da máquina. Podendo se apresentar 
como uma Central Processing Unit (CPU) – Unidade Central de Processa-
mento –, que executará as instruções de um programa; ou um proces-
sador gráfico ou de sinais digitais (Digital Signal Processor – DSP), que 
executará instruções específicas.
O sistema operacional fornece mecanismos de proteção ao pro-
cessador, evitando que os processos tenham acesso a instruções 
privilegiadas ou em memória. Os sistemas operacionais, em geral, 
dispõem de diferentes modos de execução: o modo usuário (esta-
do usuário ou estado-problema), em que o usuário poderá executar 
apenas um subconjunto de instruções, impedindo-o de acessar as 
informações de outro usuário ou mesmo de causar dano ao sistema 
operacional; e o modo núcleo (estado supervisor), no qual o pro-
cessador pode acessar instruções privilegiadas e recursos, em nome 
dos processos.
58 Sistemas Operacionais
2.4.1. Desempenho de processador
Os primeiros computadores não faziam uso de sistemas opera-
cionais, pois tais sistemas foram criados posteriormente. Portanto, o 
hardware ocupava lugar de destaque e era a prioridade nas pesquisas 
realizadas, fazendo com que seu custo fosse elevado. Com o passar do 
tempo, o software foi ocupando um espaço maior e aumentando a sua 
complexidade, fazendo com que o preço do hardware se tornasse mais 
acessível. Como o usuário interage com o software e este é responsável 
pela interação com o hardware, pois acaba ocultando as atividades que 
são realizadas pela máquina, dificultando a real percepção de desem-
penho do ponto de vista mecânico, cria a necessidade de softwares 
indicadores de desempenho para registrar e exibir valores mais confiá-
veis para o usuário.
O desempenho do sistema operacional está fortemente vinculado 
ao desempenho do processador. Segundo Deitel, Deitel e Choffnes 
(2005), conceitualmente, um processador pode ser dividido em um 
conjunto de instruções, o qual é o conjunto de instruções de máquina 
que ele pode executar, e sua implementação, que é o hardware.
Os projetistas de processadores fazem uso de um padrão conheci-
do como Instruction Set Architecture (ISA) – Arquitetura do Conjunto de 
Instruções –, no qual é feita a descrição do processador, seu conjunto 
de instruções, o seu número de registradores e o seu tamanho de me-
mória. As abordagens da ISA evoluíram com o passar dos anos, como 
veremos a seguir.
2.4.1.1. Processadores CISC
Os processadores Complex Instruction Set Computing (CISC) – 
Computação com Conjunto de Instruções Complexas – surgiram 
na metade dos anos 1960. Eles possuíam um conjunto de instru-
ções que podiam executar diversas operações, em virtude disso, 
os programadores de linguagem de montagem podiam escrever o 
código-fonte dos seus softwares com um menor número de linhas, 
já que muitas das instruções, que antes faziam parte do software, 
estavam incorporadas no processador. Podemos citar, como exem-
plos de processadores CISC, as famílias de processadores 386 e 
Interação do sistema operacional com hardware e software 59
486, desenvolvidas pela Intel. Quando surgiram os processadores 
CISC, boa parte dos sistemas operacionais era escrito em lingua-
gem de montagem, porém eles perderam força quando os siste-
mas operacionais passaram a ser escritos em linguagens de alto 
nível, por exemplo, o uso do C e do C++ no código-fonte do sistema 
operacional UNIX.
A adoção dos processadores CISC foi motivada pela queda no 
custo do hardware somada ao aumento do custo para desenvol-
vimento do software. Segundo Deitel, Deitel e Choffnes (2005), os 
processadores CISC tentavam transferir muito da complexidade do 
software para o hardware, reduzindo o tamanho dos programas, 
diminuindo o acesso à memória e facilitando o processo de depu-
ração do código-fonte. Um outro benefício da arquitetura de pro-
cessadores CISC foi a diminuição no número de registradores de 
propósito geral, reduzindo o custo do processador e permitindo a 
inclusão de outras estruturas CISC no projeto. Uma inovação lan-
çada pela arquitetura de processadores CISC foi o uso do pipeline, 
que dividia o caminho dos dados dentro do processador, permitin-
do que este executasse várias instruções simultaneamente.
2.4.1.2. Processadores RISC
Os avanços do hardware e o uso de compiladores, por meio de 
estudos realizados por várias empresas, inclusive a IBM, demons-
traram que o conjunto de instruções armazenados pelos proces-
sadores CISC não estavam sendo utilizados, ou se tornaram mais 
lentos, ocupando grande parte do tempo de processamento. Essa 
descoberta fortaleceu o desenvolvimento dos processadores Redu-
ced Instruction Set Computing (RISC) – Computação com Conjunto de 
Instruções Reduzidas –, nos quais as atividades mais comuns do 
processador deveriam ser executadas de maneira mais eficiente.
Os processadores RISC seguiram caminho inverso dos proces-
sadores CISC. Neles, a complexidade da programação foi transfe-
rida do hardware para o código-fonte compilado. As unidades de 
controle dos processadores RISC são desenvolvidas em hardware, 
reduzindo o tempo de execução quando comparados com os con-
juntos de instruções dos processadores CISC. Outra vantagem é 
60 Sistemas Operacionais
que as instruções dos processadores RISC fazem uso de palavras 
com tamanho fixo de memória, diferentemente das instruções dos 
processadores CISC, as quais faziam uso de palavras com tama-
nhos variados, o que gerava um tempo maior de execução. Como 
os processadores RISC não necessitavam de estruturas CISC no seu 
projeto, eles aumentaram o número de registradores de propósito 
geral, diminuindo a necessidade de acesso à memória.
Como as instruções utilizadas pelos processadores RISC são 
mais simples e possuem o mesmo tamanho, torna-se possível o 
uso dos pipelines 3 de modo mais eficiente que os processadores 
CISC. Uma inovação lançada pela arquitetura de processadores 
RISC foi o uso da técnica conhecida como desvio atrasado, a qual 
permite que, ao receber um conjunto de instruções sequenciais, 
a sua totalidade possa ou não ser executada de acordo com 
uma validação feita pelo processador. Como des-
vantagens da arquitetura de processadores 
RISC, em comparação com a arquitetura de 
processadores CISC, podemos destacar: as 
operações que fazem uso de pontos flu-
tuantes são mais rápidas nos processadores 
CISC; e a utilização de programas gráficos e cien-
tíficos apresenta melhor desempenho quando executa-
da em processadores CISC, pois esses programas fazem uso 
de instruções complexas de maneira repetida.
Podemos citar como exemplo de utilização da arquitetura RISC, 
o processador PowerPC, desenvolvido pela IBM e que foi utilizado 
pela Apple em seus computadores. A arquitetura RISC deu origem a 
vários novos projetos de processadores, entre eles, podemos des-
tacar o Advanced RISCMachine (ARM) – Máquina RISC Avançada – , 
desenvolvido pela Acorn Computers. Esse projeto é utilizado, am-
plamente, em smartphones, tablets e no Raspberry PI 4 (Figura 9).
2.4.2. Projeto de processador
Segundo Deitel, Deitel e Choffnes (2005), mesmo diante da variedade 
de tipos de processadores, alguns componentes são comuns, confor-
me representado na figura a seguir.
Pipelines de instruções são 
usados nas CPUs para permitir 
a sobreposição de execução de 
várias instruções com o mesmo 
circuito.
3
Raspberry Pi é uma série de 
pequenos computadores de-
senvolvida no Reino Unido pela 
Raspberry Pi Foundation, para 
promover o ensino de ciência da 
computação básica nas escolas e 
países em desenvolvimento.
4
Figura 9
Raspberry PI 4 
modelo B
Interação do sistema operacional com hardware e software 61
Figura 10
Componentes do processador 
Unidade de 
busca/decodificação
Cache de 
instrução L1
Interface de barramento
Registradores
ULA
Unidade de 
execução
Cache de 
dados L1
Cache L2
Fonte: Deitel; Deitel; Choffnes, 2005, p. 34. 
a. A Unidade de Controle (UC) é responsável pela busca das 
instruções na memória principal (MP), pela sua decodificação e 
execução. Para realizar essas atividades, ela faz uso da Unidade 
de Busca de Instrução, responsável por carregar as instruções 
em memórias de alta velocidade, isto é, os registradores de 
instruções, os quais permitem ao processador executá-las 
rapidamente; e da Unidade de Decodificação de Instrução, 
que realiza a interpretação da instrução e a encaminha para 
a Unidade de Execução. O uso de sinais elétricos (pulsos 
de controle) permite à UC controlar os componentes de 
dispositivos do computador. Dentre as atividades pelas quais 
a UC é responsável, podemos citar: o início e término da 
leitura de dados, o controle do armazenamento das palavras 
na memória, a execução de uma instrução, o início de uma 
operação aritmética etc.
b. Os registradores são responsáveis por armazenar os dados 
para uso imediato pelo processador. A velocidade e a 
proximidade dos registradores com a UC permitem que o 
processador não fique ocioso. O tamanho dos registradores 
62 Sistemas Operacionais
é determinado pelo número de bits definido pela arquitetura 
do processador, isto é, um processador de 64 bits pode 
armazenar 64 bits de dados em cada registrador. A arquitetura 
do processador também define o seu número de registradores, 
por exemplo, o Pentium 4 da Intel possuía 16 registradores 
de execução de programa; já o PowerPC 970 da IBM, utilizado 
nos computadores G5 da Apple, possuía 32 registradores. Os 
registradores se dividem em dois grupos: os registradores de 
propósito geral, que são utilizados para guardar as variáveis 
dos programas e permitem à CPU acessá-las sem ter de buscá-
las na memória principal; e os registradores de propósito 
específico, dentre os quais podemos citar o Contador de 
Programas (Program Counter – PC), que contém o endereço de 
memória a ser utilizado na busca da próxima instrução a ser 
executada pela CPU; o Registrador de Instrução (Instruction 
Register – IR), o qual recebeu a instrução que veio da memória 
e tem o objetivo de guardar a instrução e passá-la para a UC; 
o Registrador de Endereço (Memory Address Register – MAR) e o 
Registrador de Dados (Memory Buffer Register – MBR), os quais 
possuem funções análogas ao PC e ao IR, mas referentes a 
dados e não a instruções (Figuras 11 e 12).
Figura 11
Estrutura de uma CPU
Unidade de 
Controle
Unidade de 
Execução
Instruções
CPU
Endereço das 
Instruções
Endereço dos 
dados
Dados
Dados
Controles internos
Controles 
externos
Condições
Fonte: Elaborada pelo autor.
Interação do sistema operacional com hardware e software 63
Figura 12
Estrutura de uma CPU com registradores
Unidade de 
Controle
Instruções
Unidade de 
Execução
CPU
Endereço das 
Instruções
Endereço dos 
dados
Dados
Dados
Controles internos
Controles 
externos
Condições
IR
MBR
MAR
ULA
Registradores de propósito geral
PC
Fonte: Elaborada pelo autor.
c. A parte principal da Unidade de Execução é a Unidade de 
Lógica e Aritmética (ULA), que se assemelha muito a uma 
calculadora convencional, executando operações lógicas e 
aritméticas, com números inteiros ou reais. Os registradores 
de propósito geral ou específicos são responsáveis por trazer 
tipos de dados diferentes para a ULA. Cabe à UC decidir quais 
os registradores encaminharão seus dados para a ULA e 
informar qual operação (soma, multiplicação, divisão, AND, OR 
etc.) será realizada. Após a execução da operação, a ULA gera 
um resultado, o qual é entregue para um registrador também 
definido pela UC. A ULA é, normalmente, representada por 
um V nos diagramas de arquitetura.
d. A interface de barramento (Figura 13) é responsável 
pela interação do processador com a memória e os outros 
dispositivos do sistema. Essa interface executa três funções 
distintas: o barramento de dados, cuja função é realizar o 
transporte dos dados ou instruções, realizando essa operação 
em sentido bidirecional; o barramento de endereços, cuja 
64 Sistemas Operacionais
função é indicar o endereço de memória que o processador 
deve ler ou gravar, realizando essa operação em sentido 
unidirecional; e o barramento de controle, cuja função é 
monitorar as ações dos outros dois barramentos, gerenciando 
as solicitações e confirmações, realizando essa operação em 
sentido bidirecional.
Figura 13
Estrutura de uma CPU com barramentos
Unidade de 
controle
Unidade de 
execução
Instruções
CPU
Endereço das 
instruções
Endereço 
dos dados
Dados
Dados
Controles internos Condições
Memória principal
Barram
ento de dados
Barram
ento de endereços
Barram
ento de controle
Barram
ento de endereços
Barram
ento de dados
Controles 
extremos
Fonte: Elaborada pelo autor.
e. Por meio da interface de barramento, os dados da memória 
principal são copiados para a memória cache do processador, 
a qual atinge velocidades muito mais altas que a memória 
principal. Essa cópia aumenta a eficiência do processador por 
meio do acesso rápido aos dados e às instruções. A memória 
cache é classificada em dois níveis: o cache Nível 1 – Level 
1 (L1) –, que é o nível mais rápido e mais caro, localizado 
dentro do processador; e o cache Nível 2 – Level 2 (L2) –, que 
é maior e mais lento que o L1. Normalmente localizado na 
placa principal (motherboard – mainboard – placa-mãe), ele 
vem sendo deslocado para o processador, para melhorar o 
seu desempenho.
Interação do sistema operacional com hardware e software 65
2.4.3. Gerenciamento de multiprocessador
Segundo Deitel, Deitel e Choffnes (2005), o termo sistema de mul-
tiprocessamento engloba qualquer sistema que contenha mais de um 
processador. Podemos citar como exemplos de sistemas multiproces-
sados os notebooks, os quais possuem dois processadores, e os servi-
dores de aplicação ou bancos de dados, hospedados em datacenters, 5 
que possuem vários processadores.
As diferentes possibilidades de arquiteturas para se construir um pro-
jeto de multiprocessadores destacam mais uma característica desse tipo 
de projeto, a forma com que eles compartilham recursos dentro do sis-
tema computacional. Analisando essa característica, temos duas opções: 
a. Os sistemas fortemente acoplados 
– Tightly Coupled Systems –, em que 
os processadores compartilham a 
maior parte dos componentes do 
sistema. Esse modelo faz uso de um 
sistema operacional centralizado. O 
projeto Pentium, que conta com dois 
processadores, e foi desenvolvido 
pela Intel, faz uso desse modelo.
b. Os sistemas fracamente acoplados 
– Loosely Coupled Systems –, em que 
a comunicação entre o processador 
e os componentes é feita por enlaces 
de comunicação. As vantagens do uso 
desse modelo estão na sua flexibilidade 
e escalabilidade, pois os componentes 
podem ser incluídos ou retirados do 
projeto com maior facilidade do que 
comparado ao modelo fortemente 
acoplado. O fato de utilizarum enlace 
de comunicação torna esse modelo 
menos eficiente. O projeto Earth 
Simulator, desenvolvido pelo governo 
do Japão, faz uso desse modelo.
O artigo Processadores para Ensino de Conceitos Básicos de Arquitetura de Com-
putadores, dos autores Diana Morandi, André Luis Alice Raabe e Cesar Albenes 
Zeferino, apresentado no Workshop sobre Educação em Arquitetura de Compu-
tadores, em 2006, pode aprofundar os seus conhecimentos sobre arquitetura 
de processadores, seus componentes e a função de cada um deles.
Acesso em: 3 ago. 2020.
https://www.researchgate.net/profile/Cesar_Zeferino/publication/266878017_Processadores_para_
Ensino_de_Conceitos_Basicos_de_Arquitetura_de_Computadores/links/5575ee1308ae75363751a4b2/
Processadores-para-Ensino-de-Conceitos-Basicos-de-Arquitetura-de-Computadores.pdf
Artigo
Datacenter é um ambiente 
projetado para concentrar os ser-
vidores, os equipamentos para 
processamento e armazenamen-
to dos dados e os equipamentos 
de redes de computadores.
5
https://www.researchgate.net/profile/Cesar_Zeferino/publication/266878017_Processadores_para_Ensino_de_Conceitos_Basicos_de_Arquitetura_de_Computadores/links/5575ee1308ae75363751a4b2/Processadores-para-Ensino-de-Conceitos-Basicos-de-Arquitetura-de-Computadores.pdf
https://www.researchgate.net/profile/Cesar_Zeferino/publication/266878017_Processadores_para_Ensino_de_Conceitos_Basicos_de_Arquitetura_de_Computadores/links/5575ee1308ae75363751a4b2/Processadores-para-Ensino-de-Conceitos-Basicos-de-Arquitetura-de-Computadores.pdf
https://www.researchgate.net/profile/Cesar_Zeferino/publication/266878017_Processadores_para_Ensino_de_Conceitos_Basicos_de_Arquitetura_de_Computadores/links/5575ee1308ae75363751a4b2/Processadores-para-Ensino-de-Conceitos-Basicos-de-Arquitetura-de-Computadores.pdf
66 Sistemas Operacionais
2.5 Memória 
Vídeo Quando analisamos hardware, ao discutir um projeto de siste-
ma operacional, devemos levar em consideração algumas verdades 
absolutas, a primeira delas é que o hardware maior é mais lento que o 
hardware menor (Figura 14), isso ocorre por causa dos atrasos de pro-
pagação de sinal. Tomando a memória como exemplo, quanto maior a 
memória, maior será o seu atraso de sinal e maior o número de níveis 
para decodificação dos endereços.
Figura 14
Tempo de acesso X Tamanho da memória
Nível 1
Nível 2
Tamanho da memória
Aumento 
do tempo 
de acesso
...
Nível n
A segunda verdade absoluta é que, na maioria das tecnologias, po-
demos obter memórias menores, as quais são mais rápidas do que 
memórias maiores. As memórias mais rápidas estão, geralmente, dis-
poníveis em números menores de bits (dígito binário ou binary digit, 
que corresponde à unidade básica utilizada pelo computador no seu 
processamento; o bit pode assumir apenas dois valores: zero e um 
ou true e false) por CI (Circuito Integrado) e custam, substancialmente, 
mais por byte, o qual corresponde a uma sequência de oito bits.
Ao observar a execução de um software, descobriu-se que, dentro 
de um intervalo de tempo, os endereços gerados por essa execução 
tendem a se limitar a pequenos conjuntos, sendo chamado esse fenô-
meno de princípio da localidade, que se baseia na observação de três 
tipos diferentes de localidade destacadas a seguir.
 • A localidade temporal – observa uma tendência por parte de 
um processo em realizar referências futuras a posições feitas 
recentemente.
Interação do sistema operacional com hardware e software 67
 • A localidade espacial – observa uma tendência por parte de um 
processo em realizar referências a posições na vizinhança da úl-
tima referência.
 • A localidade sequencial – observa uma tendência por parte de 
um processo em fazer referência à posição seguinte a atual.
Levando isso em consideração, os projetistas de hardware optaram 
por manter os itens que foram utilizados mais recentemente na memó-
ria mais rápida e próxima possível da CPU.
2.5.1 Hierarquia de memória
Segundo Deitel, Deitel e Choffnes (2005), a hierarquia de memória 
é um esquema de categorização da memória, em que a mais rápida 
e mais cara fica no topo da hierarquia, enquanto a mais lenta e mais 
barata fica na base. Os níveis da hierarquia são subconjuntos uns dos 
outros, isto é, todos os dados encontrados em um nível também são 
encontrados no nível abaixo dele e isso se repete até o fim da hierar-
quia (Figura 15).
Figura 15
Hierarquia de Memória
Tempo típico de 
acesso
Capacidade 
típica
1 ns
2 ns
10 ns
10 ms
100 s
<1 KB
4 MB
512-2.048 MB
200-1.000 GB
400-800 GB
Registradores
Caches
Memória principal
Disco magnético
Fita magnética
Fonte: Tanenbaum; Bos, 2015, p. 14.
O topo da hierarquia é ocupado pelos registradores internos à 
CPU, os quais são feitos do mesmo material que ela, garantindo 
velocidade no acesso aos dados e às instruções. Abaixo dos re-
gistradores internos, encontramos a memória cache, geralmente 
controlada por hardware.
Em seguida, na hierarquia, vem a memória principal – também cha-
mada memória real ou memória física. Segundo Deitel, Deitel e Choffnes 
(2005), a memória principal de um sistema computacional corresponde 
ao nível mais baixo de armazenamento de dados, dentro da hierarquia 
de memória, que o processador pode acessar diretamente.
68 Sistemas Operacionais
Os registradores internos, a memória cache e a memória prin-
cipal são considerados meios de armazenamento voláteis, isto é, 
quando o fornecimento de energia do computador é interrompido, 
os dados armazenados são perdidos.
Por último, na hierarquia de memória, encontramos a memória 
secundária, composta de dispositivos de armazenamento secun-
dário e terciário, por exemplo: disco rígido (HD – Hard Disk), fita 
magnética, CD, DVD etc. Por ocuparem o último lugar na hierar-
quia, os dispositivos de memória secundária são os menos caros e 
os mais lentos entre todos eles. A memória principal e a secundária 
são as memórias a que o usuário tem acesso.
O sistema operacional faz uso de um mecanismo chamado 
memória virtual (segmentação e/ou paginação) para iludir o usuá-
rio, fazendo-o acreditar que a memória total do seu computador é 
a soma da memória principal e da memória secundária. Esse me-
canismo permite a transferência dos blocos de informação entre 
essas duas memórias, automaticamente, sem a intervenção e o co-
nhecimento do usuário.
O armazenamento terciário vem como uma solução para sis-
temas que necessitam de níveis de memória superiores ao que 
o armazenamento secundário oferece. Essa extensão é feita por 
meio do armazenamento de dados em fitas magnéticas, catalo-
gadas e acessadas por braços robóticos, as quais armazenam da-
dos importantes, porém com uma frequência de acesso inferior 
aos que estão sendo armazenados no disco rígido. Podemos citar, 
como exemplo, uma instituição financeira que precisa armazenar 
contratos por trinta anos; conforme o tempo passa, os contratos 
mais antigos deixam de ser consultados com frequência, podendo 
ser migrados dos discos rígidos (armazenamento secundário) para 
as fitas magnéticas (armazenamento terciário). Isso libera espaço 
em disco para dados mais novos, que serão armazenados com uma 
constância maior.
2.5.2 Memória principal
Segundo Tanenbaum e Bos (2015), a memória principal, muitas 
vezes chamada de RAM (Random Access Memory – Memória de Aces-
so Aleatório), é a locomotiva do sistema de memória. Entre os anos 
Interação do sistema operacional com hardware e software 69
1950 e 1960, ela era conhecida como memória de núcleos (core me-
mory), pois era fabricada com pequenos núcleos de ferrita, isto é, 
um material cerâmico, composto principalmente de óxido de ferro, 
com propriedades magnéticas. Nos computadores atuais, a memó-
ria principal possui centenas de megabytes (MB), sendo que cada 
MB equivale a um milhão de bytes. Quando as requisições feitas 
pela CPU não podem ser atendidas pela memória cache, elas são 
encaminhadas para a memória principal.
A memória RAM é caracterizada como uma memória de aces-
so aleatório,pois os processos podem acessar as localizações de 
dados em qualquer sequência, diferentemente do que ocorria no 
armazenamento feito em fita magnética, no qual o dado somente 
era acessado quando a leitora chegava no ponto específico em que 
ele foi gravado na fita.
Como já mencionado, memória principal é uma memória 
volátil, isto é, ela perde o conteúdo quando o fornecimento de 
energia do sistema é interrompido. Um outro exemplo de memória 
volátil, utilizada pelos computadores, é a memória Complement-ary 
metal–oxide–semiconductor (CMOS) – Metal-óxido-semicondutor de 
simetria complementar –, utilizada para manter a data e a hora do 
computador atualizadas. A memória CMOS é alimentada por uma 
pequena bateria, a qual garante o funcionamento regular do reló-
gio do computador, mesmo que ele esteja desligado.
Porém, alguns computadores fazem uso de memória aleatória 
não volátil. Podemos citar, como exemplo, a memória ROM (Read 
Only Memory – Memória Somente de Leitura), que já vem progra-
mada de fábrica e não pode ser utilizada pelo usuário. O processo 
de inicialização do computador, feito pelo carregador (bootstrap 
loader) é gravado nessa memória ROM, que é uma memória rápida 
e de baixo custo.
2.5.3 Armazenamento secundário
Em virtude da limitação de capacidade e volatilidade, a memó-
ria principal não é adequada para o armazenamento permanente 
de grande quantidade de dados, como os softwares e arquivos de 
dados gerados pelo usuário. Para resolver esse problema, o com-
putador faz uso do armazenamento secundário (armazenamento 
70 Sistemas Operacionais
persistente ou auxiliar), no qual ele armazena grande quantidade 
de dados permanentes a um baixo custo, sendo estes mantidos 
mesmo que o computador seja desligado. Porém, acessar os dados 
armazenados em um disco rígido é mais lento do que acessá-los 
na memória principal. Para facilitar a realização de cópias de se-
gurança dos dados (backup) e a transferência de dados entre 
computadores, os usuários passaram a utilizar dispositivos de ar-
mazenamento secundário removíveis, como: CDs, DVDs, pendrives 
etc. Apesar da praticidade, esses dispositivos são mais lentos que 
o disco rígido.
2.6 Discos e fitas 
Vídeo A forma mais comum de armazenamento secundário nos compu-
tadores é o disco rígido, sendo classificado como um dispositivo de 
bloco, pois transmite os dados em tamanhos fixos de bytes. Entre 
centenas de bytes, há dezenas de KB (kilobytes), isto é, aproximada-
mente 1.000 bytes.
Segundo Tanenbaum e Bos (2015), o armazenamento no disco 
rígido é duas ordens de magnitude 6 mais barato, por bit, do que o 
da memória RAM. Porém, o tempo de acesso aos dados é cerca de 
três ordens de magnitude mais lento. O motivo dessa lentidão resi-
de no fato de o disco rígido ser um dispositivo mecânico, conforme 
mostra a figura a seguir.
Figura 16
Estrutura de uma unidade de disco
Cabeça de 
leitura/escrita 
(uma por superfície)
Direção do 
movimento 
do braço
Superfície 7
Superfície 6
Superfície 4
Superfície 2
Superfície 5
Superfície 3
Superfície 1
Superfície 0
Fonte: Tanenbaum e Bos, 2015, p. 15.
Uma ordem de magnitude 
ou ordem de grandeza é uma 
classe de escala ou magnitude 
de qualquer quantidade ou 
grandeza, em que cada classe 
contém valores de uma razão 
à classe que a precede. A razão 
mais comumente usada é dez.
6
Interação do sistema operacional com hardware e software 71
Em seu interior, um disco rígido é constituído por um ou mais 
pratos metálicos, que giram com velocidade entre 5.400 e 10.800 
rpm (rotações por minuto). Os dados são lidos e escritos nesses pra-
tos metálicos por um braço mecânico. Uma região circular, lida pelo 
braço, em um dos pratos metálicos é chamada de trilha. A soma de 
todas as trilhas, em um movimento de leitura feito pelo braço, do 
começo ao fim do prato metálico, é chamada de cilindro. Compreen-
demos como latência rotacional a lentidão no uso do disco rígido, 
pela necessidade de mover o braço mecânico entre os pratos até 
que os dados sejam acessados, somada ao tempo de transferência 
para a memória principal, depois da leitura. Para que um programa 
possa ser executado, ele é armazenado no disco rígido, transferido 
para a memória principal, na qual poderá ser acessado pelo proces-
sador, e, por fim, executado.
Segundo Tanenbaum e Bos (2015), a fita magnética ocupa a últi-
ma camada da hierarquia de memória, sendo utilizada como cópia 
de segurança (backup) dos dados armazenados em disco ou para ar-
mazenar grandes quantidades de dados. O acesso aos dados é feito 
por meio de uma unidade leitora de fitas, a qual é inserida manual-
mente ou por braços robóticos, utilizados nos grandes centros, como 
instituições financeiras. Como vantagens do uso da fita magnética, 
podemos destacar o baixo custo por bit e o fato de ser uma forma 
de armazenamento removível, o que permite, no caso de um backup, 
o armazenamento físico longe do local de processamento, protegen-
do os dados contra roubos, incêndios, catástrofes naturais etc. Como 
desvantagem do uso da fita magnética, podemos destacar o acesso 
sequencial, no qual a fita terá de ser percorrida até que o dado soli-
citado seja encontrado. Esse tipo de operação pode demorar alguns 
minutos para ser realizada.
2.7 Dispositivos de E/S e barramentos 
Vídeo Nesta seção, apresentaremos os barramentos, que atuam como 
meios de comunicação entre as diversas partes de hardware envolvi-
das no funcionamento do computador, e os dispositivos de E/S, os 
quais são os periféricos acoplados ao computador que realizam a inte-
ração com o usuário.
72 Sistemas Operacionais
2.7.1 Barramentos
Segundo Deitel, Deitel e Choffnes (2005), um barramento é um 
conjunto de pistas, ou de outras conexões elétricas, que transportam 
informações entre dispositivos de hardware. Como tipos de barramen-
tos, podemos citar:
a. os barramentos de dados – são responsáveis pelo transporte 
de dados;
b. os barramentos de endereços – armazenam e informam o 
endereço, em que os dados estão armazenados;
c. as portas – permitem a conexão entre dois dispositivos;
d. os canais de E/S – permitem a realização de operações de 
E/S por meio de um barramento compartilhado entre vários 
dispositivos. Os canais de E/S podem tentar acessar a memória 
ao mesmo tempo que o processador. Para evitar a colisão no 
barramento, um dispositivo de hardware, chamado controlador, 
fica responsável por esse processo. Porém, os canais de E/S 
acabam, em um determinado momento, consumindo ciclos de 
acesso à memória do processador, mesmo que seja em uma 
pequena fração de tempo, o que chamamos de roubo de ciclo.
O Barramento Frontal (FSB – Front Side Bus) é o responsável por 
conectar o processador à memória principal. O desempenho do com-
putador aumenta à medida que há um aumento na taxa de dados 
transferida pelo barramento frontal.
O Barramento de Interconexão 
de Componente Periférico (PCI – 
Peripheral Component Interconnect) 
é o responsável pela conexão dos 
dispositivos periféricos – como 
placas de vídeo, de som ou de 
rede – ao resto do computador. 
Uma evolução do barramento PCI 
é o barramento PCI Express (PCIe), 
que permite a comunicação de 
larguras variáveis entre os barra-
mentos (Figura 17).
Figura 17
Placa-mãe com slots (en-
tradas) PCI e PCI Express 
Sm
ia
l/W
ik
im
ed
ia
 C
om
m
on
s
Interação do sistema operacional com hardware e software 73
Smial/Wikimidia Commons
Utilizada na renderização de objetos 3D em tempo real, a Porta 
Gráfica Acelerada (AGP – Accelerated Graphics Port) é responsável 
por conectar placas gráficas que utilizam grandes quantidades de 
memória RAM para realizarem suas atividades.
O barramento Universal Serial Bus (USB) – Barramento Serial Uni-
versal – foi criado para realizar a conexão dos dispositivos de E/S, 
considerados lentos, como mouses e teclados, ao computador. Uma 
grande vantagem na sua utilização é que os dispo-
sitivos USB fazem uso do mesmo driver, portanto 
não é necessário instalar um novodriver cada vez 
que um novo dispositivo USB é acoplado ao com-
putador, nem mesmo reiniciar a máquina. A logo 
utilizada para representar barramento USP é apre-
sentada na figura ao lado.
O barramento Small Computer System Interface 
(SCSI) – Interface de Pequeno Sistema de Computadores – foi criado 
para a conexão de dispositivos de alto desempenho e alto consumo 
de banda, como os discos rígidos rápi-
dos, os scanners etc. O barramento SCSI 
é utilizado pela Apple, desde os primei-
ros computadores Macintosh, por com-
putadores que fazem uso do sistema 
operacional UNIX e por computadores 
baseados na arquitetura Intel (Figura 
19).
Por último, vamos abordar o barra-
mento Instituto de Engenheiros Elétri-
cos e Eletrônicos 1394 (IEEE) – Institute 
of Electrical and Electronic Engineers –, conhecido comercialmente 
como FireWire (Figura 20), nome comercial dado pela Apple. Como 
o USB, o IEEE 1394 efetua a transferência de dados de 
modo serial, porém alcançando velocidades superiores 
às do USB, permitindo seu uso na transferência 
de arquivos e dados em câmeras digitais, pla-
yers multimídia etc. O IEEE 1394 não faz uso 
de um controlador central.
Figura 18
Logo do USB 
Figura 19
Conectores SCSI
Figura 20
Conectores FireWire
74 Sistemas Operacionais
2.7.2 Dispositivos de E/S
Segundo Tanenbaum e Bos (2015), um dispositivo de E/S é consti-
tuído por duas partes, um controlador, isto é, um chip ou um conjunto 
de chips responsável pelo gerenciamento do dispositivo, e o dispositivo 
propriamente dito. O sistema operacional se comunica com o controla-
dor, solicitando a ele que os dados sejam lidos pelo dispositivo, quando 
é realizada uma operação de entrada, ou enviados para o dispositivo, 
quando é realizada uma operação de saída.
No princípio da computação, os dispositivos de E/S se limitavam à 
leitura de cartões perfurados, um dispositivo de entrada, e à impresso-
ra, um dispositivo de saída. Com a evolução dos computadores e o sur-
gimento de novos dispositivos, surge a necessidade de padronização 
na interface dos dispositivos de E/S, pois isso permite que, ao acoplar-
mos, por exemplo, um disco rígido ao computador, este seja reconheci-
do pelo controlador, com o qual o sistema operacional se comunicará. 
A comunicação do dispositivo de E/S com o controlador é feita por um 
software conhecido como driver do dispositivo. Cabe ao fabricante de 
um dispositivo fornecer um driver específico para cada sistema opera-
cional suportado por ele. Por exemplo, ao comprar uma impressora, 
ela virá acompanhada de drivers que permitirão a sua instalação em 
diferentes sistemas operacionais, como Windows, Linux ou macOS, sis-
tema operacional utilizado pelos computadores da Apple.
Segundo Tanenbaum e Bos (2015), todo controlador tem um pe-
queno número de registradores usados na comunicação. Na prática, 
o sistema operacional envia um comando para o driver, o qual ativa o 
controlador, traduzindo o comando recebido, para que este possa ser 
gravado nos registradores do dispositivo. O conjunto de registradores 
do dispositivo é chamado espaço de porta de E/S.
A arquitetura de alguns tipos de computadores permite que os re-
gistradores dos dispositivos sejam mapeados como espaços de ende-
reçamento para o sistema operacional, permitindo que as instruções 
sejam lidas e escritas, como o que acontece na memória principal. Essa 
abordagem elimina a necessidade de instruções especiais de E/S. Já em 
outros computadores, os registradores foram colocados no espaço de 
portas de E/S, no qual instruções especiais IN e OUT estão disponíveis 
em modo núcleo para serem utilizadas pelos drivers. Essa abordagem 
não faz uso de espaço de endereçamento, como a primeira, mas neces-
sita que as instruções especiais IN e OUT sejam reconhecidas.
Interação do sistema operacional com hardware e software 75
CONSIDERAÇÕES FINAIS
Neste capítulo, aprofundamos a nossa visão sobre os arquivos e di-
retórios, que estão presentes em nossos computadores. O que para nós 
parece simples, para o sistema operacional representa um conjunto de 
tarefas e preocupações com a segurança.
Também adentramos no mundo dos componentes do computador, 
que são parceiros do sistema operacional na sua incansável tarefa de rea-
lizar as solicitações feitas pelo usuário, além de realizar tarefas vitais, das 
quais não tomamos conhecimento. O que aos nossos olhos pode levar 
alguns segundos, como o ato de ligar um computador apertando um bo-
tão, internamente aciona um batalhão de componentes, liderados pelo 
sistema operacional.
ATIVIDADES
1. Qual é a maneira mais simples de se armazenar um arquivo em um 
sistema operacional?
2. Qual é a finalidade dos arquivos especiais de caracteres no sistema 
operacional UNIX?
3. Qual é a finalidade dos arquivos especiais de blocos no sistema 
operacional UNIX?
4. O que você compreende por diretório-raiz?
5. Quais são as vantagens na utilização do firmware?
REFERÊNCIAS
DEITEL, H. M.; DEITEL, P.; CHOFFNES, D. Sistemas operacionais. 3. ed. Trad. de Arlete Simille 
Marques. São Paulo: Pearson, 2005.
TANENBAUM, A. Organização Estruturada de Computadores. 6. ed. São Paulo: Pearson 
Universidades, 2013.
TANENBAUM, A.; BOS, H. Sistemas Operacionais Modernos. 4. ed. São Paulo: Pearson 
Universidades, 2015.
76 Sistemas Operacionais
3
Processos e threads
As solicitações feitas por usuários e as aplicações em execu-
ção convertem pedidos em processos que são monitorados pelo 
sistema operacional e disputam um tempo de acesso na Unidade 
Central de Processamento (Central Processing Unit – CPU). Com 
a disseminação dos computadores, os sistemas monoprocessados 
se tornaram multiprocessados e, com isso, a forma como os pro-
cessos eram executados também precisou mudar, sendo criados 
os threads, que aceleram a execução do processo como um todo.
Neste capítulo, abordaremos a definição de processos, seus 
possíveis estados, sua forma de gerenciamento, a definição de 
interrupções e como se dá a comunicação entre processos. 
Estudaremos, também, a definição de threads, os seus possíveis 
estados, as operações que podemos realizar com eles, os seus 
modelos e suas formas de implementação. Discutiremos sobre 
formas de execução assíncrona concorrente e programação con-
corrente. Vamos entender o problema computacional conhecido 
como deadlock e quais são as técnicas de escalonamento utilizadas 
pelo processador.
Ainda, trataremos do termo CPU como sinônimo de processa-
dor, utilizando ambos os termos com igual significado.
3.1 Processos 
Vídeo Com o decorrer do tempo, os computadores passaram a executar 
várias operações ao mesmo tempo. O que era feito de uma maneira 
sequencial, passou a ser realizado simultaneamente, mesmo que isso 
não chame a atenção do usuário.
Isso se deu graças à evolução dos processos, o que permitiu aos 
sistemas operacionais a capacidade de executar e monitorar as ativi-
Processos e threads 77
dades de maneira simultânea. As operações realizadas pelo usuário, as 
aplicações, os dispositivos e o próprio sistema operacional existem na 
forma de processos; eles podem ser criados, destruídos, bloqueados e 
ativados a todo momento.
3.1.1 Definição de processo
Conforme Deitel, Deitel e Choffnes (2005), a primeira vez em que o 
termo processo foi utilizado ao se referir a sistemas operacionais foi no 
desenvolvimento do sistema operacional MULTICS – sinônimo de tarefa 
(job). Ele também pode ser definido como um programa em execução.
Um processo possui o seu próprio espaço de endereçamento, 
composto de três regiões: uma região de texto, onde é armazenado o 
código a ser executado pelo processador; uma região de dados, onde 
são armazenadas as variáveis e a memória, que é alocada dinamica-
mente durante a execução do processo; e uma região de pilha, onde 
são armazenadas as instruções e as variáveis locais para as chamadas 
ativas do procedimento, que fazem a pilha crescer quando são emiti-
das e diminuem quando o procedimento retorna às chamadas.
3.1.2 Estados de processoUma das responsabilidades do sistema operacional é garantir que 
cada processo tenha acesso à mesma quantidade de tempo de uso de 
CPU. Entretanto, o número superior de processos, comparado ao núme-
ro de CPUs disponíveis, somado à concorrência na execução dos pro-
cessos, faz com que o trabalho do sistema operacional seja mais difícil.
Em virtude dos eventos a que está sujeito, um processo usa diferen-
tes estados, como: o estado de execução, que indica que um processo 
está sendo executado pelo processador; o estado “de pronto”, no qual 
o processo informa ao sistema operacional que já pode ser executado 
e está aguardando por um processador que esteja disponível; e o esta-
do bloqueado, quando o processo está aguardando pela finalização de 
um evento, por exemplo, uma requisição de E/S para prosseguir com 
sua execução.
Cabe ao sistema operacional conhecer os processos e seus respec-
tivos estados. Para realizar essa tarefa, ele utiliza duas listas, uma que 
armazena os processos em estado de pronto, lista de prontos; e outra 
que armazena os processos em estado bloqueado, lista de bloqueados. 
Elas se diferenciam pela forma com a qual os processos são ordenados, 
78 Sistemas Operacionais
os processos da lista de prontos são armazenados de acordo com a sua 
prioridade, da mais alta para a mais baixa. Isso garante que, quando 
um processador for liberado, o próximo processo, com prioridade mais 
alta, na lista de prontos, será executado. Já na lista de bloqueados, a 
ordenação não é importante, pois os processos, armazenados na lista, 
são liberados à medida que os eventos, que eles estão esperando, são 
realizados.
3.1.3. Gerenciamento de processo
Os sistemas operacionais são responsáveis pelos processos, pres-
tando serviços essenciais a eles, como criação, destruição, suspensão, 
retomada, mudança de prioridade, bloqueio, ativação e a comunicação 
interprocessos (Interprocess Communication – IPC).
3.1.3.1 Estados de processo e estados de transição
A lista de prontos recebe processos de acordo com o que um usuário 
executa de programas em seu computador. Ao encontrar um processa-
dor disponível para executá-los, os processos vão galgando posições na 
lista de prontos, deixando o estado de pronto para o estado de execu-
ção, sofrendo uma transição de estado. Cabe a uma entidade do siste-
ma operacional, chamada despachante, a responsabilidade de indicar 
ao processo, que ocupa a primeira posição na lista de prontos, que ele 
pode fazer uso de um processador, recebendo essa atividade o nome 
de despacho.
O sistema operacional controla as transições de estado, possibili-
tando que o maior número de processos possível possa acessar os pro-
cessadores disponíveis no computador. Esse controle permite que um 
processador seja alocado por um processo indefinidamente, não ceden-
do lugar para os demais que estão na fila de pronto. Para evitar que isso 
ocorra, o sistema operacional utiliza um timer, isto é, um temporizador 
de intervalo que permite que um processo seja executado durante um 
intervalo de tempo específico, chamado quantum 1 . Caso o processo não 
libere o processador, após o seu limite de tempo de execução expirar, 
o timer cria uma interrupção, permitindo que o sistema operacional re-
cupere o controle sobre o processador. Esse processo terá o seu estado 
alterado de execução para pronto, pelo sistema operacional, que também 
mudará o estado do primeiro processo da fila de pronto para execução, 
iniciando de novo o timer. Dizemos que um processo mudou seu estado 
Um quantum corresponde ao 
tempo limite de utilização do 
processador por um processo, 
equivalendo a 100 e 300.
1
Processos e threads 79
de execução para bloqueado, quando ele está em execução e necessita 
realizar uma operação de E/S, por exemplo, e a resposta não chegou 
antes do seu tempo de execução terminar; nesse caso, ele devolverá o 
controle do processador ao sistema operacional de maneira voluntária. 
Ao receber a resposta do dispositivo de E/S, o sistema operacional muda 
novamente o estado do processo de bloqueado para pronto, até que ele 
possa ser novamente executado.
Para Deitel, Deitel e Choffnes (2005), há quatro estados de transição 
possíveis, conforme a Figura 1. 
Figura 1
Transições de estado de processo
Fonte: Deitel; Deitel; Choffnes, 2005, p. 69.
Em 
execução
Acordado Adormecido
BloqueadoPronto
De
sp
ac
ho
Bloqueio
Despertar
Tem
po
riz
ad
or
esg
ot
ad
o
1
2
4
3
Quando um processo é despachado, o sistema operacional muda seu 
estado de pronto para execução.
Quando um evento que é solicitado por um processo que está no estado 
bloqueado se encerra, ele muda de bloqueado para pronto.
Quando o quantum de execução de um processo se encerra e ele conseguiu 
realizar a(s) tarefa(s) desejada(s), ele muda de execução para pronto. 
Quando o quantum de execução de um processo se encerra e ele não 
conseguiu realizar a(s) tarefa(s) desejada(s), ele muda de execução para 
bloqueado. Essa é a única transição de estado que é feita pelo próprio 
processo. 
1
4
2
3
80 Sistemas Operacionais
Os sistemas operacionais antigos não possuíam timer. Para con-
tornar essa ausência, os próprios processos em execução liberavam 
o processador para um outro processo que estava pronto. Essa estra-
tégia é chamada de multitarefa cooperativa, que foi abandonada pelos 
sistemas operacionais modernos, pois possibilitava que um processo 
entrasse em loop infinito ou se recusasse a devolver o processador 
para outro processo.
3.1.3.2 Blocos de controle de processo (PCBs)/descritores 
de processo
Quando um processo é criado pelo sistema operacional, ele recebe 
um número para a sua identificação, o Número de Identificação de Pro-
cesso (Process Identification Number – PIN). Ainda, recebe um conjunto 
de informações, denominado Bloco de Controle de Processo ou descritor 
de processo (Process Control Block – PCB) (Figura 2), que auxiliará o sis-
tema operacional a gerenciá-lo. Esse conjunto, conforme Deitel, Deitel 
e Choffnes (2005), armazena as seguintes informações: 
a. O Número de Identificação de Processo (PID).
b. O estado do processo, isto é, se o processo está em execução, 
pronto ou bloqueado.
c. Um contador de programa que determina qual será a próxima 
instrução executada pelo processo.
d. A prioridade de escalonamento, que indica qual a sua prioridade 
de execução.
e. As credenciais, uma listagem dos recursos que poderão ser 
acessados pelo processo.
f. O ponteiro para o processo-pai, ou seja, o processo responsável 
pela criação do processo.
g. Os ponteiros para os processos-filho, caso o processo venha a 
criar outros processos.
h. Os ponteiros para localizar os dados e as instruções do processo 
na memória.
i. Os ponteiros para recursos alocados pelo processo, por exemplo, 
arquivos.
Processos e threads 81
j. O contexto de execução, isto é, o conteúdo dos registradores do 
processador no qual o processo foi executado por último. Essa 
informação é utilizada pelo sistema operacional ao retornar o 
processo para o estado execução.
Figura 2
Tabela de processos e blocos de controle de processos 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 70.
PID PCB
1
2
.
.
.
.
.
.
n Contador de programa
Registradores
Estado
Prioridade
Espaço de endereço
Pai
Filhos
Arquivos abertos
...
Outras sinalizações
Contador de programa
Registradores
Estado
Prioridade
Espaço de endereço
Pai
Filhos
Arquivos abertos
...
Outras sinalizações
Contador de programa
Registradores
Estado
Prioridade
Espaço de endereço
Pai
Filhos
Arquivos abertos
...
Outras sinalizações
Bloco de controle de 
processo
Bloco de controle de 
processo
Bloco de controle de 
processo
Como algumas das informações do PCB precisam ser atualizadas 
constantemente pelo sistema operacional, para facilitar sua tarefa, 
ele mantém ponteiros para cada um dos PCBs em uma tabela de pro-
cessos, que pode ser única para todo o sistema operacional ou gerada 
para cada um dos usuários. A tabela de processospermite que o siste-
ma operacional acesse mais rapidamente os PCBs.
Quando um processo é encerrado, voluntariamente ou não, o siste-
ma operacional retira o registro desse processo da tabela de processos, 
disponibilizando os recursos que ele estava utilizando e liberando-os 
para outros.
82 Sistemas Operacionais
3.1.3.3 Operações de processo
De acordo com Deitel, Deitel e Choffnes (2005), as operações de pro-
cesso, que estão sob responsabilidade do sistema operacional, no que 
se refere a processos, são: criação, destruição, suspensão, alteração, 
alteração da prioridade de execução, bloqueio, despacho e permitir 
que um processo se comunique com outro. Um software em execu-
ção, isto é, um processo, consegue gerar novos processos. Quando isso 
ocorre, ele passa a ser chamado de processo-pai; e os processos que 
são criados por ele passam a ser chamados de processos-filho, que não 
podem possuir mais de um processo-pai, conforme a Figura 3. Com o 
encerramento de um processo, de maneira voluntária ou pelo sistema 
operacional, caso ele possua processos-filho, dependendo da situação, 
o sistema operacional pode destruir todos os seus descendentes ou 
permitir que eles continuem existindo, mesmo depois que o processo-
-pai tenha sido desfeito.
O Linux, que se baseia no UNIX, cria um processo chamado init 
(Figura 4) quando o core (núcleo) do sistema operacional é inicializado. 
O init gera vários processos-filho, como: 
A
B
C
E
D
O processo kswapd, 
responsável por 
operações de 
gerenciamento de 
memória.
O processo xfs, 
responsável por 
operações do sistema 
de arquivos.
O processo klogd, 
responsável pela 
leitura das mensagens 
de log do kernel do 
sistema operacional.
O processo login, 
responsável pela 
autenticação dos 
usuários no sistema 
operacional. 
O processo khubd, 
responsável por 
operações de 
dispositivos.
Figura 3
Hierarquia na criação de 
processo
Fonte: Deitel; Deitel; Choffnes, 2005, p. 71.
B
E
C
F
D
G
H
I
A
Processos e threads 83
Figura 4
Hierarquia de processo LINUX
Fonte: Deitel; Deitel; Choffenes, 2005, p. 72.
init 
kswapd login 
vi 
bash 
khubd xfs 
myprog 
pdflush klogd 
finger 
Cabe ao sistema operacional realizar as operações sobre os pro-
cessos em seus diferentes estados, gerenciando seu ciclo de vida e sua 
hierarquia.
3.1.3.4 Suspender e retomar
Para detectar possíveis ameaças à segurança, ou para depuração 
(debug) do software em execução, os sistemas operacionais permitem 
aos administradores, usuários e processos realizarem a suspensão de 
um processo. Quando isso ocorre, ele não é destruído, mas retirado 
da disputa pelo tempo de execução na CPU sem previsão de retorno. 
Um processo pode suspender a si mesmo ou ser suspenso por outro 
processo. Contudo, quando um processo está suspenso, ele somente 
poderá ser retomado por outro processo.
Quando um processo está em execução e suspende a si mesmo, ele 
passa para o estado suspenso-pronto, que posteriormente será alterado 
para pronto. Quando a suspensão é feita por um outro processo, temos 
duas opções: se o processo suspenso estiver no estado pronto, o seu 
estado mudará para suspenso-pronto; porém, se ele estiver no estado 
bloqueado, o seu estado mudará para suspenso-bloqueado, conforme 
demonstrado na Figura 5.
84 Sistemas Operacionais
Figura 5
Transições de estado de processo com suspensão e retomada 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 73.
Conclusão e E/S ou 
conclusão de evento
Pronto 
(b)
(a)
(c)
Bloqueado 
Suspenso- 
-pronto 
Em 
execução
Suspenso- 
-bloqueado
Estados 
suspensos 
Conclusão de E/S ou 
conclusão de evento 
Estados 
ativos
Despachar
Retom
ar 
Retom
ar 
Tem
porizador
Es
pe
ra
 d
e 
E/
S 
ou
 d
e 
ev
en
to
 
esgotado
Suspender
Suspender
Suspender
Quando o processo está no estado suspenso-bloqueado, temos duas 
opções para sair: ele pode ter seu estado mudado para bloqueado no-
vamente, ou o evento de E/S que o tornou bloqueado pode ser finali-
zado e, assim, ele passa de suspenso-bloqueado para suspenso-pronto e 
aguarda sua promoção para pronto.
3.1.3.5 Chaveamento de contexto
Dizemos que um sistema operacional realiza um chaveamento de 
contexto quando ele interrompe a execução de um processo e come-
ça a executar outro que estava no estado pronto. Quando isso ocorre, 
o sistema operacional salva o contexto de execução do processo que 
estava no estado execução no PCB desse processo. Além de carregar o 
contexto de execução anterior do processo que estava no estado pron-
to, também em seu PCB. Cabe ao sistema operacional tornar essa ope-
ração transparente para os processos, que não percebem que tiveram 
o seu uso do processador paralisado (Figura 6).
Processos e threads 85
Figura 6
Chaveamento de contexto
Fonte: Deitel; Deitel; Choffnes, 2005, p. 74.
Processador Processo P1 executa 
no processador
Processo P2 executa 
no processador
Após uma interrupção, 
o núcleo decide 
despachar um novo 
processo e inicia um 
chaveamento de 
contexto
O núcleo armazena o 
contexto de execução 
do Processo P1 em seu 
PCB na memória
Memória principal
PCB do 
processo 
P1
PCB do 
processo 
P2O núcleo carrega o 
contexto de execução 
do Processo P2 do seu 
PCB na memória
P1
P1
P2
Processador 
Processador 
O motivo do sistema operacional realizar o chaveamento de con-
texto é que ele precisa que o processador realize tarefas, considera-
das por ele essenciais, e não as tarefas designadas por um processo. 
Cabe ao sistema operacional minimizar o tempo e a utilização desse 
recurso. Em algumas arquiteturas, como a Intel Architecture 32-bits 
(IA-32 – i386), o próprio processador realiza o chaveamento de contex-
to, manipulando o PCB dos processos sem a interferência do sistema 
operacional.
3.1.4 Interrupções
Para Deitel, Deitel e Choffnes (2005), as interrupções habilitam o 
software a responder aos sinais do hardware. Para poder gerenciar 
melhor as interrupções, o sistema operacional usa um conjunto de 
instruções, chamado tratador de interrupção, no qual ele armazena a 
resposta para cada tipo de interrupção que pode ocorrer, controlando 
melhor o processador.
Chamamos de desvio (trap) quando uma interrupção é gerada pelo 
processador com base nas instruções de um processo que está sen-
do executado. O desvio é uma operação síncrona, isto é, o receptor e 
o emissor precisam permanecer on-line durante toda a comunicação. 
Um trap ocorre quando um processo tenta realizar uma ação ilegal, 
como acessar uma área de memória que esteja protegida.
86 Sistemas Operacionais
Uma interrupção também pode ser iniciada por algum evento que 
pode ou não estar relacionado à execução de um processo. Quando 
isso ocorre, ela é considerada assíncrona, ou seja, o emissor e o recep-
tor não necessitam permanecer on-line durante toda a comunicação. 
Uma interrupção assíncrona ocorre quando o usuário pressiona uma 
tecla no seu teclado ou movimenta o mouse.
Para o sistema operacional, o uso de interrupções é uma forma 
simples e barata de chamar a atenção do processador. Uma possível 
alternativa para substituir as interrupções é fazer uso da sondagem 
(polling), na qual o próprio processador solicita a cada um dos dispo-
sitivos o seu status. A sondagem é viável somente quando estamos 
tratando de sistemas com baixa complexidade, pois isso consumiria 
muito tempo e esforço por parte do processador para obter os status 
de todos os dispositivos em uso.
Mesmo diante dessa vantagem, não podemos dizer que o uso de 
interrupções é perfeito. Isso porque se o número de interrupções au-
mentar desproporcionalmente, o sistema operacional pode encon-
trar dificuldades para acompanhar e executar todas elas. Para evitar 
uma possível perda de informações, os sistemas adotam medidas, por 
exemplo, ao receber um pacote de dados, o sistema de redes pron-
tamente gera uma interrupção para informar ao processador sobre o 
pacote recebido que está pronto para ser processado. Entretanto, em 
alguns casos, oprocessador não está disponível para atender a essa 
interrupção no momento. Assim, cabe ao sistema armazenar os dados 
ainda não processados em memória, minimizando a sua perda.
Ao receber uma interrupção, o processador precisa gravar os dados 
do processo em execução para que ele possa recuperá-lo e executá-lo, 
depois de estar liberado da atividade vinculada à interrupção. Esses da-
dos costumavam ser gravados em uma estrutura de dados, conhecida 
como Palavra de Estado de Programa (Program Status Word – PSW). Já 
nos computadores que usam a arquitetura IA-32, a estrutura de dados 
recebe o nome de Segmento de Estado de Tarefa (Task State Segment – 
TSS). Cabe ao sistema operacional decidir se o processo interrompido 
ou outro processo será executado pelo processador quando ele estiver 
liberado.
Segundo Deitel, Deitel e Choffnes (2005), a arquitetura IA-32 pode 
receber dois tipos de sinais diferentes: as interrupções, que informam 
Processos e threads 87
ao processador que um evento ocorreu, como o término do quantum 
do processo em execução, a conclusão de uma comunicação com um 
dispositivo de E/S ou uma interrupção gerada por um processo; e as 
exceções, que indicam a existência de possível erro, seja ele de har-
dware, seja de software. Cabe ao sistema operacional estar atento às 
interrupções, identificando a sua origem e dando continuidade para a 
ação que ela informa, bem como corrigindo possíveis erros reportados 
pelas exceções.
3.1.5. Comunicações interprocessos
Os ambientes de multiprogramação e os ambientes de rede obri-
garam os sistemas operacionais a criarem formas de comunicação 
interprocessos (IPC) que garantem a coordenação (sincronização) das 
atividades dos processos fazendo uso de sinais e trocas de mensagem 
para eles se comunicarem entre si. Isso permite a um usuário, por 
exemplo, enviar um documento a uma impressora que faz parte da sua 
rede ou acessar, via browser, uma página Web, que está hospedada em 
um servidor da internet.
3.1.5.1 Sinais
Sinais são interrupções de software que notificam ao processo que 
um evento ocorreu. Eles não permitem que os processos troquem dados 
entre si. Fica sob responsabilidade do sistema operacional determinar 
qual processo deverá receber o sinal e como ele será respondido pelo 
processo que o recebeu (DEITEL; DEITEL; CHOFFNES, 2005).
Ao receber um sinal, os processos podem: capturá-lo, quando o 
processo especifica uma rotina utilizada pelo sistema operacional para 
emitir o sinal; ignorá-lo, quando o processo depende de uma ação-
-padrão realizada pelo sistema operacional para que o sinal recebido 
possa ser tratado; ou mascará-lo, quando o processo informa ao sis-
tema operacional que não deseja mais receber sinais daquele tipo até 
que a máscara do sinal seja bloqueada.
3.1.5.2 Troca de mensagens
Com o aumento do interesse pelo uso de sistemas distribuídos, 
a IPC passou a ser realizada por trocas de mensagens, que podem ser 
88 Sistemas Operacionais
unidirecionais, isto é, quando um processo atua como emissor e outro 
como receptor da mensagem; ou bidirecional, em que cada um dos 
processos pode atuar como emissor ou receptor. As mensagens po-
dem ter envios bloqueantes (comunicação síncrona) ou envios não blo-
queantes (comunicação assíncrona).
 O Linux e o Windows XP usam uma implementação de troca de 
mensagens chamada pipe, na qual o sistema operacional usa uma re-
gião na memória que serve como buffer, onde um processo atua como 
escritor (emissor), e outro como leitor (receptor).
Nos sistemas distribuídos, as mensagens, ao serem transmitidas, 
podem apresentar falhas ou até mesmo se perder no meio da co-
municação. Para tentar evitar esse cenário, eles usam protocolos de 
confirmação para garantirem que as mensagens foram recebidas cor-
retamente. Caso a confirmação não seja recebida pelo processo emis-
sor, ele poderá esperar um tempo e retransmiti-la. Para eles, outro 
problema é a segurança, pois os processos emissores e receptores 
poderão identificar possíveis tentativas de roubo de dados feitas por 
computadores invasores que não estão devidamente autenticados.
3.2 Threads 
Vídeo Mesmo que os sistemas operacionais permitissem que vários pro-
gramas fossem executados simultaneamente nos computadores mais 
antigos, as linguagens de programação utilizadas naquela época não 
possuíam esse recurso de maneira nativa. A linguagem de programa-
ção ADA, desenvolvida pela Bull SAS para o Departamento de Defesa 
dos EUA na década de 1970, foi uma das primeiras linguagens de pro-
gramação a dar suporte à programação concorrente.
As linguagens de programação atuais, como Java, C#, Python etc., 
utilizam a tecnologia multithread, que permite aos programadores de-
senvolverem aplicativos que serão executados de maneira concorrente.
3.2.1 Definição de threads
Um thread permite ao sistema operacional executar uma tarefa de 
modo independente dos outros processos ou threads, sendo chamado 
de processo leve (Lightweight Process – LWP). Apesar dessa indepen-
dência, os threads são criados com base em processo tradicional, cha-
O nome ADA é uma homena-
gem a Ada Lovelace, matemática 
e escritora inglesa, considerada a 
primeira programadora. 
Saiba mais
Processos e threads 89
mado de processo pesado (Heavyweight Process – HWP). Threads usam 
um subconjunto dos recursos utilizados por um processo comum, como: 
os registradores, a pilha e os Dados Específicos de Threads (Thread-Spe-
cific Data – TSD). O espaço de endereço e outras informações globais são 
compartilhadas pelos threads com o processo pesado (Figura 7).
Figura 7
Relação entre thread e processo
Fonte: Deitel; Deitel; Choffnes, 2005, p. 90.
Processo pesado
Espaço de endereçamento
Outros dados globais de processo
Informação global 
para todos os 
threads de um 
processo
Informação local 
para cada thread
Threads
Registradores
Pilha
Máscara
TSD
Registradores
Pilha
Máscara
TSD
Registradores
Pilha
Máscara
TSD
O gerenciamento de threads pode ser realizado pelo software do 
usuário ou pelo sistema operacional que utiliza bibliotecas para garan-
tir que isso ocorra, como: Win32, utilizada pela Microsoft nas versões 
do Windows 32 bits; C-threads, utilizada nos sistemas operacionais Ma-
cintosh OS X, Solaris e Windows NT; PThreads, definida pelo padrão 
POSIX (Portable Operating System Interface – Interface Portável entre 
Sistemas Operacionais) do UNIX e os sistemas com base nele.
O padrão POSIX, desenvolvido pelo Instituto de Engenheiros Ele-
tricistas e Eletrônicos (Institute of Electrical and Electronics Engineers 
– IEEE), é uma especificação que busca definir padrões para que os sis-
temas operacionais sejam compatíveis entre si. Ele define uma API, os 
shells de linha de comando e as interfaces dos aplicativos para o UNIX 
e os sistemas com base nele.
O uso de threads acabou se tornando relevante por vários motivos, 
entre eles podemos citar: o projeto de software, que tem como base o 
desenvolvimento modular do software e a evolução dos compiladores, 
que possibilitaram a criação de trechos do código-fonte, que podem 
90 Sistemas Operacionais
ser executados separadamente da aplicação, fazendo uso de threads; 
o desempenho, que permite às aplicações multithread fazerem uso de 
um ou de vários processadores paralelamente, diminuindo significati-
vamente o tempo de execução da aplicação; e a cooperação, que per-
mite a IPC pelos threads, o que minimiza o uso de memória, pois passa 
a utilizar o endereço de memória compartilhado pelo processo pesado.
Quando um thread é criado, o sistema operacional não necessita 
inicializar os recursos compartilhados entre ele e o processo pesado. 
Isso reduz o esforço na criação e encerramento dos threads, quando 
comparados ao de um processo.
3.2.2 Estados de threads
Assim como os processos, todo thread pode passar por uma sé-
rie de estados (Figura 8). Quando criamos um thread com a linguagem 
de programação Java, ele está no estado nascido (born), permanecen-
do assim até queo programa o inicie e passe para o estado pronto 
(runnable – executável). Quando ele tem acesso a um processador e 
começa a ser executado, muda para o estado em execução. Finalmente, 
indo para o estado morto (dead), que é quando termina sua tarefa ou é 
encerrado, liberando seus recursos no sistema.
Figura 8
Ciclo de vida de um thread 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 93.
nascido
pronto
em 
execução
em espera adormecido morto bloqueado
Iniciar
N
ot
ifi
ca
r o
u 
ac
or
da
r 
Esperar por evento 
Intervalo de sono expira
Emitir requisição 
de E/S
D
or
m
ir 
Co
nc
lu
ir Co
nc
lu
sã
o 
de
 E
/S
Pr
ee
m
pç
ão
 
D
es
pa
ch
o 
Processos e threads 91
Quando precisa aguardar pela conclusão de uma requisição para 
um dispositivo de E/S, o thread passa para o estado bloqueado; retor-
nando ao estado pronto somente quando a requisição tiver sido en-
cerrada. Quando precisa esperar por um evento, como o sinal de outro 
thread, ele passa para o estado em espera, trocando para o estado 
pronto, quando é acordado, isto é, quando recebe uma notificação de 
outro thread. Quando não possuem nenhuma atividade para realizar, 
logo, não necessitam utilizar o processador por um intervalo de tempo, 
chamado período de sono, o thread passa para o estado adormecido, 
mudando para o estado pronto somente quando o seu período de sono 
termina.
3.2.3 Operações de threads
Os threads e os processos possuem muitas operações em comum, po-
rém os threads possuem algumas operações a mais que os processos, 
como: o seu cancelamento, quando uma thread deve ser encerrada, o 
que não significa o seu término real, pois ele pode mascarar ou desativar 
o recebimento dos sinais de cancelamento; e a sua associação, que acon-
tece quando um processo ao ser criado inicia um thread primário, que 
será associado a outros threads e fica dormindo até que os outros threads 
encerrem sua execução. O Windows XP utiliza essa operação.
3.2.4 Modelos de threads
Apesar de a forma de se implementar threads variar entre os siste-
mas operacionais, na sua grande maioria, eles utilizam os três modelos 
mais conhecidos: threads de usuário, threads de núcleo e threads de 
usuário e de núcleo.
Os threads de usuário (Figura 9) executam operações de suporte 
a threads no espaço do usuário, criados por bibliotecas, não podem 
executar instruções privilegiadas nem acessar o núcleo (core) do sis-
tema operacional diretamente. O sistema operacional visualiza todos 
os threads que compõem um processo multithread, como apenas um 
único bloco de execução, que é despachado de uma só vez, e não por 
thread. Isso recebe o nome de mapeamento de thread muitos-para-um.
Como vantagens no uso de threads do usuário, podemos destacar: 
não há a necessidade do sistema operacional suportar threads, garan-
92 Sistemas Operacionais
tindo portabilidade ao processo; o escalonamento de threads é feito 
pelas bibliotecas do usuário, e não pelo sistema operacional; e, como 
a sincronização de threads do usuário é feita fora do núcleo (core), ela 
não sofre efeito do chaveamento de contexto.
Como desvantagens no seu uso, destacamos: o núcleo (core) do 
sistema operacional considera um processo multithread como sendo 
um único bloco de execução, isso impede que o sistema operacional 
despache threads para serem executados em vários processadores si-
multaneamente; outro ponto negativo é que, caso um dos threads rea-
lize uma requisição para um dispositivo de E/S, todo o processo ficará 
bloqueado até que a requisição seja encerrada.
Figura 9
Threads de usuário
Fonte: Deitel; Deitel; Choffnes, 2005, p. 95.
Um processo
Espaço do 
usuário
Espaço do 
núcleo
Todos os threads 
de um processo 
mapeiam para um 
único contexto
Thread
Contexto de execução
Os threads de núcleo (Figura 10) mapeiam cada thread em seu con-
texto de execução, procurando solucionar os problemas dos threads 
de usuário, fazendo uso do mapeamento de thread um-para-um, no 
qual o sistema operacional fornece para cada thread de usuário um 
thread de núcleo, que ele conseguirá despachar.
Como vantagens no seu uso, podemos destacar que o sistema 
operacional consegue despachar os threads de um processo para 
mais de um processador simultaneamente; o sistema operacional 
consegue visualizar os threads de modo independente, despachan-
do os threads que estão no estado pronto, mesmo que um deles 
esteja no estado bloqueado.
Processos e threads 93
Já como desvantagens, podemos destacar que, como o escalona-
mento e a sincronização dos threads ficam sob responsabilidade do 
núcleo (core) do sistema operacional, os threads de núcleo estão su-
jeitos à sobrecarga ocasionada pelo chaveamento de contexto; além 
disso, os threads de núcleo são dependentes da API para tratamento 
de threads do sistema operacional, perdendo a portabilidade conquis-
tada pelos threads de usuário.
Figura 10
Threads de núcleo
Fonte: Deitel; Deitel; Choffnes, 2005, p. 96.
Um processo
Espaço do 
usuário
Espaço do 
núcleo
Cada thread de 
usuário mapeia 
para um contexto
Thread
Contexto de execução
A combinação de threads de usuário e threads de núcleo (Figura 11) 
usa o mapeamento de threads muitos-para-muitos (mapeamento de 
threads m-to-n), no qual o número de threads de usuário e threads de 
núcleo não precisa ser igual.
Em comparação com o mapeamento de threads um-para-um, o 
mapeamento de threads muitos-para-muitos consegue reduzir a so-
brecarga do sistema operacional, implementando um reservatório de 
threads (thread pooling), em que a aplicação informa ao sistema ope-
racional o número de threads de núcleo que precisa.
Essa forma de mapeamento permite que um thread de núcleo, 
chamado ativação de escalonador, comunique-se com uma biblioteca 
de suporte a threads do usuário que, após a sua ativação (upcall), 
passa a realizar o escalonamento dos threads. O mapeamento de 
threads muitos-para-muitos é utilizado no Sun Solaris e no Windows 
XP.
94 Sistemas Operacionais
Figura 11
Modelo de operação de thread híbrido
Fonte: Deitel; Deitel; Choffnes, 2005, p. 98.
Thread
Contexto de execução
Processo P1
T1 T2 T3 T4 T1 T2 T3 T1 T2 
Processo P2 Processo P3
Espaço do 
usuário
Espaço do 
núcleo
Cada thread de 
núcleo pode mapear 
para um ou mais 
threads de usuário
Apresentamos, nesta subseção, os modelos de threads utilizados 
pelo sistema operacional. Na próxima subseção, vamos analisar como 
os threads são implementados.
3.2.5 Implementações de threads
A execução de um processo pode ser pausada por uma interrup-
ção gerada por hardware ou por um sinal que, por sua vez, é gerado 
por software. Inicialmente projetados para serem utilizados com pro-
cessos, os sinais tiveram de ser adaptados para serem utilizados por 
threads. Há dois tipos de sinais: o sinal síncrono, que ocorre quando o 
sinal é emitido por uma instrução de um processo ou thread em exe-
cução; e o sinal assíncrono, que não está vinculado a um processo ou 
thread em execução, como a resposta de uma operação de E/S que 
está sendo concluída. O sinal assíncrono deve possuir um identificador 
(ID) para definir quem é o receptor da mensagem. Caso o processo 
receptor não esteja em execução, o sistema operacional adicionará o 
sinal recebido em uma fila de sinais pendentes até que o processo en-
tre em execução.
Ao receber um sinal assíncrono e o processo fizer uso de threads 
na sua execução, o sistema operacional deverá decidir se realizará 
Processos e threads 95
a entrega da mensagem para todos os threads do processo ou para 
apenas um deles. Essa estratégia é utilizada pelo UNIX e pela especi-
ficação POSIX.
Os threads que utilizam a API de threads do POSIX são chamados 
de PThreads (threads POSIX), que podem ser implementados tanto no 
núcleo (core) quanto por bibliotecas do usuário.
O Linux não faz distinção entre processos e threads, por isso os cha-
ma de tarefas. Ele usa a chamada fork, que cria uma tarefa-filha, que 
contém todos os recursos (registradores, pilha, espaço de endereça-mento) da tarefa-pai.
Um thread pode chegar ao fim de maneira natural, quando encerra 
sua execução; ou de maneira abrupta, quando ocorre uma exceção na 
sua execução ou quando recebe um sinal de cancelamento. Cabe ao 
sistema operacional, ao identificar o término de um thread, removê-lo 
prontamente do sistema.
3.3 Execução assíncrona concorrente 
Vídeo Se houver mais de um thread em execução no sistema operacional, 
dizemos que esses threads são concorrentes entre si. Eles podem estar 
em execução de maneira independente ou cooperativa. Quando a exe-
cução é independente, mas os threads eventualmente se comunicam, 
chamamos esse evento de execução assíncrona.
Quando uma aplicação usa uma variável compartilhada, que deve ser 
atualizada, por exemplo, por threads concorrentes, o sistema operacio-
nal concede acesso restrito aos threads, isto é, enquanto um thread está 
manipulando a variável, os demais precisam esperar (exclusão mútua). 
Cabe ao sistema operacional organizar esse processo, limitando o aces-
so à variável para apenas um dos threads e enfileirando os demais, que 
aguardam a sua vez. Esse processo é chamado de serialização.
O sistema operacional também deve levar em consideração a opera-
ção que estava sendo realizada pelo thread. Quando um thread acessa 
uma área que possui dados que podem ser modificados, chamada de 
seção ou região crítica, ele deve observar se o thread deseja realizar 
uma operação de leitura que não vai, por exemplo, afetar o conteúdo 
armazenado. Nesse caso, podemos encontrar threads concorrentes 
acessando a mesma região crítica.
96 Sistemas Operacionais
Também cabe ao sistema operacional garantir que o acesso à re-
gião crítica por um thread seja o mais rápido possível. Caso o thread 
seja encerrado enquanto está realizando o acesso, o sistema opera-
cional deverá encerrar a exclusão mútua dessa região crítica, para que 
ela possa ser acessada por outros threads, essa ação é chamada de 
limpeza final.
Segundo Tanenbaum e Bos (2015), quatro condições precisam ser 
atendidas para que tenhamos uma boa solução de gerenciamento ao 
acesso da região crítica:
a. Dois processos não podem estar acessando simultaneamente as 
suas regiões críticas.
b. Não há certeza no que se refere à velocidade e ao número de 
CPUs disponíveis.
c. Um processo que está em execução, fora da sua região crítica, 
não pode bloquear outros processos.
d. Um processo não pode ficar esperando infinitamente para 
acessar a região crítica.
Em um sistema monoprocessado, a solução mais simples para o 
gerenciamento de acesso à região crítica é aquela em que o processo 
desabilita as interrupções, habilitando-as novamente quando ele sai 
dela. Apesar da simplicidade, essa não é considerada uma abordagem 
segura, pois o sistema operacional não deve conceder o poder de des-
ligar as interrupções aos processos dos usuários.
Uma outra abordagem para que o sistema operacional possa ge-
renciar a exclusão mútua é o mecanismo de semáforo, proposto por 
Edsger W. Dijkstra, cientista da computação holandês, em 1965. O se-
máforo possui uma variável protegida, que tem somente um valor. 
Quando deseja acessar uma região crítica, um thread utiliza a opera-
ção P (proberen – testar, em holandês) e, quando deseja sair dela, usa 
a operação V (verhogen – incrementar, em holandês). Os semáforos 
que são utilizados por dois ou mais processos são chamados semáfo-
ros binários.
Caso dois threads tentem chamar a operação P, simultaneamen-
te, cabe ao sistema operacional garantir que somente um deles tenha 
acesso à variável protegida, sendo o outro armazenado na fila de espe-
ra, que usa o algoritmo de ordenação de fila primeiro a entrar, primeiro 
Processos e threads 97
a sair (First In, First Out – FIFO), que possui como vantagem a simplici-
dade de ser entendido e a facilidade de ser programado.
Uma outra estratégia é o emprego de um tipo simplificado de 
semáforo, chamado mutex (mutual exclusion – exclusão mútua), uti-
lizado para gerenciar a exclusão mútua de um recurso ou parte de 
código compartilhado entre dois processos. Um mutex possui dois 
estados, desimpedido ou impedido, podendo ser implementado 
com apenas 1 bit. O mutex se diferencia do semáforo porque não 
utiliza fila. Quando vários processos ou threads tentam acessar um 
mutex que está impedido, eles passam para o estado bloqueado e, 
quando o mutex estiver desimpedido, um deles será selecionado 
aleatoriamente para utilizá-lo.
Buscando aperfeiçoar e evitar possíveis erros no uso de semáforos, 
surgiu o conceito de monitor, uma unidade básica de sincronização de 
alto nível que corresponde a uma coleção de rotinas, variáveis e estru-
turas de dados agrupadas em um módulo (pacote) que fornece rotinas 
de uso para os processos, sem dar acesso às suas estruturas de dados 
internas. Ao utilizarmos monitores, somente um processo pode estar 
ativo em um monitor em determinado momento.
Quando pensamos em uma CPU, mono ou multiprocessada, as 
estratégias citadas anteriormente são válidas. Todavia, elas são ine-
ficientes quando falamos em sistemas distribuídos, formados por 
várias CPUs interligadas por uma rede. Para resolver essa limitação, 
surge a estratégia de troca de mensagens (message passing). En-
quanto uma mensagem não chega, o receptor permanece bloquea-
do ou emite um código de erro. Para evitar mensagens perdidas, ao 
receber uma mensagem, o receptor pode enviar uma mensagem de 
confirmação de recebimento (acknowledgement). Uma outra preo-
cupação está na possível perda da confirmação de recebimento, 
que é resolvida com a inclusão de um número sequencial, caso o 
receptor receba duas vezes uma mensagem com o mesmo número, 
ele descarta o segundo envio. O nome do processo precisa ser úni-
co, para evitar o envio e recebimento de mensagens por processos 
errados. Outro ponto importante é a necessidade de autenticação, 
para evitar a comunicação com CPUs não autorizadas. Apesar da 
versatilidade, a troca de mensagens é mais lenta do que o emprego 
de semáforos ou monitores.
98 Sistemas Operacionais
Figura 12
Uso de uma barreira
Fonte: Tanenbaum; Bos, 2015, p. 87.
(a) Os processos se aproximam da barreira. (b) Todos os processos estão prontos e apenas um 
deles está bloqueado, impedindo o avanço. (c) Quando o processo deixa de estar bloqueado, 
todos eles passam pela barreira.
Processo
(a) (b) (c)
Tempo Tempo Tempo
Ba
rr
ei
ra
Ba
rr
ei
ra
Ba
rr
ei
ra
A A A
B B B
C C C
D D D
A última estratégia de sincronização é focada em grupos de pro-
cessos, cuja execução das aplicações é dividida em fases e possui como 
regra que nenhum dos processos pode mudar de fase antes que todos 
o tenham feito. A solução para esse problema é colocar uma barreira 
no final de cada fase (Figura 12), na qual todo processo que chegar an-
tes dos demais é bloqueado, mudando de estado somente quando os 
demais o tiverem alcançado.
3.4 Programação concorrente 
Vídeo Os programas não concorrentes são mais fáceis de serem escritos, 
analisados e modificados do que os programas concorrentes. Porém, 
a necessidade de resolver problemas por meio do paralelismo, soma-
da ao surgimento de sistemas multiprocessados, distribuídos e as ar-
quiteturas computacionais paralelas, aumentou o uso de programas 
concorrentes.
De acordo com Deitel, Deitel e Choffnes (2005), monitor é um objeto 
que contém dados e procedimentos necessários para realizar a aloca-
ção de determinado recurso compartilhado ou um grupo de recursos 
compartilhados reutilizáveis serialmente. Os dados do monitor somen-
te são acessados por threads que estão dentro dele, sem a possibili-
dade de acesso por threads que estão do lado de fora. Essa técnica é 
chamada de ocultação de informações.
Processos e threads 99
Para que um thread aloque recursos por meio dos monitores, ele 
chama uma rotina de entrada de monitor. Caso vários threads tentem 
acessar o monitor simultaneamente, o sistema operacional aplica a 
exclusão mútua, permitindo que o acesso seja realizado porapenas 
um thread de cada vez. Se um thread chama a rotina de entrada do 
monitor e não há nenhum thread sendo executado dentro dele, ele 
terá acesso ao monitor. Caso contrário, ele terá de esperar até que o 
monitor seja destravado. Quando isso ocorre, o monitor cria uma fila 
de espera, priorizando os que estão na fila há mais tempo.
Quando um thread, que está dentro do monitor, descobre que não 
pode continuar, ele executa um wait sobre uma variável condicional, 
informando, por exemplo, que o buffer que ele estava utilizando está 
cheio. Ao fazer isso, o thread fica bloqueado, permitindo que outro 
thread que está na fila tenha acesso ao monitor. Quando o buffer es-
tiver vazio novamente, o thread que está em execução emite um sinal, 
sai do monitor e permite que o outro thread, até então bloqueado, vol-
te a ocupar o monitor.
Quando um thread produtor entrega dados para um thread con-
sumidor, por meio de um buffer em comum, dizemos que eles usam 
um buffer circular ou limitado (Figura 13), pois o buffer vai sendo 
preenchido pelo thread produtor, eventualmente mais rápido que o 
thread consumidor, que vai retirando os dados do buffer gradual-
mente. Quando o buffer está cheio, o thread produtor é obrigado a 
“dar a volta” no buffer e começar a preenchê-lo novamente desde a 
primeira posição. Como os threads podem efetuar suas tarefas com 
velocidades diferentes, faz-se necessária uma sincronização eficiente 
para que os dois consigam desempenhar suas atividades da melhor 
maneira possível.
O buffer circular permite ao thread produtor escrever dados 
no buffer, sem ter de esperar que o thread consumidor o reti-
re em seguida, fazendo uso das entradas vazias do buffer circu-
lar. Isso não impede que o thread consumidor faça a leitura dos 
dados na ordem correta e melhore o desempenho do sistema, 
pois o thread produtor pode escrever os dados continuamente. 
Quanto maior o tamanho do buffer circular, maior a quantidade 
de dados que poderá ser escrita pelo thread produtor, antes de o 
thread consumidor esvaziá-lo.
Figura 13
Buffer circular
Cburnett/Wikimedia Commons
100 Sistemas Operacionais
O buffer circular pode ser utilizado pelo sistema operacional para 
gerenciar o controle de spooling, que ocorre quando um thread 
(spooler) gera dados que precisam ser impressos por uma impressora, 
por exemplo. O spooler escreve os dados no buffer circular, que são 
lidos por outro thread (despooler), que os encaminha para a impresso-
ra. Comparando as velocidades desse processo, o spooler é muito mais 
rápido do que a impressora, que por sua vez, é mais rápida do que o 
despooler.
3.5 Deadlock e adiamento indefinido 
Vídeo De acordo com Deitel, Deitel e Choffnes (2005), um processo ou 
thread está em estado de deadlock (impasse) ou travado se estiver es-
perando por um evento que não vai acontecer.
Um impasse pode ocorrer quando processos disputam recursos, 
que podem ser: um dispositivo de hardware, como uma unidade de 
disco rígido, ou trecho de informação, como um registro armazenado 
em um banco de dados. Segundo Tanenbaum e Bos (2015), um recurso 
é algo que pode ser adquirido, usado e liberado com o passar do tem-
po. Como podemos observar, há dois tipos de recursos:
a. Preemptível: pode ser retirado do seu processo proprietário 
sem prejudicá-lo, como o uso da memória no computador.
b. Não preemptível: não pode ser retirado do seu processo 
proprietário sem causar prejuízo à atividade que estava sendo 
realizada – por exemplo, quando acaba a luz durante a gravação 
de um CD-ROM, comprometendo esta.
Diante dessa caracterização, os impasses ocorrem com recursos 
não preemptíveis, visto que os recursos preemptíveis conseguem alo-
car recursos de um processo para o outro.
A maioria dos impasses sofridos pelos sistemas operacionais ocorre 
pela tentativa de uso de recursos dedicados, também chamados de re-
cursos reutilizáveis serialmente. Quando um processo necessita fazer 
uso de um recurso que não está disponível naquele momento, ele é 
bloqueado pelo sistema operacional e, quando o recurso estiver dis-
ponível, será acordado pelo sistema operacional. Em outros casos, ao 
se deparar com um recurso indisponível, o processo emitirá um código 
de erro.
Processos e threads 101
Em determinados casos, o uso de recursos é gerenciado por pro-
cessos de usuário, como quando o usuário tenta acessar os registros 
armazenados em um banco de dados. Uma forma de conceder aos 
processos de usuários o gerenciamento dos recursos é fazer uso de 
semáforos. Algumas vezes, o processo necessita de dois ou mais recur-
sos, sendo esses adquiridos de modo sequencial.
Conforme Tanenbaum e Bos (2015), um conjunto de processos en-
trará em uma situação de impasse quando todos os processos desse 
conjunto estiverem esperando por um evento que somente outro pro-
cesso do mesmo conjunto pode realizar. Esse tipo de impasse é deno-
minado impasse de recurso. 
Coffman Jr., Elphick e Shoshani (1971) definiram quatro condições 
que podem gerar um impasse de recurso:
a. Condição de exclusão mútua – quando um recurso está 
associado a um único processo ou disponível.
b. Condição de posse e espera – em que os processos já estão 
fazendo uso de recursos e precisam fazer uso de outros recursos.
c. Condição de não preempção – na qual os recursos que já estão 
sendo utilizados por um processo não podem ser tomados dele, 
tendo de ser liberados por eles voluntariamente.
d. Condição de espera circular – em que ocorre um encadeamento 
circular de processos, que estão esperando pela liberação de um 
recurso que está sendo utilizado por outro processo, pertencente 
à mesma cadeia.
A forma mais simples com que o sistema operacional pode tratar 
um impasse é nomeada de algoritmo do avestruz. Fazendo uso desse al-
goritmo, quando o sistema operacional detecta um impasse, bloqueia 
o processo solicitante ou emite um código de erro.
Outra abordagem possível é aquela na qual o sistema operacional 
não atua na prevenção dos impasses, mas tenta detectá-los quando 
acontecem, fazendo uso da CPU, que, a cada determinados minutos ou 
quando a sua utilização estiver abaixo do esperado, realiza essa verifi-
cação. Isso pode parecer custoso, porém a existência de impasses no 
sistema pode ocasionar a ociosidade da CPU.
Um método utilizado pelos projetistas de sistemas operacionais para 
a recuperação de um processo que entrou em um impasse é a geração 
102 Sistemas Operacionais
de pontos de salvaguardo (checkpoints), que permitem ao processo ar-
mazenar o seu estado (uso de memória e recursos alocados) em um 
arquivo, podendo ser reinicializados com base nessa informação.
Ainda, outra abordagem é finalizar um dos processos envolvidos, 
esperando que o seu fim permita que os demais processos realizem 
suas tarefas, sendo chamada de recuperação por meio de eliminação 
de processos.
Uma possível estratégia para evitar a ocorrência de impasses são 
as trajetórias de recursos, que têm como base o conceito de estados 
seguros, no qual um estado é assim considerado quando ele não está 
envolvido em um impasse e caso haja uma ordem de escalonamento 
(decisão de quem vai utilizar o recurso ou esperá-lo) para que ele possa 
concluir sua execução. Já no estado inseguro, o sistema operacional 
não pode garantir que o processo será concluído.
Outra estratégia é fazer uso do algoritmo do banqueiro, desenvolvi-
do por Dijkstra em 1965, em que um banqueiro (sistema operacional) 
de uma cidade pequena consegue atender um grupo de clientes (pro-
cessos ou threads) que necessitam de uma linha de crédito (recursos). 
Cabe ao banqueiro verificar se o pedido pode levar a um estado insegu-
ro, o que leva à aprovação ou à recusa do pedido. Ele também precisa 
analisar se possui dinheiro suficiente para emprestar aos clientes e a 
necessidade de cada um deles. Na prática, esse algoritmo esbarra em 
algumas limitações: o número de processos solicitantes é variável, um 
processo ou thread não tem conhecimento prévio dos recursos a se-
rem utilizadose a disponibilidade dos recursos muda muito.
Como as estratégias para evitar a existência de impasses se funda-
mentam em dados futuros, desconhecidos pelo sistema operacional, 
os projetistas de sistemas operacionais voltaram suas atenções para as 
quatro condições definidas por Coffman Jr., Elphick e Shoshani (1971).
Considerando que as soluções propostas para evitar a ocorrência 
de impasses não podem ser aplicadas de maneira genérica, algumas 
aplicações passaram a fazer uso de algoritmos para resolver proble-
mas específicos, como:
a. Bloqueio em duas fases (two-phase blocking): atende à 
necessidade dos sistemas gerenciadores de bancos de dados 
que realizam o bloqueio (lock) de alguns registros para que eles 
possam ser atualizados.
Processos e threads 103
b. Impasse de comunicação: pode ocorrer quando um processo X 
envia uma mensagem para o processo Y e fica bloqueado até que 
a mensagem de retorno seja recebida.
c. Livelock: pode acontecer quando a tabela de processos do 
sistema operacional está cheia e um processo que tenta criar 
threads descobre isso. Ele não consegue criar os threads naquele 
momento, sendo obrigado a esperar um pouco e fazer uma nova 
tentativa. O UNIX e o Windows ignoram o problema de livelock, 
uma vez que consideram que sua ocorrência é menos traumática 
do que limitar a experiência do usuário.
d. Condição de inanição (starvation): pode acontecer quando um 
processo nunca tenha acesso a um recurso que está solicitando.
Sendo um evento possível em qualquer sistema operacional, o im-
passe é um assunto discutido desde os primórdios dos sistemas ope-
racionais, alvo de pesquisa de matemáticos e projetistas de software e 
sistemas operacionais.
3.6 Escalonamento de processador 
Vídeo Quando um computador possui vários processos ou threads no es-
tado de pronto e apenas um processador livre para atendê-los, o sis-
tema operacional precisa usar um escalonador, que usa o algoritmo 
de escalonamento para chegar a uma decisão. Esse algoritmo possui 
algumas características essenciais, como: justiça, concedendo a cada 
processo um tempo considerado adequado para o uso da CPU; aplica-
ção da política, verificando se a política de escalonamento está sendo 
utilizada; e equilíbrio, garantindo que todas as partes do sistema estão 
realizando o seu trabalho.
O algoritmo de escalonamento, quando os programas faziam 
uso de cartões ou fitas magnéticas, não encontrava dificuldades, em 
virtude de sua natureza sequencial, precisando apenas executar o pró-
ximo programa. Com o surgimento dos sistemas multiprogramados, 
o algoritmo de escalonamento precisou ser aperfeiçoado para decidir 
qual programa teria acesso ao processador.
Segundo Tanenbaum e Bos (2015), o surgimento dos computadores 
pessoais trouxe duas mudanças: na maior parte do tempo, existe so-
104 Sistemas Operacionais
mente um processo ativo e, com a evolução do hardware, a CPU dificil-
mente tem problemas com o consumo de recursos, não ficando mais 
limitada ao tempo de processamento, e sim ao tempo com que o usuá-
rio leva para inserir dados, pelo teclado ou mouse. Isso faz com que o 
escalonamento não seja considerado importante quando analisamos 
computadores pessoais. Entretanto, isso não é verdade quando ana-
lisamos servidores e estações de trabalho (workstations) conectadas 
a uma rede em que encontraremos processos internos concorrendo 
com aplicações executadas pelos usuários. Cabe ao escalonador esco-
lher o processo ideal a ser executado, além de garantir o melhor uso 
do processador.
Quando falamos de comportamento de processos, encontramos 
duas situações: os processos que fazem uso da CPU por um longo tem-
po e quase não são afetados por esperas de E/S; e os que vivem uma 
situação contrária, com longos intervalos de espera de E/S e pouco 
tempo de utilização da CPU.
A decisão do escalonador sobre qual processo será executado deve 
ser realizada quando um outro processo está terminando a sua exe-
cução. Ele deve selecionar entre os processos que estão com estado 
pronto. Caso não haja nenhum, o processador pode executar um pro-
cesso do sistema operacional. Quando um processo em execução é 
bloqueado, cabe ao escalonador selecionar um novo processo para 
execução. Quando ocorre uma interrupção de E/S, que habilita um pro-
cesso que até então estava bloqueado, cabe ao escalonador decidir se 
ele será executado ou se um outro processo terá prioridade.
Conforme Tanenbaum e Bos (2015), os algoritmos de escalonamen-
to podem ser divididos em duas categorias com relação às interrupções 
de E/S: na primeira, o algoritmo de escalonamento não preemptivo 
escolhe um processo para execução e o executa até que ele seja blo-
queado, para uma requisição de E/S, por outro processo, ou quando 
o processo libera a CPU por conta própria; na segunda, o algoritmo 
de escalonamento preemptivo escolhe um processo para execução e o 
executa por um tempo máximo definido.
Há três categorias de algoritmos de escalonamento: os sistemas em 
lote, os sistemas interativos e os sistemas com restrição de tempo real 
(TANENBAUM; BOS, 2015).
Processos e threads 105
Os sistemas em lote são utilizados em empresas que operam com 
atividades realizadas periodicamente, como folhas de pagamento, con-
tas a pagar etc. Neles, não há terminais de usuários aguardando pela 
resposta da execução dos processos, logo, os algoritmos de escalona-
mento preemptivos e não preemptivos são aceitáveis. Esses sistemas 
consideram as seguintes características como essenciais para o algo-
ritmo de escalonamento: a vazão (throughput), ou seja, a realização do 
máximo possível de tarefas por hora; o tempo de retorno, menor tem-
po entre o início e o término da execução do processo; e a utilização da 
CPU, isto é, minimizar o máximo possível a ociosidade da CPU.
Nos sistemas interativos, em que há usuários interagindo e aguar-
dando uma resposta, faz-se necessário o uso do algoritmo de esca-
lonamento preemptivo para evitar que um processo tome o controle 
da CPU. Os servidores também se enquadram nessa categoria, pois 
atendem a vários usuários, remotos ou não, simultaneamente. Esses 
sistemas consideram as seguintes características como essenciais para 
o algoritmo de escalonamento: tempo de resposta, proporcionalidade 
e satisfação dos usuários.
Já nos sistemas com restrição de tempo real, em que os processos 
sabem que não podem ser executados por um longo período, o algo-
ritmo de escalonamento preemptivo não faz sentido. Esse tipo de sis-
tema executa somente processos relacionados ao seu propósito. Esses 
sistemas consideram as seguintes características como essenciais para 
o algoritmo de escalonamento: cumprimento de prazos, evitando que 
os dados sejam perdidos durante a execução; e previsibilidade, evitan-
do perda de qualidade durante a execução do processo.
Ao analisar e procurar soluções para os problemas de sincronização 
de sistemas operacionais, foram formulados vários problemas, cujas 
soluções são alvo de estudo por parte dos cientistas da computação e 
projetistas de sistemas operacionais. Um desses problemas é o produ-
tor-consumidor, no qual dois processos (produtor e consumidor) com-
partilham uma área de tamanho fixo para armazenamento (buffer). O 
produtor gera dados e os coloca no buffer sem parar. Simultaneamen-
te, o consumidor lê os dados, retirando-os de lá um de cada vez. O de-
safio proposto pelo problema é garantir que o produtor não vai tentar 
adicionar dados no buffer cheio e que o consumidor não tentará ler os 
dados do buffer vazio.
106 Sistemas Operacionais
Outro problema conhecido na área é o do jantar dos filósofos, 
proposto por Dijkstra em 1965, com o seguinte contexto: cinco filó-
sofos estão sentados a uma mesa redonda. Cada um deles possui 
em sua frente um prato de espaguete. Para poder comer, um filóso-
fo precisa fazer uso de dois garfos, porém, entre cada par de pratos, 
há somente um garfo. Um filósofo ou passa seus dias comendo ou 
pensando. Quando ele está com fome, tenta pegarum garfo, depois 
o outro. Caso ele consiga fazê-lo, come por tempo determinado, co-
loca os garfos de volta na mesa e volta a pensar. O desafio proposto 
pelo problema é escrever um programa no qual cada filósofo consi-
ga realizar suas tarefas sem travamento. A solução para o problema 
faz uso de um estado para controlar se um filósofo está co-
mendo, pensando ou com fome, isto é, tentando pegar os 
garfos. Nesse caso, ele pode mudar para estado comendo, 
caso os seus vizinhos da esquerda e da direita não estejam 
comendo. A solução utiliza semáforos para cada um dos filó-
sofos, bloqueando os filósofos com fome, caso os garfos dos 
seus vizinhos estejam ocupados.
Por último, temos o problema dos leitores e escritores, 
proposto por Courtois, Heymans, Parnas (1971) e utilizado 
para definir o acesso a sistemas de bancos de dados, com o 
seguinte contexto: um sistema de reserva de linhas aéreas 
possui vários processos concorrentes, querendo ler e escre-
ver, simultaneamente. A base de dados pode ser lida por vá-
rios processos ao mesmo tempo, menos quando um processo 
estiver escrevendo, o que impede até mesmo a leitura por um outro 
processo. O desafio proposto pelo problema é de como programar os 
leitores e os escritores. A solução proposta é que quando um leitor 
chegar, ele será posicionado depois do escritor, que precisa esperar 
pelos leitores que chegaram antes dele, denominada single-writer ou 
multi-reader lock. Uma desvantagem nessa solução é que ela não faz 
uso de concorrência, portanto, possui um desempenho mais baixo na 
sua execução.
Os pesquisadores continuam voltando sua atenção para o es-
calonamento de sistemas mono e multiprocessados, porém esse 
mesmo interesse não tem sido demonstrado pelos projetistas de 
sistemas operacionais, que parecem satisfeitos com os avanços al-
cançados até agora.
Figura 14
Problema dos filósofos glu-
tões, proposto por Dijkstra
Fonte: Tanenbaum; Bos, 2015, p. 99.
Processos e threads 107
CONSIDERAÇÕES FINAIS
Neste capítulo, aprofundamos a nossa visão sobre os processos. A 
cada quantum de tempo, eles disputam pela atenção dos processadores, 
solicitando recursos, comunicando-se entre si e exigindo atenção por par-
te do sistema operacional para que todos eles sejam executados, aten-
dendo às expectativas do usuário e das aplicações.
Com o aumento dessas expectativas e a evolução do hardware, sur-
giu o conceito de paralelismo, que força os processos a se dividirem em 
threads, buscando repartir as suas tarefas para maximizar o uso do pro-
cessador e minimizar o tempo de execução. Os threads somam-se aos 
processos na disputa pela atenção do processador, e a sua existência, 
convivência e concorrência passa a ser uma preocupação para os proje-
tistas e desenvolvedores de sistemas operacionais e software.
ATIVIDADES
1. Do que é formado o espaço de endereçamento do processo?
2. Qual a diferença entre o estado de execução e o estado de pronto de 
um processo?
3. Explique o que é o bloco de controle de processo (Process Control 
Block – PCB).
REFERÊNCIAS
COFFMAN JR., E. G.; ELPHICK, M. J.; SHOSHANI, A. System Deadlocks. ACM Computing 
Surveys, v. 3, p. 67-68, 1971. Disponível em: http://www.ccs.neu.edu/home/pjd/cs7600-s10/
Tuesday_January_26_01/p67-coffman.pdf. Acesso em: 5 ago. 2020.
COURTOIS, P.J.; HEYMANS, F.; PARNAS, D. L. Concurrent control with readers and 
writers.  Communications of the ACM, v. 14, n. 10, p. 667–668, out. 1971. Disponível em: 
https://www.academia.edu/20962701/Concurrent_control_with_readers_and_writers. 
Acesso em: 5 ago. 2020.
DEITEL, H. M.; DEITEL, P.; CHOFFNES, D. Sistemas operacionais. 3. ed. Trad. de Arlete Simille 
Marques. São Paulo: Pearson, 2005.
TANENBAUM, A.; BOS, H. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson 
Universidades, 2015.
http://www.ccs.neu.edu/home/pjd/cs7600-s10/Tuesday_January_26_01/p67-coffman.pdf
http://www.ccs.neu.edu/home/pjd/cs7600-s10/Tuesday_January_26_01/p67-coffman.pdf
https://www.academia.edu/20962701/Concurrent_control_with_readers_and_writers_
108 Sistemas Operacionais
4
Memória real e virtual
O simples ato de executar um programa em um computador 
esconde várias ações e participantes anônimos, com responsabi-
lidades bem definidas. O programa é armazenado no disco rígido, 
uma unidade de armazenamento secundária, e executado pelo 
processador, que não acessa as instruções e os dados diretamen-
te no disco rígido, pois o considera muito lento. Para aumentar a 
velocidade de acesso do processador, o sistema operacional trans-
fere os dados para a memória principal, servindo como uma área 
de depósito mais veloz que o disco rígido. Porém, com o aumento 
de tamanho e complexidade dos programas, somado à limitação 
no custo da memória principal, os projetistas tiveram de criar a 
memória virtual, isto é, páginas armazenadas no disco rígido, as 
quais criam a ilusão para o processador de que existe mais memó-
ria no computador do que realmente há.
Neste capítulo, abordamos os seguintes assuntos: conceito, 
organização e gerenciamento da memória real; conceito, organi-
zação e gerenciamento da memória virtual; questões de projeto 
para os sistemas de paginação; e questões de implementação en-
frentadas pelos projetistas de sistemas operacionais. Além disso, 
tratamos da memória real como sinônimo de memória principal. 
Essa nomenclatura se faz necessária em função do conceito de 
memória virtual.
4.1 Memória real 
Vídeo A memória real atua como um depósito de instruções e dados ge-
rados pelos programas em execução no computador. Ela auxilia o pro-
cessador no andamento dos programas e, por ser volátil – isto é, por 
perder seus dados quando o computador é desligado –, trabalha com a 
Memória real e virtual 109
memória secundária (disco rígido) para realizar o armazenamento dos 
dados de modo permanente.
A memória real é considerada um dos componentes básicos do 
computador. Faz parte da hierarquia de memória e suas principais ca-
racterísticas são o tamanho e o custo. Podemos posicioná-la no meio 
dessa hierarquia abaixo dos registradores e da memória cache, acima 
do disco rígido e de outros dispositivos de memória secundária. A capa-
cidade da memória real é limitado pelo custo de hardware.
4.1.1 Conceito
A memória real, também conhecida como memória física, memória 
principal, memória primária ou, simplesmente, memória, é o único com-
ponente do computador acessado diretamente pela CPU, que lê conti-
nuamente as instruções armazenadas nela e executa-as.
O último estágio na evolução e no aprimoramento da memória real 
é a memória de acesso aleatório – Random-Access Memory (RAM) –, 
que é pequena, leve e cara. Ela está conectada direta ou indiretamente 
à CPU por meio de dois barramentos: um de endereços e um de dados. 
A CPU primeiro envia um número pelo barramento de endereços, cha-
mado de endereço de memória, que indica o local desejado dos dados; 
em seguida, lê ou grava os dados nas células de memória pelo barra-
mento de dados.
4.1.2 Organização
Segundo Deitel, Deitel e Choffnes (2005), historicamente, a memória 
real sempre foi considerada um recurso relativamente caro. Mesmo se 
levarmos em consideração o declínio do valor de hardware e a evolução 
do custo de software, que marcaram a democratização do uso de com-
putadores, mudando o cenário em que estes eram limitados a poucos, 
passando para o uso de computadores pessoais, notebooks, tablets 
etc., e mesmo diante da redução de custos, os sistemas operacionais 
e as aplicações têm exigido volumes cada vez maiores de memória. O 
Windows XP, por exemplo, desenvolvido pelo Microsoft, recomendava 
256 MB de memória principal para o seu uso adequado. Sua versão 
mais moderna, o Windows 10, recomenda 1 GB, para a versão 32 bits, 
e 2 GB, para a versão 64 bits.
110 Sistemas Operacionais
De acordo com Deitel, Deitel e Choffnes (2005), cabe aos projetistas 
de sistemas operacionais tomar algumas decisões sobre a organização 
da memória, como:
A
B
C
E
D
O sistema operacional executaráum processo por vez ou 
optará pela multiprogramação, na qual vários processos 
serão executados simultaneamente?
Essas partições serão criadas dinamicamente, de acordo 
com a necessidade dos processos, ou estaticamente, com 
base em levantamentos estatísticos de comportamento?
Os processos poderão fazer uso de partições contíguas, 
isto é, uma do lado da outra, ou poderão ser divididos entre 
partições separadas?
Caso o projetista tenha optado pela 
multiprogramação, a memória será dividida em 
partes (partições) iguais ou de tamanhos diferentes?
Os processos terão de fazer uso de partições 
específicas para as quais foram designados ou 
poderão fazer uso de partições livres?
Essas são algumas das preocupações dos projetistas de sistema 
operacional, no que se refere à utilização e organização da memória 
real. Vamos analisá-las nas próximas seções.
4.1.3 Gerenciamento
O sistema operacional faz uso do gerenciador de memória para 
organizar e definir as estratégias de gestão de memória, que determi-
nam qual organização deverá ser utilizada, mediante diferentes cargas 
de processos. Ele define a maneira com que o espaço livre é alocado 
pelos processos e como atuar diante das possíveis mudanças na utili-
zação de memória dos processos.
Memória real e virtual 111
Figura 1
Organização da hierarquia de memória 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 241.
Memória 
cache
Memória primária 
Armazenamentos secundário 
e terciário
Tempo de 
acesso ao 
armazenamento 
diminui
Velocidade 
de acesso ao 
armazenamento 
aumenta
Um processador pode 
acessar programas e 
dados diretamente 
O sistema deve primeiramente 
transferir programas e dados para 
a memória principal antes que um 
processador possa referenciá-los
Custo de 
armazenamento 
por bit aumenta
Capacidade de 
armazenamento 
diminui
A Figura 1 apresenta a organização da hierarquia de memória com 
base na velocidade e no custo em cada um dos seus níveis, que são 
acessados por programas e dados gerenciados pelo sistema operacio-
nal. Buscando obter um desempenho superior ao obtido até então com 
a memória primária e com os armazenamentos secundário e terciário, 
os projetistas de computadores criaram a memória cache, a qual ocu-
pa o topo da hierarquia, sendo mais rápida que os seus antecessores 
e comunicando-se diretamente com o processador. Ela deu origem a 
mais um nível de transferência na execução dos programas, exigindo a 
mudança dos programas da memória principal para a cache, antes da 
sua execução.
As estratégias de gerenciamento de memória são divididas nas se-
guintes categorias: 
a. Estratégia de busca: determina qual próxima parte de um 
programa ou de um conjunto de dados será transferida para a 
memória principal. É dividida em dois tipos: sob demanda, na 
qual a transferência ocorre somente quando é referenciada por 
um programa em execução; ou antecipada, quando isso é feito 
antes de o programa ou os dados serem referenciados.
112 Sistemas Operacionais
b. Estratégia de posicionamento: estabelece qual lugar da 
memória principal deverá ser ocupado pelos programas e 
dados que estão chegando. É dividida em três tipos: first fit (FF), 
traduzido como primeiro que couber; best fit (BF), ou seja, melhor 
que couber; e worst fit (WF), ou pior que couber.
c. Estratégia de substituição: indica quais dados deverão ser 
removidos da memória principal para liberar espaço para um 
novo programa.
Ao utilizar computadores antigos, os operadores e os primeiros 
sistemas operacionais buscavam encontrar uma área na memória 
principal contígua que fosse grande o suficiente para acomodar todo 
o programa a ser executado. Essa estratégia foi chamada de alocação 
de memória contígua e possuía como grande desvantagem o fato de a 
memória disponível ser menor do que o programa a ser executado, 
inviabilizando o seu andamento. A solução criada pelos projetistas de 
software era fazer uso de sobreposições (overlays), as quais permitiam 
a execução de programas cujo tamanho era maior que a memória prin-
cipal, por meio da divisão do programa em seções lógicas, alocando 
a memória conforme a necessidade (Figura 2). Porém, essa estratégia 
passou a ocupar muito tempo no processo de desenvolvimento de 
software, em virtude do aumento da complexidade dos programas.
1
2
3
Figura 2
Exemplo de sobreposição de memória
Fonte: Deitel; Deitel; Choffnes, 2005, p. 243.
Sistema operacional 
Área de 
sobreposição 
Programa usuário cujos requisitos de 
memória são maiores do que a porção 
disponível da memória principal 
1 Carregue a fase de inicialização em b e execute.
2 Depois carregue a fase de processamento em b e execute.
3 Então carregue a fase de saída em b e execute.
Fase de 
inicialização 
bb
a
0
c
bb
Fase de 
processamento 
Fase de 
saída 
Parte do código e dos 
dados do usuário que 
deve permanecer na 
memória durante a 
execução 
Memória real e virtual 113
Outra maneira de acomodação é a alocação de memória não 
contígua, na qual o programa é dividido em blocos (segmentos) 
para que possa ser disposto em áreas não contíguas da memória 
principal. Como vantagem dessa estratégia, o sistema operacional 
consegue utilizar pequenas áreas de memória disponíveis, enquan-
to a outra modalidade de alocação não conseguia armazenar um 
programa inteiro. Como desvantagem, o sistema operacional pode 
enfrentar uma sobrecarga, em virtude de um elevado número de 
processos tentando acessar a memória principal simultaneamente.
Os primeiros computadores eram monousuários, isto é, atendiam 
a um usuário por vez, concedendo a este todos os recursos da má-
quina. A Figura 3 exibe a organização de memória em um sistema 
monousuário de alocação de memória contígua. Quando os sistemas 
operacionais ainda não tinham sido inventados, cabia ao programa-
dor gerar todo o código-fonte da aplicação, bem como as instruções 
de E/S.
Figura 3
Alocação de memória contígua em sistemas monousuário 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 243.
Sistema operacional 
Usuário
Não utilizada
b
a
0
c
Essa realidade mudou quando os projetistas de sistema criaram o 
sistema de controle de E/S (Input/Output Control System – IOCS), um 
conjunto de rotinas básicas de E/S, as quais eram chamadas pelos pro-
gramadores, sem a necessidade de serem reescritas em cada uma das 
aplicações, como era feito anteriormente.
114 Sistemas Operacionais
Uma das preocupações dos projetistas de sistemas operacio-
nais monousuários era que o sistema operacional não poderia ser 
prejudicado pela execução dos programas. Ou seja, caso o sistema 
operacional tivesse um mau funcionamento, em virtude de um dos 
programas em execução, os demais seriam afetados, pois não con-
seguiriam funcionar se o endereçamento de memória utilizado fosse 
sobrescrito. Como solução para essa possível ameaça, foi implemen-
tado, dentro do processador, o registrador de fronteira (Figura 4), 
que armazena o endereço de memória destinado ao programa do 
usuário – endereço esse que é validado a cada requisição de aloca-
ção de memória.
Figura 4
Uso do registrador de fronteira para proteger o sistema operacional 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 244.
Sistema operacional 
Usuário
Não utilizada
b
a
0
c
Processador 
Registrador de 
fronteira
O sistema impede o 
usuário de acessar 
endereços menores do 
que a
a
A execução dos primeiros sistemas monousuários de memória real 
exigia um tempo de preparação maior do que o de execução do job, 
pois era necessário o carregamento do sistema operacional, a monta-
gem das fitas e pilhas de discos, a preparação da impressora, a entrega 
dos cartões perfurados etc. Após a execução, o que havia sido montado 
previamente deveria ser desmontado, sendo esse intervalo chamado 
de tempo de desmontagem (teardown time). Como estamos tratando de 
sistemas monousuários, e a execução de um novo job necessitaria de 
uma nova preparação, o computador ficava ocioso entre o tempo de 
preparação e o de desmontagem.
Memória reale virtual 115
No intuito de reduzir esse tempo ocioso, os projetistas de siste-
mas, no início da década de 1960, desenvolveram o processamento 
em lote. Nesse sistema, os jobs eram agrupados em lotes, por meio 
de uma linguagem de controle de jobs, e armazenados no disco rígido 
ou na fita magnética. Desse modo, eram lidos por um processador de 
fluxo de jobs, que assumia algumas das responsabilidades antigamen-
te executadas pelo operador manualmente, ficando sob os cuidados 
deste apenas a limpeza e preparação para a execução do próximo job.
Para melhorar o desempenho dos sistemas operacionais monou-
suários, os projetistas criaram os primeiros sistemas que faziam uso de 
multiprogramação por partição fixa, em que a memória principal era 
dividida em partições de tamanho fixo, armazenando um job em cada 
uma delas e criando para o usuário a ilusão de que os seus processos 
estavam sendo executados em paralelo. A multiprogramação aumen-
tou o risco de alocação de memória dos sistemas monousuários, pois 
neles o sistema operacional deveria ser protegido da execução de ape-
nas um programa; agora, o sistema operacional deveria ser protegido 
de vários programas em execução, e esses deveriam ser protegidos 
deles mesmos. O que era controlado por somente um registrador de 
fronteira passou a fazer uso de vários deles, um para cada partição, 
executando o controle de baixo (de base) e do alto (de limite).
Outro problema encontrado pela multiprogramação por partição fixa 
é a fragmentação interna, quando o programa faz uso de uma quanti-
dade de memória menor do que a partição, levando ao desperdício de 
espaço. Como resposta, os projetistas abandonaram as partições de ta-
manho fixo e passaram a permitir que os processos fizessem uso da 
quantidade de memória necessária, respeitando a quantidade de me-
mória total disponível. Essa estratégia foi chamada de multiprogramação 
por partição variável. Ela não sofre fragmentação interna, pois o processo 
faz uso de uma partição do tamanho definido por ele. Porém, conforme 
os processos vão encerrando a sua execução e liberando a memória, 
eles vão deixando lacunas (holes) na memória principal (Figura 5), que 
podem ser pequenas demais para armazenar outro processo, ocasio-
nando uma fragmentação externa. Esta ocorre quando a soma de to-
das as lacunas é grande o suficiente para acomodar um processo, mas 
cada uma delas é pequena demais para fazer o mesmo.
116 Sistemas Operacionais
Figura 5
Espaços (lacunas) na memória principal em virtude da multiprogramação por partição variável 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 251.
Sistema operacional 
P2 termina 
e libera sua 
memória
P4 termina 
e libera sua 
memória
P1
P2
P3
P4 P4
P5P5 P5
P3
Lacuna Lacuna
P3
Sistema operacional Sistema operacional 
P1 P1
Lacuna
Lacuna
LacunaLacunaLacuna
Para evitar a fragmentação externa, o sistema operacional verifica 
se existe alguma partição livre e adjacente à lacuna. Se sim, ele trans-
forma essas duas partições em uma maior, que poderá acomodar um 
processo. Outra estratégia é a compactação de memória, na qual as 
áreas ocupadas são enviadas para uma das extremidades da memó-
ria principal, criando uma grande área livre e contígua. Esse processo 
de compactação é chamado de coleta de lixo (garbage collector), que 
possui como desvantagem a necessidade de realocar os processos em 
execução e impedir que novos processos sejam inicializados durante a 
compactação.
Cabe ao sistema operacional definir a estratégia de posicionamento 
de memória a ser utilizada, isto é, qual partição da memória será usada 
por um programa a ser executado.
Ao invés de manter o processo alocado na memória principal 
durante toda a sua execução, o sistema operacional pode optar 
por realizar a troca (swapping). Isso ocorre quando, por exemplo, 
o processo não pode mais continuar a sua execução, pois está es-
perando a resposta de um dispositivo de E/S, passando o controle 
da memória e do processador para outro processo (swap out), que 
está aguardando para ser executado. Tendo recebido a resposta da 
sua operação de E/S, o sistema operacional faz a troca novamente 
dos processos (swap in).
Memória real e virtual 117
Figura 6
Exemplo de swapping 
Je
ffe
rs
on
sl
/W
ik
im
ed
ia
 C
om
m
on
s
A Figura 6 apresenta o swapping entre os processos A, B, C e D, rea-
lizado pelo sistema operacional no uso da memória em determinado 
intervalo de tempo.
Para compreender um 
pouco mais o conceito e 
a gerência de memó-
ria real, bem como a 
diferença entre memórias 
lógica e física, a distinção 
entre partições fixas e 
variáveis e swapping, 
leia o capítulo 6 da obra 
Sistemas operacionais, 
e o capítulo 4 da obra 
Sistemas operacionais: 
projeto e implementação.
OLIVEIRA, R. S de.; CARISSIMI, A 
da. S.; TOSCANI, S. S. Porto Alegre: 
Bookman, 2010.
TANENBAUM, A. S.; WOODHULL, 
A. S. 3. ed. Porto Alegre: Bookman, 
2008.
Livro
4.2 Memória virtual 
Vídeo As limitações de espaço e custo da memória real levaram à criação 
da memória virtual, dando ao usuário e computador a ilusão de que 
existe mais memória do que realmente há. Essa necessidade surgiu 
nos sistemas monousuários e foi crescendo conforme os programas 
foram crescendo em tamanho e complexidade, resultando em siste-
mas multiusuários e seus desafios.
4.2.1 Conceito
Uma solução simples para todos os esforços de organização e ge-
renciamento da memória real seria aumentar o tamanho da memória 
dentro dos computadores. Porém, como mencionamos anteriormente, 
a memória real é um componente caro, e o seu uso em larga escala tor-
naria o valor final do computador muito alto e proibitivo para a maioria 
dos usuários.
Diante desse impasse, surgiu o conceito de memória virtual, que bus-
cava solucionar o problema de pouco espaço de memória real, criando 
uma ilusão de que existe mais memória do que realmente a máquina 
possui. Esse conceito foi empregado pela primeira vez no computador 
118 Sistemas Operacionais
Atlas, desenvolvido pela Universidade de Manchester, na década de 
1960.
Figura 7
Evolução da organização da memória
Fonte: Deitel; Deitel; Choffnes, 2005, p. 263.
Real Real Virtual
Sistemas 
monousuário
dedicados
Sistemas de
multiprogramação
de memória real
Sistemas de
multiprogramação
de memória virtual
Multiprogramação
de partição fixa
Multiprogramação
de partição variável
Segmentação
pura
Paginação e 
segmentação
combinadas
Absoluta Realocável
Paginação 
pura
A Figura 7 mostra como a organização de memória evoluiu dos 
sistemas monousuário, com base em memória real, para os siste-
mas multiusuários, com base em memória virtual, que fazem uso de 
segmentação e paginação.
4.2.2 Organização
O sistema de memória virtual utiliza dois tipos de endereço: os vir-
tuais, empregados pelos processos, e os físicos ou reais, responsáveis 
por informar as localizações físicas de armazenamento na memória 
principal.
Quando um processo tenta acessar um endereço virtual, cabe 
ao sistema operacional identificar o endereço real correspondente. 
Isso é feito por meio de um componente de hardware chamado 
unidade de gerenciamento de memória (Memory Management Unit 
– MMU).
O processo faz uso de um espaço de endereço virtual (V), 
correspondendo a uma faixa de endereços virtuais que um processo 
pode referenciar. Em paralelo, o computador usa um espaço de en-
dereço real (R), que corresponde a um faixa de endereços físicos dis-
ponível no computador. Quando analisamos um sistema de memória 
virtual, temos que V > R, isto é, o espaço de endereço virtual é maior 
que o espaço de endereço real.
Memória real e virtual 119
Figura 8
Armazenamento em dois níveis 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 264.
Pr
oc
es
sa
do
r (
es
)
Memória 
principal e 
caches 
Armazenamento 
secundário ou auxiliar 
ou complementar
Discos
Outros tipos de 
armazenamento 
secundário
Conforme ilustrado pela Figura 8, para executar um processo, o siste-
ma operacional faz uso do armazenamento em dois níveis:os programas 
são armazenados em discos ou outros tipos de armazenamento secun-
dário. Somente quando precisam ser executados pelo processador é 
que eles são transferidos para a memória principal e caches.
Figura 9
Mapeamento entre endereços virtuais e endereços reais 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 265.
Memória virtual
Memória 
física
Mecanismo de 
mapeamento de 
endereços
Para realizar a tradução dos endereços virtuais em endereços físi-
cos durante a execução de um processo (Figura 9), o sistema operacio-
nal utiliza mecanismos de tradução dinâmica de endereço (Dynamic 
Address Translation – DAT), que seguem a regra de contiguidade ar-
tificial. Isto é, os endereços contíguos do espaço de endereço virtual 
120 Sistemas Operacionais
utilizados por um processo não necessitam ser contíguos no espaço 
de endereço real. Os mecanismos de tradução dinâmica de endereços 
fazem uso de mapas de tradução de endereços, que são armazenados 
em uma tabela de mapas de blocos na memória principal. A diferença 
no tamanho dos blocos gera diferentes tipos de organização de memó-
ria virtual, como veremos a seguir.
4.2.2.1 Paginação
A paginação usa o mapeamento de blocos de tamanho fixo (pá-
ginas) e é representada pela tupla 1 (p, d), em que p corresponde ao 
número da página na memória virtual, na qual o item está armazena-
do, e d ao deslocamento do início da página p, na qual o item está 
armazenado.
Ao realizar a migração da página armazenada na memória secun-
dária para a memória principal, o sistema operacional faz uso de uma 
área para recepcioná-la, área essa que precisa ter o tamanho exato da 
página, sendo chamada de moldura da página (page frame – p’), e que 
começa em um endereço da memória principal, o qual é um múltiplo 
inteiro do tamanho fixo de cada uma das páginas (ps).
Para controlar se uma página virtual (p) corresponde a uma moldu-
ra de página (p’), o sistema operacional faz uso de um registro chama-
do de entrada de tabela de páginas (Page Table Entry – PTE), contendo 
um bit para indicar se a página está na memória. Caso esteja presente 
na memória principal, a PTE armazena o número da moldura da pági-
na; do contrário, a PTE armazena a posição da página na memória se-
cundária. Essa informação é importante, pois para que o processador 
possa acessar a informação de uma página, ela deve estar armazenada 
em uma moldura de página na memória principal.
Segundo Deitel, Deitel e Choffnes (2005), a tradução de endereços vir-
tuais em endereços físicos pode ser realizada das seguintes formas:
a. Mapeamento direto, em que a tradução dinâmica de endereço 
na paginação é semelhante à tradução de endereço de bloco.
b. Mapeamento associativo, que armazena a tabela de páginas 
em uma tabela associativa, guardando o conteúdo endereçado, 
e não a sua localização.
Tupla é um tipo composto de 
dado.
1
Memória real e virtual 121
c. Mapeamento direto/associativo, em que as PTEs são 
armazenadas na memória cache associativa, denominada buffer 
de tradução lateral (Translation Lookaside Buffer – TLB), que guarda 
as páginas que foram referenciadas recentemente, concedendo 
melhor desempenho com base no conceito de localidade temporal, 
pois, provavelmente, uma página que acabou de ser referenciada 
por um processo pode ser referenciada novamente.
d. Tabelas de páginas multiníveis ou tabelas hierárquicas, que 
permitem ao sistema operacional armazenar em localizações não 
contíguas da memória principal as porções da tabela de páginas 
que o processo está utilizando.
e. Tabelas de páginas invertidas, que armazenam uma PTE 
na memória para cada moldura de página no sistema. Esse 
mecanismo é encontrado em arquiteturas de alto desempenho, 
como a Intel IA-64, a HP PA-RISC e a Power PC.
f. Compartilhamento em um sistema de paginação, o qual 
diminui o consumo de memória pelos programas que usam 
dados/instruções comuns. Podemos citar como exemplo a 
chamada do sistema fork do UNIX, que cria um processo-filho 
idêntico ao processo-pai, além de compartilhar o endereçamento 
virtual entre eles.
Como visto nesta seção, há diversos mecanismos a serem utilizados 
pelo sistema operacional para realizar a tradução do endereço de me-
mória virtual para o seu endereço físico.
4.2.2.2 Segmentação
Uma alternativa para a paginação é a segmentação da memória fí-
sica, na qual o programa é dividido em blocos de dados ou instruções, 
que são nomeados segmentos, consistindo em localizações contíguas, 
porém não precisam ser do mesmo tamanho ou ocupar posições ad-
jacentes entre si na memória principal. Uma das vantagens dos siste-
mas de segmentação virtual é a possibilidade de armazenar na memória 
principal somente os segmentos necessários para a execução do proces-
so, deixando os demais no armazenamento secundário. O endereço de 
segmentação virtual é representado pela tupla v = (s, d), em que s corres-
ponde ao número do segmento na memória virtual e d ao deslocamento 
dentro do segmento s, onde está localizado o item referenciado.
122 Sistemas Operacionais
Para Deitel, Deitel e Choffnes (2005), o sistema operacional faz uso 
de três diferentes estratégias para a tradução de endereços de segmen-
tação: a tradução de endereço de segmentação por mapeamento 
direto, na qual o processo faz referência a um endereço de memória 
virtual para identificar onde o segmento está armazenado na memó-
ria principal; o compartilhamento em um sistema de segmentação, 
em que a sobrecarga do compartilhamento dos segmentos pode ser 
menor que o compartilhamento das páginas, pois as estruturas de da-
dos a serem compartilhadas podem crescer ou diminuir sem alterar 
as informações; e a proteção e controle de acesso em sistemas de 
segmentação, que busca criar um esquema de implementação de pro-
teção de memória nos sistemas de segmentação com base nas chaves 
de proteção de memória, no qual cada processo está vinculado a um 
valor (chave de proteção). Essa última estratégia é implementada na 
arquitetura Intel IA-64.
Como visto, há diversos mecanismos a serem utilizados pelo sis-
tema operacional para realizar a tradução de endereçamento por 
segmentação.
4.2.2.3 Sistemas de segmentação/paginação
Os sistemas operacionais da década de 1960, como o MULTICS e 
o TSS, combinavam os conceitos de paginação e segmentação. Nessa 
abordagem, os segmentos ocupam uma ou mais páginas. Nem todas 
as páginas do segmento precisam estar na memória principal simulta-
neamente, e as páginas contíguas na memória virtual não necessitam 
ser contíguas na memória principal. O endereço da memória virtual é 
implementado pela representação v = (s, p, d), em que s corresponde 
ao número do segmento; p ao número da página dentro do segmento; 
e d ao deslocamento dentro da página que armazena o item.
4.2.3 Gerenciamento
Na seção anterior, abordamos a organização da memória virtual, o 
uso de paginação e segmentação e os sistemas que combinam essas 
duas técnicas. Nesta seção, analisaremos as possíveis formas de geren-
ciamento da memória virtual.
Memória real e virtual 123
O conceito de localidade é fundamental para a definição das estra-
tégias de gerenciamento de memória virtual, apoiada no tempo ou no 
espaço. Esse conceito afirma que um processo tende a referenciar a me-
mória principal seguindo padrões altamente localizados. Trazendo isso 
para o mundo computacional, nos sistemas de paginação, os processos 
tendem a requisitar certos subconjuntos de páginas com maior assidui-
dade (tempo), e essas páginas tendem a ser contíguas entre si (espaço).
Conforme Deitel, Deitel e Choffnes (2005), o gerenciamento de 
memória virtual pode fazer uso de diferentes estratégias, como a 
estratégia de busca na memória virtual, responsável por definir 
quando as páginas ou os segmentos serão movimentados do arma-
zenamento secundário para a memória principal. Essa técnica pode se 
dividir em dois tipos de estratégia: a busca por demanda, que ocorre 
quando o sistema operacional fica esperando pela requisição feita pelo 
processopara utilizar uma página (Figura 10); e a busca antecipada, 
na qual o sistema operacional faz uso de heurísticas para tentar prever 
quais páginas ou segmentos serão requisitados pelos processos.
Figura 10
Relação espaço-tempo da política paginação por demanda
Fonte: Deitel; Deitel; Choffnes, 2005, p. 308.
F F F F F
F é o tempo médio de uma busca de página
Processo em 
execução
Uma 
moldura de 
página
Espera de 
página
Espera de 
página
Espera de 
página
Espera de 
página
Espera de 
página
Al
oc
aç
ão
 d
e 
m
em
ór
ia
 fí
si
ca
Tempo de 
“relógio”
124 Sistemas Operacionais
Outra possível estratégia é a estratégia de substituição, em que 
o sistema operacional define qual página ou segmento deverá ser 
substituído quando a memória principal estiver cheia. Podemos dividir 
em oito tipos de estratégia:
1. Substituição aleatória de páginas (Random Page Replacement 
– RAND), na qual todas as páginas armazenadas na memória 
principal têm a mesma probabilidade de serem selecionadas e 
substituídas.
2. Substituição de páginas FIFO (First-In-First-Out), a qual opta por 
substituir a página que está há mais tempo no sistema e que, 
infelizmente, pode substituir as páginas mais utilizadas pelo 
sistema (Figura 11).
Figura 11
Substituição de páginas FIFO
Fonte: Deitel; Deitel; Choffnes, 2005, p. 311.
Referência 
de página Resultado
A é substituída
B é substituída
A – –
B A –
C B A
C B A
D C B
A D C
... ...
Substituição de 
páginas FIFO com
três páginas
A
B
C
A
D
A
Falta
Falta
Falta
Sem falta
Falta
Falta
3. Anomalia de Belady ou Anomalia FIFO, baseada nos estudos 
do matemático húngaro Laszlo Belady, nos anos 1960, que 
descobriu que o aumento do número de molduras de páginas 
não reduz o número de falhas – na verdade, aumenta (Figura 12).
Memória real e virtual 125
Figura 12
Anomalia de Belady
Fonte: Deitel; Deitel; Choffnes, 2005, p. 312.
Referência 
de página Resultado
Três “sem falta” Duas “sem falta”
A
B
C
D
A
B
E
A
B
C
D
E
Falta
Falta
Falta
Falta
Falta
Falta
Falta
Sem falta
Sem falta
Falta
Falta
Sem falta
Falta
Falta
Falta
Falta
Sem falta
Sem falta
Falta
Falta
Falta
Falta
Falta
Falta
A – –
B A –
C B A
D C B
A D C
B A D
E B A
E B A
E B A
C E B
D C E
D C E
Substituição de 
páginas FIFO com
três páginas disponíveis
A – – –
B A – –
C B A –
D C B A
D C B A
D C B A
E D C B
A E D C
B A E D
C B A E
D C B A
E D C B
Substituição de 
páginas FIFO com
quatro páginas disponíveis
4. Substituição da página menos recentemente usada 
(Least-Recently-Used – MRU), que faz uso do conceito de 
localidade temporal, substituindo a página que ficou mais tempo 
armazenada na memória sem ser referenciada (Figura 13).
Figura 13
Substituição de página menos recentemente usada (MRU) 
Fonte: Deitel; Deitel; Choffnes, 2005, p. 313.
Referência 
de página Resultado
A – –
B A –
C B A
B C A
B C A
A B C
D A B
A D B
B A D
F B A
B F A
Substituição de 
página MRU com três 
páginas disponíveis
A
B
C
B
B
A
D
A
B
F
B
Falta
Falta
Falta
Sem falta
Sem falta
Sem falta
Falta
Sem falta
Sem falta
Falta
Sem falta
126 Sistemas Operacionais
5. Substituição de página menos frequentemente usada 
(Least-Frequently-Used – MFU), a qual decide por substituir a 
página que está sendo menos requisitada com base na heurística 
de que provavelmente não será requisitada novamente no futuro.
6. Substituição de página não usada recentemente 
(Not-Used-Recently – NUR), que se aproxima da MRU, com 
pouca sobrecarga, fazendo uso de um bit referenciado ou bit 
acessado, o qual indica se a página foi requisitada ou não, e um 
bit modificado, o qual indica se a página foi modificada ou não.
7. Substituição de página do tipo relógio, que organiza as páginas 
em uma lista circular. O sistema operacional Linux faz uso de 
uma variação do algoritmo do relógio.
8. Substituição de página longínqua, que cria um grafo 2 (Figura 14) 
de acesso para mapear os padrões de requisição do processo, 
substituindo a página não requisitada mais distante no grafo por 
uma nova página.
Figura 14
Grafo utilizado pela estratégia de substituição de página longínqua
Fonte: Deitel; Deitel; Choffnes, 2005, p. 317.
B
EC
F
D
G
L
M N O
P
Q
H
A * Indica uma página 
referida
Q é escolhida para 
substituição
Um possível problema para o sistema de memória virtual com pa-
ginação é que, ao requisitar uma página, todas as molduras de página 
estão ocupadas naquele momento. Quando isso ocorre, cabe ao sis-
tema, além de carregar a nova página, decidir qual deverá ser retira-
Grafos são estruturas matemáti-
cas representadas pela fórmula 
G (V, E), sendo V os vértices 
(ou nós) e E (edges - arestas) 
os segmentos que ligam dois 
vértices.
2
Memória real e virtual 127
da da memória principal para alocar a nova. Desse modo, temos uma 
substituição de páginas. Essa estratégia pode ser comparada com a de 
substituição de páginas ideal (Theoreticallly Optimal Page Replacement 
Algorithm – OPT), a qual busca obter o desempenho ideal substituindo 
as páginas que não serão requisitadas futuramente.
4.3 Questões de projeto e implementação 
Vídeo Nas seções anteriores, abordamos possíveis técnicas empregadas 
na organização e no gerenciamento da memória real e virtual. Com 
base em estudos e análises realizados por projetistas, cientistas e ma-
temáticos, algumas dessas técnicas são teóricas e ainda não empre-
gadas, por uma possível limitação de tecnologia ou mesmo por não 
serem a melhor solução para o problema.
Nesta seção, mudaremos o nosso foco da teoria para a prática do 
projeto, discutindo quais são as preocupações reais dos projetistas 
para que os sistemas operacionais consigam organizar e gerenciar os 
sistemas de paginação. Depois disso, analisaremos algumas opções de 
implementação, isto é, a conversão do projeto em ações reais a serem 
executadas pelo sistema operacional no que se refere à memória.
4.3.1 Questões de projeto para sistemas de 
paginação
Quando tratamos dos algoritmos de alocação (substituição) de pá-
gina temos duas abordagens: a local, que aloca uma porção fixa de 
memória para cada um dos processos em execução; e a global, que 
considera todos os processos como uma unidade, ignorando as suas 
características individuais.
Podemos citar como exemplos de estratégias de substituição de 
página global a estratégia MRU global (gMRU), que substitui a pági-
na menos usada recentemente em todo o sistema; e a estratégia 
SEQ (sequência), que usa a estratégia MRU para substituir as páginas 
até que uma sequência de falta de página seja detectada. Quando isso 
ocorre, o sistema passa a utilizar a estratégia de substituição da página 
usada mais recentemente (UMR).
128 Sistemas Operacionais
Para medir se o gerenciamento de memória virtual está sen-
do executado de modo eficiente, o sistema operacional faz uso da 
taxa de falta de página. O algoritmo de frequência de falta de 
página (Page-Fault-Frequency – PFF) realiza o ajuste do conjunto de 
páginas residente do processo, isto é, as páginas do processo que 
estão alocadas em memória, com base na frequência com que esse 
processo acusa a falta de páginaou no tempo entre as faltas de 
página, chamado de tempo entre faltas do processo. Uma vantagem 
desse algoritmo é que ele ajusta o conjunto de páginas residente 
de um processo de maneira dinâmica, de acordo com a mudança 
no comportamento do processo.
A teoria do conjunto de trabalho para o comportamen-
to do programa, proposta pelo cientista da computação 
Peter J. Denning, afirma que para um programa ser executado de 
modo eficaz o sistema deve manter na memória principal apenas 
as páginas que fazem parte do conjunto de trabalho corrente do 
processo. Caso isso não aconteça, o sistema pode armazenar pá-
ginas desnecessárias (thrashing), comprometendo a utilização do 
processador. A principal meta do gerenciamento de memória do 
conjunto de trabalho é reduzir a alocação incorreta de memória.
Quando não são mais solicitadas por um processo, as páginas 
devem ser retiradas de seu conjunto de trabalho. Porém, as inati-
vas podem permanecer na memória principal durante um longo 
período, até que sejam detectadas pela estratégia de gerenciamen-
to de memória utilizada pelo sistema operacional. Uma possível 
solução para esse problema seria o processo emitir um comando 
de liberação voluntária da página, informando ao sistema que esta 
não é mais necessária.
Alguns sistemas melhoram o desempenho e a utilização de me-
mória fazendo uso de diferentes tamanhos de páginas. Segundo 
Deitel, Deitel e Choffnes (2005), os projetistas de sistema operacio-
nal podem optar por três diferentes tamanhos de página:
Memória real e virtual 129
O tamanho de 
página pequeno, 
que reduz a 
fragmentação interna 
e permite a redução 
da quantidade de 
memória necessária 
para conter o 
conjunto de trabalho 
de um processo.
O tamanho de 
página grande, que 
reduz o desperdício de 
memória provocado 
pela fragmentação 
de tabela e permite à 
entrada da TLB mapear 
uma região maior da 
memória, melhorando 
o desempenho.
Os tamanhos 
diferentes de 
página, que criam 
a possibilidade 
de fragmentação 
externa.
Vy
ac
he
sl
av
ik
us
/ S
hu
tte
rs
to
ck
Segundo Tanenbaum e Bos (2015), a maioria dos computadores 
possui um único espaço para endereçamento de programas e dados, 
conforme Figura 15. Caso o espaço seja grande o suficiente, tudo ocor-
rerá bem; do contrário, os projetistas e desenvolvedores terão de se es-
forçar para acomodar os programas e dados em um espaço insuficiente.
Figura 15
Espaço de endereçamento único (a) – Espaço de Programas (I) e Dados (D) separados 
Fonte: Tanenbaum e Bos, 2015, p. 136.
Espaço de 
endereçamento único 
Dados
Programa Programa
0 0
232 232
Espaço I Espaço D
Dados
Página não utilizada
(a) (b)
Uma forma de compartilhamento de recursos pode ser feita pelo 
compartilhamento de bibliotecas, as Dynamic-link Library (DLLs) – bi-
bliotecas de ligação dinâmica –, utilizadas no sistema operacional 
Windows, desenvolvido pela Microsoft. Quando um programa mul-
tiusuário é executado, ao invés de carregar mais de uma vez os seus 
recursos em memória, se ele faz uso de bibliotecas compartilhadas, 
estas são alocadas somente uma única vez.
130 Sistemas Operacionais
4.3.2 Questões de implementação
Conforme Tanenbaum e Bos (2015), existem quatro situações em 
que o sistema operacional precisa se envolver com a paginação:
A
B
C
D
Na criação do processo, quando o sistema operacional precisa de-
terminar o tamanho inicial do programa e realizar a criação da tabela 
de páginas a ser usada por ele.
No tempo de execução do processo, quando a MMU deve ser reini-
cializada e a TLB limpa os registros do processo anterior.
Na finalização do processo, quando o sistema operacional libera 
a tabela de páginas, as páginas e o espaço em disco ocupado pelas 
páginas.
Na ocorrência da falta de página, quando o sistema operacional reali-
za a leitura dos registradores (hardware) para identificar qual endereço 
virtual está gerando a falta de página, corrigindo o erro por meio do des-
carte de uma página que não está sendo utilizada e alocando uma nova 
página a ser usada pelo processo que deu erro.
Quando um processo requisita uma página que não está na me-
mória principal, a instrução responsável pela falta de página sofre um 
bloqueio em sua execução. Isso gera uma interrupção, que é encami-
nhada para o sistema operacional, ficando este responsável por pes-
quisar no disco rígido a página solicitada, carregando-a na memória e 
reiniciando a instrução.
O kernel (núcleo) Mach, desenvolvido pela Carnegie Mellon 
University, na década de 1980, serviu como base para o GNU Hurd, 
núcleo desenvolvido pelo projeto GNU, e o XNU kernel, utilizado nos 
sistemas operacionais dos computadores e dispositivos da Apple – 
macOS, iOS e watchOS.
O Mach foi pioneiro, pois nele os gerenciadores de memória 
passaram a ser executados no modo usuário (Figura 16). O processo 
do usuário faz a requisição de uma página. Ao descobrir que esta 
não está disponível na memória, o sistema operacional registra a 
sua falta, que é recebida pelo manipulador de faltas, responsável 
por informar ao paginador externo, executado no espaço do usuá-
Memória real e virtual 131
rio, sobre a necessidade da página. O paginador externo solicita 
a página ao disco (armazenamento secundário) que, ao recebê-la, 
devolve-a ao manipulador de faltas. Este a entrega ao manipulador 
de MMU, que gera o mapa da página necessário para a continuidade 
da execução do processo.
Figura 16
Tratamento de falta de página no espaço do usuário
Fonte: Tanenbaum e Bos, 2015, p. 144.
Espaço do 
usuário
Memória principal
Processo 
do usuário Paginador
externo
Manipulador 
de faltas
Manipulador 
de MMU
1. Falta 
de página
2. Página 
necessária
4. Página 
chega 
5. Aqui está a 
página 
6. Mapa 
da página
3. Solicitação de página 
Disco
Espaço do 
núcleo
A vantagem dessa abordagem está na modularidade e flexibilidade 
que são concedidas ao código. No entanto, a principal desvantagem re-
side na sobrecarga criada pela comunicação entre o núcleo e o usuário, 
em virtude da necessidade de troca de mensagens entre as partes para 
executar o fluxo descrito.
Para compreender um 
pouco mais a implemen-
tação da memória virtual 
e a alocação de memória, 
leia a seção 4.3 da obra 
Sistemas operacionais: pro-
jeto e implementação.
TANENBAUM, A. S.; WOODHULL, 
A. S. 3. ed. Porto Alegre: Bookman, 
2008.
Livro
CONSIDERAÇÕES FINAIS
Neste capítulo, aprofundamos a nossa visão sobre a memória do 
computador, seja ela real ou virtual. Cada vez que um usuário solicita a 
execução de um programa, o sistema operacional deve selecionar quais 
são as páginas necessárias para que o programa seja executado. Elas de-
verão ser armazenadas na memória principal, onde estarão disponíveis 
para serem utilizadas pelo processador. Caso não haja memória suficien-
te, este pode fazer uso da memória virtual para não impedir o processo. 
Tudo é feito antes da execução, em um sincronismo e uma velocidade 
imperceptíveis ao usuário. Esse fluxo se baseia em algoritmos e estudos 
feitos pelos projetistas de hardware/software, cientistas da computação e 
matemáticos, que buscam sempre identificar possíveis problemas e defi-
nir novas formas de projeto e implementação.
132 Sistemas Operacionais
Como estamos diante de uma constante evolução do hardware, acom-
panhada pela disseminação no uso do software – que se torna cada vez 
mais complexo e abrangente –, não seria surpresa se novas tecnologias 
surgissem e substituíssem os conceitos que até esse momento são consi-
derados como verdades absolutas.
ATIVIDADES
1. O que determina a estratégia de busca?
2. O que determina a estratégia de posicionamento?
3. O que determina a estratégia de substituição?
4. Qual a diferença entre os endereços virtuais e os endereços físicos?
5. Qual o papel da MMU?
REFERÊNCIAS
DEITEL, H. M.; DEITEL, P. J.; CHOFFNES, D. R. Sistemas operacionais. São Paulo: Pearson 
Universidades, 2005.
TANENBAUM, A. S.; BOS, H. Sistemas Operacionais Modernos. São Paulo: PearsonUniversidades, 2015.
Segurança em sistemas operacionais 133
5
Segurança em sistemas 
operacionais
Ao falarmos de segurança em sistemas operacionais, focamos 
as medidas tomadas para evitar o acesso não autorizado ao siste-
ma, aos seus recursos e às informações sensíveis armazenadas no 
computador. Além dessas questões, o sistema deve ser flexível e 
resiliente contra as tentativas de invasão e incapacitação do com-
putador, fazendo uso de mecanismos para proteger o hardware e 
os seus serviços de possíveis invasores.
Neste capítulo, abordaremos os seguintes assuntos: a criptogra-
fia e formas de se garantir que a mensagem consiga ser interpre-
tada somente pelo destinatário correto; a autenticação, o meio de 
identificar se o usuário realmente é quem ele diz ser; o controle de 
acesso, o modo que garante que o usuário tenha somente acesso 
às funcionalidades que são destinadas a ele; os ataques à segurança 
do computador, da rede de computadores ou dos sistemas opera-
cionais; a prevenção de ataques e soluções de segurança, as ações 
possíveis para responder ou se proteger dos ataques; e a comuni-
cação e protocolos de segurança, que analisam as vulnerabilidades 
da comunicação entre computadores, bem como os protocolos 
implementados para garantir a segurança dessas comunicações.
5.1 Criptografia 
Vídeo De acordo com Deitel, Deitel e Choffnes (2005), a criptografia tra-
ta da codificação e decodificação de dados, de modo que esses pos-
sam ser interpretados apenas pelos receptores a que se destinam. 
Isso ocorre devido à transformação dos dados por meio de uma cifra 
134 Sistemas Operacionais
ou sistema criptográfico 1
Cifra ou sistema criptográfico é 
um algoritmo matemático para a 
criptografia das mensagens.
1 , que realiza a criptografia dos dados (tex-
to comum) em um texto cifrado, fazendo uso de uma chave como 
entrada. Ao utilizar uma chave diferente, a cifra gerará um texto 
cifrado diferente. Essa ação evita que receptores indesejados, que 
não possuem uma chave para decriptação, consigam transformar o 
texto cifrado em um texto comum novamente.
Segundo Deitel, Deitel e Choffnes (2005), os dois principais ti-
pos de cifras utilizadas na Antiguidade eram a cifra de substitui-
ção, que, ao encontrar uma letra no texto comum, era substituída 
por outra. Devido à sua criação ser atribuída a Júlio César 2
Caio Júlio César foi um líder mili-
tar e político romano responsável 
pela transformação da República 
romana em um Império.
2
 , essa 
modalidade também é conhecida como cifra de César; e a cifra de 
transposição, na qual a ordem das letras é alterada. Chamados de 
algoritmos restritos, a desvantagem no uso dessas estratégias re-
side na necessidade de o emissor e o receptor da mensagem se 
lembrarem do algoritmo utilizado, além de mantê-lo em segredo, o 
que se torna impraticável quando isso abrange um grande número 
de pessoas.
Os sistemas criptográficos modernos usam algoritmos que 
atuam nos bits ou grupos de bits (blocos) dos dados, e não nas 
letras, como os algoritmos antigos. As chaves, utilizadas para a 
criptografia e decriptação, são cadeias binárias com uma chave de 
tamanho determinado. Por exemplo, um sistema criptográfico de 
64 bits usa uma chave de 64 bits. Ao analisarmos o tamanho da 
chave utilizada, podemos afirmar que quanto maior a chave, maio-
res serão o tempo e a capacidade computacional necessários para 
desvendar (quebrar) a cifra. Também será menor o desempenho 
do sistema, pois o tempo de criptografia e de decriptação serão 
maiores do que ao utilizar uma chave menor.
A criptografia por chave secreta, ou criptografia simétrica, é um 
exemplo de sistema criptográfico moderno, que utiliza a mesma 
chave secreta tanto para criptografar quanto decriptar um texto. 
Nesse sistema, o emissor criptografa a mensagem fazendo uso de 
uma chave secreta, enviando a mensagem criptografada ao recep-
tor, que usa a mesma chave secreta para decriptar a mensagem 
recebida (Figura 1). 
Segurança em sistemas operacionais 135
Figura 1
Fluxo de uma mensagem fazendo uso de chave secreta
Decripta
Emissor Texto comum 
Criptografa
Chave 
simétrica 
secreta 
Texto cifrado
XY%#?42%YCompre 100 ações 
da empresa X
 Meio de 
comunicação 
(como internet)
Mesma chave 
simétrica secreta 
Compre 100 
ações da 
empresa X
Receptor
Texto comum
Fonte: Deitel; Deitel; Choffnes, 2005, p. 564.
A limitação desse sistema reside na necessidade de o emissor e o 
receptor encontrarem uma forma segura de compartilhar a chave se-
creta utilizada. Uma possível solução é fazer uso de uma central de dis-
tribuição de chaves (Key Distribution Center – KDC), que gera uma chave 
de sessão utilizada pelo emissor e o receptor durante uma transação 
(Figura 2).
Figura 2
Uso de uma central de distribuição de chaves 
Receptor
Central de distribuição 
de chaves (KCD) 
Chave de sessão 
criptografada com a 
chave KDC do receptor 
Chave de sessão 
criptografada com a 
chave KDC do emissor
“Quero me 
comunicar com 
o receptor”
Criptografa Criptografa
Emissor
1
3
2
3
Chave de sessão (chave 
secreta simétrica)
Fonte: Deitel; Deitel; Choffnes, 2005, p. 564.
136 Sistemas Operacionais
Podemos citar como exemplos de algoritmos de criptografia simé-
trica: o padrão para criptografia de dados (Data Encryption Standard 
– DES), desenvolvido na década de 1970 pela IBM e utilizado pelo go-
verno norte-americano e pelo Instituto Nacional Americano de Padrões 
(American National Standards Institute – ANSI) até o final da década de 
1990, quando, então, não foi mais considerado seguro; a partir daí, foi 
substituído pelo Triple DES ou 3DES, que aplicava o padrão DES por 
três vezes em cada um dos blocos de dados, utilizando chaves diferen-
tes. O resultado foi considerado seguro, porém, em virtude das três 
passagens do DES, a sua execução aumentava a sobrecarga da cripto-
grafia, reduzindo o desempenho da operação. Em 2000, foi substituído 
pelo Padrão Avançado de Criptografia (Advanced Encryption Standard 
– AES), que utiliza chaves e blocos de 128, 192 e 256 bits.
A criptografia por chave pública também é um exemplo de sistema 
criptográfico moderno. Foi desenvolvida na década de 1970 por dois 
pesquisadores da Universidade de Stanford, Whitfield Diffie e Martin 
Hellman, que buscavam uma solução para a necessidade de compar-
tilhamento das chaves simétricas. Esse sistema usa duas chaves: uma 
pública – distribuída livremente e utilizada para cifrar a mensagem; e 
outra privada, que é mantida em segredo pelo seu proprietário e é uti-
lizada para decifrar a mensagem (Figura 3).
Figura 3
Fluxo de uma mensagem fazendo uso de chave pública 
Criptografa
Emissor
Criptografa
Receptor
Meio de comunicação 
(como internet)Compre 100 ações da 
empresa X
Texto comum 
Compre 100 ações da 
empresa X
Texto comum 
XY%#?42%Y
Texto cifradoChave pública 
do receptor
Chave privada 
do receptor
Fonte: Deitel; Deitel; Choffnes, 2005, p. 566.
Os algoritmos de chave pública são denominados funções de uma 
via ou armadilha, pois a ação de cifrar uma mensagem utilizando uma 
Segurança em sistemas operacionais 137
chave pública não requer muitos recursos computacionais. Entretanto, 
a sua decriptação, sem ter acesso à chave privada, necessita de tempo 
e de recursos computacionais elevados.
São exemplos de algoritmos de criptografia por chave pública: o al-
goritmo Rivest-Shamir-Adleman (RSA), utilizado amplamente na internet 
em navegadores Web, servidores e sistemas de e-mail, foi desenvolvi-
do por Ron Rivest, Adi Shamir e Leonard Adleman, pesquisadores do 
MIT na década de 1970; e o algoritmo Privacidade Razoável (Pretty 
Good Privacy – PGP), desenvolvido em 1991 pelo pesquisador Philip 
Zimmermann, utilizado na criptografia de mensagens e arquivos de 
e-mail, confirmando a identidade do emissor ou do conteúdo enviado.
Uma forma de assinar mensagens de e-mail e outros documentos 
digitais para garantir aidentidade do emissor é o uso de assinaturas 
digitais. A assinatura digital submete o documento a uma função de 
resumo de sentido único, que produz um resultado, chamado resumo 
(hash), que possui um tamanho fixo, independentemente do tamanho 
do documento original. Como exemplos de função de resumo de sen-
tido único temos: o compêndio de mensagens 5 (Message Digest 5 – 
MD5), que gera um hash de 16 bytes; e o algoritmo hash seguro (Secure 
Hash Algorithm – SHA-1), que gera um hash de 20 bytes. Ao obter o 
resumo, o proprietário do documento usa uma chave privada sobre 
ele, gerando um bloco de assinatura, que é anexado ao documento 
enviado para o receptor (Figura 4). Quando o documento é recebido, o 
receptor realiza a decriptação do resumo, via MD5 ou SHA-1. Ao mes-
mo tempo, ele realiza a decriptação do bloco de assinatura, fazendo 
uso de uma chave pública. Caso o valor do resumo decriptado não seja 
igual ao valor do bloco de assinatura decriptado, o documento é consi-
derado adulterado.
Figura 4
(a) Cálculo de um bloco de assinatura. (b) Documento recebido pelo receptor
Bloco de 
assinatura
 Documento 
original 
D(resumo)Resumo
Documento 
reduzido a um 
valor resumo 
Valor resumo 
submetido à D
(a)
 Documento 
original 
D(resumo)
(b)
{
Fonte: Tanenbaum; Bos, 2015, p. 384.
138 Sistemas Operacionais
Nos anos 2000, o governo dos EUA aprovou o algoritmo de assinatu-
ra digital (Digital Signature Algorithm – DSA) que concedeu à assinatura 
digital a mesma validade judicial de uma assinatura por escrito.
Uma forma de compartilhar a chave pública com o receptor é 
anexar um certificado à mensagem, com o nome do usuário e a 
chave pública, que é fornecida por um terceiro confiável. Nomea-
mos de autoridade certificadora (AC) a empresa que realiza a va-
lidação dos certificados. Para que um receptor possa realizar a 
decriptação de um certificado, ele precisa da chave pública da AC 
fornecida por uma infraestrutura de chave pública, ou carregada 
previamente, como no caso dos navegadores Web.
5.2 Autenticação 
Vídeo Uma das grandes preocupações do sistema operacional no que 
se refere à segurança é identificar os usuários que o estão acessan-
do, além de definir o nível de permissão de acesso que cada usuário 
possui. Conforme Tanenbaum e Bos (2015), a maioria dos métodos de 
autenticação de usuários tem como base um dos três princípios gerais 
da identificação:
A
B
C
Alguma coisa que o usuário sabe, como uma senha, um número de 
identificação pessoal (Personal Identification Number – PIN) etc.
Alguma coisa que o usuário tenha em posse, por exemplo, um cra-
chá, uma carteira de identidade, uma chave, e assim por diante.
Alguma coisa que o usuário é, ou seja, uma característica exclusiva 
dele – impressão digital, varredura de retina, assinatura, entre outras.
Para se garantir uma segurança adicional, o sistema pode fazer uso 
de dois desses princípios.
Antes de causar algum problema, cabe ao invasor obter acesso ao 
sistema, passando pelo procedimento de autenticação. Erroneamen-
te conhecidos como hackers, as pessoas que tentam invadir sistemas 
computacionais sem a devida autorização são nomeados crackers.
Para você compreender mais a 
criptografia e suas aplicações na 
segurança de dados, recomen-
damos os vídeos Entendendo 
conceitos básicos de criptografia 
(parte 1 e 2), publicados no 
canal Fábio Akita.
Parte 1. Disponível em:
https://www.youtube.com/
watch?v=CcU5Kc_FN_4. 
Acesso em: 7 ago. 2020.
Parte 2. Disponível em: 
https://www.youtube.com/
watch?v=HCHqtpipwu4. Acesso 
em: 7 ago. 2020.
Vídeos
hacker: pessoa que busca 
conhecer e/ou modificar os 
aspectos mais internos de 
dispositivos, programas e redes 
de computadores.
 cracker: indivíduo que pratica 
a quebra (ou cracking) de um 
sistema de segurança de modo 
ilegal.
Glossário
https://www.youtube.com/watch?v=CcU5Kc_FN_4
https://www.youtube.com/watch?v=CcU5Kc_FN_4
https://www.youtube.com/watch?v=HCHqtpipwu4
https://www.youtube.com/watch?v=HCHqtpipwu4
Segurança em sistemas operacionais 139
A proteção por senha é considerada o esquema de autenticação 
mais comum, no qual o usuário define e memoriza uma senha que é 
fornecida ao sistema, para que ele possa acessar o sistema ou um apli-
cativo. Uma das desvantagens dessa estratégia se fundamenta no fato 
de que os usuários, comumente, definem senhas de fácil memoriza-
ção, usando informações pessoais, como nome do próprio usuário ou 
de um membro da família, nome do animal de estimação, data de ani-
versário, endereço residencial, livro ou filme favorito etc. O problema 
disso é que alguém mal-intencionado, de posse dessas informações, 
pode tentar acessar o sistema várias vezes (quebra por força bruta), 
fazendo uso das várias senhas possíveis, até conseguir o acesso. Para 
evitar a quebra por força bruta, os sistemas passaram a limitar o nú-
mero de tentativas de aceso a serem realizadas em um terminal por 
determinado usuário.
O UNIX utiliza criptografia para armazenar suas senhas. Quando o 
usuário digita a senha, ela é criptografada e comparada com a senha 
armazenada no arquivo de senhas. Além disso, o UNIX possui o enve-
lhecimento de senha (password aging), que permite ao administrador 
definir o período de validade das senhas, que deverá ser redefinida 
pelo usuário quando expirar.
Outra forma de tornar um sistema seguro é fazer uso da biometria, na 
qual o usuário é identificado por uma informação pessoal exclusiva, como 
a impressão digital, uma varredura da retina ou íris etc. A Microsoft incluiu 
a opção de autenticação por biometria com o Windows 2000 e Windows 
XP, fazendo uso da Interface para Programação de Aplicação Biométrica 
(Biometric Application Programming Interface – BAPI).
Também podemos citar o uso dos cartões inteligentes (smart cards) 
(Figura 5). Parecidos com os cartões de crédito, eles podem ser utiliza-
dos para a autenticação do usuário ou para armazenar dados – chaves 
privadas, certificados digitais etc.
Figura 5
Uso de um cartão inteligente (smart card) para autenticação
Computador 
remoto
Cartão 
inteligente
2. Cartão 
inteligente calcula 
a resposta 
Leitor de cartão 
inteligente
1. Desafio enviado ao 
cartão inteligente 
3. A resposta 
é devolvida
Fonte: Tanenbaum; Bos, 2015, p. 404.
140 Sistemas Operacionais
Buscando melhorar a autenticação do usuário, alguns sistemas apli-
cam a autenticação de dois fatores – usam dois meios para identificar 
o usuário, no qual ele utiliza inicialmente a biometria ou o cartão inteli-
gente, acompanhado de uma senha.
As preocupações com segurança não se resumem somente à identifi-
cação dos usuários. Conforme Deitel, Deitel e Choffnes (2005), estima-se 
que 70% a 90% dos ataques a redes corporativas é realizado internamen-
te – usuários da própria empresa (funcionários ou terceiros), que devida-
mente logados roubam ou compartilham informações sigilosas e valiosas 
da empresa. Podemos citar como formas de ataques internos:
a. As bombas lógicas: códigos inseridos no sistema operacional 
de produção da empresa e que dependem da inserção diária de 
uma senha para que nada ocorra. Caso o autor da bomba lógica 
seja demitido, a bomba lógica não vai mais ser alimentada com 
uma senha e acabará “explodindo”.
b. Os alçapões (trap door): códigos inseridos por um programador 
para evitar uma verificação, por exemplo, acessando o sistema 
com o login 12345, sem a necessidade de informar uma senha. 
Isso pode ser evitado com a realização de revisões de código 
constantes.
c. O logro na autenticação do usuário: tela criada por um 
desenvolvedor muito parecida com a tela de autenticação original 
(Figura 6), que é executada nos computadores de uma rede, 
normalmente em redes de computadores públicos, utilizadas em 
universidades e colégios. Ao fazer uso da tela de autenticação 
falsa, o programador coleta os dados de autenticação dos 
usuários. A única forma de se evitar o logro na autenticação é 
combinar teclas ao processo de autenticação,como o que é feito 
no Windows, que solicita ao usuário apertar as teclas Ctrl + Alt + Del 
para exibir a tela de autenticação, desconectando o usuário que 
estava logado previamente naquele computador, encerrando, 
assim, qualquer execução prévia.
Figura 6
(a) Tela correta de autenticação. (b) Tela de autenticação adulterada
Usuário:
(a)
Usuário:
(b)
Fonte: Tanenbaum; Bos, 2015, p. 407.
Segurança em sistemas operacionais 141
Para tentar evitar essa ameaça dos ataques internos à segurança, 
o MIT desenvolveu um protocolo de código-fonte aberto, denominado 
Kerberos, que usa criptografia de chave secreta, utilizado na autenti-
cação dos usuários ou para manter a privacidade da comunicação e 
integridade dos dados de uma rede.
O Kerberos utiliza um servidor de autenticação e um serviço de 
concessão de bilhetes (Ticket Granting Service – TGS), que seguem 
o seguinte fluxo:
O usuário envia o 
TGT decriptado ao 
TGS e solicita um 
bilhete de serviço, 
que autorizará ao 
usuário o acesso 
aos serviços da 
rede.
Se o TGT for 
válido, o TGS vai 
gerar um bilhete 
de serviço que 
é criptografado 
fazendo uso da 
chave secreta do 
usuário.
O usuário 
fornece login 
e senha para 
o servidor de 
autenticação.
Caso os dados 
fornecidos sejam 
válidos, o servidor 
de autenticação 
emite um bilhete 
de concessão de 
entrada (Ticket-
-Granting Ticket 
– TGT), que é 
criptografado 
fazendo uso da chave 
secreta fornecida 
pelo usuário.
Ao receber o 
bilhete de serviço, 
o usuário o 
decripta e o utiliza 
para acessar os 
recursos da rede.
Para evitar o uso indiscriminado do bilhete de serviço, ele possui um 
prazo de expiração, que pode ser renovado ou não pelo TGS.
Em busca de simplificar o processo de autenticação, foram criados 
os sistemas de assinatura única, que permitem ao usuário acessar o 
sistema somente uma vez, utilizando uma única senha, que permite 
o acesso a várias aplicações do sistema em diferentes computadores. 
Exemplos de assinatura única:
a. Scripts de acesso de estações de trabalho: enviam a senha do 
usuário aos servidores de aplicação, autenticando-o e permitindo 
o seu acesso futuro.
b. Scripts de servidor de autenticação: realizam a autenticação 
dos usuários fazendo uso de um servidor responsável por 
gerenciar as conexões dos usuários e das aplicações acessadas 
por eles. O seu uso é considerado mais seguro do que os scripts 
de acesso de estações de trabalho, pois a senha é armazenada 
em um servidor, e não na estação do cliente.
142 Sistemas Operacionais
c. Autenticação por ficha (token): gerada quando o usuário é 
autenticado, habilitando-o a acessar as aplicações desejadas. 
Com o intuito de garantir a segurança do sistema que gera o 
token, ele é protegido com o uso de criptografia ou senha única. 
Para implementar essa autenticação, as aplicações devem ser 
adaptadas a fim de usarem tokens como acesso.
Entre as empresas que desempenharam um papel mais ativo 
no uso de assinatura única, podemos destacar: a Liberty Allian-
ce Project, uma organização fundada em 2001 para estabelecer 
padrões, protocolos e melhores práticas para autenticação em 
sistemas computacionais; a Microsoft, que utiliza o Windows Live 
ID para que os usuários acessem os seus aplicativos; e a Novell, 
empresa desenvolvedora do sistema operacional de rede Novell 
NetWare, que fazia uso do SecureLogin.
5.3 Controle de acesso 
Vídeo Cabe ao sistema operacional proteger o computador contra o uso 
indevido e mal-intencionado dos recursos computacionais, protegen-
do os seus serviços e suas informações de usuários ou softwares que 
tenham conseguido acessá-lo. Isso é feito pelos direitos de acesso – 
que protegem os recursos e serviços do computador contra a ação 
de usuários que podem representar algum risco para o sistema –, com 
restrição ou limitação das ações a serem executadas nos recursos. Os 
direitos de acesso são gerenciados por listas de controle de acesso ou 
por listas de capacidades (DEITEL; DEITEL; CHOFFNES, 2005).
A forma encontrada pelo sistema operacional para manter a segu-
rança é gerenciar o acesso aos dados e aos recursos internos. Isso é 
feito por meio de direito de acesso, que permite a inúmeros sujeitos 
(usuários, processos, programas etc.) acessarem vários objetos (discos, 
processadores, memória principal, processos, serviços, entre outros). 
O sistema operacional define a forma com que o usuário acessa o ob-
jeto pelo privilégio de acesso que é concedido a ele, que pode ser de 
leitura, escrita, execução, impressão etc. Os direitos de acesso podem 
ser: copiados, isto é, conceder o direito de acesso de um usuário para 
outro; transferidos, o direito de acesso de um usuário é entregue para 
outro usuário; ou propagados, há a possibilidade de um usuário copiar 
o seu direito de acesso para vários usuários.
Para que você se 
aprofunde no conceito 
de autenticação, sua 
necessidade e práticas, 
recomendamos o vídeo 
Ciclo de palestras Segu-
rança da Internet - CERT.
br: Autenticação, do canal 
NIC.br. O vídeo faz parte 
do ciclo de palestras 
focadas em segurança da 
internet.
Disponível em: https://
www.youtube.com/
watch?v=5QZRsH7vg5g. Acesso 
em: 6 ago. 2020.
Vídeo
 https://www.youtube.com/watch?v=5QZRsH7vg5g
 https://www.youtube.com/watch?v=5QZRsH7vg5g
 https://www.youtube.com/watch?v=5QZRsH7vg5g
Segurança em sistemas operacionais 143
Cabe ao sistema operacional proteger os objetos da ação dos sujeitos 
que podem de maneira inadvertida ou mal-intencionada colocar em risco a 
segurança do sistema operacional ou encerrar a execução das aplicações.
Uma coleção de direitos de acesso é chamada de domínio de prote-
ção, sendo representada por um par ordenado, contendo o nome do 
objeto e seus privilégios. Por exemplo, se um usuário possui permissão 
de leitura e escrita sobre o arquivo exemplo.txt, o seu domínio de prote-
ção será <exemplo.txt, {read, write}>.
De acordo com Deitel, Deitel e Choffnes (2005), o controle de acesso 
pode ser dividido em três níveis conceituais:
A
B
C
Modelo de segurança: define os sujeitos, objetos e privilégios de um 
sistema operacional.
Política de segurança: define para os usuários quais são os privilé-
gios que eles possuem. A política de segurança é definida pelo usuá-
rio ou administrador do sistema operacional.
Mecanismo de segurança: forma com que o sistema operacional realiza 
a implementação da política de segurança adotada por ele.
Ao analisar as políticas de segurança, em sua maioria, os sistemas 
operacionais optam pelo princípio do mínimo privilégio, no qual o 
usuário recebe permissão de acesso somente nos objetos necessá-
rios para a execução das suas atividades; o UNIX e o Linux utilizam o 
modelo de controle de acesso discricionário (Discretionary Access 
Control – DAC), que concede controle das permissões de um objeto 
ao seu criador. Já os sistemas governamentais, que processam dados 
sigilosos, usam o controle de acesso obrigatório (Mandatory Access 
Control – MAC), em que um esquema de permissão central é utilizado 
para gerenciar os sujeitos e os objetos.
Ao examinar os mecanismos de segurança, ou seja, as formas com 
que o sistema operacional implementa a sua política de segurança, o 
sistema operacional pode fazer uso das seguintes estratégias:
a. Matrizes de controle de acesso: utilizam uma matriz 3
Matriz é uma tabela organizada 
em linhas e colunas no formato 
m x n, em que m representa o 
número de linhas (horizontal), e 
n o número de colunas (vertical).
3
 para 
armazenar a relação dos sujeitos, armazenados nas linhas; e dos 
objetos, armazenados nas colunas. Ao adotar essa estratégia, o 
144 Sistemas Operacionais
sistema operacional usa o princípio do mínimo privilégio nos 
direitos de acesso. Isso é feito para impedir que um usuário 
acesse um objeto, caso não esteja devidamente descrito na 
matriz. Como vantagem desse modelo, podemos destacar a 
simplicidade. Como desvantagem, quando os sistemas são 
muito complexos, a matriz pode ficar muitogrande e com vários 
espaços vazios (Figura 7).
Figura 7
Matriz de controle de acesso 
Objeto 
Domínio Arquivo1 Arquivo2 Arquivo3 Arquivo4 Arquivo5 Arquivo6 Impressora1 Plotter2 
1 Leitura
Leitura 
Escrita
2 Leitura
Leitura 
Escrita 
Execução
Leitura 
Escrita
Escrita
3
Leitura 
Escrita 
Execução
Escrita Escrita
Fonte: Tanenbaum; Bos, 2015, p. 386.
b. Listas de controle de acesso: usam listas para armazenar os 
direitos de acesso. Essa estratégia pode ser implementada tanto 
para os sujeitos quanto para os objetos. Ao optar pelo uso das 
listas de controle de acesso, o sistema operacional também 
usa o princípio do mínimo privilégio. A vantagem desse modelo 
é não encontrarmos os espaços vazios, que podem ocorrer no 
armazenamento em matriz. Podemos citar como desvantagem a 
dificuldade de consultar várias listas para identificar os usuários 
que possuem direito de acesso à determinada aplicação.
c. Listas de capacidades: armazenam as capacidades, isto é, 
ponteiros ou fichas que concedem os privilégios aos sujeitos 
(Figura 8). Elas não podem ser modificadas, mas podem ser 
reproduzidas. A capacidade está vinculada a um objeto, sendo 
criada com ele. Quando a implementação da capacidade utiliza 
ponteiros, ela armazena o seu endereço na memória principal, 
o que acelera o acesso ao objeto. A desvantagem dessa forma 
de implementação é que, caso o objeto mude de endereço, 
o seu ponteiro também deverá ser modificado. Quando a 
implementação utiliza fichas, ele usa um mecanismo de hash 
para criar uma sequência exclusiva de bits. Como desvantagem 
Segurança em sistemas operacionais 145
no uso de listas de capacidades, podemos citar o problema do 
“objeto perdido”, que ocorre quando a última capacidade de um 
objeto é destruída, impedindo que o objeto seja acessado depois 
disso. A solução para esse problema é fazer com que o sistema 
operacional mantenha pelo menos uma capacidade por objeto. 
Cabe ao sistema operacional controlar a propagação e monitorar 
as capacidades. Uma vantagem desse modelo ocorre quando a 
implementação da capacidade utiliza ponteiros, ela armazena o 
seu endereço na memória principal, o que acelera o acesso ao 
objeto. 
Figura 8
Lista de capacidades
C-list
F1
F2
F3
A
F1:R
F2:R
B
F1:R
F2:RW
F3:RWX
C
F2:R
F3:RX
Processo Processo
Espaço do 
usuário
Espaço 
do núcleo
Fonte: Tanenbaum; Bos, 2015, p. 389.
No Linux, cada um dos arquivos do sistema recebe atributos de con-
trole de acesso que vão definir as permissões de segurança do arquivo, 
ou seja, uma combinação das permissões de leitura (read – r), escrita 
(write – w) e execução (execute – x) que é atribuída a três níveis dife-
rentes: o do usuário, em que as permissões são concedidas ao dono 
do arquivo; o de grupo, que 
concede as permissões a um 
membro de um grupo; e, por 
fim, o nível outros, em que as 
permissões são atribuídas a 
um usuário que não é o dono 
do arquivo nem membro de 
um grupo.
A Figura 9 mostra a se-
quência de controle de aces-
so para os diretórios, links 
Para entender o controle 
de acesso e seu papel na 
segurança dos recursos 
do sistema operacional, 
assista ao vídeo Auten-
ticação ou autorização?, 
publicado pelo canal 
DevPleno.
Disponível em: https://
www.youtube.com/
watch?v=acGpu4z0azk. Acesso em: 
3 ago. 2020.
Vídeo
Figura 9
Atributos de controle de 
acesso no Linux
https://www.youtube.com/watch?v=acGpu4z0azk
https://www.youtube.com/watch?v=acGpu4z0azk
https://www.youtube.com/watch?v=acGpu4z0azk
146 Sistemas Operacionais
(caminhos simplificados para diretórios) e arquivos no Linux composta 
das letras r, w e x, que vão indicar os privilégios de leitura (read), escrita 
(write) e execução (execute), respectivamente, atribuídos a eles.
5.4 Ataques à segurança 
De tempos em tempos, recebemos notícias relatando ataques ci-
bernéticos a corporações e empresas de comércio eletrônico. Fazendo 
uso de ataques de recusa de serviço (Denial-of-Service – DoS), vírus e 
vermes (worms), esses invasores podem levar à perda de bilhões de 
dólares roubando dados alheios. Nesta seção, vamos abordar possíveis 
formas de ataque aos sistemas operacionais.
Quando é realizado um ataque criptoanalítico, os invasores tentam 
decriptar um texto previamente cifrado sem possuir a chave para a de-
criptação. O objetivo desse tipo de ataque é descobrir a chave utilizada 
por meio do texto cifrado. O gerenciamento das chaves e das suas datas 
de expiração pode servir como forma de diminuir os ataques, pois, quan-
to maior o tempo de uso de uma chave, maior será o número de textos 
gerados que poderão ser utilizados para poder identificá-la.
Vírus é um código executável, normalmente anexado a uma mensa-
gem de e-mail ou oculto em um arquivo (áudio de música, vídeo, jogo 
etc.); para se reproduzir, o vírus se anexa ou se sobrescreve em outros 
arquivos do sistema operacional. Para Deitel, Deitel e Choffnes (2005), 
os vírus podem ser classificados em três tipos:
a. Vírus de setor de boot (inicialização): infecta o setor de boot do 
computador, fazendo com que ele seja inicializado com o sistema 
operacional e permitindo o controle do sistema.
b. Vírus transiente: anexo a uma aplicação do computador, 
sendo ativado e desativado quando a aplicação é executada ou 
encerrada, respectivamente.
c. Vírus residente: fica armazenado na memória do computador, 
agindo enquanto o computador estiver em funcionamento.
Uma possível forma de disseminação do vírus ocorre quando ele 
acessa uma aplicação de correio eletrônico instalada no computador 
infectado. O vírus usa a lista de contatos da aplicação e gera e-mails 
falsos, no qual ele se insere como anexo, que ao ser aberto pelo desti-
natário infecta o computador. Uma possível ação para minimizar esse 
Vídeo
Segurança em sistemas operacionais 147
tipo de disseminação é o uso de um antivírus, que examina os anexos 
dos e-mails recebidos, evitando o recebimento de e-mails maliciosos. 
Outra ação preventiva é a conscientização do usuário em não abrir 
e-mails enviados por desconhecidos ou e-mails suspeitos.
Um verme (worm) é um código executável que se propaga em uma 
rede infectando outros arquivos. Diferentemente do vírus, o verme não 
necessita da ação de um usuário ou de ser anexado a um arquivo; bas-
ta ter acesso a uma rede para conseguir rapidamente infectar os seus 
computadores. O verme se propaga buscando encontrar vulnerabilida-
des dos softwares e dos sistemas operacionais que, ao serem desco-
bertas, permitem a ele agir desativando um computador ou todos os 
que estão conectados a uma rede.
O antivírus pode atuar no combate aos vírus e vermes, porém ele é 
uma aplicação reativa, pois consegue atuar somente com vírus e ver-
mes conhecidos, sendo ineficiente contra vírus que não fazem parte da 
sua base de dados.
Cavalo de Troia (Trojan Horse) é um programa mal-intencionado que 
tem autorização para ser executado no sistema operacional, o que difi-
culta a sua identificação, visto que ele se assemelha aos programas do 
computador.
O programa de porta dos fundos (backdoor) é um vírus que per-
mite ao atacante o acesso completo aos recursos do computador 
infectado. Ele pode ser utilizado para capturar as senhas, os dados 
de cartão e outros dados sigilosos que são digitados pelo usuário do 
computador infectado.
Quando é realizado um ataque de recusa de serviço (Denial-of-
-Service – DoS), os invasores enviam muitos pacotes de dados contra 
servidores, saturando-os e impedindo que as solicitações dos verdadei-
ros usuários sejam atendidas. Os ataques de recusa de serviço podem 
levar à queda ou desconexão dos computadores atacados, comprome-
tendo sites Web ou até mesmo sistemas críticos. Esses ataques não 
afetam os dados armazenados nos servidores atacados, porém o tem-
po de indisponibilidade de serviço pode trazer altos prejuízos para os 
seus responsáveis.
O ataque de sistema de nome de domínio (Domain Name System – 
DNS) busca alterar o endereço utilizado por um site Web, redirecio-
nando os usuáriospara outro site, semelhante ao original, no qual os 
148 Sistemas Operacionais
usuários desavisados irão revelar dados sigilosos, como os seus logins 
e senhas de acesso.
O ataque de recusa de serviço distribuído ocorre quando os pacotes 
de dados são enviados de vários computadores, simultaneamente. Em 
muitos casos, esses computadores estão contaminados por um vírus, 
que permite ao invasor utilizar os seus recursos para efetuar o ataque. 
Esse tipo de ataque torna difícil a identificação do seu autor, visto que 
ele não é executado pelo computador do invasor.
Uma das atividades mais executadas pelos crackers é a exploração 
de vulnerabilidades das aplicações instaladas em um servidor. Essa ação 
torna muito difícil a vida dos administradores, em virtude do elevado 
número de aplicações instaladas, somado à descoberta diária de vul-
nerabilidades, fazendo-os depender da parceria e agilidade por parte 
dos desenvolvedores de software para criar/gerar possíveis correções. 
Um ataque que utiliza essa estratégia é o transbordamento de buffer, 
que ocorre quando um programa envia mais dados a um buffer do 
que ele consegue armazenar, substituindo os dados corretos por códi-
go mal-intencionado que pode permitir ao invasor acesso ao sistema.
Para Deitel, Deitel e Choffnes (2005), uma invasão de sistema é 
uma violação bem-sucedida da segurança do computador por um 
usuário externo não autorizado.
Uma forma de ataque popular entre os crackers é a desfiguração da 
Web, quando os invasores conseguem acessar, ilegalmente, o site Web 
de uma organização e alteram o seu conteúdo.
A utilização do Cavalo de Troia, de um programa de porta dos fundos 
ou mesmo uma vulnerabilidade de um programa ou do sistema operacio-
nal permite aos invasores acessarem servidores, por exemplo, explorando 
as falhas das aplicações de servidores Web, como o Microsoft Internet 
Information Services (IIS) ou o Apache HTTP Server; ou os computado-
res pessoais, por exemplo, explorando as falhas dos browsers.
5.5 Prevenção de ataques e 
soluções de segurança Vídeo
Mesmo diante da grande variedade de ameaças à segurança dos 
sistemas e computadores, os profissionais de segurança usam solu-
Para um melhor enten-
dimento sobre como 
funciona o gerencia-
mento de segurança 
implementado no sistema 
operacional Linux, leia a 
obra Sistemas Operacio-
nais com Java. 
GAGNE, G.; SILBERSCHATZ, A.; 
GALVIN, P. 7. ed. Elsevier, 2008.
Livro
Segurança em sistemas operacionais 149
ções de software e hardware para evitar e/ou minimizar possíveis ata-
ques, que serão descritos nesta seção.
Um firewall realiza a proteção de uma rede local (Local Area 
Network – LAN), gerenciando o seu tráfego e impedindo a invasão por 
pessoas não autorizadas (Figura 10). Ele pode atuar proibindo todas as 
transmissões que não possuem uma permissão explícita para serem 
realizadas, o que proporciona um alto grau de segurança, mas pode 
impedir o tráfego de dados legítimos no sistema; ou permitindo todas 
as transmissões que não possuem uma proibição explícita, o que deixa 
o sistema mais vulnerável a ataques, porém não impede o tráfego de 
dados legítimos no sistema. Para se conectar à internet, a LAN faz uso 
de um gateway (portal), que utiliza o firewall como forma de segurança.
Figura 10
Firewall protegendo uma LAN com três computadores
Rede local
Conexão 
com a rede
207.68.160.190:80 207.68.160.191:25 207.68.160.192:21
Firewall
Servidor 
Web
Servidor de 
e-mail
Servidor de 
FTP 
Fonte: Tanenbaum; Bos, 2015, p. 404.
Segundo Deitel, Deitel, e Choffnes (2005), há dois tipos primá-
rios de firewall:
Firewall de filtragem de 
pacotes: examina os pacotes 
que são enviados de fora da 
rede, com base em regras 
como a origem do pacote, do 
endereço ou da porta. Uma 
desvantagem nesse tipo de 
firewall é que ele avalia somente 
a origem do pacote de dados, 
sem levar em conta os dados 
anexados à mensagem, o que 
pode permitir a entrada de vírus 
no sistema.
Gateway de nível de 
aplicação: busca proteger 
a rede contra os dados 
contidos nos pacotes. 
Caso o pacote recebido 
contenha um vírus, ele será 
identificado pelo gateway, 
que vai impedir o seu envio 
para o destinatário.
150 Sistemas Operacionais
A utilização de um firewall é considerada um dos modos mais sim-
ples e efetivos de se aumentar a segurança em redes de pequeno porte. 
A Microsoft incluiu um software de firewall em seus sistemas opera-
cionais com o Windows XP, batizando-o de Windows Firewall. Em sua 
versão mais recente, o Windows 10, o software é chamado de Windows 
Defender Firewall.
Uma solução complementar ao uso do firewall é o uso da tecnologia 
de camada de ar, que separa a rede interna da rede externa, impedindo 
que os usuários externos vejam a estrutura de rede interna, evitando 
que os hackers consigam analisar a rede, procurando por seus pontos 
fracos. Essa tecnologia é utilizada por empresas de comércio eletrônico 
da modalidade business-to-business (B2B), que permitem aos seus clien-
tes compartilharem informações de estoque com seus fornecedores, 
que passam a atuar de maneira digital e segura.
Um sistema de detecção de intrusos (Intrusion Detection Systems 
– IDS) monitora os arquivos de registro (log files) gerados pela rede, 
pelos computadores ou pelas aplicações, procurando por comporta-
mentos suspeitos, alertando os administradores da rede e, automa-
ticamente, interrompe a execução do processo suspeito. Os arquivos 
de log armazenam informações sobre o comportamento do sistema, 
como o horário em que os serviços do sistema operacional são solicita-
dos e o nome do processo solicitante.
Os sistemas de detecção de intrusos baseada no hospedeiro mo-
nitoram, continuamente, os arquivos de log gerados pelo sistema ope-
racional e suas aplicações, buscando detectar possíveis ameaças, como 
o Cavalo de Troia.
Já os sistemas de detecção de intrusos baseada na rede moni-
toram, continuamente, o tráfego da rede, buscando detectar padrões 
fora do comum, que poderiam indicar um ataque DoS ou a tentativa 
de acesso à rede sendo feita por um usuário não autorizado. Empresas 
como a Cisco, HP e a Symantec comercializam soluções de detecção de 
intrusos. Há também iniciativas de software livre nesse sentido, como 
o projeto Snort.
A detecção de intrusos utiliza técnicas como a análise estática, na 
qual cria um modelo de comportamento esperado para as aplicações, 
que compara esse modelo com um comportamento anômalo, gerado 
pela tentativa de ataque de um cracker.
Segurança em sistemas operacionais 151
Desde a década de 1990, o número de vírus aumentou significativa-
mente, ameaçando a segurança dos usuários em suas residências, nos 
seus trabalhos e gerando prejuízos na casa dos bilhões para as empresas. 
Como resposta a essa ameaça crescente, os softwares antivírus buscam 
proteger os computadores contra os vírus, identificando-os e eliminando-
-os. Apesar do uso de diferentes técnicas para a detecção e eliminação dos 
vírus que possam estar atuando em um sistema, os softwares antivírus 
não conseguem garantir a proteção completa para o computador.
De acordo com Deitel, Deitel e Choffnes (2005), os softwares antiví-
rus empregam as seguintes técnicas de detecção:
a. Detecção de vírus por verificação de assinatura: usa uma 
lista de vírus conhecidos, uma região que não muda durante a 
propagação do vírus. Para identificar o vírus, o software compara os 
arquivos com as assinaturas contidas em sua lista. Desvantagens: 
crescimento da lista, em virtude do aumento constante do número 
de vírus; necessidade de atualização constante da lista; não 
identificação de vírus, que não estão contidos na lista; ineficácia 
na avaliação de vírus variante, que teve o seu código modificado 
quanto ao vírus original, mas continua sendo perigoso; ineficácia 
na avaliação de vírus polimórfico 4 (Figura 11).
Figura 11
Propagação por vírus polimórfico
Vírus polimórfico 
1ª geração
Código inofensivo
Código inofensivo
Carga explosivaAlgoritmo de 
polimorfismo
Assinatura
Nota: todas as três técnicas podem ser combinadas
Vírus típico
Código inofensivo
Carga explosiva
Código inofensivo
Variável
Variável
Assinatura
Assinatura
2ª geração
Carga 
explosiva
criptografada
Criptografia
AssinaturaAdicionar no-ops
Carga explosiva
Variar instruções 
e/ou ordem
Carga explosiva C
Carga explosiva A
Novas instruções 
Carga explosiva B
Fonte: Tanenbaum; Bos, 2015, p. 582.
Vírus polimórfico é um vírus 
que modifica o seu código de 
acordo com sua propagação, 
dificultando a sua identificação 
pela lista de assinaturas.
4
152 Sistemas Operacionais
b. Verificação heurística: tem como base a forma com que o 
vírus se replica, como ele reside na memória e/ou no seu código 
malicioso. Ao usar essas informações, o software consegue 
detectar vírus ainda não identificados, porém pode estar sujeito 
a resultados falsos.
c. Verificação de consistência: com base na premissa de que 
um vírus precisa modificar os arquivos de um computador para 
infectá-los, mantém um registro de consistência dos arquivos 
considerados essenciais para o sistema. Sistemas operacionais, 
como o Windows XP, realizam verificações de consistência dos 
seus arquivos essenciais substituindo-os diante de uma alteração 
para evitar um possível dano ao sistema.
d. Verificação de tempo real: técnica em que os softwares são 
alocados na memória do computador, impedindo a infecção por 
vírus de maneira ativa.
Buscando melhores resultados, os softwares antivírus, em sua 
maioria, usam uma combinação dessas duas formas de detecção, por 
assinatura e heurística.
Um ponto negativo das falhas de segurança dos sistemas opera-
cionais é que muitas delas somente são descobertas após o sistema 
estar em uso. Como exemplo das ações possíveis, temos a proposta do 
projeto Berkeley Software Distribution (BSD) UNIX, OpenBSD, que é ser 
a distribuição UNIX mais segura possível. A equipe do projeto realiza as 
seguintes atividades:
Su
rfs
Up
/S
hu
tte
rs
to
ck
Pesquisas sobre possíveis falhas 
de segurança, feitas por uma 
equipe de auditoria.
Liberação de correções de 
segurança (security patch) para as 
falhas identificadas.
Criação de linhas de comunicação 
com os usuários por meio de um 
fórum público.
Segurança em sistemas operacionais 153
Tanto o OpenBSD quanto o Apple MacOS X mantêm todas as suas 
portas fechadas, além de desativar os serviços de rede, que poderão 
ser habilitados pelo usuário posteriormente.
A Microsoft aplica correções de segurança chamadas hotfixes 
(reparos a quente) para os seus sistemas operacionais, que são 
oferecidos aos usuários por meio do software Automatic Updates 
(Atualizações Automáticas).
A política de controle de acesso protege os dados armazenados em um 
arquivo do sistema, porém isso não se aplica quando o arquivo é acessado 
por um outro sistema operacional, por exemplo, se um arquivo é gerado no 
Windows XP e copiado para um pen drive para ser acessado em um outro 
computador com Linux. Diante dessa possibilidade, os sistemas operacio-
nais passaram a suportar sistemas de arquivos seguros que protegem os 
dados sensíveis dos arquivos, independentemente da forma com que ele é 
acessado. O Windows XP utiliza a Nova Tecnologia de Sistema de Arquivos 
(New Technology File System – NTFS) para proteger seus arquivos por meio 
de criptografia e controle de acesso.
O sistema de arquivos NTFS usa o sistema de criptografia de arqui-
vos (Encrypting File System – EFS) para proteger os arquivos e as pas-
tas do sistema. O EFS utiliza criptografia por chave secreta e por chave 
pública para garantir que os arquivos protegidos não sejam acessados 
por um usuário indevido, caso o computador seja roubado ou perdido. 
A criptografia pode ser aplicada tanto em arquivos quanto em pastas, 
que terão todo o seu conteúdo criptografado. O seu uso em pastas 
alcança um nível de segurança mais elevado, pois impede que as apli-
cações criem arquivos temporários no seu interior.
Em 1985, o Departamento de Defesa (Department of Defense – 
DoD) dos EUA publicou um documento oficialmente intitulado Critérios 
Confiáveis de Avaliação de Sistemas de Computador (Department of De-
fense Trusted Computer System Evaluation Criteria), que ficou conhecido 
como Livro Laranja (Orange Book), escrito para classificar em quatro os 
níveis de segurança dos sistemas operacionais, de A a D, em ordem 
decrescente de segurança. Conforme Deitel, Deitel e Choffnes (2005), 
as características de cada nível são:
a. Nível D (proteção mínima): armazena qualquer sistema 
operacional que não cumpra os requisitos dos outros níveis, 
sendo considerados inseguros.
154 Sistemas Operacionais
b. Nível C (proteção discricionária): compreende dois subníveis, 
C1 e C2. Os sistemas operacionais enquadrados no subnível C1 
precisam que seja informado um usuário ou um grupo, acrescido 
de uma senha, para obter acesso ao sistema. As primeiras versões 
do UNIX pertenciam ao subnível C1. O subnível C2 suporta o 
acesso com um usuário e uma senha. Sistemas operacionais 
como o Windows NT, UNIX mais modernos e o IBM OS/400 
pertencem ao subnível C2.
c. Nível B (proteção mandatória): compreende três subníveis. No 
primeiro subnível, o B1, o sistema operacional deve possuir um 
esquema de permissão central predefinido e aplicar etiquetas 
de sensibilidade aos sujeitos e aos objetos. O subnível B2 exige 
que a comunicação entre o usuário e o sistema operacional ao 
realizar a autenticação seja segura, somados aos requisitos do 
subnível B1. O subnível B3 exige que o sistema operacional 
implemente domínios de proteção, que concede ao sistema 
mecanismos de recuperação seguros e o monitoramento dos 
acessos aos sujeitos e aos objetos, para análise futura, somados 
aos requisitos do subnível B2.
d. Nível A (proteção verificada): compreende dois subníveis, o 
subnível A1, que exige a verificação formal da segurança do 
sistema operacional, somados aos requisitos do subnível B3; e o 
subnível A2, que ainda não foi definido.
O Orange Book é considerado um documento ultrapassado, mas re-
presenta um marco na padronização e busca por um ambiente compu-
tacional seguro. A existência de um padrão permite ao usuário tomar 
a ciência da proteção e da segurança aplicadas às suas informações.
5.6 Comunicação e protocolos de segurança 
Vídeo Com o aumento do uso da internet por parte dos usuários, em es-
pecial com o crescimento das operações de comércio eletrônico, dados 
sensíveis passaram a ser transmitidos em um volume crescente, exigin-
do que as aplicações fornecessem meios de conexão seguras para evitar 
No filme Jogos de Guerra, 
Matthew Broderick interpreta 
um adolescente que invade 
um sistema achando que é um 
videogame, sem saber que 
se trata do sistema de defesa 
dos EUA.
Esse é um ótimo filme para que 
você compreenda um pouco 
mais as atividades de segurança 
e prevenção de ataques a 
sistemas. O termo firewall foi 
utilizado pela primeira vez nesse 
longa-metragem.
Direção: John Badham. São 
Paulo: MGM, 1983. 
Dica
Segurança em sistemas operacionais 155
o furto e o uso indevido desses dados. Segundo Deitel, Deitel e Choffnes 
(2005), há cinco requisitos para uma operação bem-sucedida e segura:
a. Privacidade: busca a garantia de que a informação transmitida 
pela internet não será capturada ou entregue sem a sua 
autorização e conhecimento à outra pessoa.
b. Integridade: busca assegurar que a informação enviada ou 
recebida em uma operação não será comprometida ou alterada.
c. Autenticação: analisa a forma com que o emissor e o receptor 
da operação realizam a verificação das suas identidades.
d. Autorização: analisa a forma com que o sistema operacional 
gerencia o acesso aos seus recursos protegidos, fazendo uso 
das credenciais do usuário – identidade (login) e a prova da 
identidade (senha).
e. Não rejeição: busca provar, de modo legal, que uma mensagem 
foi enviada ou recebida durante uma operação.Somado a esses cinco requisitos, a segurança de redes deve se 
preocupar como a questão da disponibilidade, como assegurar que 
os computadores interligados por uma rede conseguirão se conectar 
de maneira contínua.
Mesmo diante da flexibilidade e confiabilidade conferida aos algo-
ritmos de chave pública, eles não são considerados eficientes quando 
tratamos do envio de grandes quantidades de dados, não sendo con-
siderados substitutos dos algoritmos de chaves secretas. Chamamos 
de protocolo de acordo de chaves quando duas partes precisam trocar 
chaves usando um meio considerado inseguro.
O envelope digital é considerado a forma mais simples de utilizar 
o protocolo de acordo de chaves e ocorre quando a mensagem é crip-
tografada por uma chave secreta; esta é criptografada por uma chave 
pública e anexa à mensagem que é enviada. Ao receber a mensagem 
(envelope), o receptor decripta a chave secreta utilizando uma chave 
privada; de posse da chave secreta, ele a usa para decriptar a mensa-
gem (Figura 12). A segurança dessa operação vem do fato de o emissor 
ter a certeza de que somente o receptor conseguirá decriptar a chave 
secreta e com ela ler a mensagem.
156 Sistemas Operacionais
Figura 12
Criação de um envelope digital
3
Compre 100 ações 
da empresa X XY%#?42%Y
Receptor
Emissor
1
Texto comum
Chave 
simétrica 
secreta
Envelope 
digital
Texto cifrado
Criptografa
Criptografa
2
Chave 
simétrica 
secreta
Chave pública 
do receptor
Chave 
simétrica 
secreta 
criptografada
Fonte: Tanenbaum; Bos, 2015, p. 587.
Uma das grandes dificuldades para a manutenção da segurança do 
sistema criptográfico é manter as chaves privadas em segredo, pois, ao 
serem mal gerenciadas, utilizadas de modo incorreto, podem ocasio-
nar um número de violações superior ao dos ataques criptoanalíticos.
Um ponto a ser observado é a geração da chave, ou seja, o modo 
como a chave é criada. Se ao desenvolver o algoritmo de criação de cha-
ve o programador optar por utilizar um pequeno subconjunto de chaves 
possíveis, o algoritmo se tornará um possível alvo de ataques de força 
bruta. Como solução para esse problema, o programador deverá operar 
um subconjunto com o maior número de resultados possíveis e aleató-
rios, dificultando a realização de um ataque de força bruta.
Considerado uma forma de garantir a comunicação entre dois com-
putadores interligados pela internet, o protocolo de camada segura de 
soquetes (Secure Sockets Layer – SSL) foi desenvolvido pela Netscape 
Communications, atuando entre o protocolo TCP/IP 5
TCP/IP é um conjunto de proto-
colos de comunicação utilizados 
por computadores interligados 
por uma rede.
5
 e o software da 
aplicação. O SSL foi substituído pelo protocolo de segurança de cama-
da de transporte (Transport Layer Security – TLS), eles se diferenciam 
pela implementação do algoritmo e pela estrutura dos pacotes utiliza-
Segurança em sistemas operacionais 157
dos. Mesmo protegendo a informação durante a comunicação entre o 
cliente e o servidor de comércio eletrônico, tanto o SSL quanto o TLS 
não são responsáveis pelos dados sensíveis que são armazenados no 
servidor de comércio eletrônico que está sujeito a um ataque.
Uma outra forma de garantir comunicação segura utilizando 
conexões públicas é fazer o uso de redes virtuais privadas (Virtual 
Private Network – VPN), que estabelecem um canal de comunica-
ção seguro (túnel), o qual permite o tráfego de dados pela internet. 
O túnel é criado com o protocolo de segurança da internet (In-
ternet Protocol Security – IPSec), desenvolvido pela Força Tarefa 
de Engenharia da Internet (Internet Engineering Task Force – IETF), 
que usa uma chave pública e criptografia simétrica para que os da-
dos sejam transmitidos de maneira íntegra e confidencial, além de 
autenticar as partes envolvidas.
Para Deitel, Deitel e Choffnes (2005), a segurança da VPN tem como 
base três conceitos:
a. Autenticação do usuário: feita pelo cabeçalho de autenticação 
(Authentication Header – AH), que anexa informações a cada um 
dos pacotes, validando a identidade do emissor e garantindo que 
os dados não sejam modificados durante o seu trajeto.
b. Criptografia dos dados: feita pelo protocolo de segurança de 
encapsulamento de carga útil (Encapsuling Security Payload 
– ESP), que realiza a criptografia dos dados utilizando chaves 
simétricas.
c. Acesso controlado ao túnel: feito por meio do protocolo de 
troca de chaves da internet (Internet Key Exchange – IKE), que 
permite a troca segura das chaves.
Para fazer uso de uma VPN, os usuários necessitam realizar a insta-
lação de software e/ou hardware especializados que suportam o IPSec.
Cada vez mais os dispositivos conectados por fio têm sido subs-
tituídos pelos dispositivos que permitem aos usuários transmitirem 
dados sem fio, que, além da largura de banda e capacidade de pro-
cessamento limitados, da alta latência e das conexões instáveis, per-
mitem que os dados transmitidos sejam acessados mais facilmente 
do que a transmissão com fio.
Buscando melhorar esse cenário, o padrão IEEE 802.11 definiu as 
especificações para as redes sem fio, aplicando o protocolo de privaci-
158 Sistemas Operacionais
dade equivalente à das redes com fio (Wired Equivalent Privacy – 
WEP), que visa proteger as comunicações entre dispositivos sem fio 
por meio da criptografia dos dados transmitidos e não permitindo 
o acesso de usuários não autorizados à rede sem fio. Infelizmente, 
a segurança do protocolo WEP é considerada insuficiente, uma vez 
que sua chave secreta pode ser quebrada por um ataque de força 
bruta, somado ao fato de que as redes sem fio, que usam o WEP, 
compartilham uma única chave secreta com vários usuários, sem 
alterá-la por um longo período.
Procurando solucionar as deficiências do WEP, em 2003, o IEEE e a 
Wi-Fi Alliance desenvolveram a especificação acesso protegido Wi-Fi 
(Wi-Fi Protected Access – WPA), que introduziu a criptografia de cha-
ve dinâmica exclusiva para cada um dos usuários, além de fornecer 
autenticação dos usuários, usando um servidor para armazenar as 
credenciais.
A técnica conhecida como esteganografia (escrita oculta, em grego) 
consiste na ocultação de informações dentro de outra, que pode ser 
uma mensagem, uma imagem, um arquivo multimídia etc. A estegano-
grafia tem sido utilizada como solução para a proteção da propriedade 
intelectual por meio de marcas-d’água digitais, que podem ser visíveis ou 
não. As marcas-d’água digitais podem ser inseridas nas músicas e ima-
gens digitais, permitindo verificar se elas foram copiadas.
Ao falarmos de segurança de software, podemos dividir a produção 
de software em dois grupos: os defensores de código-fonte aberto e 
os defensores do software proprietário. Para os defensores do códi-
go aberto, a segurança do software proprietário ocorre somente por 
causa da ocultação do seu código-fonte. Do outro lado, os defensores 
de software proprietário alegam que o seu código-fonte não pode ser 
analisado pelos invasores em busca de vulnerabilidades.
Um dos pilares do código-fonte aberto é a colaboração, que permi-
te a vários usuários participarem e contribuírem com os projetos em 
que estão envolvidos. Para os defensores do código aberto, as solu-
ções proprietárias não desfrutam dessa vantagem, na qual os colabo-
radores poderiam procurar de maneira mais eficiente pelas falhas de 
segurança e apresentar novas soluções. Rebatendo essa crítica, os de-
senvolvedores de software proprietário alegam que as suas baterias de 
teste são suficientes e são realizadas por especialistas.
Segurança em sistemas operacionais 159
Outra queixa feita pelos defensores de código-fonte aberto é 
que os desenvolvedores de software proprietário não divulgam pu-
blicamente suas falhas de segurança, mesmo que uma correção 
tenha sido fornecida, uma vez que isso pode prejudicar a imagem 
da empresa perante seus usuários.
Como vantagem das aplicações de código-fonte aberto pode-
mos citara interoperabilidade, que permite a inclusão de pa-
drões e protocolos criados pela comunidade nos seus produtos de 
software. Isso também favorece os usuários, que podem customi-
zar os níveis de segurança das suas aplicações. Já os usuários de 
software proprietário ficam restritos às configurações sugeridas 
pelo fabricante do software ou a adquirir outros produtos para 
conseguir operar novas funcionalidades.
Uma outra vantagem das aplicações de código-fonte aberto é 
que as suas aplicações estão disponíveis para avaliação e testes 
por parte da sua comunidade. Já as soluções proprietárias estão 
atadas a um registro histórico de segurança ou dependem do aval 
da sua equipe de especialistas.
Uma desvantagem das aplicações de código-fonte aberto é que 
as soluções não vêm com uma configuração padrão de segurança 
ao serem instaladas, o que pode comprometer o sistema, pela ne-
gligência ou mesmo ignorância do usuário sobre esse assunto. Por 
exemplo, várias distribuições Linux possuem serviços de rede habi-
litados, que podem tornar o computador alvo de ataques externos. 
Entre as distribuições UNIX, o OpenBSD possui uma configuração 
padrão de segurança na sua instalação.
Os sistemas proprietários já vêm com uma configuração padrão 
de segurança ao serem instalados. Eles podem ser tão seguros 
quanto os de código-fonte aberto.
Para um melhor 
entendimento sobre a 
comunicação de dados 
e como ela influencia o 
surgimento de protocolos 
de segurança para evitar 
os ataques e furtos de 
dados, assista ao vídeo 
SSL / TLS – dicionário do 
programador, publicado 
no canal Código Fonte TV. 
Disponível em: https://
www.youtube.com/
watch?v=eOsGqXy2vmA. Acesso 
em: 7 ago. 2020. 
Dica
CONSIDERAÇÕES FINAIS
Neste capítulo, aprofundamos nossa visão sobre a segurança do com-
putador. A evolução do hardware e do software nem sempre minimizam 
as preocupações dos administradores de redes e especialistas de segu-
rança no que se refere às possíveis oportunidades para invasão, destrui-
ção e furto de dados sensíveis dos computadores.
 https://www.youtube.com/watch?v=eOsGqXy2vmA
 https://www.youtube.com/watch?v=eOsGqXy2vmA
 https://www.youtube.com/watch?v=eOsGqXy2vmA
160 Sistemas Operacionais
Os projetistas de sistema precisam se preocupar com a criptografia 
dos dados, que normalmente são transmitidos pela internet, via digital 
mais utilizada para troca de informação. Além disso, precisam garantir 
que os emissores e receptores dos dados realmente são quem dizem ser.
Cada vez mais surgem novas ameaças aos serviços, sistemas e dados 
sensíveis; os invasores buscam por fraquezas e realizam ataques das 
mais diferentes formas. Isso precisa ser prevenido, os sistemas devem 
ser defendidos e respondidos pelos administradores e especialistas de 
segurança. Ao mesmo tempo, as organizações procuram definir padrões 
e protocolos para tornar as atividades computacionais mais seguras.
Os pontos abordados neste capítulo não são definitivos, visto que essa 
disputa ainda não chegou ao fim, pois as partes envolvidas, sejam elas ata-
cantes, sejam defensoras, continuam crescendo e procurando adiantar 
quais são os possíveis passos dos seus adversários.
Os atacantes são beneficiados pelas demandas crescentes dos usuá-
rios, que levam às modificações constantes por parte dos desenvolvedo-
res de software e acabam criando novos cenários, com novos desafios 
para a segurança dos sistemas operacionais.
ATIVIDADES
1. O que é um sistema de criptografia por chave secreta ou chave 
simétrica?
2. Por que os algoritmos de chave pública são chamados de funções de 
uma via ou de armadilha?
3. O que são bombas lógicas?
REFERÊNCIAS
DEITEL, H. M.; DEITEL, P.; CHOFFNES, D. Sistemas operacionais. 3. ed. Trad. de Arlete Simille 
Marques. São Paulo: Pearson, 2005.
TANENBAUM, A.; BOS, H. Sistemas Operacionais Modernos. 4. ed. São Paulo: Pearson 
Universidades, 2015.
Gabarito 161
GABARITO 
1 Introdução aos sistemas operacionais
1. Os sistemas operacionais não eram necessários, pois a interação dos 
programadores com essas máquinas era feita por meio de chaves 
mecânicas, nas quais se introduziam os comandos bit-a-bit, a fim de 
que esses fossem convertidos em uma linguagem que a máquina 
pudesse compreender.
2. O desenvolvimento do transistor e das memórias magnéticas marcou 
o começo da segunda fase de computadores, que abrangia aqueles 
construídos entre 1955 e 1965. A substituição das válvulas, da 
primeira fase, pelo transistor trouxe velocidade e confiabilidade ao 
processamento. Já a criação das memórias magnéticas garantiu que os 
dados fossem acessados mais rapidamente, aumentou a capacidade 
de armazenamento e permitiu que o tamanho dos computadores 
fosse reduzido.
3. Buscando solucionar o problema de performance e de armazenamento, 
a IBM lançou a série 360, composta de máquinas compatíveis entre 
si. A série começava com o modelo 1401, um computador menos 
potente, e chegou até o 7094, o computador mais potente da série. 
A diferença entre os computadores da série 360 estava no preço e na 
performance, em virtude da quantidade de memória, da velocidade do 
processador, do número de dispositivos de E/S etc. A compatibilidade 
dos programas a serem executados nos computadores dessa série 
era garantida por uma arquitetura comum entre eles e pelo mesmo 
conjunto de instruções básicas. Com a série 360, a IBM conseguia unir, 
em um mesmo conjunto de computadores, a utilização tanto para uso 
científico como para uso comercial.
4. Os sistemas operacionais TSS, Multics e CP/CMS incorporavam o 
conceito de memória virtual, em que os programas conseguiam 
endereçar mais localizações de memória do que as providas pela 
memória principal, também chamada de memória real ou física. 
Isso permitia que os programadores se preocupassem com o 
desenvolvimento das aplicações e não precisassem mais atuar no 
gerenciamento de memória.
162 Sistemas Operacionais
5. Um sistema é considerado crítico em negócios quando falha e pode 
resultar em perdas econômicas significativas para a empresa que 
o utiliza. Podemos citar, como exemplos, os servidores web e os 
servidores de bancos de dados.
2 Interação do sistema operacional com hardware e 
software
1. A maneira mais simples de se armazenar um arquivo em um sistema 
operacional é considerá-lo uma sequência de bytes, na qual o sistema 
operacional não se preocupa com o conteúdo do arquivo, deixando a 
responsabilidade da sua identificação com o usuário.
2. O UNIX faz uso dos arquivos especiais de caracteres para se comunicar 
com os dispositivos de E/S.
3. O UNIX faz uso dos arquivos especiais de blocos para se comunicar 
com os discos.
4. Diretório-raiz é a forma mais simples de utilização de diretório quando 
o sistema operacional faz uso de somente um para armazenar todos 
os seus arquivos.
5. A utilização do firmware permite aos fabricantes de dispositivos 
que utilizem chips programáveis, de uso geral, em vez de utilizarem 
hardware de uso personalizado. Isso resulta em economia de custos, 
além de facilidade de inovação e de implantação, pois se torna mais 
fácil adicionar uma funcionalidade por meio de uma alteração do 
firmware do que com a substituição do chip.
3 Processos e threads
1. O espaço de endereçamento do processo é formado por uma região 
de texto que armazena o código que o processador executa; uma 
região de dados que armazena as variáveis e a memória alocada 
dinamicamente durante a execução do processo; e uma região de pilha 
que armazena as instruções e as variáveis locais para chamadas ativas 
ao procedimento, que fazem a pilha crescer quando são emitidas, e 
diminuir quando o procedimento retorna às chamadas.
2. A diferença entre um processo em estado de execução e um processo 
em estado de pronto é que o processo em execução está sendo 
executado pelo processador, enquanto o processo em estado de 
Gabarito 163
pronto informa ao sistema operacional que já pode ser executado e 
precisa ser alocado em um processador.
3. O bloco de controlede processo (PCB) é um conjunto de informações 
do processo que auxiliarão o sistema operacional a gerenciá-lo.
4 Memória real e virtual
1. A estratégia de busca determina qual próxima parte de um programa 
ou de um conjunto de dados será transferida para a memória principal.
2. A estratégia de posicionamento determina qual lugar da memória 
principal deverá ser ocupado pelos programas e dados que estão 
chegando.
3. A estratégia de substituição determina quais dados deverão ser 
removidos da memória principal para liberar espaço para um novo 
programa.
4. Os endereços virtuais são referenciados pelos processos e os 
endereços físicos indicam as localizações físicas na memória principal.
5. A MMU é responsável por identificar o endereço real correspondente 
ao endereço virtual acessado por um processo.
5 Segurança em sistemas operacionais
1. A criptografia por chave secreta, ou criptografia simétrica, é um sistema 
que utiliza a mesma chave secreta tanto para criptografar quanto 
decriptar um texto.
2. A ação de cifrar uma mensagem utilizando uma chave pública não 
requer muitos recursos computacionais. Entretanto, realizar a sua 
decriptação sem ter acesso à chave privada necessita de tempo e 
recursos computacionais elevados.
3. As bombas lógicas são códigos inseridos no sistema operacional de 
produção da empresa que dependem da inserção diária de uma 
senha para que nada ocorra.
Este livro é destinado a uma melhor compreensão 
do papel e das atividades desempenhadas pelo 
sistema operacional. Para isso, começa com uma 
apresentação histórica dos sistemas operacionais, 
seus possíveis ambientes, seus componentes e sua 
arquitetura. Em seguida, explica a forma com que 
o sistema operacional interage com o hardware 
e com o software; a execução de tarefas pelos 
sistemas operacionais; a conversão de processos 
em threads; o armazenamento em memória real e 
em memória virtual do computador; e, finalmen-
te, trata da segurança em sistemas operacionais, 
as possíveis formas de ataque e defesa dos siste-
mas e apresenta técnicas de proteção dos dados 
trocados pelos computadores. 
 
Em suma, esta obra traz as informações básicas 
para a compreensão do papel dos sistemas opera-
cionais e destina-se aos estudantes que desejam 
aprofundar seus conhecimentos sobre esse co-
adjuvante que merece todos os créditos por um 
trabalho bem realizado nos nossos computadores.
S
IS
T
E
M
A
S
 O
P
E
R
A
C
IO
N
A
IS
A
N
D
E
R
S
O
N
 D
U
T
R
A
 M
O
U
R
A
Código Logístico
59313
Fundação Biblioteca Nacional
ISBN 978-85-387-6615-5
9 7 8 8 5 3 8 7 6 6 1 5 5
	Página em branco
	Página em branco

Mais conteúdos dessa disciplina