Índice. 1 Introdução 3



Documentos relacionados
Computador Digital Circuitos de um computador (Hardware)

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

UNIP - UNIVERSIDADE PAULISTA. Arquitetura de computadores

Introdução à Engenharia de Computação

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

ARQUITETURA DE COMPUTADORES

Organização e Arquitetura de Computadores I. de Computadores

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Arquitetura de processadores: RISC e CISC

Introdução à Engenharia de Computação

Conceitos e Evolução Capítulos 1 e 2

Organização e Arquitetura de Computadores I. de Computadores

Sumário. Organização de Computadores Módulo 3. Primeira Geração Válvulas ( ) Primeira Geração Válvulas ( )

Abstrações e Tecnologias Computacionais. Professor: André Luis Meneses Silva /msn: andreluis.ms@gmail.com Página: orgearq20101.wordpress.

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

Organização e Arquitetura de Computadores. Hugo Barros @hugobarros.com.br

2. NÍVEL DE SISTEMA OPERACIONAL

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados


Introdução. Uso do disco Vantagens Desvantagens Baixo custo, facilidade de manutenção do software e do hardware, simetria e flexibilidade

RISC X CISC - Pipeline

Aula 26: Arquiteturas RISC vs. CISC

Introdução à Organização de Computadores. Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

Conceitos Básicos de Rede. Um manual para empresas com até 75 computadores

Introdução à Arquitetura de Computadores

Montagem e Manutenção. Luís Guilherme A. Pontes

Memórias. O que são Memórias de Semicondutores? São componentes capazes de armazenar informações Binárias (0s e 1s)

Sistemas Operacionais. Prof. André Y. Kusumoto

Exercícios Teóricos Resolvidos

Medição tridimensional

Marcos da Arquitetura de Computadores (1)

ARQUITETURA DE COMPUTADORES

RESUMO DO LIVRO. A linguagem de máquinas e o custo são analisados antes do computador ser projetado. LINGUAGEM, NÍVEIS E MÁQUINA REAIS

Arquitetura e Organização de Computadores

Introdução a Banco de Dados Aula 03. Prof. Silvestri

Projeto de Circuitos. Introdução ao Computador 2008/01 Bernardo Gonçalves

Arquitetura de Rede de Computadores

Organização de Computadores 1. Prof. Luiz Gustavo A. Martins

Algoritmos DCC 119. Introdução e Conceitos Básicos

Máquinas Multiníveis

Informática I. Aula 5. Aula 5-13/05/2006 1

Aula 14: Instruções e Seus Tipos

Introdução à Computação: Sistemas de Computação

1. INTRODUÇÃO. Computador Digital: É uma máquina capaz de solucionar problemas através da execução de instruções que lhe são fornecidas.

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Introdução à Engenharia de Computação

2. A influência do tamanho da palavra

Hamtronix CONTROLE REMOTO DTMF. CRD200 - Manual de Instalação e Operação. Software V 2.0 Hardware Revisão B

Arquitetura de Computadores Moderna

Professor: Venicio Paulo Mourão Saldanha Site:

Capítulo 1 Introdução

Organização de Computadores Como a informação é processada?

Técnico em Informática - Instalação e Manutenção de Computadores PROCESSADORES

Introdução à Sistemas Operacionais. Glauber Magalhães Pires

Unidade 5: Sistemas de Representação

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Conceitos básicos da linguagem C

agility made possible

TÉCNICAS DE PROGRAMAÇÃO

Alguma das vantagens e desvantagens dos computadores ópticos é apresenta a seguir.

1. NÍVEL CONVENCIONAL DE MÁQUINA

Sistemas Microcontrolados

Visão Geral da Arquitetura de Computadores. Prof. Elthon Scariel Dias

Introdução a Organização de Computadores Aula 4

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Guia de utilização da notação BPMN

Descrição do Produto. Altus S. A. 1

Organização de Computadores Software

PROCESSADOR. Montagem e Manutenção de Microcomputadores (MMM).

O processador é um dos elementos componentes do computador moderno, sendo responsável pelo gerenciamento de todo o computador.

Introdução à Arquitetura de Computadores

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 3

Curso Técnico em Redes de computadores. Evolução Histórica dos Computadores

Sistemas Operacionais

Sistemas Operacionais. Prof. André Y. Kusumoto

SIS17 - Arquitetura de Computadores

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Capítulo 4 Gerenciamento de Memória

Manual do Teclado de Satisfação Online WebOpinião

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Trabalho sobre No-breaks

Introdução à Arquitetura de Computadores. Prof.ª Ms. Elaine Cecília Gatto

Aula Memória principal e 2. Memória de armazenagem em massa.

Sistemas Operacionais

Invenções Implementadas por Computador (IIC) Patentes

Algoritmos e Programação Parte Teórica

Aula 4 Estatística Conceitos básicos

Todos os microprocessadores hoje disponíveis em micros compatíveis com PC utilizam o funcionamento do como ponto de partida.

3.1 Definições Uma classe é a descrição de um tipo de objeto.

HISTÓRIA DA COMPUTAÇÃO

Evolução dos Processadores

Memória cache. Prof. Francisco Adelton

SSC510 Arquitetura de Computadores. 2ª aula

Paralelismo a Nível de Instrução

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Transcrição:

Índice 1 Introdução 3 1.1 Organização Estrutura de Computadores 3 1.1.1 Linguagens, Níveis e Máquinas Virtuais 3 1.1.2 Máquinas de Vários Níveis Modernas 6 1.1.3 Evolução das Máquinas de Vários Níveis 8 2 Organização de Sistemas Computacionais 12 2.1 Processadores 12 2.1.2 Execução de Instruções 12 2.1.3 RISC versus CISC 13 2.1.4 Princípios de Projeto para Computadores Modernos 15 2.1.5 Paralelismo no Nível das Instruções 16 2.1.6 Paralelismo no Nível do Processador 19 3 Organização de Sistemas Computacionais 23 3.1 Portas Lógicas e a Álgebra de Boole 23 3.1.1 Portas Lógicas 23 3.2 Circuitos Integrados 25 4 Circuitos Integrados 29 4.1 Encapsulamento e Pinagem de Circuitos Integrados 31 4.2 Tecnologia de Soldagem em Superfície 34 5 Evolução dos Microprocessadores 38 5.1 Os Primeiros Microprocessadores da Intel 38 5.2 Os Microprocessadores 8086 e 8088 40 5.3 O 80286 42 5.4 O 80386 46 5.5 O 80486 54 5.6 O Pentium 75 5.7 - Pentium MMX 89 5.8 Processadores de 6ª Geração 95 5.8.1 Pentium Pro 102 2

