Você está na página 1de 112

Fundamentos de Computação

Professor Joao Paulo Faria


2022
SUMÁRIO
Capítulo 1. Evolução dos Computadores ............................................................... 5

História dos Computadores Mecânicos ............................................................................. 5

História dos Computadores Eletrônicos ........................................................................ 12

Surgimento da Microcomputação e dos Computadores Pessoais .................... 16

Capítulo 2. Estrutura de um computador - CPU .............................................. 21

Unidades básicas de um computador ............................................................................. 21

CPU – Introdução ..................................................................................................................... 24

CPU – Unidade Lógica e Aritmética ................................................................................. 25

CPU – Unidade de Controle (UC) ....................................................................................... 27

CPU – Registradores................................................................................................................ 28

Capítulo 3. Estrutura de um computador – Memória ................................... 31

Bit, Byte, Palavra ........................................................................................................................ 32

Tipos de Memórias.................................................................................................................... 37

Memórias do Tipo ROM .......................................................................................................... 39

Memórias do Tipo RAM ........................................................................................................... 40

Capítulo 4. Estrutura de um computador – Dispositivos ............................ 43

Memórias Externas ou Secundárias ................................................................................. 43

Discos Rígidos ............................................................................................................................ 45

A Evolução dos Discos Rígidos ........................................................................................... 45

Dispositivos de Backup .......................................................................................................... 50

Periféricos de Entrada e Saída ............................................................................................ 51

Capítulo 5. Sistema Binário / Booleano ............................................................... 55

Detalhando o sistema binário ............................................................................................. 55

Capítulo 6. Operando computadores.................................................................... 62

Linguagem de Máquina .......................................................................................................... 63

2
Linguagem de Alto Nível........................................................................................................ 67

Capítulo 7. Aplicações Básicas ................................................................................ 72

Sistemas Operacionais ........................................................................................................... 72

Processadores de Texto ......................................................................................................... 78

Planilhas Eletrônicas ............................................................................................................... 80

Softwares de Desenho............................................................................................................ 82

Vírus e Vacinas ........................................................................................................................... 83

Capítulo 8. Computação Paralela ........................................................................... 87

Conceitos de Paralelismo ...................................................................................................... 87

Tipos de Paralelismos ............................................................................................................. 88

Execução de Instruções paralelas em CPUs com múltiplos núcleos ............... 90

Paralelismo descentralizado – Computação em Rede ............................................ 93

Introdução à Internet ............................................................................................................. 95

Capítulo 9. Arquitetura de Processadores ......................................................... 99

A arquitetura X86...................................................................................................................... 99

Instruções do tipo CISC vs RISC ....................................................................................102

A arquitetura ARM ..................................................................................................................103

Capítulo 10. Computadores Multiprocessados ............................................. 107

Conceito de Multiprocessamento ...................................................................................107

Arquitetura UMA ou SMP ....................................................................................................108

Arquitetura NUMA ..................................................................................................................110

Arquitetura COMA...................................................................................................................111

3
1
Capítulo 1. Evolução dos Computadores
Neste capítulo vamos tratar da história dos computadores,
entendendo os primórdios conceituais até os dias de hoje.

Passaremos, inicialmente, pela história dos computadores mecânicos,


depois entenderemos a chegada dos computadores eletrônico e
finalmente o surgimento da microcomputação e dos computadores
pessoais.

Comecemos!

História dos Computadores Mecânicos

De acordo com o dicionário de Oxford, o primeiro uso da palavra


“computador” se deu em 1613, em um livro chamado “The Yong Mans
Gleanings” de Richard Brathwait.

O significado dado pelo autor, entretanto, era diferente daquilo que


conhecemos agora, significando na verdade, uma profissão, uma pessoa que
computava ou calculava.

O significado original permaneceu até meados do século 20.

A palavra computador provém do vocábulo computar ou contar. Ação


inerente a humanidade desde o princípio de sua história.

Nos primórdios, as contagens se davam com a ajuda dos dedos, ou de


pedras. Mas, com o passar dos tempos, pela necessidade de se computar
números maiores, instrumentos começam a surgir.

Dentre estes instrumentos antigos, o mais relevante foi o “Ábaco” ou


“Soroban”, antigo instrumento de cálculo, baseado no sistema decimal.

5
Sua origem é desconhecida, mas supõe-se que tenha surgido na
Mesopotâmia por volta de 5.500-5.000 anos antes de Cristo (AC), portanto,
com mais de 7.000 anos de idade.

Seu funcionamento é simples, mas serviu de base para a maioria dos


instrumentos de contagens que conhecemos hoje, inclusive das
calculadoras e computadores no sentido moderno.

Dividido por várias hastes, cada uma delas representava uma escala
decimal, sendo a primeira, a haste das unidades, a segunda das dezenas, a
terceira das centenas e assim sucessivamente.

Somas ou subtrações eram facilmente utilizadas nestes


instrumentos, por meio das contagens de cada pedra.

Fonte: https://pt.wikipedia.org/wiki/%C3%81baco#/media/Ficheiro:Kulram.jpg

No decorrer dos séculos, o ábaco seguiu sendo a principal ferramenta


de cálculo da humanidade, ganhando aperfeiçoamentos e modificações com
o passo do tempo.

No século XVI, impulsionado pelas necessidades da navegação, criou-


se a tabela logarítmica, que facilitou os cálculos de números muito grandes.
Os logaritmos foram criados/inventados pelo matemático escocês John
Napier.

6
Sua utilidade na navegação foi imediata, mas pouco prática, já que
folhas e folhas (de um enorme livro de cálculos logarítmicos) deveriam ser
consultadas a cada medição náutica necessária.

As dificuldades recaiam sobre multiplicações que, em momentos de


batalhas navais, poderiam resultar primordiais.

A pedido do reino, um padre inglês chamado William Oughtred, com


base nos estudos logarítmicos de John Napier, criou no ano de 1.638, a
“Régua de Cálculo”, que consistia em um instrumento com uma enorme
quantidade de valores pré-calculados, de fácil acesso e consulta.

Fonte: https://pt.wikipedia.org/wiki/R%C3%A9gua_de_c%C3%A1lculo

Apesar de útil, as tábuas ou réguas de cálculo possuíam somente


valores predefinidos e, portanto, uma lista finita deles.

Para resolver tal problema, o matemático francês Blaise Pascal,


desenvolveu uma máquina de calcular, tida por muitos, como a primeira
calculadora da história. O equipamento ficou conhecido como “Máquina de
Pascal”.

O seu funcionamento tomava como base o conceito decimal do


“Ábaco”. Diversas roldanas, representando unidade, dezena, centena, milhar
etc., se interconectavam para somar e subtrair os números.

7
Fonte: https://www.obaricentrodamente.com/.

A “Pascalina”, como ficou conhecida a “Máquina de Pascal”, podia


somar e subtrair, mas não conseguia realizar multiplicações ou divisões,
problema que se centrou Gottfried Leibniz.

Leibniz, maravilhado com o invento de Pascal, debruçou-se sobre


aquele invento e o melhorou, adicionando as operações faltantes. Sua
máquina, conhecida como a “Calculadora Universal”, foi finalizada em 1.671.

Fonte: https://www.obaricentrodamente.com.

8
Gottfried Leibniz iniciou os estudos da aritmética binária, que se
tornou a base para os computadores eletrônicos. Ele foi uma das mentes
mais brilhantes e proeminentes que já viveram em nosso planeta.

Um invento intermediário, mas importante, foi a máquina de tear


automática, criada pelo francês Joseph Marie Jacquard. Seu invento foi
importante para a computação, pois implementou em uma máquina de tear
uma espécie de “programa” através do qual os tecidos deveriam ser
desenhados. Tratava-se de um mecanismo de cartões perfurados, que tanto
serviu a computação nos anos seguintes.

Fonte: https://pt.wikipedia.org/wiki/Joseph-Marie_Jacquard

A corrida por máquinas programáveis havia se iniciado.

O projeto do primeiro computador de uso geral, foi atribuído ao


matemático inglês Charles Babbage. Suas ideias, que contaram com o apoio

9
de sua colega, Condessa de Lovalace, resultaram no projeto do primeiro
computador programável da história.

Babbage criou, primeiramente, a “Máquina Diferencial”, através de


um modelo científico apresentado em 1.822. A máquina teórica (jamais foi
criada), seria capaz de realizar equações polinomiais e efetuar cálculos para
solução de cálculos logarítmicos.

Seu projeto tinha capacidade básica de:

a) Receber Dados.

b) Processar os Dados.

c) Armazenar os Dados.

d) Exibir os Dados.

Fonte: https://pt.wikipedia.org/wiki/M%C3%A1quina_diferencial

Com investimentos da coroa britânica, Charles propôs, em 1837, a


“Máquina Analítica”, uma sucessora da “Máquina Diferencial”, que

10
incorporava uma ALU (Unidade Lógico Aritmética), tornando-se similar aos
conceitos propostos por Turing, como o modelo Turing-Complete.

As máquinas de Babbage nunca foram finalizadas por ele, mas suas


ideias estavam 100 (cem) anos a frente de seu tempo.

No final do século 19, Hermann Hollerith, a pedido do governo


americano, criou uma máquina capaz de processar a contagem do senso,
reduzindo a consolidação de 7 (sete) anos para 4 semanas.

A “Máquina de Hollerith” utilizava cartões perfurados e capacidades


aritméticas para o processamento. Os cartões eram colocados em taças que
continham mercúrio sólido, e estavam conectadas a um circuito elétrico,
quando perfurados, os cartões permitiam a passagem do pedaço de metal
que completava o circuito.

Hollerith fundou a empresa Computing Tabulating Recording


Corporation, que em 1.911 foi renomeada para IBM.

Fonte: https://www.obaricentrodamente.com/

Em 1.847, George Boole desenvolveu a lógica booleana. Um sistema


cujos valores poderiam ser representados por meio de tão somente 2 (dois)

11
algarismos, o 0 (zero) e o 1 (um), com o significado de ativado / desativado,
verdadeiro / falso.

Sua criação formou a base para toda a computação moderna. Veremos


mais sobre a lógica booleana em capítulos posteriores.

Em 1906, Lee de Forest inventou a Válvula Tríodo (Dispositivo


Responsivo à Oscilação), dando início ao surgimento da eletrônica.

História dos Computadores Eletrônicos

Entre o início do século XX e os anos de 1.940, vários outros


computadores mecânicos foram desenvolvidos. Em 1.931, Vannevar Bush
criou o primeiro computador com arquitetura booleana, fazendo uso de 2
(dois) níveis de voltagem.

O grande impulso que os computadores precisavam veio na 2ª Guerra


Mundial. A partir de 1.940, muitas máquinas verdadeiramente eletrônicas
começaram a surgir para realização de cálculos (em especial cálculos
balísticos).

A primeira calculadora elétrica do mundo foi criada pelo alemão


Konrad Zuse, em 1941, e era controlada por um programa. Foi denominada
de Z1, e servia para propósitos de apoio ao Reich alemão.

12
Fonte: https://www.mactechnews.de/gallery/picture/

Nos Estados Unidos, Howard Aiken, em Cambridge, desenvolveu o


Mark I, que foi a 1ª calculadora eletro-mecânica produzida em larga escala
na história.

Fonte: https://pt.wikipedia.org/wiki/Harvard_Mark_I

13
Para atender os objetivos de guerra, várias máquinas eletro-
mecânicas foram criadas, entre elas a “Bomba Eletromecânica” de Alan
Turing.

Turing foi um gênio da computação, que auxiliou a Inglaterra a


quebrar a criptografia de mensagens trocadas pelos alemães durante a 2ª
Guerra mundial.

Seu projeto, no entanto, não era inédito, mas baseava-se na “Bomba


Kryptologiczna”, desenvolvida na Polônia anos antes.

Sob sua supervisão, várias máquinas destas foram criadas com o


propósito de vencer a guerra, obtendo informações sigilosas dos inimigos.

Em 1946, os Estados Unidos desenvolveram o “ENIAC” (Electronic


Numerical Integrator and Computer), considerado o primeiro computador
digital eletrônico do mundo. Os cientistas por trás de seu projeto foram John
Eckert e John Mauchly, da ECC (Electronic Control Company).

Fonte: https://pt.wikipedia.org/wiki/ENIAC

14
Possuía as seguintes características:

a) Processava 5.000 operações por segundo.

b) Finalidade de cálculos balísticos.

c) Possuía 17.468 válvulas de 160kW de potência cada.

Fonte: https://www.obaricentrodamente.com/

Sua entrada (ou programação) se dava por milhares de interruptores,


cada um possuindo o valor de 0 (zero) ou 1 (um). Para a realização desta
tarefa, havia uma equipe de 80 mulheres, cuja função era configurar as
entradas para realização dos cálculos.

Esta atividade, ou função, era chamada de “computador”.

Como curiosidade, o ENIAC serviu como base para a construção de


muitos outros computadores, como:

a) O EDVAC.

b) O ORDVAC.

c) O SEAC.

d) O UNIVAC.

15
Surgimento da Microcomputação e dos Computadores Pessoais

Em 1.948 um invento, descoberto por Willian Shockley e sua equipe


na Bell Labs, viria a colocar uma nova tecnologia no mundo da informática,
uma que transformaria para sempre a indústria e se tornaria, talvez, a
invenção mais importante da humanidade, o Transistor de Estado Sólido.

Fonte: https://Embarcados.Com.Br/A-Historia-Do-Primeiro-Transistor/

Entre os anos de 1.920 e 1.950, a corrida pela invenção de um


