Você está na página 1de 17

SISTEMAS

OPERACIONAIS

Amirton Bezerra Chagas


Revisão de hardware
e software
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

 Diferenciar hardware e software.


 Identificar os principais componentes do hardware de um sistema
computacional.
 Descrever os principais software em um sistema computacional.

Introdução
Os computadores estão presentes em quase todas as atividades humanas
e são utilizados para resolver problemas e facilitar a execução de tarefas
que, sem eles, poderiam consumir várias horas. No entanto, nem sempre
esses computadores estão visíveis para os seus usuários, mesmo que suas
vidas sejam afetadas diretamente por sua presença.
Para os profissionais da área de TI, é necessário entender como esses
computadores funcionam, mesmo que em alto nível. É importante com-
preender quais são os principais componentes de hardware e software
que fazem com que essas máquinas realizem suas tarefas e como esses
componentes interagem.
Neste capítulo, você revisará as definições de hardware e software,
compreendendo o papel de cada um deles em um computador.
O sistema operacional é um software responsável por gerenciar todo o
hardware e outros software em execução no computador e, por isso, é
necessário identificar as diferenças entre eles.
2 Revisão de hardware e software

1 Hardware e software
Computadores modernos funcionam a partir da interação entre componentes
de hardware e software. O hardware é a parte tangível do computador, ou seja,
aquela que você pode ver e tocar diretamente (O’BRIEN; MARAKAS, 2012).
São exemplos de hardware o processador, os discos rígidos (Hard Disk - HDs)
e os discos de estado sólido (solid state drive [SSD]), a placa mãe, a memória
RAM, a placa de vídeo, o mouse, o teclado, o monitor, entre outras peças.
O software, por sua vez, é composto pelas instruções e pelos dados ne-
cessários para a execução dos programas no computador (O’BRIEN; MA-
RAKAS, 2012). Software, portanto, é intangível, ou seja, não é possível tocá-lo.
O software é armazenado em hardware como discos, executado no proces-
sador, e suas instruções e seus dados, geralmente, são mantidos na memória
RAM durante a sua execução, interagindo com o mundo externo (usuários
ou outros sistemas) por meio de dispositivos de entrada e saída como mouse,
teclado ou placas de rede. O próprio sistema operacional é um software, assim
como browsers, editores de texto e outros programas. Bibliotecas usadas na
construção de outros programas (como dynamic link libraries [DLLs], gems
de Ruby, módulos de Python, entre outros) também são software.

Linguagens de programação, em geral, definem formatos para compartilhar bibliotecas,


ou seja, códigos que não são executados por conta própria, mas são usados dentro
de outros programas. A linguagem Ruby chama suas bibliotecas de gems. Para saber
mais sobre gems, leia a documentação oficial da linguagem Ruby disponível no link
a seguir (RUBY, [201–?]).

https://qrgo.page.link/1DZNv

Tanenbaum e Austin (2013) explicam que computadores com software


armazenado seguem a arquitetura de von Neumann, um modelo publicado
por John von Neumann, matemático húngaro que, em colaboração com ou-
tros cientistas e engenheiros de sua época, propôs que computadores com
programas armazenados deveriam ter uma unidade central de processamento
(central processing unit [CPU]), composta por uma unidade lógico-aritmética
Revisão de hardware e software 3

(arithmetic logic unit [ALU]) e por uma unidade de controle e registradores


(uma pequena memória de alta velocidade próxima a CPU e ALU). Além
disso, a arquitetura de von Neumann prevê a existência da memória principal
(em computadores modernos, geralmente, representada pela memória RAM)
e de algum sistema de entrada e saída (E/S).
Na arquitetura de von Neumann, o programa que está em execução deve
estar na memória principal. No caso de computadores pessoais, o software
está constantemente armazenado no disco rígido, entretanto, ao ser iniciado
pelo sistema operacional, é copiado para a memória RAM, que é a memória
principal desse tipo de computador. A CPU, por sua vez, é responsável pela
execução do software. Um registrador específico, o contador de programa
(program counter [PC]), mantém uma referência para a posição na memória
RAM onde se encontra a instrução em execução. A cada instrução executada,
esse registrador é atualizado para apontar para a próxima instrução que o
processador deve executar.

Compreender o modelo de execução em um computador que segue a arquitetura de


von Neumann é uma habilidade útil para profissionais da área de TI, principalmente,
para desenvolvedores que trabalham com linguagens como C e C++ ou para admi-
nistradores de sistema de forma geral. Para saber mais sobre execução de software
em computadores, leia as seções 3.2 e 3.3 da obra Fundamentos de arquitetura de
computadores, de Weber (2012).