1 Introdução Um computador digital é uma máquina que pode resolver problemas executando uma série de instruções que lhe são fornecidas. Um programa é um conjunto de instruções que descrevem a maneira de se realizar uma determinada tarefa. Os circuitos eletrônicos de um computador podem reconhecer e executar um conjunto limitado de instruções simples, nas quais um programa precisa ser convertido antes que possa ser executado. Em geral, essas instruções não são mais complicadas que: Somar 2 números Comparar o valor de número com zero. Copiar um conjunto de dados de uma parte da memória para outra parte. Tomadas em conjunto, as instruções básicas de um determinado computador formam uma linguagem por meio da qual é possível às pessoas se comunicar com a máquina. Essa linguagem é a Linguagem de máquina. Os projetistas de um computador precisam decidir quais instruções devem fazer parte da sua linguagem de máquina. Em geral, as instruções básicas são tão simples quanto possível, compatíveis com o uso que se pretende dar ao computador e com a performance que se deseja atingir, de maneira a reduzir o custo e a complexidade da eletrônica necessária à sua implementação. Em decorrência do fato de as linguagens de máquina serem muito simples, seu uso torna-se difícil e tedioso para os programadores (linguagem nível 1 - N1). 1.1 Organização Estrutura de Computadores Como a linguagem de máquina é tediosa para o programador, os computadores podem ser definidos de uma maneira estruturada, tratando-os como uma série de abstrações, sendo cada uma dessas abstrações construída com base naquela situada imediatamente abaixo. 1.1.1 Linguagens, Níveis e Máquinas Virtuais A solução para a programação dos computadores pode ser obtida com o emprego de duas metodologias diferentes, ambas envolvendo o projeto de um novo conjunto de instruções mais conveniente para os usuários do que as instruções da linguagem de máquina, nativas do processador. Tomadas em conjunto, essas novas instruções também formam uma linguagem, chamada L1, da mesma maneira que as instruções de máquina formam uma linguagem L0. As duas metodologias diferem na maneira como os programas escritos em L1 serão executadas pelo processador, que, afinal, só pode executar programas escritos em sua linguagem de máquina, L0. A primeira das metodologias empregadas para a execução de programas escritos em L1 é substituir cada uma 3

de suas instruções por uma seqüência equivalente de instruções escritas em L0. O processador então executa o novo programa expresso em linguagem L0, em substituição ao primeiro, escrito em L1. Essa técnica é conhecida como tradução. Tradução: antes de executar um programa, as instruções de um programa são convertidos para uma linguagem mais simples. Ex: L1 L0 (Pascal, C, etc). A outra metodologia consiste em escrever programas em L0 que admitam como entrada programas escritos em L1. Esta técnica não requer a geração de um novo programa em L0. Ela é conhecida como interpretação, sendo o programa que a implementa conhecido como interpretador. Interpretação: o programa escrito em L0 recebe os programas escritos em L1 como dados de entrada e efetiva a execução examinando uma instrução de cada vez e executando a seqüência equivalente de instruções em L0 diretamente. Ex: HTML. Tradução Vantagem: - O programa é compilado, desta maneira, pode-se verificar a existência de erros e apontá-los. - Depois de compilado, o programa é convertido para a linguagem de máquina, gerando um arquivo executável (.EXE), onde o código fonte é protegido. - Uma vez que o programa é traduzido, este se torna mais rápido, pois é executado em linguagem de máquina. Desvantagem: - Uma vez que o programa é traduzido para outra linguagem, deve-se guardar o arquivo do código fonte bem seguro, pois dificilmente pode-se fazer o caminho inverso com o arquivo.exe. - Deve-se compilar e traduzir o programa toda vez que for necessário fazer uma alteração no mesmo. Interpretação Vantagem: - Não é necessário compilar o programa. - Pode-se ver o código fonte de outros programas e utilizar seus códigos. - Para qualquer alteração que é feita no programa, somente é necessário fazer o programa interpretar o código novamente para valer as novas alterações. Desvantagem: - O programa é interpretado toda vez que é executado, sendo um trabalho mais demorado que executar o programa compilado. - Como o programa não é compilado, não é verificada a existência de erros. - O código fonte não é protegido. 4

Em vez de pensar em tradução ou em interpretação, pode-se imaginar a existência de um computador hipotético, ou de uma máquina virtual, cuja linguagem de máquina seja L1. Se esta máquina pudesse ser construída e seu preço não fosse muito alto (quanto maior a complexidade dos dispositivos físicos, mais caro o computador), não haveria necessidade da linguagem L0. Os programadores poderiam simplesmente escrever seus programas em L1 e ter um computador para executa-los diretamente. Mesmo considerando que uma máquina virtual com as características da máquina de nível 1 seja muito complicada e/ou muito cara para ser implementada por meio de circuitos eletrônicos, os programadores poderiam, ainda assim, escrever programas para elas. Tais programas poderiam ser traduzidos ou interpretados por um programa escrito em L0, e portanto, possível de ser executado diretamente pelo computador real. Em outras palavras, os programadores podem escrever programas para máquinas virtuais como se elas realmente existissem. Para tornar a tradução ou a interpretação uma tarefa prática, as linguagens L1 e L0 não podem ser muito diferentes. Essa restrição significa que, na maioria dos casos, apesar de L1 ser melhor que L0, ela ainda está muito longe do ideal para a maioria das aplicações. Isto resulta na frustração da expectativa de livrar o programador dos problemas de ter que expressar algoritmos em uma linguagem mais apropriada a máquinas do que os humanos. Uma solução óbvia seria inventar um outro conjunto de instruções mais próximo das pessoas e mais distantes das máquinas do que o L1. Esse terceiro conjunto forma uma linguagem chamada L2. De maneira análoga ao raciocínio anterior, as pessoas podem escrever programas em L2 como se a máquina realmente existisse. Tais programas podem ser traduzidos para L1 ou executados por um interpretador escrito em L1. A criação de toda uma série de linguagens, cada uma das quais mais conveniente do que suas antecessoras, pode prosseguir indefinidamente, até a obtenção de uma que sirva aos propósitos dos programadores. Cada linguagem usa sua antecessora como base, de modo que um computador que use essa técnica pode ser visto como um conjunto de camadas ou níveis. A linguagem ou nível mais baixo é o mais simples, enquanto a linguagem ou nível mais alto é o mais sofisticado. 5

