A arquitetura de von Neumann

Author Photo
5:29 pm - 07 de maio de 2011

Execução sequencial e desvios

Sobre a forma pela qual as instruções deveriam ser executadas, diz von Neumann em seu First Draft:

2.4 qualquer dispositivo que deva executar uma longa e complexa sequência de operações… deve ter uma memória considerável. Pelo menos as seguintes fases de sua operação requererão uma memória: b) As instruções que governam um problema complicado podem constituir um material considerável … Este material deve ser lembrado.

[singlepic id=3122 w=320 h=240 float=]

Interpretando: ao dizer que “este material deve ser lembrado” von Neumann explicita que deve ser mantido na memória, pois ao longo de todo o First Draft ele usa o verbo “lembrar” com o significado de “manter na memória” (da máquina), pois jamais se dissociou da analogia do EDVAC (mostrado na Figura 3 já montado e funcionando no Ballistics Research Laboratory do exército Americano) com o “sistema nervoso dos animais superiores” que cita no início do documento. E o “material” a que ele se refere em 2.4.b é o conjunto de instruções “que governam um problema”. Portanto não há dúvida quando ao fato de que von Neumann concebeu o EDVAC como o primeiro computador de programa armazenado. O que é enfatizado adiante quando ele menciona:

14.1 …a função de CC é receber estas ordens, interpretá-las e então ou executá-las ou estimular apropriadamente os órgãos encarregados desta execução… As ordens que serão recebidas por CC provêm de M, isto é, do mesmo local onde o material numérico é armazenado.

Neste ponto é importante notar que ao longo de todo o First Draft von Neumann usa preferentemente o termo “ordens” para se referir a “instruções”. E neste parágrafo deixa claro que a memória usada para armazená-las era a mesma usada para dados: “o mesmo local onde o material numérico é armazenado”.

Mas como von Neumann espera que estas instruções sejam executadas? Quando analisa os diferentes tipos de instruções que a máquina deve obedecer (ou seja, o resumo de seu “conjunto de instruções” ou “instruction set“) afirma:

14.1 … As ordens que CC recebe recaem naturalmente em uma destas quatro classes: … (c) ordem para CC alterar sua própria conexão com M para um ponto diferente de M, com o objetivo de obter de lá a ordem seguinte a ser executada; …

Uma leitura atenta do parágrafo acima mostra que von Neumann concebeu o EDVAC para executar sequencialmente instruções armazenadas em posições sucessivas de memória, do contrário não haveria necessidade de “alterar a conexão para um ponto diferente de M para obter a ordem seguinte”. Isto ficará perfeitamente claro adiante. Aqui, o importante é enfatizar que a conexão poderia ser alterada “para um ponto diferente” por efeito de uma “ordem” (ou seja, a sequência de execução podia ser mudada pelo próprio programa). É verdade que, como logo se verá, ele considerava que isto ocorreria apenas em “ocasiões especiais”. Mas, seja como for, fica claro que o programa poderia alterar sua própria ordem de execução. Pois, continuando com o First Draft:

14.3 … em princípio CC deve ser instruída, após cada ordem, sobre onde encontrar a próxima ordem a ser executada. Vimos, entretanto, que por si mesmo isto não é o mais desejável, devendo ser reservado para ocasiões especiais, enquanto que durante a rotina normal CC deve obedecer a ordenação em sequência cronológica em que as ordens aparecem naturalmente… … Deve haver, entretanto, ordens disponíveis para serem usadas nas ocasiões excepcionais acima referidas, para instruir CC a transferir sua conexão para qualquer outro ponto desejado de M… esta ordem de transferência deve ainda providenciar que, após receber e executar a ordem … CC deve restabelecer sua conexão [com o ponto de onde recebeu a ordem anterior] e a partir daí continuar a aceitar ordens na sequência cronológica natural. Ou, alternativamente, …  CC deve manter esta conexão e continuar aceitando ordens de lá, na natural sequência cronológica

Basta analisar o parágrafo acima para perceber que nele von Neumann descreve ? tanto quanto eu saiba, pela primeira vez ? aquilo que os programadores classificam como “desvios”, ou seja, mudança no fluxo das instruções comandadas pelas próprias instruções (em resumo: a possibilidade de um programa buscar na memória instruções fora “da natural sequência cronológica” baseado em ações comandadas pelo próprio programa, mais especificamente nos resultados de operações intermediárias de natureza aritmética ou lógica, que configurariam as tais “ocasiões especiais).

E os desvios são a essência da programação moderna.

Resumindo: pelo que se lê no First Draft, von Neumann concebeu uma máquina que, além de armazenar as instruções na mesma memória usada para dados, as executava sequencialmente de acordo com a ordem em que elas apareciam nesta memória mas que dispunha de instruções capazes de alterar esta ordem para um “ponto” diferente da memória, continuar a execução a partir de lá, ou retornar para o ponto anterior.

Newsletter de tecnologia para você

Os melhores conteúdos do IT Forum na sua caixa de entrada.