next up previous
Next: Programação de computadores Up: John von Neumann Previous: Contexto histórico

Arquitetura de computadores

 

Todas as máquinas construídas até o início do projeto do EDVAC eram programadas através de meios externos como cartões perfurados, fitas perfuradas, painéis, cabos de conexão, etc, e dispunham de muito pouca memória para armazenar os dados e os resultados intermediários dos cálculos. Mesmo assim, a construção do ENIAC, cuja capacidade de armazenamento era de 20 números decimais de dez dígitos (cerca de 700 bits), consumiu mais de 17000 válvulas eletrônicas. Um fator decisivo para viabilizar o projeto de uma nova máquina foi a idéia de Eckert de utilizar linhas de atraso para implementar elementos de memória de custo muito mais baixo do que utilizando válvulas. Com esta idéia, tornou-se possível pensar numa máquina com dezenas ou centenas de milhares de bits.

Como resultado das reuniões com a equipe de projeto e da frqüente troca de correspondência, von Neumann ficou encarregado de produzir um documento descrevendo os detalhes da organização da nova máquina. Como indica o próprio título First Draft of a Report on the EDVAC [42], este documento nunca passou da fase de rascunho, tendo sido publicado na íntegra somente vários anos mais tarde, sob forma ligeiramente editada [48].3

Existe bastante controvérsia quanto a quem teria sido o primeiro a propor o conceito de programa armazenado (vide, por exemplo, [33,34,38,53]). O trabalho teórico de Alan Turing [40], com o qual von Neumann estava familiarizado, já indicava esta possibilidade. Por outro lado, existem algumas referências a este assunto, bastante obscuras e ambíguas, em algumas fontes anteriores ao documento produzido por von Neumann, além das afirmações posteriores de Eckert, Mauchly e outros. Não há dúvida de que a idéia de programa armazenado estava ``no ar" e é bastante provável que tenha sido sugerida por mais de uma pessoa ou nascido no meio de discussões sobre o novo projeto. Apesar da notoriedade desta controvérsia, não nos parece que a sua importância seja mais do que simbólica. Independentemente de quem tenha sido primeiro a sugerir a idéia de programa armazenado na memória, o fato é que o documento redigido por von Neumann é a primeira descrição minuciosa e quase completa de uma arquitetura de um computador deste tipo, com repertório de operações que permitiriam utilização plena dos seus recursos. O documento é resultado, sem dúvida, das várias reuniões e das trocas de correspondência, mas o próprio fato de ter sido von Neumann, consultor do projeto, encarregado da sua redação indica a importância e o grau da sua contribuição. De acordo com depoimentos de alguns dos seus colaboradores, o projeto lógico do computador deve-se principalmente a von Neumann, enquanto que Eckert e Mauchly foram os principais responsáveis pelo projeto de circuitos de alta velocidade, linhas de atraso e outros detalhes físicos. Todos eles deram contribuições fundamentais ao projeto.

O relatório de von Neumann nunca foi completado. O texto contém muitas referências a seções que estavam planejadas mas que não foram escritas, principalmente no que se refere à programação (mas vide a seção 4). Mesmo assim, a leitura do relatório é muito instrutiva. Nota-se que não existia naquela época uma linguagem adequada para descrever muitos dos conceitos que estavam sendo introduzidos, o que dá ao texto um certo sabor ``medieval" sob o ponto de vista da Computação. Além disto, os interesses de von Neumann incluíam sistemas neurais de McCulloch e Pitts (vide seção 5), assim que há uma tendência de explicar os vários dispositivos do computador em termos de analogia com o sistema nervoso. Por outro lado, é surpreendente a riqueza de idéias, muitas das quais continuam válidas até hoje. Von Neumann separa claramente o conceito de arquitetura lógica do computador da sua implementação física. Apesar da hipótese de que linhas de atraso seriam utilizadas para implementar a memória da máquina, toda a descrição é feita em termos de blocos lógicos e suas interconexões. A própria divisão do projeto em unidades de controle, aritmética, memória e de entrada e saída é precursora de todos os projetos posteriores. Na realidade, quase todos os conceitos ainda nos parecem familiares.

As decisões de projeto apresentam justificativas, se possível, quantitativas, como por exemplo, o comprimento da palavra de 32 bits, o tamanho da memória de 2048 ou 8196 palavras, a decisão de construção de dispositivos aritméticos seriais. O repertório de instruções é suficiente para implementação de cálculos com as quatro operações fundamentais, de controle de execução (seleção e iteração), de subrotinas. A profundidade de análises é demonstrada por vários pormenores. Um exemplo é a idéia de operandos imediatos em instruções. Há, também, uma análise dos problemas introduzidos por cálculos com número finito de dígitos, utilizando representação com ponto fixo. Algumas decisões de von Neumann podem parecer estranhas ou equivocadas. Um exemplo é a distinção das palavras que representam dados das que representam instruções4 o que dificulta a sua manipulação.

