Você está na página 1de 94

Universidade Federal de Santa Catarina

Depto de Informática e de Estatística


Curso de Graduação em Sistemas de Informação

Prof. Roberto Willrich

Florianópolis, Setembro de 2002


Capítulo 1

Conceitos Básicos de Informática


1.1 Índice Geral
1.1 Índice Geral................................................................................................................. 1
1.2Introdução..................................................................................................................... 3
1.3Computador.................................................................................................................. 3
1.3.1Modelo de Von Neumann........................................................ 4
1.4Evolução histórica das arquiteturas de computador..................................................... 4
1.4.1Precursores............................................................................... 4
1.4.2Geração zero (século XVII)..................................................... 5
1.4.3As máquinas de primeira geração (1930-1958)....................... 9
1.4.4Computadores de segunda geração (1955-1965)................... 11
1.4.5Computadores de terceira geração (1965-1980).................... 12
1.4.6Computadores de quarta geração (1980 - ...)......................... 13
2.1 Sistemas Numéricos.................................................................................................... 1
2.1.1Sistema Binário........................................................................ 1
2.1.2 Sistema Octal.......................................................................... 2
2.1.3 Sistema Hexadecimal..............................................................2
2.2 Operações Aritméticas................................................................................................. 3
2.2.1 Aritmética Binária.................................................................. 3
2.2.2 Aritmética Hexadecimal......................................................... 6
2.3Operações Lógicas........................................................................................................ 9
2.3.1 Operações lógicas com bits.................................................... 9
2.3.2 Operações Lógicas com números......................................... 10
2.4 Tipos de Dados Tratados pelo Computador.............................................................. 10
2.5 Representação Interna de Caracteres......................................................................... 11
2.5.1 Código de 6 bits.................................................................... 11
2.5.2 Códigos de 7 bits (ASCII).................................................... 11
2.5.3 EBCDIC................................................................................ 13
2.5.4 ASCII Estendido................................................................... 13
2.5.5IS O Latin-1........................................................................... 14
2.5.6 Caracteres ANSI .................................................................. 14
2.5.7 Caracteres Unicode............................................................... 15
2.6 Representação Interna de Números .......................................................................... 15
2.6.1 Representação de Números Inteiros..................................... 15
2.6.2 Vírgula fixa (Fixed Point)..................................................... 16
2.6.3 Ponto Flutuante..................................................................... 17
2.7Representação Digital de Áudio, Imagem e Vídeo.................................................... 21
2.7.1 Sinais Analógicos para representar informações.................. 21
2.7.2 Porque Digitalizar?............................................................... 22
2.7.3 Digitalização, Amostragem e Quantificação........................ 23
2.7.4 Áudio.................................................................................... 25
2.7.5 Vídeos e Imagens Analógicos.............................................. 26
2.7.6 Representação digital de imagens e vídeos.......................... 27
2.7.7 Especificação da Cor............................................................ 28
2.7.8 Sistema RGB........................................................................ 29
3.1 Introdução.................................................................................................................... 1
3.2 Componentes básicos de um computador....................................................................1
3.3 Processador.................................................................................................................. 2
3.3.1 Unidade Lógica e Aritmética.................................................. 3
3.3.2 Unidade de Controle (UC)...................................................... 5
3.3.3 Registradores.......................................................................... 5
3.3.4 Clock....................................................................................... 6
2 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

3.4 Processadores CISC e RISC........................................................................................ 6


3.5 Memória.......................................................................................................................6
3.5.1 Memória Principal.................................................................. 7
3.5.2 Tecnologias de memória RAM............................................... 9
3.5.3 Memória Secundária............................................................. 13
3.5.4 Memória Cache..................................................................... 17
3.6 Barramentos............................................................................................................... 19
3.6.1 Barramento do processador.................................................. 19
3.6.2 Barramento de Cache............................................................ 20
3.6.3 Barramento da Memória....................................................... 20
3.6.4 Barramento de E/S................................................................ 21
3.6.5 Barramento ISA.................................................................... 21
3.6.6 Barramento MCA................................................................. 22
3.6.7 Barramento EISA..................................................................22
3.6.8 Local bus............................................................................... 22
3.6.9 VESA Local Bus...................................................................24
3.6.10 Barramento PCI.................................................................. 24
3.6.11 Barramento PC-Card (PCMCIA)....................................... 25
3.6.12 USB ....................................................................................26
3.6.13 Firewire (IEEE 1394)......................................................... 26
3.7 Dispositivos de Entrada/Saída................................................................................... 26
4.1 Programação de Computadores................................................................................... 1
4.1 Níveis de Linguagens de Programação........................................................................1
4.1.1 Linguagem de Máquina.......................................................... 1
4.1.2 Linguagem Hexadecimal........................................................ 2
4.1.3 Linguagem Assembly............................................................. 2
4.1.4 Linguagem de Alto Nível....................................................... 4
4.1.5 Linguagens estruturadas......................................................... 5
4.2 Execução de Programas............................................................................................... 5
4.3 Desenvolvimento de Programas.................................................................................. 7
4.3.1Geração do código fonte (codificação).................................... 7
4.3.2Tradução do Código Fonte (código objeto)............................. 7
4.3.3 Editores de ligação................................................................ 11
4.3.4 Depuradores ou debuggers................................................... 12
4.4 Paradigmas de programação...................................................................................... 12
4.4.1 Programação não-estruturada............................................... 12
4.4.2 Programação Procedural....................................................... 12
4.4.3 Programação Modular.......................................................... 13
4.4.4 Programação Orientada a Objetos........................................ 13
4.4.5 Linguagens de programação e seus paradigmas................... 13
4.5 Linguagens Interpretadas........................................................................................... 13
4.5.1 Compilador Versus Interpretador......................................... 14
4.5.2 Máquina Virtual.................................................................... 14
4.5.3 Java....................................................................................... 14
3 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

1.2Introdução
A Informática engloba toda atividade relacionada ao desenvolvimento e uso dos
computadores que permitam aprimorar e automatizar tarefas em qualquer área de
atuação da sociedade. Podemos definir a informática como a “ciência do tratamento
automático das informações”. Muito mais que visar simplesmente a programação de
computadores para executar tarefas específicas, a informática estuda a estrutura e o
tratamento das informações sob suas mais variadas formas: números, textos, gráficos,
imagens, sons, etc.
O computador em si intervém apenas como um instrumento para agilizar o tratamento da
informação, e não como seu objetivo final. A informática busca criar uma abstração da
realidade dentro de um sistema de computação, com o objetivo de reproduzila mais
fielmente possível e assim poder substituila, ou melhorar sua compreensão.
O profissional de Informática vai atuar basicamente no desenvolvimento do que se pode
chamar de um Sistema Computacional, o qual abrangem a combinação de hardware
(circuitos), software (programas) e outros elementos essenciais.
A crescente evolução na área de Informática, particularmente no que diz respeito ao
desenvolvimento de equipamentos de informática (processadores cada vez mais
velozes, o surgimento de novas tecnologias de armazenamento de dados e novos
periféricos), aliada às constantes quedas nos preços do hardware, possibilitou um
avanço das atividades relacionadas à informática na quase totalidade das atividades
humanas, iniciando pelas Engenharias e atingindo as mais diversas áreas como a
Medicina, as Artes, o Entretenimento, a Economia, etc...
Como conseqüência disto, é real a necessidade de que em cada área, os profissionais
desenvolvam um conhecimento da tecnologia de Informática que seja útil na solução dos
problemas relacionados com o seu eixo profissional.
Neste capítulo inicial, serão apresentados os conceitos básicos da Informática, partindo
dos principais conceitos relacionados às arquiteturas de computadores até introduzir os
primeiros aspectos relativos à programação e das linguagens utilizadas na programação
de computadores.

1.3Computador
O computador é uma máquina capaz de receber, armazenar, tratar e produzir
informações de forma automática, com grande rapidez e precisão. A evolução dos
sistemas de computação teve seu início no século 16, mas estes somente mostraramse
úteis neste século, e sua vulgarização se deu graças à recente evolução na micro-
eletrônica.

Tipos de Computadores Digitais


Atualmente, as famílias de computadores podem ser classificadas em 5 grupos distintos:
os computadores pessoais (PCs), os minicomputadores, os superminicomputadores, os
computadores de grande porte (mainframes) e os supercomputadores. A tabela a seguir
dá um exemplo das máquinas comerciais que se enquadram nestes grupos e as suas
aplicações típicas.
GRUPO MÁQUINA APLICAÇÃO
Computador pessoal IBM Pentium Tratamento de texto, aplicações
científicas, etc
Minicomputador PDP-11/84 Tempo real
Supermini Sun SPARC Pesquisa, servidor de arquivos
Mainframes IBM 3090/300 Banco, Universidade
Supercomputador Cray-2 Cálculo
4 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

1.3.1Modelo de Von Neumann


A grande maioria dos computadores existentes atualmente segue um modelo proposto
pelo matemático americano Von Neumann, por volta de 1940. Nesse modelo, um
elemento processador segue as instruções armazenadas em uma memória de
programas, para ler canais de entrada, enviar comandos sobre canais de saída e alterar
as informações contidas em uma memória de dados. A 1.3.1 indica a estrutura desse
modelo.

Entradas

Memória de Memória de
Programas Processador Dados

Saídas

Φιγυρα 1.Modelo de Von Neuman


Esse modelo inicial evoluiu para uma estrutura em barramento (1.3.1), que é a base dos
computadores modernos. Nessa estrutura, as memórias de dados e de programa são
fundidas em uma memória única, e as comunicações entre elementos são efetuadas
através de uma via comum de alta velocidade:

Memória Processador Periféricos

Barramento

Φιγυρα 2.Estrutura em Barramento

1.4Evolução histórica das arquiteturas de computador


A história dos computadores começou no momento em que o homem sentiu a
necessidade de efetuar cálculos complexos de maneira automática.

1.4.1Precursores
O primeiro elemento com que o homem contou para fazer seus cálculos foi o conjunto de
dedos de suas mãos, daí veio a palavra digital, vindo de dígito, que significa dedo. Com
a evolução da humanidade fez-se necessário novas invenções para auxiliar os cálculos:

Ábaco (aprox. 3500 a.C.).


A palavra CÁLCULO tem sua origem no termo latino CALCULUS. Que a milhares de
anos servia para denominar pequenas pedras que eram usadas para contar deslizando-
se por sulcos cavados no chão. Essa espécie de Ábaco foi descoberta em recentes
escavações arqueológicas.
A partir desse elemento de cálculo, outros similares apareceram em diversos lugares do
mundo, sendo chamados de ábaco. O mais antigo data de aproximadamente 3500 a.C.,
no Vale entre os rios Tigre e Eufrates. Por volta do ano 2600a.C. apareceu o ábaco
5 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

chinês que evoluiu rapidamente e foi chamado em sua forma final de Suan-Pan, de
modo semelhante apareceu no Japão, o Soroban.
O ábaco constituiu portanto o primeiro dispositivo manual de cálculo; servia para
representar números no sistema decimal e realizar operações com eles. A 1.4.1
apresenta um ábaco, que consiste numa moldura dividida em 2 partes; possui uma
vareta vertical para cada dígito, sendo que cada vareta tem em sua parte inferior 5 anéis
que em repouso ficam para baixo, e na parte superior 2 anéis que em repouso ficam
para cima. Cada unidade acrescentada a um dos dígitos do número é representada pelo
movimento para cima de um dos anéis da parte inferior da vareta. Quando os 5 estão na
parte de cima devem ser movidos para baixo. O mesmo deve ser feito com os mesmo
anéis na parte superior da mesma vareta, se os dois anéis da parte superior estão para
baixo, devem ser movidos para cima acrescentando-se uma unidade a vareta seguinte, à
esquerda dessa vareta. O maior número que pode ser cálculado depende do número de
varetas.
EMBED Word.Picture.8
Φιγυρα 3.Ábaco

Bastões de Napier (1610 - 1614)


Passaram-se séculos sem que qualquer invenção ficasse registrada até que fossem
criados tais bastões. Eram tabelas móveis de multiplicação e divisão feitas de marfim. O
responsável foi um nobre escocês chamado John Napier, inventor também dos
logaritmos. Apesar de dispositivos semelhantes aos bastões terem sido usados desde o
final do século XVI, eles só apareceram documentados a partir de 1614. Um conjunto
completo de bastões de Napier consiste em 9 peças: uma para cada dígito de 1 a 9.
Cada uma destas hastes é essencialmente uma coluna de uma tabela de multiplicação.
Para obter o produto, os dígitos de cada diagonal são somados da direita para a
esquerda.

Réguas de Cálculo (1621)


As tabelas de Napier influenciaram diretamente a invenção da régua de cálculo,
concretizada pelo matemático inglês William Oughtred com uma forma circular
considerada como um dos primeiros dispositivos analógicos de computação. A Régua de
Cálculo e as calculadoras mecânicas foram largamente utilizadas até 1970, quando
surgiram as calculadoras eletrônicas.

1.4.2Geração zero (século XVII)


Os primeiros computadores, ou de geração zero, apareceram no século XVII e eram
compostos exclusivamente por elementos mecânicos. Além disso, caracterizavam-se por
uma grande rigidez no que diz respeito aos programas a executar, a grande parte delas
sendo o que se chama hoje de máquinas dedicadas.

Calculadora de Pascal (1642)


Dos trabalhos conhecidos deste período, destaca-se o trabalho de
Blaise Pascal, que em 1642 desenvolveu uma máquina de
calcular totalmente mecânica. A máquina, também chamada de
Pascaline (1.4.2), era baseada na existência de um disco para
cada potência de 10, cada disco sendo dotado de 10 dígitos (de 0
a 9). Embora fosse capaz de realizar apenas adições e
subtrações, outras operações, como multiplicações e divisões
podiam ser realizadas através da combinação das primeiras.
Pascal esperava comercializar sua máquina, mas foi um fracasso comercial, apesar de
ser uma importante invenção.
6 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Φιγυρα 4.Pascaline

Calculadora de Leibnitz (1671)


Em 1671, o filósofo e matemático alemão de Leipzig, Gottfried Wilhelm
von Leibnitz (21/06/1646 - 14/11/1716) introduziu o conceito de realizar
multiplicações e divisões através de adições e subtrações sucessivas.
Em 1694, a máquina foi construída e apresentava uma certa evolução
em relação à Calculadora de Pascal. Através de somas repetidas era
capaz de efetuar multiplicações, também era capaz de realizar
divisões, assim sendo capaz de executar as quatro operações básicas
da matemática. Sua operação apresentou-se muito deficiente e sujeita
a erros, tendo sido, portanto, abandonada.

Φιγυρα 5.Máquina de Leipzig

Placa Perfurada (1801)


Joseph Marie Jacquard introduziu o conceito de armazenamento de informações em
placas perfuradas, que não eram usadas especificamente em processamento de dados,
mas para controlar uma máquina de tecelagem. Esse processo despertou, já nessa
época, temor pelo desemprego, provocando uma grande reação popular contra essa
espécie de pré-automação.

Arithmometer (1820)
Em 1820, Charles Xavier Thomas (1785-1870, conhecido como Thomas de Colmar,
Paris - FR) projetou e construiu uma máquina capaz de efetuar as 4 operações
aritméticas básicas: a Arithmometer. Esta foi a primeira calculadora realmente
comercializada com sucesso: até 1850 vendeu-se cerca de 1500 Arithmometers. Ela
fazia multiplicações com o mesmo princípio da calculadora de Leibnitz e com a
assistência do usuário efetuava as divisões.

Φιγυρα 6.Arithmometer
7 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Máquina Diferencial de Babbage (1823)


Entre 1802 e 1822, Charles Babbage (1792-1871), um matemático e engenheiro
britânico, construiu uma máquina - a máquina de diferenças — que baseava-se também
no princípio de discos giratórios e era operada por uma simples manivela. Babbage é
considerado o precursor dos modernos computadores eletrônicos
digitais.
Esta máquina de diferenças surgiu devido a preocupação de
Babbage com os erros contidos nas tabelas matemáticas de sua
época. Esta máquina permite calcular tabelas de funções
(logaritmos, funções trigonométricas, etc.) sem a intervenção de um
operador humano. Ao operador cabia somente iniciar a cadeia de
operações, e a seguir a máquina tomava seu curso de cálculos,
preparando totalmente a tabela prevista. Em 1823, o governo
britânico financiou a construção de uma nova versão mas não
obteve resultado satisfatório, devido os limites do ferramental
industrial da época. Babbage se viu obrigado a desenhar peças e
ferramentas, retardando o desenvolvimento do projeto. Após 10 anos de trabalho, tudo
que Babbage havia conseguido era uma pequena máquina de 3 registros e 6 caracteres,
sendo que deveria ser, de acordo com o projeto, uma máquina de 7 registros e 20
caracteres cada, além de apresentar seus resultados impressos!

Φιγυρα 7.Máquina de Diferenças

Máquina Analítica
Em 1833, Babbage projetou uma máquina bastante
aperfeiçoada (com o auxílio de Ada Lovelace), que chamou de
Máquina Analítica. Ada é uma das poucas mulheres a figurar
na história do computador. Matemática talentosa,
compreendeu o funcionamento da Máquina Analítica e
escreveu os melhores relatos sobre o processo. Ela criou
programas para a máquina, tornando-se a primeira
programadora de computador do mundo.
A Máquina Analítica poderia ser programada para calcular
várias funções diferentes, era constituída de unidade de
controle de memória aritmética e de entrada e saída. Sua
operação era governada por conjunto de cartões perfurados, de modo que, de acordo
com os resultados dos cálculos intermediários, a máquina poderia saltar os cartões,
modificando dessa forma o curso dos cálculos.
8 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Φιγυρα 8.Máquina Analítica


Babbage investiu toda sua fortuna pessoal e de seu filho, que com ele trabalhou durante
anos, na construção de sua máquina Analítica, vindo a falecer em 1871, sem findar a
construção.

Máquina de Hollerith (1886)


Aproximadamente em 1885, Herman Hellerith, funcionário do
Departamento de Recenseamento dos E.U.A., percebeu que a
realização do censo anual demorava cerca de 10 anos para ser
concluído e que a maioria das perguntas tinha como resposta sim
ou não. Em 1886 idealizou um cartão perfurado que guardaria as
informações coletadas no censo e uma máquina capaz de tabular
essas informações. Construiu então a Máquina de
Recenseamento ou Máquina Tabuladora, perfurando-se cerca de
56 milhões de cartões.
A máquina Tabuladora era composta das seguintes unidades (1.4.2):
 Unidade de controle, que dirigiria a seqüência das operações de toda a máquina através de
furos em cartões perfurados.
 Entrada de dados, que utilizava também cartões perfurados.
 Saída, que perfuraria os resultados em cartões para uso posterior como entrada, aumentando
assim a memória interna com armazenamento externo, indefinidamente grande.
 Saída impressa utilizada na apresentação dos resultados finais, tais como tabelas
matemáticas, a qual de uma linotipo automática acoplada ao sistema.

Φιγυρα 9.Máquina Tabuladora


Foi Herman Hollerith, que concebeu a idéia de processar dados a partir de cartões
perfurados (o problema a resolver era a computação de dados do censo dos Estados
9 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Unidos). Com esta solução, Hollerith conseguiu que o tempo de processamento dos
dados do censo baixasse de 8 para 3 anos. A tecnologia de cartões perfurados foi
adotada rapidamente por diversos países da Europa, difundindo a utilização das
máquinas Hollerith a nível mundial e por bastante tempo.
Dez anos mais tarde, Hollerith fundou uma companhia, a Tabulating Machine Company.
Em 1924, esta firma mudou de nome, tornando-se a International Business Machines
Corporation, hoje mais conhecida como IBM. No início, as vendas da IBM eram
baseadas na linha de equipamentos de escritório e, em particular, máquinas tabulares.
Com isso a empresa orientou suas atividades para o mercado externo, abrindo sua
primeira filial fora dos Estados Unidos, no Canadá em 1917.

1.4.3As máquinas de primeira geração (1930-1958)


Já no século XX, um grande número de projetos foram implementados, baseados na
utilização de relés e válvulas eletrônicas (1.4.3) para a realização de cálculos
automaticamente — eram os computadores de primeira geração. Relés são eletroímãs
cuja função é abrir ou fechar contatos elétricos com o intuito de interromper ou
estabelecer circuitos. Válvula é um dispositivo que conduz a corrente elétrica num só
sentido.

Φιγυρα 10.Relé e Válvula


Uma das grandes vantagens das máquinas a relé sobre as máquinas de calcular
mecânicas era, sem dúvida, a maior velocidade de processamento. Ainda, um outro
aspecto positivo era a possibilidade de funcionamento contínuo, apresentando poucos
erros de cálculo e pequeno tempo de manutenção.
Os computadores da primeira geração são todos baseados em tecnologias de válvulas
eletrônicas. Normalmente quebravam após não muitas horas de uso. Tinham
dispositivos de entrada/saída primitivos e calculavam com uma velocidade de
milissegundos (milésimos de segundo). Os cartões perfurados foram o principal meio
usado para armazenar os arquivos de dados e para ingressá-los ao computador. A
grande utilidade dessas máquinas era no processamento de dados. No entanto tinham
uma série de desvantagens como: custo elevado, relativa lentidão, pouca confiabilidade,
grande quantidade de energia consumida e necessitavam de grandes instalações de ar
condicionado para dissipar o calor gerado por um grande número de válvulas (cerca de
20 mil).
A seguir serão apresentados alguns destes computadores.

MARK I
O Mark I (1.4.3) foi criado entre 1937 e 1944, durante a II Guerra Mundial. Uma
calculadora eletromecânica muito grande, idealizada por H. Aiken na Universidade de
Harvard, foi considerado o primeiro projeto de computador. Utilizava muitas válvulas, as
operações internas eram controladas por relés e os cálculos eram realizados
mecanicamente. Integrava conceitos de computadores digitais e analógicos, pois tinha
sistema eletrônico e mecânico na mesma máquina. Media 2,5 m de altura e 18 m de
comprimento.
Com o apoio da IBM e da Marinha dos Estados Unidos, Howard Aiken, o pesquisador
que desenvolveu Mark I, construiu outras versões deste computador (Mark II a Mark IV).
10 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Φιγυρα 11.Mark I

ABC (Atanasoff Berry Computer)


Criado em 1939. Foi o primeiro a usar válvulas para circuitos lógicos e o primeiro a ter
memória para armazenar dados, princípio no qual se baseiam os computadores digitais.
Atanasoff levou 4 princípios em consideração em seu projeto de computador:
 usar eletricidade e eletrônica como meio;
 recorrer à lógica binária para as operações;
 usar um condensador para memória que pudesse ser regenerado para evitar intervalos;
 calcular por ação lógica direta, não por via convencional de numeração.
ENIAC (Electronic Numeric Integrator and Calculator)
Criado entre 1943 e 1946. Foi considerado o primeiro grande computador digital. Não
usava um programa de armazenamento interno. Os programas eram introduzidos por
meio de cabos, o que fazia sua preparação para cálculos demorar semanas. Ocupava
170 m², pesava 30 toneladas, funcionava com 18 mil válvulas e 10 mil capacitores, além
de milhares de resistores a relé, consumindo uma potência de 150 Kwatts. Como tinha
vários componentes discretos, não funcionava por muitos minutos seguidos sem que um
deles quebrasse. Chega a ser, em algumas operações, mil vezes mais rápido que o
MARK I.

Φιγυρα 12.ENIAC
A entrada de dados no ENIAC era baseada na tecnologia de cartões perfurados e os
programas eram modificados através de reconfigurações no circuito. Apesar das dúvidas
11 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

com relação à sua confiabilidade, o ENIAC permaneceu operacional por mais de 10


anos.
Outra contribuição importante desta época foi o conceito de programa armazenado,
introduzida por John Von Neuman. Von Neuman tinha sido consultor no projeto ENIAC e
conhecia os problemas da programação destas máquinas. Os programas para os
computadores da época eram feitos através de modificações nos circuitos, o
correspondia a um trabalho de dias para um programa relativamente simples. A proposta
de Von Neuman foi inspirada na tecnologia de entrada de dados utilizada na época,
fazendo com que os programas fossem introduzidos através de cartões perfurados como
se fazia com os dados. John Von Neuman assim desenvolveu a lógica dos circuitos, os
conceitos de programa e operações com números binários. Estes conceitos, adotados
nos computadores atuais, revolucionou o conceito de programação de computadores da
época, tornando muito mais flexíveis e versáteis.
O novo conceito de programação introduzido por Von Neuman deu origem a muitos
outros projetos nos quais ele próprio esteve envolvido, como por exemplo o EDVAC
(Electronic Discrete Variable Automatic Computer), o IBM 650 (o primeiro computador da
IBM), e o UNIVAC (Universal Automatic Computer), que foi o primeiro computador a ser
fabricado em linha. Juntamente com o ENIAC, ocorreu também o desenvolvimento na
área de periféricos de computador com o aparecimento de equipamentos tais como as
unidades de fita magnética, impressoras, etc...
Em 1961 chegou o primeiro computador no Brasil: um UNIVAC 1105, ainda com
válvulas, para o IBGE.

1.4.4Computadores de segunda geração (1955-1965)


Com a invenção do transistor em 1948, o mundo dos computadores é tomado de assalto
por uma onda de novos projetos que dá origem, na década de 60 a empresas hoje
mundialmente conhecidas no que diz respeito à fabricação destas máquinas — DEC e
IBM.

Φιγυρα 13.Transistor
Com a segunda geração apareceram as memórias com anéis ferromagnéticos. As fitas
magnéticas foram a forma dominante de armazenamento secundário: permitiam
capacidade muito maior de armazenamento e o ingresso mais rápido de dados que as
fitas perfuradas.
Também nesse período houve avanços no que se refere às unidades de memória
principal, como por exemplo, a substituição do sistema de tubos de raios catódicos pelo
de núcleos magnéticos, utilizado até hoje nos “chips” de memória RAM. Os dispositivos
de memória auxiliar introduzidos na primeira geração continuam a ser utilizados.
Esses computadores, além de menores, eram mais rápidos e eliminavam quase que por
completo o problema do desprendimento de calor, característico da geração anterior.
Exemplos de computadores dessa geração são o IBM 1401 e o Honeywell 800. O IBM
1401 apareceu na década de 60 e com ele a IBM assumiu uma posição dominante na
industria de computadores.
A Digital Equipment Corporation tinha então uma posição proeminente no setor com sua
linha PDP. O primeiro minicomputador foi o PDP-1, criado em 1959 e instalado em 1961.
O primeiro produzido comercialmente foi o PDP-5.
12 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Um dos computadores mais comercializados nesta época foi o IBM 7090, que eram
comercializados a um custo de três milhões de dólares. Já no início dos anos 60, a IBM
passou a produzir os computadores da linha IBM 7040, que eram menos poderosos que
seus predecessores, mas de custo bastante inferior.

1.4.5Computadores de terceira geração (1965-1980)


Essa geração é marcada pela substituição dos transistores pela tecnologia dos circuitos
integrados (transistores e outros componentes eletrônicos miniaturizados e montados
numa única pastilha de silício - o chip). Entrou no mercado em 1961 pela Fairchild
Semiconductor e pela Texas Instruments, localizadas no Vale do Silício na região de
Palo Alto e Stanford, na Califórnia. A tecnologia dos circuitos integrados, que permitiu a
substituição de dezenas de transistores numa única peça de silício, permitiu o
surgimento de computadores de menores dimensões, mais rápidos e menos caros. Com
esses circuitos integrados o tempo passou a ser medido em nanossegundos
(bilionésimos de segundos).