LN L3 L2 L1 L0 Computador real Apenas programas escritos em L0 poderão ser executados diretamente por circuitos eletrônicos, sem a intervenção de tradutores ou de interpretadores. Os programas escritos em L1, L2,..., Ln precisam ser interpretados por um interpretador que execute em um nível mais baixo, ou traduzido para uma nova linguagem, associada a um nível mais baixo. Um programador cuja tarefa seja escrever programas para máquina virtual do nível n nem precisa saber da existência dos tradutores e dos interpretadores eventualmente envolvidos no processo de execução de programas escritos em Ln. A estrutura da máquina deve assegurar a execução desses programas. Para o programador da máquina virtual do nível n, não há qualquer interesse no fato de seus programas serem executados passo a passo por um conjunto de interpretadores, ou se eles são executados diretamente pelos circuitos eletrônicos da máquina. O mesmo resultado é obtido em ambos os casos: seus programas são executados. 1.1.2 Máquinas de Vários Níveis Modernas A grande maioria dos computadores modernos é formada de dois ou mais níveis. Abaixo é mostrada uma máquina com seis níveis. O nível 0 é o mais baixo, é composto pelo hardware da máquina. Seus circuitos executam programas na linguagem da máquina nível 1. Na verdade, deve ser mencionada a existência de um outro nível, situado abaixo do nível 0. Esse nível, conhecido como nível dos dispositivos pertence ao domínio da engenharia elétrica. Nesse nível, o projetista trabalha com os transistores, que são o que há de mais básico para os projetistas de computadores. 6

Nível 5 Linguagem orientada para problemas Programador Tradução (compilador) Linguagem com palavras e abreviaturas Nível 4 Nível de linguagem de montagem Tradução (montador) Execução dos interpretadores e tradutores (programadores de sistemas) Linguagem numérica Nível 3 Nível 2 Nível 1 Nível 0 Nível de sistema operacional Interpretação parcial (S.O.) Nível de máquina convencional Interpretação (microprograma) Nível de microprogramação (microprograma) Os microprogramas são executados diretamente pelo hardware Nível de lógica digital (Portas (transistores)) No nível mais baixo, encontra-se o nível da lógica digital, cujos objetivos de interesse são conhecidos como portas lógicas. O nível 1 é o nível da microprogramação. Nesse nível, há um conjunto de 8 a 32 registradores que formam uma memória local e um circuito chamado ULA (Unidade Lógica Aritmética) que é apta a realizar operações aritméticas muito simples. Nesse nível há o microprograma, responsável por buscar dados decodificá-los e executar instruções. Ex: uma instrução SOMA (ADD), a instrução deve ser buscada na memória, seus operandos devem ser localizados e trazidos para os registradores, a soma deve ser calculada na ULA, e finalmente o resultado da soma deve ser encaminhado para o lugar apropriado. O nível 2 é um nível conhecido nível da máquina convencional. Todos os fabricantes publicam um manual, para cada um dos modelos de máquina que vendem, intitulado Manual de Referência da Linguagem de Máquina, contendo as instruções da máquina. Ex: pc = pc + 1 fetch goto(mbr) goto Main 1 O nível 3 geralmente é um nível híbrido. A maioria das instruções de sua linguagem também pertencem ao nível 2 (não há razão para que uma instrução não possa pertencer a mais de um nível na estrutura). Além dessas instruções, comuns ao nível 3 e ao nível 2, esse nível suporta um conjunto de novas instruções, uma organização diferente de memória, a capacidade de executar dois ou mais programas simultaneamente, além de diversas outras características. 7

Algumas das instruções do nível 3 são interpretadas pelo sistema operacional e outras são diretamente pelo microprograma ou pelo hardware, por isso, é um nível híbrido. Existe uma diferença fundamental entre o nível 3 e o nível 4. Os três níveis mais baixos da máquina não são projetados para serem usados pela grande maioria dos programadores. Em vez disso, eles são projetados com o objetivo de executar os interpretadores e tradutores necessários para suportar os demais níveis. Esses interpretadores e tradutores são escritos por pessoas conhecidas como programadores de sistema. Uma outra mudança ocorrida no nível 4 é quanto à maneira de suportar os níveis mais altos. Os níveis 2 e 3 são sempre interpretados. Os níveis 4, 5 e acima são em geral, mas nem sempre suportados por tradução. As linguagens de máquina dos níveis 1, 2 e 3 são numéricas. Os programas nessas linguagens são constituídos de uma longa série de números, muito interessante para as máquinas, mas extremamente desconfortáveis para as pessoas. A partir do nível 4, as linguagens de cada um dos níveis contêm palavras e abreviações que fazem algum sentido para as pessoas. O nível 4 corresponde à linguagem de montagem, nada mais é que uma forma simbólica de representação das linguagens dos níveis mais baixos. Esse nível fornece um método para as pessoas escreverem programas para os níveis 1,2 e 3 em uma forma não muito desconfortável. Os programas na linguagem de montagem são primeiro traduzidos para a linguagem dos níveis 1,2 ou 3 e então interpretados pela máquina virtual apropriada ou pela máquina real. O programa que realiza essa tradução é chamado de montador. As linguagens do nível 5 em geral são projetadas para serem usadas por programadores de aplicação, com algum problema a ser resolvido. Tais linguagens são conhecidas como linguagens de alto nível. Existem centenas dessas linguagens. Algumas das mais conhecidas são BASIC, C, C++, Java, LISP e Prolog. Os programas escritos nessas linguagens são em geral traduzidos para os níveis 3 ou 4 por tradutores conhecidos por compiladores, apesar de, em alguns casos, essas linguagens serem interpretadas. 1.1.3 Evolução das Máquinas de Vários Níveis Os programas escritos na verdadeira linguagem de máquina de um computador (nível 1) podem ser executados diretamente pelos circuitos eletrônicos (nível 0) desse computador, sem necessidade da intervenção de interpretadores ou de tradutores. O hardware é constituído por objetos físicos circuitos integrados, placas de circuito impresso, cabos, fonte de alimentação, memória, impressora em vez de idéias abstratas, como algoritmos ou instruções (software). Qualquer operação realizada por software pode também ser realizada diretamente por hardware, de preferência depois de ser bem entendida e bem depurada. A recíproca é verdadeira: quaisquer instruções executadas por hardware podem também ser simulada em software. A decisão de colocar em hardware certas funções deixando outras implementadas em software baseia-se 8