O relatório de von Neumann, apesar de incompleto, teve uma divulgação muito grande e tornou-se um paradigma de projeto para muitas máquinas de primeira geração. O interesse despertado entre instituições de pesquisa e empresas foi tão grande que a Escola Moore organizou, em 1946, um curso sobre a arquitetura do EDVAC (vide, por exemplo, [54]). A maior parte das palestras foi apresentada por membros originais da equipe de projeto (Eckert, Mauchly, Goldstine e von Neumann) apesar de eles não participarem mais da construção da máquina. Um exemplo da importância da influência exercida pelo projeto é a construção da máquina EDSAC5 na Universidade de Cambridge, por Maurice Wilkes que participou do curso. O EDSAC foi o primeiro computador controlado por programa armazenado que entrou em funcionamento (1949). O seu projeto, apesar de mais modesto, aproveitou muitas das idéias do EDVAC, fato este realçado pela semelhança do nome.

Deve-se mencionar que a máquina final que foi construída e entrou em operação somente em 1951, no Laboratório de Pesquisas Balísticas, era bastante diferente daquela descrita no relatório de von Neumann, além de ter sido modificada várias vezes durante a sua vida útil, de 1951 a 1962. Mais detalhes sobre estes aspectos podem ser encontrados nos trabalhos de Godfrey e Hendry [17], Knuth [24] e Williams [54]. Segundo Goldstine,6 von Neumann foi contrário a algumas modificações introduzidas no projeto. Um exemplo interessante é o formato final das instruções. De acordo com o projeto original descrito no relatório redigido por von Neumann, o EDVAC teria instruções com um endereço. Assim, operações aritméticas seriam precedidas, quando necessário, por instruções de carga do primeiro operando no acumulador e seguidas por instruções de armazenamento do resultado na memória. Na versão final do EDVAC, cada instrução podia ter até quatro endereços: dois para os operandos, um para o resultado e um para indicar a instrução a ser executada a seguir. Von Neumann era de opinião que este formato era muito anti-econômico. Uma grande parte das arquiteturas de hoje demonstra que von Neumann tinha razão nesta discussão que pode ser considerada a precursora das discussões entre as tendências RISC e CISC.7

Com o fim da guerra, em 1945, von Neumann iniciou gestões para a construção de um outro computador que seria utilizado para aplicações científicas em geral. Em função do seu prestígio científico, ele conseguiu convencer a direção do IAS a abrigar o projeto, apesar da conhecida orientação desta instituição para a pesquisa pura. Von Neumann conseguiu também o apoio da empresa RCA que acabava de estabelecer um laboratório de pesquisa na Universidade de Princeton. A pricipal colaboração da RCA seria na construção de memória a ser baseada em tubos iconoscópicos, semelhantes aos tubos de televisão. O empreendimento do IAS recebeu também o apoio do Exército e da Marinha americanos.

O projeto foi descrito num documento fundamental composto de duas partes. O projeto lógico está apresentado na primeira parte escrita por Burks, Goldstine e von Neumann [10], intitulada Preliminary Discussion of the Logical Design of an Electronic Computing Instrument. O nível da descrição lógica é mais alto do que o do relatório sobre o EDVAC, e utiliza uma linguagem mais moderna. As operações aritméticas são discutidas em grande detalhe, incluindo problemas de arredondamento. Contrariamente ao EDVAC, tendo em vista as características de memória (40 iconoscópios em ligação paralela, um para cada bit da palavra), as operações sobre os 40 bits seriam executadas em paralelo. Há uma demonstração de que a operação de soma de dois números de 40 bits produziria, em média, cinco ``vai-um". Existe também uma discussão completa de mecanismos de entrada e saída. É notada a necessidade de relocação de instruções para que possam ocupar quaisquer posições de memória bem como o problema de dar início no sistema a partir de um dispositivo de entrada. Finalmente, é discutida a utilização de redundância para deteção de falhas nas unidades lógicas e outros dispositivos.

Por outro lado, o documento descarta a utilização de representação de números com ponto flutuante que estava sendo proposta então para outras máquinas. A justificativa é bastante elaborada, alegando um desperdício maior de memória e o fato de que a programação das operações com ponto fixo, mantendo em separado um fator de escala, não seria muito complicada. Certamente, este é um ponto no qual a avaliação dos autores não foi correta, se bem que a introdução desta facilidade complicaria bastante o projeto da unidade aritmética.

Os documentos relativos ao projeto do IAS tiveram divulgação maior ainda do que a descrição incompleta do projeto do EDVAC. Conjuntamente, constituem a inspiração para a arquitetura de quase todos os projetos de computadores subseqüentes daquela época, tanto no meio acadêmico quanto na indústria, originando então o termo arquitetura de von Neumann. Entre os exemplos mais conhecidos podem ser citados EDSAC de Cambridge, SEAC do National Bureau of Standards, ORDVAC e ILLIAC da Universidade de Illinois, JOHNNIAC8 da Rand Corporation. A influência continuou, especialmente nas empresas que passaram a atuar nesta área, notadamente a IBM e a UNIVAC. A história desta influência foi descrita, entre outros, por Gruenberger [22] e Rosen [34].