Φιγυρα 14.Transistores, integrados e válvulas


A tecnologia utilizada na época era a de pequena escala de integração (SSI -Small
Scale of Integration) com a qual ao redor de mil transistores podiam-se integrar no
circuito de uma pastilha. Com isso os computadores eram menores, mais confiáveis,
com maior velocidade de operação e um custo bem mais baixo do que as máquinas das
gerações anteriores. Também eram usados discos magnéticos para armazenamento, o
que permitiu o acesso direto à arquivos muito grandes.
O exemplo típico dessa geração foi o IBM 360 (1.4.5), série que introduziu o conceito de
família de computadores compatíveis, facilitando a migração dos sistemas quando é
necessário mudar para um computador mais potente. Esta estratégia permitiu que a IBM
se posicionasse, já neste período, como líder do mercado de computadores. Essa família
era composta por seis modelos básicos e várias opções de expansão que realizava mais
de 2 milhões de adições por segundo e cerca de 500 mil multiplicações. Outra novidade
introduzida por esta classe de computadores foi o conceito de multiprogramação, na qual
diversos programas poderiam estar residentes na memória da máquina. No caso em que
um programa entrasse em espera para uma operação de entrada/saída de dados, a
unidade central passava a executar a parte de um outro programa.

Φιγυρα 15.IBM 360


13 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Um outro computador desta geração que conheceu grande sucesso, particularmente nas
universidades e centros de pesquisa foram os minicomputadores da série PDP-11
(DEC), apresentado na 1.4.5.

Φιγυρα 16.PDP 11

1.4.6Computadores de quarta geração (1980 - ...)


Durante a década de 70, com a tecnologia da alta escala de integração (LSI - Large
Scale of Integration) pôde-se combinar até 65 mil componentes em uma só pastilha de
silício (chip). Os anos 80, com o grande desenvolvimento da tecnologia de circuitos
integrados, o número de transistores podendo ser integrados numa pastilha de silício
atingiu a faixa dos milhares e, logo em seguida, dos milhões. Foi assim que surgiram os
novos computadores, ainda menores, mais velozes e mais poderosos que aqueles da
geração anterior. Na segunda metade da década de 90, houve a passagem da LSI para
a VLSI (Very Large Scale of Integration - muito alta escala de integração). As máquinas
de todas as gerações têm como característica comum a existência de uma única CPU
para executar o processamento. Porém, mais recentemente, já existem computadores
funcionando com mais de uma CPU.
Desde o início da década de 80 os preços haviam caído de tal maneira que já começava
a ser possível a uma pessoa ter o seu próprio computador — começava então a era da
informática pessoal. Os computadores pessoais passaram então a ser utilizados de uma
maneira relativamente distinta dos grandes computadores de então.
No início dessa geração nasceu a Intel, que começou a desenvolver o primeiro
microprocessador, o Intel 4004 (1.4.6) de 4 bits, um circuito integrado com 2250
transistores, equivalente ao ENIAC.
O 4004 foi seguido pelo Intel 8008 de 8 bits e, mais tarde, pelo Intel 8080. O primeiro
microcomputador da história foi o Altair 8800 (1.4.6), que usava o chip Intel 8088, tornou-
se padrão mundial da época para os microcomputadores de uso pessoal, abrindo uma
nova era na história da informática.

Φιγυρα 17.Intel 4004


14 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

Φιγυρα 18.Altair
Sthephen Wozniak e Steve Jobs formaram em 1976 uma pequena empresa, a Apple,
onde construíram, numa garagem de fundo de quintal, o Apple I (1.4.6). Um ano depois,
com um novo e melhor projeto, surge o Apple II, primeiro microcomputador com grande
sucesso comercial e, mais tarde, o Apple III. Em 1983 entra no mercado o Lisa e em
1984 o Macintosh, com tecnologia de 32 bits.

Φιγυρα 19.Apple I
Em 1981, a IBM entrou no mercado de micros, introduzindo o PC, um microcomputador
com tecnologia de 16 bits (Intel 8088) que em pouco tempo se tornou um padrão. Os
principais modelos de PC são:
 PC: possui cinco slots, dos quais dois são ocupados na configuração mínima - um para o
controlador de disco flexível e o outro para a placa de vídeo e impressora, um PC tem a
seguinte configuração típica - 256 a 640 K de memória RAM na placa principal, duas unidades
de disco flexível de 360 K, controlador de vídeo gráfico, monitor monocromático e interface
serial ou paralela para a impressora. Seu clock era de 4,77 MHz.
 PX-XT: possui oito slots, sendo dois ou três ocupados na configuração inicial - placa
controladora de vídeo mais uma ou duas placas para controlar discos (flexível e winchester). A
configuração típica de um XT é 512 a 768 K de memória RAM na placa principal, um drive de
360 K, um winchester de 10, 20 ou 30 Mb, placa controladora de vídeo gráfica, monitor
monocromático e interface paralela ou serial. Seu clock era de 8,10 até 12 MHz.
 PC-XT 286: modelo intermediário entro o PC-XT e o PC-AT ou, como era chamado, um AT
simplificado, uma vez que usa o microprocessador do AT o Intel 80286. Esse era três vezes
mais rápido que o XT e podia executar várias tarefas ao mesmo tempo. É um PC-XT com o
80286.
 PC-AT: usa o microprocessador da Intel 80286 de 32 bits e possui maior capacidade de
processamento, com memória principal de até 4 Mbytes. Sua configuração inicial típica é: 1
Mbyte de RAM, um drive de 5,25 polegadas de alta capacidade, winchester de 20 ou 30
Mbytes com alta velocidade de acesso, interface paralela e serial RS-232, controlador de
15 Capítulo 1: Conceitos Básicos de Informática Prof. Roberto Willrich

vídeo e monitor monocromático. Sua velocidade de processamento alcançava entre 16 e 20


Mhz. A grande importância do AT está na maior capacidade do 80286, que resulta em um
desempenho duas a três vezes maior que os XT.
 PC-386: É um PC-AT com o microprocessador da Intel, o 80386. Com isso adquiriram grande
velocidade de processamento e era capaz da multitarefa em 32 bits. O 80386 foi o grande
marco da popularização da computação pessoal.
 PC 486 utiliza o microprocessador Intel 80486, com um co-processador aritmético embutido e
mais de 1,2 milhão de transistores encolhidos em um chip.
Em 1993 chegou ao mercado o Pentium, cuja versão Pentium III possui cerca de nove
milhões de transistores, possibilitando. O Pentium trouxe um novo fôlego às chamadas
estações de trabalho (microcomputadores poderosos usados em tarefas pesadas, como
computação gráfica e aplicações científicas). Uma das novidades dele é que possibilita a
simulação de dois processadores, ou seja, um princípio de paralelização antes possível
apenas em supercomputadores e que agora está ao alcance dos usuários de
microcomputadores.

Supercomputadores
A história dos supercomputadores começa, de fato, no final de 1975 com o Cray-1. As
aplicações para esses computadores são muito especiais e incluem laboratórios e
centros de pesquisa aeroespaciais, empresas de altíssima tecnologia, previsão do tempo
e a produção de efeitos e imagens computadorizadas de alta qualidade. Os
supercomputadores são os mais poderosos, mais rápidos e de maior custo. Utilizam o
conceito de processamento paralelo e são máquinas vetoriais, isto é, podem executar a
mesma operação em diversas variáveis simultaneamente. Como exemplos de
supercomputadores podemos citar: Cray-1, Cyber 205, Fujitsu Facon-APU, Hitachi
M200HIAP, Galaxy, Cray-2, Cray-3.
Capítulo 2

Sistemas Numéricos e a Representação Interna


dos Dados no Computador
2.1 Sistemas Numéricos
Sistemas numéricos são sistemas de notação usados para representar quantidades
abstratas denominadas números. Um sistema numérico é definido pela base que utiliza.
A base é o número de símbolos diferentes, ou algarismos, necessários para representar
um número qualquer, dos infinitos possíveis no sistema. Por exemplo, o sistema
decimal, utilizado hoje de forma universal, utiliza dez símbolos diferentes ou dígitos para
representar um número e é, portanto, um sistema numérico na base 10.

Valores posicionais
Em um sistema de número posicional, um número é representado por uma seqüência de
dígitos onde cada posição de dígito tem um peso associado. Tomando como exemplo o
sistema decimal, ou base 10, que é sistema numérico que utilizamos diariamente (0, 1, 2,
... 9), o valor D de um número decimal de 4 dígitos d3d2d1d0 é D = d3*103 + d2*102+ d1*101
+ d0*100. Cada dígito di tem um peso de 10i. Por exemplo, o número 3.098.323 (base 10)
é a representação de 3*106 + 0*105 + 9*104 + 8*103 + 3*102 + 2*101 + 3*100.

2.1.1Sistema Binário
O sistema binário, ou base 2, apresenta unicamente dois dígitos: 0,1. Neste sistema a
contagem é realizada como segue: 0, 1, 10, 11, 100, 101, 110, 111, 1000, ...

Conversão Binário para Decimal


Sendo binário um sistema de número posicional, o valor B de um número binário de 8
dígitos b7b6b5b4b3b2b1b0 é B = b7*27 + b6*26+ b5*25 + d4*24 + d3*23 + d2*22+ d1*21 + d0*20.
Cada dígito bi tem um peso de 2i. Assim o valor binário 10101010b é calculado como
segue 10101010b = 0*1+1*2+0*4+1*8+0*16+1*32+0*64+1*128 = 170d. Esta é a
conversão de um número binário para decimal. Outro exemplo 10011001 b =
1+8+16+128=153d

Conversão Decimal para Binário


No sistema decimal, por exemplo, o número 654 corresponde a 4 unidades, 5 dezenas e
6 centenas. Para verificar isto, divide-se o número pela sua base (que é 10):
654/10 = 65 Resto 4 (*1)
/10 = 6 Resto 5 (*10)
/10 Resto 6 (*100)
Para a conversão de decimal para binário utilizamos o mesmo processo. Por exemplo,
para obtermos o correspondente binário do número 200d, dividimos primeiramente este
valor por 2 e anotamos o resto de cada divisão. Em seguida, dividimos novamente o
dividendo da operação anterior por 2 e anotamos novamente o resto da divisão. Isto é
repetido até que o resto da divisão seja 0, conforme abaixo:
200/2=100 Resto 0
100/2= 50 Resto 0
50/2 = 25 Resto 0
25/2 = 12 Resto 1
12/2 = 6 Resto 0
6/2 = 3 Resto 0
2 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

3/2 = 1 Resto 1
1/2 = 0 Resto 1
O correspondente binário de 200d é obtido unindo-se os restos da divisão por 2 na ordem
inversa, assim 200d=11001000b.

2.1.2 Sistema Octal


O sistema binário ou base 8 apresenta oito dígitos: 0, 1, 2, 3, 4, 5, 6, 7. Neste sistema, a
contagem é realizada como segue: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17,
20,...

Conversão Octal para Decimal


Sendo o sistema octal um sistema de número posicional, o valor O de um número octal
de 4 dígitos o3o2o1o0 é O = d3*83 + d2*82+ d1*81 + d0*80. Cada dígito oi tem um peso de 8i.
Assim o valor octal 1758 é calculado como segue 1758 = 5*1+7*8+1*64 = 12510. Esta é a
conversão de um número octal para decimal.

Conversão Decimal para Octal


Para a conversão de decimal para octal utilizamos o mesmo processo da conversão do
sistema decimal para binário. Por exemplo, para obtermos o correspondente octal do
número 200d, dividimos primeiramente este valor por 8 e anotamos o resto de cada
divisão. Em seguida, dividimos novamente o dividendo da operação anterior por 8 e
anotamos novamente o resto da divisão. Isto é repetido até que o resto da divisão seja 0,
conforme abaixo:
200/8= 25 Resto 0
25/8 = 3 Resto 1
3/8 = 0 Resto 3
O correspondente octal de 200d é obtido unindo-se os restos da divisão por 8 na ordem
inversa, assim 200d=310o.

2.1.3 Sistema Hexadecimal


Na base hexadecimal tem-se 16 dígitos que vão de 0 à 9 e da letra A até F. Estas letras
representam os números 10d a 15d. Assim nós contamos os dígitos hexadecimais da
seguinte forma: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, ..., 19, 1A, 1B, 1C,
1D, 1E, 1F, 20, 21, ...

Conversão Binário para Hexadecimal


A conversão entre números binários e hexadecimais é simples. A primeira coisa a fazer é
dividir o número binário em grupos de 4 bits, começando da direita para a esquerda, os
lugares que faltam são complementados por zeros. Por exemplo, o número 101011 b
(1+2+8+32=43d), nós dividimos este em grupos de 4 bits e nós temos 10;1011. Nós
completamos o último grupo com zeros: 0010;1011. Após nós tomamos cada grupo
como um número independente e nós convertemos estes em dígitos decimais:
0010;1011=2;11. Mas desde que nós não podemos representar o número hexadecimal
como 211 porque isto é um erro, nós temos que substituir todos os números decimais
maiores que 9 pelas suas respectivas representações em hexadecimal, com o que nós
obtemos: 2Bh. A tabela abaixo pode auxiliar na conversão de números binário para
hexadecimal.
Binário Hexadecimal Decimal
0000 00 0
0001 01 1
0010 02 2
0011 03 3
0100 04 4
0101 05 5
0110 06 6
3 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

0111 07 7
1000 08 8
1001 09 9
1010 0A 10
1011 0B 11
1100 0C 12
1101 0D 13
1110 0E 14
1111 0F 15
Afim de obter um número hexadecimal em binário é apenas necessário inverter os
passos.

Conversão Hexadecimal em Decimal


Para converter um número hexadecimal em decimal, nós utilizamos a mesma fórmula
utilizada na conversão binário para decimal, sendo que a base 2 é trocada por 16. Por
exemplo, para converter B2Ah em decimal:
B -> 11*162 = 2816d
2 -> 2*161 = 32d
A -> 10*160 = 10d
2858d

Conversão Decimal para Hexadecimal


Para converter um número decimal em hexadecimal, nós utilizamos a mesma fórmula
utilizada na conversão de um número decimal para binário, dividindo por 16 em vez de 2.
Por exemplo, para converter 1069d em hexadecimal:
1069/16= 66 Resto 13d = Dh
66/16 = 4 Resto 2d = 2h
4/16 = 0 Resto 4d = 4h
1069d = 42Dh

2.2 Operações Aritméticas

2.2.1 Aritmética Binária


Esta seção apresenta as quatro operações básicas no sistema binário: adição,
subtração, divisão e multiplicação.

Adição
Para somar dois números binários, fazem-se as contas coluna a coluna, da direita para a
esquerda, como de costume, fazendo o transporte de um (<e vai um>) quando for o
caso. Para isto, observe as seguintes operações básicas:
 0+0=0
 0+1=1
 1 + 1 = 10 (1 mais 1 é igual a 0 e vai 1)
 1 + 1 + 1 = 11 (1 mais 1 mais 1 é igual a 1 e vai 1)
Exemplos:
+ 111 1100111 111110
+ 1101 100100 11001 101110
+ 1101 + 1001011111+ 10011 + 1110
10010 110110 101100 111100

Subtração
Existem duas formas para fazer a subtração binária:
4 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 Como o conjunto de símbolos contém apenas 2 dígitos, ao se efetuar a subtração parcial entre
2 dígitos, um do diminuendo e outro do diminuidor, se o segundo (diminuidor) exceder o
primeiro (diminuendo), subtrai-se uma unidade ao dígito imediatamente à esquerda no
diminuendo (se existir e o seu valor for 1), convertendo-o a 0. Em seguida, substituímos o
diminuendo por 2, que corresponde à equivalência 1*2, da unidade extraída. Se o dígito
imediatamente à esquerda for 0, procura-se nos dígitos consecutivos.
Exemplos: 11101 - 111
02
02 021
-11101 -11101 -11101
-111 -111 -111
10010 11010 10110

Exemplos: 11000 - 111


1 0112 1 0112
1 0120 1 0120
-10200 1 0200
-11000 -11000
-111 -111
1001 10001

 A segunda forma de realizar a subtração, por exemplo de a-b, e realizar a soma de a por -b.
Esta subtração é feita pelo chamado método do complemento de dois. O complemento de dois
transforma um número positivo em negativo. Neste método, o diminuendo (a) é somado com o
complemento de dois do diminuidor (-b). Note que o número de dígito dos operandos devem
ser o mesmo: para isto complemente o operando com menor número de dígitos com zeros a
esquerda (antes do complemento). Para realizar o complemento de dois, basta trocar os uns
pelos zeros e vice-versa e adicionar um ao resultado. Por exemplo, a subtração de 1110-101 é
feita da seguinte maneira:
1 . Completa-se o número de dígitos do diminuidor: 0101
2. Realiza-se o complemento de dois do diminuidor: 1010+1=1011.
3. Soma-se os dois operandos 1110+1011=11001
4. Despreza-se o transporte final: 1001
Multiplicação
A multiplicação na base 2 - ou em qualquer outra base - pode fazer-se por adições
sucessivas; para calcular A*B basta somar A a si própria B vezes.
Exemplo: 101b * 100b = ? Lembrado que 100b = 4b, então
101 * 100 =

Uma forma, e a ideal, é fazer a operação semelhante à multiplicação decimal, exceto


pelo fato da soma final dos produtos se fazer em binário. Para tal, as seguintes
igualdades devem ser respeitadas:
 0*0=0; 0*1=0; 1*0=0; 1*1=1
Exemplos:
 Multiplicar os números 1011 e 1101.
5 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 Multiplicar os números 1001 e 1101.

Divisão
Analogamente, a divisão pode ser feita por subtrações sucessivas, até obtermos uma
diferença igual a zero (no caso de uma divisão exata), ou um número menor que o
divisor.
Exemplo:

Mas esta divisão pode ser feita de maneira idêntica à divisão decimal, exceto pelo fato
das multiplicações e subtrações internas ao processo serem feitas em binário.
Exemplo:
 Dividir 11011 e 101.
6 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 Dividir 1010101 e 101.

A prova é:

2.2.2 Aritmética Hexadecimal


Adição
Como exemplo, suponha a adição de 8h+5h, se somada em decimal o valor seria 13. Em
hexadecimal, o valor 13 é representado por Dh. Deve-se reparar que, tal como nos
habituamos a fazer na Escola Primária, sempre que o resultado iguala ou ultrapassa a
base, subtraímos esta ao resultado, e fazemos um transporte para a coluna seguinte («e
vai um», neste caso). Suponha agora a adição de 19 por 9:
 Em decimal, o resultado seria 28;
 Em hexadecimal, inicialmente somamos os dígitos menos significativos: 9h+9h = 18; como o
resultado é maior que a base (16), então 18-16 = 2 e vai um para o dígito mais significativo.
Portanto, 19h+9h=22h;

Não é preciso converter os números F8h e A34h para decimal, somá-los e reconverter o
resultado para a base 16. Podemos fazer a conta coluna a coluna. Então F8 h + A34h é
calculado da seguinte forma:

Subtração
Vamos ver a subtração a partir de um exemplo: 27H-1EH. Efetuamos a operação de
subtração coluna a coluna. Na primeira coluna, o diminuidor (E) é superior ao
diminuendo (7). Então, adicionamos a base ao diminuendo, executamos a subtração, e
há transporte de uma unidade que somamos ao diminuidor da coluna seguinte.
7 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

retirando o número transportado do diminuendo da coluna da esquerda, 2-1, obtemos 1,


e subtraindo 1 do diminuidor, obtemos 0:

Multiplicação
Esta operação pode fazer-se facilmente por meio da tabela de dupla entrada
apresentada:

Como se vê, temos todos os algarismos hexadecimais (exceto o zero) nas entradas
verticais e horizontais da tabela. Se quiséssemos calcular 5h*9h, por exemplo,
encontraríamos o resultado na intercessão da coluna 5 com a linha 9. Então, 5h*9h = 2Dh.
Uma vez que a multiplicação é comutativa, então, o mesmo resultado se verifica na
intercessão da coluna 9 com a linha 5.
 1º. Exemplo:
Ah* 2h = _______ (complete)
2h*7h = _______ (complete)
 2º. Exemplo:

Procedendo como de costume, vamos começar pelo produto do multiplicando pelo


algarismo mais à direita do multiplicador:
8 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Calculamos em seguida o produto do multiplicando pelo 2º. algarismo (contando a


partir da direita) do multiplicador.

Agora é só somar os produtos parciais. Fica:

 Fazer o produto dos seguintes números hexadecimais: B12H e 3FCH

Divisão
Esta é a operação mais difícil de fazer sem recorrermos à tabela anterior. Veja alguns
exemplos:
 1º. Exemplo: dividir os números hexadecimais 2F por 12.

Para verificarmos se é verdade, nada melhor que fazer a prova:


9 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 2º. Exemplo: Dividir os números hexadecimais 3F4 por A1

2.3Operações Lógicas
Existem quatro tipos de operações lógicas que se podem operar sobre números binários:
AND, OR, XOR (ou exclusivo), e NOT.

2.3.1 Operações lógicas com bits


AND
A operação lógica AND é uma operação que aceita dois operandos. Estes operando são
binários simples (base 2). A operação AND é
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1
Uma maneira compacta de representar a operação lógica AND é com a tabela verdade,
apresentada abaixo. As duas colunas a esquerda representam os dois operandos da
operação AND Op1 OP2.
Op1 Op2 AND Op1 Op2
0 0 0
0 1 0
1 1 1
Em português, a operação lógica AND é: “se o primeiro operando é 1 e o segundo
operando é 1, o resultado é 1, senão o resultado é 0”.

OR
A operação lógica OR também é uma operação com dois operandos. Ela é definida
como:
0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
A tabela verdade da operação OR tem a seguinte forma:
Op1 Op2 OR Op1 Op2
0 0 0
0 1 1
1 0 1
1 1 1

A operação lógica OR significaria: “Se o primeiro operando ou o segundo operando (ou


os dois) forem 1, o resultado é 1, senão o resultado é 0. Esta operação também é
conhecida como ou inclusivo (inclusive-OR).

XOR
A operação lógica XOR (ou exclusivo) também é uma operação com dois operandos. Ela
é definida como:
10 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
A tabela verdade da operação XOR tem a seguinte forma:
Op1 Op2 XOR Op1 Op2
0 0 0
0 1 1
1 0 1
1 1 0

Em português a operação lógica XOR significaria: “Se o primeiro operando ou o segundo


operando, mas não os dois, for 1, o resultado é 1, senão o resultado é 0.

NOT
A operação lógica XOR (ou exclusivo) também é uma operação com um operando. Ela é
definida como:
not 0 = 1
not 1 = 1
A tabela verdade da operação NOT tem a seguinte forma:
Op1 NOT Op1
0 1
0 0
Em português a operação lógica NOT significaria: “Se o operando for 1, o resultado é 0,
senão o resultado é 1”.

2.3.2 Operações Lógicas com números


As operações lógicas trabalham apenas com operandos com bit único. Para realizar
estas operações sobre um número, por exemplo de 8, 16, 32 bits, é necessário realizar a
operação bit-a-bit. Por exemplo se quisermos realizar a operação lógica AND com dois
operandos de 8 bits cada, teríamos que executar a operação lógica AND sobre cada par
de bits independentemente:
1011 0101
AND 1110 1110
1010 0100
Como as operações lógicas são definidas em termos de valores binários, deve-se
converter os números decimais, hexadecimais, etc., para números binários antes de
realizar as operações lógicas.

2.4 Tipos de Dados Tratados pelo Computador


Todos os dados e as instruções armazenados em memória são codificados sob a forma
de sinais elétricos do tipo ligado e desligado, representado pelos números 1 e 0. Cada
unidade de informação deste tipo é chamada de bit, abreviação de Binary digit. Assim o
sistema numérico adotado em sistemas computacionais é o binário, ou base 2.
Os computadores podem receber valores decimais, através do teclado, e escrever
valores decimais, através do vídeo, por exemplo. Mas internamente os valores são
armazenados e processados no sistema binário.
Um bit pode representar dois valores: 1 ou 0, ou então verdadeiro ou falso. Como isto é
muito pouco, nós podemos unir dois ou mais bits para representar mais de dois valores.
Neste caso, a quantidade de valores representáveis por uma seqüência de n bits é de 2 n.
Algumas strings de bits têm nomes próprio:
 uma seqüência de 8 bits são chamados de byte
11 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 uma seqüência de 4 bits é chamada de nibble.


 um grupo de 16 bits é chamado de word.
 um grupo de 32 bits é chamado de double word.
 um grupo de 64 bits é chamado de quad word.
Por razões de simplificação de hardware, o número 1024 foi o escolhido para
representar o "k" da computação. Na vida cotidiana e na física, o "k" vale 1000:
 1 km = 1000 metros
 1 kg = 1000 gramas
 1 kV = 1000 volts