substituto sólido para as válvulas termiônicas foi intensa. Tendo a Bell Labs
como a primeira a apresentar um protótipo totalmente funcional.

O transistor supunha um avança muito significativo com relação as


válvulas. Além de consumir pouquíssima energia, ainda tinha uma vida útil
extremamente maior.

Graças a ele, deu-se início a micro-componentização dos meios


necessários para se produzir um computador. Nascia ali, a
microcomputação.

16
O primeiro disco magnético para armazenamento de informações foi
desenvolvido em 1.962, passando assim a substituir as enormes unidades
de fita magnética.

O primeiro computador a utilizar este tipo de meio de armazenamento


foi o computador Atlas, considerado como o primeiro supercomputador da
história.

Fonte: Atlas (computer) - Wikipedia

A evolução dos transistores foi muito acelerada. Na década de 1.960,


imaginou-se que, em algum momento, um computador inteiro poderia ser
miniaturizado e criado, com um conjunto pequeno de peças.

17
Fonte: Transístor – Wikipédia, a enciclopédia livre (wikipedia.org)

Em 1.963, teve início a produção dos chips integrados, placas de


circuitos eletrônicos que permitiam a junção de muitos transistores em
somente uma placa de silício.

Aproveitando a onda gigantesca de oportunidades que havia surgido,


Gordon Moore e Robert Noyce, em 1.968, fundam a empresa Intel Company.

A Intel foi responsável, em 1.971, por criar o primeiro


microprocessador da história, o Intel 4004, cujo chip possuía 2.300
transistores e velocidade de 108 Khz.

Em 1.972, a Intel lança o microprocessador 8008, o primeiro


microchip de 8 bits.

Os primeiros PCs (ou microcomputadores pessoais) surgiram nos


anos de 1.976 com o lançamento dos computadores TRS-08 e Apple II, cujos
preços começavam a atingir patamares mais acessíveis para o público em
geral.

18
Um Apple II custava, na época, o equivalente hoje a US$ 1.200,00 (mil
e duzentos dólares).

Em 1.981, a IBM lança seu primeiro PC, que trazia como novidade o
sistema operacional MS-DOS, que acabou se tornando o modelo padrão de
mercado até os dias atuais.

Fonte: IBM PC – Wikipédia, a enciclopédia livre (wikipedia.org).

19
2
Capítulo 2. Estrutura de um computador - CPU
Um computador é composto por muitas partes e, apesar de todas elas
possuírem importância, algumas partes são mais importantes do que as
outras.

Os elementos fundamentais de um computador, são:

a) A Unidade Central de Processamento (CPU).


b) As Memórias.
c) Os dispositivos periféricos.

Neste capítulo vamos nos concentrar em entender um pouco da CPU,


que seria equivalente ao “cérebro” do computador.

Unidades básicas de um computador

Desde a criação dos microcomputadores, sua arquitetura e


organização interna não sofreu grandes mudanças.

Claro, novos e mais modernos componentes foram sendo criados e


melhorados, mas se pensarmos na estrutura básica, ela permanece
praticamente inalterada.

Um computador é composto de alguns componentes fundamentais,


sem os quais ele não funciona, podemos identificá-los nesta lista:

1) A CPU (ou Unidade Central de Processamento): responsável por


todas as ações de controle das entradas, processamentos e saídas
de um computador. Nada acontece em um computador sem que a
CPU ordene ou direcione.

21
A CPU é o elemento mais importante de um computador, e ela tem
melhorado e evoluído enormemente desde os anos de sua invenção.

2) As Memórias e componentes ROM: de longa duração, são


memórias raramente alteráveis, responsáveis pelos programas de
inicialização do computador, comumente conhecidas como BIOS
(ou Sistema Básico de Entrada e Saída).

Memórias ROMs também podem ser utilizadas para armazenagem


de firmwares específicos de componentes periféricos ou para carregar dados
no computador, como por exemplo, por meio de slots de expansão (pensem
em cartuchos de expansão, que levam programas).

3) As Memórias RAM: aquelas de duração volátil, ou seja, cujos dados


são perdidos quando o computador é desligado.

22
São componentes igualmente essenciais aos computadores, já que
os programas são “carregados” para essa memória, antes de ser executados
pela CPU e periféricos.

4) A Placa Mãe: responsável por unificar todos os componentes


internos do computador.

Modernamente trazendo para si alguns controles que antes


necessitavam de equipamentos próprios (como placas de som, placas de
vídeo, placas de rede, controladores de disco etc.).

As placas mãe são componentes fundamentais dos computadores,


sem a qual, a comunicação entre a CPU e os demais elementos jamais
aconteceria.

5) O Armazenamento. O elemento necessário para que as


informações sejam mantidas, para que os dados sejam
armazenados e possam ser lidos em algum momento.

23
Normalmente também, o local onde se armazena o sistema
operacional e os dados persistentes.

Pode ser um meio magnético (fita, disco) ou sólido (memória semi-


volátil, como pen drives ou discos sólidos – SSDs).

6) Periféricos. Utilizados principalmente para entrada e saída dos


dados, podem ser:

a. Teclados.

b. Mouses.

c. Monitores.

d. Impressoras etc.

CPU – Introdução

Como havíamos adiantado, neste capítulo trataremos da Unidade


Central de Processamento ou CPU.

A CPU é o cérebro do computador, por meio dela tudo é realizado ou


encaminhado durante a execução de qualquer instrução de um computador.

Em um programa de seguidas instruções, a CPU lê, processa e


devolve o resultado de cada comando. Ela retém para si a maior parte do
trabalho em um computador.

24
Ainda que, recentemente, o computador compartilhe funções com
outros chips de processamento (como os chips de aceleração de dados em
discos sólidos ou chips gráficos em placas gráficas), é a CPU quem comanda
o que acontece, quem realiza, como acontece e como o resultado deve ser
devolvido.

Ou seja, sem a CPU não há um computador.

As CPUs de hoje são componentes extremamente modernos, com


funções e capacidades que utilizam o mais primoroso trabalho da
engenharia humana, ainda assim, compartem de características
fundamentais que as torna uma Unidade Central de Processamento desde
que foram inventadas.

Toda CPU deve conter:

1) Uma Unidade Lógica e Aritmética (ALU).


2) Uma Unidade de Controle (UC).
3) Unidades de Armazenamento ou Registradores.

Pode-se também adicionar a esta lista Contadores de Programas (PC)


e Relógios (clocks), mas nos ateremos ao estudo dos 3 (três) primeiros
componentes listados.

Passemos agora ao estudo de cada uma destas partes da CPU.

CPU – Unidade Lógica e Aritmética

A ALU (Unidade Lógica e Aritmética) é uma das partes mais


importantes do processador. Trata-se de um circuito digital que realiza
operações de adição e subtração com lógica booleana.

Os computadores, como pensados inicialmente, são “grandes


calculadoras”, então sua função primordial é contar ou computar.

25
A ALU executa as operações aritméticas do computador. Por meio das
funções básicas de soma e adição, ela realiza multiplicações e divisões e
consegue determinar se um número é ou não positivo.

Além destas funções básicas, a ALU é capaz de realizar comparações,


determinando se números são iguais, menores ou maiores uns que os
outros.

Fonte: https://pt.wikipedia.org/wiki/unidade_central_de_processamento

As entradas e saídas dos dados da ALU são apoiadas pelos


Registradores (trataremos deles mais a frente), e podem executar operações
simples ou complexas.

As simples:

a) Aritmética com números inteiros.


b) Operações Lógicas AND, NOT, OR e XOR (bit a bit).
c) Operações de deslocamento de cadeias de bits.

26
As complexas (depende de cada processador, se a empresa optou ou
não por implementar estas funções):

a) Cálculo de Raíz Quadrada em um único passo.


b) Cálculo de Raíz Quadrada em uma série de passos.
c) Realização de Cálculo Interativo.
d) Emular um co-processador.

Normalmente, uma ALU não realiza cálculos de números com casas


decimais (ponto flutuante), esses cálculos ou são realizados via software, ou
por uma unidade apartada, chamada FPU (ou Float Point Unity ou Unidade
de Ponto Flutuante).

Cálculos com números complexos (com pontos flutuantes) exigem


circuitos mais elaborados e normalmente muito mais caros e complexos de
se produzir.

CPU – Unidade de Controle (UC)

Dentro do processador, os componentes estão sempre interligados.


Um grande conjunto de “fios” chamado BUS, interliga cada um dos
componentes.

A Unidade de Controle funciona como uma espécie de “semáforo”,


informando a estrada de serialização qual direção tomar.

Por exemplo, quando uma mensagem precisa ir da Memória RAM para


um Registrador, a Unidade de Controle informa aos componentes que as
informações do BUS sejam lidas neste sentido.

Caso, por exemplo, um determinado dado precise ser enviado do


Registrador A para o Registrador B, a UC informa aos componentes que as
informações do BUS seja lido neste sentido.

A UC dá ao processador múltiplas funções, sem ela o processador


somente saberia realizar uma atividade e não teria sentido.

27
Para saber o que fazer a cada momento, a UC realiza 3 (três) tarefas
fundamentais:

1) Ela realiza um FETCH (uma busca) no comando, ou seja, dada a


pilha de instruções, busca a próxima.
2) Ela DECODIFICA a instrução. Por exemplo, se (hipoteticamente) a
instrução é 0110 ela decodifica o que significa este comando (por
exemplo, levar o dado da Memória RAM para um Registrador).
3) Ela EXECUTA a instrução. Ou seja, ela informa a todos os
componentes o modo que deverá ser tratado o próximo conjunto
de bytes (neste exemplo hipotético, copiar da Memória RAM para
um Registrador).

CPU – Registradores

Os registradores são conjuntos de memórias super-rápidas que


residem dentro da própria CPU.

Não se trata de Memória Cache (que possui outra função), mas sim de
espaços pequenos de memória que servem para armazenar / acumular /
trocar / devolver informações de maneira extremamente rápida para o canal
de comunicação do CPU (BUS), de forma a ser utilizada por todos os
elementos do processador.

Os Registradores estão no topo da hierarquia das memórias e,


portanto, são as mais rápidas possíveis e também as mais caras de se
produzir.

Quanto mais rápido estas memórias puderem armazenar e devolver


as informações, mais rápido poderá o processador trabalhar.

Por exemplo, de nada adianta o processador operar em 1 Ghz (ou seja,


em 1 bilhão de pulsos por segundo), se a memória que armazena a entrada
ou a saída dos dados não puder operar nesta mesma velocidade, ela será
motivo de gargalos e a velocidade final será limitada por conta dela.

28
Os Registradores funcionam de maneira similar a Memória RAM,
porém, operando em uma escala muito menor, tratando a informação bit a
bit, byte a byte ou palavra a palavra. Podemos dizer que se trata de um
armazenamento volátil e temporário.

Os Registradores podem assumir várias funções diferentes dentro de


um processador e, portanto, existem registradores específicos para certas
tarefas. Vejamos:

1) Registradores Gerais:
a. Registradores Acumuladores ou de Dados – Servem para
acumular (armazenar) algum dado para uso posterior.
b. Registradores de Base – Recebem o endereço-base de um
dado objeto (servem, nas linguagens de programação para
armazenar os ponteiros).
c. Registrador Contador – Serve para contar as repetições e
deslocamentos.
d. Registradores de Carga Paralela – Controla, se a cada ciclo
do ‘clock’ um registrador está sendo carregado ou
mantendo o valor.
e. Registrador de Deslocamento – Serve para deslocar um
conjunto de bits da esquerda para a direita ou da direita
para a esquerda.

Apesar de existirem outros elementos importantes em uma CPU,


estes serão os que estudaremos nesse módulo.

29
3
Capítulo 3. Estrutura de um computador – Memória
Computadores necessitam de dados para existir, sem os dados essas
máquinas não teriam qualquer propósito.

E para que os dados possam ser processados e transformados,


precisarão, em algum momento, de ser armazenados, mesmo que seja
somente por alguns instantes.

Pensemos por exemplo que quiséssemos somar dois números.


Pensemos inicialmente que quiséssemos fazer isso com nossa própria
mente:

1) Primeiro teríamos que pensar em um número.

2) Segundo, teríamos que “armazenar” esse número em nossa mente


para que pudéssemos escolher outro.

3) Terceiro escolheríamos “outro número” e iniciaríamos a nossa


soma.

4) Agora, os dois números devem estar “armazenados em nossa


mente”.

5) Então começaríamos a somar, por exemplo, as unidades.


Somaríamos e armazenaríamos o resultado em nossa mente. E
mais: precisaríamos armazenar se o número carrega um dígito ou
não para o próximo algarismo (se vai um).

6) Agora somaríamos a segunda unidade, a dezena. Antes de somar,


no entanto, deveríamos “lembrar” se “vai um ou não”.

7) Então teríamos o nosso número que poderíamos externar (falando,


escrevendo ou guardando mais uma vez em nossa mente).

31
Nesse simples processo de somar, percebemos que a “memória” é
crucial para o processamento de uma informação. Sem apoio da “memória”
não há como resolvermos nem a mais simples soma.

Um computador trabalha de maneira similar a nossa mente, assim,


para realizar qualquer operação, ele necessita do apoio de memórias.

Bit, Byte, Palavra

Antes de adentrarmos efetivamente no estudo das Memórias, temos


que aprender um pouco sobre a organização dos dados.

A arquitetura dos computadores modernos, melhor se adaptou com


um sistema conhecido como binário, ou seja, onde só existem 2 números
para representar todos os dados, o 0 (zero) e o 1 (um).

