Antes de começar deixo avisado que no fim dessa postagem
criei dois anexos. O primeiro anexo é um glossário para descrever alguns termos
específicos da tecnologia que aparecem em negrito no texto. O segundo anexo
apresenta alguns textos extras que são apontados pelo índice numérico que está entre
colchetes.
1 - Introdução: Uma breve (muito breve) história do
computador
Começo essa postagem com a primeira pergunta que me vem a cabeça sobre
esse assunto:
O que é um computador?
Na Wikipédia, em português, diz o seguinte:
“Computador é um conjunto de componentes eletrônicos (máquina) capaz de
variados tipos de tratamento automático de informações (processamento de
dados).[1] Um computador pode possuir inúmeros atributos, dentre eles
armazenamento de dados, processamento de dados, cálculo em grande escala,
desenho industrial, tratamento de imagens gráficas, realidade virtual,
entretenimento e cultura. “
Embora essa descrição faça sentido faltou dizer algo fundamental sobre o
computador, ou seja, faltou dizer que essa máquina é uma ferramenta [1].
E apesar dos computadores atuais serem
compostos por componentes eletrônicos a história da evolução dos computadores possui
uma lista de calculadoras puramente mecânicas ou eletromecânicas. As
operações matemáticas que essas calculadoras podiam executar dependiam do que
se desejava calcular, e elas produziam os resultados numéricos através da
movimentação de peças e engrenagens.
O ábaco, por exemplo, pode ser
considerado como um dos primeiros instrumentos usados para contar números e
realizar operações matemáticas elementares, e ele foi usado por vários povos na
antiguidade, e hoje em dia ele ainda é usado.

Mas o ábaco pode ser considerado um
computador?
Recorro novamente ao termo “computador”
da Wikipédia para tentar responder essa pergunta, mas dessa vez uso o artigo em
inglês (traduzido pelo Google):
“Um computador é uma máquina que pode
ser instruído a realizar sequências de operações aritméticas ou lógicas
automaticamente por meio de programação de computador. Os computadores modernos
têm a capacidade de seguir conjuntos generalizados de operações, chamados
programas. Esses programas permitem que os computadores executem uma gama
extremamente ampla de tarefas. Um computador "completo" incluindo o
hardware, o sistema operacional (software principal) e o equipamento periférico
necessário é usado para uma operação "total", e pode ser descrito como
um sistema de computador. “
Se o computador realiza operações matemáticas
automaticamente o ábaco não poderia ser classificado como computador, logo ele
estaria mais para uma simples calculadora mecânica não automatizada.
Mas é um pouco confuso afirmar o que
pode ou o que não pode ser classificado como computador, pois esse termo inclui
o processamento e o resultado de operações matemáticas, portando o termo computador
é suficientemente abrangente para incluir uma simples calculadora, mesmo que
não seja possível programar tal dispositivo.
O cara que chegou mais próximo de
construir um computador mecânico, totalmente automatizada, foi Charles Babbage [2],
lá pelo século 18. Mas devido a diversos obstáculos para construir a sua
máquina analítica ele não conseguiu concluir o seu audacioso projeto. Mesmo
assim ele ficou conhecido como o pai do computador, pois diversos conceitos
produzidos por ele naquela época se encaixam no contexto dos computadores
modernos.
No século 20 Alan Turing deu origem ao
conceito de programa armazenado após publicar um artigo sobre uma máquina de
computação universal, conhecida como máquina de Turing universal, onde
instruções armazenadas em uma fita podiam ser executadas por uma máquina
eletromecânica.
Mas a arquitetura moderna de um
computador é atribuída a John von Neumann [3].