Entretanto, na informática, o multiplicador "k" (lê-se "quilo" ou "ká") vale 1024. Da mesma
forma, o multiplicador "M" (lê-se "mega"), que normalmente vale 1.000.000, na
computação vale: 1 M = 1024 k = 1024x1024 = 1.048.576. Portanto, 1 MB (lê-se "um
megabyte") são exatamente 1.048.576 bytes. Mas para efeitos práticos, podemos dizer
que 1 MB é aproximadamente 1 milhão de bytes.
O multiplicador "G" (lê-se "giga"), que normalmente vale 1 bilhão, na computação vale: 1
G = 1024 M = 1024x1024x1024 = 1.073.741.824. Portanto, 1 GB (lê-se "um gigabyte")
são exatamente 1.073.741.824 bytes, mas para efeitos práticos podemos dizer que 1 GB
é aproximadamente 1 bilhão de bytes.

2.5 Representação Interna de Caracteres


Os bytes são usados para representar caracteres, números, figuras, ou qualquer outro
tipo de dado armazenado ou processado em um computador. Esta seção apresenta
estas diversas formas de representação interna de caracteres.
Na maioria dos códigos alfanuméricos cada caractere é representado através de um
byte. Por exemplo, no código ASCII (visto mais adiante) a letra 'A' é representada pelo
byte "0100 0001". Uma seqüência de caracteres é expressa por uma cadeia de bytes
sucessivos. Nem todos os tipos de códigos utilizam os 8 bits de um byte para a
representação de caracteres.

2.5.1 Código de 6 bits


Os primeiros códigos utilizados foram os de 6 bits, que permitiam a representação de 2 6
= 64 caracteres (2.5.1), que correspondem a:
 26 letras maiúsculas.
 10 algarismos ( 0 1 2 3 4 5 6 7 8 9 ).
 28 caracteres chamados especiais, incluindo SP (caractere em espaço em branco).

Φιγυρα 20.Código de 6 bits.


Por exemplo, a codificação da frase "OLA!" é: X010100 X010001 X000110 X010101.

2.5.2 Códigos de 7 bits (ASCII)


Com o desenvolvimento das linguagens de programação de alto nível começaram a ser
utilizados os códigos de 7 bits que permitiam a representação de minúsculas e de
12 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

caracteres cujo significado são ordens de controle para periféricos. Um exemplo desse
tipo de códigos é o ASCII de 7 bits (2.5.2).

Φιγυρα 21.Código ASCII de 7 bits.


Os significados dos caracteres de controle são:

ASCII é uma codagem a 7 bits, mas muitos computadores manipula uma quantidade de
8 bits (byte). Portanto, os caracteres ASCII devem ser freqüentemente armazenados um
por byte, com o bit mais significante igual a 0. O bit extra é algumas vezes usado para
propósitos específicos, dependendo da aplicação. Por exemplo, algumas impressoras
reconhecem um ASCII estendido, com os caracteres adicionais iniciando pelo bit mais
significativo a 1. Estes caracteres habilitam a impressora a imprimir símbolos adicionais,
como o alfabeto grego ou fontes do tipo itálico.
13 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

2.5.3 EBCDIC
O EBCDIC (Extended Binary Coded Decimal Interchange Code) é uma codagem de
caracteres de 8 bits (2.5.3) e se trata de um padrão proprietário desenvolvido pela IBM.

Φιγυρα 22.Código EBCDIC de 8 bits.

O significados dos caracteres de controle do EBCDIC são:

2.5.4 ASCII Estendido


É um conjunto de códigos que estende o conjunto ASCII básico. Os caracteres ASCII
estendido usam 8 bits para representar os caracteres. Os caracteres extras representam
caracteres de línguas mortas e caracteres especiais para desenhas figures. Veja estes
caracteres na figura abaixo.
14 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Φιγυρα 23.Caracteres ASCII estendidos

2.5.5IS O Latin-1
ISO Latin-1 é uma codificação de caracteres padronizada pela Organização Internacional
de Padronização (ISO), que recebe o código ISO 8859-1. Ele é um conjunto de
caracteres ASCII estendido e é muito similar aos caracteres ANSI usado pelo Windows,
embora os dois não sejam idênticos. A linguagem HTML (Hypertext Meta Language)
adota também esta representação de caracteres.
A figura abaixo apresenta os caracteres ISO Latin-1, com os caracteres adicionais
propostos pelo Microsoft® Windows Latin-1 Added Characters (em claro).

Φιγυρα 24.Caracteres ISO Latin-1

2.5.6 Caracteres ANSI


O Windows 9x suporta o conjunto de caracteres ANSI (American National Standards
Institute), que é uma representação de 8 bits (256 caracteres), numerados de 0 a 255.
Os valores de 0 a 127 são os mesmos dos caracteres ASCII. Valores entre 128 a 255
são similares ao conjunto de caracteres ISO Latin-1, mas naturalmente tem extensões e
incompatibilidades.
15 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

2.5.7 Caracteres Unicode


Windows NT usa o conjunto de caracteres Unicode 16-bits, que cobre grande parte dos
caracteres das maiores línguas vivas, incluindo também caracteres de linguagens mortas
que tem muito uso escolar. Veja detalhes em http://www.unicode.org.

2.6 Representação Interna de Números


Esta seção apresenta estas diversas formas de representação interna de números.

2.6.1 Representação de Números Inteiros


Para representar números positivos, utiliza-se normalmente o valor do próprio número
binário. Por exemplo, o número 6 é representado por 0101 e o número 12 é
representado por 1100.
Existem quatro maneiras de se representar números negativos: módulo e sinal (MS);
complemento de 1 (C-1), complemento de 2 (C-2) e excesso de 2 elevado a (N-1)
Nessas representações de números utiliza-se o sistema binário e considera-se que
temos um número limitado de bits para cada dado numérico. Esse número de bits
disponíveis é representado nesta seção por N.

Módulo e Sinal (MS)


Neste sistema de representação, o bit que está situado mais à esquerda representa o
sinal, e o seu valor será 0 para o sinal + e um para o sinal -. Os bits restantes (N-1)
representam o módulo do número. Por exemplo, supondo que exista a limitação de 8 bits
(N=8), o valor 00101010 representa o número +42 e o valor 10101010 representa o
número -42.
Denomina-se amplitude ou faixa (range) de representação num determinado método o
conjunto de números que podem ser nele representados. Para o sistema módulo e sinal,
a faixa de representação para N dígitos é de -2N-1+1 ≤ X ≤ 2N-1-1. Assim:
 Para o caso de 8 bits (byte), a faixa é: -127 ≤ X ≤ 127
 Para 16 bits (word), a faixa é: -32767 ≤ X ≤ 32767
 Para 32 bits (double word), a faixa é: -2147483647 ≤ X ≤ 2147483647
A vantagem deste sistema em relação a outros é a de possuir faixa simétrica. Por outro
lado, apresenta a inconveniência de possuir duas representações para o número 0. Para
8 bits o 0 tem as seguintes representações: 00000000 (+0) e 1000000 (-0).

Complemento de 1 (C-1)
Este sistema de representação também utiliza o bit mais à esquerda para o sinal,
correspondendo o 0 ao sinal + e o 1 ao sinal -. Para os números positivos, os N - 1 bits
da direita representam o módulo (assim como no MS). O simétrico de um número
positivo é obtido pelo complemento de todos os seus dígitos (trocando 0 por 1 e vice-
versa), incluindo o bit de sinal. Por exemplo, supondo que exista a limitação de 8 bits
(N=8 ), o valor 00101010 representa o número +42 e o valor 11010101 representa o
número -42.
Este método tem a mesma faixa de representação para N dígitos do método MC, que é
de -2N-1+1 ≤ X ≤ 2N-1-1. E tem a mesma desvantagem do anterior, que é de ter duas
representações para o número 0: 00000000 (+0) e 11111111 (-0).

Complemento de 2 (C-2)
Este sistema também utiliza o bit mais à esquerda para o sinal, correspondendo o 0 ao
sinal + e o 1 ao sinal -. Para os números positivos, os N-1 dígitos da direita representam
o módulo (igualmente ao MS e C-1). O simétrico de um número é obtido em dois passos:
16 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 Primeiro passo: Obtém-se o complemento de todos os bits do número positivo (trocando 0 por
1 e vice-versa) incluindo o bit do sinal, isto é, executa-se o Complemento de 1.
 Segundo passo: Ao resultado obtido no primeiro passo soma-se 1 (em binário), desprezando-
se o último transporte, se existir.
Vejamos a representação em Complemento de 2 dos números 10 e -10 para 8 bits:

A faixa de representação neste caso é assimétrica, o que constitui o seu maior


inconveniente, e é dada pela fórmula -2N-1 ≤ X ≤ 2N-1-1
 Para o caso de 8 bits (byte), a faixa é: -128 ≤ X ≤ 127
 Para 16 bits (word), a faixa é: -32768 ≤ X ≤ 32767
 Para 32 bits (double word), a faixa é: -2147483648 ≤ X ≤ 2147483647
A principal vantagem é ter uma única representação para o número 0. Para 8 bits,
teremos:

O último transporte é desprezado. Portanto, o 0 e o -0 têm uma mesma representação.


O método C-2 é o mais utilizado para representar números negativos.

Excesso de 2 elevado a (N-1)


O método de representação em excesso não utiliza nenhum bit para o sinal, de modo
que todos os bits representam um módulo ou valor. Esse valor corresponde ao número
representado mais um excesso, que para N bits é igual a 2 elevado a N-1. Por exemplo,
para 8 bits o excesso é 128 ( 27 = 128 ), logo, o número 10 é representado por 10+128 =
138 (10001010). O número -10 é representado por -10+128 = 118 (01110110). Neste
método, o número 0 tem uma única representação, que para 8 bits corresponde a: 0+128
= 128 (10000000)
A faixa de representação é assimétrica (o que é um inconveniente) e é dada da mesma
forma que o método C-2: -2N-1 ≤ X ≤ 2N-1-1
É interessante observar que todo o número representado em excesso é igual à sua
correspondente representação em Complemento de 2, exceto que o bit de sinal é
invertido.

2.6.2 Vírgula fixa (Fixed Point)


Este nome vem da posição em que se supõe estar situado o ponto decimal, que é uma
posição fixa. A vírgula fixa é hoje utilizada exclusivamente para a representação de
números inteiros, supondo-se a vírgula decimal implicitamente situada à direita dos
dígitos.
17 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Existem quatro maneiras de representar números com vírgula fixa: binário puro, decimal,
decimal não compactado, decimal compactado.

Binário Puro
O número é representado através dos métodos vistos anteriormente. Por exemplo,
considerando um computador com palavra de 32 bits que utiliza o método Complemento
de 2 (C-2), qual é a sua faixa de representação e qual a configuração interna dos
números 0, 10, -10, 2147483647 e -2147483648?
 A faixa de representação é: -231≤X≤231-1, ou então: -2147483648≤X≤2147483647.
 Representação de 0: 00000000000000000000000000000000
 Representação de 10: 00000000000000000000000000001010
 Representação de -10: 11111111111111111111111111110110
 Representação de 2147483647: 01111111111111111111111111111111
 Representação de -2147483648: 10000000000000000000000000000001
Decimal não Compactado
Neste sistema um número é armazenado com um byte para cada um de seus
algarismos. Cada byte contém no seu quarteto da esquerda quatro 1's denominados bits
de zona, e no quarteto da direita, o algarismo em BCD (Binary-coded display - codificado
em binário ), que é um número entre 0 e 9. Esses quatro bits são denominados bits de
dígito. O quarteto da esquerda do último algarismo do número dado representa o sinal, e
pode conter 1100 para o sinal + e 1101 para o sinal - (C e D em hexadecimal,
respectivamente).
Por exemplo, a representação do número 1234 é 11110001 11110010 11110011
11000100, e a representação do número -2345 é 11110010 11110011 11110100
11010101.

Decimal Compactado
Cada dígito é representado num quarteto (sem bits de zona), exceto o primeiro quarteto
da direita que representa o sinal com os mesmos valores (C e D).
Por exemplo, a representação do número 1234 é 00000001 00100011 11000100, e a
representação do número -2345 é 00000010 00110100 11010101.

2.6.3 Ponto Flutuante


Uma vez que número de bits que representa um número real é limitado, os números
reais sofrem truncamento na sua parte fracionária. É importante lembrar de que, por
utilizar a vírgula flutuante, nem todos os números têm representação, razão pela qual
estes números são representados de forma aproximada, acarretando pequenos erros de
representação.
Números de ponto flutuante tem duas partes. A primeira parte contem a fração (algumas
vezes chamada de mantissa) e a segunda parte define a posição do ponto decimal e é
chamada de expoente. Por exemplo, o número decimal +6132,789 é representado em
ponto flutuante como:
 Fração: +.6132789
 Expoente: +04
O valor do expoente indica que a posição real do ponto decimal é quatro pontos a direita
do ponto decimal indicado na fração. Esta representação é equivalente a notação
científica: +.6132789 x 10+4.
Generalizando, os números decimais ponto flutuante são representados na forma Fx10 E,
onde F é a fração e E o expoente. Apenas a fração e o expoente são fisicamente
representados em termos computacionais. A base 10 e o ponto decimal da fração são
assumidos e não são mostrados explicitamente. Um número binário ponto flutuante é
representado de uma maneira similar, exceto que ele usa a base 2 para o expoente. Por
18 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

exemplo, o número binário +1001.11 é representado por uma fração de 8 bits


(01001110) e um expoente de 6 bits (000100).
Um número ponto flutuante é dito normalizado se o dígito mais significativo da fração não
é zero. Por exemplo, a fração decimal 0.350 é normalizada, mas 0.0035 não é. Números
normalizados fornecem a melhor precisão para números ponto flutuante.
O intervalo representado por um ponto flutuante é determinado pelo número de dígitos
do expoente e a precisão pelo número de dígitos da fração. Para estudar as
propriedades deste método de representação de números, considere uma representação
R, que comporta uma fração sinalizada de três dígitos no intervalo 0,1≤|f|≤1 (ou zero) e
um expoente sinalizado de dois dígitos. Esta representação permite expressar números
nas seguintes regiões
 Números negativos entre -0,999*10+99 até -0,1*10-99.
 Números positivos entre +0,100*10-99 até +0,999*10+99.
 Zero
Os números fora desta faixa não podem ser representados.
Os números em vírgula flutuante expressos segundo a representação R podem ser
utilizados para modelizar os números reais da matemática, mas ele impõem alguns
problemas: os números reais fora das faixas apresentadas acima não podem ser
representados. Se por exemplo a soma de dois números positivos ultrapassar a
+0,999*10+99, tem-se o que se chama de overflow (ultrapassagem do valor superior).
Este erro é devido a natureza finita dos computadores. No caso de se somar dois
números negativos e o resultado ultrapassar -0,999*10+99, tem-se o que é chamado de
underflow.
Uma outra diferença importante entre os reais e os ponto flutuante é sua densidade.
Entre dois números reais distintos, x e y, existe sempre um outro número real, tão
próximo que sejam x e y. Esta propriedade vem do fato que para todo par de números
reais distintos x e y, z=(x+y)/2 é um número real, de valor intermediário entre x e y. Os
números reais formam uma continuidade. Ao contrário, os números em vírgula flutuante
não formam uma continuidade; no caso da representação R acima, não se pode
expressar mais que 179100 números positivos diferentes, 179100 números negativos e
0, ou seja ao total 358201 números. Por exemplo, +0,100*103 dividido por 3 não pode ser
expresso exatamente no nosso sistema de representação. Nós tomamos o número mais
próximo que se pode representar: é realizado o arredondamento.

Normalização de um ponto flutuante


Seja a representação do número 432, na exponenciação em base 2, expresso sob a
forma : 0 1010100 | 0000000000011011. Sendo o primeiro bit representando o sinal (+)
da fração, os 7 bits seguinte representam o expoente codificado em excedente a 64 (84-
64=20), e os 16 bits seguintes representando a fração. Observe que o valor da fração é
dado por 0x2-1+0x2-2+0x2-3+0x2-4+0x2-5+0x2-6+0x2-7+0x2-8+0x2-9+0x2-10+0x2-11+1x2-12+1x2-
13
+0x2-14+1x2-15+1x2-16. Portanto, o número 432 é expresso como 220x(1x2-12+1x2-13+1x2-
15
+1x2-16) = 432.
Para normalizar o número acima, deve-se deslocar a fração 11 bits a esquerda e se
subtrai 11 do expoente. Assim obtém-se a seguinte representação 0 1001001 |
1101100000000000.

A representação ponto flutuante: IEEE 754


Até o início dos anos 80, cada computador tinha sua própria forma de representação de
números de ponto flutuante. Para eliminar esta situação, um comitê da IEEE (Institute of
Electrical and Electronics Engineers) foi criado para definir um padrão para os cálculos
aritméticos ponto flutuante. Sua meta não era somente permitir a troca de números entre
computadores diferentes, mas sobretudo oferecer um modelo funcional preciso aos
construtores de computadores. Os resultado destes trabalhos conduziram ao padrão
IEEE 754.
19 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

O padrão IEEE define três formas de representação de ponto flutuante: a precisão


simples (32 bits), precisão dupla (64 bits) e a precisão estendida (80 bits). Este último
formato é destinado sobretudo para reduzir os erros de arredondamento em cálculos;
eles são encontrados principalmente nas unidades de cálculo flutuante. O processador
Pentium III suporta estes três precisões. Os formatos de simples e dupla precisão
utilizam o binário para codificar a fração e o expoente. Eles são representados na 2.6.3.

1 8 23

(a)

sinal Expoente Fração

(b)
1 11 52

Φιγυρα 25.Formato dos números flutuante segundo o padrão IEEE: (a) Precisão simples
(b) Precisão dupla
Como para todos os números, cada formato começa com um bit de sinal, que vale 0 para
os números positivos e 1 para os números negativos. Em seguida vem o expoente,
codificado em excedente a 127 para a precisão simples e em excedente a 1023 para a
precisão dupla. Os expoentes variam de 0 a 255 ou 2047. Os números tendo como
expoente os valores mínimos ou máximos acima tem uma especificidade própria e não
são normalizado como os outros. Isto será visto mais adiante. Enfim, o último
componente do formato, a fração, é codificada em binário de 23 ou 52 bits.
Uma fração é dita normalizada quando o primeiro bit que segue a vírgula vale 1.
Considerando que o primeiro bit da fração é sempre igual a 1, o padrão define uma
fração cuja significação difere um pouco das frações habituais: uma fração IEEE
compreende um bit pressuposto a 1, que se chama bit escondido, após 23 ou 52 bits de
valor. A vírgula também é implícita. O valor numérico da fração, para a precisão simples,
é calculado da seguinte forma: 1x20 + b22x2-1 + b21x2-2 + b20x2-3 + b19x2-4 +b18x2-5+b17x2-6+
b16x2-7 + b15x2-8 + b14x2-9 + b13x2-10 + b12x2-11 + b11x2-12 + b10x2-13 + b9x2-14+b8x2-15+b7x2-16+
b6x2-17 + b5x2-18 + b4x2-19 + b30x2-20 + b2x2-21 + b1x2-22 + b0x2-22. Assim, os números reais
associados aos pontos flutuantes de precisão simples são calculados da seguinte
maneira: (-1)S x 2(E - 127) x (1,F).
Quando todos os bits são 0, seu valor decimal é igual a 1,0. Se todos os bits são a 1, o
valor da fração é igual a 2,0. Para evitar ambigüidade entre os formatos convencionais
de representação de fração, no padrão IEEE diz-se pseudo-fração e não fração. Assim,
os números normalizados tem uma pseudo-fração variando em 1≤s≤2.
Alguns exemplos de números flutuantes na precisão simples são apresentados abaixo:
 0,5 = (-1)0 x 2-1 x (1,0) = 0,5x1
− sinal: 0
− expoente: 127-1 = 126 = 01111110
− fração: 1 = 1 00000000000000000000000 (primeiro 1 é implícito)
− 0,5 =00111111000000000000000000000000
− 0,5 = 3F0000000H
 1 = (-1) x 2 x (1,0) = 1x20
0 0

− sinal: 0
− expoente: 127+0 = 127 = 01111111
− fração: 1 = 1 00000000000000000000000 (primeiro 1 é implícito)
− 1 =00111111100000000000000000000000
− 1 = 3F8000000H
 -1,5 = 1x2 = (-1)1 x 20 x (1,5)
0
20 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

− sinal: 1
− expoente: 127+0 = 127 = 01111111
− fração: 1 = 1 10000000000000000000000 (primeiro 1 é implícito)
− -1,5 =10111111110000000000000000000000
− -1,5 = BFC000000H
Características dos números flutuantes IEEE 754
As características dos números flutuantes representados segundo o padrão IEEE são
apresentados na tabela abaixo.
Precisão simples Precisão dupla
Bit de sinal 1 1
Bit do expoente 8 11
Bit da fração 23 52
Número total de bits 32 64
Codagem do expoente Excesso de 127 Excesso de 1023
Variação do expoente -126 a +127 -1022 a +1023
Menor número normalizado 2-126 2-1022
Maior número normalizado Aprox. 2+128 Aprox. 2+1024
Escala de número decimais Aprox. 10-38 a 10+38 Aprox. 10-308 a 10+308
Menor número não normalizado Aprox. 10-45 Aprox. 10-324
Underflow
O que fazer quando o resultado de um cálculo é inferior ao menor número ponto
flutuante normalizado que se pode representar? Existem duas soluções:
 dizer que o número vale zero (arredondamento), sem outra indicação
 gerar um desvio para causar uma ultrapassagem da borda inferior (underflow)
Nenhuma das abordagens acima é satisfatória. É por isso que o conceito de número não
normalizado aparece no padrão IEEE. Os números não normalizados tem seus
expoentes iguais a zero e a fração não é mais normalizada. Isto significa que não há
mais o bit implícito a 1. A fração é codificada unicamente sobre 23 ou 52 bits, ela evolui
então de 0 a 1 (e não de 1 a 2 como na pseudo-fração).
O menor número que se pode representar em precisão simples tem um expoente igual a
1 e a fração constituída de zeros, isto é o número 1,0*2-126. O maior número não
normalizado tem seu expoente que todo a zero (-127), e todos os bits da fração iguais a
1, isto é o número 0,9999999*2-127. O menor número não normalizado tem uma fração
em precisão simples com 22 bits a zero e um bit a 1, o mais a direita. Neste caso, o
expoente representa 2-127 e a fração 2-23, que corresponde ao número 2-150. É assim que
os números não normalizados existem afim de permitir uma ultrapassagem gradual para
baixo para as operações produzindo resultados inferiores ao menor número normalizado,
em vez de substituí-los por zero.

Representação do zero
Na representação IEEE existem duas representações para o zero: +0 e -0. Seus bits de
sinal valem 0 ou 1. Seus expoentes valem 0 e todos os bits da fração são iguais a zero.
Assim, na precisão simples, o valor zero corresponde a :
 0 00000000 00000000000000000000000
 1 00000000 00000000000000000000000
Overflow
As ultrapassagens de borda a esquerda são difíceis de serem geradas e não há
nenhuma combinação particular de bits para representá-los. Uma representação
específica é reservada ao valor do maior número possível que se possa representar. Diz-
se que é infinito. O expoente deste número é composto de bits a 1, sua fração é
composta de bits a zero. Ou seja, o infinito é representado por
21 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

0 ou 1 11111111 00000000000000000000000
Este número particular pode ser visto como um operando sobre o qual se aplicam o
conjunto de regras de cálculo sobre os grandes números (ou números infinitos). Por
exemplo, a soma de um número infinito com um número qualquer resulta em infinito. Da
mesma maneira, a divisão de um número finito pelo infinito resulta em zero e a divisão
de um número finito por zero resulta infinito.
O que se pode dizer da divisão de um número infinito por um número infinito? Neste
caso o resultado é indefinido. Uma representação particular foi definida para isto: NaN
(Not a Number), que é igual a
0 ou 1 11111111 Toda configuração menos todos a zero

2.7Representação Digital de Áudio, Imagem e Vídeo


Esta seção apresenta como imagens, áudios e vídeos são capturados do mundo real a
partir de sinais analógicos e como estes sinais são transformados numa forma digital.

2.7.1 Sinais Analógicos para representar informações


Esta seção apresenta uma introdução às formas de onda e sinais analógicos e seus uso
na descrição de informações detectadas pelos sentidos humanos.

Informações percebidas e variáveis físicas


Informações que os sentidos humanos podem detectar podem ser descritas como uma
ou várias variáveis físicas cujos valores podem ser funções do tempo e do espaço. Note
que por informações é entendido aqui como a representação física em termos de
estímulos para um sentido humano, e não o conteúdo semântico, que é o significado
deste estímulo.

Descrevendo sons com formas de onda


Um som, que atravessa o ar, é uma onda de ar comprimido ou expandido cuja pressão
altera no tempo e espaço. Na posição de um locutor ou de um detector, os sons podem
ser descritos por valores de pressão que variam apenas com no tempo (valores
dependentes do tempo). O padrão de oscilação, como mostrado na 2.7.1, é chamado de
forma de onda (waveform). A forma de onda é caracterizado por um período e
amplitude. O período é o tempo necessário para a realização de um ciclo; intervalo de
tempo que, num fenômeno periódico, separa a passagem do sistema por dois estados
idênticos. A freqüência é definida como o inverso do período e representa o número de
períodos em um segundo. A freqüência é normalmente medida em Hz (Hertz) ou ciclos
por segundo (cps). A amplitude do som é define um som leve ou pesado.

Pressão
de ar
Amplit ude

t empo

P eríodo

Φιγυρα 26.Forma de onda


Como a onda de som ocorre naturalmente, ela nunca é perfeitamente suave ou
uniformemente periódica como a forma de onda da 2.7.1.
22 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Descrevendo imagens monocromáticas com variáveis físicas


As imagens refletem radiações eletromagnéticas (luz) incidentes que estimulam os olhos
do observador. A intensidade de luz é uma função da posição espacial do ponto refletido
sob a imagem. Portanto, a imagem pode ser descrita pelo valor da intensidade de luz
que é uma função de duas coordenadas espaciais. Se a cena observada não foi plana,
uma terceira coordenada espacial é necessária.

Descrevendo imagens coloridas com formas de onda


Se a imagem não é monocromática, ela reflete diferentes comprimentos de onda. Assim
uma função simples não é suficiente para descrever imagens coloridas, mas um espectro
completo de comprimento de onda refletida, cada um com sua própria intensidade, é
necessário. Assim as imagens teriam que ser descritas pela conjunção de várias funções
bidimensionais. Felizmente, o sistema visual humano tem certas propriedades que
simplificam a descrição de imagens coloridas.
A Luz que consiste em uma distribuição espectral de intensidade estimula o sistema
visual e cria uma resposta. A resposta nos olhos depende da sensibilidade do sistema
visual aos comprimentos de onda. Testes realizados mostram que diferentes
distribuições espectrais da luz pode dar a mesma resposta visual. Em outras palavras, é
possível criar sensações de cores idênticas com diferentes combinações de
comprimentos de onda (isto é diferentes combinações de cores).
A teoria da cor foi desenvolvida por Thomas Young no início de 1802 e afirma que
qualquer sensação de cor pode ser reproduzida pela mistura em proporções apropriadas
de três luzes coloridas monocromáticas primárias. Cores primárias são independentes
no sentido que uma cor primária não pode ser obtida misturando outras duas cores
primárias. A Commission Internationale de l’Eclairage (CIE) recomendou o uso de uma
tripla particular de luz monocromática. Cada fonte de luz é definida pelo seu
comprimento de onda (λ1 = 70 nm, vermelho; λ 2 = 546.1 nm, verde; λ3 = 435.8 nm,
azul). Em vez de ser descrita por uma infinidade de funções bidimensionais, qualquer
imagem colorida plana pode ser representada por um conjunto de três funções
bidimensionais.

2.7.2 Porque Digitalizar?


A utilização de informações na forma digital trás as várias vantagens.

Universalidade de representação
Sistemas computacionais manipulam apenas dados digitais. Quando áudio, imagens,
vídeos estão na forma digital, eles podem ser facilmente armazenados e manipulados
(processados, transmitidos e apresentados) pelos sistemas computacionais tal qual
outros dados. Desta forma, como todas as mídias de apresentação (textos, imagens,
som, etc.) são codificadas numa única forma, elas podem ser manipuladas de uma
mesma forma e pelo mesmo tipo de equipamento. Além disso, informações de áudio e
vídeo digitalizadas são facilmente integradas com outros tipos de dados e são de fácil
interação com mídia digitais usando sistemas computacionais.

Processamento
Informações de áudio e vídeo digitais são processadas, analisadas, modificadas,
alteradas, ou complementadas por programas de computador tal qual outros dados. A
seguir são apresentados alguns exemplos de processamentos possíveis graças a
representação digital de informações de áudio e vídeo [Fluckiger, 95]:
 reconhecimento de conteúdos semânticos (voz, escrita a mão, formas e padrões);
 estruturas de dados, ligações usando apontadores entre elementos de informações podem ser
criados para rápida obtenção de informações;
 editores poderosos com funções cut-and-paste para criar monomídia (p.e. som apenas) ou
documentos multimídia são possíveis;
23 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 qualidade da informação pode ser aumentada pela remoção de ruídos ou erros como a
digitalização de velhos discos de vinil para criar CD’s de alta qualidade;
 informações sintetizadas e vídeos podem ser mixadas
Qualidade
Sistemas digitais são mais confiáveis. Sinais digitais são mais tolerantes a ruídos e
interferências que os analógicos. Na forma analógica, o valor do sinal é alterado se há
ruídos ou interferências. Este erro é acumulativo de um estágio para outro do sistema.
Na forma digital, há apenas dois níveis de sinal: alto (1) ou baixo (0). Se o erro causado
pela interferência ou ruído é abaixo de um certo limiar, o sinal pode ser reconhecido
corretamente. Além disso, em cada estado do processamento digital ou transmissão, o
sinal digital são reconstruídos, assim erros não são acumulativos.

Segurança
Se segurança na comunicação é necessária, a representação digital da informação
facilita a criptografia.

Armazenamento
A utilização unicamente de mídias digitais permite a existência de um dispositivo único
de armazenamento de dados para todas as mídias, sendo que diferenças podem estar
ligadas a requisitos de tamanho. Imagens e vídeos necessitam de uma maior
capacidade de armazenamento que textos ou gráficos. Som necessita de uma
capacidade de armazenamento um pouco menor que imagens.
Dispositivos digitais apropriados podem ser necessários, tal como CD-ROMs (Compact
Disk-Read Only Memories).

Transmissão
Qualquer sistema de comunicação de dados podem ser (potencialmente) utilizado para a
transmissão de informações de áudio e vídeo digitais. Uma única rede de comunicação
suportando a transmissão digital das informações multimídia é possível (Rede Digital de
Serviços Integrados). A este nível existem dificuldades causados pelos requisitos de
certas aplicações, em particular aquelas que necessitam o respeito da fidelidade de
dependências temporais dos sinais digitais.
A vantagem da transmissão digital em relação a transmissão de sinais analógicos é que
ela é menos sensíveis a ruídos, a detecção de erros, recobrimentos e a criptografia são
facilitadas.

2.7.3 Digitalização, Amostragem e Quantificação


Esta seção apresenta a forma de digitalização dos vários tipos de mídias de
apresentação. Digitalização aqui é o processo envolvido na transformação de sinais
analógicos em sinais digitais:
 Sinal analógico é uma medida física que varia continuamente com o tempo e/ou espaço. Eles
são descritos por uma função dependente apenas do tempo (s=f(t)), dependente apenas do
espaço (s=f(x,y,z)), ou dependente do tempo e do espaço (s=f(x,y,z,t)). Sinais analógicos são
produzidos por sensores que detectam fenômenos físicos (que simulam os sensos humanos)
e os transformam em uma medida que toma a forma de uma corrente ou tensão elétrica. A
precisão é ditada pelas características dos sensores.
 Sinais digitais são seqüências de valores dependentes do tempo ou do espaço codificados
no formato binário.

Para a conversão de sinais analógico em digital é necessário a realização de três


passos: amostragem, quantificação e codificação. A figura 1 ilustra o processo de
digitalização de um sinal analógico no domínio do tempo.
24 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Amostragem
Nesta etapa um conjunto discreto de valores analógicos é amostrado em intervalos
temporais (p.e., para sons) ou espaciais (p.e., para imagens) de periodicidade constante,
como apresentado na figura 1a. A freqüência de relógio é chamado de taxa de
amostragem ou freqüência de amostragem. O valor amostrado é mantido constante até o
próximo intervalo. Isto é realizado através de circuitos sampling and hold. Cada uma das
amostras é analógica em amplitude: ele tem qualquer valor em um domínio contínuo.
Mas isto é discreto no tempo: dentro de cada intervalo, a amostra tem apenas um valor.
Segundo o teorema de Nyquist: se um sinal analógico contem componentes de
freqüência até f Hz, a taxa de amostragem deve ser ao menos 2f Hz. Na prática, esta
freqüência é um pouco maior que 2f Hz. Por exemplo, a taxa de amostragem de CD-
audio é de 44,1 kHz, e dos tapes de áudio digital (DAT) é de 48kHz para cobrir uma faixa
audível de freqüência de 20 kHz. Outro exemplo, os componentes principais de
freqüência da voz humana estão dentro de 3,1 kHz, com isto os sistemas de telefonia
analógicos limitam o sinal transmitido a 3.1 kHz; é comum usar uma freqüência de
amostragem de 8 kHz para converter este sinal em digital.

Quantificação
O processo de converter valores de amostras contínuas em valores discretos é chamado
de quantificação. Neste processo nós dividimos o domínio do sinal em um número fixo
de intervalos. Cada intervalo tem o mesmo tamanho e recebe um número. Na figura 1c
estes intervalos são numerados de 0 a 7. A cada amostra dentro de um intervalo é
atribuído o valor do intervalo. O tamanho deste intervalo de quantificação é chamado de
passo de quantificação. A técnica que utiliza o mesmo passo de quantificação é
chamada modulação PCM (Pulse Coded Modulation). Algumas vezes, nem todos os
valores amostrados são retidos após a quantificação. No caso ilustrado pela figura 1c,
todos os valores amostrados foram retidos.

Amplit ude

(a)

T em po

(b)
T em po

7
6
5
(c) 4
3
2
1
0
T em po
(d) 010 110 110 010 011 110 111 110 100

Φιγυρα 27. Conversão A/D [Lu, 96]: (a) sinal analógico; (b) pulsos de amostragem; (c) valores amostrados
e intervalos de quantificação; (d) seqüência digital

Codificação
A codificação consistem em associar um conjunto de dígitos binários, chamado de code-
word, a cada valor quantificado. No caso da figura 1d, oito níveis de quantificação são
usados. Estes níveis podem ser codificados usando 3 bits, assim cada amostra é
representada por 3 bits.
25 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Em algumas aplicações de telefonia, a digitalização da voz humana utiliza 16 bits por


amostra, que então leva a 216 ou 65.536 passos de quantificação. Em outras aplicações
de compressão de voz, algumas vezes, apenas 8 quantificações por bits são
necessários, produzindo apenas 256 passos de quantificação.

Taxa de bits
Taxa de bits é definida como o produto entre taxa de amostragem e o número de bits
usados no processo de quantificação. Por exemplo, supondo uma freqüência de 8k Hz e
8 bits por amostra, a taxa de bits necessária à telefonia é igual a 8000x8 = 64 kbps.

Conversão analógica/digital e digital/analógica


Em sistemas computacionais, geralmente todas as informações são representadas
internamente no formato digital. Mas humanos reagem a estímulos sensoriais físicos,
assim a conversão digital-para-analógico (ou conversão D/A) é necessária na
apresentação de certas informações (figura 2).

(011001101. .. )
Conversor Conversor
A/D D/A

Sinal Analógico Sinal Digital Sinal Analógico

Φιγυρα 28. Conversão analógico/digital e digital/analógica

2.7.4 Áudio
Áudio é causado pelo distúrbio da pressão de ar que alcança o
tímpano. Quando a freqüência do distúrbio de ar está na faixa
de 20 Hz a 20.000 Hz ele é audível. A maioria dos sistemas
trabalham com esta faixa de freqüência. Outro parâmetro
usado para a medição do som é a amplitude (medido em
decibéis - dB), variação que causa o som leve ou pesado. Por
exemplo, o limiar da dor é de 100 a 120 dB.
A onda sonora é uma onda contínua no tempo e amplitude. A onda apresentada na 2.7.1
pode ser um exemplo de onda sonora.

Representação digital de áudio


A forma de onda de áudio é convertida em um sinal elétrico
contínuo (analógico) por um microfone. Este sinal elétrico é
medido normalmente em volts. Para que sistemas
computacionais processem e comuniquem sinais de áudio, o
sinal elétrico deve ser convertido em um sinal digital. Este
processo de conversão de um sinal analógico em digital foi
apresentado na seção 2.7.3. O mecanismo que converte o
sinal de áudio digital em analógico é chamado de Conversor
Analógico para Digital (CAD).
Áudio digital necessita ser amostrado continuamente em uma taxa fixa. Cada amostra é
representada por um número fixo de bits. A tabela abaixo mostra a taxa de amostragem
e o número de bits usados para cada amostra para várias aplicações de áudio.
Relembrando, quanto maior a taxa de amostragem e maior o número de bits por
amostragem, maior é a qualidade do áudio restituído, mas com isso maior é a taxa de
bits. Note na tabela que para áudio estéreo, tal como CD-Audio, dois canais são
necessários.
Aplicações No de Taxa de Bits por Taxa de bits
canais amostragem amostragem
CD-Audio 2 44.1 kHz 16 1,41 Mbps
DAT 2 48 kHz 16 1,53 Mbps
Telefone Digital 1 8 kHz 8 64 Kbps
Rádio digital, long play DAT 2 32 KHz 16 1,02 Mbps
26 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Para a apresentação do áudio digitalizado é necessário realizar a transformação de uma


representação artificial do som em uma forma de onda física
audível pelo ouvido humano. Para isto são utilizados
Conversores Digital para Analógico (CDA).
Normalmente os conversores CAD e CDA são
implementados em uma única placa. Um exemplo de placa
de audio é Creative Sound Blaster AWE64, possibilitando até
16 bits por amostras, produzindo áudio qualidade CD.

2.7.5 Vídeos e Imagens Analógicos


Captura e reprodução de imagens e vídeos analógicos
As imagens são capturadas usando câmeras da seguinte maneira: as lentes da câmera
focam uma imagem de uma cena em uma
superfície foto-sensível de sensores CCD
(Charge-Coupled Device); o brilho de cada
ponto é convertido em uma carga elétrica por
uma camada foto-sensível, estas cargas são
proporcionais ao brilho nos pontos; a
superfície foto-sensível é rastreada por um
feixe de elétrons para capturar as cargas
elétricas, devendo ser feito rapidamente antes que a cena mude. Desta maneira a
imagem ou cena é convertida em um sinal elétrico contínuo.
Nesta seção, por simplificação assume-se a captura e reprodução de vídeos
monocromáticos, onde apenas um sinal de luminância é produzido (apenas a
luminosidade é capturada, temos a imagem em tons de cinza). Neste caso são usadas
câmeras de Luminância, que captam a imagem em tons de cinza, e gera um sinal só
com a luminância da imagem. A imagem é gerada por um CCD monocromático que
capta o tom de cinza que incide em cada célula do circuito. Este tipo de câmera é
utilizada em geral para aplicações em visão computacional e nos casos onde a
informação sobre a luminosidade da imagem é suficiente.
O dispositivo de apresentação de imagens mais utilizado é o tubo de raios catódicos
(CRT). Eles são usados nos aparelhos de TV e monitores de computadores. Há uma
camada de fósforo fluorescente no interior do CRT. Esta camada é rastreada por um
feixe de elétrons na mesma forma do processo de captura na câmera. Quando o feixe
toca o fósforo ele emite luz durante um curto instante. O brilho da luz depende da força
do feixe. Quando quadros repetem-se suficientemente rápidos a persistência da visão
resulta na reprodução de um vídeo. Em implementação prática, o sinal elétrico enviado
da câmera para o dispositivo de apresentação deve conter informações adicionais para
assegurar que o rastreamento esteja sincronizado com o rastreamento do sensor na
câmera. Esta informação é chamada sync information.

Vídeos e Imagens Coloridos


Nesta seção é discutido a captura e a reprodução de imagens e vídeos coloridos.
Todos os sistemas de TV a cores são baseados na teoria Tristimulus de reprodução da
cor. Esta teoria afirma que qualquer cor pode ser reproduzida com a mistura das três
cores primárias: vermelho, verde e azul. Para capturar imagens coloridas, uma câmera
divide a luz nos seus componentes vermelho, verde e azul. Estas três componentes de
cor são focalizados em sensores de vermelho, verde e azul, que convertem estes três
componentes em sinais elétricos separados.
Em um monitor colorido, há 3 tipos de fósforos fluorescentes que emitem luzes vermelha,
verde e azul quando tocadas por 3 feixes de elétrons. Estes fósforos são arranjados de
tal forma que cada posição do vídeo tem 3 tipos de fósforo. A mistura da luz emitida
destes 3 fósforos produz um ponto de cor.
A visão acima descreve o sinal RGB. Na realidade, o sinal analógico pode ser gerado da
seguinte maneira [França Neto, 98]:
27 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

 Sinal RGB (red, green, blue) - O sinal é separado pelas cores básicas, com isso é possível ter
uma imagem mais pura. Ele é utilizado em câmeras e gravadores profissionais, imagens
geradas por computador, etc.
 Sinal de vídeo composto colorido - os sinais das cores (RGB) são codificados em um único
sinal seguindo um determinado padrão (NTSC, PAL-M, SECAM, etc) ;
 Sinal de luminância e crominância ou Y/C (S-video) - o sinal é composto por duas partes, a
luminância e a crominância; como isso a imagem tem uma melhor qualidade do que no vídeo
composto. Muito usado por vídeos SVHS, laser disc, DVD e outros aparelhos que geram
imagens de boa qualidade (acima de 400 linhas);

2.7.6 Representação digital de imagens e vídeos


A seção anterior discutiu muitos conceitos e nomenclaturas de vídeos analógicos. Esta
seção discute a representação digital de imagens e vídeos.

Imagens Digitais
Imagens não são revisáveis porque seu formato não contêm
informações estruturais. Elas podem resultar de capturas do
mundo real (via escaneamento de uma página impressa ou
foto, câmeras digitais) ou elas podem ser sintetizadas pelo
computador (via programas de paint, captura da tela,
conversão de gráficos em imagens bitmap). Após
digitalizadas, as imagens podem ser manipuladas com
editores de imagens (por exemplo, Photoshop), que não
produzem documentos que retém a estrutura semântica.

Formatos de Imagens
Imagens no computador são representadas por bitmaps. Um bitmap é uma matriz
bidimensional espacial de elementos de imagem chamados de pixeis. Um pixel é o
menor elemento de resolução da imagem, ele tem um valor numérico chamado de
amplitude. O número de bits disponíveis para codificar um pixel é chamado de
profundidade de amplitude (ou de pixel). Exemplos típicos de profundidade de pixel é 1
(para imagens preto&branco), 2, 4, 8, 12, 16 ou 24 bits. O valor numérico pode
representar um ponto preto e branco, um nível de cinza, ou atributos de cor (3 valores)
do elemento de imagem em imagens coloridas.
O número de linhas da matriz de pixeis (m) é chamado de resolução vertical da imagem,
e o número de colunas (n) é chamado de resolução horizontal. Denominamos resolução
espacial, ou resolução geométrica, ao produto m x n da resolução vertical pela resolução
horizontal. A resolução espacial estabelece a freqüência de amostragem final da
imagem. Dessa forma, quanto maior a resolução mais detalhe, isto é, altas freqüências,
da imagem podem ser captadas na representação matricial. A resolução espacial dada
em termos absolutos não fornece muita informação sobre a resolução real da imagem
quando realizada em dispositivo físico. Isso ocorre porque ficamos na dependência do
tamanho físico do pixel do dispositivo. Uma medida mais confiável de resolução é dada
pela densidade de resolução da imagem que fornece o número de pixels por unidade
linear de medida. Em geral se utiliza o número de pixels por polegada, ppi ("pixels per
inch") também chamada de dpi ("dots per inch").
Formatos bitmap necessitam mais capacidade de armazenamento do que gráficos e
textos. Como bitmaps ignoram a semântica, duas imagens de mesma dimensão (altura e
largura) ocupam o mesmo espaço. Por exemplo, um quadrado ou uma foto digitalizada
com dimensões idênticas ocupam o mesmo espaço. Os gráficos, como eles consideram
a semântica, ocupam menos espaço.

Imagens e Gráficos Animados


As imagens e os gráficos podem ser apresentados na tela do computador como uma
sucessão de imagens/gráficos que podem criar a sensação de movimento.
28 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Uma imagem ou gráfico individual de uma animação é chamado de quadro (ou frame).
Para ser compreensível, os quadros que compõem a animação devem ser apresentados
geralmente em uma taxa aproximadamente fixa. O número de quadros apresentados por
segundo é definido como freqüência de quadros e é medido em termos de quadros por
segundo (fps – frames per seconds).
A taxa de quadros de uma animação é determinada por 3 fatores:
 A taxa deve ser alta suficiente para produzir a sensação de movimento. Para isto, taxas
maiores ou iguais a 25 fps devem ser utilizadas. A tabela abaixo resume as principais
freqüências de quadro utilizadas atualmente.
Fps Comentários
<10 Apresentação sucessiva de imagens
10 à 16 Impressão de movimento mas com sensação de arrancos
>16 Efeito do movimento começa
24 Cinema
30/25 Padrão de TV americana/européia
60 Padrão HDTV
 Maior a freqüência de quadros utilizada mais alto é a largura de banda necessária à
transmissão. Isto pois maior a taxa, maior é o números de quadros que devem ser enviados.
Portanto a rede utilizada pode ditar a freqüência de quadros a ser utilizada.
 Problema de freqüência de restauração (refreshing) de tela: a tela deve ser restaurada 50
vezes por segundo para evitar tremulações. Mas se a freqüência de quadros for 50 fps, a
largura de banda necessária aumentará substancialmente. Para evitar problemas de
tremulação utiliza-se vídeos entrelaçados, onde reduz-se pela metade o número de quadros
requeridos por segundo, ou seja, 25 fps.
Imagens Bitmap Animadas (Vídeo)
Na animação de imagens, cenas são registradas como um sucessão de quadros
representados por imagens bitmap possivelmente compactadas. Estas imagens podem
ser capturadas da vida real com câmeras ou criadas através do computador. A primeira
técnica produz o que é chamado de vídeo.
Animação de imagens tem as mesmas características que as imagens: falta de uma
descrição semântica e necessidade de uma grande capacidade de armazenamento.

Gráficos Animados
O termo gráfico animado ou animação gráfica é utilizado para referenciar apresentação
sucessiva de objetos visuais gerados pelo computador em uma taxa suficiente para dar a
sensação de movimento e onde cada atualização é comutada de uma descrição abstrata
em tempo de apresentação.
A principal vantagem das animações gráficas é que elas são mais compactas: elas são
descritas por um conjunto de objetos com diretivas temporais (em outras palavras um
programa a ser executado em tempo de apresentação). Outra vantagem é que
animações gráficas são revisáveis. Existe uma desvantagens: é necessário um poder de
processamento suficiente para apresentação.

2.7.7 Especificação da Cor


Esta seção procura apresentar a forma de especificação da cor na representação de
imagens e vídeos digitais.

Propriedades da Cor
A luz visível é uma forma de radiação eletromecânica que tem um espectro de
comprimento de onda variando aproximadamente de 400 nm a 780 nm. Uma luz de
diferente comprimento de onda produz uma sensação de cor diferente (p.e. violeta de
380 a 450 mn, azul de 450 a 490 nm, verde de 490 a 560nm). As três propriedades
físicas básicas da cor são: luminância (brilho), nuança (cor) e saturação (puridade).
29 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

Sistema de especificação de cores


Para comunicar imagens e vídeos coloridos, a cor deve ser especificada usando certo
método. A CIE, Comissão Internacional de Iluminação, é o órgão responsável pela
padronização na área de fotometria e colorimetria. Existem vários padrões de cor
estabelecidos pela CIE, entre eles o CIE-RGB e o CIE-XYZ.

2.7.8 Sistema RGB


No sistema RGB de representação de cor, uma cor é representada pela intensidade de
três cores primárias (teoria Tristimulus): vermelho (Red), verde (Green) e azul (Blue),
com cada valor variando de 0 a 255. Exemplos de cores familiares são apresentadas
abaixo:
 Branco = 255,255,255
 Vermelho = 255,0,0
 Verde = 0,255,0
 Azul = 0,0,255
 Amarelo = 255,255,0
 Preto = 0,0,0
A representação de imagens coloridas pode ser feita através de cores por componente
(true color), cores indexadas, ou cores fixas. Essa representação vai depender do
propósito e dos dispositivos que vão ser usados para trabalhar com essas imagens.

True Color
No True Color, cada pixel da imagem é representado por um vetor de 3 componentes de
cores (RGB) com um certo número de bits para representar cada componente de cor
(resolução de cor). Com isso, quanto maior for a resolução de cor mais qualidade
teremos para representar as cores de cada pixel. Geralmente o número de bits para
cada componente RGB é igual, ou seja quando temos um pixel sendo representado por
9 bits, usamos 3 bits para cada componente (3-3-3). Mas pode ser feito uma
representação com diferentes valores para as componentes, por exemplo uma
representação 8 bits/pixel, pode ser usado 3 para componentes R, 3 para G e 2 para B
(3-3-2), tal representação em um byte é comumente usado e tira proveito do fato que a
percepção humana da componente azul é menos sensível que as outras componentes.
O número de bits para representar cada componente fornece a quantidade de cores que
podem ser representados por essa componente. Ou seja, se n é a resolução de cor
então a quantidade de níveis possíveis é de 2 n níveis. Por exemplo, uma imagem
colorida representada por 12 bits/pixel, com 4 bits para cada componente RGB. Temos
então: 24=16 níveis para cada componente de cor RGB, o que nos possibilita representar
até 4.096 cores diferentes (16 x 16 x 16 = 4.096) , o que é equivalente à 212 = 4.096.

Temos alguns padrões de cores nesse formato que são:


Bits/pixel Padrão Componente de cor Máximo de cores
RGB
15 bits/pixel High Color (15 bits) 5 bits/pixel, 32 níveis por 32.768 cores
componente
16 bits/pixel High Color (16 bits) 5/6 bits/pixel, 32/64 níveis 65.536 cores
por componente
24 bits/pixel True Color, (24 bits) 8 bits/pixel, 256 níveis por 16.777.216 cores
componente
30 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

O padrão com 24 bits/pixel é o mais usado para representar com fidelidade as cores,
pois o número de cores que podem ser representadas com essa resolução de cores é
maior do que a visão humana pode reconhecer.

Cores Indexadas
Nas cores indexadas, cada pixel é representado por um índice que aponta para uma
tabela de cores (paleta) que contem as informações sobre as cores (2.7.8). Temos então
um número de cores que podem ser representadas, que é o número de entradas na
paleta. A paleta por sua vez, tem em geral 24 bits para representar cada cor no formato
RGB. Dessa forma podemos representar n cores de um conjunto com mais de 16
milhões de cores. Nesse caso, para representar esse tipo de imagem, as informações
das cores da paleta devem constar da estrutura além das dimensões e seqüência de
índices.

Φιγυρα 29.Índice e paleta de cores


O número de cores e a resolução de cor da paleta podem variar. Os dois padrões mais
usados são apresentados na tabela abaixo.
Bits/pixel Padrão Resolução de cor da paleta (RGB)
4 bits/pixel 16 cores indexadas 24 bits/cor
8 bits/pixel 256 cores indexadas 24 bits/cor
Cores fixas
Nas cores fixas, cada pixel é representado por um índice que aponta para uma tabela de
cores fixa. Esse sistema geralmente é usado quando o dispositivo não permite a
representação de muitas cores, como no caso de placas de vídeos antigas ou padrões
de cores (padrão de cores do MS Windows 3.x, 16 cores). O número de bits para
representar um pixel depende do número de cores fixas, ou seja para representar por
exemplo 16 cores, são necessários 4 bits/pixel.

Imagens em Tons de Cinza


A representação de imagens em tons-de-cinza é feita discretizando a informação de
luminância de cada ponto da imagem. Ou seja, cada pixel contém a intensidade de
luminosidade representada em um certo número de bits. Assim uma imagem com
resolução de cor de 8 bits, pode representar até 256 níveis de cinza, variando do preto
ao branco.
Os padrões mais usados são de 16 e 256 tons-de-cinza, 4 e 8 bits/pixel respectivamente.
Representações com mais que 256 tons-de-cinza não são percebidas pela vista
humana, ou seja representar uma imagem com 256 níveis é suficiente para a maioria
das aplicações.

Imagens Binárias
As imagens binárias são imagens com dois níveis, como preto e branco. São muito
usadas por dispositivos de impressão e para representar imagens de documentos
monocromáticos. Para representar um pixel de uma imagem binária, como o próprio
nome diz, é necessário apenas 1 (um) bit. Essa informação é suficiente para representar
cada pixel, ou seja temos uma representação de 1 bit/pixel. Em alguns casos, temos
uma informação extra sobre a cor de cada informação, a cor para o bit com valor 0 (zero)
31 Capítulo 2: Sistemas Numéricos e a Representação Interna Prof. Roberto Willrich

e a cor para o bit de valor 1 (um). Essa informação de cor é geralmente é representada
em 24 bits/cor no padrão RGB, podendo porém ser representada de outras formas.
Capítulo 3

Introdução à Arquitetura de Computadores


3.1 Introdução
Como foi mencionado no capítulo 1, tem-se observado uma atuação cada vez maior dos
computadores nas diversas atividades do nosso dia a dia. As operações bancárias, as
telecomunicações e o manuseio de muitos aparelhos eletrodomésticos são exemplos
claros das facilidades trazidas pela utilização dos computadores, isto sem falar em
aplicações mais clássicas, como os sistemas de reservas de passagens aéreas e a
previsão meteorológica.
A evolução da informática foi caracterizada pelo desenvolvimento de computadores com
características as mais diversas, traduzidas pelos diferentes parâmetros, cada vez mais
conhecidos da maioria de usuários de computador: a CPU adotada, a capacidade de
memória, a capacidade do disco rígido, a existência de memória cache e outros menos
conhecidos. A definição destes parâmetros e a forma como os diversos componentes de
um computador são organizados, define aquilo que é conhecido por arquitetura de
computador e vai determinar aspectos relacionados à qualidade, ao desempenho e à
aplicação para a qual o computador vai ser orientado.

3.2 Componentes básicos de um computador


Apesar da existência de uma grande diversidade em termos de arquiteturas de
computador, pode-se enumerar, num ponto de vista mais genérico os componentes
básicos desta classe de equipamentos.
A 3.2 apresenta um esquema de um computador, destacando os elementos que o
compõem. Apesar da grande evolução ocorrida na área de informática desde o
aparecimento dos primeiros computador, o esquema apresentado na figura pode ser
utilizado tanto para descrever um sistema computacional atual como os computadores
da década de 40, projetados por engenheiros como John Von Neuman.

Memória Processador Periféricos

Barramento

Φιγυρα 30.Elementos básicos do computador


Os principais elementos do computador são:
 O processador (ou microprocessador) é responsável pelo tratamento de informações
armazenadas em memória (programas em código de máquina e dos dados).
 A memória é responsável pela armazenagem dos programas e dos dados.
 Periféricos, que são os dispositivos responsáveis pelas entradas e saídas de dados do
computador, ou seja, pelas interações entre o computador e o mundo externo. Exemplos de
periféricos são o monitor, teclados, mouses, impressoras, etc.
 Barramento, que liga todos estes componentes e é uma via de comunicação de alto
desempenho por onde circulam os dados tratados pelo computador.
2 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

3.3 Processador
Um microprocessador, ou simplesmente processador, é um circuito integrado (ou chip),
que é considerado o "cérebro" do computador (3.3). É ele que executa os programas, faz
os cálculos e toma as decisões, de acordo com as instruções armazenadas na memória.

Φιγυρα 31.Microprocessador
Os microprocessadores formam uma parte importantíssima do computador, chamada de
UCP (Unidade Central de Processamento), ou em inglês, CPU (Central Processing Unit).
Antes da existência dos microprocessadores, as CPUs dos computadores eram
formadas por um grande número de chips, distribuídos ao longo de uma ou diversas
placas. Um microprocessador nada mais é que uma CPU inteira, dentro de um único
CHIP. Podemos ver na 3.3 um microprocessador e uma placa de circuito. Um
microprocessador contém todos os circuitos que antigamente eram formados por
diversas placas.

Φιγυρα 32.Microprocessador e placa de circuito impresso


Ligando-se um microprocessador a alguns chips de memória e alguns outros chips
auxiliares, tornou-se possível construir um computador inteiro em uma única placa de
circuito. Esta placa, como visto na 3.3, é comumente chamada de placa mãe dos
microcomputador.

Φιγυρα 33.Placa Mãe


Não importa de que tipo de CPU estamos falando, seja um microprocessador, ou uma
das várias placas que formam a CPU de um computador de grande porte, podemos dizer
que a CPU realiza as seguintes tarefas:
3 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

a) Busca e executa as instruções existentes na memória. Os programas e os


dados que ficam gravados no disco (disco rígido ou disquetes), são
transferidos para a memória. Uma vez estando na memória, a CPU pode
executar os programas e processar os dados.
b) Comanda todos os outros chips do computador.
A CPU é composta basicamente de três elementos: unidade de controle, unidade lógica
e aritmética e registradores. As sessões que seguem apresentam cada um destes
componentes.