Para um computador, tudo se resume a estes dois números e tudo


pode ser construído a partir deles.

Em nosso mundo humano cotidiano, conhecemos diversas


representações que dão significado às coisas, conhecemos desenhos, letras,
palavras e números. Já um computador conhece tão somente os números 0
e 1 e mais nada.

Assim, quando queremos representar, por exemplo 4 elementos,


utilizamos o algarismo 4 (quatro), quando querermos representar 7
elementos, utilizamos o algarismo 7 (sete), quando queremos utilizar uma
letra “a” usamos o símbolo “a” e assim sucessivamente.

Bits
Um computador não conhece estas representações, mas conhece tão
somente estados, ligado e desligado, que convencionamos chamar de 0 e 1.

32
Assim, para que um computador apresente ou represente em
memória qualquer informação, ele deve construi-la a partir de conjuntos de
estados (0s e 1s) que tenham significado similar. Vamos exemplificar:

a) Se queremos (humanos) representar o 0 (zero), usamos o símbolo


0 (zero). O computador também.

b) Se queremos representar o 1 (um), usamos o símbolo 1 (um). O


computador também.

c) Se querermos representar o 2 (dois), usamos o símbolo 2 (2). O


computador não conhece esse símbolo, então ele representa esse
valor com um conjunto de uns e zeros, no caso “10”.

Os bits agrupados, podem representar qualquer número que


queiramos, e sua equivalência com os números com base 10 (decimais) são
bastante simples, veja:

Decimal Binário
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100

Foquemo-nos um pouco mais nesse conceito, já que o entendimento


da representação binária será fundamental para seu sucesso neste curso.

Em decimal temos 10 representações para um dígito, indo de 0 até 9,


enquanto não chegamos no maior, vamos acumulando, por exemplo, se

33
queremos adicionar 1 em 6, temos uma próxima representação, o 7, então
podemos fazê-lo. Mas se chegarmos no maior (9), não podemos mais
acumular, então zeramos e levamos 1 para a próxima unidade (1 + 9) = 10.

Em binário é a mesma coisa, mas o maior é o 1, então quando


somamos 1 no maior, zeramos e levamos 1 para a próxima unidade (1 + 1) =
10. Outro exemplo: 10 + 1 = 11. Outro exemplo 11 + 1 = 100.

Estes bits agrupados podem ser melhores represenados se


restringirmos os algarismos a conjuntos (assim como no decimal fazemos,
por exemplo, com as dezenas [conjunto de 2 algarismos], com as centenas
[conjunto de 3 algarismos], com os milhares [conjunto de 4 algarismos] etc).

Bytes
Um conjunto comum de bits, é chamado de “byte” e ele é composto
de 8 algarismos binários:

________

Este conjunto permite que representemos até 256 diferentes


combinações, por exemplo:

00000000
00000001
00001000
11110000
11111111

34
Computadores trabalham bem com esta base octal (oito dígitos), já
que os binários, quando elevados a um número, tendem a crescer nessa
base, ou em uma fração dela:

21 2
22 4
23 8
24 16
25 32
26 64
27 128
28 256

Notem que estes números, são múltiplos de 8 ou divisíveis por ele.

CURIOSIDADE:

Quanto mais bits uma CPU puder trabalhar, maior será o


número de representações que ela poderá compreender.
Por exemplo, uma CPU de 8 bits pode entender até 256
representações por instrução.
Uma CPU de 16 bits, pode entender até 65.536 representações
por instrução.
Uma CPU de 32 bits, pode entender até 4.294.967.296
representações por instrução.
E uma CPU de 64 bits, pode entender até
18.446.744.073.709.551.616 representações por instrução.

Os bytes facilitam a representação de elementos para nós humanos,


para o Computador, no fundo, só existem bits.

Por exemplo, para criar um arquivo de textos simples (como no


Notepad), utilizamos somente um conjunto de caracteres agrupados.

35
O computador não entende caracteres (somente 0s e 1s), mas, para
representá-los, podemos convencionar que os caracteres podem ser
substituídos por um conjunto de números e, então, podemos agrupar esses
números em byte. Por exemplo, podemos dizer que a letra “a” minúscula,
pode ser representada pelo número 97, que em binário seria equivalente a:
01100001.

Isso significa que em um arquivo texto contendo a palavra


“Ola_Alunos”, poderíamos ter a seguinte representação:

O = 79; l = 108; a = 97; _ = 95; A = 65; l = 108; u =


117; n = 110; o = 111; s = 115.

Assim, no arquivo texto, apesar de vermos a palavra “Ola_Alunos”, o


computador enxerga assim:

79 108 97 95 65 108 117 110 111 115

Só que em binário:

01001111 01101100 01100001 01011111 01000001 01101100

01110101 01101110 01101111 01110011

Notem algo interessante, cada letra ocupa no máximo 8 bits, assim,


ao dizermos que 8 bits são 1 byte, podemos afirmar que este arquivo terá 10
bytes de tamanho. Experimente!

Palavra (Word):

A palavra é uma representação maior de bits, normalmente a palavra


tem 16 ou 32 bits, isso vai depender de sistema para sistema.

Assim, a palavra pode ser representada como o agrupamento de 2 ou


4 bytes:

Palavra de 2 bytes: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

36
Palavra de 4 bytes: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

As palavras servem para representar elementos que não caibam em


um byte, por exemplo.

Note que as palavras facilitam nossa interpretação das


representações como humanos, mas assim como com os bytes, o
computador (no fundo) só interpreta bits.

Por exemplo, se desejamos representar um kanji japonês “mi” – “ミ” -


no sistema binário, como não se trata de um caractere de uso convencional
fora do Japão, estabelecemos que seu código (decimal) será 6.890.847.

Esse número não cabe em 1 byte, teremos que utilizar uma


representação maior. Neste caso, precisaremos utilizar no mínimo 3 bytes,
ou uma palavra de 4 bytes com o primeiro conjunto zerado:

Palavra de 4 bytes: 00000000 01101001 00100101 01011111

Notaram, como agrupar os bits em bytes e os bytes em palavras


facilitam nossa representação?

Tipos de Memórias

Os computadores utilizam muitas diferentes memórias para guardar


e trocar informações.

Já falamos sobre algumas delas quando aprendemos sobre os


Registradores, mas há muitas outras que devemos conhecer.

Memórias que mantém o arquivo sem que ele se perca, mesmo sem
uma fonte de energia, se chamam Memórias de Armazenamento.

Aquelas que por sua vez se apagam quando desprovidas de


eletricidade, são chamadas de Memórias Voláteis.

37
As vezes, em um computador, queremos utilizar “Memórias de
Armazenamento”, outras vezes queremos utilizar “Memórias Voláteis”. Há
momentos, inclusive, que queremos utilizar as duas ao mesmo tempo. Tudo
isso é possível.

Memórias de Armazenamento são aquelas que conseguem manter os


dados, mesmo sem uma fonte de energia. No princípio, essa era a função dos
“Cartões Perfurados”, que mantinham a resposta (ou os programas) através
de seus furinhos em cada uma das perguntas (ou instruções):

Fonte: CodePen - Simulador Cartão Perfurado.

Na era da microcomputação, durante o desenvolvimento dos circuitos


integrados, Memórias de Armazenamento foram sendo criadas para
controlar o sistema básico de entrada e saída do computador. Neste período
nascem as Memórias ROM.

As Memórias do tipo ROM (memória somente de leitura) são aquelas,


cujo próprio nome sugere, que permite somente a leitura de dados e não a
escrita.

Suas informações são gravadas pelo fabricante, normalmente uma


única vez e não podem (veremos exceções) ser alteradas ou apagadas,
somente acessadas.

Vários exemplos de Memórias do tipo ROM podem ser citadas, entre


elas:

38
a) A BIOS dos Computadores.
b) Os cartuchos com programas para Computadores.
c) As EPROMS programáveis para Computadores etc.

As Memórias Voláteis compõem, juntamente com a CPU, o coração


dos computadores eletrônicos, e sofreram evoluções constantes desde a
criação destes equipamentos até os dias atuais.

O exemplo mais comum das memórias voláteis são as “Memórias do


tipo RAM” (ou memória de acesso randômico).

Vamos ver mais detalhes sobre cada uma nos tópicos a seguir.

Memórias do Tipo ROM

Além das BIOS dos computadores, as Memórias do tipo ROM podem


ser encontradas em todos os dispositivos eletrônicos:

a) Satélites.
b) Impressoras.
c) Celulares, notebooks e tablets.

Todos estes têm uma ROM embarcada para realizar tarefas básicas.

Os eletrodomésticos com funções digitais, por exemplo, como uma


máquina de lavar, também trazem esse tipo de memória para que seja
possível executar seus principais comandos.

Ou um veículo, para controlar o conjunto eletrônico de som e mídia.

Normalmente, os sistemas operacionais destes dispositivos são


conhecidos como firmware, sendo o sufixo ‘firm’ responsável pela ideia de
fixo / inalterável.

As Memórias do tipo ROM modernas, podem ser regravadas, mesmo


que o intuito seja fazê-lo raramente. Elas possuem hoje os seguintes tipos:

a) Mask-ROM: as primeiras ROMs desenvolvidas, seu conteúdo é


‘impresso’ no chip e não pode sofrer qualquer alteração.

39
b) PROM: trata-se de uma evolução da Mask-ROM. Essa, por sua
vez, pode sim ser alterada, mas tão somente uma vez, através
de modificações feitas diretamente no silício do chip.

c) EPROM: efetivamente o primeiro tipo de Memória ROM que


permitiu a reescrita. O processo era realizado expondo o chip à
luz ultravioleta por um determinado período.

d) EEPROM: a mais moderna e mais utilizada pela indústria atual.


Presente em vários dispositivos, como videogames e celulares.

Essas memórias permitem que suas informações sejam alteradas,


mas dispensam o uso da luz ultravioleta. A reescrita é feita com eletricidade.

Assim, é possível atualizar o firmware de um dispositivo, sem


remover o chip ROM da placa embarcada.

Memórias do Tipo RAM

A memória de acesso aleatório (do inglês “Random Access Memory”),


é também conhecida como memória volátil de leitura e de escrita. Trata-se
de uma memória temporária de acesso rápido e randômico.

Este tipo de Memória é essencial para os computadores, pois é onde


ficam armazenados os programas básicos operacionais.

Modernamente, os programas hoje seguem o seguinte caminho para


execução:

1) São lidos bit a bit do HDD (SSD).

2) São armazenados na Memória RAM (se possível).

3) São executados pelo Processador.

4) Os resultados são rearmazenados na Memória RAM.

40
5) Os dados podem ser persistidos em disco (HDD ou SSD).

A Memória RAM cumpre um papel fundamental na execução dos


programas, já que o uso tão somente dos Registradores seria insuficiente
para o processamento das informações.

Alternativamente, o uso dos Registradores e do Disco de


Armazenamento, tornaria o processo extremamente lento, já que estes
dispositivos, normalmente, operam em muito menor velocidade do que as
memórias RAM.

Existem dois tipos de Memória RAM na atualidade:

1) As SDR (atualmente em desuso).

2) As DDR (atual padrão do mercado).

A diferença entre as duas reside na capacidade máxima de


armazenamento e velocidade de acesso às informações, sendo a DDR mais
capaz em tudo.

Importante destacar, a Memória Cache, que havíamos citado


anteriormente. Tratam de Memórias similares às Memórias RAM, mas
acopladas diretamente nos processadores (nas CPUs). Cumprem o mesmo
papel, porém são muito rápidas e estão mais próximas (fisicamente) da CPU
do que as Memórias RAM.

41
4
Capítulo 4. Estrutura de um computador – Dispositivos

Vamos tratar neste capítulo dos dispositivos adicionais que compõem


um computador.

Memórias Externas ou Secundárias

Armazenamento sempre foi algo caro nos computadores, mas com o


avanço das pesquisas tecnológicas, diversos apetrechos foram sendo
desenvolvidos para estender a capacidade das máquinas.

Falamos de unidades de leitura e armazenamento externas ou


secundárias, cujo maior expoente nos dias de hoje são os pen-drives.

Os pen-drives são pequenos dispositivos, plugáveis em uma porta de


expansão de sua máquina (normalmente no formato USB), que comportam
uma série de arquivos e dados, facilmente transportáveis entre
equipamentos.

Antes dos pen-drives tivemos alguns outros dispositivos externos,


vamos citar alguns:

1) Fita Cassete: meios magnéticos sempre fizeram parte da história


dos computadores. No passado, as trocas de arquivos eram feitas
com uso destes dispositivos.

Fonte: https://www.canstockphoto.com.br/real%C3%ADstico-fita-cassete-
12478257.html

43
2) Disquete: também pertencente à família dos meios magnéticos,
porém mais confiáveis e mais rápidos do que as fitas cassetes.
Como desvantagem, possuíam pouco espaço de armazenamento.

Fonte: https://robertcg.wordpress.com/2013/03/18/evolucao-tecnologica-do-
disquete-ao-dropbox/

3) CD/DVD/BluRay: mídias mais recentes e de grande capacidade de


armazenamento surgiram a partir da década de 1.990. Tratava-se
de mídias cuja leitura e gravação eram feitas por comprimento de
ondas, por meio de feixes de raios lasers. Em um primeiro
momento, surgiram os CDs, com 640 MB de capacidade de
armazenamento, que logo evoluíram para o DVD com 4.7 GB de
capacidade e finalmente os Blu-Rays, com capacidade de
armazenamento de 25 GB.