em fatores como custo, velocidade, confiabilidade e freqüência esperada de mudanças. Existem poucas regras confiáveis para subsidiar a decisão de implementar uma operação X em hardware e de programar uma outra operação Y. 1.1.3.1 A invenção da Microprogramação Os primeiros computadores digitais na década de 1940 tinham somente dois níveis: o nível de máquina convencional, na qual toda a programação era feita, e o nível da lógica digital, onde esses programas eram executados. Os circuitos da lógica digital eram complicados, difíceis de entender e de construir, além de pouco confiáveis. Em 1951, Maurice Wilkes, um pesquisador da Universidade de Cambridge, sugeriu a idéia de se construir um computador em três níveis, a fim de simplificar bastante o hardware. Essa máquina deveria ter acoplado a si um interpretador (o microprograma), cuja função era executar somente microprogramas, que tinham um conjunto de instruções muito limitado, em vez de programas no nível de máquina convencional, que tinha muito mais instruções, um computador construído nessas bases precisava de bem menos circuitos eletrônicos. Como os computadores da época eram construídos com válvulas, a diminuição do número desses componentes aumentava em muito a confiabilidade do hardware. 1.1.3.2 A invenção do Sistema Operacional Nos primórdios da computação eletrônica, a maioria dos computadores era operada pelo próprio programador. Próximo a cada máquina havia uma lista de assinaturas. O programador que desejasse usar a máquina para rodar um de seus programas precisava assinar a lista, marcando um dos horários disponíveis. Muitos dos programadores preferiam trabalhar de madrugada, quando a sala da máquina estava mais calma. Na hora marcada, o programador devia dirigir-se à sala da máquina com o conjunto de cartões perfurados nas mãos. Se o objetivo fosse executar um programa em FORTRAN, era necessário cumprir os seguintes passos: 1- Dirigir-se ao arquivo físico onde eram guardados os programas da biblioteca da máquina e localizar o imenso deck de cartões verdes, identificado como compilador FORTRAN, e colocá-lo na leitora de cartões e pressionar o botão de início de operação da leitora. 2- Colocar o programa FORTRAN a ser executado na leitora de cartões e apertar o botão de continuação da operação. O programa era lido. 3- Quando o computador parava, era necessário colocar o programa FORTRAN mais uma vez na leitora, pois a maioria dos compiladores da época era de dois passos. 9

4- Finalmente a tradução estava quase completa. Se o compilador encontrasse algum erro no programa o programador deveria corrigi-lo e repetir todo o procedimento. Se não houvesse erro, o compilador perfurava um conjunto de cartões com o programa traduzido para a linguagem de máquina. 5- O programador então colocava o programa em linguagem de máquina na leitora de cartões para serem lidos. 6- Começava então a execução do programa. Em geral o programa não funcionava bem, parando inesperadamente a execução antes de seu término. Nesse caso o programador devia examinar um conjunto de luzes do painel de controle, procurando identificar o erro. Com sorte, o erro era identificado, corrigido e todo o processo recomeçava, desde a compilação até nova execução. Se o erro não fosse identificado, o programador devia comandar uma descarga do conteúdo da memória e levá-la para casa para estudo. Esse procedimento, com pequenas alterações dependendo do caso, era o procedimento normal adotado em todos os centros de processamento de dados por anos e anos a fio. Ele forçava os programadores a aprender como operar a máquina e como proceder em caso de problemas, que na época eram muito comuns. Por volta de 1960, os técnicos estavam procurando uma forma de reduzir o tempo gasto na execução de programas, automatizando os trabalhos de operação da máquina. Um programa chamado sistema operacional, era mantido na memória do computador durante todo o tempo em que estivesse sendo utilizado. O programador devia preparar alguns cartões de controle com base nos quais seu programa era lido e executado automaticamente pela máquina, sob controle do sistema operacional. Programa FORTRAN *Fortran Cartões de dados *Data *End Cartões com asteriscos eram usados para identificações de cartões de dados e com cartões de código. O sistema operacional lia o cartão *FORTRAN, que era uma instrução para carregar o compilador FORTRAN para a memória, vindo da fita magnética. O compilador lia e compilava o programa em FORTRAN. 10

Ao terminar o processo de compilação, o controle retornava ao sistema operacional, que então lia o cartão *Data. Este cartão continha uma instrução para que o programa traduzido fosse executado, usando como dados os valores dos cartões de dados que seguiam o cartão *Data. Apesar de ter sido projetado para automatizar o trabalho do operador (daí seu nome), o sistema operacional foi também o primeiro passo para o desenvolvimento de uma nova máquina, seguindo o conceito de máquina virtual. Observe que o cartão *FORTRAN pode ser visto como uma instrução virtual de execução de programa. Um nível com apenas duas instruções não pode ainda ser caracterizado como um novo nível, mas como um passo nessa direção. 11

2 Organização de Sistemas Computacionais Um computador eletrônico digital é um sistema composto por um conjunto de processadores, memórias e dispositivos de entrada/saída interligados. 2.1 Processadores A figura abaixo mostra a organização de um computador em torno de um barramento. Processador Unidade de controle Unidade Aritmética Lógica (ULA) Dispositivos de E/S Registradores Memória principal Disco Impressora Barramento 2.1.2 Execução de Instruções Para ser executada pelo processador, uma instrução precisa ser dividida em uma série de pequenos passos. Esses passos são: 1)- Busca da próxima instrução na memória e armazenamento da instrução no registrador de instruções (IR). 2)- Atualização do valor do program counter (PC), fazendo-o apontar para a instrução seguinte. 3)- Determinação do tipo da instrução que está armazenada no registrador de instruções. 12

4)- Se a instrução precisar de uma palavra armazenada na memória, nesse passo deve ser determinado onde essa palavra está armazenada. 5)- Busca da palavra, se necessário, e armazenamento em um dos registradores do processador. 6)- Execução da instrução. 7)- Retorno ao passo 1 para iniciar a execução da instrução seguinte. Essa seqüência de passos é conhecida como ciclo da buscadecodificação-execução. Trata-se de uma seqüência muito importante para a operação de todos os processadores que seguem o modelo de Von Neumann. 2.1.3 RISC versus CISC Nos últimos anos da década de 1970, a técnica dominante para projeto de processadores privilegiava as instruções muito complexas, cuja implementação era muito simples com o emprego do interpretador. Os projetistas estavam tentando minimizar o chamado gap mecânico, à distância entre aquilo que a máquina podia realizar e aquilo que as linguagens de programação de alto nível exigiam. Na época, quase ninguém pensava em projetar sistemas operacionais, redes, processadores de texto, etc, menos poderosos. O contraponto à filosofia de projeto que privilegiava instruções complexas começou com um grupo de pesquisa da IBM, liderado por John Cocke, que estava tentando incorporar a um minicomputador chamado 801. Apesar de a IBM nunca ter comercializado essa máquina e de os resultados dessa pesquisa só terem sido publicados muitos anos depois, vazaram informações sobre ela, e, como conseqüência, outros grupos começaram a investigar arquiteturas similares. Em 1980, um grupo liderado por David Patterson e Carlo Séquin, em Berkeley, desenvolveu chips processadores VLSI que não usavam interpretação. Para designar esse conceito eles cunharam o termo RISC, e deram ao chip desenvolvido por eles nessa filosofia o nome RISC I. Esse chip foi quase imediatamente seguido pelo RISC II, projetado pelos mesmos dois pesquisadores. Pouco mais tarde, em 1981, John Hennessy, pesquisador de Standford, projetou e fabricou um chip diferente, ao qual ele deu o nome de MIPS. Esse chip veio a transformar-se em um sucesso comercial, gerando produtos famosos como o chip SPARC e o chip MIPS. Esses novos processadores eram muito diferentes dos processadores comercializados na época. Considerando que tais processadores não precisavam ser compatíveis com nenhum outro, seus projetistas tinham toda a liberdade para escolher novos conjuntos de instruções que viessem a maximizar a performance do sistema. Apesar de a ênfase inicial ter privilegiado instruções simples, que pudessem ser executadas rapidamente, logo ficou clara a importância de se 13