3.3.1 Unidade Lógica e Aritmética


O primeiro componente essencial num computador (ou sistema computacional) é a
Unidade Lógica e Aritmética (ALU), a qual, como o próprio nome indica, assume todas
as tarefas relacionadas às operações lógicas (ou, e, negação, etc.) e aritméticas
(adições, subtrações, etc...) a serem realizadas no contexto de uma tarefa.
Neste contexto, é importante observar a evolução que a ALU sofreu ao longo dos anos e
quais são os parâmetros que influenciam no desempenho global de um sistema
computacional:
 Um parâmetro importante é o tamanho da palavra processada pela unidade lógica e
aritmética. Como o sistema de numeração adotado nas arquiteturas de computadores é o
binário, o tamanho de palavra é dado em números de bits. Quanto maior o tamanho da
palavra manipulada pelo microprocessador, maior é o seu potencial de cálculo e maior a
precisão das operações realizadas.
 A velocidade de cálculo obviamente é outro fator de peso para o desempenho do
computador, uma vez que ela será determinante para o tempo de resposta de um sistema
computacional com respeito à execução de uma dada aplicação. A velocidade de cálculo está
diretamente relacionada com a freqüência do relógio que pilota o circuito da CPU como um
todo.
 Outro parâmetro importante associado ao desempenho do computador é a quantidade de