Fonte: https://www.techtudo.com.br/noticias/2014/06/qual-diferenca-entre-blu-
ray-dvd-e-cd-entenda.ghtml

Diversas outras mídias e dispositivos foram criados durante a vida


dos computadores, estes citados foram os que se tornaram padrão de
mercado e dominaram seus concorrentes.

44
Discos Rígidos

Um dos componentes mais importantes nos computadores modernos


são os discos rígidos.

Eles não estão presentes desde o início da era dos


microcomputadores, mas surgiram depois, com a evolução dos dispositivos
de armazenamento.

No princípio, o custo de produção era exorbitante e os primeiros


HardDisk tinham poucos MB de capacidade. Hoje, eles ocupam lugar de
destaque em todos os dispositivos, sendo recentemente, substituídos por
equipamentos mais modernos, como os SSDs.

A Evolução dos Discos Rígidos

As unidades de armazenamento nos computadores eletrônicos,


conforme relatado anteriormente, começou com os cartões perfurados.

Um cartão perfurado já foi a base para informações digitais usadas


para programas de computador e armazenamento de dados. Eles foram
amplamente utilizados ao longo da primeira metade do século XX em
máquinas de processamento para inserir dados e armazená-los.

Os cartões perfurados poderiam ser alimentados no primeiro


computador comercial, o sistema IBM 305, que então armazenava os dados
em discos rígidos.

O primeiro disco rígido criado foi desenvolvido nos laboratórios da


IBM, de forma a atender exatamente ao IBM 305:

45
Fonte: https://www.arnnet.com.au/

Ele foi introduzido em setembro de 1.956, possuía 40 (quarenta)


pratos e uma cabeça de leitura/gravação dupla em um único braço que se
movia para cima e para baixo na pilha de bandejas de disco magnético. Esses
40 pratos armazenavam 5MB de dados.

O disco magnético inventado pela IBM no início da década de 1950


continha 100 faixas concêntricas de cada lado. Cada faixa armazenava 500
caracteres alfanuméricos, gerando uma capacidade total de
armazenamento de 5 milhões de caracteres (5 MB). Este disco permitiu que
os usuários recuperassem qualquer informação diretamente em menos de
um segundo.

Ainda na década de 1950, também nos laboratórios da IBM, foi criado


o Tambor Magnético. Este instrumento de 16 polegadas girava a 12.500
rotações por minuto para fornecer ao computador IBM 650, 10.000.000
caracteres de memória principal (10 MB). Os dados eram codificados
magneticamente em 40 faixas ao redor do tambor.

46
Fonte: https://www.arnnet.com.au/

A primeira miniaturização dos discos rígidos, aconteceu em meados


dos anos de 1960, quando a IBM produziu seu computador IBM 1311.

O HardDisk naquela época, encolheu de um tamanho de uma


geladeira para o tamanho de uma máquina de lavar roupas. Esse novo HDD
possuía 6 pratos de 14 polegadas e continha um pacote de discos removíveis
de 2.6 MB de dados cada:

Fonte: https://www.arnnet.com.au/

No início dos anos 1.970, a tecnologia dos HDDs começou a avançar


rapidamente, e no ano de 1.971 foi lançado o primeiro HDD compacto da
história, contendo somente 8 polegadas.

47
Seu ponto fraco era a quantidade de dados armazenáveis, somente
80Kb:

Fonte: https://bot.rec.br/evolucao-do-hd/

Em 1.973, novamente pelas mãos da IBM, tivemos o lançamento do


Winchester 3340 (cujo nome virou sinônimo de HDD por longos anos).

Esse HDD foi o primeiro modelo com características próximas aos


discos atuais:

Fonte: https://time.graphics/pt/event/2549276

Finalmente, em 1.980, uma empresa chamada Shugart Technology


(rebatizada Seagate Technology) lançou o ST506, o primeiro HDD para
microcomputadores, com capacidade de 5MB.

Para sua instalação em um microcomputador, era necessária a


instalação de um circuito adicional, conhecido como “Placa Controladora de
Disco”:

48
Fonte: https://bot.rec.br/evolucao-do-hd/

Para sua instalação em um microcomputador, era necessária a


instalação de um circuito adicional, conhecido como “Placa Controladora de
Disco”.

Nos anos de 1.980, novos padrões começam a surgir. Nascem o IDE


(Integrated Drive Electronics) e o ATA (Advance Technology Attachment),
cuja principal novidade foi trazer a controladora integrada no próprio disco.

Evolução dos discos dos anos 70 a 2000.

Fonte: https://www.arnnet.com.au/

A versão 1 do IDE/ATA possuía ciclos rápidos 240 nanossegundos e


suportava até 540 MB. Em sua 8ª versão, o armazenamento já havia
superado a casa dos 500GB.

Nos anos 2.000 uma nova interface foi apresentada, conhecida como
SATA. Ela permitia aos dispositivos de armazenamento se conectarem a

49
vários sistemas host com a mesma interface, com muito maior largura de
transferência.

Em 2.007, tivemos o lançamento do 1º HDD do mundo com


capacidade de armazenamento de 1 TeraByte (TB), se tratava do Hitachi
Storage Tech.

Na segunda década dos anos 2000, um novo concorrente surge, para


talvez pôr fim aos discos rígidos com pratos rotativos. Trata-se do SDD, que
se assemelham as tecnologias adotadas nos pen-drives.

Fonte: https://www.arnnet.com.au/

Dispositivos de Backup

A segurança e preservação dos dados sempre foi uma preocupação


recorrente no âmbito da informática.

Soluções de cópias de segurança dos dados vêm sendo adotadas


desde o princípio da computação. A evolução dos dispositivos de backup
acompanhou a evolução dos dispositivos de armazenamento, tendo se
mantido estável em fitas magnéticas nos últimos anos.

As fitas magnéticas são confiáveis e duráveis se armazenadas com o


devido cuidado. Além de ser um meio barato para a manutenção dos dados.
Com a chegada das plataformas de computação em nuvem, seu uso (das
fitas magnéticas) tem sido posto em questionamento, já que armazenagem
em nuvem, normalmente possui mais vantagens e o custo se equivale.

50
Fonte: https://www.nakivo.com/blog/magnetic-tape-backup-best-practices/

Periféricos de Entrada e Saída

Os computadores atuais podem ter muitos periféricos de entrada e


saída de dados, citemos aqui os mais comuns:

1) Monitor: principal periférico para saída de dados, exibe as


informações de forma gráfica (no formato de pixels) para que o
usuário tenha controle do processamento.

Fonte: https://en.wikipedia.org/wiki/Computer_monitor

51
2) Impressora: periférico de saída de dados, exibe as informações
com marcações sobre um papel.

Fonte: https://www.istockphoto.com/br/search/2/image?phrase=computer+printer

3) Mouse: periférico de entrada de dados, o mouse informa ao


computador, em qual posição da tela o usuário deseja interagir.

Fonte: https://www.amazon.com/

4) Teclado: principal periférico de entrada de dados, é através do


teclado que o usuário informa ao computador, seu fluxo de
informações.

Fonte: https://www.amazon.com/

52
5) Placa de Rede: periférico de entrada e saída de dados, é por meio
deste dispositivo que os computadores se comunicam uns com os
outros.

Fonte: https://www.istockphoto.com/br/search/2/image?phrase=computer+printer

53
5
Capítulo 5. Sistema Binário / Booleano

Detalhando o sistema binário

Conforme apresentamos anteriormente, o sistema binário é um


sistema de base 2, em que toda e qualquer quantidade se representa com 2
algarismos, o 0 (zero) e o 1 (um).

Os computadores, na realidade, não entendem números, nem mesmo


zeros e uns, mas sim frequências elétricas ou níveis de tensão elétrico.

Quando um computador recebe uma tensão muito baixa (próxima de


zero), dizemos que ele está recebendo um valor 0 (zero). Quando um
computador recebe uma tensão alta, dizemos que ele está recebendo o valor
1 (um).

Desta maneira, conseguimos, por meio de controle do fluxo dos


elétrons, representar em uma máquina a lógica binária ou booleana.

Para entendermos o funcionamento de um computador, devemos


entender a Álgebra Booleana (criada pelo matemático inglês, George Boole).

Boole demonstrou seu sistema algébrico, por meio de seu artigo “The
Mathematical Analysis of Logic”, e mais tarde como um livro chamado “The
Laws of Thought”, publicado em 1.854.

Notem que nos anos das publicações, os computadores eletrônicos


não existiam, portanto, a Álgebra de Boole é anterior aos computadores e foi
utilizada por engenheiros e cientistas para construí-los.

De maneira simplificada, podemos definir a Álgebra de Boole por um


conjunto de instruções e propriedades:

55
a) Os símbolos para representar os valores são 0 e 1, portanto,
estamos tratando de um sistema numérico binário (e não decimal
como estamos acostumados).

b) Existe uma operação unária, conhecida como “negação”,


representada pelo símbolo “~”. Neste caso, a negação de 0: (~0) =
1 e a negação de 1: (~1) = 0.

c) As operações aritméticas fundamentais são aplicáveis a este


sistema numérico. Assim, podemos realizar Adição, Subtração,
Divisão, Multiplicação entre números binários.

d) Existem duas operações binárias, que quando combinadas podem


formar outras operações. Elas são a operação AND (“E”) e a
operação OR (“OU”).

e) As propriedades das operações OR aplicáveis são:

i. Associativa, onde: (a OR b) OR c = a OR (b OR c)

ii. Comutativa, onde: a OR b = b OR a

iii. Absortivas, onde: a AND (a OR b) = a

iv. Distributivas, onde: a OR (b AND c) = (a OR b) AND (a OR c)

v. Neutro, onde: a OR 0 = a

vi. Complementar, onde: a OR ~a = 1

f) As propriedades das operações AND aplicáveis são:

i. Associativa, onde: (a AND b) AND c = a AND (b AND c)

ii. Comutativa, onde: a AND b = b AND a

iii. Absortivas, onde: a OR (a AND b) = a

iv. Distributivas, onde: a AND (b OR c) = (a AND b) OR (a AND c)

v. Neutro, onde: a AND 1 = a

56
vi. Complementar, onde: a AND ~a = 0

g) Os teoremas são:

i. a OR a = a

ii. a AND a = a

iii. ~(~a) = a

iv. ~(a OR B) = ~a AND ~b

v. ~(a AND b) = ~a OR ~b

vi. a OR (a AND b) = a

vii. a AND (a OR b) = a

viii. a OR 1 = 1

ix. a AND 0 = 0

x. ~0 = 1

xi. ~1 = 0

h) Existe ainda o operador XOR (ou exclusivo), que é muito relevante


para o entendimento da lógica computacional, ele funciona assim:

a. 1 XOR 0 = 1

b. 1 XOR 1 = 0

c. 0 XOR 0 = 0

d. 0 XOR 1 = 1

Ou seja, dada a análise de dois elementos, somente será verdadeiro


(1), se ambos os elementos forem diferentes (ou seja, exclusivos).

Existem outros conceitos mais avançados, mas estes são suficientes


para compreender boa parte da lógica computacional.

57
Funcionamento de uma Unidade Central de Processamento

Como a Álgebra Booleana se baseia em um sistema numérico


binário, com o controle da eletricidade pelo homem, foi possível implementar
uma máquina que pudesse reproduzi-la.

Vamos pensar em termos muito básicos, suponha que você tenha


dois interruptores e que você os ligue em série (ou seja, um depois do outro),
e ao final dos dois, tenhamos uma lâmpada:

Digamos que o circuito flua do negativo (vermelho) para o positivo


(azul).

Para que o circuito se complete, os elétrons devem atravessar tanto


o primeiro interruptor quanto o segundo interruptor. Assim, para termos o
elétron fluindo em uma disposição em série, devemos ter ambos com
LIGADO E LIGADO.

Se no exemplo anterior, o primeiro interruptor estiver DESLIGADO,


teremos uma interrupção na passagem do elétron e o resultado será
DESLIGADO.

Ainda, se no exemplo anterior, o segundo interruptor estiver


DESLIGADO, ainda que o primeiro esteja ligado, teremos uma interrupção
na passagem do elétron e o resultado será DESLIGADO. O mesmo ocorrerá
se ambos os interruptores estiverem DESLIGADOS.

Assim, podemos concluir, com esse primeiro exemplo, que:

1 (ligado) E 1 (ligado) = 1 (ligado)

58
0 (desligado) E 1 (ligado) = 0 (desligado)

0 E 0 = 0 (desligado)

1 E 0 = 0 (desligado)

Essa é a lógica do operador E (AND), que podemos resumir na


seguinte tabela:

TRUE AND TRUE TRUE


FALSE AND TRUE FALSE
FALSE AND FALSE FALSE
TRUE AND FALSE FALSE

Vamos agora pensar em outro exemplo básico, vamos imaginar


agora que tenhamos dois interruptores e que você ligue em paralelo:

Agora, para o elétron fluir do negativo para o positivo (e acender a


lâmpada), basta que ele passe OU pelo interruptor 1 OU pelo interruptor 2.

Neste sentido, se o interruptor 1 estiver ligado, não importa o estado


do interruptor 2 (ligado ou desligado).

Se o interruptor 2 estiver ligado, não importa o estado do interruptor


1 (ligado ou desligado).

Assim, podemos concluir, com esse segundo exemplo, que:

1 (ligado) OU 1 (ligado) = 1 (ligado)

59
0 (desligado) OU 1 (ligado) = 1 (ligado)

0 (desligado) E 0 (desligado) = 0 (desligado)