projetarem instruções que pudessem ser iniciadas prontamente (iniciar uma instrução antes de terminar a execução de outras), como questão fundamental para a boa performance. O tempo que uma instrução leva para ser executada passou a importar menos do que a quantidade de instruções que pudessem ser iniciadas em um segundo. Na época em que esses processadores simples estavam sendo projetados, a característica que chamavam a atenção de todos era seu pequeno número de instruções, em torno de 50. Esse número era bem menor que as 200 a 300 instruções dos processadores que estavam instalados nos computadores que lideravam o mercado, a exemplo da família VAX da DEC e dos grandes mainframes da IBM. A abreviatura RISC quer Reduced Instruction Set Computer (Computador com Conjunto de Instruções Reduzidas), que contrastava com a técnica CISC, que quer dizer Complex Instruction Set Computer (Computador com Conjunto de Instruções Complexas). Começou uma guerra santa com os adeptos da filosofia RISC atacando a ordem estabelecida (VAX, Intel e IBM). Eles defendiam a tese de que a melhor maneira de se projetar um processador era com um pequeno número de instruções, todas muito simples, capazes de serem executadas em um ciclo do caminho de dados, buscando o conteúdo de dois registradores, operando-os de alguma maneira e guardando o resultado em um registrador. O argumento dos adeptos da filosofia RISC era que mesmo que uma máquina RISC precisasse de quatro ou cinco instruções para fazer o que uma máquina CISC faria em apenas uma, se as instruções RISC fossem 10 vezes mais rápidas (por não serem interpretadas) a máquina RISC venceria em desempenho. Pode-se pensar que em função da melhor performance da tecnologia RISC, as máquinas projetadas nessa tecnologia (como, por exemplo, as máquinas com o chip Alpha da DEC) torna-se-iam um sucesso de vendas, suplantando as máquinas projetadas na tecnologia CISC (como por exemplo, as máquinas com o chip Pentium da Intel) Nada disso aconteceu. Por que não? Em primeiro lugar, existe a questão da compatibilidade com máquinas mais antigas, havendo empresas que têm bilhões de dólares investidos em software para a linha Intel. Portanto, mudar de arquitetura significaria, na prática, jogar no lixo esse investimento. Em segundo lugar, surpreendentemente, a Intel tem-se enforcado por utilizar as idéias básicas do projeto RISC em suas máquinas cuja filosofia do projeto é CISC. A partir do 486, a Intel passou a projetar seus processadores com um núcleo RISC, núcleo esse responsável pela execução das instruções mais simples (e, conseqüentemente, mais freqüentes) em um único ciclo do caminho de dados, enquanto as instruções mais complexas são interpretadas, forma clássica de execução de instruções na filosofia CISC. Como resultado, as instruções mais comuns são executadas rapidamente, enquanto as menos comuns demoram um tempo maior para serem executadas. Apesar de não ser tão rápida quanto à metodologia RISC pura, essa metodologia de projeto híbrida é suficiente para manter a compatibilidade dessas máquinas híbridas, além do fato de elas permitirem que o software desenvolvido para as máquinas executem sem modificação nas máquinas mais novas, projetada segunda a tecnologia híbrida. 14

2.1.4 Princípios de Projeto para Computadores Modernos Alguns dos princípios que a maioria dos projetistas de computadores modernos se esforça para alcançar são: Todas as Instruções São Diretamente Executadas por Hardware Todas as instruções das máquinas RISC são executadas diretamente pelo hardware. Nenhuma delas é interpretada por microinstruções. A eliminação de um nível de interpretação resulta em uma velocidade de execução bastante rápida para a maioria das instruções de uma máquina RISC. Para aqueles processadores cujo conjunto de instruções siga a filosofia CISC, as instruções mais complexas podem ser divididas em várias partes, cada uma das quais sendo executada por uma seqüência de microinstruções. Esse passo extra, a interpretação, torna a máquina mais lenta, porém, como ela só é empregada nas instruções que ocorrem com menos freqüência, isso pode ser tolerado. Maximizar a Taxa à qual as Instruções São Executadas Os computadores modernos utilizam muitos artifícios com o objetivo de maximizar a sua performance, buscando principalmente executar o máximo possível de instruções por segundo. No fim das contas, se você puder executar 500 milhões de instruções por segundo, você terá um processador de 500 MIPS 1, independentemente do tempo que cada instrução efetivamente leva para ser executada. Esse princípio sugere que o paralelismo pode ter um papel muito importante na melhora da performance, considerando que a execução de um grande número de instruções lentas em um curto intervalo de tempo só é possível se várias instruções forem executadas ao mesmo tempo. As instruções Precisam Ser Facilmente Decodificadas A decodificação é um dos processos críticos que mais influenciam a velocidade de execução de instruções. O processo de decodificação é que determina os recursos usados na execução das instruções. Qualquer coisa que possa contribuir para a agilização desse processo é bem-vinda. Isso inclui projetar as instruções da forma mais regular possível, usando um tamanho único para todas elas, com o menor número de campos possível. Quanto menos formatos de instrução houver, melhor será, no que diz respeito à facilidade de decodificação. 1 A unidade MPIS mede a quantidade de instruções executadas por um processador a cada segundo, mas não mede a quantidade de trabalho executada pelo processador. Para entender esta questão, observe que uma instrução na máquina CISC realiza muito mais trabalho que uma instrução de uma máquina RISC. No entanto, se medirmos a performance em MIPS, a máquina RISC será sempre melhor, pois para o mesmo trabalho executa mais instruções, fato que pode não condizer com a realidade. 15