operações que ela suporta. Por exemplo, os primeiros processadores suportavam um conjunto
relativamente modesto de operações lógicas e aritméticas. Em particular, no que diz respeito
às operações aritméticas, os primeiros processadores suportavam apenas operações de
adição e subtração, sendo que as demais operações tinham de ser implementadas através de
seqüências destas operações básicas. Os processadores suportando um conjunto mais
complexo de instruções surgiu de 15 anos para cá, graças à adoção da tecnologia CISC
(Complex Instruction Set Computer).
A evolução nos tempos destes parâmetros será apresentada aqui a partir da história dos
microprocessadores da família Intel, resumida na tabela abaixo.
Nome Ano Clock REG Barra- N. de Memória Comentários
(MHz) (bits). mento Transistores Endere-
(bits) çável
4004 1971 0,108 4 4 2.300 640 bytes primeiro microprocessador
(manipulação aritmética)
8008 1972 0,108 8 8 3.500 16 KB primeiro micro 8 bits (manipulação de
dados/caracteres)
8080 1974 2 8 8 6.000 64 KB primeira CPU num chip (10x o
desempenho do 8008)
8086 1978 5-10 16 16 29.000 1 MB primeira CPU 16 bits num chip (10x o
desempenho do 8086)
8088 1980 5-8 16 8 29.000 1 MB processador do IBM-PC
80286 1982 8-12 16 16 134.000 16 MB aumento no endereçamento (3-6x o
desempenho do 8086
80386DX 1985 16-33 32 32 275.000 4 GB primeira CPU 32 bits
80386SX 1988 16-20 32 16 275.000 4 GB 80386 com barramento 80286
80486 1989 25-50 32 32 1.200.000 4 GB versão 80386 mais rápida
DX
80486 SX 1989 16-33 32 32 1.185.000 4 GB 80486 sem coprocessador matemático
Pentium 1993 60-166 32 32 3.100.000 4 GB Arquitetura Super-escalar, 5x o
desempenho do 486DX 33
Pentium 1995 150-200 32 64 5.500.000 4 GB Arquitetura de Execução dinâmica
Pro
4 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Pentium 1997 233-450 32 64 7.500.000 64 GB Barramento Duplo independente,


II execução dinâmica, e tecnologia MMX
Pentium 1998 400-450 32 64 7.500.000 64 GB Para estações de trabalho e servidores
II Xeon
Pentium 1999 450 a 32 64 9.500.000 64 GB PCs de negócio e de consumidores,
III 1130 servidores e estações de trabalho
Pentium 1999 500 e 32 64 9.500.000 64 GB PCs de negócio e servidores e estações
III Xeon 550 de trabalho.

A sociedade Intel fundada em 1968, iniciou a fabricação de memórias para


computadores, até que um fabricante de computadores lançou o desafio de construir
uma unidade central de processamento (CPU), num único circuito para uma calculadora
eletrônica. Assim, foi desenvolvida a CPU 4004 de 4 bits, e logo depois o 8008. Estes
foram as primeiras CPUs integradas num único chip. A fabricação foi em pequena
escala, pois a empresa não pensou que estas pudessem interessar a outros fabricantes.
Esses chips eram caríssimos. Custavam, na época do seu lançamento, mais de 1000
dólares.
Em função do sucesso do 8008, a Intel lançou-se na fabricação de um novo chip que
permitisse ultrapassar a barreira dos 16 Kbytes de memória, limite imposto devido ao
número de pinos do 8008. Nasceu então o 8080 (1974), que provocou uma revolução no
que diz respeito à indústria dos computadores. O 8080 foi o primeiro microprocessador a
ser usado em larga escala nos chamados "computadores pessoais". Antes deles, os
microcomputadores eram usados apenas em laboratórios científicos, em fábricas e em
universidades. O 8080 popularizou o uso de microcomputadores por pequenas
empresas e até para uso pessoal. Era comuns os micros pessoais baseados no 8080 e
em outros microprocessadores rivais: o MC6800 da Motorola, o 6502, usando em um
antigo microcomputador chamado de APPLE, e o Z-80 fabricado pela ZILOG, usado em
um antigo computador chamado TRS-80. Surgia então a indústria dos
microcomputadores. Ao mesmo tempo, surgia a indústria do software para
microcomputadores, que criava programas de vários tipos para serem usados nessas
máquinas. Os microcomputadores dessa época já tinham teclado, vídeo e impressora.
Seus dados e programas eram gravados normalmente em gravadores de fita K-7
adaptados para trabalhar com microcomputadores.
A INTEL produziu ainda, no final dos anos 70, um outro microprocessador para substituir
o 8080. Chamava-se 8085. Todos esses microprocessadores (8080, 8085, Z-80, 6502,
6800 e outros) operavam com 8 bits. A 3.3.1 mostra um dos primeiros
microcomputadores brasileiros, o SCHUMEC M-101/85, lançado em 1981. Tinha um
microprocessador INTEL 8085 de 6 MHz, 16 KB de memória e um gravador de fita K-7
para armazenamento de programas e dados. Seu monitor de vídeo era na verdade uma
TV PHILIPS adaptada, já que nesta época o Brasil não fabricava monitores.

Φιγυρα 34.Microcomputador SCHUMEC M 101/85


Pouco depois, é lançada a primeira CPU em 16 bits, o 8086, concebido no mesmo
espírito do 8080. O próximo passo foi o 8088, que possuía a mesma arquitetura do 8086,
mas com um barramento interno de 8 bits e não de 16 como seu antecessor. Nessa
ocasião, a IBM, que é o maior fabricante de computadores em todo o mundo, ainda não
fabricava microcomputadores. Seus produtos eram os computadores de grande porte
usados nos grandes centros de processamento de dados, e custavam alguns milhões de
dólares. A IBM decidiu então entrar no mercado de computadores pessoais. Escolheu
então o microprocessador 8088 para usar em seu microcomputador, chamado de "IBM
Personal Computer", ou simplesmente, IBM PC. O IBM PC, o primeiro microcomputador
de 16 bits, passou logo a dominar o mercado. Até os dias atuais, os modernos
microcomputadores são compatíveis com o IBM PC original, lançado em 1981. Este
microcomputador tinha as seguintes características:
5 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

 Microprocessador 8088, operando a 4.77 MHz


 Monitor de vídeo monocromático
 2 drives de 320 KB
 16 KB de memória, possibilitando expansão até 64 KB
 Conexão para gravador K-7
Pouco tempo depois, a IBM realizou melhorias no projeto deste microcomputador e
lançou o IBM PC-XT. A sigla "XT" significa "Extended Technology" (Tecnologia
estendida). As características dos primeiros modelos do IBM PC-XT eram as seguintes:
 Microprocessador 8088, operando a 4.77 MHz
 Monitor de vídeo monocromático ou colorido
 2 drives de 360 KB
 64 KB de memória, possibilitando expansão até 256 KB
 Disco rígido de 10 MB
A grande vantagem do IBM PC-XT em relação ao IBM PC era a possibilidade de operar
com um disco rígido (também chamado de winchester) de 10 MB, uma altíssima
capacidade para aquela época.
Os microprocessadores 80186 e 80188 foram extensões aos dois chips anteriores, do
ponto de vista das E/S. Entretanto, estes nunca foram chips altamente utilizados.
O passo seguinte e natural seria a passagem para 32 bits, o que foi concretizado com o
lançamento do 80386 e 80386SX. Logo após surgiu o 80486 e que possui, integrados,
um coprocessador de ponto flutuante e um controlador de memória.
Atualmente, os computadores são baseados nos processadores Pentium II e III, cujas
características estão na tabela acima.

3.3.2 Unidade de Controle (UC)


A Unidade de Controle tem a maior importância na operação de um computador, uma
vez que é esta unidade que assume toda a tarefa de controle das ações a serem
realizadas pelo computador, comandando todos os demais componentes de sua
arquitetura. É este elemento quem deve garantir a correta execução dos programas e a
utilização dos dados corretos nas operações que as manipulam. É a unidade de controle
que gerencia todos os eventos associados à operação do computador, particularmente
as chamadas interrupções, tão utilizadas nos sistemas há muito tempo.

3.3.3 Registradores
A CPU contém internamente uma memória de alta velocidade que permite o
armazenamento de valores intermediários ou informações de comando. Esta memória é
composta de registradores (ou registros), na qual cada registro tem uma função própria.
Os registros, geralmente numerosos, são utilizados para assegurar o armazenamento
temporário de informações importantes para o processamento de uma dada instrução.
Conceitualmente, registro e memória são semelhantes: a localização, a capacidade de
armazenamento e os tempos de acesso às informações que os diferenciam. Os registros
se localizam no interior de um microprocessador, enquanto a memória é externa a este.
Um registro memoriza um número limitado de bits, geralmente uma palavra de memória.
Os registros mais importantes são:
 Contador de programa (PC - Program Counter), que aponta para a próxima instrução a
executar.
 Registro de instrução (IR - Instruction Register) que armazena a instrução em execução.
 Outros registros que permitem o armazenamento de resultados intermediários.
6 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

3.3.4 Clock
Clock é um circuito oscilador que tem a função de sincronizar e ditar a medida de
velocidade de transferência de dados no computador, por exemplo, entre o processador
e a memória principal. Esta freqüência é medida em ciclos por segundo, ou Hertz.
Existe a freqüência própria do processador, comandando operações internas a ele, e a
freqüência do computador a ele associado, basicamente ciclos CPU-Memória principal.
Os processadores Pentium-100, Pentium MMX-233, Pentium II-300, acessam a memória
principal a 66 MHz. Suas freqüências respectivas de 100, 233 e 300 MHz são atingidas,
tão somente, no interior do chip. Dizem, portanto, respeito ao processamento interno do
processador e não à freqüência na relação CPU-Memória do computador.
Já os processadores Pentium II-350 e superiores tem uma freqüência externa de 100
MHz, acaretando um desempenho melhor do microcomputador, tanto no processamento
propriamente dito quanto nas operações de disco e vídeo.

3.4 Processadores CISC e RISC


Uma instrução em um programa de alto nível é implementado por diversas instrução de
processador a mais baixo nível. Por exemplo, uma instrução de um programa que
imprime um conjunto de caracteres na tela é realizado a nível de processador por um
conjunto de instruções.
De acordo com o número de instruções suportadas, pode-se classificar um processador
como RISC (Reduced Instruction Set Computing) ou CISC (Complex Instruction Set
Computing).
Os microprocessadores são, em sua maioria, chips CISC. Um processador CISC suporta
um conjunto maior de instruções, sendo cada instrução mais especializada; graças a
isso, ele pode executar, de modo direto, a maioria das operações programadas pelos
programas de alto nível. Devido a isto, o número de instruções de processador para
implementar uma instrução de mais alto nível são menores. Mas quanto maior a
quantidade de instruções que um processador suporta, mais lenta é a execução de cada
uma delas.
Um processador RISC reconhece um número limitado de instrução, que, em
contrapartida, são otimizadas para que sejam executadas com mais rapidez. Portanto, a
arquitetura RISC reduz o conjunto de instrução ao mínimo, e as instruções não
implementadas diretamente são realizadas por uma combinação de instruções
existentes. Mas em compensação, um programa é implementado por um número maior
de instruções.
A Apple desenvolveu, sob a arquitetura RISC, em parceria com a Motorola e a IBM, o
chip Powerpc, com mais poder de processamento que o chip Pentium. Ele equipa a linha
de microprocessadores MakPower (nos modelos 6100, 7100, 8100).

3.5 Memória
Todo computador é dotado de uma quantidade de memória (que pode variar de máquina
para máquina) a qual se constitui de um conjunto de circuitos capazes de armazenar os
dados e os programas a serem executados pela máquina. Nós podemos identificar
diferentes categorias de memória:
 a memória principal, ou memória de trabalho, onde normalmente devem estar armazenados
os programas e dados a serem manipulados pelo processador;
 a memória secundária que permitem armazenar uma maior quantidade de dados e
instruções por um período de tempo mais longo; o disco rígido é o exemplo mais evidente de
memória secundária de um computador, mas podem ser citados outros dispositivos menos
recentes como as unidades de fita magnética e os cartões perfurados;
7 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

 a memória cache, que se constitui de uma pequena porção de memória com curto tempo de
resposta, normalmente integrada aos processadores e que permite incrementar o
desempenho durante a execução de um programa.
Os circuitos de memória são normalmente subdivididos em pequenas unidades de
armazenamento, geralmente um byte. Cada uma desta unidade é identificada no circuito
por um endereço único, o qual vai ser referenciado pelo processador no momento de
consultar ou alterar o seu conteúdo. Por exemplo, .no caso do processador 8088 nós
temos um espaço de endereçamento de 1 MBytes, então este endereço único vai de 0 a
FFFFF, conforme ilustração abaixo. As quantidades de memória hoje são definidas em
termos de Kbytes (quilobytes) que correspondem a 1024 bytes ou (210 bytes) e MBytes
(megabytes), que correspondem a 1024 KBytes ou (220 bytes).
Endereço hexadecimal Conteúdo de memória
00000 00
00001 23
00002 00
... ...
... ...
FFFFE E4
FFFFF FF

3.5.1 Memória Principal


A memória principal, ou memória de trabalho, é onde normalmente devem estar
armazenados os programas e dados a serem manipulados pelo processador.
Geralmente é esta memória que se referencia na especificação de um microcomputador.
E hoje, as quantidades de memória mais usuais disponíveis nos microcomputadores são
32, 64, 128 e 256 MBytes de memória, ou mesmo até mais para aplicações específicas.
Em termos básicos, a memória principal é vista como um conjunto de chips que são
inseridas na placa mãe do computador. Pode-se ver na 3.5.1 alguns tipos de chips de
memória, usados para formar a memória principal de microcomputadores. Os dois
módulos superiores desta figura são as memórias utilizadas atualmente. Mais adiante
serão apresentadas as tecnologias de memória e os tipos de empacotamento.

Φιγυρα 35.Chips de memória


Os módulos de memória mais usados nos microcomputadores são os dois módulos de
memória superiores da 3.5.1. O mais superior é conectado no barramento PCI e o
segundo no barramento ISA (estes tipos de barramento serão apresentados mais
adiante). Estes módulos são colocados na placa mãe, como apresentado na 3.5.1.
8 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Φιγυρα 36.Placa Mãe e suas memórias

Tipos de memória
Os chips de memória podem ser divididos em duas grandes categorias:
 RAM (memória de leitura e escrita): são chips de memória que podem ser lidos e gravados
pela CPU a qualquer instante. A CPU usa a RAM para armazenar e executar programas
vindos do disco, para ler e gravar os dados que estão sendo processados. Uma outra
característica da RAM, é que se trata de uma memória VOLÁTIL. Isso significa que quando o
computador é desligado, todos os seus dados são apagados. Por essa razão, é necessário
que os programas e dados fiquem gravados no disco, que é uma memória PERMANENTE.
Existem vários tipos de RAM com diversas características e para diversas
aplicações. A mais conhecida é a DRAM (dinâmica) e a SRAM (estática) e
suas evoluções. Estes tipos serão detalhados mais adiante.
 Memórias Não Voláteis: são memórias cujas informações mantidas não são perdidas caso o
computador seja desligado. Nos microcomputadores, existe um programa muito importante
chamado de BIOS (Basic Input-Output System - Sistema Básico de Entrada e Saída). O BIOS
tem várias funções, entre as quais, a de realizar a "partida" do computador. Quando ligamos o
computador, o BIOS realiza a contagem de memória, faz uma rápida checagem do
funcionamento do computador e realiza a carga do Sistema Operacional que deve estar
armazenado no disco. O BIOS está gravado em uma memória permanente localizada na placa
mãe. Existem diversos tipos de memória permanente:
− ROM: São chips de memória que podem ser lidos pela CPU a qualquer instante, mas não
podem ser gravados pela CPU. Sua gravação é feita apenas pelo fabricante do computador,
ou pelo fabricante de memórias. Os dados armazenados nela já saem prontos de fábrica e são
produzidas em larga escala na indústria. A característica importante de ROM é que trata-se de
uma memória PERMANENTE. Seu conteúdo nunca é perdido, mesmo com o computador
desligado Portanto este tipo de memória é usada para armazenar programas estáticos (que
não alteram) e produzidos em massa. Este tipo de memória foi usado para armazenar o BIOS,
que se localiza na placa-mãe.
− PROM: Significa Programmable ROM, ou seja, ROM programável. Trata-se de uma espécie
de ROM que é produzida apagada. O fabricante pode programá-las, ou seja, gravar seu
programa. Esta gravação pode ser feita apenas um vez, pois utiliza um processo irreversível.
Por isso, usa-se o termo queimar a PROM quando se grava nesta memória.
− EPROM: Significa Eraseable PROM, ou seja, uma ROM programável e apagável. Assim como
ocorre com a PROM, a EPROM pode ser programada e a partir daí, comporta-se como uma
ROM comum, mantendo os dados armazenados mesmo sem corrente elétrica, e permitindo
apenas operações de leitura. A grande diferença é que a EPROM pode ser apagada com raios
ultravioleta de alta potência. Possuem uma "janela de vidro", através da qual os raios
ultravioleta podem incidir nas operações de apagamento. Nota-se que essa janela de vidro fica
sempre coberta por um adesivo que tampa a passagem de luz. É fácil identificar um chip
EPROM na placa mãe justamente pela presença desse adesivo.
− EEPROM: Significa Electrically Erasable Programmable ROM (EEPROM ou E2PROM). Esta é
o tipo de memória ROM mais flexível, que pode ser apagada sob o controle de software. Este
é o tipo que se usa para armazenar as BIOS atuais. Dessa forma, o usuário pode realizar
atualizações no BIOS, fornecidas pelo fabricante da placa de CPU. Quando se ouve falar em
“flash BIOS” ou “fazendo um upgrade de BIOS”, isto se refere a reprogramação do BIOS
EEPROM com um programa de software especial.
9 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Memória fora da placa mãe


Como já mostramos, a placa mãe contém quase toda a memória de um
microcomputador, mas outras placas também podem conter memórias, do tipo RAM e do
tipo ROM. Por exemplo, as placas de vídeo contém uma ROM com o seu próprio BIOS,
e contém uma RAM chamada de memória de vídeo, que armazena os caracteres e
gráficos que são mostrados na tela. Podemos ver na 3.5.1 os chips de memória
existentes na PLACA DE VÍDEO de um microcomputador.

Φιγυρα 37.Placa de vídeo e suas memórias

3.5.2 Tecnologias de memória RAM


Como já apresentado, existem vários tipos de RAM com diversas características e para
diversas aplicações. A mais conhecida é a SRAM (estática) e as várias tecnologias
DRAM (dinâmica).

SRAM
A Static Ram é um tipo de RAM que mantém seus dados sem uma reatualização externa
(refresh), na medida que seus circuitos são alimentados continuamente. Ao contrário, as
DRAM necessita de pulsos de 15ns para manter seu conteúdo, de forma que a energia
não fique o tempo todo abastecendo os chip. Esse pulso periódico é o refresh.
Toda a memória RAM é mais lenta ou mais rápida de acordo com o tempo de acesso
medido em nano-segundos (bilionésimos de segundo). A SRAM é mais rápida que a
DRAM. É comum hoje encontrar nas DRAMs 6 a 150ns de tempo de acesso
(dependendo da tecnologia DRAM), enquanto que nas SRAM é de até 15ns. Mas ela
apresenta algumas fraquezas. SRAM tem um custo por byte muitas vezes maior que as
DRAM. Cada bit da DRAM necessita de um transistor e de um capacitor (que quando
energizado mantém a carga elétrica se o bit contém um “1” ou sem carga se ele contém
um 0”). Já a memória SRAM não necessita de refresh, como se a corrente elétrica
estivesse o tempo todo ligada a ela, por meio de interruptores que acionam e fecham a
memória. Assim, o tempo de acesso é menor. Mas a sua desvantagem é o seu tamanho,
pois requer seis transistores para cada bit.
Estas vantagens e desvantagens mostram claramente que em termos de desempenho
as SRAM são melhores que DRAM. A única coisa que proíbe o uso generalizado da
memória SRAM é seu custo. Por isto, as SRAMs são usadas basicamente para compor
a memória cache (visto mais adiante).

Memórias DRAM
Como apresentado, a DRAM é um tipo de memória RAM que apenas mantém os dados
se eles são continuamente reforçados por um circuito lógico especial chamado circuito
refresh. Devido a esta construção, também a ação de leitura refresca os conteúdos da
memória. Se isto não for feito regularmente, então a DRAM perderá seus conteúdos,
mesmo se a alimentação for mantida. Esta ação de refrescamento é que dá o nome a
memória de dinâmica.
10 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Todos os PCs usam DRAM para constituir sua memória de sistema (em vez de SRAM).
A razão é simples, elas são mais baratas e tomam menos espaço, tipicamente ¼ da área
de silício das SRAMs ou menos. Existem várias espécies de tecnologias de DRAM e as
velocidades que elas fornecem são diferentes. Estas tecnologias serão vistas mais
adiante.
Os chips de DRAM diferenciam nos seguintes aspectos:
 número de células na memória;
 tamanho de cada célula na memória;
 tempo de acesso;
 encapsulamento;
O número de células é relacionado com a capacidade de armazenamento (ou posições
de memória), existindo chips com 8KB a 16MB de células de memória. O tamanho das
células de memória é o número de bits que cada célula armazena. Existem chips de
memória com 1, 4, 8, 9, 32 ou 36 bits. O tempo de acesso, como já dito, é em
bilionésimos de segundo, conhecidos como nano-segundos.
Até o final dos anos 80, a memória DRAM era feita com o encapsulamento DIP, que
tinha que ser encaixada na placa-mãe. Logo depois surgiu o encapsulamento SIPP, que
deu lugar, por sua vez, ao encapsulamento SIMM. Veja cada um dos chips abaixo.

Φιγυρα 38.Um chip de memória DIP

Φιγυρα 39.Um módulo de memória SIPP

Φιγυρα 40.Um módulo de memória SIMM


Até hoje os chips de memória que compõem as placas adaptadoras são do tipo DIP
(Dual In-Line Package).
Com o SIPP (Single In-Line Pin package), surgiu o que é chamado módulos de memória,
que eram vários chips de DRAM numa fileira de terminais onde se encaixavam num
soquete. Esse tipo de encapsulamento foi bastante usado até o início dos anos 90.
O SIMM (Single In-Line Memory Module) surgiu ao redor de 1992. Ela é eletricamente
igual aos SIPP, possuindo de diferente apenas a forma de seus contatos para afixação
na placa-mãe. Podemos dizer que o SIPP possui perninhas e o SIMM, contatos na borda
inferior.
Entre 1992 e 1994, usou-se muito os módulos de memória SIMM pequenos, de 30 pinos.
Esses módulos operavam com 8 bits cada um, necessitando serem usados em grupos.
11 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Então, para completar um banco de memória num 80386, era necessário 4 desses
módulos, pois 4x8bits significa 32 bits, o suficiente para um 80386 ou 80486. Nota-se
que os módulos de 30 pinos (ou vias) conseguiam compor no máximo 4MB em um único
módulo.

Φιγυρα 41.Módulo de memória de 30 vias

Φιγυρα 42.Combinação para chegar a 32 bits num 486


Mais tarde, surgiu os módulos SIMM de memória de 72 vias, que é um pouco maior que
o de 30, operando a 32 bits, onde os últimos 486 fabricados usavam muito (algumas
vezes em conjunto com os de 30 vias). Esses módulos de memória de 72 vias podem ter
até 32MB em um único módulo. Como esses módulos são de 32 bits, para poder
completar um banco num Pentium, que é de 64 bits, são necessários 2 módulos.

Φιγυρα 43.Módulo de memória de 72 vias:


12 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Φιγυρα 44.Combinação para se chegar a 64 bits num Pentium


Logo, a partir de 1995, praticamente todas as placas-mãe passaram a ser fabricadas
com soquetes que suportavam esses módulos de 72 vias. Em outros casos, as placas-
mãe podiam possuir ainda um banco de 30 vias e dois bancos de 72 vias, isto é, quatro
soquetes de 30 vias e 2 soquetes de 72 vias.
E em 1997 surgiram as memória no encapsulamento DIMM (Dual In-Line Memory
Module), que é um módulo de memória com um encaixe igual ao do SIMM, mas que é de
168 pinos, praticamente o dobro do tamanho de um SIMM. Essa memória é de 64 bits.
Assim, para um Pentium, basta um desses módulos de memória para funcionar.

Φιγυρα 45.Módulo de memória DIMM de 32MB


É normal encontrar nos computadores de hoje 32 a 256MB de memória, podendo haver
mais que isto. Para cada quantidade, deve-se ter a combinação certa de memória a ser
colocada. O número de barramentos de memória da placa mãe define a quantidade
máxima de memória de um computador.

Asynchronous and Synchronous DRAM


A DRAM convencional, do tipo que era usada nos PCs desde os dias dos IBM PCs
originais, é dita ser assíncrona. Isto se refere ao fato que a memória não é sincronizada
com o relógio do sistema (clock). Um acesso a memória é iniciado, e um certo tempo
posterior o valor de memória aparece no barramento. Os sinais não são coordenados
com o clock do sistema. Estas memórias assíncronas trabalham bem com barramentos
de memória de baixa velocidade, mas não trabalham bem com sistemas de memória de
alta velocidade (>66MHz).
O novo tipo de DRAM, chamada "synchronous DRAM" ou "SDRAM", é sincronizada com
o relógio do sistema, todos os sinais são ligados ao clock de maneira que ela é melhor
controlada. Como clock é coordenado pela clock da CPU, o tempo de execução de
comandos e transmissão de dados é reduzido. Este tipo de memória é muito mais rápida
que a DRAM assíncrona e pode ser usada para melhorar o desempenho do sistema.
13 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Portanto as SDRAM são melhores adaptadas aos sistemas de memória de alta


velocidade dos novos PCs.
Praticamente todos os micros novos são vendidos com um tipo de memória chamada
SDRAM, mas é sempre bom confirmar com o vendedor se a sua memória é desse tipo
ou de uma tecnologia mais antiga (como EDO ou FPM), que devem ser evitadas
atualmente, pois encontram-se obsoletas e são mais lentas que as memórias SDRAM.

Memórias PC-66 e PC-100


Existem dois tipos de memória SDRAM no mercado atualmente: PC-66 e PC-100. O
primeiro tipo deve ser utilizado por processadores que trabalham externamente a 66
MHz, como os processadores Pentium II até 333 MHz e Celeron. Já o segundo tipo deve
ser obrigatoriamente utilizado pelos processadores que operam a 100 MHz
externamente, como o Pentium II a partir de 350 MHz, Pentium III, K6-2 a partir de 300
MHz e K6-III.
As memórias SDRAM de 10ns de tempo de acesso são, teoricamente, capazes de
trabalhar a 100 MHz. Mas, na prática, foi constatado que esse tipo de memória era
instável para sistemas de 100 MHz. Com isso, somente são aconselhadas para micros
com barramento de 100 MHz memórias com tempo de acesso de 8 ns ou menos. Essas
memórias são as PC-100.
Caso uma memória PC-66 for utilizada em processadores que operam externamente a
100 MHz (em vez de memórias PC-100), o computador apresenta diversos problemas de
congelamentos e resets aleatórios, além dos conhecidos erros de tela azul da morte e
GPF ("Esse programa executou uma operação ilegal e será fechado"). É por esse motivo
que, ao fazer um upgrade de um processador com barramento de 66 MHz para um com
barramento de 100 MHz, é necessário trocar também a memória RAM.
Identificar memórias PC-66 e PC-100 é relativamente simples, são aquelas que tem um
tempo de acesso de 8ns ou inferior. Toda memória possui estampada, em seus circuitos,
uma codificação após um sinal de "-". Memórias -10 ou com valores superiores (-12, -15,
etc) são memórias do tipo PC-66. Já memórias com marcação –8 ou inferiores (-7, etc.)
são memórias do tipo PC-100.

DDR or SDRAM II
Double-data rate SDRAM é uma versão mais rápida de SDRAM que é capaz de ler
dados na subida e descida do clock do sistema, assim dobrando a taxa de dados do chip
de memória.

Rambus DRAM® (Rambus™ RDRAM)


RDRAM, desenvolvida pela empresa Rambus, é uma memória extremamente rápida e
usada como um canal rápido para transmitir dados a velocidades de 10 vezes mais
rápidas que as DRAM padrões. Espera-se que esta tecnologia seja usada como
memória principal dos PCs.

3.5.3 Memória Secundária


Além da memória principal, que é diretamente acessada pela CPU, existe também a
memória secundária (também chamada de memória de massa). Este tipo de memória
não é acessada diretamente pela CPU. Seu acesso é feito através de interfaces ou
controladoras especiais. A memória secundária é uma memória do tipo permanente (não
se apaga quando o computador está desligado), que tem uma alta capacidade de
armazenamento, e um custo muito mais baixo que o da memória principal.
A memória secundária não é formada por chips, e sim, por dispositivos que utilizam
outras tecnologias de armazenamento. A 3.5.3 apresenta alguns exemplos de memória
secundária: o disco rígido, disquetes, CD-ROM e fita magnética. O disco rígido, assim
como os disquetes e as unidades de fita, usam a tecnologia magnética para armazenar
dados. Os discos CD-ROM usam tecnologia ótica.
14 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Φιγυρα 46.Dispositivos de armazenamento secundário

Arquivos
Arquivo nada mais é que um conjunto de dados gravados na memória secundária (disco
rígido, disquete, fita magnética, CD-ROM, etc). Os arquivos são uma forma de organizar
melhor os dados dentro da memória secundária. Nos microcomputadores, os arquivos
normalmente recebem nomes, como por exemplo: CURRÍCULO.DOC,
COMMAND.COM, CHKDSK.EXE. O nome completo de um arquivo é dividido em duas
partes, separadas por um ponto. A primeira parte é chamada de NOME do arquivo. A
segunda parte é chamada de extensão
Os arquivos podem armazenar diversos tipos de dados:
 Instruções para a CPU: Dizemos que se trata-se um arquivo executável. Os arquivos
executáveis, nos microcomputadores, normalmente usam a extensão COM ou EXE. Por
exemplo: FORMAT.COM, COMMAND.COM, SORT.EXE, XCOPY.EXE
 Documentos: São textos digitados com o auxílio de um tipo de programa chamado de editor
de textos, ou processador de textos. Normalmente esses arquivos usam a extensão TXT ou
DOC. Por exemplo: CURRIC.DOC, LISTA.TXT, REUNIAO.DOC
 Gráficos e Imagens: São arquivos que representam figuras. Essas figuras podem ser vistas
na tela ou na impressora, com o auxílio de programas apropriados. Por exemplo, foto.jpg,
logo.gif, fundo.bmp.
 Dados genéricos: que são os demais tipos de arquivos, por exemplo, arquivos de som e
vídeo.
Muitas vezes os programas precisam manipular uma quantidade de dados tão grande
que não cabem na memória principal. Nesse caso, esses dados são armazenados em
arquivos que são lidos da memória secundária e processados por partes. Muitas vezes
esses dados podem até caber na memória principal, mas por uma questão de
organização ficam armazenados em arquivos.
Dados armazenados em memória secundária podem ser lidos e transformados em
impulsos eletrônicos e enviados para a CPU e para a memória. A CPU, por sua vez,
pode acessar os dados originários dos arquivos e enviá-los para os dispositivos de
saída, como o monitor e a impressora, para que possamos vê-los com nossos próprios
olhos. Por exemplo, se um arquivo contém uma carta, só poderemos ver esta carta
depois que o arquivo for lido pela CPU e enviado para a impressora.
15 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Φιγυρα 47.Arquivos "vistos" na tela e na impressora

Discos Rígidos
Em termos gerais, um disco rígido usa discos achatados chamados pratos, revestido nos
dois lados por um material magnético projetado para armazenar informações. Os pratos
são montado em uma pilha. Estes pratos (o disco) giram a uma rotação constante (3600
a 7200 rpm) desde que o computador é ligado. Dispositivos especiais de leitura/escrita,
chamados de cabeçotes, são usados para escrever ou ler informações no/do disco,
sendo que sua posição no disco é controlada por um braço atuador. Cada prato contém
dois cabeçotes, um na parte superior do prato e outro na parte inferior. Assim, um disco
rígido com dois pratos tem quatro cabeçotes. Todos os cabeçotes são presos a um único
braço atuador, eles não se movem individualmente.
Os discos rígidos e a CPU se comunicam via um conjunto de circuitos denominados
controladora de disco rígido que está geralmente integrada na placa-mãe, mas pode ser
uma placa independente. Um exemplo de placa controladora é a SCSI (Small Compact
System Interface), que permite a conexão de diversos periféricos, inclusive de naturezas
distintas. Outra controladora muito usada é a IDE (Intelligent Drive Electronics).
Dados são organizados no disco em cilindros, trilhas e setores (3.5.3). É a formatação
que marca o disco com trilhas e setores. Cilindros são trilhas concêntricos na superfície
dos discos. Hoje, existem aproximadamente 3000 trilhas em cada lado de um prato de
3,5 polegadas. Uma trilha é dividida em setores. Cada setor tem o tamanho de 512
bytes. Em uma operação de leitura de um setor, o controlador de disco interpreta o
endereço do dado e move os cabeçotes para o cilindro que contém os dados. Quando os
cabeçotes estão na posição correta, o controlador ativa o cabeçote específico para ler a
trilha que contém o dado. O cabeçote então lê a trilha procurando o setor que contém o
dado para leitura. A placa controladora do disco coordena o fluxo de informação vinda do
disco rígido em uma área de armazenamento temporária (cache). Ela então envia a
informação pela interface do disco rígido.
16 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Setor

Trilha

Cilindro

Φιγυρα 48.Disco Rígido


Muitas vezes os blocos de dados de um arquivo estão espalhados ao redor do disco.
Portanto, alguns mecanismos são necessários para rastrear os blocos de um arquivo
(p.e. lista ligada, FAT – File Allocation Table no DOS, I-node do UNIX). Quando da leitura
de vários blocos em um arquivo espalhado, uma busca deve ser realizada para a leitura
de cada bloco.
Os XTs usavam discos rígidos com 10 MB, mas atualmente existem discos rígidos com
várias capacidades. Em 1991, a maioria dos microcomputadores usava discos rígidos
com 40, 60 ou 80 MB. Já em 1993, os discos de 120 e 200 MB eram mais comuns.
Atualmente a capacidade dos discos rígidos mais usuais são: 4.3, 6.4, 8.4, 9.1, 10.2 GB.
Mas existem discos rígidos com maior capacidade, como 18.2 GB.
Considere por exemplo, um computador com 64 MB de RAM (que faz parte da memória
principal) e um disco rígido de 8.4 GB (que faz parte da memória secundária). Os 8.4 GB
do disco rígido servem para armazenar diversos programas e diversos dados. Os 64 MB
de RAM servem para manter apenas os programas e os dados que estão sendo
efetivamente processados. Podemos também mostrar como o custo da memória
secundária é muito mais baixo que o da memória principal. Enquanto 64 MB de RAM
custa cerca de R$ 250,00 (preço de janeiro/2000), um disco rígido de 8.4 GB custa cerca
de R$ 420 (preço de janeiro/2000).

CD-ROM (Compact-Disck Read-Only Memory)


O CD-ROM é o meio de armazenamento que tem o menor custo por cada MB
armazenado. Infelizmente, como o nome já diz, esse tipo de disco não pode ser usado
para gravar dados. Pode ser usado apenas para leitura. O CD-ROM tem sido utilizado
para veiculação de software, dicionários, enciclopédias, etc.
Um CD-ROM utiliza técnicas óticas de laser em vez de eletromagnetismo. A leitura de
um CD é feita com a emissão de um feixe de laser sobre a superfície do disco.
Sob a mesma tecnologia, encontram-se os WORM (Wirte Once, Read Many), discos
óticos que podem ser gravados apenas uma vez, mas lidos inúmeras vezes, e os discos
apagáveis (Magneto Optical Erasable Disk), regraváveis, que permitem inúmeras
atualizações.

Unidades de fita magnéticas


A unidade de fita magnética é o dispositivo de alta velocidade que lê e grava fitas
magnéticas. A fita magnética, geralmente acondicionada em cartuchos, é o meio de
armazenamento de grande capacidade. Um rolo pode conter centenas de megabytes de
dados. Elas são normalmente utilizadas para backups de discos rígidos, também pode
ser utilizadas no processamento em que os dados tenham que ser acessados
seqüencialmente, principalmente quando todo o arquivo ou grande parte dele tem que
ser acessado. Seu uso é mais corrente junto a máquinas de porte médio ou grande.

Memória secundária como Memória principal


A memória secundária é muito mais barata, de maior capacidade, e ainda é permanente,
ou seja, não apaga os dados quando o computador é desligado. Por que então esse tipo
17 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

de memória não é usado no lugar da memória principal? Já pensou como seria


interessante acoplar um disco rígido de 8.4 GB diretamente a um microprocessador?
Você iria dizer: "... possuo um computador Pentium III 450 com 8.4 GB de memória...".
Infelizmente, os dispositivos de armazenamento secundário são extremamente lentos.
São lentos demais para serem acoplados diretamente ao microprocessador. Além disso,
não permitem acessos a seus bytes individuais, como um microprocessador precisa
realizar. Os meios de armazenamento secundário só permitem o acesso a bloco de
dados. Em um disquete ou em um disco rígido, por exemplo, as leituras são feitas em
unidades mínimas chamadas de setores. Cada setor tem 512 bytes. Para ter acesso a
um único byte, é preciso ler o setor inteiro. Isso faz com que seu acoplamento direto à
CPU seja inviável. As memórias RAM e ROM são milhares de vezes mais rápidas e
permitem que sejam feitos acessos a qualquer um de seus bytes, de forma individual.
Por isso são usadas para formar a memória principal.
Os meios de armazenamento secundário são mais lentos porque envolvem movimento
de suas partes mecânicas. O disco rígido, o drive de disquete e o drive de CD-ROM
precisam mover a cabeça de leitura até o ponto onde será feita a leitura. A unidade de
fita precisa girar a fita até o ponto a ser acessado. As memórias ROM e RAM não
precisam desses movimentos, pois seus acesso é inteiramente eletrônico. Por isso são
usadas como memória principal.

3.5.4 Memória Cache


Memória cache é uma área reservada de memória que possui duas funções: aumentar o
desempenho do computador e aumentar o tempo de vida das unidades de disco.
Basicamente há dois tipos de memória cache:
 A que vem incorporada à máquina.
 A que é implementada via software na memória RAM do sistema.
A memória cache incorporada à máquina é um tipo muito mais rápido do que a memória
RAM convencional. Por exemplo, em uma placa mãe típica de 100MHz, o tempo de
acesso à memória principal é de 180 nanosegundos, e o acesso à memória cache é na
ordem de 45 nanosegundos. Por isso ela é usada para armazenar tabelas muito usadas
pelo sistema operacional ou para executar parte de programas que necessitam de maior
velocidade de processamento.
A memória cache criada via software é usada para aumentar o desempenho do acesso
ao disco do sistema, guardando as informações mais acessadas na memória, ou seja,
quando for preciso acessar uma nova informação, ela já está armazenada em memória,
que possui um tempo de acesso muito mais rápido do que
o disco. Com isso, o número de vezes que a unidade de
disco é acessada diminui, reduzindo o desgaste físico do
disco e da cabeça de leitura e gravação.
Poderia-se fazer uma analogia entre a memória cache e o
fichário que ficaria em nossa mesa de trabalho. Um
arquivo (memória principal) maior conteria informações
completas para realização do trabalho e o fichário (a
memória cache) conteria informações mais corriqueiras.
Mais próximo do trabalhador (a CPU), o fichário (a cache)
aumentaria a rapidez na realização do trabalho e reduziria a pesquisa no arquivo.

Níveis de Cache
Existem vários “níveis” de cache em um computador moderno, cada nível agindo como
um buffer para informações recentemente usadas para aumentar o desempenho. Mas
quando referimos apenas a simplesmente “cache”, normalmente está se referenciando o
nível “secundário” ou nível 2 que é aquela posicionada entre o processador e a memória
principal.
Cada nível é mais próximo do processador e mais rápida que o nível mais abaixo. Cada
nível também cacheia o nível mais abaixo dela, devido a sua velocidade aumentada
relativa aos níveis mais baixo.
18 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Cache Primária – Layer 1


A cache nível 1 (L1) ou cache primária é a memória mais rápida de um PC. Ela é def fato
construída diretamente no processador. Esta cache é muito pequena, geralmente de
9KB a 64KB, mas é extremamente rápida. Ela roda na mesma velocidade do
processador. Se o processador solicita uma informação e pode encontrá-la na cache L1,
este é o melhor caso, pois a informação é imediatamente disponível e o processador não
tem que esperar.
O processador Pentium III apresenta uma memória cache L1 de 16KB para instruções e
outra de 16KB para dados.

Cache Secundária – Layer 2


A cache nível 2 é uma cache secundária para o nível 2, e é maior e um pouco mais lenta.
Ela é usada para armazenar endereços recentes que não são mantidos pelo nível 1.
Este nível tem um tamanho variando de 64KB a 2MB e até pouco tempo atrás era
encontrada na placa mãe ou um modulo que é inserido na placa mãe.
Os processadores Pentium Pro tém a cache L2 no mesmo pacote do processador
(embora este não esteja no mesmo circuito do processador e da cache L1). Isto significa
que ela roda muito mais rápida que a cache L2 que é separada e reside na placa mãe. O
Pentium II e III até 600MHz tém um meio termo, sua cache L2, de 512KB, roda na
metade da velocidade da CPU. O Pentium III acima 600MHz apresenta uma memória
cache L2 de 256KB no mesmo pacote e opera na mesma velocidade da CPU.
O nível dois algumas vezes é chamada de cache externa, desde que ela reside fora do
processador. Mesmo nos Pentium Pro, que está em um chip separado no mesmo
pacote.

Cache Externas
As primeiras placas-mãe equipadas com SRAM apresentavam pequenas quantidades de
cache, entre 8KB a 128KB. Com o 486, tornou-se mais comum que a placa-mãe tivesse
128KB a 512KB de cache. O Pentium geralmente tem 512KB a 1MB de cache.
Até recentemente, os chips que formavam a SRAM eram modularizados em forma de
chips DIP, mas atualmente, fabrica-se os módulos d o tipo COAST, semelhante ao
SIMM, porém, eletronicamente diferentes.

Φιγυρα 49.Módulo COAST.

Φιγυρα 50.SRAM do tipo DIP:


Praticamente, não se vê mais placas de CPU novas com memória cache do tipo DIP. As
placas de CPU atuais incorporam os chip de SRAM na placa mãe, mas não do tipo DIP.
Os chips são soldados e geralmente não há bancos vazios para a expansão. Com o
módulos COAST, basta trocar o módulo. E com os chips VLSI da Intel, estes possuem a
capacidade de detectar automaticamente o tipo de cache em uso, através do BIOS,
dispensando a configuração manual, de forma que logo no processo de boot há essa
identificação.
19 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

3.6 Barramentos
Um barramento, ou bus, nada mais é do que um caminho comum pelo qual os dados
trafegam dentro do computador. Este caminho é usado para comunicações e pode ser
estabelecido entre dois ou mais elementos do computador.
O tamanho de um barramento é importante pois ele determina quantos dados podem ser
transmitidos em uma única vez. Por exemplo, um barramento de 16 bits pode transmitir
16 bits de dado, e um barramento de 32 bits pode transmitir 32 bits de dados a cada vez.
Todo barramento tem uma velocidade medida em MHz. Um barramento rápido permite
transmitir dados rapidamente, que tornam as aplicações mais rápidas.
Um PC tem muitos tipos de barramentos, que incluem:
 Barramento do processador: é o barramento que o chipset usa para enviar/receber
informações do processador. O chipset são os chips de suporte adjacentes contidos na placa
mãe.
 Barramento de Cache: usado pelos Pentium Pro e Pentium III, é um barramento dedicado
para acessar o sistema cache. Ele é algumas vezes chamado de barramento backside.
Processadores convencionais que usam placas mãe de quinta geração tem uma cache
conectada ao barramento de memória padrão.
 Barramento de memória: é um barramento que conecta o sub-sistema de memória ao
chipset e ao processador. Em alguns sistemas o barramento do processador e o barramento
de memória são basicamente a mesma coisa.
 Barramento local de E/S (Entrada/Saída). É usado para conectar periféricos de alto
desempenho à memória, chipset e processador. Por exemplo, placas de vídeo, interface de
redes de alta velocidade geralmente usam um barramento deste tipo. Os dois tipos
barramentos locais de E/S mais comuns são o VESA Local Bus (VLB) e o Peripheral
Component Interconnect Bus (PCI).
 Barramento padrão de E/S: conecta os três barramentos acima ao antigo barramento padrão
de E/S, usado para periféricos lentos (modems, placas de som regulares, interfaces de rede
de baixa velocidade) e também para compatibilidade com dispositivos antigos. O principal
barramento padrão de E/S é o Industry Standard Architecture (ISA) bus. Nos PCs, o
barramento ISA (antigo padrão) está sendo substituído por barramentos mais rápidos, como
PCI. Geralmente, quando se ouve sobre o barramento de E/S, praticamente falamos de slots
de expansão.
Alguns novos PCs usam um “barramento” adicional projetado para comunicação de
grafismos apenas. A palavra “barramento” foi colocada entre aspas pois esta tecnologia
não se trata de um barramento, ela é um porto: o Accelerated Graphics Port (AGP). A
diferença entre um porto e um barramento é que o barramento é geralmente projetado
para vários dispositivos compartilhando um meio de comunicação, enquanto um porto é
apenas entre dois dispositivos.
Todos os barramentos tem duas partes: um barramento de endereçamento e um
barramento de dados. O barramento de dados transfere o dado em si (por exemplo, o
valor de memória) e o barramento de endereço transfere a informação de onde o dado
se encontra.

3.6.1 Barramento do processador


O barramento do processador é o caminho de comunicação entre a CPU e o chipset.
Este barramento é usado para transferir dados entre a CPU e o barramento principal do
sistema (3.6.1).
Pelo motivo de que o barramento do processador serve para conseguir informações para
e da CPU à velocidade mais rápida possível, este barramento opera de forma muito mais
rápida que qualquer outro tipo de barramento no computador. Não existem
congestionamentos neste barramento. Este barramento consiste em circuitos elétricos de
dados, endereçamento e controle. No processador 80486, o barramento consiste em 32
20 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

linhas de endereçamento, 32 linhas de dados e algumas linhas para controle. No


Pentium, são 32 linhas de endereçamento, 64 linhas de dados e as linhas de controle.
O barramento do processador opera a mesma velocidade que a CPU opera
externamente. Num Pentium 100MHz, o barramento opera a 66,6MHz, bem como num
Pentium 133MHz, 166MHz e 200MHz. No processador Pentium II, o barramento de
processador opera a 100MHz e no Pentium III, a 100 ou 133 MHz.
O barramento do processador é ligado nos pinos de conexão externos do processador e
pode transferir bits de dados a cada um ou dois ciclos. Um 80486 transfere 32 bits de
dados por vez, enquanto um Pentium transfere 64 bits.

Φιγυρα 51.Funcionamento o barramento do processador

3.6.2 Barramento de Cache


Processadores convencionais usam a cache externa na placa mãe e a CPU acessa esta
cache usando o barramento padrão de memória. Para obter um melhor desempenho, a
maioria dos novos usam um barramento de alta velocidade conectando o processador à
cache L2. No caso do Pentium Pro e Pentium III acima de 600MHz, este barramento é
interno ao processador e opera na taxa da CPU. No caso dos Pentium II e III até
600MHz, o barramento de cache opera na metade da taxa do processador. Por exemplo,
um Pentium II 266 MHz tem um barramento de cache operando a 133 MHz.

3.6.3 Barramento da Memória


O barramento da memória é usado para transferir informação entre a CPU e a memória
principal do sistema (a memória RAM). Estes barramento é uma parte do barramento do
processador, ou na maioria dos casos é implementado separadamente por um chipset
dedicado que é responsável pela transferência de informação entre o barramento do
processador e o barramento da memória (3.6.3).
Devido aos limites da capacidade do chips de DRAM, a taxa de transferência de
informação no barramento da memória é menor que a do barramento do processador.
Vale lembrar que a largura do barramento da memória é a mesma que do barramento do
processador. Igualmente, num processador Pentium ou Pentium Pro, que possui um
barramento de 64 bit, cada banco de memória que é usado deverá ter 64 bits
preenchidos. As placas-mãe atuais possuem um suporte a pentes de memória do tipo
DIMM, que são de 64 bits. Assim, somente um pente é necessário para o funcionamento
do computador.
21 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Φιγυρα 52.Funcionamento do barramento da memória

3.6.4 Barramento de E/S


Desde a criação do PC, muitos barramento de E/S tem sido desenvolvidos, pela simples
razão de CPUs mais rápidas, maiores demandas de software e maiores requisitos de
vídeo. Para cada avanço obtido nos computadores, requer-se um barramento que
atenda às exigências do hardware. Mesmo assim, necessita-se que seja padronizado
diante do mercado a nível mundial, sem grandes custos aos usuários (esta também é
uma das razões em que os barramento de E/S não puderam evoluir mais do que se
esperava). Até foram criados barramento de E/S mais rápidos do que o mercado exige,
mas não foram colocados com sucesso no mercado justamente pelos custos gerados na
atualização de hardware por parte dos usuários).
Pode-se encontrar estes barramento de E/S na arquitetura do computadores de hoje:
ISA, MCA, EISA, VESA Local Bus, PCI Local Bus.