1 (ligado) E 0 (desligado) = 0 (ligado)

Essa é a lógica do operador OU (OR), que podemos resumir na


seguinte tabela:

TRUE OR TRUE TRUE


FALSE OR TRUE TRUE
TRUE OR FALSE TRUE
FALSE AND FALSE FALSE

No computador, estes interruptores são substituídos por transistores,


que fazem exatamente o mesmo papel.

60
6
Capítulo 6. Operando computadores

Para operarmos os computadores, precisamos dar a eles comandos,


que serão interpretados e executados linha após linha.

Um programa poderia ser algo assim:

INICIE

GUARDE NA MEMÓRIA “OLÁ TURMA” NA ETIQUETA MSG

ESCREVA O CONTEÚDO DE MSG NA TELA

PERGUNTE PARA O ALUNO O SEU NOME, ESPERE ELE ESCREVER E GUARDE


O VALOR INFORMADO NA ETIQUETA NM

REPITA 3 VEZES:
“OLÁ “ + NM

FIM

O resultado desse programa simples seria algo assim:

> “OLÁ TURMA”

> “QUAL O SEU NOME” joao

> OLÁ joao OLÁ joao OLÁ joao

Para que este código execute é necessário que você instrua o


computador, passo a passo, o que ele deve fazer.

Isso é feito (normalmente), por meio de um programa que você


escreve e transforma em linguagem de máquina (a linguagem que o
computador entende).

Vamos ver tudo isso neste capítulo.

62
Linguagem de Máquina

Como já enfatizamos nos capítulos anteriores, os computadores não


entendem nossa língua cotidiana, não entende textos, não entende letras,
nem entende números, os computadores só entendem sinais elétricos
fortes e fracos, que convencionamos chamar de 1 e 0.

Os programas, ao fim e ao cabo, são um conjunto de sinais elétricos


que instruímos ao processador para que ele execute, um de cada vez.

No começo, quando os computadores não tinham meios de entradas,


fazíamos isso com botões (switches) que ligávamos manualmente e
permitíamos que as informações fossem armazenadas.

Com esse componente acima (um exemplo moderno, já que os


primitivos eram mais parecidos com interruptores mesmo), se quiséssemos
dizer ao computador que queríamos “imputar” o valor 35, por exemplo,
manteríamos o botão 1 desligado, o 2 desligado, o 3 ligado, o 4 desligado, o
5 desligado, o 6 desligado, o 7 ligado e o 8 ligado. Assim:

0 0 1 0 0 0 1 1

E ao pressionar um botão “armazenar”, este conjunto de sinais


eletrônicos eram guardados em memórias criadas com esse propósito, por
meio de uma combinação eletrônica conhecida como Flip-Flop (não veremos
isso neste curso).

Com o passar dos anos, conseguimos transmitir essas informações ao


computador por meio de programas, que entendiam o nosso comando, e

63
liberavam ou bloqueavam os sinais elétricos, armazenando ou processando
a informação.

Essas provinham de instruções simples, que somadas aos dados,


permitia que construíssemos coisas mais complexas, sem a necessidade de
ficarmos empurrando alavancas.

Se usássemos um conjunto de instruções, poderíamos “dizer” ao


computador o que ele deveria fazer, por exemplo (hipoteticamente):

0 0 0 0 – Guardar na Memória A
0 0 0 1 – Guardar na Memória B
0 0 1 0 – Somar a Memória A e a B
0 0 1 1 – Subtrair a Memória A da Memória B
0 1 0 0 – Exibir o conteúdo da Memória A na saída
1 1 1 1 – Inicia o Programa
1 1 1 0 – Finaliza o Programa

E em seguida, após dita a instrução, poderíamos informar algum valor.


Por exemplo, para somar dois números, poderíamos fazer assim
(hipoteticamente):

1 1 1 1 0 0 0 0 0 0 0 0 (inicia o programa)
0 0 0 0 0 0 0 0 1 0 0 0 (guarda 8 na memória A)
0 0 0 1 0 0 0 0 1 1 1 1 (guarda 15 na memória B)
0 0 1 0 (soma A com B)
0 1 0 0 (exibe o conteúdo na saída)
1 1 1 0 (finaliza o programa)

Apesar de hipotético, este seria um típico programa escrito em


linguagem de máquina. Como vocês podem notar, apesar de intuitivo, estava
tremendamente propenso a erros.

Imaginem 10.000 linhas de código escritas desta maneira, imaginem


se um bug acontecesse, quão difícil seria descobrir sua origem.

64
Mas nos primórdios, essa era a única maneira de se programar um
computador.

Linguagens de Programação

Para facilitar o processo de desenvolvimento de softwares, os


engenheiros da tecnologia começaram a inventar maneiras de converter
textos com instruções idiomáticas em códigos de máquina.

Utilizando os próprios computadores, tais engenheiros começam a


produzir programas que traduzem instruções em inglês (simples), para o
equivalente em linguagem de máquina, nascem ali as linguagens de
programação.

As linguagens de programação e os programas nelas escritos não


podiam ser executados nativamente nos computadores, eles precisavam
passar por um processo triplo de Compilação, Criação de Objetos e
Montagem, nasciam ali os compiladores.

A partir da criação das primeiras linguagens de programação, o


processo de amadurecimento desta tecnologia floresceu muito e
rapidamente.

Linguagens cada vez mais complexas foram sendo desenvolvidas


para que o ato de programar estivesse cada vez mais próximo do ato de
escrever instruções em nossa língua nativa.

Estas linguagens de programação podem ser classificadas em


muitas gerações, vejamos algumas:

i. As linguagens de 1ª geração eram as linguagens de máquina.


ii. As de 2ª geração foram as linguagens de montagem (Assembly).
iii. As de 3ª geração foram as linguagens procedurais.
iv. As de 4ª geração foram as linguagens aplicativas.
v. As de 5ª geração foram voltadas para IA.

65
vi. As de 6ª geração foram voltadas para Redes Neurais.

Veremos nos capítulos a seguir alguns exemplos mais claros.

Linguagens de Montagem (Assembly)

Imagine se pudéssemos substituir a seguinte instrução de


linguagem de máquina por uma outra mais fácil de compreender:

0 0 0 0 0 0 0 0 1 0 0 0 (guarda 8 na memória A)

Imagine se pudéssemos escrever dessa maneira:

ARMAZENA_EM_A 8

Não seria muito mais fácil? Vejamos outro exemplo:

0 0 1 0 (soma A com B)

Imagine se pudéssemos escrever dessa maneira:

SOMA_A_B

Seria interessante, não? Este foi o caminho tomado pela primeira


linguagem de programação criada após a linguagem de máquina.
Convencionou-se chamá-la de Assembly.

Importa ressaltar que cada processador possui seu próprio conjunto


de instruções, portanto, cada Assembly serve especificamente para cada um
deles.

Mas a medida que o desenvolvimento dos Hardwares foram se


padronizando (ou seja, a medida que a empresa Intel foi dominando o
mercado), a linguagem se tornou mais genérica, atendendo a mais
plataformas com melhor compatibilidade.

66
Claro, a linguagem Assembly não existiu em português, como
mostramos acima (era somente para fins de exemplo), mas eram similares
aquilo, só que em inglês, vejam esses comandos por exemplo:

LDA - Leia do Registrador A

STA – Armazene no Registrador A

LDB – Leia do Registrador B

ADD – Adiciona o valor com o do Registrador A

SUB – Subtrai o valor com o valor de A

CMP – Compara

JMP – Salta

AND – Executa uma operação bit a bit de adição

O Assembly foi uma linguagem muito importante, adotada por


praticamente todos os criadores de Hardware do mundo.

No entanto, seu uso foi sendo, pouco a pouco, suplantado por


linguagens mais modernas, como veremos a seguir.

Linguagem de Alto Nível

O salto qualitativo dado pela linguagem Assembly foi sem


precedentes e permitiu, por meio dela a criação de novas, ainda mais fáceis
e simples de se utilizar, que se assemelhavam muito mais com a linguagem
natural humana.

As linguagens de programação de alto nível permitiram um maior


nível de abstração dos detalhes da máquina que se estava operando.

Ao invés de conhecer as instruções específicas para cada montador


(Assembler) ou mesmo a instrução de máquina, era possível utilizar
comandos genéricos que atendiam a múltiplos propósitos e equipamentos.

Vamos a um exemplo prático:

67
Imagine que tivéssemos 2 CPUs diferentes, cada um com um
conjunto de instruções. Por exemplo, imagine que para comparar 2 valores
precisássemos: 1º) adicionar o valor no Registrador A; 2º) comparar o valor
de A com outro informado; e 3º) analisar o valor armazenado em B, que o
resultado seria 0 0 se igual, 0 1 se menor ou 1 1 se maior.

Em linguagem de máquina (hipotética), no processador 1, seria


assim:

0 0 0 0 0 0 0 0 0 1 0 0 (armazena 4 no Registrador A)

0 1 0 1 0 0 0 1 0 0 0 0 (compara A com o valor 16)

1 0 0 0 (envia o resultado da compara-


ção para a saída)

O resultado em B, seria 0 1 (significando que o valor de A é menor).

Agora, imaginemos que no processador 2 as instruções são


diferentes, então teríamos que reescrever o programa:

0 1 1 0 0 0 0 0 0 1 0 0 (armazena 4 no Registrador A)

0 0 0 1 0 0 0 1 0 0 0 0 (compara A com o valor 16)

1 1 1 1 (envia o resultado da compara-


ção para a saída)

Notaram? Se trata do mesmo programa, mas o conjunto das


instruções são diferentes para o 2º processador.

Como dissemos, cada processador poderia ter sua própria


implementação de Assembly, então se reescrito nessa linguagem,
poderíamos ter que fazer 2 programas:

STA 4 (armazena 4 no Registrador A)

CMPA 16 (compara A com o valor 16)

HLT (envia o resultado da comparação para a saída)

68
Para o 2º processador:

STOR_A 4 (armazena 4 no Registrador A)

CMP_A 16 (compara A com o valor 16)

HLT_P (envia o resultado da comparação para a saída)

Claro que esse caso é hipotético e que normalmente os comandos


básicos das implementações de Assembly eram quase sempre iguais, mas
pensemos assim somente para a ilustração.

Para solucionar esses problemas, novas linguagens mais abstratas


foram criadas. Linguagens que abstraiam não só as instruções e os
mnemônicos, mas também a necessidade de entender de Registradores e
Comparadores.

Linguagens mais parecidos com a língua inglesa foram criadas para


facilitar a programação. Por exemplo, o código acima poderia ter sido escrito
assim:

var valor = 4
if (valor < 16) then
print “menor”
else if (valor == 16) then
print “igual”
else
print “maior”
end
Esta abstração, extremamente simplificada, muitas vezes é
convertida primeiro em código Assembly e depois em código de máquina, no
mesmo processo de compilação.

69
Muitas linguagens foram criadas nos últimos anos, as mais
importantes são as seguintes:

 Basic/Qbasic.

 C/C++.

 FORTRAN.

 Pascal/Delphi.

 COBOL.

 Smalltalk.

 Java.

 Algol.

 ADA.

 LISP.

Mais à frente, neste curso, veremos com detalhes algumas destas


linguagens de programação.

70
7
Capítulo 7. Aplicações Básicas

Neste capítulo conheceremos algumas aplicações básicas da


informática que foram sendo desenvolvidas com o passar dos anos.

Veremos os sistemas operacionais e os softwares de escritórios mais


importantes. Veremos programas de desenho e conheceremos os vírus e as
vacinas.

Comecemos!

Sistemas Operacionais

No princípio, operar computadores era algo EXTREMAMENTE


complexo e difícil.

Não havia telas, arquivos, gráficos, nada. Havia uma entrada de dados,
que poderia ser por meio de botões (switchs) ou cartões perfurados, e uma
saída (normalmente um painel de lâmpadas), que deveria ser interpretado
ao final.

A medida em que os computadores foram evoluindo, engenheiros de


software começaram a criar pequenos programas para facilitar a operação
dos computadores.

Criaram, como já citamos, a possibilidade de se ler um conjunto de


instruções direto de um componente de memória (quase como uma leitura
de arquivo), depois criaram um programa que transformava uma linguagem
mais acessível em código de máquinas. E depois disso, outras várias
funcionalidades foram sendo programadas.

Em algum dia, algum engenheiro criou uma biblioteca para somar


números, em outro alguém conseguiu fazer uma maneira de se “salvar” um
arquivo em um meio de armazenamento, em outro criou-se um programa

72
para listar os arquivos salvos e, pouco a pouco, foi-se desenvolvendo
bibliotecas (funções) que operavam as máquinas de uma maneira mais fácil
e abstrata (sem ter que se entender de instruções ou comportamentos de
memória).

Este conjunto de funcionalidades, quando agrupados, começou a ser


chamado de sistema operacional (ou um conjunto de ferramentas para se
operar o computador).

Claro, no princípio não havia qualquer padrão, e cada computador


tinha seu próprio conjunto de funções, escritas a sua própria maneira.

Mas a medida em que os computadores foram evoluindo (que foram


sendo vendidos em maior escala), e que grandes empresas começaram a
produzi-los em série e em massa (como a IBM, por exemplo), tem-se início a
adoção de conjuntos únicos de bibliotecas e distribuições padronizadas.

O primeiro sistema operacional moderno (mais completo e


grandemente adotado pelas fabricantes) foi chamado de Unix. Esse incrível
sistema operacional foi desenvolvido pela gigante da telecom americana,
AT&T, sendo lançado em 1.969.

