Prof. Roberto Willrich - Departamento de Informática e...

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

Transcript of Prof. Roberto Willrich - Departamento de Informática e...

Page 1: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 2: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações
Page 3: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 4: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 5: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 DigitaisAtualmente, 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ÇÃOComputador pessoal IBM Pentium Tratamento de texto, aplicações

científicas, etcMinicomputador PDP-11/84 Tempo realSupermini Sun SPARC Pesquisa, servidor de arquivosMainframes IBM 3090/300 Banco, UniversidadeSupercomputador Cray-2 Cálculo

Page 6: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

1.3.1Modelo de Von NeumannA 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

PPrroocceessssaaddoorrMemória deProgramas

Memória deDados

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

PPrroocceessssaaddoorr

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.1PrecursoresO 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

Page 7: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 8: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 9: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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íticaEm 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.

Page 10: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 11: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 IO 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).

Page 12: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 13: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 14: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 15: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 16: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 17: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

SupercomputadoresA 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.

Page 18: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações
Page 19: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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árioO 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 DecimalSendo 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 10011001b = 1+8+16+128=153d

Conversão Decimal para BinárioNo 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 0100/2= 50 Resto 050/2 = 25 Resto 025/2 = 12 Resto 1

12/2 = 6 Resto 0 6/2 = 3 Resto 0

Page 20: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 OctalO 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 DecimalSendo 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 OctalPara 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 025/8 = 3 Resto 13/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 HexadecimalNa 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 101011b

(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 Decimal0000 00 00001 01 10010 02 20011 03 30100 04 40101 05 50110 06 6

Page 21: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

0111 07 71000 08 81001 09 91010 0A 101011 0B 111100 0C 121101 0D 131110 0E 141111 0F 15

Afim de obter um número hexadecimal em binário é apenas necessário inverter os passos.

Conversão Hexadecimal em DecimalPara 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 HexadecimalPara 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áriaEsta seção apresenta as quatro operações básicas no sistema binário: adição, subtração, divisão e multiplicação.

AdiçãoPara 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çãoExistem duas formas para fazer a subtração binária:

Page 22: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 01121 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: 01012. Realiza-se o complemento de dois do diminuidor: 1010+1=1011.3. Soma-se os dois operandos 1110+1011=110014. Despreza-se o transporte final: 1001

MultiplicaçãoA 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=1Exemplos:

Multiplicar os números 1011 e 1101.

Page 23: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Multiplicar os números 1001 e 1101.

DivisãoAnalogamente, 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.

Page 24: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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çãoComo 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 F8h + A34h é calculado da seguinte forma:

SubtraçãoVamos 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.

Page 25: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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çãoEsta 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:

Page 26: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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ãoEsta é 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:

Page 27: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

ANDA 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 = 00 and 1 = 01 and 0 = 01 and 1 = 1Uma 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 00 1 01 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”.

ORA operação lógica OR também é uma operação com dois operandos. Ela é definida como:

0 or 0 = 00 or 1 = 11 or 0 = 11 or 1 = 1

A tabela verdade da operação OR tem a seguinte forma: Op1 Op2 OR Op1 Op2

0 0 00 1 11 0 11 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).

XORA operação lógica XOR (ou exclusivo) também é uma operação com dois operandos. Ela é definida como:

Page 28: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

0 xor 0 = 00 xor 1 = 11 xor 0 = 11 xor 1 = 0

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

0 0 00 1 11 0 11 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.

NOTA operação lógica XOR (ou exclusivo) também é uma operação com um operando. Ela é definida como:

not 0 = 1not 1 = 1

A tabela verdade da operação NOT tem a seguinte forma:

Op1 NOT Op1 0 10 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úmerosAs 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 2n. Algumas strings de bits têm nomes próprio:

uma seqüência de 8 bits são chamados de byte

Page 29: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 bitsOs primeiros códigos utilizados foram os de 6 bits, que permitiam a representação de 26

= 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

Page 30: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 31: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

2.5.3 EBCDICO 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.

Page 32: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Φιγυρα 23.Caracteres ASCII estendidos

2.5.5IS O Latin-1ISO 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.

Page 33: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

2.5.7 Caracteres UnicodeWindows 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 InteirosPara 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:

Page 34: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 35: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 PuroO 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 FlutuanteUma 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 Fx10E, 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

Page 36: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 754Até 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.

Page 37: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

1

11

52

sinal Expoente Fração

(a)

(b)

Φιγυρα 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)0 x 20 x (1,0) = 1x20

− sinal: 0− expoente: 127+0 = 127 = 01111111− fração: 1 = 1 00000000000000000000000 (primeiro 1 é implícito)− 1 =00111111100000000000000000000000− 1 = 3F8000000H

-1,5 = 1x20 = (-1)1 x 20 x (1,5)

Page 38: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 754As características dos números flutuantes representados segundo o padrão IEEE são apresentados na tabela abaixo.

Precisão simples Precisão duplaBit de sinal 1 1Bit do expoente 8 11Bit da fração 23 52Número total de bits 32 64Codagem do expoente Excesso de 127 Excesso de 1023Variação do expoente -126 a +127 -1022 a +1023Menor 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

UnderflowO 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 zeroNa 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

OverflowAs 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

Page 39: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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çõesEsta 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ísicasInformaçõ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 ondaUm 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.

Amplitude

P eríodo

t empo

Pressãode ar

Φιγυρα 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.

Page 40: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Descrevendo imagens monocromáticas com variáveis físicasAs 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 ondaSe 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çãoSistemas 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.

ProcessamentoInformaçõ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;

Page 41: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

QualidadeSistemas 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çaSe segurança na comunicação é necessária, a representação digital da informação facilita a criptografia.

ArmazenamentoA 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ãoQualquer 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çãoEsta 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.

Page 42: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

AmostragemNesta 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.

76543210

010 110 110 010 011 110 111 110 100

Amplitude

(a)

(b)

(c)

(d)

T em po

T em po

T em po

Φιγυρα 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çãoA 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.

Page 43: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 bitsTaxa 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ógicaEm 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).

ConversorA/D

ConversorD/A

(011001101...)

Sinal Analógico Sinal AnalógicoSinal Digital

Φιγυρα 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 áudioA 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 canais

Taxa de amostragem

Bits por amostragem

Taxa de bits

CD-Audio 2 44.1 kHz 16 1,41 MbpsDAT 2 48 kHz 16 1,53 MbpsTelefone Digital 1 8 kHz 8 64 KbpsRádio digital, long play DAT 2 32 KHz 16 1,02 Mbps

Page 44: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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ógicosAs 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 ColoridosNesta 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]:

Page 45: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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ídeosA 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 DigitaisImagens 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 ImagensImagens 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 AnimadosAs 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.

Page 46: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 imagens10 à 16 Impressão de movimento mas com sensação de arrancos>16 Efeito do movimento começa24 Cinema30/25 Padrão de TV americana/européia60 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 AnimadosO 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 CorEsta seção procura apresentar a forma de especificação da cor na representação de imagens e vídeos digitais.

Propriedades da CorA 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).

Page 47: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Sistema de especificação de coresPara 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 RGBNo 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 2n 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 RGB

Máximo de cores

15 bits/pixel High Color (15 bits) 5 bits/pixel, 32 níveis por componente

32.768 cores

16 bits/pixel High Color (16 bits) 5/6 bits/pixel, 32/64 níveis por componente

65.536 cores

24 bits/pixel True Color, (24 bits) 8 bits/pixel, 256 níveis por componente

16.777.216 cores

Page 48: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 IndexadasNas 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/cor8 bits/pixel 256 cores indexadas 24 bits/cor

Cores fixasNas 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 CinzaA 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áriasAs 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)

Page 49: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 50: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações
Page 51: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 52: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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:

Page 53: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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éticaO 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(MHz)

REG (bits).

Barra-mento(bits)

N. de Transistores

Memória Endere-çável