Após compreender a diferença entre hardware e software, é interessante


entender uma similaridade importante. Null e Lobur (2011) apresentam o
conceito do princípio de equivalência de hardware e software: “qualquer
coisa que possa ser feita com software pode ser feita com hardware, e qualquer
coisa que possa ser feita com hardware também pode ser feita com software”
(NULL; LOBUR, 2011, p. 37). Esse princípio é intrigante, em um primeiro
momento, dada a grande diferença entre hardware e software que foi expli-
cada anteriormente. No entanto, é simples entender que tudo o que pode ser
feito com hardware pode ser feito com software: emuladores de videogames,
Java Virtual Machine e VMWare são exemplos de software que simulam o
comportamento do hardware bastante comuns no dia a dia de profissionais
4 Revisão de hardware e software

de TI. A contramão, apesar de menos óbvia, também é comum: processadores


específicos para fazer decodificação de vídeo existem em aparelhos de TV
digital, caracterizados, essencialmente, pela implementação dos algoritmos
de decodificação de vídeo diretamente em hardware.
Esse princípio de equivalência pode levar a uma pergunta simples:

1. Por que se dar ao trabalho de implementar um algoritmo em hardware


ao invés de implementar via software e deixar para o processador de
uso geral do computador a função de executá-lo?

Para respondê-la, é necessário entender as motivações para se realizar a


implementação de um algoritmo diretamente no hardware. Uma motivação
é uma possível busca por performance. Um chip projetado para determinada
função, como decodificar vídeos no formato H.264, usado no padrão de TV
Digital brasileiro, pode ter performance superior à execução dos mesmos
algoritmos em um processador de uso geral. Outra motivação, decorrente da
anterior, é que esse chip não terá vários dos componentes necessários em um
processador de uso geral, podendo ser mais barato. Por fim, a existência desse
chip em um sistema liberará a CPU para outras atividades, e os projetistas do
computador poderão optar por uma CPU de menor porte, ou por adicionar
outras funcionalidades ao sistema.
Com a resposta da pergunta anterior esclarecida, o leitor atento pode
levantar outra pergunta:

2. Se há tantas vantagens, por que não fazer tudo via hardware?

Nesse caso, a resposta é mais simples. Ao usar um computador que segue a


arquitetura de von Neumann, com programas armazenados, existe a liberdade
de trocar os programas que são executados sem efetuar a troca do hardware,
apenas alterando, removendo ou instalando software no sistema. O custo da
implementação de todo o software usado em um computador via hardware
seria proibitivo. A abordagem de implementar determinado software em hard-
ware, de modo geral, ocorre apenas quando há algoritmos bem definidos e
maduros (codificação e decodificação de áudio e vídeo, funções criptográficas
e cálculos matemáticos para renderização 3D são exemplos de algoritmos
implementados diretamente em hardware), com pouca chance de mudança e
que serão muito usados no computador em questão.
Revisão de hardware e software 5

2 Componentes de hardware
Um computador criado a partir da arquitetura de von Neumann possuirá,
pelo menos, processador (com unidade de controle e ALU), memória RAM
e algum dispositivo de entrada e saída.

Processador
A função de um processador é interpretar as instruções de um programa e
executá-las (NULL; LOBUR, 2011). Para isso, o processador possui três princi-
pais componentes: a unidade lógico-aritmética, que efetua cálculos e operações
de lógica; a unidade de controle, que garante o fluxo dos dados e operações
dentro do processador; e os registradores, que são pequenas e rápidas memórias
dentro do processador. Um processador terá vários registradores, alguns deles
usados para funções específicas, como o registrador de instruções (instruction
register [IR]), usado para manter a instrução que está sendo executada dentro
do processador em um dado instante, e o já mencionado contador de programa.
Outros registradores do processador, no entanto, são de propósito geral, e estão
disponíveis para que programadores armazenem dados e recuperem valores. Por
meio da atribuição e leitura dos valores presentes nos registradores, os dados são
repassados para que o processador efetue seus cálculos e gere suas respostas.

Na prática, processadores modernos possuem mais de uma unidade lógico-aritmética