Sua primeira versão foi escrita em Assembly, sendo portado para a


linguagem C em meados dos anos 70. Durante os anos de 1.970, este
sistema operacional foi distribuído livre e gratuitamente para órgãos do
governo e universidades americanas, popularizando rapidamente o seu uso.

Ainda nos anos 70, uma variação do UNIX surgiu, sendo conhecida
como BSD, focado em desempenho.

Esse início foi extremamente importante e interessante para estes


softwares, mas seu uso ainda era extremamente complexo e distante do
público em geral.

73
Com o nascimento dos Computadores Pessoais, destinados a
públicos mais amplos, começaram a nascer sistemas operacionais mais
amigáveis e fáceis de se operar.

O primeiro, foi lançado juntamente com o computador Apple I em


1.976, criado pelo próprio Steve Jobs.

Tratou se de uma máquina, com sistema operacional proprietário, que


acabou ganhando certa popularidade em sua época.

Fonte: https://canaltech.com.br/curiosidades/apple-i-e-acessorios-sao-leiloados-
por-mais-de-r-2-milhoes-no-reino-unido-140299/

Os computadores seguintes da Apple (o Apple II e o Apple III)


também não usaram o UNIX como base e fizeram mais sucesso que seu
antecessor.

No princípio dos anos de 1.980, Steve Jobs teve contato com a


empresa Xerox Parc, que havia criado um sistema operacional incrível, com
uma interface visual parecida com o que temos hoje.

A Apple copiou os conceitos da Xerox e, em 1.984, lançou o Macintosh,


o primeiro computador com sistema operacional comercial que continha
uma interface gráfica, com ícones e pastas, da forma como conhecemos
hoje:

74
Fonte: https://pt.wikipedia.org/wiki/Macintosh_128K

No final dos anos de 1.970, Bill Gates, um jovem programador,


começou a desenvolver um sistema operacional para o computador Altair da
IBM. Ao obter sucesso com sua criação, Gates procurou a IBM, que aceitou
embarcá-lo em seus computadores a partir de 1.979.

Nascia ali o MS DOS. Um sistema operacional baseado em texto,


bastante parecido com o já consolidado UNIX.

Nos anos seguintes, copiando o trabalho da Apple, a Microsoft lança,


em 1.985, seu primeiro sistema operacional gráfico, o Windows 1.0.

75
Fonte: www.microsoft.com

Nos anos 2.000, o Macintosh sofria com problemas e a Apple tomou a


decisão de reescrever o sistema, agora, tomando como base o UNIX.

Criou-se ali o MacOS.

Fonte: www.apple.com.

Microsoft e Apple seguiram ano a ano criando novas versões de seus


sistemas operacionais. Sendo lançados, pelo lado da Microsoft:

Windows 2 1987
Windows 3 1990
Windows 3.1 1992
Windows 95 1995
Windows 98 1997
Windows ME 1999
Windows XP 2001
Windows Vista 2007
Windows 7 2009

76
Windows 8 2012
Windows 8.1 2013
Windows 10 2015
Windows 11 2021

Pelo lado da Apple:

Mac OSX - Cheetah 2001


Mac OSX – Jaguar 2002
Mac OSX – Panther 2003
Mac OSX – Tiger 2005
Mac OSX – Leopard 2007
Mac OSX – Lion 2010
Mac OSX – Montain Lion 2012
Mac OSX – Mavericks 2013
Mac OSX – Yosemite 2014
Mac OSX – El Capitan 2015
Mac OS – Sierra 2016
Mac OS – High Sierra 2017
Mac OS – Catalina 2019
Mac OS – Big Sur 2020
Mac OS – Monterey 2021

Em 1.991, um finlandês chamado Linus Torvalds iniciou o núcleo de


um sistema operacional.

Criado em C e baseado em UNIX, foi chamado de LINUX e teve, desde


o princípio, seu código aberto para a comunidade.

O projeto LINUX se uniu a outro projeto conhecido como GNU e a


fusão gerou o LINUX GNU, versão 0.01, em 1.992. Em 1.996, o LINUX adotou
sua mascote oficial, o Tux, um pinguim.

Desde seu início, por ter Código Aberto e disponível para a


comunidade, o LINUX fez um estrondoso ruído e abalou a poderosa
Microsoft no domínio dos sistemas operacionais, em especial nos servidores.

77
Várias empresas começaram a desenvolver suas próprias versões do
LINUX, que ficaram conhecidas como “distros” (de distributions). Entre elas:

 Debian.
 Slackware.
 Arch.
 OpenSUSE.
 Manjaro.
 Sabayon.
 SolusOS.
 Antergos.
 Mageia.
 Redhat.
 Kali.
 Fedora.
 Ubuntu.

O LINUX se tornou um sistema operacional muito importante. A


comunidade em volta de seu código fez excelentes trabalhos e muito do que
temos na computação atual, devemos ao LINUX, em especial o que temos
de Computação em Nuvem.

Além disso, o LINUX serviu como base para outro sistema operacional
MUITO popular: o Android OS.

Processadores de Texto

As versões mais simples e fáceis dos computadores (chamados de


Computadores Pessoais), foram pensados para atender ao público
doméstico (tal qual a TV), mas como eram muito caros, seu primeiro sucesso
aconteceu dentro das empresas, funcionando como equipamentos de
escritório.

Entre os programas mais badalados, no começo dos computadores,


existia os editores de textos.

78
No princípio eram tão simples (ou mais) do que os Blocos de Notas
(Notepad), mas foram ganhando corpo e forma, e se tornaram verdadeiros
objetos de desejo de praticamente todas as pessoas do planeta.

Um dos aplicativos de maior sucesso no mercado, nasceu nas mãos


da Microsoft, e se chama Word (parte do Pacote Office).

Sua primeira versão nasceu para o sistema MSDOS, em 1.983, que


seguiu evoluindo ano a ano, até chegar em sua versão mais atual, a versão
Word 2.021.

O editor suporta uma série de formatos de arquivo e é capaz de criar


e modificar arquivos com uma grande variedade de elementos gráficos e
visuais.

Fonte: https://concepto.de/word/

Entre suas principais características, podemos citar:

1. Pode ser utilizado em qualquer sistema operacional;

2. Tem uma versão desktop, uma versão web e uma aplicação


para telefones;

3. Utiliza recursos de texto e de gráficos;

79
4. Permite criar e alterar documentos que podem ser guardados
no computador ou impressos;

5. Possui várias versões e se atualiza com frequência.

6. Permite a interação com outros programas do Pacote Office,


como o Excel ou PowerPoint, por exemplo.

Além do Microsoft Word, existem outras opções para editores de


Texto, como:

 Google Documentos.

 Libre Office.

 Graphite Writer.

 Fast Format.

 Only Office.

Planilhas Eletrônicas

Outro aplicativo que caiu nas graças das empresas, foi a Planilha
Eletrônica.

Planilhas são um tipo de programa de computador que utiliza tabelas


para realização de cálculos e apresentação dos dados. Cada tabela é formada
por uma grade, que é composta por linhas e colunas.

Como ferramenta de produtividade, se tornou extremamente


confiável e rápida para armazenar e consolidar informações, contando com
fórmulas que facilitam operações matemáticas.

O aplicativo de Planilhas Eletrônico mais importante hoje no mercado,


é o Microsoft Excel do Pacote Office.

80
Com capacidades avanças de texto, matemática e gráficos, o Excel
caiu nas graças do público em geral e é considerado imbatível em sua
posição.

Fonte: https://suporte.altoqi.com.br/hc/pt-br/articles/360058311374-Template-
para-planilhas-eletr%C3%B4nicas-de-insumos-

O Excel nasceu próximo do Word, em 1.985, mas não para o Windows


ou MSDOS, mas na plataforma concorrente, o Macintosh.

A primeira versão para Windows chegou em 1.987 e desde então 14


novas versões já chegaram ao mercado.

Suas principais caraterísticas são:

a) Formatação dos Dados.


b) Uso de Funções Matemáticas.
c) Gráficos.
d) Tabelas Dinâmicas.
e) Gráficos de Tendências.
f) Consolidações de Dados (soma, média, mediana, maior, menor,
etc.).
g) Proteção dos Dados;
h) Função de Banco de Dados.

Além do Microsoft Excel, existem outras opções para Planilhas


Eletrônicas, como:

81
 Google Documentos.
 Apache OpenOffice.
 Zoho Sheet.
 LibreOffice.
 FreeOffice.
 Siag Office, entre outros.

Softwares de Desenho

Ferramentas Gráficas e de Desenho fazem parte da seleta lista de


aplicativos essenciais para um computador.

Desde que os sistemas operacionais se tornaram gráficos,


ferramentas deste tipo se popularizaram e hoje fazem parte da cultura
mundial.

Quem no mundo nunca ouviu o termo “photoshopar” para se referir a


alteração e modificação das fotos do cotidiano? O PhotoShop é um software
de edição gráfica muito famoso da empresa Adobe. Mas não é o único
disponível.

Fonte: www.adobe.com

Vários aplicativos de desenho podem ser citados para que


conheçamos:

1. Microsoft Paint.
2. Corel Paint & Corel Draw.
3. GIMP.

82
4. Pixlr.
5. Paint.NET.
6. PicMonkey.
7. Canva.
8. CinePaint.
9. Seashore.

Vírus e Vacinas

Infelizmente, como em todas as áreas da vida, também na informática


existe gente inescrupulosa, que deseja vantagens pela prática de crimes.

Algumas pessoas, com intuito de destruir, criam programas


maliciosos que causam problemas às outras, seja para fins de furto,
sequestro de dados, uso parasitário ou vandalismo mesmo.

Esses programas são conhecidos como vírus de computador, numa


definição formal:

“Em informática, um vírus de computador é um software


malicioso que é desenvolvido por programadores geralmente
inescrupulosos. Tal como um vírus biológico, o programa
infecta o sistema, faz cópias de si e tenta se espalhar para
outros computadores e dispositivos de informática.”
– Wikipédia

Os vírus podem ser de vários diferentes tipos, os mais comuns são:

 Vírus de Boot – Atacam a momento de boot (inicialização) dos


computadores.

 Time Bomb – Como o nome diz, são 'bombas' acionadas em um


determinado momento do tempo.

 Minhocas, worm ou vermes – Se espalham de maneira rápida e


abrangente e são difíceis de se eliminar completamente.

83
 Cavalos de Troia (Trojans) – Se disfarçam de softwares legítimos
para roubar informações.

 Hijackers – Sequestram dados ou informações privilegiadas.

 Vírus de Macro – Se associam a arquivos de escritório, que executam


macros.

Dentre os vírus mais famosos e destruidores, podemos citar:

1. Brain, de 1.986, um vírus de boot que danificava o setor de


inicialização do disco.
2. Pathogen, de 1.994, causou estrago em órgãos públicos da
Inglaterra.
3. Concept, de 1.995, primeiro vírus de macro.
4. Chernobyl, de 1.999, causou estragos irreversíveis em centenas de
países no mundo.
5. LoveLetter, de 2.000, que infectou cerca de 3 milhões de máquinas
e causou danos na casa de US$ 10 bilhões.

Os contra-ataques aos vírus, são chamados de vacinas ou programas


de Antivírus.

Estes programas fazem uma varredura em seu computador, a procura


de um código semelhante ou igual ao código do vírus.

Quando um arquivo contendo o mesmo código é localizado, o


programa o isola e o remete para uma pasta especial de quarentena, onde
poderá ser corrigido (e restaurado) ou apagado.

Os principais programas de antivírus da atualidade são:

1. Kaspersky.
2. Bitdefender.
3. McAfee.
4. Norton.

84
5. Panda.
6. Avast!.
7. AVG.
8. Avira.

Com essa visão geral, encerramos este capítulo.

85
8
Capítulo 8. Computação Paralela

Você já ouviu o ditado: dois pessoas pensam melhor do que uma?

Um computador pode ser uma máquina muito divertida e poderosa,


mas quando combinada, pode realizar coisas verdadeiramente incríveis.

Você já imaginou como seria a sua vida sem Internet? Pois é? Sabia
que foi o paralelismo descentralizado (a computação em rede), que deu
origem a tudo isso?

Vamos ver tudo isso nesse capítulo. Vem!

Conceitos de Paralelismo

Dizemos que algo acontece em paralelo quando se perfaz


simultaneamente com outra ação.

Por exemplo, quando um professor ministra uma aula de


matemática e, simultaneamente, uma aula de informática está
ocorrendo em outra sala, dizemos que estas aulas estão em ocorrendo
em paralelo.

Note que apesar de coincidirem no tempo, são 2 (duas) aulas


acontecendo de uma só vez.

Se pudéssemos aproveitar ao mesmo tempo (o que para nós é


impossível), estaríamos adquirindo 2 conhecimentos no tempo de 1 só.

Os computadores, exatamente como os humanos, da maneira


como foram pensados, não poderiam executar mais de uma tarefa
simultaneamente. Deveriam realizar, tarefa por tarefa, passo por passo.

Mas com engenho humano e dedicação dos engenheiros, essa


limitação foi (ano a ano) esvanecendo, e hoje, quase qualquer máquina,
por mais barata que seja, já pode processar múltiplas tarefas
simultaneamente, algo que nós não podemos.

87
Assim, podemos dizer que: a computação paralela é um meio de
operar computadores em que várias operações são realizadas ao
mesmo tempo. Atuando sob o princípio de que: grandes problemas
podem ser divididos em problemas menores, que então podem ser
resolvidos paralelamente.

Tipos de Paralelismos