Comentários

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-PC80286 1982 8-12 16 16 134.000 16 MB aumento no endereçamento (3-6x o

desempenho do 808680386DX 1985 16-33 32 32 275.000 4 GB primeira CPU 32 bits80386SX 1988 16-20 32 16 275.000 4 GB 80386 com barramento 8028680486 DX

1989 25-50 32 32 1.200.000 4 GB versão 80386 mais rápida

80486 SX 1989 16-33 32 32 1.185.000 4 GB 80486 sem coprocessador matemáticoPentium 1993 60-166 32 32 3.100.000 4 GB Arquitetura Super-escalar, 5x o

desempenho do 486DX 33 Pentium Pro

1995 150-200 32 64 5.500.000 4 GB Arquitetura de Execução dinâmica

Page 54: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Pentium II

1997 233-450 32 64 7.500.000 64 GB Barramento Duplo independente, execução dinâmica, e tecnologia MMX

Pentium II Xeon

1998 400-450 32 64 7.500.000 64 GB Para estações de trabalho e servidores

Pentium III

1999 450 a 1130

32 64 9.500.000 64 GB PCs de negócio e de consumidores, servidores e estações de trabalho

Pentium III Xeon

1999 500 e 550

32 64 9.500.000 64 GB PCs de negócio e servidores e estações 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:

Page 55: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 RegistradoresA 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.

Page 56: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

3.3.4 ClockClock é 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;

Page 57: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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ória00000 0000001 2300002 00... ...... ...FFFFE E4FFFFF FF

3.5.1 Memória PrincipalA 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.

Page 58: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

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

Tipos de memóriaOs 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.

Page 59: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Memória fora da placa mãeComo 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 RAMComo 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).

SRAMA 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 DRAMComo 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.

Page 60: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 61: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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:

Page 62: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 DRAMA 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.

Page 63: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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áriaAlé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.

Page 64: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

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

ArquivosArquivo 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.

Page 65: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

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

Discos RígidosEm 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.

Page 66: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

S e t o r

C i l i n d r o

T r i l h a

Φιγυρα 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éticasA 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 principalA 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

Page 67: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 CacheMemó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 CacheExistem 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.

Page 68: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Cache Primária – Layer 1A 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 2A 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 ExternasAs 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.

Page 69: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 processadorO 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

Page 70: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 CacheProcessadores 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óriaO 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.

Page 71: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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/SDesde 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 ISAEste 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

Page 72: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 MCACom 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 EISAEste 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 busOs 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).

Page 73: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 74: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 BusVESA 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 PCIPCI é 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.

Page 75: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 76: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 77: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 78: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 DispositivosA 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.

Page 79: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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áquinaLembrando 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

Page 80: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 00 0 1 0 1 0 1 1 0 0 1 0 1 1 0 01 0 0 0 0 1 0 1 1 0 1 0 0 1 1 10 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 HexadecimalPara 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 2039 03 30 39 73 63 F4 3A B4 74 84 AB 7D 6B 54 3584 47 F3 37 84 50 83 BC 5F 6C 10 39 85 85 94 4784 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 AssemblyEmbora 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).

Page 81: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 BADD AX,C ; AX recebe a soma de AX (valor de B) com o valor de CMOV 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 AssemblyMas 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

Page 82: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 AssemblyA 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ívelAs 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,

Page 83: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 estruturadasNesta 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).

Page 84: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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.

Page 85: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 86: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 Booleana

then Comando else Comando

Φιγυρα 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.

Page 87: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

-

Term Expressão

Expressão:

+

Term

/

Expressão

Termo:

*

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 +

x

Expressão

Termo *

y

Expressão

Termo

z

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

Page 88: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Comando

then if Expressão booleana

Comando else Comando

then if Expressão booleana

Comando

B1 S2

B2 S1

Comando

then if Expressão booleana

Comando

else Comando then if Expressão booleana

Comando

B1

S2 B2

S1

Φιγυρα 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 S1End

else S2e

If B1 then Begin

if B2 then S1else 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:

Page 89: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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çãoA 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.

Page 90: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Código Fonte

Código Fonte

Código Fonte

Código Fonte

Código Objeto

Código Objeto

Código Objeto

Código Objeto

Biblioteca

Programa executável

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

4.3.4 Depuradores ou debuggersOs 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-estruturadaUsualmente, 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 ProceduralAqui 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

Page 91: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 ModularNo 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 ObjetosEm 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 paradigmasUma 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

Page 92: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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 InterpretadorUm 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 VirtualUma 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 JavaJava 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

Page 93: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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

Page 94: Prof. Roberto Willrich - Departamento de Informática e Estatísticaricardo.silveira/INE5602/Apostila/ApostilaINE5602... · Computador pessoal IBM Pentium Tratamento de texto, aplicações

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