3.6.5 Barramento ISA


Este barramento foi introduzido no PC original em 1981 como um barramento de 8 bits e
mais tarde foi expandido para 16 bits com o PC/AT em 1984, chamando-se arquitetura
padrão da indústria. O padrão ISA é ainda é utilizado em arquiteturas menos recentes,
mas este tipo de barramento é geralmente substituído pelo PCI. Mas o padrão ISA ainda
é rápido o bastante para muitos periféricos que usamos hoje, como uma placa
fax/modem ou uma placa de som.
Existem duas versões do barramento ISA:
 O barramento ISA de 8 bits surgiu com o XT e opera a 4,77MHz. Esta arquitetura de
barramento foi usada inicialmente nos primeiros PCs e é desnecessária nos sistemas atuais.
O slot ISA de 8 bits é um conector com 62 contatos, possuindo eletronicamente 8 linhas de
dados e 20 linhas de endereçamento, habilitando ao slot manusear 1MB de memória (3.6.5).

Φιγυρα 53.Slot ISA de 8 bits


22 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

 O barramento ISA de 16 bits consegue operar num máximo de 8,33MHz, com uma taxa
máxima de 8MB/s. Surgiu após a produção de processadores de 16 bits (a partir do 80286, em
1984). Para compatibilidade, a IBM teve que criar um tipo de slot que suportasse ambos 8 bits
e 16 bits. Criou-se um slot com duas divisões (3.6.5). As placas de expansão de 8 bits
poderiam ser colocadas na parte maior do slot e as de 16 bits em ambas as partes do slot. O
conector ISA de 16 bits passa a ter, assim, mais 36 pinos de conexão em relação ao ISA de 8
bits, em função do amplo caminho de dados. Esse padrão de slots é usado ainda hoje nos
computadores Pentium. Todas as placas de CPU possuem três ou quatro slots em cada placa.

Φιγυρα 54.Slot ISA de 16 bits

3.6.6 Barramento MCA