(ALU). Cada núcleo dos modelos com base na microarquitetura Intel® Skylake (como
os Core™ i7 de sétima geração) possuem quatro ALUs clássicas, responsáveis por
instruções como somar, comparar valores e efetuar testes lógicos, e outras 18 unidades
de execução específicas para outras operações que, no modelo de von Neumann,
seriam também funções da ALU (INTEL, 2019). Isso significa que um processador como
o Intel® Core™ i7-6700 tem 88 unidades equivalentes a ALUs.

Processadores modernos, geralmente, possuem múltiplos núcleos (ou


multicore). Cada um desses núcleos é, para efeitos práticos, um processador
completo do modelo de von Neumann (TANENBAUM; AUSTIN, 2013). Um
6 Revisão de hardware e software

processador multicore tem vários núcleos independentes, mas também possui


alguns recursos compartilhados, como o controlador de memória e de E/S,
como pode ser observado na Figura 1.
Possuir múltiplos núcleos é uma vantagem interessante, pois é possível
aumentar a performance do sistema por meio da execução simultânea de
múltiplas atividades. Em contraste, as formas de aumentar a performance
de um único núcleo são mais complexas, porque, de modo geral, envolvem o
aumento do clock do processador, o que faz com que seja gerado mais calor, ou
mudança na organização de seus componentes e da forma com que interagem,
que representa um desenvolvimento tecnológico árduo e caro.
A desvantagem do uso de múltiplos núcleos é que nem todos os programas
são desenvolvidos para aproveitar essa característica, e podem não ter ganhos
significativos de performance ao serem executados em processadores mul-
ticore. O sistema operacional também cresce em complexidade, para poder
organizar corretamente a execução nesses múltiplos núcleos. De forma geral,
no entanto, processadores multicore melhoraram o desempenho do sistema
como um todo e se tornaram o padrão da indústria, mesmo em dispositivos
de menor porte, como smartphones.

Figura 1. Intel Core i7-3960X, com oito núcleos independentes (dois


deles desativados), memória cache L3, controlador de memória e
de E/S compartilhados.
Fonte: Tanenbaum e Austin (2013, p. 33).
Revisão de hardware e software 7

Memória principal
Para que um computador com base na arquitetura de von Neumann fun-
cione, é necessária a existência de uma memória muito rápida, para que o
processador não tenha que perder muitos ciclos de processamento enquanto
aguarda a leitura ou escrita de dados essenciais para a execução do programa.
A memória principal cumpre essa função de armazenar as instruções e os
dados necessários para que um programa seja executado no computador
(NULL; LOBUR, 2011).
De modo geral, a memória RAM está relacionada à memória principal
de computadores modernos. Idealmente, os dados e instruções de todos os
programas em execução estão na memória RAM do computador. Quando
não há memória RAM suficiente para isso, o sistema operacional usa parte
da memória secundária como uma extensão da RAM, levando os dados para
a memória principal quando o processador precisa deles, o que diminui de
modo considerável a performance do sistema.
Mesmo bastante rápida, a memória RAM ainda apresenta um atraso de
alguns ciclos para responder requisições do processador. Para aumentar a
performance, é comum o uso de memórias cache, que são ainda mais rápi-
das (estão localizadas muito próximas ou mesmo dentro do processador) e,
automaticamente, mantêm os dados mais usados pelo processador (ou com
maior chance de serem usados em breve), diminuindo o tempo de resposta
(TANENBAUM; AUSTIN, 2013).

Os conceitos de hierarquia de memórias e princípio da localidade são essenciais


para a performance de computadores modernos. Programadores experientes
costumam levar em consideração esses tópicos ao analisar problemas de perfor-
mance em aplicações, pois é possível alterar o código do software de forma que
se aproveite melhor o hardware disponível de acordo com esses conceitos. Para
saber mais sobre hierarquia de memórias e princípio da localidade, leia a seção
6.3 de Princípios básicos de arquitetura e organização de computadores, de Null e
Lobur (2011).
8 Revisão de hardware e software

A memória principal é volátil e não mantém os dados armazenados caso


o computador seja desligado. É necessário um fornecimento de eletricidade
constante para manter as informações ativas na memória RAM. Dados que
precisam ser mantidos por tempo indefinido, mesmo após o desligamento
do sistema, devem ser armazenados em hardware de memória secundária.

Memória secundária
Armazenar dados (e permitir sua leitura em um momento posterior) é uma
função que acompanha computadores desde o início de sua história. A memória
secundária cumpre o papel de armazenar os dados de forma durável, mesmo
quando o computador está desligado, possibilitando ao sistema efetuar a leitura
desses dados quando necessário.
A maioria dos hardware de memória secundária é muito mais lenta do que
a memória RAM. Mesmo SSDs, que são muito mais rápidos que HDs, ainda
são uma ordem de grandeza mais lentos do que a memória principal. O Quadro
1 traz valores aproximados do tempo de acesso e da capacidade aproximada
de vários tipos de memória disponíveis no computador.

