sexta-feira, 15 de fevereiro de 2013

Von Neumann X Harvard

Harvard Mark-I, primeiro computador a usar a arquitetura Harvard.
Há um bom tempo desejava falar um pouco sobre as diferentes arquiteturas de computadores, em especial a arquitetura Von Neumann e a Harvard. Às vezes ouvimos falar sobre estas arquiteturas, mas pouco sabemos sobre elas, ou quais os seus impactos em nossos projetos. Afinal de contas, o que são estas arquiteturas?
A primeira arquitetura que devemos falar é sobre a arquitetura Von Neumann1, que recebeu este nome de seu criador, o matemático e pioneiro cientista da computação, John von Neumann. Ele teria feito um artigo intitulado First Draft of a Report on the EDVAC2, onde ele descrevia uma máquina que, entre outras coisas, descrevia uma memória onde tanto dados quanto instruções eram armazenados. Esta se tornou a característica principal da arquitetura Von Neumann. Ou seja, nesta arquitetura, dados e instruções (código) são armazenados na mesma memória, pois há um compartilhamento do mesmo barramento. Isto permitia que alguns programas se atualizassem, por exemplo. No entanto, por compartilhar o mesmo barramento, uma instrução não poderia ser buscada na memória ao mesmo tempo que um dado, o que reduz o throughput (velocidade de transferência de dados) entre CPU e memória. Isto limita seriamente a velocidade de processamento quando a CPU precisa realizar um processamento baixo em grande quantidade de dados. Este problema acabou sendo conhecido como o gargalo de Von Neumann (Von Neumann bottleneck).
Em contrapartida, a arquitetura Harvard3 possui dois barramentos, um para dados e outro para instruções. Há várias vantagens nesta arquitetura e por isto ela é preferida em nossos dias. Em primeiro lugar, por separar dados de instruções, o problema do gargalo de Von Neumann é evitado. Não só isto, mas as memórias de dados e instruções podem ser de tipos diferentes (Flash, RAM), ter tamanhos diferentes (8, 16, 32 bits)... Uma limitação, no entanto, é que esta arquitetura não permite que o programa se atualize, ou que um programa seja executado a partir da memória de dados.
Embora tenhamos estas duas definições, na prática, o que temos hoje é uma variação de cada uma destas arquiteturas para contornar os problemas apresentados. Por exemplo, hoje se usa mais a arquitetura Harvard Modificada, que permite o acesso à memória de instruções como se fosse memória de dados. Aqui ela ainda se diferencia da arquitetura Von Neumann por fornecer caminhos distintos no acesso a estas memórias.
Vamos então agora dar uma olhada nos diagramas em bloco de alguns microcontroladores de cada arquitetura. O primeiro é o microcontrolador PIC18F45504, que apresenta uma arquitetura Harvard. Observe que há um barramento de dados e outro de instruções:


Não são todos os blocos que acessam o barramento de instruções, e não é todos os blocos que acessam o barramento de dados. Agora compare com o microcontrolador MSP430F1695 da Texas, definido como seguindo a arquitetura Von Neumann6:


Observe que apesar de possuir dois barramentos, um de dados (MDB, memory data bus) e outro de endereços (MAB, memory address bus), todos os blocos possuem acesso a estes dois barramentos. Vemos portanto uma diferença na construção dos dois microcontroladores.
Na prática, a questão envolve velocidade de processamento. O programador provavelmente não verá diferenças entre as duas arquiteturas, mas há um caso onde esta diferença pode ser percebida: no acesso à memória de instruções. O programador que pretenda fazer atualização de seu firmware à distância, por exemplo, terá que buscar um microcontrolador cuja arquitetura seja ou Von Neumann ou Harvard Modificada. No caso de uma arquitetura Harvard Modificada, ele ainda terá que checar quais as formas apresentadas pelo microcontrolador para o acesso à memória de instruções.

Referências

1. Arquitetura Von Neumann na Wikipedia: http://en.wikipedia.org/wiki/Von_Neumann_architecture
2. Artigo original pode ser lido em http://qss.stanford.edu/~godfrey/vonNeumann/vnedvac.pdf.
3. Arquitetura Harvard: http://en.wikipedia.org/wiki/Harvard_architecture
4. Datasheet PIC18F4550: http://ww1.microchip.com/downloads/en/devicedoc/39632e.pdf 5. Datasheet MSP430F169: http://www.ti.com/lit/ds/symlink/msp430f169.pdf
6. Wiki Texas: http://en.wikibooks.org/wiki/Embedded_Systems/Texas_Instruments_MSP430_microcontrollers

Nenhum comentário:

Postar um comentário

Você também poderá gostar de