2.1.5 Paralelismo no Nível das Instruções Os arquitetos de computadores estão sempre sendo desfiados para melhorar cada vez mais a performance das máquinas que eles projetam. Uma das maneiras de se obter isso é fazendo com que os chips rodem cada vez mais rápido, aumentando a velocidade do clock, mas existe um limite tecnológico para isso, limite esse dependente do estado da arte da tecnologia disponível na época do projeto de nova máquina. Como conseqüência, os arquitetos de computadores voltam-se, em sua maioria, para o paralelismo (executando duas ou mais operações ao mesmo tempo) como forma de obter uma performance ainda melhor, para uma dada velocidade do clock. O paralelismo manifesta-se de duas maneiras: no nível das instruções e no nível do processador. No primeiro caso, o paralelismo é explorado dentro das instruções individuais, de maneira a conseguir que a máquina execute mais instruções por segundo. No segundo caso, vários processadores trabalham juntos na solução do mesmo problema. Cada uma das metodologias tem seus próprios métodos. 2.1.5.1 Execução em Pipeline Há muitos anos que se sabe que o maior gargalo para a velocidade de execução de instruções é o acesso à memória. Para tentar minimizar esse problema, as máquinas, desde o IBM Stretch (1959), foram projetadas com a capacidade de buscar antecipadamente instruções da memória, de maneira a encontrá-las já no processador quando chegar no momento de executá-las. Tais instruções eram armazenadas em um conjunto de registradores denominados buffer de pré-busca. Dessa maneira, quando uma instrução fosse necessária, ela poderia ser obtida diretamente do buffer de pré-busca, em vez de vir da memória, gastando muito mais tempo. Com efeito, a pré-busca divide a execução das instruções em duas partes: a busca e a efetiva execução. O conceito de pipeline leva essa estratégia bem mais além. Em vez de dividir e execução das instruções em apenas duas partes, o processamento em pipeline divide a execução de instruções em várias partes, cada uma das quais tratadas por um hardware dedicado exclusivamente a ela, sendo sua execução em paralelo. A figura abaixo ilustra um pipeline com cinco unidades, que recebem o nome de estágios. O estágio 1 busca a instrução da memória e a armazena em um buffer, até que chegue o momento de ela ser executada. No estágio 2, ocorre a decodificação da instrução, ou seja, a determinação de seu tipo e quais operandos serão necessários à sua execução. No estágio 3 ocorre a localização e a busca dos operandos que podem estar em registradores ou na memória. A execução propriamente dita tem lugar durante o estágio 4, quando em geral, os operandos passam pelo caminho de dados. Finalmente, durante o estágio 5 o 16

resultado do processamento dos operandos no caminho de dados é escrito em um registrador. E 1 E 2 E 3 E 4 E 5 Unidade de busca de instrução Unidade de decodificação de instrução Unidade de busca de operando Unidade de execução de instrução Unidade de escrita A figura abaixo mostra a operação do pipeline em função do tempo. Durante o primeiro ciclo de clock, o estágio 1 está trabalhando na instrução 1, buscando-a da memória. Durante o segundo ciclo de clock, o estágio 2 decodifica a instrução 1, enquanto o estágio 1 busca a instrução 2. Durante o terceiro ciclo de clock, o estágio 3 busca os operandos da instrução 1, o estágio 2 decodifica a instrução 2 e o estágio 1 busca uma terceira instrução. Durante o quarto ciclo de clock, o estágio 4 executa a instrução 1, o estágio 3 busca os operandos da instrução 2, o estágio 2 decodifica a instrução 3, e o estágio 1 busca uma quarta instrução. Finalmente, durante o quinto ciclo de clock, o estágio 5 escreve em um registrador o resultado da instrução 1, enquanto os demais estágios trabalham nas instruções subseqüentes. E1 E2 E3 E4 E5 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 1 2 3 4 5 6 1 2 3 4 5... 1 2 3 4 5 6 7 8 9 Tempo O Pipeline pode ser comparado a uma linha de produção de uma fábrica. Ex: a linha de produção de uma fábrica de tortas onde o preparo e a embalagem das tortas ocorram em ambientes separados. Supondo que o departamento responsável pela embalagem das tortas tenha uma esteira rolante com cinco trabalhadores. A cada 10 segundos, o trabalhador número 1 coloca uma embalagem vazia na esteira. A caixa chega ao trabalhador número 2, que coloca uma torta dentro dela. Um poço depois, a caixa chega ao trabalhador número 3, onde a caixa é fechada e lacrada. Após essa operação, a caixa chega ao trabalhador número 4, que coloca um rótulo nela. Finalmente, o trabalhador 17

número 5 retira a caixa da esteira, colocando-a em um contêiner que será despachado para o supermercado. Supondo que o ciclo da máquina da figura do pipeline seja de 2ns (nanosegundos), uma instrução leva 10ns para atravessar todos os seus cinco estágios. À primeira vista, com uma instrução gastando 10ns para ser executada, pode parecer que a máquina trabalhe a 100 MIPS (Milhões de Instruções Por Segundo), mas na verdade ela roda muito mais rápido que isso. Observe que a cada período do clock (2ns) uma nova instrução é executada, de maneira que a velocidade real da máquina é de 500 MIPS, e não de 100 MIPS. 2.1.5.2 Arquiteturas Superescalares Se um pipeline é bom, com certeza dois serão ainda melhor. É possível projetar um processador com dois pipelines, ambos baseados no pipeline de 5 estágios, como mostra a figura abaixo. E 1 E 2 E 3 E 4 E 5 Unidade de busca de instrução Unidade de decodificação de instrução Unidade de busca de operando Unidade de execução de instrução Unidade de escrita E 2 E 3 E 4 E 5 Unidade de decodificação de instrução Unidade de busca de operando Unidade de execução de instrução Unidade de escrita Uma única unidade de busca de instrução busca pares de instruções juntas e coloca cada uma delas em seu próprio pipeline, permitindo, portanto, a execução de instruções em paralelo. Para que seja possível a execução em paralelo dessas instruções, não pode haver conflito pela utilização de recursos durante a execução (os registradores são um exemplo desse tipo de recurso), e, além disso, o resultado de uma das instruções não pode depender da execução da outra. Da mesma forma que no caso de um único pipeline, o compilador precisa garantir que essas situações não venham a ocorrer (ou seja, o hardware não faz qualquer verificação de conflitos, dando resultados errados se as instruções executadas em paralelo não forem compatíveis), os conflitos devem ser detectados e eliminados durante a execução das instruções. Apesar de o processamento em pipeline, simples ou duplo, ser mais empregado nas máquinas RISC (o 386 e seus antecessores não utilizavam esse tipo de processamento), a partir do 486 a Intel passou a usar o pipeline em seus processadores. O 486 tinha um pipeline e o Pentium tinha dois pipelines de 5 estágios cada. Medições feitas mostraram que um Pentium executando um código 18

otimizado conseguia executar programas exatamente duas vezes mais rápido que o 486 com a mesma freqüência de clock. Esse ganho de velocidade pode ser atribuído ao segundo pipeline. A existência de quatro pipelines, apesar de conceitualmente possível, duplica o hardware necessário à sua implementação. Portanto, em vez de quatro pipelines, as máquinas de alta performance usam outra metodologia. A idéia básica é ter um único pipeline, com diversas unidades funcionais, conforme mostra a figura abaixo. O Pentium II tem uma estrutura similar à dessa figura. E 4 ULA Unidade de busca de instrução Unidade de decodificação de instrução Unidade de busca de operando ULA E 1 E 2 E 3 E 5 LOAD Unidade de escrita STORE Ponto Flutuante A idéia do processador superescalar traz implícito o fato de o estágio 3 poder distribuir instruções a uma velocidade consideravelmente mais alta que a capacidade do estágio 4 de executá-las. Se o estágio 3 distribui uma instrução a cada 10ns não mais que uma unidade funcional poderia estar ocupada ao mesmo tempo, impedindo, portanto, a implementação do processamento superescalar. Na verdade, a maioria das unidades funcionais do estágio 4 gasta bem mais de um ciclo de clock para executar, mais especificamente aquelas que acessam a memória ou que fazem cálculos que envolvam números em ponto flutuante. 2.1.6 Paralelismo no Nível do Processador A demanda de computadores cada vez mais rápidos parece não ter fim. Os astrônomos desejam simular o que ocorreu no primeiro microsegundo após o big- 19