Uma expressão que tornou-se comum nos meios computacionais, com uma certa conotação negativa, é o gargalo de von Neumann.9 Esta expressão parece ter sido usada pela primeira vez por John Backus [7], em 1977, em sua palestra de recepção do Prêmio Turing da ACM, intitulada Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. Neste trabalho, Backus critica o fato de que, mais de 30 anos depois da sua introdução, as arquiteturas de von Neumann ainda eram dominantes e tinham uma enorme influência sobre o paradigma imperativo de linguagens de programação mais utilizadas, impedindo o desenvolvimento de outros paradigmas. Na sua opinião, as abordagens aplicativa ou funcional à programação seriam mais adequadas para o futuro e as tendências de pesquisa em arquitetura deveriam acompanhar esta idéia. A expressão usada por Backus tornou-se bastante popular e passou a denotar de maneira genérica o fato de que a eficiência de processamento das máquinas com a concepção introduzida por von Neumann é limitada por problemas de comunicação entre a memória e outras unidades. É interessante notar que no documento que descreve o EDVAC, o próprio von Neumann utiliza a palavra ``gargalo'' quando comenta as dificuldades de projeto e funcionamento da memória.10

Dentro do princípio geral de utilização de componentes eletrônicos, houve algumas tentativas de ruptura com os conceitos da arquitetura de von Neumann. Um exemplo notável é a arquitetura a fluxo de dados,11 proposta no fim da década de 1960 no MIT e na Universidade de Stanford, que seria mais adequada para o modelo aplicativo proposto por Backus. Apesar de conceitualmente muito elegante, a sua realização física provou ser pouco eficiente, não passando de alguns projetos acadêmicos. Um conjunto de artigos dedicados a este assunto pode ser encontrado em [3].

Propostas verdadeiramente inovadoras têm surgido apenas mais recentemente; uma descrição muito superficial pode ser vista em [14]. Uma destas propostas é o conceito de computação molecular introduzido por Leonard M. Adleman [1,2]. Nesta proposta, moléculas de DNA12 são utilizadas para codificar problemas combinatoriais e uma solução é obtida através de métodos laboratoriais que permitem simular algumas operações com estas codificações. Adleman utilizou o exemplo do problema de caminhos hamiltonianos para um grafo de sete vértices e 14 arestas. O trabalho laboratorial levou cerca de sete dias, mas demonstrou a viabilidade da proposta quando aplicada a este tipo de problemas, devido ao enorme grau de paralelismo obtido. Não está clara a possibilidade de utilizar esta idéia para construção de computadores de propósito geral, se bem que é apresentada em [2] uma maneira de simular memória num computador molecular.

Uma outra proposta de arquitetura inovadora é a computação quântica sugerida, entre outros, por David Deutsch [12]; uma descrição mais acessível pode ser encontrada em [27]. Nesta proposta, o fato de que, pelo princípio de superposição, um sistema quântico pode estar simultaneamente em mais de um estado, também permite obter um grau muito alto de paralelismo. Um exemplo de problema, computacionalmente difícil com métodos clássicos, que poderia ser resolvido de maneira eficiente com esta formulação é o da fatoração de números compostos apresentado por Peter W. Shor [37]. Não está claro, por enquanto, se a proposta de computação quântica é praticamente viável e se seria possível a sua utilização para idealizar computadores que não estivessem restritos apenas a algumas classes de problemas. Entretanto, já foi testada com sucesso, num pequeno protótipo, a utilização de técnicas quânticas para o problema de distribuição confiável de chaves criptográficas (vide, por exemplo, [8]).

Pode-se afirmar, portanto, que a estrutura lógica introduzida nos projetos do EDVAC e da máquina do IAS constitui o princípio de funcionamento de computadores digitais até hoje, apesar do progresso tecnológico que nos separa daquela época. Na realidade, não parece ser provável que os conceitos básicos da arquitetura de von Neumann sejam abandonados num futuro próximo. Esta é a opinião, por exemplo, de David A. Patterson [30], um dos cientistas que mais contribuíram para a concepção de modernos circuitos integrados.

Deve-se notar finalmente que, apesar da ênfase do trabalho de von Neumann na parte de projeto lógico dos computadores, ele fez algumas incursões na sua parte eletrônica. Tanto na descrição do EDVAC quanto na da máquina do IAS, são discutidos vários detalhes técnicos referentes às opções de implementação de memória existentes então: linhas de atraso e iconoscópios. No primeiro projeto, foram escolhidas as linhas de atraso pois os iconoscópios não eram considerados suficientemente confiáveis ainda. No segundo projeto, foi feita opção pelos iconoscópios que passaram por alguns aperfeiçoamentos. Um outro exemplo do interesse de von Neumann pelos aspectos eletrônicos é um trabalho escrito em 1954 [45] sobre o uso de capacitância e indutância não lineares para implementação de circuitos lógicos. Com base neste trabalho, a IBM, da qual von Neumann era então consultor, obteve uma patente concedida em 1957.


next up previous
Next: Programação de computadores Up: John von Neumann Previous: Contexto histórico
Tomasz Kowaltowski
8/18/1997