Os computadores que processam em paralelo podem ser


classificados de acordo com o tipo de estrutura que suporta
paralelismo:

Por exemplo, existem computadores que possuem


multiprocessadores (ou um processador com múltiplos núcleos, que
seriam equivalentes a múltiplos pequenos processadores em um só),
estes possuem múltiplas ‘máquinas de processamento’ em somente
um equipamento físico.

Outra maneira de fazê-lo é através de redes de computadores em


conjunto, chamados clusters, ou grids que usam múltiplos
computadores para trabalhar em uma única tarefa.

Desta forma, podemos classificar o paralelismo como:

1. Computadores multiprocessados ou com CPUs de múltiplos


núcleos.
2. Computadores organizados em GRID ou em Cluster que em
conjunto executam a mesma tarefa.

Apesar de simples na teoria, a adoção de paralelismo complica


enormemente a equação de resolução de problemas computacionais.

Importante entendermos que nem sempre um processo


executado por 2 computadores levará a metade do tempo para ser
concluído, do que levaria quando executado por 1 computador só.

88
Isso porque as trocas e comunicação entre os diversos
“processos” ocupam capacidade e impõem procedimentos que antes
não existia.

Vamos fazer uma analogia para entendermos melhor:

- Suponha que você tenha que levar uma pedra pesada da sua
casa para a casa do vizinho. A pedra, além de pesada não possui
saliências, então, só uma pessoa consegue carregá-la de uma só vez.

- Seu vizinho e você bolam um plano. Você pega a pedra, dá dois


passos e entrega a pedra para seu vizinho, ele carrega dois passos
enquanto você corre na frente e pega novamente a pedra dele, você
carrega dois passos, ele corre na frente e pega a pedra de você, e esse
processo se repete até o final da tarefa.

Possivelmente no caso acima, vocês levaram a pedra mais rápido


do que levaria se você fizesse sozinho, porém, adicionaram esforços a
mais que impedem que a tarefa seja realizada na metade do tempo.

Agora, além de carregar a pedra, você tem que correr na frente,


tem que receber a pedra e entregar a pedra. Tudo isso tem seu preço.

Na computação paralela, ocorrem efeitos similares, já que há


esforços adicionais que são adicionados para que ela ocorra com
sucesso.

Sem entrarmos em muitos detalhes técnicos, é importante


ressaltarmos que o aumento da velocidade potencial de um programa
em uma plataforma de computação paralela é dado pela lei de Amdahl
(proposta por Gene Amdahl na década de 60).

De acordo com ele: “uma pequena porção do programa que não


pode ser paralelizada limitará o aumento de velocidade geral disponível
com o paralelismo”. – Lei de Amdahl.

89
Fonte: https://pt.wikipedia.org/wiki/Lei_de_Amdahl acesso em 15/09/2022

Execução de Instruções paralelas em CPUs com múltiplos núcleos

Um dos tipos mais comuns de computação paralela, em especial nos


dias de hoje, é a computação por CPUs de múltiplos núcleos.

Esta solução (múltiplos processadores em um só) é recente e ocorreu


esbarrando-se nas naturais limitações de aumento infinito de poder em um
só núcleo.

Antes de falarmos de limites possíveis e arquitetura de


processadores, vamos falar um pouco sobre a Lei de Moore.

O presidente da Intel, Gordon Moore, em uma entrevista para a revista


Eletronic Magazine em abril de 1.965, declarou o seguinte:

“The complexity for minimum component costs has increased


at a rate of roughly a factor of two per year ... Certainly over
the short term this rate can be expected to continue, if not to
increase. Over the longer term, the rate of increase is a bit
more uncertain, although there is no reason to believe it will
not remain nearly constant for at least 10 years. That means

90
by 1975, the number of components per integrated circuit for
minimum cost will be 65 000. I believe that such a large circuit
can be built on a single wafer.”
– Lei de Moore.

Essas palavras ficaram conhecidas como a Lei de Moore. Que em


português seria mais ou menos o seguinte:

“A complexidade para o custo mínimo com componentes tem


aumentado a uma taxa de um fator 2 por ano... Isso significa que em torno
de 1975, o número de componentes por circuito integrado para um custo
mínimo será de 65.000”. – Tradução livre.

Ou seja, de acordo com Gordon Moore, mantendo o custo de produção,


a cada ano a quantidade de transistores por CPU dobraria. Previsão que
posteriormente revisou para cada 2 anos.

Então hoje, de acordo com a Gordon Moore, a cada 2 anos, um


processador teria o dobro de transistores (entenda: quase que o dobro de
poder), pelo mesmo custo, a cada 2 anos.

Esta lei tem se cumprido quase que desde sua previsão, mas esbarra
em uma situação previsível: a redução dos componentes tem que ser de 50%
para que o dobro da quantidade de componentes ocupe (aproximadamente)
o mesmo espaço.

Neste sentido, se não for possível reduzir o tamanho de um transistor


a quase sua metade no período de 2 anos, ou não for possível reorganizar a
estrutura interna de um processador (arquitetura), a lei não se cumprirá, e
alternativas deverão ser buscadas.

Neste sentido, as empresas de desenvolvimento de processadores


têm buscado alternativas para manter a previsão da “Lei de Moore”, mesmo

91
que não seja no mesmo processador. Assim nascem os processadores multi-
núcleos (multicore).

Nos anos 90, apertada pela concorrência da AMD, a Intel lançou no


mercado sua linha de processadores Pentium, que possuía uma
característica interessante, trazia consigo a tecnologia Hyper Thread.

Brevemente, essa tecnologia reduzia os desperdícios de tempo do


processador, e criava 2 linhas paralelas de execução, processadas pelo
mesmo núcleo. Tratava-se de uma optimização da engenharia, mas,
“tecnicamente”, um processador de 1 (um) só núcleo agora tinha 2 (duas)
camadas (threads) de execução e poderia realizar computação paralela.

Fonte: www.intel.com

A ideia era ter 2 linhas de execução simultâneas, que mantinham o


processador funcionando, quando normalmente ele estaria ocioso (por
exemplo, quando os dados estavam sendo buscados da Memória RAM).

Percebendo o potencial da ideia, a IBM copiou a arquitetura da Intel,


mas adicionou um 2º núcleo ao seu processador, fazendo com que cada
núcleo atuasse com cada Thread. Tratou-se do Processador Power4, lançado
em 2.001.

Começava ali a corrida pelos processadores multi-core.

92
A Intel, como resposta a IBM, criou uma linha de processadores com
o prefixo I, nascia a família i3, i5 e i7 (que posteriormente adicionou o i9),
cada um com diferentes números de núcleos, dentro de um chip só.

A AMD também não ficou para trás e lançou sua família Athlon, que
depois evoluiu para Opteron, Phenom, Sempron, Turion e Ryzen.

Paralelismo descentralizado – Computação em Rede

A Computação em Rede é a base para uma revolução na computação


e atende a muitos propósitos.

Você verá nesse curso de Computação em Nuvem, que esse incrível


fenômeno que vivemos, depende da Computação em Rede.

Antes de adentrarmos no paralelismo descentralizado, vamos


conhecer alguns conceitos importantes:

1. O que é uma Rede de Computadores: trata-se de uma malha que


liga ou interliga duas ou infinitas máquinas para transmissão e
transferência de dados.

Neste conceito, os computadores são chamados de ‘nós’, que


enviam, recebem e trocam dados binários.

2. Para que serve uma Rede de Computadores: existem muitas


funções, mas poderíamos exemplificar com as seguintes:

– Compartilhamento de Arquivos.

– Acesso e utilização de aplicativos.

– Compartilhamento de Hardware (que nos interessa nesse


tópico).

– Arquitetura Cliente-Servidor.

93
– Uso de voz em rede de dados (voz sobre IP).

– Comunicação entre máquinas.

– Comércio Eletrônico.

– Jogos.

3. Como funciona uma Rede: por meio de regras predefinidas de troca


de informações, interligamos os nós, por meio de cabos ou sinais
eletromagnéticos, em equipamentos especializados em enviar e
receber dados. Modens, roteadores, placas e portas de
comunicação.

Para que a comunicação ocorra, regras são usadas para reger o envio
e recebimento dos dados, que normalmente são distribuídos em ‘pacotes’.

4. Qual o padrão mais comum para o uso da Computação em Redes:


o padrão mais comum é o TCP/IP, criado pela Agência de Projetos
e Pesquisa Avançada dos Estados Unidos da América, a ARPA, em
1.969.

5. Quais são os tipos de redes: temos redes LAN, WAN, MAN, WMAN,
SAN e PAN (divididas entre redes locais e remotas, com ou sem
fio).

Agora que conhecemos um pouco as redes, podemos pensar em tratar


do tema do Paralelismo Descentralizado.

Este tipo de paralelismo consiste em uma técnica que une


processadores que estão “fracamente” acoplados.

Para isso, faz-se uso de troca de mensagens para a execução de uma


tarefa específica.

94
Conceitualmente, podemos chamar esse paralelismo de clusterização
(termo aportuguesado da palavra cluster).

Um cluster é um conjunto de computadores, conectados por meio de


uma rede que, fazendo uso de um sistema operacional que opera de maneira
distribuída, conseguem trabalhar como se uma máquina só fossem.

Os clusters podem ser do tipo:

a) Cluster ativo-ativo: o controle da atividade se dá por meio de um


“balanceador de carga”, que entrega a tarefa de forma distribuída,
baseando-se em algum algoritmo de distribuição.

b) Cluster ativo-passivo: onde uma máquina permanece ativa e a


outra em estado de hibernação, sendo despertada somente na
falha da máquina ativa, de forma a evitar interrupção de serviços.

Veremos muito sobre computação paralela e paralelismo


descentralizado no decorrer deste curso. Por hora, essa breve introdução
nos basta.

Introdução à Internet

A Internet é um sistema global de redes de computadores,


interligadas e se comunicando por um mesmo protocolo, cujo propósito é
servir, progressivamente, a usuários no mundo inteiro.

Trata-se de uma Rede de múltiplas Redes, que interliga bilhões de


pessoas, empresas e governos do mundo inteiro, de maneira ininterrupta (24
horas por dia, 7 dias por semana).

Baseada no protocolo de comunicação TCP/IP, nasceu como projeto


experimental em unidades de defesa dos EUA, e se espalhou por
universidades daquele país, entre os anos 70 e 80.

95
Não há uma data específica para se comemorar a “criação” da
Internet, mas há consenso de que a moderna Internet tenha surgido em
meados da década de 1.980.

Estima-se que a Internet alcance hoje cerca de 4,5 bilhões de


pessoas, ou seja, cerca de 60% da população mundial. O crescimento do uso
entre os anos de 2.000 e 2.021 foi de 1.170%.

A Internet comporta hoje, centenas de milhões de negócios, que


geram trilhões de dólares todos os anos. Estima-se que nos próximos anos,
trafegaremos pela Internet cerca de 2.5 quintilhões de bytes de dados por
dia.

Espera-se que em poucos anos, 100% da população mundial, esteja


conectada, em algum momento de sua vida, na rede mundial de
computadores.

Fonte: https://findstack.com/pt/big-data-statistics/

Principais serviços propiciados pela Internet na atualidade:

 Correio Eletrônico (e-mail).

 Troca de Mensagens curtas.

96
 Comércio Eletrônico.

 Notícias.

 Jornais e Revistas eletrônicas.

 Vídeos em Demanda.

 Jogos on-line.

 Distribuição de Software.

 Redes Sociais.

 Educação.

 Comunidades.

 Serviços computacionais.

 Blogs e Vlogs.

Veremos muito mais sobre a Internet neste curso, então,


acompanhe!

97
9
Capítulo 9. Arquitetura de Processadores

Neste capítulo trataremos das arquiteturas de Processadores.

A arquitetura X86

Nos anos 70, o mercado de microprocessadores estava muito


aquecido. As incríveis técnicas de miniaturização somadas a 2 (duas)
décadas de experiência na construção de CPUs tradicionais eclodiram nos
anos 1970, causando uma disputa vertiginosa no mercado.

Além de empresas consolidadas em construção de hardware, como


a americana IBM, novos participantes adentravam rapidamente no mercado,
como a americana Intel, a japonesa NEC, a americana Zilog, a alemã
Siemens, a americana Texas Instruments, a americana AMD e a americana
Motorola, além de múltiplas outras.

Cada uma produzindo seu próprio produto de sucesso, com


velocidades de processamento e número de transistores cada vez maiores.

Em 1.971, a novata Intel lançou no mercado seu primeiro


microprocessador, conhecido como Intel 4004. Seu uso foi destinado a
substituir o processador ASIC da calculadora produzida pela empresa
Biscon. Tratava-se de um processador de 4 bits que deu o pontapé inicial
nos negócios de processadores da Intel.

Em 1.974, com o sucesso do Intel 4004, a empresa decidiu lançar o


Intel 4040, construído com uma técnica de 10 micrometros, com cerca de 3
mil transistores. O poderoso Intel 4040 conseguia realizar 60.000
instruções por segundo, mas ainda se tratava de um processador de 4 bits.

Em 1.972, a Intel decide se arriscar com um processador de 8 bits e


produz o processador Intel 8008, mais lento em ‘clock’ que o processador
original (Intel 4004) e que seu sucessor direto (o Intel 4040), por conter um
barramento de 8bits, podia produzir três ou quatro vezes mais instruções

99
que seu antecessor de 4 bits. Tratava-se de um produto experimental, mas
que deu vazão a uma nova família de processadores, a família 8000.