bang, os economistas desejam modelar a economia mundial, os adolescentes desejam jogos interativos com imagens em 3 dimensões para jogar através da internet. À medida que os processadores vão ficando mais rápidos, seus projetistas começam a esbarrar em limitações de ordem física, como a velocidade da luz em fios de cobre ou em fibras ópticas, velocidade essa da ordem de 20 cm/nanosegundo. Ou seja, chega um ponto em que os projetistas não podem fazer muito mais no sentido de aumentar a velocidade de um processador. Além disso, quanto mais rápido for o chip, mais calor ele produz, criando um problema para dissipar esse calor gerado. O paralelismo na execução de instruções ajuda a aumentar a velocidade de execução, mas a operação de processadores em pipeline ou em superescalar melhora a performance entre cinco e dez vezes. Para obter ganhos da ordem de 50, 100, ou mais, a única maneira é projetar computadores com mais de um processador. 2.1.6.1 Computadores Matriciais A maioria dos problemas científicos trata com matrizes ou alguma outra estrutura de dados. A regularidade e a estrutura de tais programas fazem deles candidatos potenciais a ter a sua performance aumentada por meio de execução paralela. Um processador matricial é composto de um grande número de processadores idênticos, que executam a mesma seqüência de instruções sobre diferentes conjuntos de dados. O primeiro projeto de um processador matricial foi feito na Universidade de Illinois, e recebeu o nome de ILLIAC IV, alcançando a performance de 50 megaflops (milhões de instruções em ponto flutuante executadas por segundo). Unidade de Controle Processador Grade processador / memória de 8 x 8 Memória 20

2.1.6.2 Computadores Vetoriais Os processadores vetoriais se parecem muito com os processadores matriciais. A exemplo do processador matricial, o processador vetorial é muito eficiente na execução de uma seqüência de operações em pares de elementos de dados. Mas, ao contrário dos processadores matriciais, todas as operações aritméticas são realizadas em uma única ULA, que opera em pipeline. A Cray Research, empresa fundada por Seymour Cray, continua produzindo até hoje computadores baseados em processadores vetoriais. 2.1.6.3 Multiprocessadores Os elementos de processamento de qualquer processador matricial não são processadores independentes, na verdadeira acepção da palavra, uma vez que compartilham uma única unidade de controle. Um dos modelos de sistema multiprocessador é composto de vários processadores independentes, compartilhando a mesma memória, a exemplo de várias pessoas em uma sala de aula compartilhando o mesmo quadro-negro. Processador Processador Processador Processador Memória compartilhada Barramento Considerando que cada processador pode ler ou escrever em qualquer parte da memória, é necessário que as atividades dos vários processadores sejam coordenadas (por software), para evitar que a atividade de um processador atrapalhe a atividade de outro processador. Não é preciso muita imaginação para verificar que, se o sistema tiver um bom número de processadores rápidos, acessando constantemente a memória e usando o mesmo barramento, a possibilidade de conflitos aumenta muito. Os projetistas de sistemas multiprocessadores desenvolveram vários esquemas para resolver essa questão e aumentar a performance desses sistemas. Um dos projetos possui uma memória local para cada processador, que não pode ser acessada pelos outros processadores do sistema. 21

Memórias locais Memória compartilhada Processador Processador Processador Processador Barramento As memórias locais devem ser usadas para armazenar o código do programa em execução pelo processador além dos dados que não precisem ser compartilhados com os demais processadores. O acesso a essas memórias privadas não é feito através do barramento, reduzindo, portanto o tráfego sobre ele. 22

3 Organização de Sistemas Computacionais Na parte inferior da máquina virtual encontra-se o nível da lógica digital, o verdadeiro hardware do computador. A lógica digital situa-se bem na fronteira entre a ciência da computação e a engenharia elétrica. 3.1 Portas Lógicas e a Álgebra de Boole Os circuitos digitais podem ser construídos a partir de um pequeno número de elementos primitivos, elementos esses que podem ser combinados de várias maneiras diferentes. 3.1.1 Portas Lógicas Um circuito digital é uma estrutura que só admite a presença de dois valores lógicos. Em geral um sinal elétrico entre 0 e 1 volt representa um de tais valores e um sinal elétrico entre 2 e 5 volts representa o outro valor (por exemplo, o binário 1). As portas lógicas formam a base do hardware a partir da qual todos os circuitos digitais são construídos. Toda a lógica digital moderna baseia-se no fato de que um transistor pode operar como uma chave binária cujo tempo de comutação é extremamente pequeno. A figura A mostra um transistor bipolar (o círculo) inserido em um circuito eletrônico muito simples. Esse transistor tem três conexões com o mundo exterior: o coletor, a base e o emissor. Quando uma tensão de entrada V in estiver abaixo de um certo valor crítico, o transistor desliga, e passa a agir como uma resistência infinita. Isso faz com a saída do circuito, V out, assuma um valor próximo a V cc, uma tensão regulada externamente, cujo valor é quase sempre igual a +5 volts nesse tipo de transistor. Quando V in ultrapassar o tal valor crítico, o transistor comuta e passa a agir como um fio, fazendo com que V out seja conectado logicamente à terra (por convenção, 0 volt). O ponto fundamental é que, quando V in estiver no nível lógico baixo, V out estará no nível alto, e vice-versa. Portanto, esse circuito funciona como um inversor, convertendo um nível lógico 0 na entrada para o nível lógico 1 na saída, e um nível lógico 1 na entrada para um nível lógico 0 na saída. O circuito tem um resistor (representado pela linha serrilhada), cuja finalidade é limitar a quantidade de corrente drenada pelo transistor, para impedir que uma corrente muito alta venha a queimar o dispositivo. O tempo de chaveamento de um estado para outro é da ordem de poucos nanosegundos. 23

