Cargando...
 
Imprimir

Arquitectura de Von Neumann y arquitectura Harvard

Image
Hoy en día tenemos bastante aceptado que el "corazoncito" de un ordenador es el procesador (CPU), íntimamente ligado a la memoria principal.

No obstante, no siempre fue así en la historia de la computación y los primeros computadores. A ésta forma de organizar el funcionamiento de los ordenadores le llamamos "Arquitectura de Von Neumann" por el matemático John Von Neumann, que la describió en los años 50 para el desarrollo del computador EDVAC(external link)... y básicamente, ha aguantado hasta hoy.

No es la única forma de construir ordenadores. Hay otra manera, empleando dos memorias separadas, a la que llamamos "Arquitectura Harvard", por ser la que se utilizó en el ordenador Harvard Mark I(external link), de la universidad de Harvard.

Mucho ha llovido desde que John Von Neumann? publicó en 1945 un memorandum titulado First Draft of a Report on the EDVAC.

Según parece, Von Neumann no plasmó una idea totalmente original, pues con anterioridad, ya hablaban de ella otros investigadores, como John Presper Eckert o John William Mauchly, sin embargo, esa manera de construir ordenadores ha llegado hasta nuestros días íntimamente ligada a su nombre.

La idea nos es muy familiar: básicamente, consiste en utilizar un procesador que sea capaz de leer y escribir en una memoria, en la cual se almacenan una serie de órdenes o instrucciones para ese procesador y también los datos necesarios para realizar esas órdenes... estamos hablando... ¡de un programa!

En efecto, hoy nos resulta familiar, sin embargo, con anterioridad a los años 50 debemos tener en cuenta que el concepto de programa era muy distinto.

En los 40...
Los ordenadores de los años 40 eran máquinas capaces de realizar cálculos sobre una gran cantidad de datos de entrada, pero esos cálculos no estaban almacenados completamente en memoria. Dependían, en parte o totalamente de cablear circuitos
Por aquel entonces, ya existían algunos computadores -u ordenadores, o como los quieras llamar-. Su misión fundamental era hacer gran cantidad de cálculos... pero en general, siempre los mismos cálculos, sobre un montón de datos de entrada distintos.

Ya sabemos que eran ordenadores lentos y pesados... pero para la época suponían todo un alarde tecnológico. Se acababa de "inventar" una nueva disciplina: la electrónica digital... es decir, la electrónica que mediante unos componentes que trabajaban con valores discretos, eran capaces de realizar operaciones aritméticas y lógicas... Se habían construito todo tipo de circuitos que eran capaces de sumar, restar, etc... utilizando la electricidad para representar números.

Aprovechando esos circuitos se construyeron los primeros ordenadores, que no eran (a la vista de hoy en día) sino calculadoras gigantes. Combinando varios de esos circuítos digitales aritméticos y lógicos se podía realizar cálculos bastante complejos... incluso repetirlos muchas veces para distintos datos, obteniendo enormes tablas de resultados... eso es, en cierto modo un "programa".... esas enormes calculadoras se podían "programar" para hacer grandes tablas de cálculos... y cuando terminasen se podían reutilizar para realizar otras tablas con otros cálculos distintos... todo ello de manera más o menos automática.

El problema es que ese "programa" no estaba en un disco duro como hoy en día... El programa consistía en recombinar los circuitos... es decir... reordenarlos. Si para programar un cálculo había que hacer primero una suma y luego una resta era necesario reordenar los cables que salían de un circuito sumador para que entraran en un circuito restador. Casí casi... me atrevería a decir que aquellas máquinas no eran exactamente programables, en el sentido en que lo entendemos hoy, sino reconfigurables. Sus circuitos podían reutilizarse pero a costa de reordenar los cables para cada nuevo cálculo.

Eso llevaba muchos días de planificación y pruebas cada vez que había que "programar" un nuevo cálculo. Cuenta la leyenda que para la operatoria del ordenador ENIAC, a mediados de los 40, seis operadoras-programadoras con conocimientos y habilidades específicos estaban encargadas de estas labores, y parte de su trabajo consistía en esa reordenación de circuitos, cableándolos al estilo de las viejas centralitas de teléfono.

Von Neumann no fue el único ni el primero en poner de manifiesto esta arquitectura, sin embargo, es el nombre que ha trascendido
Los datos de entrada y los resultados de salida de ese rudimentario programa cableado se almacenaban en algún tipo de memoria (tarjetas perforadas, etc)... pero el "programa" no estaba realmente almacenado... el programa (o al menos una buena parte) dependía del recableado de los circuitos.