Quadro 1. Tempo de acesso médio para diferentes dispositivos de memória

Tempo de Capacidade
acesso Tipo Categoria média Preço/GB

1 ns Registradores Processador < 1 KB —

2 ns Cache L1 Processador 4–20 MB $ 1300.00


e L2

10 ns Memória Principal 1–16 GB $ 5.00


RAM

100 ns Disco SSD Secundária 32–512 GB $ 0.25

10 ms Disco Secundária 500 GB–2 TB $ 0.08


magnético
(HD)

100–200 ms CD/DVD Secundária 650 MB/4.7 GB $ 0.04


Revisão de hardware e software 9

Os hardware de memória secundária utilizam propriedades físicas que


garantirão a permanência dos dados mesmo sem fornecimento constante de
eletricidade. HDs, fitas de armazenamento e os antigos disquetes usam mag-
netismo para, de acordo com o alinhamento de cada área do disco, representar
os zeros e uns que mantêm os dados (TANENBAUM; AUSTIN, 2013). De
forma geral, as cabeças de leitura e escrita desses dispositivos (que podem
fazer parte do próprio dispositivo de armazenamento, como nos HDs, ou
serem hardware a parte, como no caso dos disquetes e fitas) verificam qual é
o alinhamento atual ou alteram esse alinhamento para conseguirem armazenar
ou recuperar os dados. CDs, DVDs e Blu-Rays usam a óptica, com feixes
de laser apontando para o disco, que reflete ou não essa luz. O leitor então
interpreta como zero ou um caso a área lida tenha ou não sido refletida. Há
ainda dispositivos como os SSDs e memórias flash (os populares pen drives)
que utilizam fenômenos elétricos para alterar a organização de componentes
internos que representam os valores binários armazenados de forma durável
nesse tipo de memória.
No futuro, com o avanço da tecnologia de SSDs e seu barateamento, pode-
remos ter memórias secundárias com performance mais próxima à da memória
principal. Recentemente, a Intel lançou o Intel Optane, uma tecnologia que
busca diminuir a distância de performance entre o armazenamento secundário
e o primário, servindo como mais uma camada de memória cache, por exemplo.

Dispositivos de entrada e saída


Qual seria a utilidade de um computador se ele não fosse capaz de receber
novos dados ou não conseguisse mostrar seus resultados para os usuários?
Computadores precisam de maneiras de interagir com o mundo externo, tanto
com usuários como com outros computadores. Para isso, são usados dispositivos
de entrada e saída (E/S), que permitem a entrada de novos dados vindos do
mundo externo (como um texto digitado no teclado ou informações recebidas
pela placa de rede) e a saída das informações geradas no computador para
seus usuários e outros computadores (como a imagem vista no monitor ou
informações enviadas através de um modem).
Existe uma grande variedade de dispositivos de E/S, alguns que demandam
mais banda por trafegarem mais informação (placas de vídeo ou rede atuais
precisam de banda ordem dos Gb/s), outros que precisam de pouca banda, não
passando de algumas centenas de bits por segundo, como teclados e mouses.
Em geral, dispositivos de E/S são muito mais lentos do que o processador,
a memória principal ou mesmo a maioria dos tipos de memória secundária
10 Revisão de hardware e software

(TANENBAUM; AUSTIN, 2013). Alguns desses dispositivos podem, inclu-


sive, não ter garantia de que gerarão novos dados (o mouse ou o teclado, por
exemplo, podem ficar vários minutos sem interação). Atividades que dependam
desses dispositivos não deveriam ocupar o processador, desperdiçando tempo
e energia. Para isso, existe o mecanismo de interrupções, que funcionam como
avisos de que há dados disponíveis de um dispositivo de entrada. Somente
no disparo de uma interrupção é que o processador será alocado para tratar
o dado recebido. Entre os dispositivos de E/S mais comuns encontrados em
computadores, destacam-se os elencados a seguir.

 Teclado: é uma das formas mais primitivas de entrada para computadores


e a maneira mais comum de enviar informação para o computador.
Precisa de pouca banda e tem um padrão de uso intermitente, podendo
passar muito tempo sem uso.
 Mouse: também com baixa necessidade de banda, o mouse envia uma