Com a introdução de chips de 32 bits (80386DX), significou que o ISA não poderia
suportar todo o poder dessa nova geração de CPUs. Com o lançamento do 80386DX, a
IBM decidiu criar um novo barramento, que resultou no MCA, arquitetura de micro canal.
Porém, a IBM não quis somente criar um novo barramento, mas também receber os
royalties por ele de outros fabricantes. Outra razão para o MCA não se tornar um padrão
da indústria foi que não suportava as placas ISA de 16 bits e 8 bits, haja vista que o
conector era fisicamente menor, mais complexo e bem mais diferente.

3.6.7 Barramento EISA


Este barramento foi criado em 1988 em resposta ao barramento MCA, sendo
primeiramente fabricado pela Compaq. Mesmo assim, poucas placas adaptadoras foram
criadas a partir do EISA. Simplesmente não emplacou no mercado, assim como a MCA.
Porém, o que salvou esse padrão foi o de poder usar as placas ISA presentes. Isto é, os
slots EISA estão presentes, mas foram usados principalmente pelas placas ISA, que não
necessitaram dos recursos colocados no EISA.

3.6.8 Local bus


Os barramentos de E/S vistos até agora (ISA, MCA e EISA) possuem algo em comum:
velocidade baixa. Esta limitação vem dos PCs originais, onde o barramento de E/S
operava a mesma velocidade do barramento do processador. Como a velocidade do
processador aumentou, o barramento de E/S aumentou apenas em largura da banda de
dados, permanecendo a uma velocidade muito mais baixa, por causa da enorme base
de placas adaptadoras instaladas que só poderiam operar a velocidades mais baixas
(3.6.8).
23 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Φιγυρα 55.Layout tradicional do barramento dos PCs


A idéia de que o sistema rodasse mais lento do que deveria, iria insatisfazer os usuários.
Porém, a velocidade do barramento de E/S muitas vezes é só um incômodo, porque não
será necessário altas velocidades para a comunicação com o teclado ou mouse, por
exemplo. O problema só existe na lentidão do barramento quando placas de vídeo e
controladores de disco se tornam prejudicados. Com os sistemas e ambientes
operacionais gráficos, tanto o vídeo como os discos necessitam de mais velocidade para
os dados. Muito mais do que os 8MHz oferecidos com o ISA.
Uma solução óbvia é mover os caminhos de dados dos slots de E/S para a área onde
pode acessar velocidades maiores como a do barramento do processador, como um
cache externo (3.6.8). Este arranjo torna-se conhecido como local bus, já que as placas
adaptadoras podem acessar diretamente o barramento do processador, que é local.
Conseqüentemente, para comportar esse acesso, os slots necessitam ser diferentes do
que os existentes, bem como para diferenciar as placas mais lentas das mais rápidas
que são destinadas a esse tipo de barramento.

Φιγυρα 56.Funcionamento do barramento local


24 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

Nota-se que os primeiros barramento ISA de 8 e 16 bits até rodavam a velocidade do


barramento do processador, usando este barramento local. Mas quando o processador
se tornou mais rápido (e seu barramento também), o barramento principal do ISA teve
que ser desacoplado do barramento do processador.

3.6.9 VESA Local Bus


VESA Local Bus (VLB) foi o primeiro barramento local popular, em 1992. VESA é
abreviação de Video Electronics Standards Association, que foi formada por um grupo de
fabricantes interessados em problemas relacionados com vídeos em computadores
pessoais. A principal razão do desenvolvimento do VLB foi aumentar o desempenho de
vídeo nos PCs.
O VLB é um barramento de 32 bits que é de certo modo uma extensão do barramento
processador/memória do 486. Um slot VLB é um slot ISA 16 bits com um terceiro e
quarto slots no final. Desta maneira, uma placa ISA pode ser conectada no VLB.
O VLB roda a taxas de 33 MHz, embora velocidades maiores são possíveis para alguns
sistemas.
O VLB foi muito popular durante a era 486, com a introdução do Pentium e seu
barramento local PCI, em 1994, o VLB começou a ser abandonado. Além das vantagens
do PCI em relação ao VLB, existem também várias problemas do VLB que contribuíram
para seu abandono:
 Seu projeto foi duramente baseado no processador 486, e a adaptação para o Pentium
causou sérios problemas de compatibilidade e outros problemas.
 O barramento em si é eletricamente fraco, por exemplo, o número de placas que poderiam ser
usadas no barramento era pequeno (normalmente duas ou mesmo uma), e ocorria problemas
quando mais de uma placa era conectada.
 O barramento não tinha um controle muito forte, desde que não havia um bom esquema de
árbitro, e não suporta o Plug and Play.

3.6.10 Barramento PCI


PCI é a abreviação de Peripheral Component Interconnect, um padrão de barramento
local desenvolvido pela Intel Corporation. Embora ele tenha sido desenvolvido pela Intel,
o PCI não é ligado a qualquer família de microprocessadores.
A maior parte dos PCs modernos incluem um barramento PCI em adição ao barramento
de expansão ISA. Mas a tendência é que o barramento ISA seja totalmente substituído
pelo PCI.
Como o VESA Local Bus, PCI é um barramento de 32 bits que normalmente roda a um
máximo de 33 MHz. Nestas condições, ele funciona a 133 MB/s. A vantagem chave do
PCI sobre seu predecessor, o VLB, é a existência de um circuito no chipset que controla
o barramento. O VLB era basicamente uma extensão do barramento do processador
486. O PCI deste modo não é casado com 486, e seu chipset fornece funcionalidades
para controle, que habilita o PCI a fazer mais coisas que o VLB poderia fazer.
A especificação 2.1 do barramento PCI estende o barramento para 64 bits e opera com a
velocidade de 66MHz. Assim, a velocidade pode ser quadruplicada. Na prática o
barramento PCI de 64 bits ainda não foi implementado no PC (existem em outras
plataformas como o Digital Equipment's Alpha). Atualmente a velocidade é limitada a 33
MHz na maior parte dos PCs.
A operação do barramento PCI pode ser configurado como síncrona ou assíncrona,
dependendo do chipset e da placa mãe. Na configuração sincronizada (usado por maior
parte dos PCs), o PCI roda na metade da velocidade do barramento de memória; como
este barramento opera usualmente a 50, 60 ou 66 MHz, o PCI poderia rodar a 25, 30 ou
33 MHz, respectivamente. No modo assíncrono, a velocidade do PCI pode ser setado
independente da velocidade do barramento de memória. Isto é controlado por jumpers
na placa mãe, ou setado pela BIOS.
25 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

O barramento PCI opera concorrentemente com o barramento do processador. A CPU


pode processar os dados como um cache externo enquanto o barramento PCI está
ocupado transferindo informação entre outras partes do sistema.
Além do ser mais eficiente, o barramento PCI incorpora o recurso Plug and Play, não
necessitando que o usuário configure as placas adaptadoras. O sistema se encarrega
disso. Para isso, os computadores devem possuir um BIOS com essa característica. Por
exemplo, o Award Plug and Play BIOS possui esse recurso.

Φιγυρα 57.Estrutura do barramento PCI


Os dados trafegam através do barramento PCI a 33MHz, com toda a banda de dados da
CPU, isto é, usando-se uma CPU de 32 bits, a largura é de 32 bits, com uma taxa de
transferência de 132MB por segundo no máximo.

Φιγυρα 58.Slot PCI de 32 bits


O slot PCI de 64 bits é constituído de uma divisão a mais, como nos VLB. Com esta
banda de dados, a velocidade dobrando para um máximo de 264MB/s.

3.6.11 Barramento PC-Card (PCMCIA)


Este barramento é destinado aos computadores portáteis (notebooks e laptops),
desenvolvido pela PCMCIA, com um conjunto de mais de 300 fabricantes, onde se
estabeleceu os padrões para os cartões adaptadores e de expansão para notebooks e
laptops.
Um cartão PCMCIA usa de 68 conectores, sendo ainda mais caro que o ISA. Apesar dos
padrões, a indústria flexibilizou demais a arquitetura, de forma que alguns cartões podem
não ser compatíveis com algum equipamento ou outro. Os cartões também possuem o
recurso de ser Plug and Play.
26 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

3.6.12 USB
A interface externa USB fornece uma comunicação serial de 12 Mbps, apenas sobre
uma conexão de 4 fios. Um único porto USB pode ser usado para conectar até 127
perifíericos, tal como mouse, modems, teclados, scanners, câmeras. E
A USB também atende às especificações Plug and Play da Intel, inclusive de poder
conectar os dispositivos com a máquina ligada e sem precisar reiniciá-las. Simplesmente
se conecta o dispositivo e a USB irá detectar automaticamente e alocar os recursos
necessários para o seu funcionamento. O suporte a USB é fornecido com o Windows 95
e mais ainda pelo BIOS.
Outra característica importante é que os dispositivos USB conectados têm o
fornecimento de energia pelo próprio USB, o que significa que o USB verifica quais os
requisitos de energia requeridos pelos periféricos e avisar se estes dispositivos
excederem os limites.

3.6.13 Firewire (IEEE 1394)


O firewire é um barramento serial padrão externamente rápido que suporta taxas de
transferências de dados de até 400 MBps. Um único porto 1394 pode ser usado para
conectar até 63 dispositivos externos. Além da alta velocidade, o 1394 também suporta
dados isócronos, transmitindo dados com uma taxa garantida. Isto é ideal para
dispositivos que necessitam altas taxas de transferências em tempo-real, tal como
dispositivos de vídeo.
Embora muito rápido, o 1394 é muito caro. Tal como o USB, o 1394 suporta Plug-and-
Play, e também fornece potências aos periféricos. A principal diferença entre do 1394 e
USB é que o 1394 suporta taxas de transferências altas e é mais caro. Por esta razão, é
esperado usado mais freqüentemente para dispositivos que necessitam taxas altas,
como câmeras de vídeo, e o USB conectará os demais periféricos.

3.7 Dispositivos de Entrada/Saída


Os Dispositivos de Entrada/Saída são equipamentos utilizados como portadores das
informação que o computador irá processar. Por exemplo, quando se pressiona uma
tecla, faz com que o teclado transmita o código da tecla pressionada. Este código é
recebido por um circuito chamado de INTERFACE DE TECLADO. Ao receber o código
de uma tecla, a interface de teclado avisa a CPU que existe um caractere recebido. Por
outro lado, quando a CPU precisa enviar uma mensagem para o usuário, precisa que a
mensagem seja colocada na tela. Isto é feito com auxílio de um circuito chamado de
INTERFACE DE VÍDEO. A CPU envia para a interface de vídeo, a mensagem, seja ela
em forma de texto ou figura. A interface de vídeo coloca então a mensagem na tela.
Existem portanto no computador, os chamados DISPOSITIVOS DE ENTRADA E SAÍDA,
também chamados de PERIFÉRICOS. Através desses dispositivos, o computador pode
armazenar, ler, transmitir e receber dados. Dentre os diversos dispositivos de E/S,
existem alguns que são especializados apenas em ENTRADA, outros especializados
apenas em SAÍDA e outros em ENTRADA E SAÍDA. Podemos citar os seguintes
exemplos:
 ENTRADA:
− Teclado - Lê os caracteres digitados pelo usuário
− MOUSE - Lê os movimentos e toque de botões
− Drive de CD-ROM - Lê dados de discos CD-ROM
− Microfone - Transmite sons para o computador
− SCANNER - Usado para o computador "ler" figuras ou fotos
 SAÍDA:
− Vídeo - Mostra ao usuário, na tela caracteres e gráficos
− Impressora - Imprime caracteres e gráficos
27 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

− Alto-falante - Realiza comunicação com o usuário através de som


 ENTRADA E SAÍDA:
− Disco rígido - Grava e lê dados
− Drive de disquete - Grava e lê dados em disquetes
− Unidade de fita magnética - Grava e lê dados em fitas magnéticas
− MODEM - Transmite e recebe dados pela linha telefônica
As 3.7, 32 e 33 mostram diversos tipos de periféricos.

Φιγυρα 59.Dispositivos de ENTRADA

Φιγυρα 60.Dispositivos de SAÍDA

Φιγυρα 61.Dispositivos de ENTRADA E SAÍDA


Os microcomputadores muitas vezes são vendidos com apenas alguns de seus
periféricos de uso mais prioritário. Nesse caso, dizemos que trata-se de uma
CONFIGURAÇÃO BÁSICA. Um exemplo tipo de configuração básica é aquela em que o
microcomputador é acompanhado de:
 Monitor
 Drives
 Disco rígido
28 Capítulo 3: Introdução à Arquitetura de Computadores Prof. Roberto Willrich

 Teclado
 Mouse
 Alto falante interno
O usuário pode, nesse caso, adquirir novos periféricos e realizar sua instalação no
microcomputador. Essa tarefa pode ser realizada por usuários mais experientes, ou
então por técnicos especializados. Quando instalamos novos periféricos em um
computador, dizemos que estamos realizando um EXPANSÃO. Nesse caso, podem ser
instalados, por exemplo:
 Impressora
 Kit multimídia (alto falantes, placa de som e drive de CD-ROM)
 Modem
 SCANNER
Tipos de comunicação com os Dispositivos
A CPU não pode comunicar-se diretamente com os periféricos. Esta comunicação é feita
com a ajuda de circuitos chamados de interfaces ou portas de E/S, as quais podem
implementar a transmissão das palavras de dados segundo duas diferentes políticas:
 a comunicação paralela, onde cada dígito (ou bit) da palavra de dados é conduzido por um
fio dedicado, o que significa que os cabos utilizados para a comunicação paralela são dotados
de uma grande quantidade de fios (ou vias); o exemplo mais clássico de dispositivos que
utilizam a comunicação paralela são as impressoras;
 a comunicação serial, onde os bits de cada palavra são transmitidos um a um, de forma
seqüencial, através de uma única via, o que explica o fato dos cabos que implementam este
tipo de comunicação serem constituídos por uma pequena quantidade de fios; os exemplos
mais conhecidos de dispositivos que fazem uso desta política de comunicação são o mouse e
os modems.
Capítulo 4

Linguagens de Programação
4.1 Programação de Computadores
Embora o equipamento básico para a realização das tarefas associadas à Ciência da
Computação seja, evidentemente, o Computador, nós utilizaremos, ao longo deste curso,
o conceito de Sistema Computacional, pelo seu significado mais abrangente, tanto
quanto ao tipo de hardware envolvido quanto pela sua extensão aos demais
componentes envolvidos nas atividades computacionais, particularmente os programas,
métodos, regras e documentação.
Um Sistema Computacional pode ser visto como uma associação entre dois conceitos
cada vez mais utilizados na terminologia de informática:
 o hardware, que está associado à parte física do sistema (os circuitos e dispositivos) que
suporta o processamento da informação;
 o software, que corresponde ao conjunto de programas responsáveis pela pilotagem do
sistema para a execução das tarefas consideradas.
No que diz respeito a esta segunda classe de componentes, pode-se estabelecer uma
classificação segundo o tipo de serviço por ele realizado. Assim, tem-se as seguintes
definições:
 o software de sistema (ou sistema operacional) capaz de oferecer ao usuário, ou a outros
softwares, facilidades de acesso aos recursos do computador, seja através de comandos, seja
através de serviços especiais ativados a nível de um programa. O sistema operacional
administra os arquivos, controla periféricos e executa utilitários.
 o software utilitário, que podem ser programas desenvolvidos por especialistas ou mesmo
por usuários experimentados que tem por objetivo facilitar a realização de determinadas
atividades correntes no uso dos computadores (detecção e eliminação de vírus, programas de
comunicação em redes de computadores, compressão de arquivos, etc...);
 o software aplicativo, que são os programas desenvolvidos ou adquiridos pelos usuários
para algum fim específico, seja ele de natureza profissional, educacional ou mesmo de lazer
(jogos).
Informalmente, uma linguagem de programação pode ser definida como sendo um
conjunto limitado de instruções (vocabulário), associado a um conjunto de regras
(sintaxe) que define como as instruções podem ser associadas, ou seja, como se pode
compor os programas para a resolução de um determinado problema.
Ao longo dos anos, foram desenvolvidas (e continuam sendo) uma grande quantidade de
linguagens de programação, algumas de uso mais geral e outras concebidas para áreas
de aplicação específicas.

4.1 Níveis de Linguagens de Programação


As linguagens de programação podem ser classificadas em níveis de linguagens, sendo
que os níveis mais baixos são mais próximas da linguagem interpretada pelo
processador e mais distante das linguagens naturais.

4.1.1 Linguagem de Máquina


Lembrando que o computador corresponde basicamente a um conjunto de circuitos, a
sua operação é controlada através de programas escritos numa forma bastante primitiva,
baseada no sistema binário de numeração tanto para a representação dos dados quanto
das operações. A esta forma de representação dos programas, é dado o nome de
2 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

linguagem de máquina, em razão de ser a forma compreendida e executada pelo


hardware do sistema.
As instruções de linguagem de máquina são representadas por códigos que
correspondem palavras binárias cuja extensão pode variar de 8 a 64 bits (4.1.1).
Dependendo da operação considerada, o código de uma instrução pode simbolizar a
operação a ser executada e os dados envolvidos na operação (ou uma referência à
localização dos dados).
1 0 0 1 1 0 1 0 1 1 0 0 1 0 1 0
0 0 1 0 1 0 1 1 0 0 1 0 1 1 0 0
1 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1
0 0 0 1 0 1 1 0 0 1 1 1 0 0 1 0
Φιγυρα 62. Ilustração de um programa em linguagem de máquina
Por uma questão de custo a nível do hardware, as operações representadas pelas
instruções de linguagem de máquina são bastante elementares, como por exemplo, a
transferência de dados entre memória e registro da CPU, a adição de dois valores, o
teste de igualdade entre dois valores, etc...
A linguagem de máquina é impraticável para escrita ou leitura. É inviável escrever ou ler
um programa codificado na forma de uma string de bits.

4.1.2 Linguagem Hexadecimal


Para simplificar a compreensão e a programação de computadores, num primeiro tempo
foi adotado a notação hexadecimal para representar programas em linguagem de
máquina, onde a seqüência de bits é representada por números hexadecimais, conforme
ilustrado na 4.1.2.
11 1A FB AB 7F 43 27 5B 6C D5 6F 99 FF 10 11 20
39 03 30 39 73 63 F4 3A B4 74 84 AB 7D 6B 54 35
84 47 F3 37 84 50 83 BC 5F 6C 10 39 85 85 94 47
84 03 83 03 83 78 5F FF FF 00 00 00 00 00 00 74
Φιγυρα 63. Ilustração de um programa em linguagem hexadecimal
A linguagem hexadecimal é portanto apenas uma simplificação de notação da linguagem
de máquina. Apesar disto, a programação e leitura usando a linguagem hexadecimal
continua impraticável.

4.1.3 Linguagem Assembly


Embora seja a linguagem diretamente executável pelos processadores, a programação
de aplicações diretamente em linguagem de máquina é impraticável, mesmo
representada na notação hexadecimal. Por esta razão, a linguagem de máquina de cada
processador é acompanhada de uma versão “legível” da linguagem de máquina que é a
chamada linguagem simbólica Assembly. Simbólica pois esta linguagem não é composta
de números binários ou hexadecimais como nas duas linguagens anteriores. A
linguagem Assembly é na realidade uma versão legível da linguagem de máquina. Ela
utiliza palavras abreviadas, chamadas de mnemônicos, indicando a operação. Abaixo
são apresentados dois exemplos de instruções Assembly:
 MOV R1, R2 – nesta instrução identifica-se o mnemônico MOV (abreviação de MOVE) e dois
registradores como parâmetros: R1 e R2. Quando o processador executa esta instrução, ele
comanda o movimento do conteúdo de R2 para R1 (equivalente a instrução Pascal R1:=R2,
sendo R1 e R2 equivalente a duas variáveis);
 ADD R1, R2 – nesta instrução identifica-se o mnemônico ADD (abreviação de ADDITION) e
dois registradores como parâmetros: R1 e R2. Quando o processador executa esta instrução,
ele comanda a adição do conteúdo de R1 ao conteúdo de R2 e o resultado é armazenado em
R1 (equivalente a instrução Pascal R1:=R1+R2).
3 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

Escolhendo nomes descritivos para as posições de memória, e usando mnemônicos


para representar códigos de operação, a linguagem assembly facilitou significativamente
a leitura de seqüências de instrução de máquina. Como exemplo, supomos a operação
de dois números inteiros: A:=B+C. Esta operação, em um PC, em notação hexadecimal
ficaria: A1000203060202A30402. Se associarmos o nome B à posição de memória 200h,
C à posição 202h e A à posição 204h, usando a técnica mnemônica, a mesma rotina
poderá ser expressa da seguinte forma:
MOV AX,B ; registro AX recebe o valor de memória contida na variável B
ADD AX,C ; AX recebe a soma de AX (valor de B) com o valor de C
MOV A,AX ; variável A recebe valor de AX

A maioria concorda que a segunda forma, embora ainda incompleta, é melhor que a
primeira para representar a rotina. Apesar de oferecer uma representação mais próxima
do que o programador está acostumado a manipular, a linguagem Assembly apresenta
certas dificuldades para a realização dos programas, tais como a necessidade de
definição de um conjunto relativamente grande de instruções para a realização de tarefas
que seriam relativamente simples (se representadas através de outras linguagens) e a
exigência do conhecimento de detalhes do hardware do sistema (arquitetura interna do
processador, endereços e modos de operação de dispositivos de hardware, etc...).
Por outro lado, a utilização da linguagem Assembly proporciona um maior controle sobre
os recursos do computador, permitindo também obter-se bons resultados em termos de
otimização de código
Como a linguagem Assembly é apenas uma versão legível da linguagem de máquina, a
passagem de um programa escrito em Assembly para a linguagem de máquina é quase
sempre direta, não envolvendo muito processamento. Esta passagem de um programa
Assembly para linguagem de máquina é chamada de Montagem, e o programa que
realiza esta operação é chamado de montador (Assembler).
A linguagem Assembly é orientada para máquina (ou melhor, para processador), é
necessário conhecer a estrutura do processador para poder programar em Assembly. A
linguagem Assembly utiliza instruções de baixo nível que operam com registros e
memórias diretamente. Assim ela é muito orientada às instruções que são diretamente
executadas pelo processador. Na seqüência da evolução das linguagens de
programação, procurou-se aproximar mais a linguagem de programação à linguagem
natural que utilizamos no dia-a-dia: surgiram então as linguagens de alto nível, tipo
Pascal, C, C++, etc.

Vantagens e Desvantagens da Linguagem Assembly


Mas se nós temos as linguagens de alto nível para quê precisamos utilizar a linguagem
Assembly? Para responder esta pergunta é necessário conhecer as vantagens e
desvantagens da linguagem Assembly e a sua utilização.
Desvantagens com relação as linguagens de alto nível:
 A linguagem Assembly apresenta um número muito reduzido de instruções, do tipo operações
de movimentação de dados em memória, para registros e para memórias, e operações lógicas
e aritméticas bem simples. Estas instruções são de baixa expressividade, isto é, elas são de
baixo nível. O programador deve programar num nível de detalhamento muito maior para fazer
a mesma coisa que em um programa escrito em linguagem de alto nível.
 Como o programador utiliza diretamente os recursos do processador e memória, ele deve
conhecer muito bem a máquina onde ele está programando.
 Um programa escrito em linguagem Assembly não é muito legível, por isso ele deve ser muito
bem documentado.
 Um programa Assembly não é muito portável. Ela é portável apenas dentro de uma família de
processadores. Por exemplo, diferente de um programa C, ele não pode ser executado em
PCs e estações de trabalho.
 Devido a sua baixa expressividade, ilegibilidade e exigência do conhecimento sobre a
máquina faz a programação Assembly ter um custo de desenvolvimento maior, requerendo um
4 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

maior número de homens/hora comparado com a programação utilizando linguagens de alto


nível.
Apesar das desvantagens acima citadas, a utilização da linguagem Assembly tem
algumas vantagens que são listados abaixo:
 Ela permite o acesso direto ao programa de máquina. Utilizando uma linguagem de alto nível,
não tem-se o controle do código de máquina gerado pelo compilador (alguns compiladores
permite a otimização de tamanho e de velocidade do programa). Devido a este acesso, o
programador pode gerar um programa mais compacto e eficiente que o código gerado pelo
compilador. Um programa escrito em linguagem Assembly pode ser 0 ou 300 % menor e mais
rápido que um programa compilado.
 Além disso, esta linguagem permite o controle total do hardware, por exemplo, permitindo a
programação de portas seriais e paralela de um PC.
Aplicações da Linguagem Assembly
A linguagem Assembly é utilizada em vários tipos de aplicações:
 Controle de processos com resposta em tempo real, devido a possibilidade de gerar
programas mais eficientes. Neste tipo de aplicação, geralmente o processador deve executar
um conjunto de instruções em um tempo limitado. Por exemplo, a cada 10 milisegundos o
processador deve ler um dado, processá-lo e emitir um resultado.
 Comunicação e transferência de dados, devido a possibilidade de acessar diretamente o
hardware, a linguagem Assembly é utilizada para a implementação de programas de
comunicação ou transferência de dados.
 Otimização de subtarefas da programação de alto nível, um programa não precisa
somente ser escrito em linguagem Assembly ou linguagem de alto nível. Nós podemos ter
programas de alto nível com subtarefas escritas em linguagem Assembly. Sendo assim, nós
podemos otimizar partes de programas, no caso de tarefas tempo-real ou para a programação
do hardware do computador.

4.1.4 Linguagem de Alto Nível


As linguagens de alto nível são assim denominadas por apresentarem uma sintaxe mais
próxima da linguagem natural, fazendo uso de palavras reservadas extraídas do
vocabulário corrente (como READ, WRITE, TYPE, etc...) e permitirem a manipulação dos
dados nas mais diversas formas (números inteiros, reais, vetores, listas, etc...); enquanto
a linguagem Assembly trabalha com bits, bytes, palavras, armazenados em memória.
As linguagens de alto nível ou de segunda geração surgiram entre o final da década de
50 e início dos anos 60. Linguagens como Fortran, Cobol, Algol e Basic, com todas as
deficiências que se pode apontar atualmente, foram linguagens que marcaram presença
no desenvolvimento de programas, sendo que algumas delas têm resistido ao tempo e
às críticas, como por exemplo Fortran que ainda é visto como uma linguagem de
implementação para muitas aplicações de engenharia. Cobol é um outro exemplo de
linguagem bastante utilizada no desenvolvimento de aplicações comerciais.
Em comparação com a linguagem Assembly, a passagem de um programa escrito em
linguagem de alto nível para o programa em linguagem de máquina é bem mais
complexa. Para esta passagem são utilizados compiladores e linkadores.
Com o desenvolvimento das linguagens de alto nível, o objetivo da independência de
máquina foi amplamente alcançada. Dado que os comandos das linguagens de alto nível
não referenciam os atributos de uma dada máquina, eles podem ser facilmente
compilados tanto em uma máquina como em outra. Assim, um programa escrito em
linguagem de alto nível poderia, teoricamente, ser usado em qualquer máquina,
bastando escolher o compilador correspondente.
Em realidade, no entanto, provou não ser tão simples. Quando um compilador é
projetado, certas restrições impostas pela máquina subjacente são, em última instância,
refletidas como características da linguagem a ser traduzida. Por exemplo, o tamanho do
registrador e as células de memória de uma máquina limitam o tamanho máximo dos
inteiros que nela podem ser convenientemente manipulados. Disso resulta o fato de que,
5 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

em diferentes máquinas, uma “mesma” linguagem pode apresentar diferentes


características, ou dialetos. Conseqüentemente, em geral é necessário fazer ao menos
pequenas modificações no programa antes de move-lo de uma máquina para outra.
A causa deste problema de portabilidade é, em alguns casos, a falta de concordância em
relação à correta composição da definição de uma linguagem em particular. Para auxiliar
nesta questão, o American National Standards Institute (ANSI) e a International
Organization for Standardization (ISO) adotaram e publicaram padrões para muitas das
linguagens mais populares. Em outros casos, surgiram padrões informais, devido à
popularidade de um dados dialeto de uma linguagem e ao desejo, por parte de alguns
autores de compiladores, de oferecerem produtos compatíveis.

4.1.5 Linguagens estruturadas


Nesta classe, encaixam-se as chamadas linguagens de programação de alto nível
surgidas em meados dos anos 60. As linguagens concebidas neste período foram
resultado da necessidade da produção de código de programa de forma clara,
aparecendo o conceito de estruturação do código (endentação, utilização de letras
maiúsculas e minúsculas nos identificadores, eliminação de instruções “problemáticas”
como o “go to”, etc...).
O período compreendido entre a década de 60 e a de 80 foi bastante produtivo no que
diz respeito ao surgimento de linguagens de programação, o que permitiu o
aparecimento de uma grande quantidade de linguagens as quais podem ser organizadas
da seguinte forma:
 as linguagens de uso geral, as quais podem ser utilizadas para implementação de
programas com as mais diversas características e independente da área de aplicação
considerada; encaixam-se nesta categoria linguagens como Pascal, Modula-2 e C;
 as linguagens especializadas, as quais são orientadas ao desenvolvimento de aplicações
específicas; algumas das linguagens que ilustram esta categoria são Prolog, Lisp e Forth;
 as linguagens orientadas a objeto, que oferecem mecanismos sintáticos e semânticos de
suporte aos conceitos da programação orientada a objetos; alguns exemplos destas
linguagens são Smalltalk, Eiffel, C++ e Delphi.

4.2 Execução de Programas


Para que um programa possa ser executado, é preciso que seja transferido para a
memória principal. A maioria dos programas ficam armazenados em disco (disco rígido,
disquetes, etc.), mas a CPU não pode executar nenhum programa diretamente a partir
do disco. O programa precisa ser antes lido do disco e carregado na memória principal.
Por exemplo, para executar o programa FORMAT (usado para formatar disquetes), é
preciso que você forneça pelo teclado um comando como:
FORMAT A:
Uma vez que você digita este comando, o programa FORMAT.COM é lido do disco
rígido e carregado na memória principal. O “carregador” (loader) é o utilitário do sistema
operacional responsável pela cópia do programa do dispositivo de armazenamento para
a memória principal. A CPU pode então executar o programa, que fará a formatação de
um disquete. A 4.2 simboliza a leitura do programa FORMAT.COM a partir do disco para
a memória principal (essa operação é chamada de CARGA), e seu processamento pela
CPU (essa operação é chamada de EXECUÇÃO).
6 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

Φιγυρα 64.Carga e execução do programa FORMAT.COM


O sistema operacional é responsável pela leitura do arquivo FORMAT.COM e a
execução. O MS-DOS é um exemplo de sistema operacional. O WINDOWS também
pode ser considerado uma espécie de sistema operacional. Uma das várias funções do
sistema operacional é permanecer o tempo todo ativo na memória principal, esperando
que o usuário comande a execução de algum programa. Portanto, quando se usa um
comando como "FORMAT A:", o que ocorrer na verdade é o seguinte:
 Inicialmente o sistema operacional checa se você fornece algum comando.
 Você digita o comando "FORMAT A:".
 O sistema operacional procura no disco o arquivo FORMAT.COM e carrega-o na memória
RAM.
 O sistema operacional momentaneamente transfere o controle da CPU para o programa
FORMAT.COM, que a essa altura já está carregado na memória principal.
 A CPU executa o programa FORMAT.COM
 Ao terminar a execução do FORMAT.COM, o sistema operacional volta a ter o controle da
CPU. Fica então aguardando que você envie um novo comando.
Podemos entender então que nenhum programa chega até a memória por mágica, e
sim, através do controle feito pelo sistema operacional. Alguém mais observador pode
então ficar com a seguinte dúvida: "Se é o sistema operacional quem lê para a memória
principal todos os programas a serem executados, como é então que o próprio sistema
operacional chegou nesta memória?". No instante em que ligamos o computador, a
memória principal não contém programa algum. Nesse instante, o sistema operacional
está armazenado no disco (normalmente no disco rígido, no caso dos PC’s), e precisa
ser carregado na memória. Quem faz a carga do sistema operacional para a memória é
um programa chamado BIOS, que fica gravado em memória ROM. Lembre-se que a
memória ROM não perde seus dados quando o computador é desligado. Portanto, no
instante em que ligamos o computador, o BIOS já está na memória, e é imediatamente
processado pela CPU. O processamento do BIOS começa com uma contagem de
memória, seguido de alguns testes rápidos no hardware, e finalmente a leitura do
sistema operacional do disco para a memória principal. Esse processo, ou seja, a carga
do sistema operacional na memória RAM, é chamado de BOOT. A 4.2 mostra o
processo de BOOT para a carga do sistema operacional DOS:
1) No instante em que o computador é ligado, o sistema operacional está
armazenado em disco, a RAM está "vazia", e a CPU executa o BIOS.
2) Mostra o instante em que termina a operação de BOOT. O sistema operacional já
está carregado na memória e já está sendo executado pela CPU.
3) Mostra o que ocorre imediatamente antes da execução do programa
FORMAT.COM. O sistema operacional recebe um comando do usuário para que
leia o arquivo FORMAT.COM do disco para a memória RAM.
7 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

