Arquitetura de von Neumann
A Arquitetura de von Neumann (de John von Neumann, pronunciado Nóimánn) é uma arquitetura de computador que se caracteriza pela possibilidade de uma máquina digital armazenar seus programas no mesmo espaço de memória que os dados, podendo assim manipular tais programas. Esta arquitetura é um projeto modelo de um computador digital de programa armazenado que utiliza uma unidade de processamento (CPU) e uma de armazenamento ("memória") para comportar, respectivamente, instruções e dados.[1][2][3][4][5][6]
A máquina proposta por Von Neumann reúne os seguintes componentes:
- Uma memória;
- Uma unidade aritmética e lógica (ALU);
- Uma Unidade de Controle (CU), cuja função é a mesma da tabela de controle da Máquina de Turing universal: buscar um programa na memória, instrução por instrução, e executá-lo sobre os dados de entrada.
Todos os elementos dessa arquitetura são alinhados da estrutura hardware do CPU, assim o sistema pode realizar todas as suas atividades sem apresentar erros no desempenho. Von Neumann é continuamente influenciado pela evolução tecnológica, tendo peças mais modernas inseridas. Cada um dos elementos apresentados é realizado à custa de componentes físicos independentes, cuja implementação tem variado ao longo do tempo, consoante a evolução das tecnologias de fabricação, desde os relés electromagnéticos, os tubos de vácuo (ou válvulas), até aos semicondutores, abrangendo os transistores e os circuitos eletrônicos integrados, com média, alta ou muito alta densidade de integração (MSI - medium scale, LSI - large scale, ou VLSI - very large scale integration), medida em termos de milhões transistores por pastilha de silício.
As novas interações entre os elementos exibem tempos típicos que também têm variado ao longo do tempo, consoante as tecnologias de fabricação. Atualmente, as CPUs processam instruções sob controle de relógios cujos períodos típicos são da ordem de 1 nanosegundo, ou seja, segundos. As memórias centrais têm tempos típicos de acesso da ordem da dezena de nanosegundos. As unidades de entrada e saída exibem tempos típicos extremamente variáveis, mas que são tipicamente muito superiores à escala do nanosegundo. Por exemplo, os discos rígidos exibem tempos da ordem dos milissegundos (milésimo de segundo, ). Outros dispositivos periféricos são inertes, a não ser que sejam ativados por utilizadores humanos: por exemplo, um teclado só envia informação para o computador após serem pressionada as devidas teclas. Assim, este dispositivo se comunica com a CPU eventualmente e, portanto, exibe tempos indeterminados.
O modelo (ou arquitetura) de Von Neumann foi concebido a partir de 1946, quando John von Neumann e sua equipe desenvolveram um novo projeto de “computador de programa armazenado”. Projetado pela IAS (Princeton Institute for Advanced Studies), este computador foi largamente difundido, influenciando muitos projetos subsequentes de outras máquinas.
Descrição
[editar | editar código-fonte]As primeiras máquinas de computação tinham programas fixos. Alguns computadores muito simples ainda usam este projeto, quer para fins de simplicidade ou de formação. Por exemplo, uma calculadora de mesa (em princípio) é um programa de computador fixo. Ele pode fazer a matemática básica, mas não pode ser usado como um processador de texto ou um emulador de console de videogame. Alterar o programa de uma máquina de programa fixo exige religação, reestruturação ou reprojetar a máquina. Os primeiros computadores não eram tão "programados", como eles foram "desenhados". Era um processo trabalhoso, começando com fluxogramas e cédulas de papel, seguido de desenhos detalhados de engenharia e, em seguida o processo muitas vezes penoso fisicamente de religação e reconstrução da máquina. Podendo levar três semanas para criar um programa no ENIAC e começar a trabalhar.[1]
A ideia do computador de programa armazenado, mudou tudo isso: um computador que pelo projeto inclui um conjunto de instruções e pode armazenar na memória um conjunto de instruções (programa) que detalha o cálculo. Um projeto de programa armazenado também permite que os programas possam se modificar durante a execução. Uma motivação precoce para uma instalação desse tipo foi a necessidade de um programa para incrementar ou modificar a porção do endereço das instruções, o que tinha que ser feito manualmente em projetos adiantados. Isto tornou-se menos importante quando registradores de índice e endereçamento indireto foram as características usuais da arquitetura da máquina. Código de Automodificação foi amplamente caído em desuso, já que normalmente é difícil de entender e depurar, bem como sendo ineficiente em pipelining processador moderno, e esquemas de cache.
Em grande escala, a capacidade de tratar as instruções como os dados é o que faz montadores, compiladores e outras ferramentas de programação automatizada possíveis. Pode-se "escrever programas que escrevem programas." Em uma escala menor, instruções de I / O da máquina intensiva, como o BitBlt primitivos usados para modificar imagens em um display bitmap. Foi mostrado posteriormente que estas instruções podem ser implementadas de forma eficiente por "na compilação fly" ("just-in-time de compilação) de tecnologia, por exemplo, geração de código de programas, uma forma de código de auto-modificação que se manteve popular.
Há desvantagens para a concepção de von Neumann. Além do gargalo de von Neumann descrito abaixo, alterar o programa pode ser bastante prejudicial, quer por acidente ou design. Em alguns projetos simples computador de programa armazenado, um programa com defeito pode danificar outros programas, ou o sistema operacional, possivelmente levando a uma pane no computador. Proteção de memória e outras formas de controle de acesso.
O matemático Alan Turing, que tinha sido alertado para um problema de lógica matemática pelas palestras de Max Newman na Universidade de Cambridge, escreveu um artigo em 1936 intitulado On Computable Numbers, com um aplicativo para o Entscheidungsproblem, que foi publicado nos Anais da Sociedade Matemática de Londres. Nela, ele descreveu uma máquina hipotética que ele chamou de "máquina de computação universal", e que agora é conhecida como a "máquina de Turing universal". A máquina hipotética tinha um armazenamento infinito (memória, na terminologia de hoje instruções e dados). O engenheiro alemão Konrad Zuse, independentemente escreveu sobre este conceito em 1936. John von Neumann tornou-se familiarizado com Turing, quando ele era professor visitante na Universidade de Cambridge em 1935 e também durante o ano que Turing passou na Universidade de Princeton, em 1936-1937.
Von Neumann estava envolvido no Projeto Manhattan no Los Alamos National Laboratory, que exigiu enormes quantidades de cálculo. Isso o levou para o projeto ENIAC, no verão de 1944. Lá ele se juntou ao debate em curso sobre a concepção deste computador de programa armazenado, o EDVAC. Como parte desse grupo, ele se ofereceu para escrever uma descrição do mesmo. O termo "arquitetura de von Neumann" surgiu a partir de uma publicação de von Neumann, o primeiro esboço de um relatório sobre o EDVAC datado de 30 de junho de 1945, que incluía ideias de Eckert e Mauchly. O esboço estava inacabado quando seu colega Herman Goldstine que circulou somente com o nome de von Neumann sobre ele, para a consternação de Eckert e Mauchly. O documento foi lido por dezenas de colegas de von Neumann nos Estados Unidos e Europa, influenciando a próxima rodada de modelos de computador.
Ambas publicações de von Neumann e Turing descreveram um programa armazenado para computadores, mas a publicação de von Neumann alcançou maior circulação e a arquitetura do computador que ele expôs ficou conhecida como a "arquitetura de von Neumann". Von Neumann foi, então, o criador da arquitetura de programa armazenado, mas Jack Copeland considera que é "historicamente inadequado" referir-se a eletrônica de programa armazenado e computadores digitais como "máquinas de von Neumann"
Gargalo de Von Neumann
[editar | editar código-fonte]O canal de transmissão de dados entre a CPU e a memória leva ao gargalo de von Neumann, a troca de dados limitada (taxa de transferência) entre a CPU e a memória em relação à quantidade de memória. Na maioria dos computadores modernos, a troca de dados entre o processador e a memória é muito menor do que a taxa com que o processador pode trabalhar. Isso limita seriamente a velocidade eficaz de processamento, principalmente quando o processador é exigido para realizar o processamento de grandes quantidades de dados. A CPU é constantemente forçada a esperar por dados que precisam ser transferidos para, ou a partir da, memória. Como a velocidade da CPU e o tamanho da memória têm aumentado muito mais rapidamente que a taxa de transferência entre eles, o gargalo se tornou mais um problema, um problema cuja gravidade aumenta com cada geração de CPU.[7]
O termo "gargalo de von Neumann" foi cunhado por John Backus em sua palestra Award 1977 ACM Turing. Segundo Backus:
Certamente deve haver uma maneira menos primitiva de se fazer grandes alterações na memória, do que empurrando um grande número de palavras, de um lado a outro, do gargalo de von Neumann. Não é somente um gargalo literal para o tráfego de dados, mas, o mais importante, é um gargalo intelectual que nos tem mantido atados a um pensamento de "uma palavra por vez" em vez de encorajar-nos a pensar em termos unidades conceituais maiores. Assim, a programação é basicamente o planejamento e detalhamento do enorme tráfego de palavras através do gargalo de von Neumann e grande parte desse tráfego não diz respeito aos dados propriamente ditos, e sim a onde esses dados são encontrados.[8]
O problema de desempenho pode ser aliviado (até certo ponto) por diversos mecanismos. Colocando uma memória cache entre o processador e a memória principal, proporcionando caches separados com os caminhos de acesso separado para dados e instruções (a chamada arquitetura Harvard Modificada), utilizando um algoritmo preditor de salto e lógica. O problema também pode ser contornado usando computação paralela, por exemplo a arquitetura NUMA, cuja abordagem é geralmente utilizada em supercomputadores.
Primeiros computadores de arquitetura von Neumann
[editar | editar código-fonte]A Primeira Ideia (primeiro rascunho - First Draft) descrevia um design de computador que foi usado por muitas universidades e corporações para construir seus computadores.[9] Dentre esses computadores, somente o ILLIAC e o ORDVAC possuíam instruções compatíveis.
- Manchester Small-Scale Experimental Machine (SSEM), Apelidado de "Baby" (Universidade de Manchester, Reino Unido) fez sua primeira temporada de sucesso de um programa armazenado em 21 de junho de 1948.
- EDSAC (Universidade de Cambridge, Reino Unido) foi o primeiro computador eletrônico prático de programa armazenado (Maio de 1949)
- Manchester Mark 1 (Universidade de Manchester, Reino Unido) Desenvolvido a partir do SSEM (Junho de 1949).
- CSIRAC (Council for Scientific and Industrial Research) Australia (Novembro de 1949).
- EDVAC (Ballistic Research Laboratory, Computing Laboratory at Aberdeen Proving Ground 1951).
- ORDVAC da Universidade de Illinois, Maryland (completado em novembro de 1951[10]).
- IAS machine da Universidade de Princeton (jan. de 1952).
- MANIAC I do Laboratório cientifico Los Alamos (mar. 1952).
- ILLIAC da Universidade de Illinois, (set. 1952).
- BESM-1 em Moscow (1952).
- AVIDAC do Laboratório Argonne National (1953).
- ORACLE do Laboratório Oak Ridge National (jun. 1953).
- BESK em Stockholm (1953).
- JOHNNIAC da Corporação RAND (jan. 1954).
- WEIZAC em Rehovoth (1955).
- DASK em Denmark (1955).
- PERM em Munich (1956?).
- SILLIAC em Sydney (1956).
- ↑ a b «Uma Arquitetura Concreta para a Máquina de von Neumann» (PDF). Consultado em 14 de dezembro de 2014. Cópia arquivada (PDF) em 12 de setembro de 2015
- ↑ «Arquitetura de Von Neumann e os Computadores Modernos» (PDF). Consultado em 14 de dezembro de 2014. Cópia arquivada (PDF) em 10 de outubro de 2016
- ↑ Eric Verhulst, Beyond the Von Neumann Machine, Springer US, pp 217-238, 2003, doi:10.1007/0-306-48727-6_11 ISBN 978-1-4020-7392-2 Online ISBN 978-0-306-48727-9 (em inglês)
- ↑ Daniel S. Poznanovic, The Emergence of Non-von Neumann Processors, Springer Berlin Heidelberg, pp 243-254, 2006 ISSN 0302-9743 doi:10.1007/11802839_32 ISBN 978-3-540-36708-6 Online ISBN 978-3-540-36863-2 (em inglês)
- ↑ Gerard O’Regan, John von Neumann, Springer London, pp 205-208, 2013 doi:10.1007/978-1-4471-5340-5_44 ISBN 978-1-4471-5339-9 Online ISBN 978-1-4471-5340-5
- ↑ Beyond Mathematics von Neumann’s Scientific Activity in the 1940s and 1950s: John von Neumann and Twentieth Century Science, pp 121-165, 2009, doi:10.1007/978-3-7643-9896-5_5 ISBN 978-3-7643-9895-8 Online ISBN 978-3-7643-9896-5 (em inglês)
- ↑ «Organização e Arquitetura de Computadores I» (PDF). Consultado em 14 de dezembro de 2014. Cópia arquivada (PDF) em 15 de setembro de 2015
- ↑ Dijkstra, Edsger W. «E. W. Dijkstra Archive: A review of the 1977 Turing Award Lecture». Consultado em 12 de outubro 2013. Cópia arquivada em 26 de fevereiro de 2020
- ↑ Electronic Computer Project, consultado em 14 de dezembro de 2014, cópia arquivada em 22 de novembro de 2014 (em inglês)
- ↑ James E. Robertson (1955), Illiac Design Techniques (PDF), Digital Computer Laboratory, University of Illinois at Urbana-Champaign report number UIUCDCS-R-1955-146 Arquivado em 3 de março de 2016, no Wayback Machine. (em inglês)
Bibliografia
[editar | editar código-fonte]- Prof. Dr. Theo Ungerer, Multithreaded-von-Neumann-Architekturen, Vieweg+Teubner Verlag, pp 317-345, 1993 doi:10.1007/978-3-322-94688-1_7 ISBN 978-3-519-02128-5 Online ISBN 978-3-322-94688-1 (em alemão)
- Wolfgang Händler, On classification schemes for computer systems in the Post-Von-Neumann-Era, Springer Berlin Heidelberg , pp 439-452, 1975 doi:10.1007/3-540-07141-5_246 ISSN 0302-9743 ISBN 978-3-540-07141-9 Online ISBN 978-3-540-37424-4 (em inglês)
- Hélène Collavizza, Dominique Borrione, Specifying the Micro-program Parallelism for Microprocessors of the Von Neumann style, Springer London, pp 153-170, 1991 ISSN 1431-1682 doi:10.1007/978-1-4471-3544-9_9 ISBN 978-3-540-19659-4 Online ISBN 978-1-4471-3544-9 (em inglês)
- Robert A. Iannucci, A Dataflow/von Neumann Hybrid, Springer US, pp 49-91, 1990 ISSN 0893-3405 doi:10.1007/978-1-4613-1543-8_3 ISBN 978-1-4612-8827-5 Online ISBN 978-1-4613-1543-8 (em inglês)
- P. Hines, Can a Quantum Computer Run the von Neumann Architecture?, Springer Berlin Heidelberg, pp 941-982, 2011, ISSN 0075-8450 doi:10.1007/978-3-642-12821-9_14 ISBN 978-3-642-12820-2 Online ISBN 978-3-642-12821-9 (em inglês)