informação de movimento para o sistema, que deve interpretá-la e
mover um cursor na tela. Além disso, envia a informação de botões
clicados, para que o sistema execute a ação correspondente à área onde
se encontra o cursor.
 Monitores: dispositivos que necessitam de banda bastante larga. Um
vídeo em resolução FullHD (1920 × 1080) com taxa de atualização de
60 Hz (60 vezes por segundo), enviado sem compressão para o monitor,
necessita quase 400 MB/s.
 Placas de rede (com ou sem fio) e modems: são dispositivos que assumem
tanto a função de entrada como a de saída, permitindo a comunicação
de um computador com outros. Eles convertem o sinal digital rece-
bido no computador em outro sinal (de acordo com as especificações
da camada física da rede) que será transmitido e recebido por outra
placa de rede, que converterá de volta o sinal recebido em sinal digital
original. Dependendo do tipo de rede, podem necessitar de largura de
banda muito alta.

3 Tipos de software
O hardware de computadores de uso geral é projetado para executar qualquer
tipo de operação. Para que isso aconteça, é necessário que exista software no
computador, definindo as instruções para que esse hardware faça seu trabalho
Revisão de hardware e software 11

e execute as tarefas. Cada software tem um objetivo bem definido, geralmente,


diferente de outros já existentes. Apesar dessa diversidade de objetivos, é
possível definir grupos de software que possuem características em comum.
O’Brien e Marakas (2012) oferecem uma classificação com duas categorias:
Software de Sistema e Software de Aplicação.

Software de sistema
O’Brien e Marakas (2012) definem como software de sistema programas cujo
objetivo é gerenciar o próprio computador e as atividades que são necessárias
para o processamento de informações. Os principais exemplos dessa categoria
são os sistemas operacionais, cujo objetivo principal é justamente garantir
o funcionamento ordenado do computador como um todo. Logo, o Microsoft
Windows ou distribuições Linux como o Ubuntu são software de sistema.
Também fazem parte dessa categoria drivers e outros programas que auxiliam
o sistema operacional a controlar e gerenciar o funcionamento de dispositivos
do computador, como gerenciadores de redes.
É comum também incluir como software de sistema os programas que
dão suporte a programadores em atividades de desenvolvimento de software.
Compiladores, que traduzem o código-fonte produzido pelos desenvolvedores
para código executável, geralmente, em alguma linguagem de montagem, e
ambientes de desenvolvimento integrados (IDEs), os editores utilizados por
programadores para escrever, depurar e construir software, podem, portanto,
ser classificados nessa categoria.
Além disso, os software usados como suporte para a execução de outros
programas também são Software de sistema. Dessa forma, também fazem
parte dessa categoria os sistemas de gerenciamento de banco de dados
(SGBDs), como o Oracle ou Microsoft SQL Server, os servidores de aplica-
ção web, como o Apache HTTP Server ou o Microsoft IIS, e os ambientes
de execução de aplicações gerenciadas, como o .NET Framework ou a Java
Virtual Machine (JVM). Características comuns à maioria dos software de
sistema são:

 necessidade de performance ótima;


 interação com outros programas que também são software de sistema,
principalmente, com o próprio sistema operacional;
 interação direta com hardware, especialmente, no caso de drivers e
sistemas operacionais;
12 Revisão de hardware e software

 desenvolvimento, pelo menos, em partes da aplicação, usando lingua-


gens de montagem (Assembly) ou, pelo menos, linguagens de alto nível
que permitam maior controle sobre o computador, como C;
 geralmente, são mais complexas em termos de desenvolvimento,
exigindo dos seus programadores conhecimento em arquitetura e
organização de computadores, sistemas operacionais, redes e teoria
computacional.

