“In mathematics you don't understand things. You just get used to them” (Em matemática você não entende coisas. Apenas se acostuma a elas” John von Neumann.
Neste ponto todos os leitores estão fartos de saber que os computadores modernos obedecem a mui falada “arquitetura de von Neumann”, que ainda não sabemos exatamente o que significa e sobre a qual paira alguma discordância exceto quanto ao fato de que ela foi proposta e descrita por John von Neumann em um documento conhecido hoje por “First Draft”. Neste documento, cujo título completo era “First Draft of a Report on the EDVAC”, manuscrito em uma viagem de trem entre Philadelphia e Los Alamos, von Neumann descreveu sua concepção – ainda incompleta – do que seria o primeiro computador a ser construído (ou pelo menos a primeira máquina a ser efetivamente denominada de computador, o EDVAC). A imagem da capa de uma de suas cópias, a pertencente a Arthur Burke, um dos colaboradores do autor e obtida no sítio da casa de leilões Christie’s, que a leiloou por US$ 2,880, é mostrada na Figura 1.
|
Figura 1: Capa do First Draft
|
Muito se menciona, se fala e se cita o First Draft. E, muitas das vezes, aquilo que se menciona, fala e cita não “conjumina”. Então, para dirimir minhas próprias dúvidas e me ilustrar sobre o assunto, decidi ler o documento. Mas ler mesmo, de cabo a rabo, tentando interpretar e entender as intenções de Von Neumann ao escrevê-lo.
O que foi muito bom pois, ao terminar, pelo menos um ponto eu havia esclarecido inquestionavelmente: salvo raras e eventuais exceções, a imensa maioria das pessoas que mencionam, falam e citam o First Draft jamais puseram as mãos nele. E, se puseram, é certo que não o leram. Ao menos não o leram inteiro. O que justifica a imensa confusão que se formou sobre o que, exatamente, vem a ser “arquitetura de von Neumann”.
O objetivo desta coluna e da seguinte será, então, esclarecer o assunto usando rigorosamente o texto original do First Draft como guia. Antes, porém, para que nossa troca de ideias seja feita com base em um vocabulário comum, é preciso estabelecer certos conceitos.
Arquitetura ou organização?
O primeiro passo é nos pormos de acordo com exatamente o que vem a ser “arquitetura de computadores” e em que ela difere do conceito semelhante, porém distinto, de “organização de computadores” já que, além de se entrelaçarem, são frequentemente confundidos.
|
Figura 2: Capa do livro de Tanenbaum sobre Organização de Computadores
|
Há diversas definições e tentativas de distingui-los, todas bastante semelhantes, mas a que me pareceu mais esclarecedora foi a que encontrei no sítio < http://www.comphist.org/computing_history/new_page_7.htm > “History of computing”, que diz literalmente: “computer architecture is a view of the whole design with the important characteristics visible to programmer, computer organization is how features are implemented with the specific building blocks visible to designer or constructor” (arquitetura de computadores é uma visão global do projeto com as características importantes do ponto de vista do programador [enquanto] organização de computadores tem a ver com a forma pela qual os recursos são implementados e agrupados em blocos de montagem, visíveis ao projetista ou montador). E, mais adiante, após citar os principais componentes de um “computador de programa armazenado”, encerra o assunto com esta frase definitiva: “Computer organization defines the ways in which these components are interconnected, and controlled” (Organização de computadores define as formas pelas quais estes componentes são interconectados e controlados).
Em suma: tudo o que diz respeito às “partes que compõem um computador” e “como se conectam” pertence ao domínio da organização de computadores (veja, na figura 2, a capa do livro de Andrew Tanembaun sobre organização de computadores que ilustra – muito bem – este conceito), enquanto o que estiver relacionado com o funcionamento da máquina e seu encadeamento de instruções, ou seja, aquilo que diz respeito ao programador e seus programas, tem a ver com o campo da “arquitetura”.
O terceiro conceito é o de “computador de programa armazenado”, ou “Stored program computer”. Eu não sou um grande fã da Wikipedia quando se trata de definir conceitos técnicos e científicos, porém neste caso particular vou abrir uma exceção já que < http://en.wikipedia.org/wiki/Von_Neumann_architecture > a conceituação exposta na edição em inglês não somente é clara, correta e concisa como se encaixa muito bem em meus propósitos. Diz ela: “A stored-program digital computer is one that keeps its programmed instructions, as well as its data, in read-write, random-access memory (RAM). Stored-program computers were an advancement over the program-controlled computers of the 1940s, such as the Colossus and the ENIAC..” (um computador digital de programa armazenado é aquele que mantém as instruções de seu programa, assim como os dados, na memória (RAM) de leitura e escrita. Computadores de programas armazenados constituíram um avanço em relação aos computadores controlados por programas dos anos 1940, como o Colossus e o ENIAC...).
Será com estas ideias em mente que nos reportaremos ao “First Draft”.
Para isto usaremos trechos extraídos de uma tradução feita por mim de alguns itens selecionados do referido documento (mencionando os itens de acordo com a numeração originalmente atribuída a eles por von Neumann).
O First Draft é riquíssimo e contém joias como a primorosa justificativa de von Neumann para o uso interno do sistema binário e do emprego de válvulas eletrônicas na nova máquina em lugar de relés, a descrição de um tipo interessantíssimo de memória denominado “de linha de retardo”, o detalhamento da escolha cuidadosa das operações que a unidade aritmética deveria realizar e a descrição e justificativa de todo o conjunto de instruções (“instruction set”) da máquina proposta. Foi difícil resistir à tentação de citá-los todos mas, por amor à clareza, me restringirei apenas àqueles que, a meu ver, dizem respeito ao tema desta coluna.
Se você quiser conferir a tradução consultando diretamente o documento original, pode encontrá-lo < http://virtualtravelog.net.s115267.gridserver.com/wp/wp-content/media/2003-08-TheFirstDraft.pdf > aqui no formato PDF (e aproveite para fazer uma viagem virtual no intrigante sítio que a contém, o < http://www.virtualtravelog.net/archives/ > Virtual Travelog). Quanto à tradução feita por mim, muito provavelmente eu a publicarei, comentada, algum dia, já que fiquei vivamente impressionado com todo o conteúdo do First Draft e dificilmente resistirei à tentação de voltar a abordá-lo (só não sei ainda em que termos isto será feito).
Porém, aqui e nos itens seguintes, você encontrará apenas alguns trechos selecionados e pertinentes exclusivamente ao tema desta coluna.
Então vamos adiante.
As partes do EDVAC
Diz von Neumann no First Draft sobre seu EDVAC:
2.0 - PRINCIPAIS SUBDIVISÕES DO SISTEMA; 2.2 ... uma parte aritmética central do dispositivo provavelmente terá que existir e constituirá a primeira parte específica: CA; 2.3 ... controle central... formarão a segunda parte específica: CC; 2.5 ...a memória total constitui a terceira parte específica do dispositivo, M; 2.7...Estes órgãos formam a entrada, a quarta parte específica I; 2.8 ... a saída, a quinta parte específica O.
Então, de acordo com o que foi concebido por von Neumann, o EDVAC, a máquina descrita no First Draft, deveria ser constituída por cinco partes, ou componentes:
- Unidade Aritmética, ou CA;
- Unidade de Controle, ou CC;
- Memória, ou M;
- Unidade de entrada, ou I; e
- Unidade de saída, ou O.
Agora dá para entender porque Andrew Tanenbaum, em seu livro “Organização Estruturada de Computadores”, editado pela Prentice Hall do Brasil, cuja capa da edição americana aparece na Figura 2, define “Máquina de von Neumann” (mas não “arquitetura de von Neumann”) como aquela que “possui cinco partes básicas: a memória, a unidade lógico-aritmética, a unidade de controle de programa e os equipamentos de entrada e saída”. Afinal, é exatamente assim que von Neumann subdivide o EDVAC em seu First Draft e o livro de Tanenbaum é sobre organização (não sobre arquitetura) de computadores.
Porém, voltando ao First Draft: em diversos pontos do documento, considerando que as finalidades de algumas partes se complementam ou suplementam, o próprio von Neumann afirma:
2.6 Estas três partes específicas, CA, CC (juntas, C) e M correspondem aos neurônios associativos de um sistema nervoso humano. Falta discutir o equivalente ao sistema sensorial, ou aferente, e os neurônios motores, ou eferentes. Estes são os órgãos de entrada e saída ...
Ou seja: von Neumann admite considerar CA e CC como um componente único, assim como menciona como uma única parte os órgãos de entrada e saída.
|
Figura 3: Esquema da “arquitetura de von Neumann segundo a Wikipedia
|
Assim, considerando como componentes únicos a) o conjunto de unidades complementares CA e CC, que vieram a constituir essencialmente o que hoje é a Unidade Central de Processamento dos computadores modernos, e b) as unidades suplementares I e O, que, juntas, formam o componente de Entrada/Saída, também pode-se considerar lícito definir máquina de von Neumann como a que é constituída por apenas três unidades básicas, como fazem diversos outros autores, inclusive a própria Wikipedia na página acima citada (repare no esquema da Figura 3, em cuja legenda original consta claramente “Esquema da arquitetura de von Neumann. A Unidade de Controle e a Aritmética e lógica formam os principais componentes da Unidade Central de Processamento”):
- Unidade de Processamento;
- Memória;
- Unidade de Entrada/Saída.
Esta subdivisão também é aceitável já que há, no próprio First Draft, indicações de que von Neumann achava razoável reagrupar assim as cinco “partes” em que originalmente subdividiu o EDVAC. E, de fato, diz Mário Monteiro em seu livro “Introdução à Organização de Computadores”, editora LTC, 5ª edição (inicialmente referindo-se ao ENIAC): “... o primeiro computador surgiu com os mesmos componentes necessários para se realizar com sucesso as etapas de processamento de dados: Processador e Sistema de Entrada e Saída”. E acrescenta: “Logo em seguida John von Neumann aperfeiçoou de forma considerável aquela arquitetura inicial, acrescentando um elemento (componente) fundamental: a memória”.
Há, no entanto, um problema: subdividir máquinas nas partes que a compõem é uma tarefa que cabe ao campo da organização, jamais ao da arquitetura computadores. O que ficou bem claro quando examinamos as definições de ambos os conceitos.
Portanto, é lícito chamar de “máquina de von Neumann” tanto um computador que possui as cinco partes listadas acima como o que se subdivide nas três listadas logo após. Mas não me parece correto basear nisto o conceito de “arquitetura de von Neumann”.
Isto porque, por mais que esta subdivisão tenha sido claramente estabelecida por von Neumann em seu First Draft, ela tem a ver com o conceito de “organização” e não de “arquitetura” dos computadores. Podemos mesmo estar de acordo que ela corresponde à organização dos computadores que aderem à arquitetura de von Neumann, mas definitivamente ela não pode ser usada para definir a arquitetura propriamente dita, que não tem a ver com subdivisões, mas com as funcionalidades de cada componente.
Em suma: tanto aquilo que é descrito acima como possuindo as cinco partes mencionadas como o que é logo após citado como sendo constituído das três partes listadas pode definir o que vem a ser uma “máquina de von Neumann” mas, certamente, não define a “arquitetura de von Neumann”.
Isto posto e considerado, penso que estamos de acordo no que vem a ser uma “máquina de von Neumann”. Que, segundo o ponto de vista, tanto pode ser aquela constituída de cinco partes, a saber, Unidade Aritmética, ou CA; Unidade de Controle, ou CC; Memória, ou M; Unidade de entrada, ou I; e Unidade de saída, ou O ou então aquela formada por três partes, a saber: Unidade de Processamento; Memória; e Unidade de Entrada/Saída, podendo-se escolher uma ou outra a gosto do freguês, já que ambas estão de acordo com o que foi descrito no First Draft.
Mas então o que viria a ser a tal “arquitetura de von Neumann”?
Bem, isto veremos na próxima – e, garanto, última – coluna.
Que, prometo, fechará a série.
Até lá