¿Cómo funciona la computación actual?: funcionamiento de la arquitectura de Von Neumann

¿Cómo funciona la computación actual?: funcionamiento de la arquitectura de Von Neumann
Sin comentarios Facebook Twitter Flipboard E-mail

Von Neumann describió el fundamento de todo ordenador electrónico con programas almacenados. Describía, a diferencia de como pasaba anteriormente, como podía funcionar un ordenador con sus unidades conectadas permanentemente y su funcionamiento estuviese coordinado desde la unidad de control (a efectos prácticos es la CPU). Aunque la tecnología ha avanzado mucho y aumentado la complejidad de la arquitectura inicial, la base de su funcionamiento es la misma y probablemente lo seguirá siendo durante mucho tiempo. El artículo viene acompañado de una representación gráfica del funcionamiento.

Antes de entrar en los detalles de las unidades tenemos que conocer lo siguiente:

  • Registros: es el lugar donde se almacenan temporalmente los datos que están en movimiento para procesarlos. En la representación de la imagen del principio podéis ver que son los registros.

  • Buses: son las uniones entre las distintas unidades, la memoria y los periféricos.

Unidad de proceso central (CPU)

Es la unidad encargada de controlar y gobernar todo el sistema que comprende una computadora. La CPU consiste en un circuito integrado formado por millones de transistores, que está diseñado para poder procesar datos y controlar la máquina. Como ya sabéis, es un factor clave para la potencia de la computadora. La CPU dispone de dos unidades en su interior: la unida de control y la unidad aritmético-lógica.

Unidad de control

Unidad de control

La unidad de control se encarga de leer las instrucciones (de los programas almacenados en la memoria) y se encarga de enviar las ordenes a los componentes del procesador para que ejecuten las instrucciones.

El proceso empieza cuando llega una instrucción al registro de instrucciones (llega como una cadena de bits con distintas partes, referidas a la propia instrucción y a los datos que se usarán). Posteriormente el decodificador interpreta la instrucción a realizar y como deben de actuar los componentes del procesador para llevarla a cabo. Esta acción se realiza mediante el secuenciador que envía micro-órdenes marcadas por el reloj (que genera pulsos de forma constante, se suele expresar su velocidad en gigahercios o GHz, para los procesadores actuales).

Unidad Aritmético Lógica (ALU)

Unidad aritmético lógica

La unidad aritmético lógica es la encargada de realizar todas las operaciones aritméticas (sumas, multiplicaciones...) y lógicas (comparaciones).

Esta unidad puede tener distintos diseños, el de la imagen superior muestra el diseño más básico (donde el acumulador vuelve a usarse en la operación), en la actualidad lo normal es que el acumulador no se mezcle con los registros de entrada.

El funcionamiento con el diseño que estamos analizando (el básico) comienza cuando le llega al registro de entrada un dato (una cadena de bits que representan un número), posteriormente el circuito operacional (en la imagen se representa como "ALU" y coloreado azul) y se procesa junto al contenido del acumulador y posteriormente se deposita de nuevo en el acumulador. Repitiendo esta acción se generan los cálculos. Este proceso se ve claramente en la representación que hay más abajo.

Memoria principal

Tabla de memoria

La memoria principal en la arquitectura inicial era directamente la RAM, pero esto ha evolucionado y se han añadido memorias caché e implementado algoritmos que predicen que datos vamos a usar más frecuentemente.

La memoria RAM es bastante sencilla, en comparación con la CPU, se podría decir que es una tabla, que contiene la dirección (o lugar) donde está cierto dato y el contenido del propio dato. La memoria dispone de un registro de direcciones (RDM) y un registro de intercambio de memoria (RIM o registro de datos). En el registro de direcciones se almacena la dirección en la que se almacenará o leerá un dato, y en el registro de intercambio de memoria se almacena ese dato leído o que se almacenará.

Cuando hablamos de direcciones de memoria a muchos os sonará de los "punteros" de C, y es por esto que es esencial conocer la arquitectura de Von Neumann antes de aprender a programar en ciertos lenguajes que actúan a más bajo nivel.

La unidad de control contiene el registro contador de programa, que contiene la dirección de memoria de la siguiente instrucción, que se incrementa tras realizar una instrucción y así va recorriendo la memoria y ejecutando el programa.

Buses

Todos estos elementos se comunican entre si a través de buses, ya sea para manejar las acciones a realizar por la máquina o para mover datos. Hay tres tipos de buses.

El bus de datos perite el intercambio de datos (ya sean instrucciones o datos) con el resto de elementos de la arquitectura. Es decir, mediante el bus de datos la unidad de control recibe las instrucciones y la ALU los datos desde la memoria, al igual que también los envían por este medio.

El bus de instrucciones transmite las direcciones de memoria que van a ser usadas desde la CPU, para poder seleccionar los datos que serán usados.

El bus de control es el que transporta las ordenes generadas por la CPU para controlar los diversos procesos de la máquina.

Funcionamiento de la arquitectura

Para ver cómo funciona la arquitectura he creado una representación documentada del proceso.

Este diseño de la arquitectura, como ya he comentado, es el básico (con acumulador como registro de entrada) y el ancho de los datos es de 8 bits. Las instrucciones están formadas por dos bloques de 4 bits, los primeros para instrucciones y los últimos para la dirección de la memoria.

Siempre que se usa en una instrucción un número está destinado a la dirección de memoria, donde se usa el verdadero número que se usará para una operación.

Actualmente se usan anchos de 32, 64 o 128 bits en computadoras, y no tiene porqué seguir el mismo patrón. Seguidamente voy a exponer varios patrones que se pueden dar, a fin de completar un poco más la representación que es muy simple al disponer solo de 8 bits.

# Tal como aparece en la representación
  
        0111 0011
  
        +------+------+
        | 0111 | 0011 |
        +------+------+
        |      | Dirección de memoria a usar
        | Instrucción
  
  
# Ejemplo con 16 bits y varios registros
    
        0011 1010 1001 0101
  
        +------+--------+--------+
        | 0011 | 101010 | 010101 |
        +------+--------+--------+
        |      |        | Registro de entrada 2
        |      | Registro de entrada 1
        | Instrucción
  
  
# Ejemplo con 32 bits, varios registros y lugar a almacenar resultado
  
        0011 1010 1001 0101 0011 0110 1110 0101
  
        +----------+----------+----------+----------+
        | 00111010 | 10010101 | 00110110 | 11100101 |
        +----------+----------+----------+----------+
        |          |          |          | Dirección de destino del resultado
        |          |          | Registro de entrada 2
        |          | Registro de entrada 1
        | Instrucción

Nota: cada procesador es distinto, por lo que quizás alguno de los ejemplos sea verídico o similar a alguno en uso, pero no tiene porqué.

Como había dicho, aquí tenemos la simulación documentada de como funciona la arquitectura de Von Neumann, que podéis ver con mayor tamaño también. (Es más cómodo pasar al siguiente paso pulsando enter).

Resumen

Aunque es un poco difícil de comprender a la primera es esencial conocer las bases de la computación cuando uno se dedica a la programación, y así llegar a comprender como afecta nuestros programas a la interacción del sistema. Aunque actualmente muchos lenguajes nos abstraen de todo esto, pero eso ya sería entrar en arquitectura del software.

Comentarios cerrados
Inicio