Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
Entradas
Memória de Memória de
Programas Processador Dados
Saídas
Barramento
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:
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
Φιγυρα 4.Pascaline
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 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
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.
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
Φιγυρα 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
Φιγυρα 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.
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
Φιγυρα 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
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
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, ...
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.
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.
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
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 =
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
A prova é:
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
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:
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.
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.
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
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
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”.
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).
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.
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).
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:
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.
1 8 23
(a)
(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
Pressão
de ar
Amplit ude
t empo
P eríodo
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.
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
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.
(011001101. .. )
Conversor Conversor
A/D D/A
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.
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);
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.
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.
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
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.
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.
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
Barramento
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.
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.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
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
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.
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.
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.
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
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
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 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.
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.
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.
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.
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.
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.
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.
Expressão:
Term Expressão
Termo:
/
Term Expressão
Variável
Expressão
Termo + Expressão
x
Termo
Termo * Expressão
y
Termo
Comando
S2
B1
S1
B2
Comando
B1
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;
Total:=Custo+Imposto;
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.
Biblioteca Programa
executável
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