+Vcc +Vcc +Vcc Emissor V out V out V out V in V 1 V 1 V2 Base Coletor V 2 (a) (b) (c) Na figura B, dois transistores são ligados em série. Se tanto V1 quanto V2 estiverem no nível lógico alto, ambos os transistores vão conduzir e V out vai assumir o nível lógico baixo. Se qualquer uma das duas entradas estiver no nível baixo, o transistor correspondente a ela vai cortar, e a saída será alta. Em outras palavras, V out assumirá o nível lógico alto se, e só se, tanto V1 quanto V2 estiverem no nível alto. Na figura C, os dois transistores estão ligados em paralelo. Nessa configuração, se qualquer uma das entradas estiver no nível lógico alto, o transistor correspondente a ela vai conduzir, e jogar sua saída para a terra. Se ambas as entradas estiverem no nível baixo, a saída vai permanecer alta. Esses três circuitos, ou seus equivalentes, formam as três portas lógicas básicas, conhecidas como portas NOT, NAND e NOR, respectivamente. As portas NOT também são conhecidas como portas inversoras, ou inversor. É adotado como convenção associar o nível alto ao nível lógico 1, e o nível baixo ao nível lógico 0. Os símbolos usados para representar essas três portas lógicas aparecem na figura abaixo: A NOT NAND NOR AND OR A A A A X X X X B B B B X A X A B X A B X A B X A B X 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 (a) (b) (c) (d) (e) 24

As portas NAND e NOR precisam de dois transistores cada, enquanto as portas AND e OR precisam de três. Por essa razão, muitos computadores são baseados nas portas NAND e NOR em vez de sê-lo nas portas AND e OR, que são mais familiares. Todas as portas, exceto aporta inversora, podem ter mais de duas entradas, porém, na prática não se usa uma porta com mais de 8 entradas. 3.2 Circuitos Integrados As portas lógicas não são mais fabricadas e vendidas individualmente, mas em unidades conhecidas como Circuitos Integrados, muitas vezes chamadas de CIs ou chips. Um CI é um pedaço quadrado de silício, na qual algumas portas foram colocadas. Ao longo de todo o lado desses invólucros, existem pinos que podem ser inseridas em soquetes ou soldadas em placas de circuitos impressos. Cada pino dessas linhas está ligado à entrada ou à saída de alguma porta do chip, à alimentação (Vcc) ou à terra. Vcc 14 13 12 11 10 9 8 Ressalto 1 2 3 4 5 6 7 Terra (GND) O invólucro em geral possui um ressalto perto do pino 1 para orientar a contagem dos pinos. Decodificador O decodificador recebe na entrada um número de n bits, utilizando-o para selecionar exatamente uma de suas 2 n linhas de saída. 25

Somadores Não se pode imaginar um computador que não seja capaz de pelo menos somar números inteiros. Conseqüentemente, todo processador precisa ter um hardware para efetuar a adição de valores inteiros. A tabela-verdade para a soma de números inteiros de 1 bit é mostrada abaixo: A B Soma Vai-um (carry out) 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Esse circuito é conhecido como meio-somador, sendo só adequado para somar os bits de mais baixa ordem, pois não trata o bit vem-um. Para isto, existe o circuito somador completo. 1 Ex: + 0 1 1 1 1 e vai 1. + e vai 1. 1 26

A tabela verdade do somador completo é mostrada abaixo: A B Vem-1 (carry in) Soma Vai-1 (carry out) 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 27

Para construir um somador para somar, por exemplo, duas palavras de 16 bits, basta replicar 16 vezes o circuito do somador completo. O vai-1 de uma posição é usado como vem-1 da posição seguinte. Unidades Aritméticas Lógicas A maioria dos computadores tem um único circuito para realizar as operações AND, OR e soma, chamado Unidade Aritmética Lógica, ou ULA. O circuito abaixo pode calcular uma de quatro funções (A AND B, A OR B, NB ou A + B) dependendo de o valor das linhas de seleção do decodificador. 28

4 Circuitos Integrados Circuitos eletrônicos digitais são construídos com uma pastilha de material semicondutor, chamado silício. A pastilha de silício (também chamada chip) é muito pequena e frágil, portanto não tem como ser vendida. Além disso, não há como uma pastilha de silício ser soldada, uma vez que seus terminais são muito pequenos. Dentro de uma pastilha de silício de um circuito integrado há o equivalente a milhões de transistores. O núcleo do processador Pentium II, por exemplo, tem o equivalente a 7,5 milhões de transistores. Com o avanço tecnológico, tem sido possível a construção de pastilhas cada vez menores e com maior densidade, isto é, maior concentração de transistores. Isso se deve à diminuição das trilhas que compõem a pastilha de silício. Observe o detalhe de uma finíssima trilha de um processador 386, que mede 1 µm. Um mícron (µm) equivale a 0,000001 metro. Quanto menor a distância das trilhas da pastilha de silício, menos corrente é necessária para deslocar elétrons dentro das trilhas, o que significa: Que os elétrons chegam ao destino em menos tempo (ou seja, com maior velocidade). 29

Maior freqüência de operação (clock). Menos consumo elétrico. Menos produção de calor. Tensão de alimentação ( voltagem ) menor. A figura abaixo mostra um gráfico evolutivo da distância entre as trilhas das pastilhas de silício dos principais processadores para PCs lançados desde o 8088. 3 2,5 2 1,5 1 0,5 0 1979 / 8088 1982 / 286 1985 / 386DX 1986 / 386SX 1989 / 486DX 1991 / 486SX 1993 / 486DX2 1993 / Pentium (60 e 66 MHz) 1994 / 486DX4 1994 / Pentium (90 a 120 MHz) 1995 / Pentium (133 a 200 MHz) 1995 / Pentium Pro 1997 / Pentium MMX 1997 / Pentium II (Klamath) 1998 / Pentium II (Deschuts) 1998 / Celeron 1998 / Pentium II Xeon 1999 / Penitum III (Katmai) 1999 / Penitum III Xeon (Tanner) 1999 / Penitum III (Coppermine) 1999 / Penitum III Xeon (Cascades) 2000 / Pentium 4 2001 Itanium 2002 Mckinley Quanto mais recente a data de lançamento, mais avançada é a tecnologia de construção do processador. Note que uma data de lançamento recente ou uma tecnologia de construção mais avançada não significa um processador melhor. Por exemplo, o 486DX4 foi lançado em março de 1994 usando uma tecnologia de 0,6µm, enquanto o Pentium foi lançado um ano antes, usando uma tecnologia de 0,8µm. Apesar de ter sido lançado depois e usar uma tecnologia de construção mais recente, o 486DX4 é um processador de 4 a geração, enquanto que o Pentium é um processador de 5 a geração. As pastilhas de silícios de todos os processadores encontrados em PCs até hoje utilizam trilhas de alumínio. No futuro, os fabricantes passarão a utilizar outros materiais que apresentam melhor condutibilidade elétrica, especialmente o cobre. Com isso, os elétrons trafegarão ainda mais rapidamente, permitindo o processador atingir freqüências de operação (clocks) ainda mais elevadas. 30