En ese sentido, ya estaba claro que el siguiente paso: no tener que recablear. Era obvio que lo siguiente por hacer tenía que pasar por almacenar de alguna manera una secuencia de operaciones que llevaran a la resolución de los cálculos... una forma de utilizar los circuitos aritméticos y lógicos en secuencia, uno tras otro... según correspondiera para obtener los cálculos deseados. El truco debía ser, sin duda, activar un circuito dándole unos datos de entrada, y almacenar los datos de salida temporalmente para que fueran los datos de entrada de otro circuito, en pasos bien definidos... en efecto... eso es un programa.

La idea pues, de la arquitectura de Von Neumann es esta: utilizar una sola memoria, en la cual se almacene ese programa en forma de instrucciones (codificadas numéricamente, desde luego), acompañadas de la localización de los operandos o datos necesarios para llevar a cabo esa instrucción. La localización de los operandos, es decir, el lugar donde deben guardarse los valores y los resultados también estará en la misma memoria.

La idea ha evolucionado hasta nuestros días con el mismo esquema básico, aunque lógicamente, con un nivel de complejidad mucho mayor.

En la wikipedia podemos ver éste esquema, que representa la idea de esa arquitectura:

Arquitectura de Von Neumann
Arquitectura de Von Neumann


(Fuente: wikipedia(external link))

Simple en su concepción: una memoria principal que contiene tanto instrucciones y referencias a los operandos (el programa) como los propios operandos (los datos).

Por supuesto, hoy en día, el esquema se ha ido concretando con los componentes funcionales de una CPU moderna: una unidad de control que lee las instrucciones y los datos de la memoria principal y organiza el trabajo del resto de los componentes de la CPU, una unidad aritmético-lógica (ALU), que concentra todos los circuitos que realizan operaciones aritméticas y lógicas, así como una serie de registros (almacenes de datos en el interior de la CPU) que sirven como almacenes temporales de datos para las operaciones que hace la ALU y sus resultados, y otras tareas comununes, como saber por dónde se va ejecutando el programa (Registro contador de programa -IP: Instruction Pointer-). También es necesaria una comunicación con el mundo exterior ("el mundo real")... esquematizada con los sistemas de Entrada/Salida capaces de traer y llevar datos desde y hacia los dispositivos periféricos.

Pero bueno... Hablemos de la otra alternativa: la arquitectura Harvard.

Está claro que se hacía necesario almacenar un programa en forma de una secuencia de instrucciones, pero a diferencia de la arquitectura de Von Neumann, en la arquitectura Harvard se propone que el programa esté totalmente separado de los datos con los que trabaja: es decir, el programa en una memoria, y los datos en otra memoria independiente.

Arquitectura Harvard
Arquitectura Harvard

(Fuente: wikipedia(external link))

Harvard
Recibe el nombre por el ordenador Harvard Mark I, desarrollado en esa universidad de Massachussetts por Howard Aiken?. Electromecánico y con relés, tomaba por un lado los datos de cintas de cartón perforadas y por otro las instrucciones, también con perforaciones en una cinta de cartón.
Es una idea... pero plantea algunos problemas en su construcción y su rendimiento. Por un lado, hay que duplicar los sistemas de comunicación entre la CPU y la memoria, lo cual hace más complejo su diseño... pero por otro, y más importante, es que las memorias de hoy en día no son demasiado rápidas si comparamos su funcionamiento con la CPU. Es decir, llevar o traer cosas desde y hacia la memoria es bastante más lento que realizar una operación de la CPU.

En la arquitectura de von Neumann se producen en la CPU una cierta ralentización debido a que instrucciones desde la memoria junto con los datos deben pasar por un único canal (el bus de memoria). A este efecto se le conoce como "el cuello de botella de Von Neumann".

La arquitectura Harvard puede evitarlo en cierto modo, pero su mayor complejidad sólo compensa cuando el flujo de instrucciones y de datos es más o menos el mismo. Por eso no es ampliamente utilizada en ordenadores de propósito general. Sin embargo, sí se utiliza en algunos casos para construir procesadores de señal (DSP(external link))... unos circuitos que realizan el tratamiento digital de una señal (por ejemplo, audio o vídeo), realizando cálculos una y otra vez sobre las muestras que componen la señal.

En resumen... dos formas distintas de construir ordenadores: utilizando una única memoria para datos e instrucciones, o bien, dos memorias separadas e independientes: una para datos y otra para instrucciones.


Ultima edición por vic .
Página última modificacion en Lunes 03 de Septiembre, 2012 17:00:09 CEST.


¿Dónde estoy?

Estás en La tecla de ESCAPE, un sitio web personal en el que nos gusta hablar de algoritmos, metodología de la programación, personajes de informática, tecnología, ingeniería del software, internet, y cualquier otra tontería que se nos ocurra.
Leer más / Términos de uso (ToS)