resumo do capítulo 1

Transcrição

resumo do capítulo 1
RESUMO DO CAPÍTULO 1
Um computador digital é uma máquina que pode resolver problemas para as pessoas
executando instruções que lhe são dadas. Uma sequência de instruções que descreve
como realizar certa tarefa é denominada programa.
1.1 - Organização estruturada de computadores
Como já mencionamos, existe uma grande lacuna entre o que é conveniente para as
pessoas e o que é conveniente para computadores. As pessoas querem fazer "X", mas
os computadores querem fazer "Y", o que dá origem a um problema.
1.1.1 - Linguagens, níveis e máquinas reais.
O problema pode ser abordado de duas maneiras; ambas envolvem projetar um novo
conjunto de instruções que seja mais conveniente para as pessoas usarem do que o
conjunto de instruções que já vem embutido na máquina. Juntas, essas novas
instruções também formam uma linguagem, que denominaremos L1, exatamente
como as instruções de máquina formam uma linguagem, que denominares L0.
Um método para executar um programa escrito em L1 é primeiro substituir cada
instrução escrita no programa por uma seqüência equivalente de instruções em L0. O
programa resultante consiste inteiramente em instruções em L0. Então o computador
executa o novo programa em L0 em vez do antigo programa, L1. Essa técnica é
denominada tradução.
A outra técnica é escrever um programa em L0 que considere programas em L1 como
dados de entrada e os execute examinando cada instrução por vez e executando
diretamente a seqüência equivalente de instruções L0. Essa técnica não requer a
geração prévia de um novo programa em L0. Ela é denominada interpretação
programa que a executa é chamado interpretador.
Em vez de pensar em termos de tradução e interpretação, muitas vezes é mais simples
de um computador cuja língua de máquina seja L1.
Para que a tradução e a interpretação sejam práticas, as linguagens L1 e L0 não deve
ser muito diferentes. Essa limitação muitas vezes quer dizer que, embora melhor do
que L0., ainda assim estará longe de ser ideal para a maioria das aplicações.
A invenção de toda série de linguagens, cada uma mais conveniente do que suas
antecessoras, pode continuar indefinidamente até que, por fim, se chegue uma
adequada.
Cada linguagem usa a antecessora como base, de modo que podemos considerar um
computador que usa essa técnica como uma série de camadas ou níveis, um sobre o
outro. A linguagem ou nível que fica mais embaixo é a mais simples e a que fica mais
em cima é mais sofisticado demais.
Em certo sentido, um computador com n níveis pode ser considerado como n
máquinas reais diferentes, cada uma com uma linguagem de máquina diferente.
Usaremos os termos "nível" e "máquina" indiferentemente. Somente programas
escritos em linguagem L0 podem ser executados diretamente pelos circuitos
eletrônicos, sem a necessidade de tradução ou interpretação intervenientes. Programas
escritos em L1, L2,..., Ln devem ser interpretados por um interpretador que roda em um
nível baixo ou traduzidos para uma linguagem correspondente a um nível mais baixo.
A maioria dos programadores que usam uma máquina de nível n está interessada
apenas no nível superior, aquele que menos se assemelha à linguagem de máquina
que está no nível mais inferior. Todavia, quem se interessa em entender como um
computador realmente funciona deve estudar todos os níveis. Quem projeta novos
computadores, ou novos níveis (isto é, novas máquinas reais), também deve estar
familiarizado com níveis que não sejam apenas o superior.
1.1.2 - Máquinas multiníveis contemporâneas
A maioria dos computadores modernos consiste em dois ou mais níveis. Existem
máquinas com até seis níveis. O nível 0, é o verdadeiro hardware da máquina. Seus
circuitos executam programas em linguagem de máquina nível 1. Para não deixar nada
de lado, devemos mencionar a existência de mais outro nível abaixo de nosso nível 0.
Esse nível é denominado nível de dispositivo. Nesse nível, o projetista vê transistores
individuais, que são os elementos de nível mais baixo para projetistas de
computadores.
No nível mais baixo que estudaremos o nível lógico digital, os objetos interessantes são
denominados portas. Cada porta tem uma ou mais entradas digitais (sinais que
representam 0 ou 1) e computado como saída alguma função simples dessas entradas,
como E (AND) e OU (OR). Um pequeno número de portas pode ser combinado para
formar uma memória de 1 bit, que pode armazenar um 0 ou um 1. As memórias de 1
bit podem ser combinadas em grupos de, por exemplo, 16, 32 ou 64 para
registradores. Um registrador pode conter de um único número binário até algum
valor máximo.
O próximo nível é o nível de micro arquitetura. Nesse nível vemos, normalmente, um
conjunto de 8 a 32 registradores que formam uma memória local e um circuito
denominado ALU (Arithmetic Logic Unit) ou ULA (Unidade Lógica e Aritmética), que é
capaz de executar operações aritméticas simples.
No nível 2 temos o que denominaremos nível de Arquitetura do Conjunto de
Instruções (ISA - Instruction Set Architecture) , ou nível ISA.
O próximo nível em geral é híbrido. Grande parte das instruções em sua linguagem
também está no nível ISA. Além disso, há um conjunto de novas instruções, uma
organização diferente da memória, a capacidade de executar dois ou mais programas
ao mesms tempo e vários outros aspectos.
As novas facilidades adicionadas ao nível 3 são executadas por um interpretador que
roda no nível 2, são executadas diretamente pelo microprograma (ou controle
incorporado), e não pelo sistema operacional. Denominaremos esse nível de nível de
máquina de sistema operacional.
Há uma ruptura fundamental entre os níveis 3 e 4. Os três níveis mais baixos não são
projetados para utilização do programador médio, de nível caseiro. Ao contrário, são
dirigidos primariamente à execução dos interpretadores e tradutores necessários para
dar suporte aos níveis mais altos.
O nível 5 habitualmente consiste em linguagens projetadas para ser usadas por
programadores de aplicações que tenham um problema a resolver. Essas linguagens
costumam ser denominadas linguagens de alto nível. Algumas mais conhecidas são C,
C++, Java, LISP e Prolog.
O conjunto de tipos de dados, operações e características de cada nível é denominado
arquitetura. A arquitetura trata dos aspectos que são visíveis ao usuário daquele nível.
Características que o programador vê, como a quantidade de memória disponível, são
parte da arquitetura. O estudo sobre como projetar as partes de um sistema de
computador que sejam visíveis para os programadores é denominado arquitetura de
computadores.
1.1.3 - Evolução de máquinas multiníveis
Para colocar as máquinas multiníveis sob certa perspectiva, examinaremos brevemente
seu desenvolvimento histórico. Programas escritos em uma verdadeira linguagem de
máquina (nível 1) de um computador podem ser executados diretamente pelos
circuitos eletrônicos (nível 0) do computador sem nenhum interpretador ou tradutor
interveniente. Esses circuitos eletrônicos, junto com a memória e dispositivos de
entrada/saída, formam o hardware. O hardware consiste em objetos tangíveis circuitos integrados, placas de circuito impresso, cabos, fontes de energia, memórias e
impressoras - em vez de idéias abstratas, algoritmos ou instruções.
O software, entretanto, consiste em algoritmos (instruções detalhadas que dizem como
fazer algo) e suas representações no computador, o que chamados de programas.
A invenção da microprogramação
Os primeiros computadores digitais, na década de 1940, tinham só dois níveis, o nível
ISA, no qual era feita toda a programação, e o nível lógico digital que executava esses
programas. Os circuitos eram complicados, difíceis de entender e montar, e não
confiáveis.
Em 1951, Maurice Wilkes, pesquisador da Universidade de Cambridge, sugeriu projetar
um computador de três níveis para simplificar drasticamente o hardware (Wilkes, 1951).
Essa máquina deveria ter um interpretador embutido, imutável, cuja função fosse
executar programas de nível ISA.
A invenção do sistema operacional
Naqueles primeiros anos, grande parte dos computadores era 'acessível a todos', o que
significava que o programador tinha de operar a máquina pessoalmente. Ao lado de
cada máquina havia uma planilha e reservava um período de tempo, digamos, quartafeira,
das 3 às 5 da manhã. Quando chegava seu horário, o programador se dirigia à
sala da máquina com um pacote de cartões perfurados de 80 colunas em uma das
mãos e um lápis bem apontado na outra. Ao chegar à sala do computador, ele
gentilmente levava até a porta o programador que lá estava antes dele e tomava posse
da máquina.
Perto de 1960 as pessoas tentaram reduzir o desperdício de tempo automatizando o
trabalho do operador. Um programa denominado sistema operacional era mantido no
computador o tempo todo. O programador produzia certos cartões de controle junto
com o programa, que era lidos e executados pelo sistema operacional.
Embora o sistema operacional fosse projetado para automatizar o trabalho do
operador, foi também o primeiro passo para o desenvolvimento de uma nova máquina
real.
Nos anos subseqüentes, os sistemas operacionais tornaram-se cada vez mais
sofisticados. Novas instruções, facilidades e características foram adicionadas ao nível
ISA até que ele começou a parecer um novo nível. Essas novas instruções começaram a
ficar conhecidas como macros de sistema operacional ou chamados do supervisor.
Agora o termo atual é chamado sistema.
Sistemas operacionais também se desenvolveram de outras maneiras. Os primeiros
liam maços de cartões e imprimiam a saída na impressora de linha. Essas organização
era conhecida como sistema batch.
No início da década de 1960, pesquisadores de Darthmouth College , do MIT e de
outros lugares desenvolveram sistemas operacionais que permitiam a vários
programadores se comunicarem diretamente com o computador. Esses sistemas
tinham terminais remotos conectados ao computador central por linhas telefônicas.
Um programador podia digitar um programa e obter os resultados impressos quase
imediatamente em seu escritório, na garagem de sua casa ou onde quer que o terminal
estivesse localizado. Esses sistemas eram chamados sistemas de tempo compartilhado
(timesharing).
Migração de funcionalidade para microcódigo
Assim que a microprogramação se tornou comum (em 1970), os projetistas
perceberam que podiam acrescentar novas instruções apenas ampliando o
microprograma. Essa revelação levou a uma explosão virtual de conjuntos de instruções
de máquina, por que os projetistas competiam uns com os outros para produzir
conjuntos de instruções maiores e melhores.
Eliminação da microprogramação
Os microprogramas engordaram durante os anos dourados da microprogramação
(décadas de 1960 e 1970) e também tendiam a ficar cada vez mais lentos à medida que
se tornavam mais volumosos. Por fim, alguns pesquisadores perceberam que,
eliminando o microprograma, promovendo uma drástica redução no conjunto de
instruções e fazendo com que as instruções restantes fossem executadas diretamente,
isto é, controle do caminho de dados por hardware - , as máquinas podiam ficar mais
rápidas. Em certo sentido, o projeto de computadores fechou um círculo completo,
voltando ao modo como era antes de Wilkes inventar a microprogramação.
1.2 - Marcos da arquitetura de computadores
Durante a evolução digital moderno foram projetadas e construídas centenas de
diferentes tipos de computadores. Grande parte já foi esquecida há muito tempo, mas
alguns causaram um impacto significativo sobre idéias modernas.
1.2.1 - A geração zero - computadores mecânicos (1642 - 1945)
A primeira pessoa a construir uma máquina de calcular operacional foi o cientista
francês Blaise Pascal (1623-1662), em honra de quem a linguagem Pascal foi batizada.
Esse dispositivo, construído em 1642, quando Pascal tinha apenas 19 anos, foi
projetado para ajudar seu pai, um coletor de impostos do governo francês. Era
inteiramente mecânico, usava engrenagens e funcionava com um manivela operada à
mão.
Durante 150 anos nada de muito importante aconteceu, até que um professor de
matemática da Universidade de Cambridge, Charles Babbage (1792-1871), o inventor
do velocímetro, projetou e construiu sua primeira máquina diferencial. Esses dispositivo
mecânico que, assim como o de Pascal, só podia somar e subtrair.
Embora a máquina diferencial funcionasse razoavelmente bem, Babbage logo se
cansou dessa máquina que só podia executar um único algoritmo. Ele começou a
gastar quantidades cada vez maiores de seu tempo e da fortuna da família (sem
mencionar 17 mil libras do governo) no projeto e construção de uma sucessor
denominada máquina analítica. A máquina analítica tinha 4 componentes: a
armazenagem (memória), o moinho (unidade de cálculo), a seção de entrada (leitora de
cartões perfurados) e a seção de saída (saída perfurada e impressa).
O seguinte desenvolvimento importante ocorreu na no final da década de 1930,
quando um estudante de engenharia alemão chamado Konrad Zuse construiu uma
série de máquinas calculadoras automáticas usando relés eletromagnéticos. Ele não
conseguiu financiamento do governo após o início da guerra porque os burocratas
governamentais esperavam ganhar a guerra tão rapidamente que a nova máquina só
estaria pronta após o término do conflito.
Um pouco mais tarde, nos Estados Unidos, duas pessoas também projetaram
calculadores, John Atanasoff no Iowa State College e George Stibnitz no Bell Labs. A
máquina de Atasanoff era surpreendentemente avançada para sua época. Usava
aritmética binária e a memória era composta de capacitores recarregados
periodicamente para impedir fuga de carga, um processo que ele denominou 'sacudir a
memória'. Os chips modernos de memória dinâmica (DRAM) funcionam desse modo.
Infelizmente, a máquina nunca se tornou realmente operacional. De certo modo,
Atanasoff era como Babbage: um visionário que afinal foi derrotado pela tecnologia de
hardware inadequada existente em seu tempo.
1.2.2 - A primeira geração - válvulas (1945-1955)
O estímulo para o computador eletrônico foi a Segunda Guerra Mundial.
Logo no início da guerra, a inteligência britânica conseguiu adquirir uma máquina
ENIGMA da Inteligência Polonesa, que a tinha roubado dos alemães. Contudo, para
decifrar uma mensagem codificada, era preciso uma quantidade enorme de de cálculos
e, para a mensagem ser de alguma utilidade, era necessário que esse cálculo fosse
concluído pouco tempo depois de ela ter sido interceptada. Para decodificar essas
mensagens, o governo britânico montou um laboratório ultra-secreto que construiu
um computador eletrônico denominado COLOSSUS. O famoso matemático britânico
Alan Turing ajudou a projetar essa máquina. O COLOSSUS funcionava desde 1943, mas,
uma vez que o governo britânico guardou praticamente todos os aspectos do projeto
como segredo militar durante 30, a linha COLOSSUS foi basicamente um beco sem
saída.
John Mauchley conhecia o trabalho de Atanasoff, bem como o de Stibbitz, sabia que o
exército estava interessado em calculadoras mecânicas. Como muitos cientistas da
computação que vieram depois dele, Mauchley montou uma proposta solicitando ao
exército financiamento para a construção de um computador eletrônico. A proposta foi
aceita em 1943, e Mauchley e seu aluno de pós-graduação, J. Preper Eckert, passaram a
construir um computador eletrônico ao qual deram o nome de ENIAC (Electronic
Numerical Integrator And Compute - integrador e computador numérico eletrônico).
O ENIAC consistia em 18 mil válvulas e 1.500 relés, pesava 30 toneladas e consumia 140
quilowatts de energia. Era programado com o ajuste de até 6 mil interruptores
multiposição e com a conexão de uma imensa quantidade de soquetes com uma
verdadeira floresta de cabos de jumpers.
Enquanto Eckert e Mauchley trabalhavam no sucessor do ENIAC, o EDVAC (Electronic
Discrete Variable Automatic Compute), uma das pessoas envolvidas no projeto ENIAC,
John Von Neumann, foi para o Institute of Advanced Studies de Princeton para
construir sua própria versão do EDVAC, a máquina IAS.
Uma das coisas que logo ficou óbvia para ele foi que programar computadores com
quantidades imensas de interruptores e cabos era uma tarefa lenta, tediosa e mecânica.
Ele percebeu que o programa podia ser representado em forma digital na memória do
computador, junto com os dados. Também viu que a desajeitada aritmética decimal
usada pelo ENIAC, com cada dígito representado por 10 válvulas (1 acesa e 9
apagadas), podia ser substituída usando aritmética binária paralela, algo que Atanasoff
tinha percebido anos antes.
A máquina de Von Neumann tinha cinco partes básicas: a memória, a unidade de
lógica e aritmética, a unidade de controle e o equipamento de entrada e saída. A
memória consistia em 4.096 palavras, uma palavra contendo 40 bits, cada bit um 0 ou
um 1. Cada palavra continha ou duas instruções de 20 bits ou um inteiro de 40 bits
com sinal. As instruções tinham 8 bits dedicados a identificar o tipo de instrução e 12
bits para especificar uma das 4.096 palavras de memória. Juntas, a unidade de controle
e a de lógica e aritmética formavam o 'cérebro' do computador. Em computadores
modernos elas são combinadas em um único chip denominado CPU (Central
Processing Unit - unidade central de processamento).
Enquanto tudo isso estava acontecendo, a IBM era uma pequena empresa dedicada ao
negócio de produzir perfuradoras de cartões e máquina mecânicas de classificação de
cartões. A IBM não estava muito interessada em computadores até que produziu o 701
em 1953. Foi o primeiro de uma série de máquinas científicas que vieram a dominar o
setor dentro de uma década..
1.2.3 - A segunda geração - transistores (1955-1965)
O transistor foi inventado no Bell Labs em 1948 por John Bardeem, Walter Brattain e
William Schockley, pelo qual receberam o prêmio Nobel de física em 1956. Em dez
anos o transistor revolucionou os computadores e, ao final da década de 1950, os
computadores de válvulas estavam obsoletos.
Alguns anos mais tarde a DEC lançou o PDP-8, que era uma máquina de 12 bits, porém
muito mais barata do que o PDP-1 (16 mil dólares). O PDP-8 tinha uma importante
inovação: um barramento único, o omnibus. Um barramento é conjunto de fios
paralelos usados para conectar os componentes de um computador.
Em 1964, uma minúscula empresa desconhecida, a Control Data Corporation (CDC),
lançou o 6600, uma máquina que era aproximadamente uma ordem de grandeza mais
rápida do que a poderosa 7094 e qualquer máquina existente na época.
O projetista da 6600, Seymour Cray, foi uma figura legendária, da mesma estatura de
Von Neumann. Ele devotou sua vida inteira à construção de máquinas cada vez mais
rápidas, denominadas então de supercomputadores.
1.2.4 - A terceira geração - circuitos integrados (1965-1980)
A invenção do circuito integrado de silício por Robert Noyce em 1958 permitiu que
dezenas de transistores fossem colocados em um único chip. Esse empacotamento
possibilitava a construção de computadores menores, mais rápidos e mais baratos que
seus precursores transistorizados.
A IBM lançou o System/360, baseado em circuitos integrados, projetado para
computação científica e também comercial. Uma importante inovação da 360 era a
multiprogramação, com vários programas na memória ao mesmo tempo, de modo
que, enquanto um estava esperando por entrada/saída para concluir sua tarefa, um
outro podia executar, o que resultava em utilização mais alta da CPU.
O mundo dos minicomputadores também avançou um grande passo na direção da
terceira geração quando a DEC lançou a série PDP-11, um sucessor de 16 bits do PDP8. Sob muitos aspectos, a série PDP-11 era como um irmão menor da série 360,
exatamente como o PDP-1 era um irmãozinho da 7094. Ambos, 360 e PDP-11 tinha
registradores orientados para palavras e uma memória orientada para bytes.
1.2.5 - A quarta geração - integração em escala muito grande (1980-?)
Na década de 1980, a VLSI (Very Large Scale Integration - integração em escala muito
grande) tinha possibilitado colocar primeiro dezenas de milhares, depois centenas de
milhares e, por fim, milhões de transistores em um único chip. Esse desenvolvimento
logo levou a computadores menores e mais rápidos. Antes do PDP-1, os computadores
eram tão grandes e caros que empresas e universidades tinham de ter departamentos
especiais denominados centrais de computação para usá-los. Com a chegada do
minicomputador, cada departamento podia comprar seu próprio computador. Em
1980, os preços caíram tanto que era viável um único indivíduo ter seu próprio
computador. Tinha começado a era do computador pessoal.
Os primeiros computadores pessoais costumavam ser vendidos como kits. Cada kit
continha uma placa de circuito impresso, um punhado de chips, que normalmente
incluía um Intel 8080, alguns cabos, uma fonte de energia e talvez um disco flexível de
8 polegadas. Juntar essas partes para montar um computador era tarefa do comprador.
O software não era fornecido. Se você quisesse algum, você mesmo teria de escrevê-lo.
Mais tarde, o sistema operacional CP/M, escrito por Gary Kildall, tornou-se popular nos
anos 80.
Um outro computador pessoal era o Apple, e mais tarde o Apple II, projetados por
Steve Jobs e Steve Wozniak na tão falada garagem. Essa máquina gozava de enorme
popularidade entre usuários domésticos e em escolas, e fez da Apple uma participante
séria no mercado praticamente da noite para o dia.
Depois de muito deliberar e observar o que a outras empresas estavam fazendo, a IBM,
que então era a força dominante da indústria de computadores, por fim decidiu que
queria entrar no negócio do computador pessoal. Em vez de projetar toda a máquina
partindo do zero, usando peças da IBM, o que levaria demasiado tempo, a IBM fez algo
que não lhe era característico. Deu a Philip Estridge, executivo da empresa, uma grande
mala de dinheiro e disse que ele fosse para bem longe dos acionistas intrometidos da
sede da empresa em Armonk, NY, e só voltasse quando tivesse um computador
pessoal em funcionamento. Estridge se estabeleceu longe da sede, em Boca Raton, FL,
escolheu o Intel 8088 como sua CPU, e construiu o IBM Personal Computer com
componentes encontrados na praça. Foi lançado em 1981 e instantaneamente se
tornou o maior campeão de venda de computadores da história.
Embora outras empresas fabricassem computadores pessoais usando CPU's não
fornecidos pela Intel, entre elas Commodore, Apple e Atari, o impulso adquirido pela
indústria do IBM PC era tão grande que os outros foram esmagados por esse rolo
compressor. Apenas uns poucos sobreviveram em nichos de mercado.
Um dos que sobreviveram, se bem que por um triz, foi o Macintosh da Apple. O
Macintosh foi lançado em 1984 como o sucessor do malfadado Lisa da Apple, o
primeiro computador que vinha com uma GUI (Graphical Use Interface - Interface
Gráfica de Usuário), semelhante à agora popular interface do Windows.
A versão inicial do IBM PC vinha equipada com o sistema operacional MS-DOS
fornecido pela então minúscula Microsoft Corporation. Assim como a Intel conseguia
produzir CPUs cada vez mais potentes, a IBM e a Microsoft conseguiram desenvolver
um sucessor do MS-DOS denominado OS/2, que apresentava uma interface gráfica de
usuário semelhante à do Apple Macintosh. Ao mesmo tempo, a Microsoft também
desenvolvia seu próprio sistema operacional, o Windows, que rodava sobre o MS-DOS
caso o OS/2 não pegasse. Para encurtar a história, o OS/2 não pegou, a IBM e a
Microsoft tiveram uma ruptura notavelmente pública e a Microsoft foi adiante e
transformou o Windows em um enorme sucesso. O modo como a minúscula Intel e a
mais insignificante ainda Microsoft conseguiram destronar a IBM, uma das maiores,
mais ricas e mais poderosas corporações da história mundial, é uma parábola sem
dúvida contada com grandes detalhes nas escolas de administração de empresas de
todo o mundo.
Com o sucesso do 8088 em mãos, a Intel continuou fazendo versões maiores e
melhores dele. Particularmente digno de nora era o 386, lançado em 1986, que foi, em
essência, o primeiro Pentium.
1.2.6 - A quinta geração - computadores invisíveis
Em 1981, o governo japonês anunciou que estava planejando gastar 500 milhões de
dólares para ajudar empresas japonesas a desenvolver computadores de quinta
geração que seriam baseados em inteligência artificial e representariam um salto
quântico em relação aos computadores 'burros' da quarta geração.
Se considerarmos a primeira geração como máquinas a válvula, a segunda geração
como máquinas a transistores, a terceira geração como as primeiras máquinas de
circuito integrado, e a quarta como computadores pessoais, a real quinta geração é
mais uma mudança de paradigma do que uma nova arquitetura específica. No futuro,
computadores estarão por toda parte e embutidos em tudo - na verdade, invisíveis.
Eles são parte da estrutura da vida diária, abrindo portas, acendendo luzes, distribuindo
dinheiro e milhares de outras coisas. Esse modelo, arquitetado pelo falecido Mark
Weiser, foi denominado originalmente computação ubíqua, mas o termo computação
pervasiva também é usado com freqüência.
1.3 - Zoológico dos Computadores
Embora computadores pessoais sejam os computadores mais conhecidos, há outros
tipos de máquinas hoje em dia, portanto, vale a pena dar uma pesquisada no que há
mais por aí.
1.3.1 - Forças tecnológicas e econômicas
A indústria de computadores está avançando como nenhuma outra. A força propulsora
primária é a capacidade dos fabricantes de chips de empacotar cada vez mais
transistores por chip todo ano. Mais transistores, que são minúsculos interruptores
eletrônicos, significam memórias maiores e processadores mais poderosos.
1.3.2 - Tipos de Computadores
Richard Hamming, antigo pesquisador do Bell Labs, certa vez observou que uma
mudança de uma ordem de grandeza em quantidade causa uma mudança na
qualidade. Assim, um carro de corrida que alcança 1.000 km/h no deserto de Nevada é
um tipo de máquina fundamentalmente diferente de um carro normal que alcança 100
km/h em uma rodovia. De modo semelhante, um arranha-céu de 100 andares não é
apenas um edifício de apartamentos de 10 andares em escala maior. E, no que se refere
a computadores, não estamos falando de fatores de 10, mas, no decurso de três
décadas, estamos falando de fatores na casa de milhão.
1.3.3 - Computadores descartáveis
Na extremidade inferior desse tipo encontramos um único chip colado na parte interna
de um cartão de congratulações que toca 'Feliz Aniversário' ou 'Lá vem a noiva', ou
qualquer outra dessas musiquinhas igualmente horrorosas.
Contudo, os computadores descartáveis chegaram pra ficar. O desenvolvimento
provavelmente mais importante na área dos computadores descartáveis é o chip RFID
(Radio Frequency IDdentification - identificação por radiofreqüência). Agora é possível
fabricar por alguns centavos chips RFID sem bateria com menos de 0,5 mm de
espessura que contêm um minúsculo radiotransponder e um único número de 128 bits
embutido.
Vamos começar com uma aplicação corriqueira: acabar com os códigos de barras de
produtos. Já foram feitos testes experimentais nos quais o fabricante anexou chips RFID
(em vez de código de barras) a seus produtos à venda em lojas. O cliente escolhe seus
produtos, coloca-os em um carrinho de compras e apenas os leva para fora da loja,
sem passar pela caixa registradora. Na saída da loja um leitor munido de uma antena
envia um sinal solicitando que cada produto se identifique, o que cada um faz por meio
de uma curta transmissão sem fio. O cliente também é identificado por um chip
embutido em seu cartão bancário ou de crédito. No final do mês, a loja envia ao cliente
uma fatura identificada por itens referente às compras do mês. Se o cartão de banco ou
cartão de crédito RFID do cliente não for válido, um alarme é ativado. Esse sistem não
só elimina a necessidade de caixas e a correspondente espera na fila, mas também
serve como sistema antifurto porque de nada adianta esconder um produto no bolso
ou na sacola.
Os chips RFID poderão ser utilizados em outras funções, como rastreamento de carros,
transporte de bagagens áreas, transporte de encomendas e até em notas de dinheiro.
1.3.4 - Microcontroladores
No degrau seguinte da escada temos computadores que são embutidos em
dispositivos que não são vendidos como computadores. Os computadores embutidos,
às vezes denominados microcontroladores, gerenciam os dispositivos e manipulam a
interface de usuário. São encontrados em grande variedade de aparelhos diferentes,
entre eles o seguinte:
- Eletrodomésticos (rádio-relógio, máquina de lavar, secadora, forno de microondas,
alarme antifurto).
- Aparelhos de comunicação (telefone sem fio, telefone celular, fax, pager).
- Periféricos de computadores (impressora, scanner, modem, drive de CD-ROM).
- Equipamentos de entretenimento (VCR, DVD, aparelhos de som, MP3 player,
transdutores de TV).
- Aparelhos de reprodução de imagens (TV, câmera digital, camcorder, lentes,
fotocopiadora).
- Equipamentos médicos (raio X, MRI (ressonância magnética), monitor cardíaco,
termômetro digital).
- Sistemas de armamentos militares (míssil teleguiado, ICBM (míssil balístico
intercontinental), torpedo).
- Dispositivos de vendas (máquina de venda automática, caixa eletrônico (ATM), caixa
registradora).
- Brinquedos (bonecas que falam, consoles de jogos, carro ou barco com
radiocontrole).
1.3.5 - Computadores de jogos
Um nível acima estão as máquinas de videogame. São computadores normais, com
recursos gráficos especiais e capacidade de som, mas software limitado e pouca
capacidade de extensão. Começaram como CPU's de baixo valor para jogos simples,
como pingue-pongue em aparelhos de televisão. Com o passar dos anos evoluíram
para sistemas muito mais poderosos, rivalizando com o desempenho de computadores
pessoais e até ultrapassando esse desempenho em certas dimensões.
Embora as máquinas não sejam tão poderosas quantos os computadores pessoais
produzidos no mesmo período de tempo, elas não ficam muito atrás e em certos
aspectos estão à frente; por exemplo: a CPU de 128 bits do Playstation 2 é maior do
que a CPU de qualquer PC, embora a velocidade de relógio seja muito mais baixa. A
principal diferença entre uma máquina de jogos e um PC não está tanto na CPU, mas
no fato de que máquinas de jogos são sistemas fechados. Os usuários não podem
expandir a CPU com cartões plug-in, embora às vezes sejam fornecidas interfaces USB
ou FireWire. Além disso, e talvez o mais importante, máquinas de jogos são
cuidadosamente otimizadas para uma única área de aplicação: jogos de alta
interatividade em 3-D com alta qualidade de áudio estéreo.
1.3.6 - Computadores pessoais
Em seguida, chegamos aos computadores pessoais nos quais a maioria das pessoas
pensa quando ouve o termo 'computador'. O termo 'computadores pessoais' abrange
computadores de mesa e notebooks. Costumam vir equipados com centenas de
megabytes de memória e um disco rígido que contém cerca de 100 gigabytes de
dados, um drive de CD-ROM/DVD, modem, cartão de som, interface de rede, monitor
de alta resolução e outros periféricos. Têm sistemas operacionais elaborados, muitas
opções de expansão e uma imensa faixa de softwares disponíveis. Há quem reserva o
termo 'PC' para as máquinas que têm uma CPU Intel e use 'estação de trabalho' para as
equipadas com um chip RISC de última geração, como as Sun UltraSPARC. Contudo,
conceitualmente há pouca diferença entre elas.
1.3.7 - Servidores
Computadores pessoais reforçados ou estações de trabalho são muito usados como
servidores de rede, tanto em rede locais (em geral dentro de uma única empresa)
quanto na Internet. Os servidores vêm em configurações com um único processador e
com múltiplos processadores, têm gigabytes de memória, centenas de gigabytes de
espaço de disco rígido e capacidade para trabalho em rede de alta velocidade. Alguns
deles podem manipular milhares de transações por segundo.
Em termos de arquitetura, contudo, um servidor com um único processador na verdade
não é muito diferente de um computador pessoal com um único processador. Apenas
mais rápido, maior e tem mais espaço de disco, e possivelmente conexão de rede mais
rápida. Servidores executam os mesmos sistemas operacionais que os computadores
pessoais, normalmente alguma variação de Unix ou Windows.
1.3.8 - Conjuntos de estações de trabalho
Devido as melhorias quase contínuas na relação preço/desempenho de estações de
trabalho e computadores pessoais, nos últimos anos os projetistas de sistemas
começaram a conectar grandes números deles para formar COWs (Clusters id
Workstations) ou, às vezes, simplesmente clusters. Eles consistem em computadores
pessoais ou estações de trabalharem juntas em um único problema, muitas vezes
científico ou de engenharia. Normalmente são o que se costuma denominar COTS
(Commodity Off The Shelf - mercadoria de prateleira), computadores que qualquer um
pode comprar de algum vendedor de PCs comuns. O principal acréscimo é a
capacidade de trabalho em rede alta velocidade, mas às vezes isso também é um
cartão de rede padrão encontrado no comércio. A escala desses conjuntos pode ser
aumentada com facilidade e vai desde um punhado de máquinas até milhares delas.
Em geral, o fator limitador é a verba disponível.
1.3.9 - Mainframes
Agora chegamos aos mainframes: computadores que ocupam uma sala e nos fazem
voltar à década de 1960. Em muitos casos, essas máquinas são as descendentes diretas
dos mainframes IBM 360 adquirida há décadas. Na maioria não são muito mais rápidas
do que servidores de grande potência, mas sempre têm mais capacidade de E/S e
costumam ser equipadas com vastas coleções de discos que contêm normalmente
milhares de gigabytes de dados. Embora sejam caros, é comum serem mantidos em
funcionamento por causa do enorme investimento em software, dados, procedimentos
de operação e pessoal que representam.
Até pouco tempo, havia uma outra categoria de computadores ainda mais poderosos
do que os mainframes: os supercomputadores. Eles tinham CPUs extremamente
rápidas, muitos gigabytes de memória principal e discos e redes muitos velozes. Eram
usados para cálculos maciços nas áreas científica e de engenharia, como a simulação
de colisão de galáxias, a síntese de novos medicamentos ou a modelagem do fluxo de
aro ao redor da asa de um avião. Contudo, nos últimos anos, os COWs passaram a
oferecer a mesma capacidade de computação a preços muito mais baixos, e os
verdadeiros supercomputadores agora são uma raça em extinção.
1.4 - Exemplos de famílias de computadores
Os Computadores pessoais são interessantes porque todo leitor sem dúvida já usou
um. Servidores são interessantes porque executam todos os serviços na Internet. Por
fim, computadores embutidos são invisíveis para seus usuários mas controlam carros,
televisores, fornos de microondas, máquinas de lavar e praticamente todo
equipamento elétrico que custe mais de 50 dólares.
1.4.1 - Introdução ao Pentium 4
Em 1989, a Intel lançou o chip 80486 que, em essência, era uma versão mais veloz do
80386 que também tinha unidade de ponto flutuante e 8 quilo bytes de memória cache
no chip. A memória cache é usada para conter as palavras de memória mais usadas,
dentro ou próximas da CPU, de modo a evitar o acesso (lento) à memória principal. O
80486 também tinha suporte de multiprocessador embutido, o que permitia que os
fabricantes construíssem sistemas com várias CPU's que compartilhavam uma memória
em comum.
Nesse ponto, a Intel descobriu do modo mais difícil (perdendo uma ação judicial de
violação de marca registrada) que números (como 80486) não podem se considerados
como marca registrada, portando a geração seguinte ganhou um nome: Pentium (da
palavra grega cinco) Diferente do 80486 que tinha um só pipeline interno, o Pentium
tinha dois, o que ajudava a torná-la duas vezes mais rápido.
Mais tarde a Intel acrescentou à linha de produção as instruções especiais MMX
(MUltiMedia eXtension). O propósito dessas instruções era acelerar cálculos exigidos
para processar áudio e vídeo, o que tornou desnecessária a adição de coprocessadores
especiais multimídia.
Quando a próxima geração apareceu, quem estava esperando por um Sexium (sex é
'seis' em latim) ficou desapontado. O nome Pentium agora era tão conhecido que o
pessoal de marketing resolveu conservá-lo, e o novo chip foi denominado Pentium Pro.
A despeito da pequena mudança de nome em relação a seu antecessor, esse
processamento representou uma grande ruptura com o passado. Em vez de ter dois ou
mais pipelines, o Pentium Pro tinha uma organização interna muito diferente e podia
executar até cinco instruções por vez.
Uma outra inovação encontrada no Pentium Pro era uma memória de cache de dois
níveis. O chip do processador em si tinha 8 quilo bytes de memória rápida para conter
instruções mais usadas e mais 8 quilo bytes de memória rápida para conter mais dados
mais usados. Na mesma cavidade dentro do pacote Premium Pro (mas não no chip em
si) havia uma segunda memória de cache de 256 quilo bytes.
O próximo Pentium era baseado em uma arquitetura interna diferente. Para celebrar
esse evento a Intel mudou de algarismos romanos para algarismos arábicos e o
denominou Pentium 4. Como sempre, o Pentium 4 era mais rápido do que todos os
seus antecessores. A versão de 3,06 GHz também introduziu uma nova e integrante
característica, o hipertreading. Essa característica permitia que os programas
distribuíssem seus trabalho para dois threads de controle que o Pentium 4 é podia
executar em paralelo, acelerando a execução. Além disso, foi acrescentado um novo
lote de instruções SSE para acelerar ainda mais o processamento de áudio e vídeo.
Além da principal de CPUs para computadores de mesa discutida antes, a Intel fabricou
variantes de alguns dos chips Pentium para mercados especiais. No início de 1998, a
empresa lançou uma nova linha de produto denominada Celeron, basicamente uma
versão de baixo preço e baixo desempenho do Pentium 2, dirigida a PCs de linhas mais
baratas.
Em novembro de 2000, a Intel lançou o Pentium 4, que executava os mesmos
programas que o Pentium III e Xeon, mas como um projeto interno totalmente novo. A
versão de 3,06 GHz do Pentium 4 introduziu o hiperthreading.
Em 2003, a Intel lançou o Pentium M (de Mobile), um chip projetado para notebooks.
Esse chip era parte da arquitetura Centrino, cujos objetivos eram menor consumo de
energia para maior tempo de vida útil das baterias; computadores menores e mais
leves e capacidade de rede sem fio embutida usando o padrão IEEE 802.11 (wiFi). A
Intel pretende lançar, no futuro, conjuntos de chips para outras aplicações específicas,
por exemplo, dispositivos para entretenimento doméstico e notebooks IEEE 802.16
(WiMax).
Em novembro de 2004 a Intel cancelou o Pentium 4 de 4 GHz por causa de problemas
de dissipação de calor. Grandes ventiladores podem ajudar, mas o barulho que fazem
não agrada aos usuários, e refrigeração a água, embora usada em grandes mainframes,
não é uma opção viável para equipamentos de mesa (menos ainda para notebooks).
Como conseqüência, a antes implacável marcha do relógio pode ter sido
temporariamente interrompida, ao menos até que os engenheiros da Intel descubram
como se livrar com eficiência de todo calor gerado. Em vez disso, os planos futuros da
Intel são colocar duas CPUs em um mesmo chip, junto com uma grande cache
compartilhada. Por causa do modo como o consumo de energia está relacionado com
a tensão elétrica e a velocidade duas vezes maior.
1.4.2 - Introdução ao UltraSPARC III
Na década de 1970, o Unix era popular em universidades, mas nenhum computador
pessoal o executava, portanto os admiradores do Unix tinham de usar
minicomputadores de tempo compartilhado (muitas vezes sobrecarregados), tais como
o PDP-11 e o VAX. Em 1981, um estudante alemão de pós-graduação de Stanford,
Andy Bechtolsheim, frustrado por ter de ir até a central de computadores para usar o
Unix, decidiu resolver esse problema construindo para si mesmo uma estação de
trabalho Unix pessoal com peças encontradas no comércio. Ele denominou SUN-1
(Stanford University Network).
Logo Bechtolsheim atraiu a atenção de Vinod Khosla contratou Scott McNealy, um
outro estudante de pós-graduação de Stanford, para chefiar a produção. Para escrever
o software eles contrataram Bill Joy, arquiteto principal do Berkeley Unix. Os quatro
juntos fundaram a Sun Microsystems em 1982.
Em 1987 a Sun, que agora vendia meio bilhão de dólares por ano de sistemas, decidiu
projetar sua própria CPU com base em um projeto novo e revolucionário da
Universidade da Califórnia em Berkeley (a RISC II). Essa CPU, denominada SPARC
(Scalable Processor ARChitecture - arquitetura escalável de processador) formou a base
da estação de trabalho Sun-4. Dentro de pouco tempo todos os produtos da Sun
usavam a CPU SPARC.
Diferentes de muitas outras empresas de computadores, a Sun decidiu não fabricar o
chip da CPU SPARC. Em vez disso, licenciou vários fabricantes diferentes de
semicondutores para produzi-lo, esperando que a concorrência entre eles
impulsionasse o desempenho para cima e os preços para baixo. Esses fornecedores
produziram vários chips diferentes com base em tecnologia diferentes, executando a
velocidade de relógio diferentes e com vários preços. Entre esses chips estão
MicroSPARC, HyperSPARC, SuperSPARC e TurboSPARC. Embora as diferenças entre
essas CPUs fossem minúsculas, todas eram compatíveis binárias e executavam os
mesmos programas de usuário sem modificação.
A UltraSPARC pretendia desbravar um novo terreno. Enquanto as máquinas
antecessoras foram projetadas para manipular dados alfanuméricos e executar
programas como processadores de textos e planilhas, desde o início a UltraSPARC foi
projetada para manipular imagens, vídeo e multimídia em geral. Entre outras inovações
além da arquitetura de 64 estavam 23 novas instruções, incluindo algumas para
empacotar e desempacotar pixels de palavras de 64 bits, aumentar o tamanho de
imagens e girá-las, movimentar blocos e processar compressão e descompressão de
vídeo em tempo real. Essas instruções, denominadas VIS (Visual Instruction Set),
destinavam-se a fornecer capacidade multimídia geral, análoga às instruções MMX da
Intel.
A UltraSPARC visava a aplicações de primeira linha, tais como grandes servidores Web
multiprocessadores com dezenas de CPUs e memórias físicas de até 8 YB( 1 TB
(terabyte) = 10¹² bytes).
As sucessoras da UltraSPARC I foram a UltraSPARC II, UltraSPARC III e UltraSPARC IV.
Esses modelos diferem, sobretudo na velocidade de relógio, mas em cada iteração
também foram adicionadas algumas novas características.
1.4.3 - Introdução ao 8051
Nosso terceiro exemplo é muito diferente de nosso primeiro (o Pentium 4, usado em
computadores pessoais) e do segundo (a UltraSPARC III, usada em servidores). É o
8051, usado em sistemas embutidos. A história do 8051 começa em 1976, quando o
8080 de 8 bits já estava no mercado havia aproximadamente dois anos. Fabricantes de
eletrodomésticos e aparelhos em geral estavam começando a incorporar o 8080 eu
seus equipamentos mas, para construir um sistema completo, eles precisavam do chip
de CPU 8080, um ou mais chips de memória e um ou mais de E/S. O custo de no
mínimo três chips e sua interconexão era substancial e restringia a utilização de
computadores em sistemas embutidos a itens razoavelmente grandes e caros. Muitos
fabricantes pediam à Intel que colocasse um computador inteiro (CPU, memória e E/S)
em um único chip, para reduzir custos.
A Intel atendeu a seus clientes produzindo o chip 8748, um microcontrolador com 17
mil transistores que continha uma CPU semelhante à 8080, 1KB de memória somente
de leitura para o programa, 64 bytes de memória de leitura/escritura para as variáveis,
um temporizador de 8 bits e 27 linhas de E/S para controlar os interruptores, botões e
luzes. Embora primitivo, o chip foi um sucesso comercial, o que levou a Intel a lançar o
8051 em 1980. Esse novo chip continha 60 mil transistores, uma CPU muito mais
rápida, 4 KB de memória somente de leitura, 128 bytes de memória de leitura/escrita,
32 linhas de E/S, uma porta serial e dois temporizadores de 16 bits. Logo foi seguido
por outros membros que a Intel denominou família MCS-51.
Todos esses chips usam memórias somente de leitura para o programa, mais uma
pequena quantidade de memória de leitura/escrita denominada RAM (Random Acess
Memory - memória de acesso aleatória) para armazenamento de dados. Com o 8031 e
o 8032, a memória de programa é externa, o que permite que mais de 8 KB sejam
usados se necessário. O 8051 e o 8052 são microcontroladores de um só chip usados
em produtos propriamente ditos. Cada lote é fabricado sob encomenda para o cliente
e contém o programa fornecido pelo cliente.
1.5 - Unidades métricas
Para evitar qualquer confusão, vale a pena declarar explicitamente que, neste livro,
assim como na ciência da computação em geral, são usadas unidades métricas em vez
das tradicionais unidades inglesas (o sistema furlong-stone-fortnight). Os prefixos
normalmente s]ao abreviados por suas primeiras letras, sendo a unidade maior do que
1 em maiúsculas (KB, MB etc). Uma exceção (por razões históricas) é kbps para
kilobits/s. Assim, uma linha de comunicação de 1 Mbps transmite 10¬ bits/s e um
relógio de 100 ps bate a cada 10-¹º segundos. Uma vez que ambos os prefixos, mili e
micro, começam com a letra 'm', era preciso fazer uma escolha. Normalmente 'm'
representa mi e 'u'(letra grega mu) representa micro.
Também vale a pena lembrar que, para medir tamanhos de memórias, discos, arquivos
e banco de dados, na prática comum do setor as unidades têm significados
ligeiramente diferentes. Quilo, por exemplo, significa 2¹° (1.024) em vez de 10³ (1.000)
porque as memórias são sempre uma potência de dois. Assim, uma memória de 1 KB
contém 1.024 bytes, e não 1.000 bytes. De modo semelhante, uma memória de 1 MB
contém 2²° (1.048.576) bytes, uma memória de 1 GB contém 2³° (1.073.741.824) bytes e
um banco de dados de 1 TB contém 240 (quarenta pequeno) (1.099.511.627.776) bytes.
Todavia, uma linha de comunicação de 1kbps pode transmitir 1.000 bits por segundo e
uma LAN de 10 Mbps funciona a 10.000.000 bits/s porque essas velocidades não são
potências de dois.
1.6 - Esquema deste livro
Este livro trata de computadores multiníveis (o que inclui praticamente todos os
computadores modernos) e de como eles são organizados. Examinaremos quatro
níveis com considerável detalhe - a saber, o nível lógico digital, o nível da
microarquitatura, o nível ISA e o nível do sistema operacional da máquina. Entre alguns
dos assuntos básicos examinados estão o projeto global do nível (e por que foi
projetado desse jeito), os tipos instruções e dados disponíveis, a organização e o
endereçamento da memória e o método de implementação do nível.
Nossa preocupação primordial é com conceitos, e não com detalhes ou matemática
formal. Por essa razão, alguns dos exemplos dados serão muito simplificados, de modo
a enfatizar as idéias centrais, e não os detalhes.
Para dar uma certa idéia de como os princípios apresentados neste livro podem se, e
são, aplicados na prática, usaremos o Pentium 4, a UltraSPARC III e o 8051 como
exemplos correntes em todo o livro. Os três foram escolhidos por diversas razões. Em
primeiro lugar, todos são amplamente usados e é provável que o leitor tenha acesso a
no mínimo um deles. Em segundo lugar, cada um tem sua própria arquitetura exclusiva,
o que dá uma base de comparação e incentiva uma atitude de questionamento a
respeito das possíveis alternativas. Livros que tratam apenas de uma máquina
costumam deixar o leitor com uma sensação de estarem relevando o projeto de
máquina absoluto, o que é absurdo à luz das muitas concessões e decisões arbitrárias
que os projetistas são obrigados a tomar. Incentivamos o leitor a estudar esses e todos
os outros computadores com espírito crítico e tentar entender por que as coisas são
como são e também como poderiam ser diferentes, em vez de simplesmente aceitá-las
como fatos.

Documentos relacionados

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores Programas Aplicativos: é o nível com que, obviamente, o usuário de computador está mais familiarizado. É neste nível que o usuário interage com o computador, usando um programa (como jogos, editore...

Leia mais