Por incrível que pareça os conceitos do hardware de um
computador moderno ainda são baseados no desenho acima, e esses conceitos foram
criados em 1945.
O hardware de um computador é composto,
genericamente, por 3 elementos fundamentais:
1) CPU (unidade central de processamento)
2) memória
3) periféricos (dispositivos de entrada e dispositivos
de saída)
Embora o termo CPU seja amplamente usado essa parte do computador também
é chamada de microprocessador, ou simplesmente processador.
Para simplificar o desenho do processador é possível visualizar apenas dois
blocos principais, que são a unidade de controle e a unidade de lógica e
aritmética, mas um processador moderno é bem mais complexo do que isso. Ele
possuiu muitos blocos que representam as diversas funcionalidades do
processador, e todos esses blocos são construídos com base em circuitos
eletrônicos digitais que funcionam através de uma lógica binária. Um
processador inteiro pode ser encapsulado em único circuito integrado, e nesse
caso o processador opera através de um único núcleo. Mas é possível ter dois ou
mais processadores no mesmo circuito integrado, ou seja, os processadores podem conter vários núcleos.
A arquitetura von Neumann não é a única arquitetura de computador,
existe também a arquitetura Harvard.
Na arquitetura von Neumann a memória compartilha as instruções e os
dados, ou seja, o processador busca na memória as instruções e os dados de uma
forma sequencial, portanto as instruções e dados não podem ser lidos
simultaneamente.
Na arquitetura Harvard, embora seja mais complexa, esse limite é
superado. O processador pode buscar as instruções e os dados simultaneamente.
Isso é possível graças a uma divisão da memória em duas partes, a memória das
instruções e a memória dos dados, como mostra o desenho abaixo.
Embora os computadores possam fazer o
uso da arquitetura von Neumann grande parte dos projetos de computadores
modernos faz uso de uma memória cache integrada ao processador, para aumentar o
desempenho do processamento de dados. Essa memória extra, chamada memória
cache, mescla conceitos da arquitetura Harvard na arquitetura von Neumann, e
isso é conhecido como arquitetura modificada Harvard.
E será que é possível criar outros tipos de arquiteturas de computador?
Claro que é possível, mas é preciso levar em conta a complexidade do
sistema. Criar um sistema que se torne mais complexo do que as arquiteturas von
Neumann e Harvard pode tornar o projeto caro demais e desnecessariamente complicado.
E por falar em novas arquiteturas o computador quântico está em
desenvolvimento, mas do meu ponto de vista essa tecnologia ainda não é capaz de
executar um programa de computador. O tal computador quântico não possui uma memória
para armazenar o programa a ser executado, e muito menos possui algum tipo de sistema
lógico capaz de interpretar e executar as instruções contidas em um programa,
ou seja, o computador quântico não é capaz de rodar um sistema operacional, por
exemplo. E para piorar as coisas a indefinição do bit quântico, que pode ser 0
e 1 simultaneamente, provocaria um desastre total ao tentar executar o
processamento de uma simples instrução de salto condicional. Uma instrução de
salto condicional precisa, obrigatoriamente, de um bit bem definido para dar
andamento ao programa que está sendo executado. Se esse bit fosse 0 e 1 ao
mesmo tempo a execução de uma instrução de salto condicional ficaria presa em
uma eterna indecisão no processamento, ou seja, nunca seria decidido qual o
destino do salto condicional, já que o processador quântico não saberia
exatamente se o resultado do bit é 0 ou é 1. Então, até onde sei, o computador
quântico serve por enquanto apenas como uma calculadora.
Outros processadores
Da mesma forma que existem
diferentes modelos de arquitetura de computador também existem diferentes
tipos de processador. O processador central do computador é um processador de
uso geral, e pode realizar uma ampla gama de tarefas. Mas existem processadores
especializados para uma função específica, são os processadores dedicados. O
processador de áudio, por exemplo, é usado para gravar e reproduzir som. O
processador gráfico, hoje chamado de GPU (Graphics Processing Unit),
é usado para processar imagens. E existe também o FPU (Float Point
Unit), um processador usado para realizar operações matemáticas de ponto
flutuante, e ele pode estar integrado ao processador central ou pode ser um
componente externo que é conhecido como coprocessador matemático.
Processador de áudio
Processador de vídeo (GPU)
Coprocessador matemático (FPU)
Os processadores dedicados citados
acima são os mais comuns, mas existem outros, cada um com uma função
especifica.
E, dentro do contexto de processamento
de dados, não podemos esquecer dos microcontroladores, que servem para
aplicações especificas chamadas aplicações embarcadas. É possível descrever um
microcontrolador como sendo um pequeno computador completo, ou seja, ele pode
incluir o processador, a memória e os periféricos de entrada e saída em um
único circuito integrado. Os microcontroladores possuem muitas aplicações e
eles são usados, por exemplo, na indústria automobilística, na aviação, em
equipamentos médicos, brinquedos, eletrodomésticos, periféricos de computador,
etc.
Microcontrolador de 32 bits
Para deixar essa lista de processadores
ainda mais completa podemos incluir também o ASIC (Application Specific
Integrated Circuits), ou circuito integrado de aplicação
específica. Um ASIC pode ser descrito como um sistema em um único chip, ou
seja, ele tem uma certa semelhança com o microcontrolador, que também pode conter
tudo em um único chip. A diferença é que o ASIC possui um circuito eletrônico interno personalizado para algum tipo de uso
específico, logo ele não pode ser reprogramado como um microcontrolador. O
custo para produzir um ASIC é alto, pois ele é detalhadamente projetado no
nível mais básico de um circuito integrado, o nível dos transistores. Projetar
um ASIC requer mais tempo e mais esforço por parte dos projetistas, mas essa atenção
especial que o projeto de um ASIC recebe permite algumas vantagens como melhor
desempenho, alta confiabilidade, menor dissipação, menor custo por peça, etc. E
geralmente o ASIC é produzido em larga escala, e isso significa baratear o
preço de cada chip.
Um ASIC pode conter a complexidade
de um microprocessador inteiro, ou pode ser menos complexo, como um chip de um aparelho
telefônico fixo, por exemplo.
Porém, se você me perguntar o que
é ou o que não é um ASIC confesso que não consigo responder isso facilmente, ou
seja, se você pesquisar sobre o assunto vai descobrir que a definição de um
ASIC é um tanto confusa, pois existem ramificações e outras siglas usadas dentro
desse contexto.
Particularmente, do meu ponto de
vista, qualquer circuito integrado que funcione apenas no nível de hardware, e que
não possa ser programado posteriormente por algum software, poderia ser considerado
um ASIC. Logo qualquer circuito integrado não programável pode ser considerado
um ASIC, mas como isso é uma opinião pessoal e não algo consensual sugiro que
busque mais informações sobre esse assunto, caso queria se aprofundar sobre o
que é ou não é um ASIC.
Antes de aprofundar e tornar
inteligível diversos conceitos sobre o computador é melhor conhecer um
pouco sobre as bases numéricas e a lógica binária, e isso é descrito nos tópicos
seguintes.
Por enquanto é só, estou
escrevendo o resto do artigo.
Tópicos
2 - Base numérica
3 - Lógica binária
4 - Barramentos
5 - Processadores
6 - Memórias
7 - Periféricos & Interfaces
8 – Inicialização
___________________________________________________________________________________
Anexo I - Glossário
FDD
– Floppy Disk Drive. O disquete, que já
caiu em desuso, era uma forma de armazenamento de dados através de uma mídia
magnética. Cheguei a usar os tais disquetes na década de 90, e no início dos
anos 2000, mas confesso que não sinto nenhuma saudade dos disquetes, pois eles
não eram muito confiáveis, e sempre davam problemas. Eles ainda são vendidos
hoje em dia, inclusive ainda tenho uma caixa com disquetes novos. Os dois
tipos de disquetes mais comuns eram o disquete com o tamanho 5¼, que tinha uma
capacidade máxima de 1,2Mbytes, e os disquetes 3½, com capacidade máxima de
1,44Mbytes. Os disquetes 3½, de densidade estendida, podiam armazenar
2,88Mbytes, mas esse tipo de disquete não vingou. Muitos equipamentos ainda fazem
uso de disquete, mas é possível modernizar esse aspecto através de um emulador
de disquetes, capaz de substituir a mídia magnética do disquete por uma pen driver.
Uma curiosidade sobre as tais mídias magnética é que existiam fitas magnéticas,
chamadas fitas K7, que foram originalmente criadas para gravar áudio. Mas essas
fitas também foram usadas para gravar programas e dados de computador. Nos anos
90 usei fitas K7 para carregar jogos no meu MSX!
HDD
– Hard Disk Driver. Acho que essa mídia
magnética dispensa longas explicações. É uma memória que permite armazenar
grandes quantidades de dados. O HD é consideravelmente seguro, mas obviamente
pode falhar, justamente porque armazena dados através de um sistema eletromecânico.
Desde de que o HD não sofra choques mecânicos, ele pode durar e ser usado por
muito tempo.
Hardware
– é a parte física do computador. É composto por componentes eletrônicos, placa
de circuito, conectores, fonte de alimentação, etc
RAM
– Random Access Memory. A memória de acesso
randômico é uma memória que permite leitura ou escrita, mas ela é uma memória volátil,
ou seja, ela perde os dados que foram armazenados quando a energia elétrica é
desligada. Os dois tipos de RAM são a DRAM (Dynamic Random Access
Memory), e a SRAM (Static Random Access Memory).
A DRAM mantém os dados armazenados nela por apenas alguns milissegundos, então
é necessário incluir um sistema de reavivamento, ou refrescamento. Em inglês
esse sistema é chamado de refresh, e ele evita que a memória DRAM perca os
dados. A SRAM é mais simples e não precisa de um sistema refresh, uma vez que
os dados são escritos na memória SRAM eles não serão perdidos enquanto a
energia elétrica estiver ligada.
ROM -
Read-Only Memory. A memória somente de leitura é uma memória não volátil, ou
seja, ela não perde os dados quando o computador é desligado. Como o próprio
nome diz, ele pode apenas ser lida. O tipo de ROM mais conhecida é a PROM (Programmable
Read-Only Memory), que só pode ser gravada uma única vez e
não pode ser regravada. Mas existem outros tipos de memórias não voláteis que
podem ser regravadas. A EPROM (Erasable Programmable Read-Only
Memory), pode ser apagada com radiação ultravioleta e pode ser
regravada. A EEPROM (Electrically Erasable Programmable Read-Only
Memory), pode ser regravada eletricamente. E a memória flash, que é um
tipo de EEPROM mais rápida e mais barata, permite armazenar grandes quantidades
de dados, e ela é muito usada em pen drivers e SSDs.
É, eu
sei, esses termos são contraditórios, pois se uma memória pode ser apaga e
regravada então ela não é, de fato, uma memória apenas de leitura! Mas não é
minha função modificar essas esquisitices da informática.
SSD
- Solid State Drives. Essa mídia, composta
por memórias flash, é extremamente segura, e extremamente rápida quando
comparada com o HD. E ela é mais resistente a choques mecânicos. A única
desvantagem é que ela possui um número limitado de ciclos de escritas, Ou seja, quando o SSD alcançar o limite de ciclos de escritas o detestável erro chamado bad block vai corromper os dados contidos nesse dispositivo de armazenamento. Mas, dependendo de como se
usa um SSD, isso pode levar alguns anos para acontecer, então não vejo motivo
para se preocupar. Mas é bom sempre manter um back-up externo dos seus dados
mais importantes.
___________________________________________________________________________________
Anexo II - Filosofadas
a parte
O foco principal da postagem é explorar o funcionamento de
um computador, mas quando estou escrevendo as vezes costumo filosofar sobre
certos assuntos que não fazem parte do contexto, e então o texto pode acabar
ficando prolixo e sem foco. Para evitar esse tipo de divagação textual criei o
anexo Filosofadas a parte. Nesse anexo posso liberar alguns momentos de
criatividade que surgem quando estou pensando sobre um assunto, são como
ramificações exploratórias produzidas pela escrita livre.
Esse anexo também pode incluir outros contextos explicativos
além das minhas filosofadas a parte.
[1] Filosofadas a parte, palavra chave: Ferramenta
Vale lembrar que o uso de ferramentas não é um privilégio
humano, outros animais na natureza também são capazes de criar ferramentas com
o mesmo objetivo que nós. E qual é esse objetivo? Antes de responder essa
pergunta primeiro faço uma pergunta paradoxal: se fossemos seres
ilimitados precisaríamos de ferramentas? Provavelmente não, e é aí que está a
reposta sobre o objetivo das ferramentas. Para transcender as nossas próprias
limitações biológicas fazemos o uso de ferramentas, e outros animais também
seguem essa mesma lógica. Enfim, as ferramentas ampliam o nosso poder de muitas
formas diferentes, pois estendem as nossas capacidades para além de nossos
limites biológicos.
Porém, apesar das maravilhas que as ferramentas podem criar,
acho que é sensato não ser demasiadamente otimista sobre o poder destrutivo das
ferramentas. Não tenho dúvidas de que perder o controle sobre a ferramenta pode provocar
um desfecho trágico, é terrível quando o poder da ferramenta se volta contra
nós. Isso já aconteceu comigo, mas por sorte apenas me machuquei
superficialmente. Então sugiro cautela e sensatez no uso das ferramentas, para
que elas não se transformem em um algoz, no estilo Exterminador do Futuro.
Além disso, outro efeito nocivo que as ferramentas podem
causar é o conceito de que seremos substituídos pelas ferramentas. Considero
esse conceito errôneo, e estúpido, e acredito que ele é gerado a partir de um
complexo de inferioridade perante a ferramenta. Francamente, não é a ferramenta
que se torna mais inteligente que o usuário, é o usuário da ferramenta que fica burro a ponto de ser substituído pela ferramenta. Então, por exemplo, se algum dia a Inteligência
Artificial nos dominar e nos substituir é por que nos tornamos meros idiotas
tecnológicos que esqueceram das próprias capacidades evolutivas e adaptativas. Nunca
devemos nos esquecer que as ferramentas são criações humanas, e portanto, hierarquicamente,
servem aos nossos propósitos. Enfim, pra mim uma ferramenta será sempre uma
ferramenta, e não algo que vai substituir quem eu sou.
[2] Charles Babbage pode ser considerado o pai do computador,
mas o crédito pelo primeiro programa é atribuído Ada Lovelace, a mulher que escreveu
o primeiro algoritmo para ser processado na máquina analítica de Babbage.
[3] A disputa pelo crédito
da arquitetura do computador moderno
O EDVAC foi um dos primeiros computadores
eletrônicos que usava o sistema binário, e ele foi desenvolvido por John
Mauchly e J. Presper Eckert, e outros projetistas.
John von Neumann se juntou ao projeto do EDVAC em
função de uma consultoria, e então publicou um rascunho sobre o EDVAC, que ficou
conhecido como o Primeiro Rascunho (First Draft). Esse rascunho tinha 101 páginas,
e embora estivesse incompleto, ele foi o primeiro documento a descrever o
desenho lógico de um computador que utilizava o conceito de programa armazenado,
que controversamente é conhecido como arquitetura de von Neumann.
O problema é que o conceito de programa armazenado foi bastante discutido na Escola de Engenharia Elétrica Moore, na Universidade da Pensilvânia, antes de
von Neumann se tornar um consultor nessa Universidade.
Ou seja, von Neumann, que era fluente na linguagem
da lógica, pegou os conceitos de programa armazenado, que já tinham sido discutidos
na Universidade da Pensilvânia, e transformou isso no Primeiro Rascunho. Obviamente
ele adicionou, nesse documento, a sua própria visão sobre como a lógica de um
computador deve operar. Mas, como ele não listou nesse documento os nomes de diversos
autores que estavam envolvidos na concepção do computador moderno, todo o
crédito sobre a arquitetura de um computador foi atribuído a ele.
E J. Presper Eckert não ficou feliz por John von
Neumann ganhar todo o crédito pela concepção da arquitetura do computador. Para
Eckert o termo “arquitetura von Neumann” deveria ser substituído por
“arquitetura Eckert”.
Enfim, não vou entrar no mérito sobre quem
realmente deveria levar o crédito sobre a arquitetura do computador moderno,
pois o que aconteceu de fato foi que muitas mentes trabalharam para que o
computador eletrônico se tornasse uma realidade.