4) O programa FORMAT.COM está sendo executado pela CPU.

Φιγυρα 65.BOOT e carga de um programa

4.3 Desenvolvimento de Programas


O desenvolvimento de programas é associado ao uso de ferramentas ou ambientes de
desenvolvimento que acompanham o programador desde a etapa de codificação
propriamente dita até a geração e teste do código executável. Serão apresentadas a
seguir as principais etapas de geração de um programa, além das ferramentas
utilizadas. Mais adiante serão apresentadas metodologias mais completas que definem
os passos para o desenvolvimento de programas. Esta área da informática é chamada
de engenharia de software.

4.3.1Geração do código fonte (codificação)


A codificação é a escrita, utilizando uma linguagem de programação, das instruções que
o computador deve realizar para alcançar um resultado. Para a realização desta tarefa
são utilizados os chamados editores. Os editores são a primeira ferramenta à qual o
programador recorre na etapa de codificação, pois é através dela que será gerado o
arquivo (ou o conjunto de arquivos) que vai conter o código-fonte do programa a ser
desenvolvido.
Apesar de que é possível utilizar qualquer editor de linha (como por exemplo o EDIT do
DOS) para gerar o arquivo de programa, alguns ambientes oferecem ferramentas de
edição mais poderosas (orientadas à sintaxe ou de coloração de sintaxe). Alguns
ambientes mais recentes oferecem a possibilidade de projeto de interfaces gráficas e
gerenciadores de eventos, com geração automatizada do código-fonte.

4.3.2Tradução do Código Fonte (código objeto)


Independente da linguagem utilizada e da arquitetura do sistema computacional, o
código-fonte não é executável diretamente pelo processador. Ele permite apenas que o
programador consiga definir o programa em uma forma legível aos humanos. Para que
se possa obter o programa executável, é necessário que o código-fonte seja traduzido
para o código de máquina do processador que compõe a arquitetura do sistema.
Felizmente, isto é realizado de forma automática graças à existência de ferramentas
como os Montadores (ou Assemblers que, como o nome indica, são orientados para
traduzir programas escritos na linguagem Assembly) e os Compiladores, construídos
para gerar o código de programas originalmente escritos em linguagens de alto nível
8 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

como Pascal, C, Fortran e outras. O código gerado por estas ferramentas é representado
segundo o sistema de numeração binária e é denominado código-objeto.
O código-objeto é o código produzido pelo compilador. Ele se trata de uma forma
intermediária similar a linguagem de máquina do computador. O código-objeto, apesar
de estar representado em binário, não é auto-contido, ou seja, não é executável
diretamente pelos processadores. A principal razão disto é que o código-objeto é
caracterizado normalmente por referências a partes de programa que não estão
necessariamente definidas no mesmo arquivo que gerou o aquele arquivo objeto. Estas
outras partes do código do programa podem ter sido geradas a partir de outros arquivos
de código-fonte concebidos pelo mesmo programador ou existirem sob a forma de
arquivos de bibliotecas de sub-rotinas.
O processo de tradução do código fonte em código objeto compreende três atividades:
análise léxica, análise sintática e geração de código, que são processadas pelos
módulos do tradutor conhecidos como analisador léxico, sintático e gerador de código.
Análise léxica é o processo de reconhecer quais cadeias de símbolos do programa-fonte
representam entidades indivisíveis. Por exemplo, os três símbolos 153 não devem ser
interpretados como 1, seguido por 5, seguido por 3, mas são reconhecidos como um
valor numérico apenas. Do mesmo modo, as palavras que aparecem no programa,
embora compostas de caracteres individuas, devem ser interpretadas cada qual como
uma unidade inseparável. A maioria dos seres humanos executa a atividade de análise
léxica com um esforço consciente pequeno. Quando solicitados a ler em voz alta,
pronunciamos palavras completas, em vez de caracteres individuais.
Dado que o analisador léxico identifica um grupo de símbolos que representam uma
única entidade, ele a classifica como sendo ou um valor numérico, ou uma palavra, ou
um operador aritmético, e assim por diante, e gera um padrão de bits conhecido como
átomo (token), indicativo da classe do elemento. Esses átomos são os dados de entrada
do analisador sintático.
Análise sintática é o processo de identificação da estrutura gramatical do programa, e de
reconhecimento do papel de cada um dos seus componentes. O processo de análise
sintática é feito com base em um conjunto de regras sintáticas, que definem a sintaxe da
linguagem de programação. Uma forma de expressar tais regras é través de diagramas
de sintaxe, representações gráficas da estrutura gramatical de um programa. A 4.3.2
apresenta um diagrama de sintaxe do comando if-then-else existente em muitas
linguagens de programação. Este diagrama indica que uma estrutura if-then-else começa
com a palavra if, seguida de uma Expressão Booleana, seguida pela palavra then e,
finalmente, por um Comando. Esta combinação pode ser ou não seguida por uma
palavra else e outro Comando. Note que os termos de fato contidos num comando if-
then-else são representados em uma elipse, enquanto os que exigem explicação
adicional, tal como Expressão Booleana e Comando, estão em retângulo. Termos que
exigem explicação adicional (aqueles nos retângulos) são chamados não-terminais;
aqueles contidos nas elipses são os terminais. Na descrição completa da sintaxe de uma
linguagem, os não terminais são descritos por meio de diagramas adicionais.

if Expressão then Comando else Comando


Booleana

Φιγυρα 66.Diagrama de sintaxe do comando if-then-else


A 4.3.2 apresenta um diagrama de sintaxe que descreve a sintaxe de uma estrutura
chamada Expressão. Ela é formada por um Termo que pode aparecer isolado ou então
seguido pelos símbolos +, – e de outra Expressão. O segundo diagrama descreve um
Termo como sendo, na sua forma mais simples, uma variável, e em sua forma mais
complexa, qualquer Termo já construído, seguido de um símbolo * ou /, seguido de uma
Expressão.
9 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

Expressão:

Term Expressão

Termo:
/

Term Expressão

Variável

Φιγυρα 67.Diagrama de sintaxe descrevendo a estrutura de uma expressão algébrica simples


Pode-se representar, de forma gráfica, a maneira pela qual uma cadeia adere à sintaxe
descrita por um conjunto de diagramas de sintaxe, através de uma árvore sintática, como
ilustrado na 4.3.2, que apresenta uma árvore sintática para a cadeia x+y*z com base no
diagrama da figura acima. Note-se que a raiz da árvore é o não-terminal Expressão, e
que cada nível mostra a maneira como os não-terminais daquele nível vão sendo
decompostos, até que finalmente sejam obtidos os símbolos da própria cadeia analisada.

Expressão

Termo + Expressão

x
Termo

Termo * Expressão

y
Termo

Φιγυρα 68.Árvore sintática da cadeia x+y*z


O processo de análise sintática de um programa consiste, essencialmente, em construir
uma árvore de sintaxe para o programa-fonte. Por isso, as regras de sintaxe que
descrevem a estrutura gramatical de um programa não devem propiciar que duas ou
mais árvores de sintaxe distintas possam ser construídas para a mesma cadeia, dado
que isto levaria a ambigüidades no analisador sintático. Esta falha pode ser bastante
sutil. Com efeito, a própria regra da 4.3.2 contém esse defeito, pois aceita as duas
árvores de sintaxe mostradas na figura para o único comando seguinte:
If B1 then if B2 then S1 else S2
10 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

Comando

if Expressão then Comando else Comando


booleana

S2
B1

if Expressão then Comando


booleana

S1
B2

Comando

if Expressão then Comando


booleana

B1

if Expressão then Comando else Comando


booleana

S1 S2
B2

Φιγυρα 69.Duas árvores de sintaxe distintas para o comando if B1 then B2 then S1 else S2
Note-se que as duas interpretação são significativamente diferentes. A primeira implica
que o comando S2 será executado se B1 for falso, enquanto a segunda implica que S2
só será executado se B1 for verdadeiro e B2, falso.
As definições de sintaxe para linguagens formais de programação são projetadas para
evitar tais ambigüidades. Em muitas linguagens, evita-se tais problemas usando chaves,
ou então Begin-End. Em particular, escreveríamos:
If B1 then
Begin
if B2 then S1
End
else S2
e
If B1 then
Begin
if B2 then S1
else S2
End;

para distinguir as duas possibilidades.


À medida que um analisador sintático recebe átomos do analisador léxico, ele vai
analisando os comandos e ignorando os comentários. As informações extraídas das
declarações são tabeladas em uma estrutura conhecida como tabela de símbolos. Dessa
forma, a tabela de símbolos guarda informações sobre as variáveis declaradas, os tipos
de dados e as estruturas de dados associadas a tais variáveis. O analisador sintático,
então, utiliza como base estas informações ao analisar comandos tais como:
11 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

Total:=Custo+Imposto;

De fato, para determinar o significado do símbolo +, o analisador sintático deverá saber


qual o tipo de dados associados às variáveis Custo e Imposto. Se Custo for do tipo real e
Imposto for do tipo caractere, estão somar Custo e Imposto faz pouco sentido e deverá
ser considerado um erro. Se Custo e Imposto forem ambos de tipo inteiro então o
analisador sintático solicitará ao gerador de código a construção de uma instrução em
linguagem de máquina que utilize o código de operação correspondente à adição de
inteiros. Se, porém, ambos forem de tipo real, o analisador solicitará o uso do código de
operação correspondente à adição de valores em ponto flutuante.
O comando acima também tem sentido quando os dados envolvidos não forem do
mesmo tipo. Por exemplo, se Custo for inteiro e Imposto for real, o conceito de adição
ainda será aplicável. Neste caso, o analisador sintático poderá decidir que o gerador de
código construa as instruções necessárias para converter um dado de um tipo para
outro, antes de executar a adição. Tal conversão implícita entre tipos é denominada
coerção.
As operações de coerção são mal-vistas por muitos projetistas de linguagens. Eles
argumentam que a necessidade da coerção é um sintoma de falha no projeto do
programa, não devendo, pois, ser contornada pelo analisador sintático. O resultado é
que a maioria das linguagens modernas são fortemente tipadas, o que significa que
todas as ações solicitadas por um programa devem envolver dados de tipos compatíveis,
sem coerção. Analisadores sintáticos para estas linguagens consideram como erros
quaisquer incompatibilidade de tipo.
A geração de código, ação final do processo de tradução, é o processo de construção
das instruções, em linguagem de máquina. Este processo envolve numerosos
problemas, um dos quais é o da construção de um código eficiente. Por exemplo,
consideremos a tarefa de traduzir a seguinte seqüência de dois comandos:
x:=y+x;
w:=x+z;

Estes comandos poderiam ser traduzidos como comandos independentes. Todavia, esta
interpretação tende a não produzir um código eficiente. O gerador de código deve ser
construído de tal forma que seja capaz de identificar que, ao ser completado o primeiro
comando, os valores de x e de z já se encontram em registradores de propósito geral do
processador, não necessitando, pois, serem carregados a partir da memória para o
cálculo do valor de w. Melhorias como essa constituem a otimização de código, cuja
realização constitui importante tarefa do gerador de código.
Note-se que as análises léxica e sintática e a geração de código não são efetuadas em
ordem estritamente seqüencial, mas de forma intercalada. O analisador léxico começa
identificando o primeiro átomo e fornecendo-o ao analisador sintático. Já com esta pista
sobre a estrutura que vem a seguir, o analisador sintático solicita ao analisador léxico o
próximo átomo. À medida que o analisador sintático reconhece sentenças ou comandos
completos, vai ativando o gerador de código, para que este possa produzir as
correspondentes instruções de máquina.

4.3.3 Editores de ligação


A tarefa realizada pelo editor de ligações, ou linker como é mais conhecido é rearranjar o
código do programa, incorporando a ele todas as partes referenciadas no código original,
resultando num código executável pelo processador. Esta tarefa pode ser feita também
pelos chamados carregadores.
A figura abaixo resume as três etapas anteriores.
12 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

Código Código Código Código


Fonte Fonte Fonte Fonte

Código Código Código Código


Objeto Objeto Objeto Objeto

Biblioteca Programa
executável

Φιγυρα 70.Desenvolvimento de um programa

4.3.4 Depuradores ou debuggers


Os debuggers são assim chamados devido à sua função essencial que é de auxiliar o
programador a eliminar (ou reduzir) a quantidade de “bugs” (erros) de execução no seu
programa. Eles executam o programa gerado através de uma interface apropriada que
possibilita uma análise efetiva do código do programa graças à:
 execução passo-a-passo (ou instrução por instrução) de partes do programa;
 visualização do “estado” do programa através das variáveis e eventualmente dos conteúdos
dos registros internos do processador;
 alteração em tempo de execução de conteúdos de memória ou de variáveis ou de instruções
do programa;
 etc...

4.4 Paradigmas de programação


Do Assembly às linguagens mais sofisticadas de inteligência artificial, a programação
evoluiu para técnicas de programação de mais em mais transparentes frente à máquina,
numa tentativa de prover uma maior modularidade e um crescimento em desempenho e
expressividade.
Existem vários paradigmas de programação, que são estilos utilizados pelos
programadores para conceber um programa. A evolução das linguagens de
programação pode ser apresentada a partir da forma como os paradigmas de
programação evoluíram desde a programação não estruturada à programação orientada
a objetos. A seguir serão apresentados alguns destes paradigmas de programação.

4.4.1 Programação não-estruturada


Usualmente, pessoas aprendem a programação escrevendo programas pequenos e
simples, consistindo apenas de um programa principal. Aqui “programa principal”
significa uma seqüência de comandos ou declarações que modificam dados que são
acessível a todos os pontos do programa. Esta técnica de programação tem várias
desvantagens no caso de programas grandes. Por exemplo, se a mesma seqüência é
necessária em localizações diferentes ela deve ser copiada. Isto leva a idéia de extrair
estas seqüências, nomear elas e oferecer uma técnica para chamar e retornar destes
procedimentos.

4.4.2 Programação Procedural


Aqui um programa pode ser visto como uma seqüência de chamadas de procedimentos.
Um exemplo de procedimento clássico é o cálculo de uma raiz quadrada. Uma chamada
13 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

de procedimento é usada para invocar o procedimento, podendo ser passado alguns


parâmetros (por exemplo, o número cuja raiz quadrada deve ser calculada). Após a
seqüência ser executada, o controle retorna justo após o ponto de chamada do
procedimento. Introduzindo parâmetros tão bem quanto procedimentos de
procedimentos (sub-procedimentos), programas podem ser escritos mais em mais
estruturados e livres de erro. Por exemplo, se um procedimento é correto, toda vez que
ele é usado ele produz um resultado correto. Conseqüentemente, no caso de erros você
pode direcionar sua busca àqueles lugares que não são livres de erros.

4.4.3 Programação Modular


No passar dos anos, a ênfase no projeto de programas passou do projeto de
procedimentos para a organização dos dados, surgindo a programação modular. Nela,
procedimentos relacionados e dados que eles utilizam são agrupados em módulos
separados. Por exemplo, todas as funções de manipulação de uma pilha (empilhar,
desempilhar, etc.) e a pilha em si podem ser agrupadas em um módulo. Um programa
portanto não consiste mais de apenas uma parte única. Ele é agora composto de várias
pequenas partes que interagem através de chamadas de procedimento. Cada módulo
tem seus próprios dados. Isto permite que cada módulo gerencie um estado interno que
é modificado por chamadas a procedimentos deste módulo.

4.4.4 Programação Orientada a Objetos


Em contraste com as outras técnicas apresentadas, nós agora temos uma malha de
objetos que interagem, cada um mantendo seu próprio estado. A essência da
programação orientada a objetos consiste em tratar os dados e os procedimentos que
atuam sobre os dados como um único objeto – uma entidade independente com uma
identidade e certas características próprias. Este paradigma de programação será o
objeto de estudo deste curso.
Uma abordagem orientada a objetos identifica as palavras-chaves no problema. Estas
palavras-chaves são descritas então em um diagrama e setas são desenhadas entre
estas palavras-chaves para definir uma hierarquia interna. As palavras-chaves serão os
objetos na implementação e a hierarquia define a relação entre estes objetos. O termo
objeto é usado aqui para descrever uma estrutura bem definida, contendo todas as
informações sobre certa entidade: dados e funções para manipular os dados.
Os objetos introduzem uma maneira diferente de conceber, de programar, de analisar e
de manter as aplicações. Após um longo período de maturação em laboratórios de
pesquisa, as linguagens à objetos começam a invadir os domínios profissionais. É
possível hoje em dia dizer que não se trata de um modo, mas de um processo de
mutação. O principal argumento desses novos produtos inclui as facilidade de
reutilização de código e em conseqüência ganhos de produtividade são alcançados. A
reusabilidade depende em muito da modularidade dos programas.

4.4.5 Linguagens de programação e seus paradigmas


Uma linguagem de programação fornece o suporte a um estilo ou paradigma de
programação se ela fornece funcionalidades que a tornam conveniente para usar
determinado estilo. Uma linguagem não suporta uma técnica se é necessário esforços
excepcionais ou destreza para escrever tal programa: ela meramente habilita a técnica a
ser usada. Por exemplo, você pode escrever programas estruturados em Fortran e
programas orientados a objetos em C, mas isto é desnecessariamente difícil de fazer
porque estas linguagens não suportam diretamente estas técnicas. É de
responsabilidade do programador aplicar certa técnica de programação.

4.5 Linguagens Interpretadas


As etapas de desenvolvimento anteriores consideram que o uso de linguagens de
programação compiladas, ou seja, aquelas que produzirão um programa na forma da
14 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

linguagem de máquina do processador. Portanto, as instruções definidas pelo


programador usando uma linguagem de alto nível serão traduzidas para as instrução na
linguagens de máquina.
Existe outra forma de execução de um programa, que é a sua interpretação por um outro
programa, chamado interpretador. São as ditas linguagens interpretadas. A linguagem
Java é a linguagem de programação interpretada mais conhecida atualmente. Ela é
interpretada por uma máquina virtual chamada JVM (Java Virtual Machine).
Um interpretador é um programa que executa as instruções escritas em linguagem de
alto nível. Geralmente, o interpretador translada as instruções de alto nível em uma
forma intermediária, que é executada. Ao contrário do compilador que traduz as
instruções de alto nível em uma linguagem de máquina.

4.5.1 Compilador Versus Interpretador


Um programa compilado geralmente executa mais rapidamente que um programa
interpretado. A vantagem do interpretador é que ele não necessita passar por um estágio
de compilação durante a qual as instruções de máquina são gerados. Este processo
pode consumir muito tempo se o programa é longo. O interpretador, por outro lado, pode
executar imediatamente os programas de alto-nível. Por esta razão, os interpretadores
são algumas vezes usados durante o desenvolvimento de um programa, quando um
programador deseja testar rapidamente seu programa. Além disso, os interpretadores
são com freqüência usados na educação, pois eles permitem que o estudante programe
interativamente.
Tanto os interpretadores como os compiladores são disponíveis para muitas linguagens
de alto nível. Mas, Java, Basic e LISP são especialmente projetadas para serem
executadas por um interpretador.
Embora se obtenha um programa mais lento, algumas linguagens interpretadas tem
outra vantagem: a portabilidade. Como não é gerado um código de máquina, e sim um
código intermediário que será interpretado por uma máquina virtual, pode-se obter a
portabilidade do código se esta máquina virtual for desenvolvida para várias plataformas
(computadores diferentes). Este é o caso da linguagem Java.

4.5.2 Máquina Virtual


Uma máquina virtual é um ambiente operacional (ambiente onde os usuários executam o
programa) auto-contido que se comporta como se fosse um computador separado. Por
exemplo, uma applet Java executa em uma Máquina Virtual Java que não acessa ao
sistema operacional do computador hospedeiro. Este projeto tem duas vantagens:
 Independência de sistema: uma aplicação poderá ser executada em qualquer máquina virtual,
sem se preocupar com o hardware e software dando suporte ao sistema.
 Segurança: como a máquina virtual não tem contato com o sistema operacional, existem
poucas possibilidade de um programa interpretado danifique outros arquivos ou aplicações.
Esta vantagem trás consigo uma limitação: os programas executando em uma máquina virtual
não pode tomar vantagem das funcionalidades do sistema operacional

4.5.3 Java
Java uma das linguagens interpretadas mais conhecidas no momento. Ela é uma
linguagem de programação de alto nível, desenvolvida pela Syn Microsystems. Ela é
uma linguagem orientada a objetos similar ao C++, mas simplificada para eliminar
características que causam erros comuns de programação.
Códigos fontes de Java (arquivos com a extensão .java) são traduzidos na forma de um
código intermediário chamado bytecode (arquivos com a extensão .class), que podem
ser executados por um interpretador Java. O bytecode pode ser transferido através de
uma rede e executada por uma Máquina Virtual Java (JVM).
Existem várias implementações de JVM’s para diversos sistemas operacionais, incluindo
UNIX, Macintosh OS e Windows. Além disso, o bytecode pode ser convertido
15 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

diretamente em instruções de linguagem de máquina, usando o compilador JIT (Just-In-


time Compiler).
Java é uma linguagem de programação de propósito geral com um número de
características que fazer ela muito interessante para ser usada na World Wide Web.
Aplicações Java menores, chamadas applets, podem ser baixadas de um servidor Web e
executar no seu navegador por um navegador compatível com o Java, tal como o
Netscape Navigator ou o Microsoft Internet Explorer.

Φιγυρα 71.Criação e Execução de uma aplicação Java


16 Capítulo 4: Linguagens de Programação Prof. Roberto Willrich

Você também pode gostar