Seu sucessor direto foi lançado no ano de 1.974, e ficou conhecido


como Intel 8080, de 8 bits, que possuía um Contador de Programas de 16
bits (o que lhe permitia endereçamentos mais longos de memória – até 64
kbytes) e continha 512 portas de entrada e saída, com 7 registradores no
total. Continha um total de 6.000 transistores.

Em março de 1.976, a Intel lançou um “upgrade” para seu


processador anterior, e o batizou de Intel 8085.

Tratava-se de um processador de 8 bits, com todas as instruções do


modelo anterior, somadas a duas novas, sendo totalmente compatível com
os programas construídos para o processador anterior.

Sua tensão caiu de 12V para 5V (dando lugar ao 5 do nome do


produto), ou seja, mais eficiente e mais econômico que o anterior.

Possuía os mesmos 7 Registradores e operava em um ‘clock’ muito


alto de 6.14 Mhz. Possuía cerca de 6.500 transistores e era capaz de realizar
até 1 milhão de instruções por segundo.

Em 1.978, a Intel lança seu maior produto (até então), o Intel 8086,
um processador revolucionário, de 16 bits, que dá início a uma nova família
de processadores, a família X86.

Fonte: https://pt.wikipedia.org/wiki/X86

Sendo um processador de 16 bits (diferente da geração anterior de


8btis) ele não era compatível com os binários compilados pelos seus
antecessores. Mas foi projetado para permitir que: os programas escritos em

100
linguagem Assembly poderiam ser traduzidos para o conjunto equivalente
em 8086.

A arquitetura era vencedora!

No entanto, um problema foi detectado, o barramento de dados


externo de 16 bits. Isso envolvia remodelagem nos circuitos impressos,
exigindo a duplicação do BUS, algo caro para a época.

A Intel, prevendo estar com o produto perfeito nas mãos, lançou


rapidamente o Intel 8088, uma variação do 8086, mas com barramento
externo de 8 bits, resultado: SUCESSO!

A IBM decidiu seguir com a Intel, e lançou seus IBM PCs equipados
com o Intel 8088, em detrimento de concorrentes de peso, como o Z80 ou o
Motorola 68000.

A Intel, a partir daí, tornou-se líder do mercado de Processadores de


PC, não perdendo esta posição desde então.

O processador 8086 deu início a uma família de produtos que foi


chamada de X86, que com suas instruções, dominou o mercado
processadores para Computadores domésticos, em 16, 32 e agora de 64 bits.

Veja a lista de processadores da família X86:

 Intel 8086, Intel 8088.

 Intel 80186, Intel 80188.

 Intel 80286.

 Intel 80386.

 Intel 486 (SX/DS/DX2).

 Intel Pentium Superscalar, 64-bit databus, faster FPU, MMX.

 Intel Pentium Pro, foi substituído pelo Pentium Xeon.

 Intel Pentium 4 Alta conduta, alta frequência, SSE2, hyper-


threading.

 Intel Pentium M, VIA C7 (2005), Intel Core (2006).

101
 Intel Pentium 4 Prescott Alta conduta, altíssima frequência,
SSE, capacidade de 64 bits está disponível somente em
soquetes LGA 775.

 Intel Core 2, baixo consumo, multi-core, menor frequência de


clock, SSE4 (Penryn).

 Intel Core i3, Intel Core i5, Intel Core i7.

 Intel Atom, altamente canalizado, porém com sua potência


muito baixa.

 Intel Sandy Bridge, design altamente modular.

Instruções do tipo CISC vs RISC

À medida que os processadores foram evoluindo, os produtores (em


especial a Intel), decidiam colocar mais instruções internas para realização
de tarefas.

O processador que no princípio tinha poucas instruções, começou a


abraçar diversas novas funcionalidades, que antes deveriam ser realizadas
via Software.

Este crescimento exponencial de instruções deixou o mercado


dividido, alguns defendendo este modelo, outros imaginando que menor
número de instruções significava ganho de performance e de custo.

Os processadores com múltiplas instruções (como os da Intel),


ficaram conhecidos como processadores do tipo CISC (Complex Instruction
Set Computer) ou seja, processador com um conjunto complexo de
instruções.

Identificando um possível mercado, algumas empresas se uniram


para formar uma nova arquitetura de processadores, muito mais simples,
com um número reduzido de Instruções, o qual dariam o nome de RISC
(Reduced Instruction Set Computer).

102
Fonte: https://circuitdigest.com/article/difference-between-risc-and-cisc-
architecture

Esta batalha começou intensa, com evidente vantagem para a Intel


que já dominava o mercado, mas desde que esse novo modelo foi proposto,
muitos sabiam que o RISC poderia pôr fim a um império inalcançável e algo
inesperado surgiu!

A arquitetura ARM

Sem mais mistérios, o que fez abalar a estrutura da Intel nos últimos
anos, foi o surgimento dos computadores de mão (smartphones e tablets).

Estes dispositivos, no princípio, tinham recursos limitados e não


necessitavam de um processador com tantos recursos, era um “prato cheio”
para os processadores do tipo RISC.

A empresa inglesa ARM Holdings (ARM de ‘Acorn RISC Machine’ e


posteriormente ‘Advanced RISC Machine’), desenvolveu uma arquitetura
para atender, exatamente a este mercado. Uma arquitetura RISC que ficou
conhecida, simplesmente por ARM.

O mais interessante dos produtos da ARM Holdings, é que ela não


somente produz chips, mas também comercializa o projeto e a arquitetura
de seus componentes para que, licenciando suas ideias de engenharia,
outras empresas terceiras também possam produzir.

Vejamos rapidamente um breve histórico da empresa ARM:

103
 Em outubro de 1983, a Acorn Computers desenvolve seu
primeiro processador ARM.

 Em abril de 1985 protótipos do Processador ARM são


fabricados pela VLSI Technilogy (no formato de licenciamento)
e são utilizados pela primeira vez em um computador. Este foi
o primeiro processador RISC a ser comercializado.

 Nos anos seguintes, os Processadores ARMs são utilizados nos


Computadores Desktops da Acorn (BBC Master e Acorn
Archimedes).

 É criada a arquitetura ARM2aS.

 Em 1.989, a Apple se junta a Acorn para desenvolver novas


versões do chip ARM.

 Em novembro de 1.990, a AdvancedRM LTDA é fundada.


Resultado de uma fusão da Acorn, da Apple Computer e da VLSI
Technology.

 Em 1.991, são lançados os primeiros processadores ARM6.

 Em 1.995, em uma parceria, DEC e ARM se unem para lançar o


StrongARM.

 No mesmo ano, a Intel compra DEC e acaba tendo acesso ao


projeto do StrongARM.

 Em 1.998, a ARM Holdings é introduzida nas bolsas de Londres


e NASDAQ.

 No decorrer dos anos 90, a ARM torna-se líder no mercado de


processadores embarcados de baixo consumo de energia e alto
desempenho.

A ARM se manteve produzindo em arquitetura 32 bits desde 2.011,


desenvolvendo um processador que fez bastante sucesso, o ARMv7-A.
Posteriormente rebatizado de Cortex-A.

104
Outras linhas importantes são o Perfil-R (Cortex-R), para
processamentos em tempo real, além do Perfil-M (Cortex-M) para micro-
controladores (utilizado em aparelhos de IoT).

Em 2.020, a ARM lançou seu primeiro processador de 64 bits, o Cortex-


R82.

Os principais fornecedores de software do mundo têm criado versões


ARM de seus produtos para atender a parcelas mais significativas do
mercado.

A ARM hoje opera um mercado de bilhões de processadores / ano,


enquanto a Intel, acabou ficando com um mercado menor, de milhões de
processadores / ano.

Hoje, a arquitetura ARM é utilizada por:

 Qualcomm (Snapdragon).

 Nvidia (CPU Grace).

 Apple (AXX).

 Samsung (Exynos).

 Entre outras.

105
10
Capítulo 10. Computadores Multiprocessados

Encerraremos esse curso com um capítulo sobre


multiprocessamento, uma técnica interessante de aumento de poder
computacional, onde se usa mais de uma CPU dentro de um único sistema
de computador.

Vamos!

Conceito de Multiprocessamento

O multiprocessamento, na computação, é um modo de operação no


qual 2 (dois) ou mais processadores são instalados (fisicamente) em um
computador, para processarem simultaneamente 2 (duas) ou mais partes
diferentes do mesmo programa (ou conjunto de instruções).

O multiprocessamento é normalmente realizado por dois ou mais


microprocessadores, cada um dos quais é, na verdade, uma unidade central
de processamento (CPU) em um único chip. Supercomputadores
normalmente combinam milhões desses microprocessadores para
interpretar e executar instruções.

A principal vantagem de um computador equipado com um


multiprocessador é a velocidade e, portanto, a capacidade de gerenciar
quantidades maiores de informações em menor espaço de tempo.

Como cada processador é designado para executar uma função


específica, ele pode executar sua tarefa e passar o conjunto de instruções
para o próximo processador, começando a trabalhar em um novo conjunto
de instruções.

Por exemplo: diferentes processadores podem ser usados para


gerenciar armazenamento de memória, comunicações de dados ou funções
aritméticas.

107
Um processador primário maior pode usar processadores secundários
menores para realizar tarefas de limpeza diversas, como o gerenciamento de
memória e IO.

Sistemas multiprocessadores apareceram pela primeira vez em


computadores grandes conhecidos como mainframes, antes que seus
custos diminuíssem o suficiente para justificar a inclusão em computadores
pessoais (PCs).

Videogames, no passado, também fizeram uso de arquiteturas


multiprocessadas, seja por questões de performance, seja por questões de
retro-compatibilidade.

Existem várias maneiras de se implementar uma arquitetura de


multiprocessamento, veremos a seguir algumas delas.

Arquitetura UMA ou SMP

Também conhecido como multiprocessamento simétrico (Symmetric


Multi-Processing), este modelo arquitetural ocorre em sistemas com
múltiplos processadores idênticos interconectados a uma Memória
compartilhada e um único sistema operacional.

Fonte: https://www.researchgate.net/figure/Symmetric-Multiprocessing-SMP-
Architecture-17_fig1_346679305

108
Neste modelo, todos os processadores compartilham uma única
Memória RAM e o mesmo caminho de dados (barramento) de Entrada e
Saída.

Suas principais características são:

 Simétricos: os processadores são tratados da mesma forma, sendo


obrigatoriamente idênticos.

 Comunicáveis: utilizam somente a memória compartilhada para


comunicarem entre si.

 Complexos: sua arquitetura é complexa, já que todas as CPUs devem


compartilhar a mesma memória e barramento de dados.

 Mais caros: devido a sua complexidade, são naturalmente mais caros


de se produzir.

 Simétricos: as tarefas do Sistema Operacional são tratadas uma a


uma, individualmente, pelos CPUs.

Suas principais Vantagens:

 Throughput: a velocidade em que os dados podem percorrer a tríade


Entrada-Processamento-Saída é maior do que em outros modelos.

 Confiabilidade: se um processador falha, o sistema permanece


estável e funcional (embora operando com menor velocidade).

Suas principais Desvantagens:

 Complexidade: os processadores precisam ser tratados de maneira


igual pelo Sistema Operacional, como se um só houvesse e eles
precisam se comunicar, identicamente, com a mesma Memória RAM,

109
de maneira síncrona, de modo que um novo processo não afete o
anterior.

 Preço: dada a complexidade, tendem a ser mais caros.

Arquitetura NUMA

Diferentemente da arquitetura UMA, podemos pensar em um


subsistema de multiprocessador onde o acesso à Memória é não uniforme.
(Non-Uniform Memory Access – NUMA).

Neste caso, cada processador tem sua latência diferente para o


acesso à memória do computador.

Fonte: https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-
memory-accessarchitectures-numa/

Neste modelo, a Memória é dividida em tantos blocos quanto forem


os processadores do sistema, cada bloco é conectado a um processador,
como se fosse uma memória local.

O conjunto de Memórias individuais forma o total de memória do


sistema.

Esta solução é mais barata e fácil de se implementar, mas impede a


comunicação dos dados entre memórias distintas (entre os blocos),
reduzindo virtualmente o espaço de memória do sistema.

110
Máquinas que implementam este modelo estão sujeitas a problemas
de sincronia de cache, já que os dados perdem a habilidade de falarem entre
si.

Para resolver este problema, variações da arquitetura NUMA foram


propostas, entre elas:

 CC-NUMA – ou Cache Coherent NUMA – onde um hardware


específico é adicionado ao subsistema só para cuidar do cache.

 NCC-NUMA – Non-Cache Coherent NUMA – onde se adota a solução


de não ter cache.

 SC-NUMA (Software Coherent NUMA) ou DSM (Distributed Shared


Memory), onde o Sistema Operacional, implementa um modelo de
paginação de dados e busca informações de todas as memórias,
independentemente do processador.

Todas elas oferecem vantagens e desvantagens, e vão atender cada


necessidade caso a caso.

Arquitetura COMA

A arquitetura COMA é uma alternativa à NUMA, onde as memórias


locais em cada nó são usadas como cache.

As memórias de cache para este modelo são construídas para


possuírem alta capacidade e, para se conseguir coerência, um hardware
adicional é instalado, atualizando simultaneamente todos os nós.

É um tipo de arquitetura extremamente complexa, que resolve todos


os problemas das arquiteturas anteriores, mas é extremamente cara.

111
Com essa visão geral, encerramos nosso capítulo e este curso,
esperamos que sirva para fortalecer seu conhecimento e te preparar para os
próximos módulos!

112

Você também pode gostar