Software de aplicação
Os software de sistema são essenciais para o funcionamento do computador,
pois, sem eles, não seria viável usar as máquinas para funções realmente úteis.
No entanto, com exceção de profissionais da área de TI, a maioria dos usuários
precisa de computadores para resolver problemas cotidianos, não envolvidos
com a operação do computador em si.
Software de aplicação é a categoria na qual podemos colocar a maioria dos
programas que os usuários finais necessitam (O’BRIEN; MARAKAS, 2012).
Software como editores de texto, planilhas eletrônicas, editores de imagem,
vídeo e som, browsers e jogos, por exemplo, são programas que fazem parte
dessa categoria. Em computadores portáteis, como smartphones, a maioria dos
programas com os quais os usuários têm contato (popularmente conhecidos
como apps) é software de aplicação, pois esse tipo de sistema, de modo geral,
tenta abstrair ao máximo os conceitos computacionais que fazem com que o
dispositivo funcione.
De forma proporcional, há uma quantidade maior de desenvolvedores de
software trabalhando na criação e manutenção de programas dessa categoria
em comparação com os que trabalham com software de sistema. Isso é um
reflexo da grande diversidade de problemas que podem ser resolvidos com
o uso de computadores, e os programas que resolvem esses problemas são
software de aplicação.
Os software de aplicação, geralmente, são construídos em linguagens
de alto nível, inclusive, aquelas que utilizam ambientes de execução como
a Java Virtual Machine, .NET Framework, .NET Core ou Python. Esse tipo
de linguagem combinada com um ambiente de execução é, na maioria dos
casos, mais simples de aprender e dominar, evitando, por meio de mecanismos
internos, alguns problemas de desenvolvimento comuns em linguagens de
nível mais baixo.
Revisão de hardware e software 13

Além dos software de aplicação que usamos em nossos computadores, é


possível observar a tendência da criação de software de aplicação web, que
também são programas criados para resolver problemas do dia a dia dos usu-
ários. No entanto, eles não executam diretamente no computador do usuário
final, mas em um servidor web disponível na Internet. Há também, nesses
sistemas, uma grande diversidade de possibilidades. Redes sociais são um
exemplo muito presente no cotidiano moderno de software de aplicação web.
Outros exemplos comuns incluem sistemas de e-commerce e internet banking.
Há também uma tendência de criação de versões web de aplicações comuns
no ambiente desktop. Um exemplo é a suíte Google Docs, que conta com
aplicações editoras de texto, planilhas e apresentações acessíveis diretamente
no navegador dos usuários.

No dia a dia, os usuários interagem com frequência com programas de ambas as


categorias. Ao ligar o computador (incluindo seu smartphone), o usuário verá a tela
de progresso da inicialização do sistema operacional e informará usuário e senha para
ter acesso à sua área de trabalho, com menus e ícones que permitem a inicialização de
outros programas. Todas essas ações são realizadas por um software de sistema que
faz parte do sistema operacional.
Caso o usuário queira acessar um site para realizar pesquisas e depois escrever um
resumo com os resultados dessa atividade, possivelmente, ele abrirá um navegador
web (browser), acessará um sistema web que realizará a sua pesquisa e navegará para
outros sistemas web que disponibilizarão as informações desejadas. Depois, ele abrirá
algum editor de texto (como o Microsoft Word ou o sistema web do Google Docs) e
escreverá seu resumo com o auxílio dessa aplicação. Nesse caso, o usuário interagiu
com programas que são software de aplicação.
Ao final dessa atividade, se o usuário desejar imprimir o seu documento, ele usará
o próprio editor de texto para enviar o comando necessário para que a impressora
faça o seu trabalho. Contudo, nesse caso, durante a impressão, há uma coordenação
entre o software editor de texto, o sistema operacional e o driver da impressora, ou
seja, uma ação disparada por um software de aplicação fez com que fossem acionadas
partes de software de sistema.
14 Revisão de hardware e software

INTEL. Intel 64 and IA-32 architectures optimization reference manual. [S. l.: s. n.], 2019.
Disponível em: https://software.intel.com/sites/default/files/managed/9e/bc/64-
-ia-32-architectures-optimization-manual.pdf?countrylabel=Colombia. Acesso em:
24 jan. 2020.
NULL, L.; LOBUR, J. Princípios básicos de arquitetura e organização de computadores.
2. ed. Porto Alegre: Bookman, 2011.
O’BRIEN, J. A.; MARAKAS, G. M. Administração de sistemas de informação. 15. ed. Porto
Alegre: AMGH, 2012.
RUBY. Bibliotecas. Ruby, [s. l.], [201–?]. Disponível em: https://www.ruby-lang.org/pt/
libraries/. Acesso em: 24 jan. 2020.
TANENBAUM, A. S.; AUSTIN, T. Organização estruturada de computadores. 6. ed. São
Paulo: Pearson Prentice Hall, 2013.
WEBER, R. F. Fundamentos de arquitetura de computadores. 4. ed. Porto Alegre: Book-
man, 2012.

Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a
rede é extremamente dinâmica; suas páginas estão constantemente mudando de
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade
sobre qualidade, precisão ou integralidade das informações referidas em tais links.

Você também pode gostar